diff --git a/.actrc b/.actrc new file mode 100644 index 00000000..78a62465 --- /dev/null +++ b/.actrc @@ -0,0 +1,20 @@ +# Act configuration file for Nitro CLI project + +# This configures act to use appropriate container images and settings + +# Use Ubuntu image for both Ubuntu and macOS (since act can't run real macOS) + +-P ubuntu-latest=catthehacker/ubuntu:act-latest +-P macos-latest=catthehacker/ubuntu:act-latest + +# Set container architecture for M1 Macs + +--container-architecture linux/amd64 + +# Use .gitignore to respect ignored files + +--use-gitignore + +# Default to verbose output for better debugging + +-v diff --git a/.github/workflows/generate-nitro-module.yml b/.github/workflows/generate-nitro-module.yml deleted file mode 100644 index 44cac158..00000000 --- a/.github/workflows/generate-nitro-module.yml +++ /dev/null @@ -1,344 +0,0 @@ -name: Generate Nitro Module - -permissions: - contents: write - packages: write - actions: write - -on: - pull_request: - branches: [main] - paths: - - 'src/**' - - '.github/workflows/test.yml' - - '.github/workflows/release.yml' - - 'package.json' - - 'bun.lock' - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -jobs: - lint-and-format: - name: Lint and Format - runs-on: ubuntu-latest - outputs: - bun-cache-key: ${{ runner.os }}-bun - steps: - - name: Checkout Repo - uses: actions/checkout@v4 - - - name: Setup Bun.js - uses: oven-sh/setup-bun@v2 - with: - bun-version: latest - - - name: Cache npm dependencies - id: bun-cache - uses: actions/cache@v4 - with: - path: ~/.bun/install/cache - key: ${{ runner.os }}-bun-${{ hashFiles('**/bun.lockb') }} - restore-keys: | - ${{ runner.os }}-bun- - - - name: Install npm dependencies (bun) - run: bun install - - - name: Lint Code - run: bun lint - - module-generation: - name: Module Generation - needs: lint-and-format - runs-on: macOS-15 - strategy: - matrix: - args: - [ - '--skip-example', - '--module-dir test-module', - '--skip-install', - ] - pm: ['bun', 'yarn', 'npm'] - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - steps: - - uses: actions/checkout@v4 - - - name: Configure Git - run: | - git config --global user.name "GitHub Actions Bot" - git config --global user.email "actions@github.com" - - - name: Setup Bun.js - uses: oven-sh/setup-bun@v2 - with: - bun-version: latest - - - name: Cache npm dependencies - id: bun-cache - uses: actions/cache@v4 - with: - path: ~/.bun/install/cache - key: ${{ needs.lint-and-format.outputs.bun-cache-key }}-${{ hashFiles('**/bun.lockb') }} - restore-keys: | - ${{ runner.os }}-bun- - - - name: Install npm dependencies (bun) - run: bun install - - - name: Build CLI and Link Locally - run: | - bun run build - ${{matrix.pm}} link - - - name: Create expect script ${{ matrix.args }} with ${{ matrix.pm }} - run: | - cat << 'EOF' > test-module.exp - #!/usr/bin/expect -f - set timeout 30 - spawn ${{ matrix.pm }} create nitro-module ${{ matrix.args }} - - # Module name - expect "📝 What is the name of your module?" {send "test-module\r"} - - # Platform selection - expect "🎯 Select target platforms:" - sleep 1 - send \x20 - sleep 1 - send \x1B\[B - sleep 1 - send \x20 - send \r - - # Language selection - expect "💻 Select programming languages:" - sleep 1 - send \x20 - sleep 1 - send \x1B\[B\x1B\[B - sleep 1 - send \x20 - send \r - - # Package manager - expect "📦 Select package manager:" {send \r} - - # Module type - expect "📦 Select module type:" {send \r} - - # Confirm package name - expect "✨ Your package name will be called:" {send "y\r"} - - expect eof - EOF - chmod +x test-module.exp - - - name: Generate New Module ${{ matrix.args }} - continue-on-error: false - run: ./test-module.exp - - - name: Upload generated module - uses: actions/upload-artifact@v4 - if: matrix.args == '--skip-install' - with: - name: test-module-${{ matrix.pm }} - path: react-native-test-module/ - include-hidden-files: true - if-no-files-found: error - retention-days: 1 - - build-ios: - name: Build iOS - needs: module-generation - runs-on: macOS-15 - env: - WORKING_DIR: /Users/runner/react-native-test-module - strategy: - matrix: - pm: ['bun', 'yarn'] - mode: ['Debug', 'Release'] - steps: - - name: Creating and navigating to directory - run: mkdir -p ${{ env.WORKING_DIR }} - - - name: Download generated module - uses: actions/download-artifact@v4 - with: - name: test-module-${{ matrix.pm }} - path: ${{ env.WORKING_DIR }} - - - name: List files in the directory - working-directory: ${{ env.WORKING_DIR }} - run: ls -la - - - name: Setup Ruby and Cocoapods - uses: ruby/setup-ruby@v1 - with: - ruby-version: '3.2' - bundler-cache: true - - - name: Setup Node.js - if: matrix.pm == 'yarn' - uses: actions/setup-node@v4 - with: - node-version: 22.x - - - name: Setup Yarn - if: matrix.pm == 'yarn' - run: | - corepack enable - cd ${{ env.WORKING_DIR }} - yarn set version 4.6.0 - yarn config set enableImmutableInstalls false - yarn config set nodeLinker node-modules - touch yarn.lock - yarn install - - - name: Setup Yarn cache - if: matrix.pm == 'yarn' - uses: actions/cache@v4 - with: - path: /Users/runner/Library/Caches/Yarn/v6 - key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} - restore-keys: | - ${{ runner.os }}-yarn- - - - name: Setup Bun.js - uses: oven-sh/setup-bun@v2 - with: - bun-version: latest - - - name: Cache npm dependencies - id: bun-cache - uses: actions/cache@v4 - with: - path: ~/.bun/install/cache - key: ${{ runner.os }}-${{ hashFiles('**/bun.lockb') }} - restore-keys: | - ${{ runner.os }}-bun- - - - name: Install npm dependencies (${{ matrix.pm }}) - working-directory: ${{ env.WORKING_DIR }} - run: ${{ matrix.pm }} install - - - name: Nitro Module Codegen - working-directory: ${{ env.WORKING_DIR }} - run: ${{ matrix.pm }} codegen - - - name: Cache CocoaPods - id: pods-cache - uses: actions/cache@v4 - with: - path: ${{ env.WORKING_DIR }}/example/ios/Pods - key: ${{ runner.os }}-pods-${{ hashFiles('**/Podfile.lock') }} - - - name: Install CocoaPods dependencies - working-directory: ${{ env.WORKING_DIR }}/example - run: ${{ matrix.pm }} pod - - - name: Build iOS - working-directory: ${{ env.WORKING_DIR }}/example/ios - run: "set -o pipefail && xcodebuild \ - CC=clang CPLUSPLUS=clang++ LD=clang LDPLUSPLUS=clang++ \ - -derivedDataPath build -UseModernBuildSystem=YES \ - -workspace TestModuleExample.xcworkspace \ - -scheme TestModuleExample \ - -sdk iphonesimulator \ - -configuration ${{ matrix.mode }} \ - -destination 'platform=iOS Simulator,name=iPhone 16' \ - build \ - CODE_SIGNING_ALLOWED=NO" - - build-android: - name: Build Android - needs: module-generation - runs-on: ubuntu-latest - env: - WORKING_DIR: /home/runner/react-native-test-module - strategy: - matrix: - pm: ['bun', 'yarn'] - mode: ['Debug'] - steps: - - name: Create directory structure - run: mkdir -p ${{ env.WORKING_DIR }} - - - name: Download generated module - uses: actions/download-artifact@v4 - with: - name: test-module-${{ matrix.pm }} - path: ${{ env.WORKING_DIR}} - - - name: List files in the directory - working-directory: ${{ env.WORKING_DIR }} - run: ls -la - - - name: Setup Node.js - if: matrix.pm == 'yarn' - uses: actions/setup-node@v4 - with: - node-version: 22.x - - - name: Setup Yarn - if: matrix.pm == 'yarn' - run: | - corepack enable - cd ${{ env.WORKING_DIR }} - yarn set version 4.6.0 - yarn config set enableImmutableInstalls false - yarn config set nodeLinker node-modules - touch yarn.lock - yarn install - - - name: Setup yarn cache - if: matrix.pm == 'yarn' - uses: actions/cache@v4 - with: - path: /home/runner/Library/Caches/Yarn/v6 - key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} - restore-keys: | - ${{ runner.os }}-yarn- - - - name: Setup Bun.js - uses: oven-sh/setup-bun@v2 - with: - bun-version: latest - - - name: Cache npm dependencies - id: bun-cache - uses: actions/cache@v4 - with: - path: ~/.bun/install/cache - key: ${{ runner.os }}-${{ hashFiles('**/bun.lockb') }} - restore-keys: | - ${{ runner.os }}-bun- - - - name: Install npm dependencies (${{ matrix.pm }}) - working-directory: ${{ env.WORKING_DIR }} - run: ${{ matrix.pm }} install - - - name: Nitro Module Codegen - working-directory: ${{ env.WORKING_DIR }} - run: ${{ matrix.pm }} codegen - - - name: Install Java for Android builds - uses: actions/setup-java@v4 - with: - distribution: 'zulu' - java-version: '17' - - - name: Make gradlew executable - working-directory: ${{ env.WORKING_DIR }}/example/android - run: chmod +x ./gradlew - - - name: Run Gradle Build - working-directory: ${{ env.WORKING_DIR }}/example/android - run: ./gradlew assemble${{matrix.mode}} --no-daemon --build-cache - - - name: Stop Gradle Daemon - working-directory: ${{ env.WORKING_DIR }}/example/android - run: ./gradlew --stop diff --git a/.github/workflows/generate-nitro-views.yml b/.github/workflows/generate-nitro-views.yml deleted file mode 100644 index 2c3e4b07..00000000 --- a/.github/workflows/generate-nitro-views.yml +++ /dev/null @@ -1,346 +0,0 @@ -name: Generate Nitro Views - -permissions: - contents: write - packages: write - actions: write - -on: - pull_request: - branches: [main] - paths: - - 'src/**' - - '.github/workflows/test.yml' - - '.github/workflows/release.yml' - - 'package.json' - - 'bun.lock' - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -jobs: - lint-and-format: - name: Lint and Format - runs-on: ubuntu-latest - outputs: - bun-cache-key: ${{ runner.os }}-bun - steps: - - name: Checkout Repo - uses: actions/checkout@v4 - - - name: Setup Bun.js - uses: oven-sh/setup-bun@v2 - with: - bun-version: latest - - - name: Cache npm dependencies - id: bun-cache - uses: actions/cache@v4 - with: - path: ~/.bun/install/cache - key: ${{ runner.os }}-bun-${{ hashFiles('**/bun.lockb') }} - restore-keys: | - ${{ runner.os }}-bun- - - - name: Install npm dependencies (bun) - run: bun install - - - name: Lint Code - run: bun lint - - view-generation: - name: View Generation - needs: lint-and-format - runs-on: macOS-15 - strategy: - matrix: - args: - [ - '--skip-example', - '--module-dir test-module', - '--skip-install', - ] - pm: ['bun', 'yarn', 'npm'] - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - steps: - - uses: actions/checkout@v4 - - - name: Configure Git - run: | - git config --global user.name "GitHub Actions Bot" - git config --global user.email "actions@github.com" - - - name: Setup Bun.js - uses: oven-sh/setup-bun@v2 - with: - bun-version: latest - - - name: Cache npm dependencies - id: bun-cache - uses: actions/cache@v4 - with: - path: ~/.bun/install/cache - key: ${{ needs.lint-and-format.outputs.bun-cache-key }}-${{ hashFiles('**/bun.lockb') }} - restore-keys: | - ${{ runner.os }}-bun- - - - name: Install npm dependencies (bun) - run: bun install - - - name: Build CLI and Link Locally - run: | - bun run build - ${{matrix.pm}} link - - - name: Create expect script ${{ matrix.args }} with ${{ matrix.pm }} - run: | - cat << 'EOF' > test-view.exp - #!/usr/bin/expect -f - set timeout 30 - spawn ${{ matrix.pm }} create nitro-module ${{ matrix.args }} - - # Module name - expect "📝 What is the name of your module?" {send "test-view\r"} - - # Platform selection - expect "🎯 Select target platforms:" - sleep 1 - send \x20 - sleep 1 - send \x1B\[B - sleep 1 - send \x20 - send \r - - # Language selection - expect "💻 Select programming languages:" - sleep 1 - send \x20 - sleep 1 - send \x1B\[B\x1B\[B - sleep 1 - send \x20 - send \r - - # Package manager - expect "📦 Select package manager:" {send \r} - - # Module type - expect "📦 Select module type:" - send \x1B\[B - send \r - - # Confirm package name - expect "✨ Your package name will be called:" {send "y\r"} - - expect eof - EOF - chmod +x test-view.exp - - - name: Generate New Module ${{ matrix.args }} - continue-on-error: false - run: ./test-view.exp - - - name: Upload generated module - uses: actions/upload-artifact@v4 - if: matrix.args == '--skip-install' - with: - name: test-view-${{ matrix.pm }} - path: react-native-test-view/ - include-hidden-files: true - if-no-files-found: error - retention-days: 1 - - build-ios: - name: Build iOS - needs: view-generation - runs-on: macOS-15 - env: - WORKING_DIR: /Users/runner/react-native-test-view - strategy: - matrix: - pm: ['bun', 'yarn'] - mode: ['Debug', 'Release'] - steps: - - name: Creating and navigating to directory - run: mkdir -p ${{ env.WORKING_DIR }} - - - name: Download generated view - uses: actions/download-artifact@v4 - with: - name: test-view-${{ matrix.pm }} - path: ${{ env.WORKING_DIR }} - - - name: List files in the directory - working-directory: ${{ env.WORKING_DIR }} - run: ls -la - - - name: Setup Ruby and Cocoapods - uses: ruby/setup-ruby@v1 - with: - ruby-version: '3.2' - bundler-cache: true - - - name: Setup Node.js - if: matrix.pm == 'yarn' - uses: actions/setup-node@v4 - with: - node-version: 22.x - - - name: Setup Yarn - if: matrix.pm == 'yarn' - run: | - corepack enable - cd ${{ env.WORKING_DIR }} - yarn set version 4.6.0 - yarn config set enableImmutableInstalls false - yarn config set nodeLinker node-modules - touch yarn.lock - yarn install - - - name: Setup yarn cache - if: matrix.pm == 'yarn' - uses: actions/cache@v4 - with: - path: /Users/runner/Library/Caches/Yarn/v6 - key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} - restore-keys: | - ${{ runner.os }}-yarn- - - - name: Setup Bun.js - uses: oven-sh/setup-bun@v2 - with: - bun-version: latest - - - name: Cache npm dependencies - id: bun-cache - uses: actions/cache@v4 - with: - path: ~/.bun/install/cache - key: ${{ runner.os }}-${{ hashFiles('**/bun.lockb') }} - restore-keys: | - ${{ runner.os }}-bun- - - - name: Install npm dependencies (${{ matrix.pm }}) - working-directory: ${{ env.WORKING_DIR }} - run: ${{ matrix.pm }} install - - - name: Codegen - working-directory: ${{ env.WORKING_DIR }} - run: ${{ matrix.pm }} codegen - - - name: Cache CocoaPods - id: pods-cache - uses: actions/cache@v4 - with: - path: ${{ env.WORKING_DIR }}/example/ios/Pods - key: ${{ runner.os }}-pods-${{ hashFiles('**/Podfile.lock') }} - - - name: Install CocoaPods dependencies - working-directory: ${{ env.WORKING_DIR }}/example - run: ${{ matrix.pm }} pod - - - name: Build iOS - working-directory: ${{ env.WORKING_DIR }}/example/ios - run: "set -o pipefail && xcodebuild \ - CC=clang CPLUSPLUS=clang++ LD=clang LDPLUSPLUS=clang++ \ - -derivedDataPath build -UseModernBuildSystem=YES \ - -workspace TestViewExample.xcworkspace \ - -scheme TestViewExample \ - -sdk iphonesimulator \ - -configuration ${{ matrix.mode }} \ - -destination 'platform=iOS Simulator,name=iPhone 16' \ - build \ - CODE_SIGNING_ALLOWED=NO" - - build-android: - name: Build Android - needs: view-generation - runs-on: ubuntu-latest - env: - WORKING_DIR: /home/runner/react-native-test-view - strategy: - matrix: - pm: ['bun', 'yarn'] - mode: ['Debug'] - steps: - - name: Create directory structure - run: mkdir -p ${{ env.WORKING_DIR }} - - - name: Download generated view - uses: actions/download-artifact@v4 - with: - name: test-view-${{ matrix.pm }} - path: ${{ env.WORKING_DIR}} - - - name: List files in the directory - working-directory: ${{ env.WORKING_DIR }} - run: ls -la - - - name: Setup Node.js - if: matrix.pm == 'yarn' - uses: actions/setup-node@v4 - with: - node-version: 22.x - - - name: Setup Yarn - if: matrix.pm == 'yarn' - run: | - corepack enable - cd ${{ env.WORKING_DIR }} - yarn set version 4.6.0 - yarn config set enableImmutableInstalls false - yarn config set nodeLinker node-modules - touch yarn.lock - yarn install - - - name: Setup yarn cache - if: matrix.pm == 'yarn' - uses: actions/cache@v4 - with: - path: /home/runner/Library/Caches/Yarn/v6 - key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} - restore-keys: | - ${{ runner.os }}-yarn- - - - name: Setup Bun.js - uses: oven-sh/setup-bun@v2 - with: - bun-version: latest - - - name: Cache npm dependencies - id: bun-cache - uses: actions/cache@v4 - with: - path: ~/.bun/install/cache - key: ${{ runner.os }}-${{ hashFiles('**/bun.lockb') }} - restore-keys: | - ${{ runner.os }}-bun- - - - name: Install npm dependencies (${{ matrix.pm }}) - working-directory: ${{ env.WORKING_DIR }} - run: ${{ matrix.pm }} install - - - name: Codegen - working-directory: ${{ env.WORKING_DIR }} - run: ${{ matrix.pm }} codegen - - - name: Install Java for Android builds - uses: actions/setup-java@v4 - with: - distribution: 'zulu' - java-version: '17' - - - name: Make gradlew executable - working-directory: ${{ env.WORKING_DIR }}/example/android - run: chmod +x ./gradlew - - - name: Run Gradle Build - working-directory: ${{ env.WORKING_DIR }}/example/android - run: ./gradlew assemble${{ matrix.mode }} --no-daemon --build-cache - - - name: Stop Gradle Daemon - working-directory: ${{ env.WORKING_DIR }}/example/android - run: ./gradlew --stop diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b5ab4cb1..c841b916 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -38,7 +38,7 @@ jobs: uses: actions/cache@v4 with: path: ~/.bun/install/cache - key: ${{ runner.os }}-bun-${{ hashFiles('**/bun.lockb') }} + key: ${{ runner.os }}-bun-${{ hashFiles('**/bun.lock', '**/bun.lockb') }} restore-keys: | ${{ runner.os }}-bun- diff --git a/.github/workflows/test-nitro-cli.yml b/.github/workflows/test-nitro-cli.yml new file mode 100644 index 00000000..1a8eb2e9 --- /dev/null +++ b/.github/workflows/test-nitro-cli.yml @@ -0,0 +1,344 @@ +name: Test Nitro CLI - Generate & Build + +permissions: + contents: write + packages: write + actions: write + +on: + push: + branches: [next] + paths: + - 'src/**' + - '.github/workflows/test-nitro-cli.yml' + - 'package.json' + - 'bun.lock' + pull_request: + branches: [main, next] + paths: + - 'src/**' + - '.github/workflows/test-nitro-cli.yml' + - 'package.json' + - 'bun.lock' + workflow_dispatch: + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + lint-and-build: + name: Lint and Build CLI + runs-on: ubuntu-latest + outputs: + bun-cache-key: ${{ runner.os }}-bun + steps: + - name: Checkout Repo + uses: actions/checkout@v4 + + - name: Setup Bun.js + uses: oven-sh/setup-bun@v2 + with: + bun-version: latest + + - name: Cache bun dependencies + id: bun-cache + uses: actions/cache@v4 + with: + path: ~/.bun/install/cache + key: ${{ runner.os }}-bun-${{ hashFiles('**/bun.lock', '**/bun.lockb') }} + restore-keys: | + ${{ runner.os }}-bun- + + - name: Install dependencies + run: bun install + + - name: Lint Code + run: bun lint + + - name: Build CLI + run: bun run build + + - name: Test CLI help commands + run: | + node lib/cli/index.js --help + node lib/cli/index.js create --help + + generate-packages: + name: Generate with ${{ matrix.pm }} - ${{ matrix.package-type }} + needs: lint-and-build + runs-on: macos-latest + strategy: + matrix: + pm: ['bun', 'yarn'] + package-type: ['module', 'view'] + + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + steps: + - uses: actions/checkout@v4 + + - name: Configure Git + run: | + git config --global user.name "GitHub Actions Bot" + git config --global user.email "actions@github.com" + + - name: Setup Node.js + if: matrix.pm == 'yarn' + uses: actions/setup-node@v4 + with: + node-version: 22.x + + - name: Setup Bun.js + uses: oven-sh/setup-bun@v2 + with: + bun-version: latest + + - name: Cache dependencies + if: matrix.pm == 'bun' + uses: actions/cache@v4 + with: + path: ~/.bun/install/cache + key: ${{ needs.lint-and-build.outputs.bun-cache-key }}-${{ hashFiles('**/bun.lockb') }} + restore-keys: | + ${{ runner.os }}-bun- + + - name: Install npm dependencies (bun) + run: bun install + + - name: Build CLI and Link Locally + run: | + bun run build + ${{matrix.pm}} link + + - name: Generate ${{ matrix.package-type }} with ${{ matrix.pm }} + continue-on-error: false + run: ${{ matrix.pm }} create nitro-module test-${{ matrix.package-type }} --skip-install --ci + + - name: Verify generated package structure + run: | + PACKAGE_DIR="react-native-test-${{ matrix.package-type }}" + + if [ ! -d "$PACKAGE_DIR" ]; then + echo "❌ Package directory not found: $PACKAGE_DIR" + ls -la + exit 1 + fi + + echo "✅ Package directory created: $PACKAGE_DIR" + + # Check essential files + cd "$PACKAGE_DIR" + + REQUIRED_FILES=( + "package.json" + "README.md" + "src/" + "android/" + "ios/" + "example/" + ) + + for file in "${REQUIRED_FILES[@]}"; do + if [ ! -e "$file" ]; then + echo "❌ Missing required file/directory: $file" + ls -la + exit 1 + fi + echo "✅ Found: $file" + done + + - name: Test package.json content + run: | + cd "react-native-test-${{ matrix.package-type }}" + + # Verify package name + if ! grep -q "react-native-test-${{ matrix.package-type }}" package.json; then + echo "❌ Package name not correct in package.json" + cat package.json + exit 1 + fi + + # Verify scripts exist + if ! grep -q '"scripts"' package.json; then + echo "❌ Scripts section missing from package.json" + exit 1 + fi + + echo "✅ package.json structure validated" + + - name: Upload generated package + uses: actions/upload-artifact@v4 + with: + name: test-${{ matrix.package-type }}-${{ matrix.pm }} + path: react-native-test-${{ matrix.package-type }} + include-hidden-files: true + if-no-files-found: error + retention-days: 1 + + test-ios-build: + name: Test iOS Build - ${{ matrix.pm }} - ${{ matrix.package-type }} (${{ matrix.mode }}) + needs: generate-packages + runs-on: macos-latest + strategy: + matrix: + pm: ['bun', 'yarn'] + package-type: ['module', 'view'] + mode: ['Debug', 'Release'] + env: + WORKING_DIR: /Users/runner/react-native-test-${{ matrix.package-type }} + steps: + - name: Create working directory + run: mkdir -p ${{ env.WORKING_DIR }} + + - name: Download generated package + uses: actions/download-artifact@v4 + with: + name: test-${{ matrix.package-type }}-${{ matrix.pm }} + path: ${{ env.WORKING_DIR }} + + - name: List package structure + working-directory: ${{ env.WORKING_DIR }} + run: | + echo "Package structure:" + find . -type f -name "*.json" -o -name "*.js" -o -name "*.ts" | head -20 + + - name: Setup Ruby and CocoaPods + uses: ruby/setup-ruby@v1 + with: + ruby-version: '3.2' + bundler-cache: true + + - name: Setup Node.js + if: matrix.pm == 'yarn' + uses: actions/setup-node@v4 + with: + node-version: 22.x + + - name: Setup Yarn + if: matrix.pm == 'yarn' + run: | + corepack enable + cd ${{ env.WORKING_DIR }} + yarn set version 4.6.0 + yarn config set enableImmutableInstalls false + yarn config set nodeLinker node-modules + touch yarn.lock + + - name: Setup Bun.js + uses: oven-sh/setup-bun@v2 + with: + bun-version: latest + + - name: Install package dependencies + working-directory: ${{ env.WORKING_DIR }} + run: ${{ matrix.pm }} install + + - name: Run codegen + working-directory: ${{ env.WORKING_DIR }} + run: | + bunx nitro-codegen --logLevel="debug" + ${{ matrix.pm }} run build + node post-script.js + + - name: Install CocoaPods dependencies + working-directory: ${{ env.WORKING_DIR }}/example + run: ${{ matrix.pm }} pod + + - name: Build iOS project + working-directory: ${{ env.WORKING_DIR }}/example/ios + run: | + # Get the correct scheme name based on package type + if [ "${{ matrix.package-type }}" == "module" ]; then + SCHEME="TestModuleExample" + else + SCHEME="TestViewExample" + fi + + set -o pipefail && xcodebuild \ + CC=clang CPLUSPLUS=clang++ LD=clang LDPLUSPLUS=clang++ \ + -derivedDataPath build -UseModernBuildSystem=YES \ + -workspace "${SCHEME}.xcworkspace" \ + -scheme "$SCHEME" \ + -sdk iphonesimulator \ + -configuration ${{ matrix.mode }} \ + -destination 'platform=iOS Simulator,name=iPhone 16' \ + build \ + CODE_SIGNING_ALLOWED=NO + + test-android-build: + name: Test Android Build - ${{ matrix.pm }} - ${{ matrix.package-type }} (${{ matrix.mode }}) + needs: generate-packages + runs-on: ubuntu-latest + strategy: + matrix: + pm: ['bun', 'yarn'] + package-type: ['module', 'view'] + mode: ['Debug', 'Release'] + env: + WORKING_DIR: /home/runner/react-native-test-${{ matrix.package-type }} + steps: + - name: Create working directory + run: mkdir -p ${{ env.WORKING_DIR }} + + - name: Download generated package + uses: actions/download-artifact@v4 + with: + name: test-${{ matrix.package-type }}-${{ matrix.pm }} + path: ${{ env.WORKING_DIR }} + + - name: List package structure + working-directory: ${{ env.WORKING_DIR }} + run: | + echo "Package structure:" + find . -type f -name "*.json" -o -name "*.js" -o -name "*.ts" | head -20 + + - name: Setup Node.js + if: matrix.pm == 'yarn' + uses: actions/setup-node@v4 + with: + node-version: 22.x + + - name: Setup Yarn + if: matrix.pm == 'yarn' + run: | + corepack enable + cd ${{ env.WORKING_DIR }} + yarn set version 4.6.0 + yarn config set enableImmutableInstalls false + yarn config set nodeLinker node-modules + touch yarn.lock + + - name: Setup Bun.js + uses: oven-sh/setup-bun@v2 + with: + bun-version: latest + + - name: Install package dependencies + working-directory: ${{ env.WORKING_DIR }} + run: ${{ matrix.pm }} install + + - name: Run codegen + working-directory: ${{ env.WORKING_DIR }} + run: | + bunx nitro-codegen --logLevel="debug" + ${{ matrix.pm }} run build + node post-script.js + + - name: Setup Java for Android builds + uses: actions/setup-java@v4 + with: + distribution: 'zulu' + java-version: '17' + + - name: Make gradlew executable + working-directory: ${{ env.WORKING_DIR }}/example/android + run: chmod +x ./gradlew + + - name: Build Android project + working-directory: ${{ env.WORKING_DIR }}/example/android + run: ./gradlew assemble${{ matrix.mode }} --no-daemon --build-cache + + - name: Stop Gradle daemon + working-directory: ${{ env.WORKING_DIR }}/example/android + run: ./gradlew --stop diff --git a/CHANGELOG.md b/CHANGELOG.md index e1c9344b..a24b9529 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,85 @@ +## [2.0.0-next.5](https://github.com/patrickkabwe/create-nitro-module/compare/v2.0.0-next.4...v2.0.0-next.5) (2025-06-01) + +### ✨ Features + +* add author and description placeholders to template files and update spinner messages ([1eba141](https://github.com/patrickkabwe/create-nitro-module/commit/1eba141c2a88995bbd704f4e8a3d28f042f8b944)) +* add badges for version, downloads, and license to README ([ecdba90](https://github.com/patrickkabwe/create-nitro-module/commit/ecdba907064d076b7fb8a8cd85ac50a5369f6f5f)) +* add description and keywords to package generation ([5b9aded](https://github.com/patrickkabwe/create-nitro-module/commit/5b9aded2b3ebdfe01bff85bfec6ed8a386f18eb9)) +* add MIT License file to the project ([235ac28](https://github.com/patrickkabwe/create-nitro-module/commit/235ac286b3a76f19b8f9bb28afed27870c8ae318)) +* add ncli.tape for automated CLI module creation and improve spinner message formatting ([0dd62c4](https://github.com/patrickkabwe/create-nitro-module/commit/0dd62c464844d19d7e686ebef9d07997480fc486)) + +### 🐛 Bug Fixes + +* correct syntax in package generation keywords array ([2d835a1](https://github.com/patrickkabwe/create-nitro-module/commit/2d835a1cec954252dfce9e85ddd4afb35da2d10c)) +* update cache key in GitHub workflows and correct import path in package generation ([07acfc3](https://github.com/patrickkabwe/create-nitro-module/commit/07acfc351c8d39dd296c55cfff03741a8c39d021)) +* update nitro-module-cli.gif to improve visual representation ([79ba089](https://github.com/patrickkabwe/create-nitro-module/commit/79ba089b08eadc3fab00e1618897a78356679c5c)) + +## [2.0.0-next.4](https://github.com/patrickkabwe/create-nitro-module/compare/v2.0.0-next.3...v2.0.0-next.4) (2025-06-01) + +### 🐛 Bug Fixes + +* workflow ([d35a0b6](https://github.com/patrickkabwe/create-nitro-module/commit/d35a0b60834deec42262f66db61d2bda8ddcaa0b)) + +### 🛠️ Other changes + +* enhance GitHub workflow for code generation and CocoaPods installation ([b8c6916](https://github.com/patrickkabwe/create-nitro-module/commit/b8c6916608b5c5428b3f70fc01ae8cfecd640659)) +* update GitHub workflow and package generation scripts ([683e4f8](https://github.com/patrickkabwe/create-nitro-module/commit/683e4f8cc8f09408ea24fd1aad8d5ae14ee9e54e)) + +## [2.0.0-next.3](https://github.com/patrickkabwe/create-nitro-module/compare/v2.0.0-next.2...v2.0.0-next.3) (2025-06-01) + +### 🛠️ Other changes + +* update GitHub workflow to support both Debug and Release modes ([a8f808a](https://github.com/patrickkabwe/create-nitro-module/commit/a8f808a895f9de903d3d068cad19152cbbaf3043)) +* update release configuration for additional assets ([0f8bc96](https://github.com/patrickkabwe/create-nitro-module/commit/0f8bc96161c0e851a224b733550f36272bc25c9b)) + +## [2.0.0-next.2](https://github.com/patrickkabwe/create-nitro-module/compare/v2.0.0-next.1...v2.0.0-next.2) (2025-05-31) + +### 🐛 Bug Fixes + +* ensure newline at end of package.json file ([b5d2d47](https://github.com/patrickkabwe/create-nitro-module/commit/b5d2d4761e040e53f34b1c4c7c2e738d14fab589)) + +### 🔄 Code Refactors + +* standardize naming from moduleName to packageName across the codebase ([8df59bd](https://github.com/patrickkabwe/create-nitro-module/commit/8df59bdcebfff7e717d4e5aabb2636c60e50bf70)) +* update Nitro module creation to use packageName instead of moduleName ([83207f9](https://github.com/patrickkabwe/create-nitro-module/commit/83207f9e368f984665120e1287ef7880767216f2)) + +### 📚 Documentation + +* add Semantic Release mention to README and documentation ([e81ba14](https://github.com/patrickkabwe/create-nitro-module/commit/e81ba14cf74a344dda19280297e51efabb8be986)) + +### 🛠️ Other changes + +* add Act configuration and update GitHub workflows ([57ffaff](https://github.com/patrickkabwe/create-nitro-module/commit/57ffaff17564446774dcacbe0284c4dd44828021)) +* add Act configuration and update GitHub workflows ([9a0dc4f](https://github.com/patrickkabwe/create-nitro-module/commit/9a0dc4fb7b700bb0963d73f840b465ada8c9d80c)) +* add Act configuration and update GitHub workflows ([d1800ce](https://github.com/patrickkabwe/create-nitro-module/commit/d1800ce807c98f65c0c28a32ebcaafe52b9f8b36)) +* add Act configuration and update GitHub workflows ([9630cb8](https://github.com/patrickkabwe/create-nitro-module/commit/9630cb84ed352292ae38963a7b5e39f7494d514d)) +* add Act configuration and update GitHub workflows ([7b901a5](https://github.com/patrickkabwe/create-nitro-module/commit/7b901a5fadb93e6b849b60fa61ff18e1873367e5)) +* migrate from release-it to semantic-release for version management ([947b75a](https://github.com/patrickkabwe/create-nitro-module/commit/947b75a65bd3a23afd73f7bc4ed1e870ac2b284b)) +* refine artifact naming in GitHub workflows for consistency ([0edc112](https://github.com/patrickkabwe/create-nitro-module/commit/0edc11218ef4246c8998cf015ce30d462ba892f1)) +* remove generate-nitro-module and generate-nitro-views workflows from GitHub Actions ([15f3ad5](https://github.com/patrickkabwe/create-nitro-module/commit/15f3ad554c0ef7375e66c26aa7cae42ccb6e4417)) +* remove npm from package manager matrix in GitHub workflows ([a5f2dd4](https://github.com/patrickkabwe/create-nitro-module/commit/a5f2dd4de11a999a71b752481454b665fe711b9f)) +* rename generate-nitro-module to nitro-package ([7431ece](https://github.com/patrickkabwe/create-nitro-module/commit/7431ece019983664d2e9759710b5de025c572ea8)) +* simplify artifact naming in GitHub workflows by removing package manager from the name ([1af2d24](https://github.com/patrickkabwe/create-nitro-module/commit/1af2d2497208c9dec6ceee2034d5b1c043ebee83)) +* update artifact naming in GitHub workflows for clarity ([d0222f8](https://github.com/patrickkabwe/create-nitro-module/commit/d0222f815f487ffdec58088420e07287ce523fea)) +* update artifact naming in GitHub workflows for clarity ([fa7b444](https://github.com/patrickkabwe/create-nitro-module/commit/fa7b4445648e331f9135a67546abe7c594c468a0)) +* update artifact naming in GitHub workflows to include package manager in the name ([e8a88b5](https://github.com/patrickkabwe/create-nitro-module/commit/e8a88b5590b11f7ce63df2a444179ea5f74db6e2)) +* update artifact naming in GitHub workflows to remove package manager from the name ([4cb84c6](https://github.com/patrickkabwe/create-nitro-module/commit/4cb84c6a585f3dfa1460d0d3a54ca3e335e82b57)) +* update dependencies and refactor CLI entry points ([9078e13](https://github.com/patrickkabwe/create-nitro-module/commit/9078e13431cf1636dcb24bed4ad31ac98269ec9e)) +* update GitHub workflow to support npm alongside bun and yarn ([a702640](https://github.com/patrickkabwe/create-nitro-module/commit/a70264080b1266a258a74476ca29bef3d26c1183)) +* update publishConfig in package.json to set access to public ([ea03bb0](https://github.com/patrickkabwe/create-nitro-module/commit/ea03bb0e7ec62f2fc6ab61b639770680db4f6a7e)) +* update workflow to conditionally use bun for npm package creation ([dbef309](https://github.com/patrickkabwe/create-nitro-module/commit/dbef3098b85fa0527289c0c9d3888a83989af2c5)) +* use capitalize function ([b6e4e3e](https://github.com/patrickkabwe/create-nitro-module/commit/b6e4e3ed5bae6ec279626f825c501ae2e4fcd8ad)) + +## [2.0.0-next.1](https://github.com/patrickkabwe/create-nitro-module/compare/v1.8.11-next.3...v2.0.0-next.1) (2025-05-29) + +### ⚠ BREAKING CHANGES + +* use `@clack/prompts` to handle prompts + +### ✨ Features + +* use `@clack/prompts` to handle prompts ([31d414c](https://github.com/patrickkabwe/create-nitro-module/commit/31d414c376084d06afe181e01cff985870340524)) + ## [1.8.10](https://github.com/patrickkabwe/create-nitro-module/compare/v1.8.9...v1.8.10) (2025-05-29) ### 🛠️ Other changes diff --git a/README.md b/README.md index 3bc30e6d..d65c5bbe 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,7 @@ A CLI tool that simplifies creating React Native modules powered by Nitro Module - 📚 TypeScript support out of the box - 🔧 Zero configuration required - ⚙️ Automated ios/android build with GitHub Actions +- 📦 Semantic Release ## 📖 Documentation diff --git a/assets/nitro-module-cli.gif b/assets/nitro-module-cli.gif index 1bae4950..9f8f2592 100644 Binary files a/assets/nitro-module-cli.gif and b/assets/nitro-module-cli.gif differ diff --git a/assets/template/.github/workflows/release.yml b/assets/template/.github/workflows/release.yml new file mode 100644 index 00000000..b4d44abc --- /dev/null +++ b/assets/template/.github/workflows/release.yml @@ -0,0 +1,51 @@ +name: Release + +on: + workflow_dispatch: + +permissions: + contents: read + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + release: + name: Release + runs-on: ubuntu-latest + permissions: + contents: write + issues: write + pull-requests: write + id-token: write + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Setup Bun.js + uses: oven-sh/setup-bun@v2 + with: + bun-version: latest + - name: Cache bun dependencies + id: bun-cache + uses: actions/cache@v4 + with: + path: ~/.bun/install/cache + key: ${{ runner.os }}-bun-${{ hashFiles('**/bun.lockb') }} + restore-keys: | + ${{ runner.os }}-bun- + + - name: Install npm dependencies (bun) + run: bun install + + - name: Build lib + run: bun run build + + - name: Release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} + NPM_CONFIG_PROVENANCE: true + run: bun release diff --git a/assets/template/LICENSE b/assets/template/LICENSE new file mode 100644 index 00000000..433a20f2 --- /dev/null +++ b/assets/template/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 $$author$$ + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/assets/template/README.md b/assets/template/README.md index 849fbf55..fe012e3e 100644 --- a/assets/template/README.md +++ b/assets/template/README.md @@ -1,5 +1,11 @@ # $$packageName$$ +$$description$$ + +[![Version](https://img.shields.io/npm/v/$$packageName$$.svg)](https://www.npmjs.com/package/$$packageName$$) +[![Downloads](https://img.shields.io/npm/dm/$$packageName$$.svg)](https://www.npmjs.com/package/$$packageName$$) +[![License](https://img.shields.io/npm/l/$$packageName$$.svg)](https://github.com/patrickkabwe/$$packageName$$/LICENSE) + ## Requirements - React Native v0.76.0 or higher diff --git a/assets/template/package.json b/assets/template/package.json index 0f4a0bfe..3025da64 100644 --- a/assets/template/package.json +++ b/assets/template/package.json @@ -10,7 +10,7 @@ "scripts": { "typecheck": "tsc --noEmit", "clean": "git clean -dfX", - "release": "release-it" + "release": "semantic-release" }, "keywords": [ "react-native" @@ -43,13 +43,13 @@ "bugs": "", "homepage": "", "publishConfig": { - "registry": "https://registry.npmjs.org/", - "provenance": true + "access": "public", + "registry": "https://registry.npmjs.org/" }, "devDependencies": { "@jamesacarr/eslint-formatter-github-actions": "^0.2.0", - "@release-it/bumper": "^7.0.1", - "@release-it/conventional-changelog": "^10.0.0", + "@semantic-release/changelog": "^6.0.3", + "@semantic-release/git": "^10.0.1", "@types/jest": "^29.5.12", "@types/react": "^19.0.10", "nitro-codegen": "0.25.2", @@ -57,7 +57,8 @@ "react-native": "0.79.2", "react-native-builder-bob": "^0.37.0", "react-native-nitro-modules": "0.25.2", - "release-it": "^19.0.2", + "conventional-changelog-conventionalcommits": "^9.0.0", + "semantic-release": "^24.2.3", "typescript": "5.0.4" }, "peerDependencies": { @@ -112,53 +113,5 @@ } ] ] - }, - "release-it": { - "npm": { - "publish": true - }, - "git": { - "commitMessage": "chore: release ${version}", - "tagName": "v${version}", - "requireCleanWorkingDir": false - }, - "github": { - "release": true - }, - "hooks": { - "before:init": "bun typecheck", - "after:bump": "bun run build" - }, - "plugins": { - "@release-it/bumper": {}, - "@release-it/conventional-changelog": { - "preset": { - "name": "conventionalcommits", - "types": [ - { - "type": "feat", - "section": "✨ Features" - }, - { - "type": "perf", - "section": "💨 Performance Improvements" - }, - { - "type": "fix", - "section": "🐛 Bug Fixes" - }, - { - "type": "chore(deps)", - "section": "🛠️ Dependency Upgrades" - }, - { - "type": "docs", - "section": "📚 Documentation" - } - ] - }, - "infile": "CHANGELOG.md" - } - } } } diff --git a/assets/template/release.config.cjs b/assets/template/release.config.cjs new file mode 100644 index 00000000..e0ef2241 --- /dev/null +++ b/assets/template/release.config.cjs @@ -0,0 +1,61 @@ +const rules = [ + { type: 'feat', release: 'minor', title: '✨ Features' }, + { type: 'fix', release: 'patch', title: '🐛 Bug Fixes' }, + { type: 'perf', release: 'patch', title: '💨 Performance Improvements' }, + { type: 'refactor', release: 'patch', title: '🔄 Code Refactors' }, + { type: 'docs', release: 'patch', title: '📚 Documentation' }, + { type: 'chore', release: 'patch', title: '🛠️ Other changes' }, +] + +const sortMap = Object.fromEntries( + rules.map((rule, index) => [rule.title, index]) +) + +/** + * @type {import('semantic-release').GlobalConfig} + */ +module.exports = { + branches: ['main', { name: 'next', prerelease: 'next' }], + plugins: [ + [ + '@semantic-release/commit-analyzer', + { + preset: 'conventionalcommits', + releaseRules: [ + { breaking: true, release: 'major' }, + { revert: true, release: 'patch' }, + ].concat(rules.map(({ type, release }) => ({ type, release }))), + }, + ], + [ + '@semantic-release/release-notes-generator', + { + preset: 'conventionalcommits', + presetConfig: { + types: rules.map(({ type, title }) => ({ + type, + section: title, + })), + }, + writerOpts: { + commitGroupsSort: (a, z) => + sortMap[a.title] - sortMap[z.title], + }, + }, + ], + [ + '@semantic-release/changelog', + { + changelogFile: 'CHANGELOG.md', + }, + ], + '@semantic-release/npm', + '@semantic-release/github', + [ + '@semantic-release/git', + { + assets: ['package.json', 'CHANGELOG.md', 'example/package.json'], + }, + ], + ], +} diff --git a/bun.lock b/bun.lock index f0b7315d..4e845e94 100644 --- a/bun.lock +++ b/bun.lock @@ -4,10 +4,9 @@ "": { "name": "create-nitro-module", "dependencies": { + "@clack/prompts": "^0.11.0", "commander": "^14.0.0", - "inquirer": "^12.1.0", "kleur": "^4.1.5", - "ora": "^8.1.1", "tsup": "^8.3.5", }, "devDependencies": { @@ -24,7 +23,6 @@ "lefthook": "^1.10.1", "prettier": "^3.4.1", "semantic-release": "^24.2.3", - "tsx": "^4.19.2", "typescript": "^5.7.2", }, }, @@ -34,6 +32,10 @@ "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.27.1", "", {}, "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow=="], + "@clack/core": ["@clack/core@0.5.0", "", { "dependencies": { "picocolors": "^1.0.0", "sisteransi": "^1.0.5" } }, "sha512-p3y0FIOwaYRUPRcMO7+dlmLh8PSRcrjuTndsiA0WAFbWES0mLZlrjVoBRZ9DzkPFJZG6KGkJmoEAY0ZcVWTkow=="], + + "@clack/prompts": ["@clack/prompts@0.11.0", "", { "dependencies": { "@clack/core": "0.5.0", "picocolors": "^1.0.0", "sisteransi": "^1.0.5" } }, "sha512-pMN5FcrEw9hUkZA4f+zLlzivQSeQf5dRGJjSUbvVYDLvpKCdQx5OaknvKzgbtXOizhP+SJJJjqEbOe55uKKfAw=="], + "@colors/colors": ["@colors/colors@1.5.0", "", {}, "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ=="], "@commitlint/cli": ["@commitlint/cli@19.8.1", "", { "dependencies": { "@commitlint/format": "^19.8.1", "@commitlint/lint": "^19.8.1", "@commitlint/load": "^19.8.1", "@commitlint/read": "^19.8.1", "@commitlint/types": "^19.8.1", "tinyexec": "^1.0.0", "yargs": "^17.0.0" }, "bin": { "commitlint": "./cli.js" } }, "sha512-LXUdNIkspyxrlV6VDHWBmCZRtkEVRpBKxi2Gtw3J54cGWhLCTouVD/Q6ZSaSvd2YaDObWK8mDjrz3TIKtaQMAA=="], @@ -70,55 +72,55 @@ "@commitlint/types": ["@commitlint/types@19.8.1", "", { "dependencies": { "@types/conventional-commits-parser": "^5.0.0", "chalk": "^5.3.0" } }, "sha512-/yCrWGCoA1SVKOks25EGadP9Pnj0oAIHGpl2wH2M2Y46dPM2ueb8wyCVOD7O3WCTkaJ0IkKvzhl1JY7+uCT2Dw=="], - "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.4", "", { "os": "aix", "cpu": "ppc64" }, "sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q=="], + "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.5", "", { "os": "aix", "cpu": "ppc64" }, "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA=="], - "@esbuild/android-arm": ["@esbuild/android-arm@0.25.4", "", { "os": "android", "cpu": "arm" }, "sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ=="], + "@esbuild/android-arm": ["@esbuild/android-arm@0.25.5", "", { "os": "android", "cpu": "arm" }, "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA=="], - "@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.4", "", { "os": "android", "cpu": "arm64" }, "sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A=="], + "@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.5", "", { "os": "android", "cpu": "arm64" }, "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg=="], - "@esbuild/android-x64": ["@esbuild/android-x64@0.25.4", "", { "os": "android", "cpu": "x64" }, "sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ=="], + "@esbuild/android-x64": ["@esbuild/android-x64@0.25.5", "", { "os": "android", "cpu": "x64" }, "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw=="], - "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g=="], + "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.5", "", { "os": "darwin", "cpu": "arm64" }, "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ=="], - "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A=="], + "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.5", "", { "os": "darwin", "cpu": "x64" }, "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ=="], - "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.4", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ=="], + "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.5", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw=="], - "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.4", "", { "os": "freebsd", "cpu": "x64" }, "sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ=="], + "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.5", "", { "os": "freebsd", "cpu": "x64" }, "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw=="], - "@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.4", "", { "os": "linux", "cpu": "arm" }, "sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ=="], + "@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.5", "", { "os": "linux", "cpu": "arm" }, "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw=="], - "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ=="], + "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg=="], - "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.4", "", { "os": "linux", "cpu": "ia32" }, "sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ=="], + "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.5", "", { "os": "linux", "cpu": "ia32" }, "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA=="], - "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.4", "", { "os": "linux", "cpu": "none" }, "sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA=="], + "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.5", "", { "os": "linux", "cpu": "none" }, "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg=="], - "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.4", "", { "os": "linux", "cpu": "none" }, "sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg=="], + "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.5", "", { "os": "linux", "cpu": "none" }, "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg=="], - "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.4", "", { "os": "linux", "cpu": "ppc64" }, "sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag=="], + "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.5", "", { "os": "linux", "cpu": "ppc64" }, "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ=="], - "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.4", "", { "os": "linux", "cpu": "none" }, "sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA=="], + "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.5", "", { "os": "linux", "cpu": "none" }, "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA=="], - "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.4", "", { "os": "linux", "cpu": "s390x" }, "sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g=="], + "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.5", "", { "os": "linux", "cpu": "s390x" }, "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ=="], - "@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.4", "", { "os": "linux", "cpu": "x64" }, "sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA=="], + "@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.5", "", { "os": "linux", "cpu": "x64" }, "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw=="], - "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.4", "", { "os": "none", "cpu": "arm64" }, "sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ=="], + "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.5", "", { "os": "none", "cpu": "arm64" }, "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw=="], - "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.4", "", { "os": "none", "cpu": "x64" }, "sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw=="], + "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.5", "", { "os": "none", "cpu": "x64" }, "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ=="], - "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.4", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A=="], + "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.5", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw=="], - "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.4", "", { "os": "openbsd", "cpu": "x64" }, "sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw=="], + "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.5", "", { "os": "openbsd", "cpu": "x64" }, "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg=="], - "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.4", "", { "os": "sunos", "cpu": "x64" }, "sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q=="], + "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.5", "", { "os": "sunos", "cpu": "x64" }, "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA=="], - "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.4", "", { "os": "win32", "cpu": "arm64" }, "sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ=="], + "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw=="], - "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.4", "", { "os": "win32", "cpu": "ia32" }, "sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg=="], + "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.5", "", { "os": "win32", "cpu": "ia32" }, "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ=="], - "@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.4", "", { "os": "win32", "cpu": "x64" }, "sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ=="], + "@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.5", "", { "os": "win32", "cpu": "x64" }, "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g=="], "@eslint-community/eslint-utils": ["@eslint-community/eslint-utils@4.7.0", "", { "dependencies": { "eslint-visitor-keys": "^3.4.3" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw=="], @@ -146,34 +148,6 @@ "@humanwhocodes/retry": ["@humanwhocodes/retry@0.4.3", "", {}, "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ=="], - "@inquirer/checkbox": ["@inquirer/checkbox@4.1.8", "", { "dependencies": { "@inquirer/core": "^10.1.13", "@inquirer/figures": "^1.0.12", "@inquirer/type": "^3.0.7", "ansi-escapes": "^4.3.2", "yoctocolors-cjs": "^2.1.2" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-d/QAsnwuHX2OPolxvYcgSj7A9DO9H6gVOy2DvBTx+P2LH2iRTo/RSGV3iwCzW024nP9hw98KIuDmdyhZQj1UQg=="], - - "@inquirer/confirm": ["@inquirer/confirm@5.1.12", "", { "dependencies": { "@inquirer/core": "^10.1.13", "@inquirer/type": "^3.0.7" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-dpq+ielV9/bqgXRUbNH//KsY6WEw9DrGPmipkpmgC1Y46cwuBTNx7PXFWTjc3MQ+urcc0QxoVHcMI0FW4Ok0hg=="], - - "@inquirer/core": ["@inquirer/core@10.1.13", "", { "dependencies": { "@inquirer/figures": "^1.0.12", "@inquirer/type": "^3.0.7", "ansi-escapes": "^4.3.2", "cli-width": "^4.1.0", "mute-stream": "^2.0.0", "signal-exit": "^4.1.0", "wrap-ansi": "^6.2.0", "yoctocolors-cjs": "^2.1.2" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-1viSxebkYN2nJULlzCxES6G9/stgHSepZ9LqqfdIGPHj5OHhiBUXVS0a6R0bEC2A+VL4D9w6QB66ebCr6HGllA=="], - - "@inquirer/editor": ["@inquirer/editor@4.2.13", "", { "dependencies": { "@inquirer/core": "^10.1.13", "@inquirer/type": "^3.0.7", "external-editor": "^3.1.0" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-WbicD9SUQt/K8O5Vyk9iC2ojq5RHoCLK6itpp2fHsWe44VxxcA9z3GTWlvjSTGmMQpZr+lbVmrxdHcumJoLbMA=="], - - "@inquirer/expand": ["@inquirer/expand@4.0.15", "", { "dependencies": { "@inquirer/core": "^10.1.13", "@inquirer/type": "^3.0.7", "yoctocolors-cjs": "^2.1.2" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-4Y+pbr/U9Qcvf+N/goHzPEXiHH8680lM3Dr3Y9h9FFw4gHS+zVpbj8LfbKWIb/jayIB4aSO4pWiBTrBYWkvi5A=="], - - "@inquirer/figures": ["@inquirer/figures@1.0.12", "", {}, "sha512-MJttijd8rMFcKJC8NYmprWr6hD3r9Gd9qUC0XwPNwoEPWSMVJwA2MlXxF+nhZZNMY+HXsWa+o7KY2emWYIn0jQ=="], - - "@inquirer/input": ["@inquirer/input@4.1.12", "", { "dependencies": { "@inquirer/core": "^10.1.13", "@inquirer/type": "^3.0.7" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-xJ6PFZpDjC+tC1P8ImGprgcsrzQRsUh9aH3IZixm1lAZFK49UGHxM3ltFfuInN2kPYNfyoPRh+tU4ftsjPLKqQ=="], - - "@inquirer/number": ["@inquirer/number@3.0.15", "", { "dependencies": { "@inquirer/core": "^10.1.13", "@inquirer/type": "^3.0.7" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-xWg+iYfqdhRiM55MvqiTCleHzszpoigUpN5+t1OMcRkJrUrw7va3AzXaxvS+Ak7Gny0j2mFSTv2JJj8sMtbV2g=="], - - "@inquirer/password": ["@inquirer/password@4.0.15", "", { "dependencies": { "@inquirer/core": "^10.1.13", "@inquirer/type": "^3.0.7", "ansi-escapes": "^4.3.2" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-75CT2p43DGEnfGTaqFpbDC2p2EEMrq0S+IRrf9iJvYreMy5mAWj087+mdKyLHapUEPLjN10mNvABpGbk8Wdraw=="], - - "@inquirer/prompts": ["@inquirer/prompts@7.5.3", "", { "dependencies": { "@inquirer/checkbox": "^4.1.8", "@inquirer/confirm": "^5.1.12", "@inquirer/editor": "^4.2.13", "@inquirer/expand": "^4.0.15", "@inquirer/input": "^4.1.12", "@inquirer/number": "^3.0.15", "@inquirer/password": "^4.0.15", "@inquirer/rawlist": "^4.1.3", "@inquirer/search": "^3.0.15", "@inquirer/select": "^4.2.3" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-8YL0WiV7J86hVAxrh3fE5mDCzcTDe1670unmJRz6ArDgN+DBK1a0+rbnNWp4DUB5rPMwqD5ZP6YHl9KK1mbZRg=="], - - "@inquirer/rawlist": ["@inquirer/rawlist@4.1.3", "", { "dependencies": { "@inquirer/core": "^10.1.13", "@inquirer/type": "^3.0.7", "yoctocolors-cjs": "^2.1.2" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-7XrV//6kwYumNDSsvJIPeAqa8+p7GJh7H5kRuxirct2cgOcSWwwNGoXDRgpNFbY/MG2vQ4ccIWCi8+IXXyFMZA=="], - - "@inquirer/search": ["@inquirer/search@3.0.15", "", { "dependencies": { "@inquirer/core": "^10.1.13", "@inquirer/figures": "^1.0.12", "@inquirer/type": "^3.0.7", "yoctocolors-cjs": "^2.1.2" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-YBMwPxYBrADqyvP4nNItpwkBnGGglAvCLVW8u4pRmmvOsHUtCAUIMbUrLX5B3tFL1/WsLGdQ2HNzkqswMs5Uaw=="], - - "@inquirer/select": ["@inquirer/select@4.2.3", "", { "dependencies": { "@inquirer/core": "^10.1.13", "@inquirer/figures": "^1.0.12", "@inquirer/type": "^3.0.7", "ansi-escapes": "^4.3.2", "yoctocolors-cjs": "^2.1.2" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-OAGhXU0Cvh0PhLz9xTF/kx6g6x+sP+PcyTiLvCrewI99P3BBeexD+VbuwkNDvqGkk3y2h5ZiWLeRP7BFlhkUDg=="], - - "@inquirer/type": ["@inquirer/type@3.0.7", "", { "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-PfunHQcjwnju84L+ycmcMKB/pTPIngjUJvfnRhKY6FKPuYXlM4aQCb/nIdTFR6BEhMjFvngzvng/vBAJMZpLSA=="], - "@isaacs/cliui": ["@isaacs/cliui@8.0.2", "", { "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", "strip-ansi": "^7.0.1", "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", "wrap-ansi": "^8.1.0", "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" } }, "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA=="], "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.8", "", { "dependencies": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA=="], @@ -192,27 +166,27 @@ "@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="], - "@octokit/auth-token": ["@octokit/auth-token@5.1.2", "", {}, "sha512-JcQDsBdg49Yky2w2ld20IHAlwr8d/d8N6NiOXbtuoPCqzbsiJgF633mVUw3x4mo0H5ypataQIX7SFu3yy44Mpw=="], + "@octokit/auth-token": ["@octokit/auth-token@6.0.0", "", {}, "sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w=="], - "@octokit/core": ["@octokit/core@6.1.5", "", { "dependencies": { "@octokit/auth-token": "^5.0.0", "@octokit/graphql": "^8.2.2", "@octokit/request": "^9.2.3", "@octokit/request-error": "^6.1.8", "@octokit/types": "^14.0.0", "before-after-hook": "^3.0.2", "universal-user-agent": "^7.0.0" } }, "sha512-vvmsN0r7rguA+FySiCsbaTTobSftpIDIpPW81trAmsv9TGxg3YCujAxRYp/Uy8xmDgYCzzgulG62H7KYUFmeIg=="], + "@octokit/core": ["@octokit/core@7.0.2", "", { "dependencies": { "@octokit/auth-token": "^6.0.0", "@octokit/graphql": "^9.0.1", "@octokit/request": "^10.0.2", "@octokit/request-error": "^7.0.0", "@octokit/types": "^14.0.0", "before-after-hook": "^4.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-ODsoD39Lq6vR6aBgvjTnA3nZGliknKboc9Gtxr7E4WDNqY24MxANKcuDQSF0jzapvGb3KWOEDrKfve4HoWGK+g=="], - "@octokit/endpoint": ["@octokit/endpoint@10.1.4", "", { "dependencies": { "@octokit/types": "^14.0.0", "universal-user-agent": "^7.0.2" } }, "sha512-OlYOlZIsfEVZm5HCSR8aSg02T2lbUWOsCQoPKfTXJwDzcHQBrVBGdGXb89dv2Kw2ToZaRtudp8O3ZIYoaOjKlA=="], + "@octokit/endpoint": ["@octokit/endpoint@11.0.0", "", { "dependencies": { "@octokit/types": "^14.0.0", "universal-user-agent": "^7.0.2" } }, "sha512-hoYicJZaqISMAI3JfaDr1qMNi48OctWuOih1m80bkYow/ayPw6Jj52tqWJ6GEoFTk1gBqfanSoI1iY99Z5+ekQ=="], - "@octokit/graphql": ["@octokit/graphql@8.2.2", "", { "dependencies": { "@octokit/request": "^9.2.3", "@octokit/types": "^14.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-Yi8hcoqsrXGdt0yObxbebHXFOiUA+2v3n53epuOg1QUgOB6c4XzvisBNVXJSl8RYA5KrDuSL2yq9Qmqe5N0ryA=="], + "@octokit/graphql": ["@octokit/graphql@9.0.1", "", { "dependencies": { "@octokit/request": "^10.0.2", "@octokit/types": "^14.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-j1nQNU1ZxNFx2ZtKmL4sMrs4egy5h65OMDmSbVyuCzjOcwsHq6EaYjOTGXPQxgfiN8dJ4CriYHk6zF050WEULg=="], - "@octokit/openapi-types": ["@octokit/openapi-types@25.0.0", "", {}, "sha512-FZvktFu7HfOIJf2BScLKIEYjDsw6RKc7rBJCdvCTfKsVnx2GEB/Nbzjr29DUdb7vQhlzS/j8qDzdditP0OC6aw=="], + "@octokit/openapi-types": ["@octokit/openapi-types@25.1.0", "", {}, "sha512-idsIggNXUKkk0+BExUn1dQ92sfysJrje03Q0bv0e+KPLrvyqZF8MnBpFz8UNfYDwB3Ie7Z0TByjWfzxt7vseaA=="], - "@octokit/plugin-paginate-rest": ["@octokit/plugin-paginate-rest@12.0.0", "", { "dependencies": { "@octokit/types": "^14.0.0" }, "peerDependencies": { "@octokit/core": ">=6" } }, "sha512-MPd6WK1VtZ52lFrgZ0R2FlaoiWllzgqFHaSZxvp72NmoDeZ0m8GeJdg4oB6ctqMTYyrnDYp592Xma21mrgiyDA=="], + "@octokit/plugin-paginate-rest": ["@octokit/plugin-paginate-rest@13.0.1", "", { "dependencies": { "@octokit/types": "^14.1.0" }, "peerDependencies": { "@octokit/core": ">=6" } }, "sha512-m1KvHlueScy4mQJWvFDCxFBTIdXS0K1SgFGLmqHyX90mZdCIv6gWBbKRhatxRjhGlONuTK/hztYdaqrTXcFZdQ=="], - "@octokit/plugin-retry": ["@octokit/plugin-retry@7.2.1", "", { "dependencies": { "@octokit/request-error": "^6.1.8", "@octokit/types": "^14.0.0", "bottleneck": "^2.15.3" }, "peerDependencies": { "@octokit/core": ">=6" } }, "sha512-wUc3gv0D6vNHpGxSaR3FlqJpTXGWgqmk607N9L3LvPL4QjaxDgX/1nY2mGpT37Khn+nlIXdljczkRnNdTTV3/A=="], + "@octokit/plugin-retry": ["@octokit/plugin-retry@8.0.1", "", { "dependencies": { "@octokit/request-error": "^7.0.0", "@octokit/types": "^14.0.0", "bottleneck": "^2.15.3" }, "peerDependencies": { "@octokit/core": ">=7" } }, "sha512-KUoYR77BjF5O3zcwDQHRRZsUvJwepobeqiSSdCJ8lWt27FZExzb0GgVxrhhfuyF6z2B2zpO0hN5pteni1sqWiw=="], - "@octokit/plugin-throttling": ["@octokit/plugin-throttling@10.0.0", "", { "dependencies": { "@octokit/types": "^14.0.0", "bottleneck": "^2.15.3" }, "peerDependencies": { "@octokit/core": "^6.1.3" } }, "sha512-Kuq5/qs0DVYTHZuBAzCZStCzo2nKvVRo/TDNhCcpC2TKiOGz/DisXMCvjt3/b5kr6SCI1Y8eeeJTHBxxpFvZEg=="], + "@octokit/plugin-throttling": ["@octokit/plugin-throttling@11.0.1", "", { "dependencies": { "@octokit/types": "^14.0.0", "bottleneck": "^2.15.3" }, "peerDependencies": { "@octokit/core": "^7.0.0" } }, "sha512-S+EVhy52D/272L7up58dr3FNSMXWuNZolkL4zMJBNIfIxyZuUcczsQAU4b5w6dewJXnKYVgSHSV5wxitMSW1kw=="], - "@octokit/request": ["@octokit/request@9.2.3", "", { "dependencies": { "@octokit/endpoint": "^10.1.4", "@octokit/request-error": "^6.1.8", "@octokit/types": "^14.0.0", "fast-content-type-parse": "^2.0.0", "universal-user-agent": "^7.0.2" } }, "sha512-Ma+pZU8PXLOEYzsWf0cn/gY+ME57Wq8f49WTXA8FMHp2Ps9djKw//xYJ1je8Hm0pR2lU9FUGeJRWOtxq6olt4w=="], + "@octokit/request": ["@octokit/request@10.0.2", "", { "dependencies": { "@octokit/endpoint": "^11.0.0", "@octokit/request-error": "^7.0.0", "@octokit/types": "^14.0.0", "fast-content-type-parse": "^3.0.0", "universal-user-agent": "^7.0.2" } }, "sha512-iYj4SJG/2bbhh+iIpFmG5u49DtJ4lipQ+aPakjL9OKpsGY93wM8w06gvFbEQxcMsZcCvk5th5KkIm2m8o14aWA=="], - "@octokit/request-error": ["@octokit/request-error@6.1.8", "", { "dependencies": { "@octokit/types": "^14.0.0" } }, "sha512-WEi/R0Jmq+IJKydWlKDmryPcmdYSVjL3ekaiEL1L9eo1sUnqMJ+grqmC9cjk7CA7+b2/T397tO5d8YLOH3qYpQ=="], + "@octokit/request-error": ["@octokit/request-error@7.0.0", "", { "dependencies": { "@octokit/types": "^14.0.0" } }, "sha512-KRA7VTGdVyJlh0cP5Tf94hTiYVVqmt2f3I6mnimmaVz4UG3gQV/k4mDJlJv3X67iX6rmN7gSHCF8ssqeMnmhZg=="], - "@octokit/types": ["@octokit/types@14.0.0", "", { "dependencies": { "@octokit/openapi-types": "^25.0.0" } }, "sha512-VVmZP0lEhbo2O1pdq63gZFiGCKkm8PPp8AUOijlwPO6hojEVjspA0MWKP7E4hbvGxzFKNqKr6p0IYtOH/Wf/zA=="], + "@octokit/types": ["@octokit/types@14.1.0", "", { "dependencies": { "@octokit/openapi-types": "^25.1.0" } }, "sha512-1y6DgTy8Jomcpu33N+p5w58l6xyt55Ar2I91RPiIA0xCJBXyUAhXCcmZaDWSANiha7R9a6qJJ2CRomGPZ6f46g=="], "@pkgjs/parseargs": ["@pkgjs/parseargs@0.11.0", "", {}, "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg=="], @@ -222,45 +196,45 @@ "@pnpm/npm-conf": ["@pnpm/npm-conf@2.3.1", "", { "dependencies": { "@pnpm/config.env-replace": "^1.1.0", "@pnpm/network.ca-file": "^1.0.1", "config-chain": "^1.1.11" } }, "sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw=="], - "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.40.2", "", { "os": "android", "cpu": "arm" }, "sha512-JkdNEq+DFxZfUwxvB58tHMHBHVgX23ew41g1OQinthJ+ryhdRk67O31S7sYw8u2lTjHUPFxwar07BBt1KHp/hg=="], + "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.41.1", "", { "os": "android", "cpu": "arm" }, "sha512-NELNvyEWZ6R9QMkiytB4/L4zSEaBC03KIXEghptLGLZWJ6VPrL63ooZQCOnlx36aQPGhzuOMwDerC1Eb2VmrLw=="], - "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.40.2", "", { "os": "android", "cpu": "arm64" }, "sha512-13unNoZ8NzUmnndhPTkWPWbX3vtHodYmy+I9kuLxN+F+l+x3LdVF7UCu8TWVMt1POHLh6oDHhnOA04n8oJZhBw=="], + "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.41.1", "", { "os": "android", "cpu": "arm64" }, "sha512-DXdQe1BJ6TK47ukAoZLehRHhfKnKg9BjnQYUu9gzhI8Mwa1d2fzxA1aw2JixHVl403bwp1+/o/NhhHtxWJBgEA=="], - "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.40.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Gzf1Hn2Aoe8VZzevHostPX23U7N5+4D36WJNHK88NZHCJr7aVMG4fadqkIf72eqVPGjGc0HJHNuUaUcxiR+N/w=="], + "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.41.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-5afxvwszzdulsU2w8JKWwY8/sJOLPzf0e1bFuvcW5h9zsEg+RQAojdW0ux2zyYAz7R8HvvzKCjLNJhVq965U7w=="], - "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.40.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-47N4hxa01a4x6XnJoskMKTS8XZ0CZMd8YTbINbi+w03A2w4j1RTlnGHOz/P0+Bg1LaVL6ufZyNprSg+fW5nYQQ=="], + "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.41.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-egpJACny8QOdHNNMZKf8xY0Is6gIMz+tuqXlusxquWu3F833DcMwmGM7WlvCO9sB3OsPjdC4U0wHw5FabzCGZg=="], - "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.40.2", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-8t6aL4MD+rXSHHZUR1z19+9OFJ2rl1wGKvckN47XFRVO+QL/dUSpKA2SLRo4vMg7ELA8pzGpC+W9OEd1Z/ZqoQ=="], + "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.41.1", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-DBVMZH5vbjgRk3r0OzgjS38z+atlupJ7xfKIDJdZZL6sM6wjfDNo64aowcLPKIx7LMQi8vybB56uh1Ftck/Atg=="], - "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.40.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-C+AyHBzfpsOEYRFjztcYUFsH4S7UsE9cDtHCtma5BK8+ydOZYgMmWg1d/4KBytQspJCld8ZIujFMAdKG1xyr4Q=="], + "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.41.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-3FkydeohozEskBxNWEIbPfOE0aqQgB6ttTkJ159uWOFn42VLyfAiyD9UK5mhu+ItWzft60DycIN1Xdgiy8o/SA=="], - "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.40.2", "", { "os": "linux", "cpu": "arm" }, "sha512-de6TFZYIvJwRNjmW3+gaXiZ2DaWL5D5yGmSYzkdzjBDS3W+B9JQ48oZEsmMvemqjtAFzE16DIBLqd6IQQRuG9Q=="], + "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.41.1", "", { "os": "linux", "cpu": "arm" }, "sha512-wC53ZNDgt0pqx5xCAgNunkTzFE8GTgdZ9EwYGVcg+jEjJdZGtq9xPjDnFgfFozQI/Xm1mh+D9YlYtl+ueswNEg=="], - "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.40.2", "", { "os": "linux", "cpu": "arm" }, "sha512-urjaEZubdIkacKc930hUDOfQPysezKla/O9qV+O89enqsqUmQm8Xj8O/vh0gHg4LYfv7Y7UsE3QjzLQzDYN1qg=="], + "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.41.1", "", { "os": "linux", "cpu": "arm" }, "sha512-jwKCca1gbZkZLhLRtsrka5N8sFAaxrGz/7wRJ8Wwvq3jug7toO21vWlViihG85ei7uJTpzbXZRcORotE+xyrLA=="], - "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.40.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-KlE8IC0HFOC33taNt1zR8qNlBYHj31qGT1UqWqtvR/+NuCVhfufAq9fxO8BMFC22Wu0rxOwGVWxtCMvZVLmhQg=="], + "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.41.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-g0UBcNknsmmNQ8V2d/zD2P7WWfJKU0F1nu0k5pW4rvdb+BIqMm8ToluW/eeRmxCared5dD76lS04uL4UaNgpNA=="], - "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.40.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-j8CgxvfM0kbnhu4XgjnCWJQyyBOeBI1Zq91Z850aUddUmPeQvuAy6OiMdPS46gNFgy8gN1xkYyLgwLYZG3rBOg=="], + "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.41.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-XZpeGB5TKEZWzIrj7sXr+BEaSgo/ma/kCgrZgL0oo5qdB1JlTzIYQKel/RmhT6vMAvOdM2teYlAaOGJpJ9lahg=="], - "@rollup/rollup-linux-loongarch64-gnu": ["@rollup/rollup-linux-loongarch64-gnu@4.40.2", "", { "os": "linux", "cpu": "none" }, "sha512-Ybc/1qUampKuRF4tQXc7G7QY9YRyeVSykfK36Y5Qc5dmrIxwFhrOzqaVTNoZygqZ1ZieSWTibfFhQ5qK8jpWxw=="], + "@rollup/rollup-linux-loongarch64-gnu": ["@rollup/rollup-linux-loongarch64-gnu@4.41.1", "", { "os": "linux", "cpu": "none" }, "sha512-bkCfDJ4qzWfFRCNt5RVV4DOw6KEgFTUZi2r2RuYhGWC8WhCA8lCAJhDeAmrM/fdiAH54m0mA0Vk2FGRPyzI+tw=="], - "@rollup/rollup-linux-powerpc64le-gnu": ["@rollup/rollup-linux-powerpc64le-gnu@4.40.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-3FCIrnrt03CCsZqSYAOW/k9n625pjpuMzVfeI+ZBUSDT3MVIFDSPfSUgIl9FqUftxcUXInvFah79hE1c9abD+Q=="], + "@rollup/rollup-linux-powerpc64le-gnu": ["@rollup/rollup-linux-powerpc64le-gnu@4.41.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-3mr3Xm+gvMX+/8EKogIZSIEF0WUu0HL9di+YWlJpO8CQBnoLAEL/roTCxuLncEdgcfJcvA4UMOf+2dnjl4Ut1A=="], - "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.40.2", "", { "os": "linux", "cpu": "none" }, "sha512-QNU7BFHEvHMp2ESSY3SozIkBPaPBDTsfVNGx3Xhv+TdvWXFGOSH2NJvhD1zKAT6AyuuErJgbdvaJhYVhVqrWTg=="], + "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.41.1", "", { "os": "linux", "cpu": "none" }, "sha512-3rwCIh6MQ1LGrvKJitQjZFuQnT2wxfU+ivhNBzmxXTXPllewOF7JR1s2vMX/tWtUYFgphygxjqMl76q4aMotGw=="], - "@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.40.2", "", { "os": "linux", "cpu": "none" }, "sha512-5W6vNYkhgfh7URiXTO1E9a0cy4fSgfE4+Hl5agb/U1sa0kjOLMLC1wObxwKxecE17j0URxuTrYZZME4/VH57Hg=="], + "@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.41.1", "", { "os": "linux", "cpu": "none" }, "sha512-LdIUOb3gvfmpkgFZuccNa2uYiqtgZAz3PTzjuM5bH3nvuy9ty6RGc/Q0+HDFrHrizJGVpjnTZ1yS5TNNjFlklw=="], - "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.40.2", "", { "os": "linux", "cpu": "s390x" }, "sha512-B7LKIz+0+p348JoAL4X/YxGx9zOx3sR+o6Hj15Y3aaApNfAshK8+mWZEf759DXfRLeL2vg5LYJBB7DdcleYCoQ=="], + "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.41.1", "", { "os": "linux", "cpu": "s390x" }, "sha512-oIE6M8WC9ma6xYqjvPhzZYk6NbobIURvP/lEbh7FWplcMO6gn7MM2yHKA1eC/GvYwzNKK/1LYgqzdkZ8YFxR8g=="], - "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.40.2", "", { "os": "linux", "cpu": "x64" }, "sha512-lG7Xa+BmBNwpjmVUbmyKxdQJ3Q6whHjMjzQplOs5Z+Gj7mxPtWakGHqzMqNER68G67kmCX9qX57aRsW5V0VOng=="], + "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.41.1", "", { "os": "linux", "cpu": "x64" }, "sha512-cWBOvayNvA+SyeQMp79BHPK8ws6sHSsYnK5zDcsC3Hsxr1dgTABKjMnMslPq1DvZIp6uO7kIWhiGwaTdR4Og9A=="], - "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.40.2", "", { "os": "linux", "cpu": "x64" }, "sha512-tD46wKHd+KJvsmije4bUskNuvWKFcTOIM9tZ/RrmIvcXnbi0YK/cKS9FzFtAm7Oxi2EhV5N2OpfFB348vSQRXA=="], + "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.41.1", "", { "os": "linux", "cpu": "x64" }, "sha512-y5CbN44M+pUCdGDlZFzGGBSKCA4A/J2ZH4edTYSSxFg7ce1Xt3GtydbVKWLlzL+INfFIZAEg1ZV6hh9+QQf9YQ=="], - "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.40.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-Bjv/HG8RRWLNkXwQQemdsWw4Mg+IJ29LK+bJPW2SCzPKOUaMmPEppQlu/Fqk1d7+DX3V7JbFdbkh/NMmurT6Pg=="], + "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.41.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-lZkCxIrjlJlMt1dLO/FbpZbzt6J/A8p4DnqzSa4PWqPEUUUnzXLeki/iyPLfV0BmHItlYgHUqJe+3KiyydmiNQ=="], - "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.40.2", "", { "os": "win32", "cpu": "ia32" }, "sha512-dt1llVSGEsGKvzeIO76HToiYPNPYPkmjhMHhP00T9S4rDern8P2ZWvWAQUEJ+R1UdMWJ/42i/QqJ2WV765GZcA=="], + "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.41.1", "", { "os": "win32", "cpu": "ia32" }, "sha512-+psFT9+pIh2iuGsxFYYa/LhS5MFKmuivRsx9iPJWNSGbh2XVEjk90fmpUEjCnILPEPJnikAU6SFDiEUyOv90Pg=="], - "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.40.2", "", { "os": "win32", "cpu": "x64" }, "sha512-bwspbWB04XJpeElvsp+DCylKfF4trJDa2Y9Go8O6A7YLX2LIKGcNK/CYImJN6ZP4DcuOHB4Utl3iCbnR62DudA=="], + "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.41.1", "", { "os": "win32", "cpu": "x64" }, "sha512-Wq2zpapRYLfi4aKxf2Xff0tN+7slj2d4R87WEzqw7ZLsVvO5zwYCIuEGSZYiK41+GlwUo1HiR+GdkLEJnCKTCw=="], "@sec-ant/readable-stream": ["@sec-ant/readable-stream@0.4.1", "", {}, "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg=="], @@ -272,7 +246,7 @@ "@semantic-release/git": ["@semantic-release/git@10.0.1", "", { "dependencies": { "@semantic-release/error": "^3.0.0", "aggregate-error": "^3.0.0", "debug": "^4.0.0", "dir-glob": "^3.0.0", "execa": "^5.0.0", "lodash": "^4.17.4", "micromatch": "^4.0.0", "p-reduce": "^2.0.0" }, "peerDependencies": { "semantic-release": ">=18.0.0" } }, "sha512-eWrx5KguUcU2wUPaO6sfvZI0wPafUKAMNC18aXY4EnNcrZL86dEmpNVnC9uMpGZkmZJ9EfCVJBQx4pV4EMGT1w=="], - "@semantic-release/github": ["@semantic-release/github@11.0.2", "", { "dependencies": { "@octokit/core": "^6.0.0", "@octokit/plugin-paginate-rest": "^12.0.0", "@octokit/plugin-retry": "^7.0.0", "@octokit/plugin-throttling": "^10.0.0", "@semantic-release/error": "^4.0.0", "aggregate-error": "^5.0.0", "debug": "^4.3.4", "dir-glob": "^3.0.1", "globby": "^14.0.0", "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.0", "issue-parser": "^7.0.0", "lodash-es": "^4.17.21", "mime": "^4.0.0", "p-filter": "^4.0.0", "url-join": "^5.0.0" }, "peerDependencies": { "semantic-release": ">=24.1.0" } }, "sha512-EhHimj3/eOSPu0OflgDzwgrawoGJIn8XLOkNS6WzwuTr8ebxyX976Y4mCqJ8MlkdQpV5+8T+49sy8xXlcm6uCg=="], + "@semantic-release/github": ["@semantic-release/github@11.0.3", "", { "dependencies": { "@octokit/core": "^7.0.0", "@octokit/plugin-paginate-rest": "^13.0.0", "@octokit/plugin-retry": "^8.0.0", "@octokit/plugin-throttling": "^11.0.0", "@semantic-release/error": "^4.0.0", "aggregate-error": "^5.0.0", "debug": "^4.3.4", "dir-glob": "^3.0.1", "globby": "^14.0.0", "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.0", "issue-parser": "^7.0.0", "lodash-es": "^4.17.21", "mime": "^4.0.0", "p-filter": "^4.0.0", "url-join": "^5.0.0" }, "peerDependencies": { "semantic-release": ">=24.1.0" } }, "sha512-T2fKUyFkHHkUNa5XNmcsEcDPuG23hwBKptfUVcFXDVG2cSjXXZYDOfVYwfouqbWo/8UefotLaoGfQeK+k3ep6A=="], "@semantic-release/npm": ["@semantic-release/npm@12.0.1", "", { "dependencies": { "@semantic-release/error": "^4.0.0", "aggregate-error": "^5.0.0", "execa": "^9.0.0", "fs-extra": "^11.0.0", "lodash-es": "^4.17.21", "nerf-dart": "^1.0.0", "normalize-url": "^8.0.0", "npm": "^10.5.0", "rc": "^1.2.8", "read-pkg": "^9.0.0", "registry-auth-token": "^5.0.0", "semver": "^7.1.2", "tempy": "^3.0.0" }, "peerDependencies": { "semantic-release": ">=20.1.0" } }, "sha512-/6nntGSUGK2aTOI0rHPwY3ZjgY9FkXmEHbW9Kr+62NVOsyqpKKeP0lrCH+tphv+EsNdJNmqqwijTEnVWUMQ2Nw=="], @@ -288,25 +262,29 @@ "@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="], - "@types/node": ["@types/node@22.15.21", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-EV/37Td6c+MgKAbkcLG6vqZ2zEYHD7bvSrzqqs2RIhbA6w3x+Dqz8MZM3sP6kGTeLrdoOgKZe+Xja7tUB2DNkQ=="], + "@types/node": ["@types/node@22.15.24", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-w9CZGm9RDjzTh/D+hFwlBJ3ziUaVw7oufKA3vOFSOZlzmW9AkZnfjPb+DLnrV6qtgL/LNmP0/2zBNCFHL3F0ng=="], "@types/normalize-package-data": ["@types/normalize-package-data@2.4.4", "", {}, "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA=="], - "@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.32.1", "", { "dependencies": { "@eslint-community/regexpp": "^4.10.0", "@typescript-eslint/scope-manager": "8.32.1", "@typescript-eslint/type-utils": "8.32.1", "@typescript-eslint/utils": "8.32.1", "@typescript-eslint/visitor-keys": "8.32.1", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } }, "sha512-6u6Plg9nP/J1GRpe/vcjjabo6Uc5YQPAMxsgQyGC/I0RuukiG1wIe3+Vtg3IrSCVJDmqK3j8adrtzXSENRtFgg=="], + "@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.33.0", "", { "dependencies": { "@eslint-community/regexpp": "^4.10.0", "@typescript-eslint/scope-manager": "8.33.0", "@typescript-eslint/type-utils": "8.33.0", "@typescript-eslint/utils": "8.33.0", "@typescript-eslint/visitor-keys": "8.33.0", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.33.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } }, "sha512-CACyQuqSHt7ma3Ns601xykeBK/rDeZa3w6IS6UtMQbixO5DWy+8TilKkviGDH6jtWCo8FGRKEK5cLLkPvEammQ=="], - "@typescript-eslint/parser": ["@typescript-eslint/parser@8.32.1", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.32.1", "@typescript-eslint/types": "8.32.1", "@typescript-eslint/typescript-estree": "8.32.1", "@typescript-eslint/visitor-keys": "8.32.1", "debug": "^4.3.4" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } }, "sha512-LKMrmwCPoLhM45Z00O1ulb6jwyVr2kr3XJp+G+tSEZcbauNnScewcQwtJqXDhXeYPDEjZ8C1SjXm015CirEmGg=="], + "@typescript-eslint/parser": ["@typescript-eslint/parser@8.33.0", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.33.0", "@typescript-eslint/types": "8.33.0", "@typescript-eslint/typescript-estree": "8.33.0", "@typescript-eslint/visitor-keys": "8.33.0", "debug": "^4.3.4" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } }, "sha512-JaehZvf6m0yqYp34+RVnihBAChkqeH+tqqhS0GuX1qgPpwLvmTPheKEs6OeCK6hVJgXZHJ2vbjnC9j119auStQ=="], - "@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.32.1", "", { "dependencies": { "@typescript-eslint/types": "8.32.1", "@typescript-eslint/visitor-keys": "8.32.1" } }, "sha512-7IsIaIDeZn7kffk7qXC3o6Z4UblZJKV3UBpkvRNpr5NSyLji7tvTcvmnMNYuYLyh26mN8W723xpo3i4MlD33vA=="], + "@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.33.0", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.33.0", "@typescript-eslint/types": "^8.33.0", "debug": "^4.3.4" } }, "sha512-d1hz0u9l6N+u/gcrk6s6gYdl7/+pp8yHheRTqP6X5hVDKALEaTn8WfGiit7G511yueBEL3OpOEpD+3/MBdoN+A=="], - "@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@8.32.1", "", { "dependencies": { "@typescript-eslint/typescript-estree": "8.32.1", "@typescript-eslint/utils": "8.32.1", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } }, "sha512-mv9YpQGA8iIsl5KyUPi+FGLm7+bA4fgXaeRcFKRDRwDMu4iwrSHeDPipwueNXhdIIZltwCJv+NkxftECbIZWfA=="], + "@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.33.0", "", { "dependencies": { "@typescript-eslint/types": "8.33.0", "@typescript-eslint/visitor-keys": "8.33.0" } }, "sha512-LMi/oqrzpqxyO72ltP+dBSP6V0xiUb4saY7WLtxSfiNEBI8m321LLVFU9/QDJxjDQG9/tjSqKz/E3380TEqSTw=="], - "@typescript-eslint/types": ["@typescript-eslint/types@8.32.1", "", {}, "sha512-YmybwXUJcgGqgAp6bEsgpPXEg6dcCyPyCSr0CAAueacR/CCBi25G3V8gGQ2kRzQRBNol7VQknxMs9HvVa9Rvfg=="], + "@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.33.0", "", { "peerDependencies": { "typescript": ">=4.8.4 <5.9.0" } }, "sha512-sTkETlbqhEoiFmGr1gsdq5HyVbSOF0145SYDJ/EQmXHtKViCaGvnyLqWFFHtEXoS0J1yU8Wyou2UGmgW88fEug=="], - "@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.32.1", "", { "dependencies": { "@typescript-eslint/types": "8.32.1", "@typescript-eslint/visitor-keys": "8.32.1", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "typescript": ">=4.8.4 <5.9.0" } }, "sha512-Y3AP9EIfYwBb4kWGb+simvPaqQoT5oJuzzj9m0i6FCY6SPvlomY2Ei4UEMm7+FXtlNJbor80ximyslzaQF6xhg=="], + "@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@8.33.0", "", { "dependencies": { "@typescript-eslint/typescript-estree": "8.33.0", "@typescript-eslint/utils": "8.33.0", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } }, "sha512-lScnHNCBqL1QayuSrWeqAL5GmqNdVUQAAMTaCwdYEdWfIrSrOGzyLGRCHXcCixa5NK6i5l0AfSO2oBSjCjf4XQ=="], - "@typescript-eslint/utils": ["@typescript-eslint/utils@8.32.1", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", "@typescript-eslint/scope-manager": "8.32.1", "@typescript-eslint/types": "8.32.1", "@typescript-eslint/typescript-estree": "8.32.1" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } }, "sha512-DsSFNIgLSrc89gpq1LJB7Hm1YpuhK086DRDJSNrewcGvYloWW1vZLHBTIvarKZDcAORIy/uWNx8Gad+4oMpkSA=="], + "@typescript-eslint/types": ["@typescript-eslint/types@8.33.0", "", {}, "sha512-DKuXOKpM5IDT1FA2g9x9x1Ug81YuKrzf4mYX8FAVSNu5Wo/LELHWQyM1pQaDkI42bX15PWl0vNPt1uGiIFUOpg=="], - "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.32.1", "", { "dependencies": { "@typescript-eslint/types": "8.32.1", "eslint-visitor-keys": "^4.2.0" } }, "sha512-ar0tjQfObzhSaW3C3QNmTc5ofj0hDoNQ5XWrCy6zDyabdr0TWhCkClp+rywGNj/odAFBVzzJrK4tEq5M4Hmu4w=="], + "@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.33.0", "", { "dependencies": { "@typescript-eslint/project-service": "8.33.0", "@typescript-eslint/tsconfig-utils": "8.33.0", "@typescript-eslint/types": "8.33.0", "@typescript-eslint/visitor-keys": "8.33.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "typescript": ">=4.8.4 <5.9.0" } }, "sha512-vegY4FQoB6jL97Tu/lWRsAiUUp8qJTqzAmENH2k59SJhw0Th1oszb9Idq/FyyONLuNqT1OADJPXfyUNOR8SzAQ=="], + + "@typescript-eslint/utils": ["@typescript-eslint/utils@8.33.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", "@typescript-eslint/scope-manager": "8.33.0", "@typescript-eslint/types": "8.33.0", "@typescript-eslint/typescript-estree": "8.33.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } }, "sha512-lPFuQaLA9aSNa7D5u2EpRiqdAUhzShwGg/nhpBlc4GR6kcTABttCuyjFs8BcEZ8VWrjCBof/bePhP3Q3fS+Yrw=="], + + "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.33.0", "", { "dependencies": { "@typescript-eslint/types": "8.33.0", "eslint-visitor-keys": "^4.2.0" } }, "sha512-7RW7CMYoskiz5OOGAWjJFxgb7c5UNjTG292gYhWeOAcFmYCtVCSqjqSBj5zMhxbXo2JOW95YYrUWJfU0zrpaGQ=="], "JSONStream": ["JSONStream@1.3.5", "", { "dependencies": { "jsonparse": "^1.2.0", "through": ">=2.2.7 <3" }, "bin": { "JSONStream": "./bin.js" } }, "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ=="], @@ -320,7 +298,7 @@ "ajv": ["ajv@6.12.6", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="], - "ansi-escapes": ["ansi-escapes@4.3.2", "", { "dependencies": { "type-fest": "^0.21.3" } }, "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ=="], + "ansi-escapes": ["ansi-escapes@7.0.0", "", { "dependencies": { "environment": "^1.0.0" } }, "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw=="], "ansi-regex": ["ansi-regex@6.1.0", "", {}, "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="], @@ -336,7 +314,7 @@ "balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], - "before-after-hook": ["before-after-hook@3.0.2", "", {}, "sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A=="], + "before-after-hook": ["before-after-hook@4.0.0", "", {}, "sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ=="], "bottleneck": ["bottleneck@2.19.5", "", {}, "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw=="], @@ -354,22 +332,14 @@ "char-regex": ["char-regex@1.0.2", "", {}, "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw=="], - "chardet": ["chardet@0.7.0", "", {}, "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA=="], - "chokidar": ["chokidar@4.0.3", "", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="], "clean-stack": ["clean-stack@2.2.0", "", {}, "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A=="], - "cli-cursor": ["cli-cursor@5.0.0", "", { "dependencies": { "restore-cursor": "^5.0.0" } }, "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw=="], - "cli-highlight": ["cli-highlight@2.1.11", "", { "dependencies": { "chalk": "^4.0.0", "highlight.js": "^10.7.1", "mz": "^2.4.0", "parse5": "^5.1.1", "parse5-htmlparser2-tree-adapter": "^6.0.0", "yargs": "^16.0.0" }, "bin": { "highlight": "bin/highlight" } }, "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg=="], - "cli-spinners": ["cli-spinners@2.9.2", "", {}, "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg=="], - "cli-table3": ["cli-table3@0.6.5", "", { "dependencies": { "string-width": "^4.2.0" }, "optionalDependencies": { "@colors/colors": "1.5.0" } }, "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ=="], - "cli-width": ["cli-width@4.1.0", "", {}, "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ=="], - "cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], @@ -392,7 +362,7 @@ "conventional-changelog-conventionalcommits": ["conventional-changelog-conventionalcommits@9.0.0", "", { "dependencies": { "compare-func": "^2.0.0" } }, "sha512-5e48V0+DsWvQBEnnbBFhYQwYDzFPXVrakGPP1uSxekDkr5d7YWrmaWsgJpKFR0SkXmxK6qQr9O42uuLb9wpKxA=="], - "conventional-changelog-writer": ["conventional-changelog-writer@8.0.1", "", { "dependencies": { "conventional-commits-filter": "^5.0.0", "handlebars": "^4.7.7", "meow": "^13.0.0", "semver": "^7.5.2" }, "bin": { "conventional-changelog-writer": "dist/cli/index.js" } }, "sha512-hlqcy3xHred2gyYg/zXSMXraY2mjAYYo0msUCpK+BGyaVJMFCKWVXPIHiaacGO2GGp13kvHWXFhYmxT4QQqW3Q=="], + "conventional-changelog-writer": ["conventional-changelog-writer@8.1.0", "", { "dependencies": { "conventional-commits-filter": "^5.0.0", "handlebars": "^4.7.7", "meow": "^13.0.0", "semver": "^7.5.2" }, "bin": { "conventional-changelog-writer": "dist/cli/index.js" } }, "sha512-dpC440QnORNCO81XYuRRFOLCsjKj4W7tMkUIn3lR6F/FAaJcWLi7iCj6IcEvSQY2zw6VUgwUKd5DEHKEWrpmEQ=="], "conventional-commits-filter": ["conventional-commits-filter@5.0.0", "", {}, "sha512-tQMagCOC59EVgNZcC5zl7XqO30Wki9i9J3acbUvkaosCT6JX3EeFwJD7Qqp4MCikRnzS18WXV3BLIQ66ytu6+Q=="], @@ -412,7 +382,7 @@ "dargs": ["dargs@8.1.0", "", {}, "sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw=="], - "debug": ["debug@4.4.0", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], + "debug": ["debug@4.4.1", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ=="], "deep-extend": ["deep-extend@0.6.0", "", {}, "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="], @@ -426,13 +396,13 @@ "eastasianwidth": ["eastasianwidth@0.2.0", "", {}, "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="], - "emoji-regex": ["emoji-regex@10.4.0", "", {}, "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw=="], + "emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], "emojilib": ["emojilib@2.4.0", "", {}, "sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw=="], "enhanced-resolve": ["enhanced-resolve@5.18.1", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" } }, "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg=="], - "env-ci": ["env-ci@11.1.0", "", { "dependencies": { "execa": "^8.0.0", "java-properties": "^1.0.2" } }, "sha512-Z8dnwSDbV1XYM9SBF2J0GcNVvmfmfh3a49qddGIROhBoVro6MZVTji15z/sJbQ2ko2ei8n988EU1wzoLU/tF+g=="], + "env-ci": ["env-ci@11.1.1", "", { "dependencies": { "execa": "^8.0.0", "java-properties": "^1.0.2" } }, "sha512-mT3ks8F0kwpo7SYNds6nWj0PaRh+qJxIeBVBXAKTN9hphAzZv7s0QAZQbqnB1fAv/r4pJUGE15BV9UrS31FP2w=="], "env-paths": ["env-paths@2.2.1", "", {}, "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A=="], @@ -440,7 +410,7 @@ "error-ex": ["error-ex@1.3.2", "", { "dependencies": { "is-arrayish": "^0.2.1" } }, "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g=="], - "esbuild": ["esbuild@0.25.4", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.4", "@esbuild/android-arm": "0.25.4", "@esbuild/android-arm64": "0.25.4", "@esbuild/android-x64": "0.25.4", "@esbuild/darwin-arm64": "0.25.4", "@esbuild/darwin-x64": "0.25.4", "@esbuild/freebsd-arm64": "0.25.4", "@esbuild/freebsd-x64": "0.25.4", "@esbuild/linux-arm": "0.25.4", "@esbuild/linux-arm64": "0.25.4", "@esbuild/linux-ia32": "0.25.4", "@esbuild/linux-loong64": "0.25.4", "@esbuild/linux-mips64el": "0.25.4", "@esbuild/linux-ppc64": "0.25.4", "@esbuild/linux-riscv64": "0.25.4", "@esbuild/linux-s390x": "0.25.4", "@esbuild/linux-x64": "0.25.4", "@esbuild/netbsd-arm64": "0.25.4", "@esbuild/netbsd-x64": "0.25.4", "@esbuild/openbsd-arm64": "0.25.4", "@esbuild/openbsd-x64": "0.25.4", "@esbuild/sunos-x64": "0.25.4", "@esbuild/win32-arm64": "0.25.4", "@esbuild/win32-ia32": "0.25.4", "@esbuild/win32-x64": "0.25.4" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q=="], + "esbuild": ["esbuild@0.25.5", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.5", "@esbuild/android-arm": "0.25.5", "@esbuild/android-arm64": "0.25.5", "@esbuild/android-x64": "0.25.5", "@esbuild/darwin-arm64": "0.25.5", "@esbuild/darwin-x64": "0.25.5", "@esbuild/freebsd-arm64": "0.25.5", "@esbuild/freebsd-x64": "0.25.5", "@esbuild/linux-arm": "0.25.5", "@esbuild/linux-arm64": "0.25.5", "@esbuild/linux-ia32": "0.25.5", "@esbuild/linux-loong64": "0.25.5", "@esbuild/linux-mips64el": "0.25.5", "@esbuild/linux-ppc64": "0.25.5", "@esbuild/linux-riscv64": "0.25.5", "@esbuild/linux-s390x": "0.25.5", "@esbuild/linux-x64": "0.25.5", "@esbuild/netbsd-arm64": "0.25.5", "@esbuild/netbsd-x64": "0.25.5", "@esbuild/openbsd-arm64": "0.25.5", "@esbuild/openbsd-x64": "0.25.5", "@esbuild/sunos-x64": "0.25.5", "@esbuild/win32-arm64": "0.25.5", "@esbuild/win32-ia32": "0.25.5", "@esbuild/win32-x64": "0.25.5" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ=="], "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], @@ -470,9 +440,7 @@ "execa": ["execa@5.1.1", "", { "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", "human-signals": "^2.1.0", "is-stream": "^2.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^4.0.1", "onetime": "^5.1.2", "signal-exit": "^3.0.3", "strip-final-newline": "^2.0.0" } }, "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg=="], - "external-editor": ["external-editor@3.1.0", "", { "dependencies": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", "tmp": "^0.0.33" } }, "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew=="], - - "fast-content-type-parse": ["fast-content-type-parse@2.0.1", "", {}, "sha512-nGqtvLrj5w0naR6tDPfB4cUmYCqouzyQiz6C5y/LtcDllJdrcc6WaWW6iXyIIOErTa/XRybj28aasdn4LkVk6Q=="], + "fast-content-type-parse": ["fast-content-type-parse@3.0.0", "", {}, "sha512-ZvLdcY8P+N8mGQJahJV5G4U88CSvT1rP8ApL6uETe88MBXrBHAkZlSEySdUlyztF7ccb+Znos3TFqaepHxdhBg=="], "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], @@ -486,7 +454,7 @@ "fastq": ["fastq@1.19.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ=="], - "fdir": ["fdir@6.4.4", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg=="], + "fdir": ["fdir@6.4.5", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw=="], "figures": ["figures@6.1.0", "", { "dependencies": { "is-unicode-supported": "^2.0.0" } }, "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg=="], @@ -518,11 +486,9 @@ "get-caller-file": ["get-caller-file@2.0.5", "", {}, "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="], - "get-east-asian-width": ["get-east-asian-width@1.3.0", "", {}, "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ=="], - "get-stream": ["get-stream@6.0.1", "", {}, "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg=="], - "get-tsconfig": ["get-tsconfig@4.10.0", "", { "dependencies": { "resolve-pkg-maps": "^1.0.0" } }, "sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A=="], + "get-tsconfig": ["get-tsconfig@4.10.1", "", { "dependencies": { "resolve-pkg-maps": "^1.0.0" } }, "sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ=="], "git-log-parser": ["git-log-parser@1.2.1", "", { "dependencies": { "argv-formatter": "~1.0.0", "spawn-error-forwarder": "~1.0.0", "split2": "~1.0.0", "stream-combiner2": "~1.1.1", "through2": "~2.0.0", "traverse": "0.6.8" } }, "sha512-PI+sPDvHXNPl5WNOErAK05s3j0lgwUzMN6o8cyQrDaKfT3qd7TmNJKeXX+SknI5I0QhG5fVPAEwSY4tRGDtYoQ=="], @@ -558,8 +524,6 @@ "human-signals": ["human-signals@2.1.0", "", {}, "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw=="], - "iconv-lite": ["iconv-lite@0.4.24", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3" } }, "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA=="], - "ignore": ["ignore@7.0.4", "", {}, "sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A=="], "import-fresh": ["import-fresh@3.3.1", "", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ=="], @@ -578,8 +542,6 @@ "ini": ["ini@1.3.8", "", {}, "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="], - "inquirer": ["inquirer@12.6.3", "", { "dependencies": { "@inquirer/core": "^10.1.13", "@inquirer/prompts": "^7.5.3", "@inquirer/type": "^3.0.7", "ansi-escapes": "^4.3.2", "mute-stream": "^2.0.0", "run-async": "^3.0.0", "rxjs": "^7.8.2" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-eX9beYAjr1MqYsIjx1vAheXsRk1jbZRvHLcBu5nA9wX0rXR1IfCZLnVLp4Ym4mrhqmh7AuANwcdtgQ291fZDfQ=="], - "into-stream": ["into-stream@7.0.0", "", { "dependencies": { "from2": "^2.3.0", "p-is-promise": "^3.0.0" } }, "sha512-2dYz766i9HprMBasCMvHMuazJ7u4WzhJwo5kb3iPSiW/iRYV6uPari3zHoqZlnuaR7V1bEiNMxikhp37rdBXbw=="], "is-arrayish": ["is-arrayish@0.2.1", "", {}, "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="], @@ -590,8 +552,6 @@ "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="], - "is-interactive": ["is-interactive@2.0.0", "", {}, "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ=="], - "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="], "is-obj": ["is-obj@2.0.0", "", {}, "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w=="], @@ -706,8 +666,6 @@ "lodash.upperfirst": ["lodash.upperfirst@4.3.1", "", {}, "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg=="], - "log-symbols": ["log-symbols@6.0.0", "", { "dependencies": { "chalk": "^5.3.0", "is-unicode-supported": "^1.3.0" } }, "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw=="], - "lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], "magic-string": ["magic-string@0.30.17", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0" } }, "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA=="], @@ -728,8 +686,6 @@ "mimic-fn": ["mimic-fn@2.1.0", "", {}, "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="], - "mimic-function": ["mimic-function@5.0.1", "", {}, "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA=="], - "minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], @@ -740,8 +696,6 @@ "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], - "mute-stream": ["mute-stream@2.0.0", "", {}, "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA=="], - "mz": ["mz@2.7.0", "", { "dependencies": { "any-promise": "^1.0.0", "object-assign": "^4.0.1", "thenify-all": "^1.0.0" } }, "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q=="], "natural-compare": ["natural-compare@1.4.0", "", {}, "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="], @@ -766,10 +720,6 @@ "optionator": ["optionator@0.9.4", "", { "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", "word-wrap": "^1.2.5" } }, "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g=="], - "ora": ["ora@8.2.0", "", { "dependencies": { "chalk": "^5.3.0", "cli-cursor": "^5.0.0", "cli-spinners": "^2.9.2", "is-interactive": "^2.0.0", "is-unicode-supported": "^2.0.0", "log-symbols": "^6.0.0", "stdin-discarder": "^0.2.2", "string-width": "^7.2.0", "strip-ansi": "^7.1.0" } }, "sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw=="], - - "os-tmpdir": ["os-tmpdir@1.0.2", "", {}, "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g=="], - "p-each-series": ["p-each-series@3.0.0", "", {}, "sha512-lastgtAdoH9YaLyDa5i5z64q+kzOcQHsQ5SsZJD3q0VEyI8mq872S3geuNbRUQLVAE9siMfgKrpj7MloKFHruw=="], "p-filter": ["p-filter@4.1.0", "", { "dependencies": { "p-map": "^7.0.1" } }, "sha512-37/tPdZ3oJwHaS3gNJdenCDB3Tz26i9sjhnguBtvN0vYlRIiDNnvTWkuh+0hETV9rLPdJ3rlL3yVOYPIAnM8rw=="], @@ -856,22 +806,14 @@ "resolve-pkg-maps": ["resolve-pkg-maps@1.0.0", "", {}, "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw=="], - "restore-cursor": ["restore-cursor@5.1.0", "", { "dependencies": { "onetime": "^7.0.0", "signal-exit": "^4.1.0" } }, "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA=="], - "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="], - "rollup": ["rollup@4.40.2", "", { "dependencies": { "@types/estree": "1.0.7" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.40.2", "@rollup/rollup-android-arm64": "4.40.2", "@rollup/rollup-darwin-arm64": "4.40.2", "@rollup/rollup-darwin-x64": "4.40.2", "@rollup/rollup-freebsd-arm64": "4.40.2", "@rollup/rollup-freebsd-x64": "4.40.2", "@rollup/rollup-linux-arm-gnueabihf": "4.40.2", "@rollup/rollup-linux-arm-musleabihf": "4.40.2", "@rollup/rollup-linux-arm64-gnu": "4.40.2", "@rollup/rollup-linux-arm64-musl": "4.40.2", "@rollup/rollup-linux-loongarch64-gnu": "4.40.2", "@rollup/rollup-linux-powerpc64le-gnu": "4.40.2", "@rollup/rollup-linux-riscv64-gnu": "4.40.2", "@rollup/rollup-linux-riscv64-musl": "4.40.2", "@rollup/rollup-linux-s390x-gnu": "4.40.2", "@rollup/rollup-linux-x64-gnu": "4.40.2", "@rollup/rollup-linux-x64-musl": "4.40.2", "@rollup/rollup-win32-arm64-msvc": "4.40.2", "@rollup/rollup-win32-ia32-msvc": "4.40.2", "@rollup/rollup-win32-x64-msvc": "4.40.2", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-tfUOg6DTP4rhQ3VjOO6B4wyrJnGOX85requAXvqYTHsOgb2TFJdZ3aWpT8W2kPoypSGP7dZUyzxJ9ee4buM5Fg=="], - - "run-async": ["run-async@3.0.0", "", {}, "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q=="], + "rollup": ["rollup@4.41.1", "", { "dependencies": { "@types/estree": "1.0.7" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.41.1", "@rollup/rollup-android-arm64": "4.41.1", "@rollup/rollup-darwin-arm64": "4.41.1", "@rollup/rollup-darwin-x64": "4.41.1", "@rollup/rollup-freebsd-arm64": "4.41.1", "@rollup/rollup-freebsd-x64": "4.41.1", "@rollup/rollup-linux-arm-gnueabihf": "4.41.1", "@rollup/rollup-linux-arm-musleabihf": "4.41.1", "@rollup/rollup-linux-arm64-gnu": "4.41.1", "@rollup/rollup-linux-arm64-musl": "4.41.1", "@rollup/rollup-linux-loongarch64-gnu": "4.41.1", "@rollup/rollup-linux-powerpc64le-gnu": "4.41.1", "@rollup/rollup-linux-riscv64-gnu": "4.41.1", "@rollup/rollup-linux-riscv64-musl": "4.41.1", "@rollup/rollup-linux-s390x-gnu": "4.41.1", "@rollup/rollup-linux-x64-gnu": "4.41.1", "@rollup/rollup-linux-x64-musl": "4.41.1", "@rollup/rollup-win32-arm64-msvc": "4.41.1", "@rollup/rollup-win32-ia32-msvc": "4.41.1", "@rollup/rollup-win32-x64-msvc": "4.41.1", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-cPmwD3FnFv8rKMBc1MxWCwVQFxwf1JEmSX3iQXrRVVG15zerAIXRjMFVWnd5Q5QvgKF7Aj+5ykXFhUl+QGnyOw=="], "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="], - "rxjs": ["rxjs@7.8.2", "", { "dependencies": { "tslib": "^2.1.0" } }, "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA=="], - "safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], - "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="], - "semantic-release": ["semantic-release@24.2.5", "", { "dependencies": { "@semantic-release/commit-analyzer": "^13.0.0-beta.1", "@semantic-release/error": "^4.0.0", "@semantic-release/github": "^11.0.0", "@semantic-release/npm": "^12.0.0", "@semantic-release/release-notes-generator": "^14.0.0-beta.1", "aggregate-error": "^5.0.0", "cosmiconfig": "^9.0.0", "debug": "^4.0.0", "env-ci": "^11.0.0", "execa": "^9.0.0", "figures": "^6.0.0", "find-versions": "^6.0.0", "get-stream": "^6.0.0", "git-log-parser": "^1.2.0", "hook-std": "^3.0.0", "hosted-git-info": "^8.0.0", "import-from-esm": "^2.0.0", "lodash-es": "^4.17.21", "marked": "^15.0.0", "marked-terminal": "^7.3.0", "micromatch": "^4.0.2", "p-each-series": "^3.0.0", "p-reduce": "^3.0.0", "read-package-up": "^11.0.0", "resolve-from": "^5.0.0", "semver": "^7.3.2", "semver-diff": "^4.0.0", "signale": "^1.2.1", "yargs": "^17.5.1" }, "bin": { "semantic-release": "bin/semantic-release.js" } }, "sha512-9xV49HNY8C0/WmPWxTlaNleiXhWb//qfMzG2c5X8/k7tuWcu8RssbuS+sujb/h7PiWSXv53mrQvV9hrO9b7vuQ=="], "semver": ["semver@7.7.2", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA=="], @@ -888,6 +830,8 @@ "signale": ["signale@1.4.0", "", { "dependencies": { "chalk": "^2.3.2", "figures": "^2.0.0", "pkg-conf": "^2.1.0" } }, "sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w=="], + "sisteransi": ["sisteransi@1.0.5", "", {}, "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="], + "skin-tone": ["skin-tone@2.0.0", "", { "dependencies": { "unicode-emoji-modifier-base": "^1.0.0" } }, "sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA=="], "slash": ["slash@5.1.0", "", {}, "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg=="], @@ -906,17 +850,15 @@ "split2": ["split2@1.0.0", "", { "dependencies": { "through2": "~2.0.0" } }, "sha512-NKywug4u4pX/AZBB1FCPzZ6/7O+Xhz1qMVbzTvvKvikjO99oPN87SkK08mEY9P63/5lWjK+wgOOgApnTg5r6qg=="], - "stdin-discarder": ["stdin-discarder@0.2.2", "", {}, "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ=="], - "stream-combiner2": ["stream-combiner2@1.1.1", "", { "dependencies": { "duplexer2": "~0.1.0", "readable-stream": "^2.0.2" } }, "sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw=="], - "string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], + "string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], "string-width-cjs": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], "string_decoder": ["string_decoder@1.1.1", "", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="], - "strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="], + "strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], "strip-ansi-cjs": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], @@ -934,7 +876,7 @@ "supports-hyperlinks": ["supports-hyperlinks@3.2.0", "", { "dependencies": { "has-flag": "^4.0.0", "supports-color": "^7.0.0" } }, "sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig=="], - "tapable": ["tapable@2.2.1", "", {}, "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ=="], + "tapable": ["tapable@2.2.2", "", {}, "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg=="], "temp-dir": ["temp-dir@3.0.0", "", {}, "sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw=="], @@ -954,9 +896,7 @@ "tinyexec": ["tinyexec@1.0.1", "", {}, "sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw=="], - "tinyglobby": ["tinyglobby@0.2.13", "", { "dependencies": { "fdir": "^6.4.4", "picomatch": "^4.0.2" } }, "sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw=="], - - "tmp": ["tmp@0.0.33", "", { "dependencies": { "os-tmpdir": "~1.0.2" } }, "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw=="], + "tinyglobby": ["tinyglobby@0.2.14", "", { "dependencies": { "fdir": "^6.4.4", "picomatch": "^4.0.2" } }, "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ=="], "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="], @@ -970,8 +910,6 @@ "ts-interface-checker": ["ts-interface-checker@0.1.13", "", {}, "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA=="], - "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - "tsup": ["tsup@8.5.0", "", { "dependencies": { "bundle-require": "^5.1.0", "cac": "^6.7.14", "chokidar": "^4.0.3", "consola": "^3.4.0", "debug": "^4.4.0", "esbuild": "^0.25.0", "fix-dts-default-cjs-exports": "^1.0.0", "joycon": "^3.1.1", "picocolors": "^1.1.1", "postcss-load-config": "^6.0.1", "resolve-from": "^5.0.0", "rollup": "^4.34.8", "source-map": "0.8.0-beta.0", "sucrase": "^3.35.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.11", "tree-kill": "^1.2.2" }, "peerDependencies": { "@microsoft/api-extractor": "^7.36.0", "@swc/core": "^1", "postcss": "^8.4.12", "typescript": ">=4.5.0" }, "optionalPeers": ["@microsoft/api-extractor", "@swc/core", "postcss", "typescript"], "bin": { "tsup": "dist/cli-default.js", "tsup-node": "dist/cli-node.js" } }, "sha512-VmBp77lWNQq6PfuMqCHD3xWl22vEoWsKajkF8t+yMBawlUS8JzEI+vOVMeuNZIuMML8qXRizFKi9oD5glKQVcQ=="], "tsx": ["tsx@4.19.4", "", { "dependencies": { "esbuild": "~0.25.0", "get-tsconfig": "^4.7.5" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "bin": { "tsx": "dist/cli.mjs" } }, "sha512-gK5GVzDkJK1SI1zwHf32Mqxf2tSJkNx+eYcNly5+nHvWqXUJYUkWBQtKauoESz3ymezAI++ZwT855x5p5eop+Q=="], @@ -1016,7 +954,7 @@ "wordwrap": ["wordwrap@1.0.0", "", {}, "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q=="], - "wrap-ansi": ["wrap-ansi@6.2.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA=="], + "wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], "wrap-ansi-cjs": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], @@ -1032,8 +970,6 @@ "yoctocolors": ["yoctocolors@2.1.1", "", {}, "sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ=="], - "yoctocolors-cjs": ["yoctocolors-cjs@2.1.2", "", {}, "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA=="], - "@commitlint/config-conventional/conventional-changelog-conventionalcommits": ["conventional-changelog-conventionalcommits@7.0.2", "", { "dependencies": { "compare-func": "^2.0.0" } }, "sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w=="], "@commitlint/config-validator/ajv": ["ajv@8.17.1", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g=="], @@ -1058,10 +994,10 @@ "@humanfs/node/@humanwhocodes/retry": ["@humanwhocodes/retry@0.3.1", "", {}, "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA=="], - "@inquirer/core/signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], - "@isaacs/cliui/string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="], + "@isaacs/cliui/strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="], + "@isaacs/cliui/wrap-ansi": ["wrap-ansi@8.1.0", "", { "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" } }, "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ=="], "@pnpm/network.ca-file/graceful-fs": ["graceful-fs@4.2.10", "", {}, "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA=="], @@ -1074,26 +1010,14 @@ "@semantic-release/npm/aggregate-error": ["aggregate-error@5.0.0", "", { "dependencies": { "clean-stack": "^5.2.0", "indent-string": "^5.0.0" } }, "sha512-gOsf2YwSlleG6IjRYG2A7k0HmBMEo6qVNk9Bp/EaLgAJT5ngH6PXbqa4ItvnEwCm/velL5jAnQgsHsWnjhGmvw=="], - "@semantic-release/npm/execa": ["execa@9.5.3", "", { "dependencies": { "@sindresorhus/merge-streams": "^4.0.0", "cross-spawn": "^7.0.3", "figures": "^6.1.0", "get-stream": "^9.0.0", "human-signals": "^8.0.0", "is-plain-obj": "^4.1.0", "is-stream": "^4.0.1", "npm-run-path": "^6.0.0", "pretty-ms": "^9.0.0", "signal-exit": "^4.1.0", "strip-final-newline": "^4.0.0", "yoctocolors": "^2.0.0" } }, "sha512-QFNnTvU3UjgWFy8Ef9iDHvIdcgZ344ebkwYx4/KLbR+CKQA4xBaHzv+iRpp86QfMHP8faFQLh8iOc57215y4Rg=="], + "@semantic-release/npm/execa": ["execa@9.6.0", "", { "dependencies": { "@sindresorhus/merge-streams": "^4.0.0", "cross-spawn": "^7.0.6", "figures": "^6.1.0", "get-stream": "^9.0.0", "human-signals": "^8.0.1", "is-plain-obj": "^4.1.0", "is-stream": "^4.0.1", "npm-run-path": "^6.0.0", "pretty-ms": "^9.2.0", "signal-exit": "^4.1.0", "strip-final-newline": "^4.0.0", "yoctocolors": "^2.1.1" } }, "sha512-jpWzZ1ZhwUmeWRhS7Qv3mhpOhLfwI+uAX4e5fOcXqwMR7EcJ0pj2kV1CVzHVMX/LphnKWD3LObjZCoJ71lKpHw=="], "@semantic-release/release-notes-generator/get-stream": ["get-stream@7.0.1", "", {}, "sha512-3M8C1EOFN6r8AMUhwUAACIoXZJEOufDU5+0gFFN5uNs6XYOralD2Pqkl7m046va6x77FwposWXbAhPPIOus7mQ=="], - "@types/conventional-commits-parser/@types/node": ["@types/node@22.15.17", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-wIX2aSZL5FE+MR0JlvF87BNVrtFWf6AE6rxSE9X7OwnVvoyCQjpzSRJ+M87se/4QCkCiebQAqrJ0y6fwIyi7nw=="], - "@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], - "ansi-escapes/type-fest": ["type-fest@0.21.3", "", {}, "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w=="], - "cli-highlight/yargs": ["yargs@16.2.0", "", { "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.0", "y18n": "^5.0.5", "yargs-parser": "^20.2.2" } }, "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw=="], - "cli-table3/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], - - "cliui/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], - - "cliui/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - - "cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], - "conventional-changelog-writer/meow": ["meow@13.2.0", "", {}, "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA=="], "conventional-commits-parser/meow": ["meow@13.2.0", "", {}, "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA=="], @@ -1130,12 +1054,6 @@ "load-json-file/parse-json": ["parse-json@4.0.0", "", { "dependencies": { "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" } }, "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw=="], - "log-symbols/chalk": ["chalk@5.4.1", "", {}, "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w=="], - - "log-symbols/is-unicode-supported": ["is-unicode-supported@1.3.0", "", {}, "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ=="], - - "marked-terminal/ansi-escapes": ["ansi-escapes@7.0.0", "", { "dependencies": { "environment": "^1.0.0" } }, "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw=="], - "marked-terminal/chalk": ["chalk@5.4.1", "", {}, "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w=="], "normalize-package-data/hosted-git-info": ["hosted-git-info@7.0.2", "", { "dependencies": { "lru-cache": "^10.0.1" } }, "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w=="], @@ -1166,7 +1084,7 @@ "npm/@npmcli/node-gyp": ["@npmcli/node-gyp@4.0.0", "", {}, "sha512-+t5DZ6mO/QFh78PByMq1fGSAub/agLJZDRfJRMeOSNCt8s9YVlTjmGpIPwPhvXTGUIJk+WszlT0rQa1W33yzNA=="], - "npm/@npmcli/package-json": ["@npmcli/package-json@6.1.1", "", { "dependencies": { "@npmcli/git": "^6.0.0", "glob": "^10.2.2", "hosted-git-info": "^8.0.0", "json-parse-even-better-errors": "^4.0.0", "proc-log": "^5.0.0", "semver": "^7.5.3", "validate-npm-package-license": "^3.0.4" }, "bundled": true }, "sha512-d5qimadRAUCO4A/Txw71VM7UrRZzV+NPclxz/dc+M6B2oYwjWTjqh8HA/sGQgs9VZuJ6I/P7XIAlJvgrl27ZOw=="], + "npm/@npmcli/package-json": ["@npmcli/package-json@6.2.0", "", { "dependencies": { "@npmcli/git": "^6.0.0", "glob": "^10.2.2", "hosted-git-info": "^8.0.0", "json-parse-even-better-errors": "^4.0.0", "proc-log": "^5.0.0", "semver": "^7.5.3", "validate-npm-package-license": "^3.0.4" }, "bundled": true }, "sha512-rCNLSB/JzNvot0SEyXqWZ7tX2B5dD2a1br2Dp0vSYVo5jh8Z0EZ7lS9TsZ1UtziddB1UfNUaMCc538/HztnJGA=="], "npm/@npmcli/promise-spawn": ["@npmcli/promise-spawn@8.0.2", "", { "dependencies": { "which": "^5.0.0" }, "bundled": true }, "sha512-/bNJhjc+o6qL+Dwz/bqfTQClkEO5nTQ1ZEcdCkAQjhkZMHIh22LPG7fNh1enJP1NKWDqYiiABnjFCY7E0zHYtQ=="], @@ -1182,7 +1100,7 @@ "npm/@sigstore/core": ["@sigstore/core@2.0.0", "", {}, "sha512-nYxaSb/MtlSI+JWcwTHQxyNmWeWrUXJJ/G4liLrGG7+tS4vAz6LF3xRXqLH6wPIVUoZQel2Fs4ddLx4NCpiIYg=="], - "npm/@sigstore/protobuf-specs": ["@sigstore/protobuf-specs@0.4.1", "", {}, "sha512-7MJXQhIm7dWF9zo7rRtMYh8d2gSnc3+JddeQOTIg6gUN7FjcuckZ9EwGq+ReeQtbbl3Tbf5YqRrWxA1DMfIn+w=="], + "npm/@sigstore/protobuf-specs": ["@sigstore/protobuf-specs@0.4.2", "", {}, "sha512-F2ye+n1INNhqT0MW+LfUEvTUPc/nS70vICJcxorKl7/gV9CO39+EDCw+qHNKEqvsDWk++yGVKCbzK1qLPvmC8g=="], "npm/@sigstore/sign": ["@sigstore/sign@3.1.0", "", { "dependencies": { "@sigstore/bundle": "^3.1.0", "@sigstore/core": "^2.0.0", "@sigstore/protobuf-specs": "^0.4.0", "make-fetch-happen": "^14.0.2", "proc-log": "^5.0.0", "promise-retry": "^2.0.1" } }, "sha512-knzjmaOHOov1Ur7N/z4B1oPqZ0QX5geUfhrVaqVlu+hl0EAoL4o+l0MSULINcD5GCWe3Z0+YJO8ues6vFlW0Yw=="], @@ -1242,7 +1160,7 @@ "npm/cssesc": ["cssesc@3.0.0", "", { "bin": { "cssesc": "bin/cssesc" } }, "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="], - "npm/debug": ["debug@4.4.0", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], + "npm/debug": ["debug@4.4.1", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ=="], "npm/diff": ["diff@5.2.0", "", {}, "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A=="], @@ -1260,7 +1178,7 @@ "npm/fastest-levenshtein": ["fastest-levenshtein@1.0.16", "", { "bundled": true }, "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg=="], - "npm/fdir": ["fdir@6.4.4", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg=="], + "npm/fdir": ["fdir@6.4.5", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw=="], "npm/foreground-child": ["foreground-child@3.3.1", "", { "dependencies": { "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" } }, "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw=="], @@ -1474,7 +1392,7 @@ "npm/tiny-relative-date": ["tiny-relative-date@1.3.0", "", { "bundled": true }, "sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A=="], - "npm/tinyglobby": ["tinyglobby@0.2.13", "", { "dependencies": { "fdir": "^6.4.4", "picomatch": "^4.0.2" } }, "sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw=="], + "npm/tinyglobby": ["tinyglobby@0.2.14", "", { "dependencies": { "fdir": "^6.4.4", "picomatch": "^4.0.2" } }, "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ=="], "npm/treeverse": ["treeverse@3.0.0", "", { "bundled": true }, "sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ=="], @@ -1502,8 +1420,6 @@ "npm/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], - "ora/chalk": ["chalk@5.4.1", "", {}, "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w=="], - "parse5-htmlparser2-tree-adapter/parse5": ["parse5@6.0.1", "", {}, "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw=="], "pkg-conf/find-up": ["find-up@2.1.0", "", { "dependencies": { "locate-path": "^2.0.0" } }, "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ=="], @@ -1514,15 +1430,11 @@ "read-pkg/unicorn-magic": ["unicorn-magic@0.1.0", "", {}, "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ=="], - "restore-cursor/onetime": ["onetime@7.0.0", "", { "dependencies": { "mimic-function": "^5.0.0" } }, "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ=="], - - "restore-cursor/signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], - "semantic-release/@semantic-release/error": ["@semantic-release/error@4.0.0", "", {}, "sha512-mgdxrHTLOjOddRVYIYDo0fR3/v61GNN1YGkfbrjuIKg/uMgCd+Qzo3UAXJ+woLQQpos4pl5Esuw5A7AoNlzjUQ=="], "semantic-release/aggregate-error": ["aggregate-error@5.0.0", "", { "dependencies": { "clean-stack": "^5.2.0", "indent-string": "^5.0.0" } }, "sha512-gOsf2YwSlleG6IjRYG2A7k0HmBMEo6qVNk9Bp/EaLgAJT5ngH6PXbqa4ItvnEwCm/velL5jAnQgsHsWnjhGmvw=="], - "semantic-release/execa": ["execa@9.5.3", "", { "dependencies": { "@sindresorhus/merge-streams": "^4.0.0", "cross-spawn": "^7.0.3", "figures": "^6.1.0", "get-stream": "^9.0.0", "human-signals": "^8.0.0", "is-plain-obj": "^4.1.0", "is-stream": "^4.0.1", "npm-run-path": "^6.0.0", "pretty-ms": "^9.0.0", "signal-exit": "^4.1.0", "strip-final-newline": "^4.0.0", "yoctocolors": "^2.0.0" } }, "sha512-QFNnTvU3UjgWFy8Ef9iDHvIdcgZ344ebkwYx4/KLbR+CKQA4xBaHzv+iRpp86QfMHP8faFQLh8iOc57215y4Rg=="], + "semantic-release/execa": ["execa@9.6.0", "", { "dependencies": { "@sindresorhus/merge-streams": "^4.0.0", "cross-spawn": "^7.0.6", "figures": "^6.1.0", "get-stream": "^9.0.0", "human-signals": "^8.0.1", "is-plain-obj": "^4.1.0", "is-stream": "^4.0.1", "npm-run-path": "^6.0.0", "pretty-ms": "^9.2.0", "signal-exit": "^4.1.0", "strip-final-newline": "^4.0.0", "yoctocolors": "^2.1.1" } }, "sha512-jpWzZ1ZhwUmeWRhS7Qv3mhpOhLfwI+uAX4e5fOcXqwMR7EcJ0pj2kV1CVzHVMX/LphnKWD3LObjZCoJ71lKpHw=="], "semantic-release/p-reduce": ["p-reduce@3.0.0", "", {}, "sha512-xsrIUgI0Kn6iyDYm9StOpOeK29XM1aboGji26+QEortiFST1hGZaUQOLhtEbqHErPpGW/aSz6allwK2qcptp0Q=="], @@ -1530,9 +1442,7 @@ "signale/figures": ["figures@2.0.0", "", { "dependencies": { "escape-string-regexp": "^1.0.5" } }, "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA=="], - "string-width-cjs/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], - - "string-width-cjs/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + "strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], "strip-ansi-cjs/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], @@ -1546,16 +1456,6 @@ "tsup/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "wrap-ansi/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], - - "wrap-ansi/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - - "wrap-ansi-cjs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], - - "wrap-ansi-cjs/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - - "yargs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], - "@commitlint/config-validator/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], "@commitlint/parse/conventional-commits-parser/split2": ["split2@4.2.0", "", {}, "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg=="], @@ -1594,18 +1494,8 @@ "cli-highlight/yargs/cliui": ["cliui@7.0.4", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^7.0.0" } }, "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ=="], - "cli-highlight/yargs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], - "cli-highlight/yargs/yargs-parser": ["yargs-parser@20.2.9", "", {}, "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w=="], - "cli-table3/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], - - "cli-table3/string-width/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - - "cliui/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], - - "cliui/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - "env-ci/execa/get-stream": ["get-stream@8.0.1", "", {}, "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA=="], "env-ci/execa/human-signals": ["human-signals@5.0.0", "", {}, "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ=="], @@ -1686,20 +1576,6 @@ "signale/figures/escape-string-regexp": ["escape-string-regexp@1.0.5", "", {}, "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="], - "string-width-cjs/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - - "wrap-ansi-cjs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], - - "wrap-ansi-cjs/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - - "wrap-ansi/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], - - "wrap-ansi/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - - "yargs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], - - "yargs/string-width/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - "@commitlint/top-level/find-up/locate-path/p-locate": ["p-locate@6.0.0", "", { "dependencies": { "p-limit": "^4.0.0" } }, "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw=="], "@semantic-release/github/aggregate-error/clean-stack/escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="], @@ -1708,16 +1584,6 @@ "@semantic-release/npm/execa/npm-run-path/path-key": ["path-key@4.0.0", "", {}, "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ=="], - "cli-highlight/yargs/cliui/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - - "cli-highlight/yargs/cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], - - "cli-highlight/yargs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], - - "cli-highlight/yargs/string-width/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - - "cli-table3/string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - "env-ci/execa/npm-run-path/path-key": ["path-key@4.0.0", "", {}, "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ=="], "env-ci/execa/onetime/mimic-fn": ["mimic-fn@4.0.0", "", {}, "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw=="], @@ -1760,14 +1626,8 @@ "signale/chalk/supports-color/has-flag": ["has-flag@3.0.0", "", {}, "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="], - "yargs/string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - "@commitlint/top-level/find-up/locate-path/p-locate/p-limit": ["p-limit@4.0.0", "", { "dependencies": { "yocto-queue": "^1.0.0" } }, "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ=="], - "cli-highlight/yargs/cliui/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - - "cli-highlight/yargs/string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - "pkg-conf/find-up/locate-path/p-locate/p-limit": ["p-limit@1.3.0", "", { "dependencies": { "p-try": "^1.0.0" } }, "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q=="], "signale/chalk/ansi-styles/color-convert/color-name": ["color-name@1.1.3", "", {}, "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="], diff --git a/docs/docs/intro.md b/docs/docs/intro.md index 303629b3..27fa8634 100644 --- a/docs/docs/intro.md +++ b/docs/docs/intro.md @@ -19,6 +19,7 @@ A CLI tool that simplifies creating React Native modules powered by Nitro Module - 📚 TypeScript support out of the box - 🔧 Zero configuration required - ⚙️ Automated ios/android build with GitHub Actions +- 📦 Semantic Release ## Project Structure diff --git a/ncli.tape b/ncli.tape new file mode 100644 index 00000000..3c3b7189 --- /dev/null +++ b/ncli.tape @@ -0,0 +1,28 @@ +Output assets/nitro-module-cli.gif + +Set Shell zsh +Set Width 2000 +Set Height 1200 +Set FontSize 32 +Set WindowBar Colorful +Set Margin 20 +Set MarginFill "#674EFF" +Set BorderRadius 10 + +Sleep 2s +Type "bun create nitro-module" +Enter +Sleep 1s +Type "mymodule" +Enter +Sleep 1s +Enter +Sleep 1s +Enter +Sleep 500ms +Enter +Sleep 1s +Enter +Sleep 1s +Enter 2 +Sleep 28s \ No newline at end of file diff --git a/package.json b/package.json index fe0062c7..3b0b1b8e 100644 --- a/package.json +++ b/package.json @@ -1,11 +1,11 @@ { "name": "create-nitro-module", - "version": "1.8.10", + "version": "2.0.0-next.5", "description": "A CLI tool that simplifies creating React Native modules powered by Nitro Modules.", "private": false, "type": "module", "scripts": { - "dev": "bun typecheck && tsx src/cli.ts", + "dev": "bun typecheck && bun src/cli/index.ts", "build": "rm -rf lib && bun typecheck && tsup src", "typecheck": "tsc --noEmit", "prerelease": "rm -rf ./lib/assets", @@ -37,8 +37,8 @@ ], "license": "MIT", "bin": { - "create-nitro-module": "./lib/cli.js", - "nitro-module": "./lib/cli.js" + "create-nitro-module": "./lib/cli/index.js", + "nitro-module": "./lib/cli/index.js" }, "repository": { "type": "git", @@ -54,10 +54,9 @@ "access": "public" }, "dependencies": { + "@clack/prompts": "^0.11.0", "commander": "^14.0.0", - "inquirer": "^12.1.0", "kleur": "^4.1.5", - "ora": "^8.1.1", "tsup": "^8.3.5" }, "prettier": { @@ -81,7 +80,6 @@ "lefthook": "^1.10.1", "prettier": "^3.4.1", "semantic-release": "^24.2.3", - "tsx": "^4.19.2", "typescript": "^5.7.2" }, "engines": { diff --git a/src/cli/create.ts b/src/cli/create.ts new file mode 100644 index 00000000..be056c1b --- /dev/null +++ b/src/cli/create.ts @@ -0,0 +1,289 @@ +import * as p from '@clack/prompts' +import { mkdirSync, rmSync } from 'fs' +import kleur from 'kleur' +import path from 'path' +import projectPackageJsonFile from '../../package.json' +import { generateInstructions, messages } from '../constants' +import { NitroModuleFactory } from '../generate-nitro-package' +import { + CreateModuleOptions, + Nitro, + PackageManager, + PLATFORM_LANGUAGE_MAP, + SupportedLang, + SupportedPlatform, + UserAnswers, +} from '../types' +import { + capitalize, + detectPackageManager, + dirExist, + validatePackageName, +} from '../utils' + +export const createModule = async ( + packageName: string, + options: CreateModuleOptions +) => { + let packageType = Nitro.Module + const spinner = p.spinner() + try { + if (options.moduleDir) { + const moduleDirExists = await dirExist(options.moduleDir) + if (!moduleDirExists) { + mkdirSync(options.moduleDir, { recursive: true }) + } + } + + const usedPm = detectPackageManager() + const answers = await getUserAnswers(packageName, usedPm, options.ci) + packageName = answers.packageName + packageType = answers.packageType + + const moduleFactory = new NitroModuleFactory({ + description: answers.description, + langs: answers.langs, + packageName, + platforms: answers.platforms, + pm: answers.pm, + cwd: options.moduleDir || process.cwd(), + spinner, + packageType, + finalPackageName: 'react-native-' + packageName.toLowerCase(), + skipInstall: options.skipInstall, + skipExample: options.skipExample, + }) + spinner.start( + messages.creating.replace('{packageType}', capitalize(packageType)) + ) + + await moduleFactory.createNitroModule() + + console.log( + generateInstructions({ + moduleName: `react-native-${packageName.toLowerCase()}`, + pm: answers.pm, + skipExample: options.skipExample, + skipInstall: options.skipInstall, + }) + ) + + spinner.stop( + kleur.dim( + `Create Nitro Module - ${projectPackageJsonFile.description}\n` + ) + ) + } catch (error) { + if (packageName) { + const modulePath = path.join( + process.cwd(), + 'react-native-' + packageName.toLowerCase() + ) + rmSync(modulePath, { recursive: true, force: true }) + } + spinner.stop( + kleur.red( + `Failed to create Nitro ${packageType}: ${(error as Error).message}` + ), + 1 + ) + } +} + +const selectLanguages = async ( + platforms: SupportedPlatform[], + packageType: Nitro +) => { + const availableLanguages = Array.from( + new Set(platforms.flatMap(platform => PLATFORM_LANGUAGE_MAP[platform])) + ).filter(lang => packageType !== Nitro.View || lang !== SupportedLang.CPP) + + const options = + platforms.includes(SupportedPlatform.IOS) && + platforms.includes(SupportedPlatform.ANDROID) + ? [ + { + label: 'Swift & Kotlin', + value: [SupportedLang.SWIFT, SupportedLang.KOTLIN], + hint: `Use Swift and Kotlin to build your Nitro ${packageType.toLowerCase()} for iOS and Android`, + }, + ...(packageType === Nitro.Module + ? [ + { + label: 'C++', + value: [SupportedLang.CPP], + hint: 'Use C++ to share code between iOS and Android', + }, + ] + : []), + ] + : availableLanguages.map(lang => ({ + label: capitalize(lang), + value: [lang], + hint: `Use ${lang === SupportedLang.CPP ? 'C++' : capitalize(lang)} to build your Nitro ${packageType.toLowerCase()} for ${platforms.join(' and ')}`, + })) + + const selectedLangs = await p.select({ + message: kleur.cyan('Which language(s) would you like to use?'), + options, + }) + + if (p.isCancel(selectedLangs)) return selectedLangs + return selectedLangs +} + +const getUserAnswers = async ( + name: string, + usedPm?: PackageManager, + ci?: boolean +): Promise => { + if (ci) { + return { + packageName: name, + description: `${kleur.yellow(`react-native-${name}`)} is a react native package built with Nitro`, + platforms: [SupportedPlatform.IOS, SupportedPlatform.ANDROID], + packageType: Nitro.Module, + langs: [SupportedLang.SWIFT, SupportedLang.KOTLIN], + pm: usedPm || 'bun', + } + } + + const group = await p.group( + { + packageName: () => + p.text({ + message: kleur.cyan('Enter your package name'), + defaultValue: name, + initialValue: name, + validate(value) { + const packageName = value?.trim() + return validatePackageName(packageName) + }, + }), + description: async ({ results }) => + p.text({ + message: kleur.cyan('Enter a description for your package'), + defaultValue: `${kleur.yellow(`react-native-${results.packageName}`)} is a react native package built with Nitro`, + initialValue: `${kleur.yellow(`react-native-${results.packageName}`)} is a react native package built with Nitro`, + placeholder: `react-native-${results.packageName} is a react native package built with Nitro`, + validate(value) { + if (value?.trim().length === 0) { + return 'Package description is required' + } + return '' + }, + }), + platforms: () => + p.multiselect({ + message: kleur.cyan('Which platform(s) are you targeting?'), + options: [ + { + label: 'iOS', + value: SupportedPlatform.IOS, + }, + { + label: 'Android', + value: SupportedPlatform.ANDROID, + }, + ], + initialValues: [ + SupportedPlatform.IOS, + SupportedPlatform.ANDROID, + ], + required: true, + }), + packageType: () => + p.select({ + message: kleur.cyan('Select your package type'), + options: [ + { + label: 'Nitro Module', + value: Nitro.Module, + }, + { + label: 'Nitro View', + value: Nitro.View, + }, + ], + initialValue: Nitro.Module, + }), + langs: async ({ results }) => { + if (!results.platforms || !results.packageType) { + throw new Error('Missing required selections') + } + const selectedLangs = await selectLanguages( + results.platforms, + results.packageType + ) + return selectedLangs + }, + pm: async () => { + if (usedPm) { + const confirm = await p.confirm({ + message: kleur.cyan( + `${kleur.bold(kleur.green(usedPm))} detected! Would you like to continue?` + ), + }) + if (p.isCancel(confirm)) { + process.exit(0) + } else if (confirm) { + return usedPm + } + } + + return p.select({ + message: kleur.cyan( + 'Which package manager would you like to use?' + ), + options: [ + { + label: 'bun', + value: 'bun', + }, + { + label: 'yarn', + value: 'yarn', + }, + { + label: 'npm', + value: 'npm', + }, + ], + }) + }, + packageNameConfirmation: async ({ results }) => { + const packageName = results.packageName + if (!packageName) { + return false + } + const packageNameConfirmation = await p.confirm({ + message: kleur.cyan( + `Your package name will be called: ${kleur.bold(kleur.green('react-native-' + packageName.toLowerCase()))} would you like to continue?` + ), + }) + if (!packageNameConfirmation) { + console.log( + kleur.red('Package name confirmation cancelled') + ) + process.exit(1) + } + return packageNameConfirmation + }, + }, + { + onCancel() { + console.log(kleur.red('Cancelled')) + process.exit(1) + }, + } + ) + + return { + packageName: group.packageName, + packageType: group.packageType, + platforms: group.platforms, + langs: group.langs as SupportedLang[], + pm: group.pm, + description: group.description as string, + } +} diff --git a/src/cli.ts b/src/cli/index.ts similarity index 88% rename from src/cli.ts rename to src/cli/index.ts index 09679e02..5dddf228 100644 --- a/src/cli.ts +++ b/src/cli/index.ts @@ -1,7 +1,7 @@ #!/usr/bin/env node import { Command } from 'commander' -import packageJson from '../package.json' +import packageJson from '../../package.json' import { createModule } from './create' const program = new Command() @@ -16,6 +16,7 @@ program ) .option('-e, --skip-example', 'skip example app generation') .option('-i, --skip-install', 'skip installing dependencies') + .option('--ci', 'run in CI mode') .action(createModule) program.allowUnknownOption().parse(process.argv) diff --git a/src/code-snippets/code.ios.ts b/src/code-snippets/code.ios.ts index e82e2f00..59573a2c 100644 --- a/src/code-snippets/code.ios.ts +++ b/src/code-snippets/code.ios.ts @@ -2,8 +2,16 @@ import { toPascalCase } from '../utils' export const getSwiftCode = ( moduleName: string, - funcName: string -) => `import Foundation + funcName: string, + userName: string +) => `// +// Hybrid${toPascalCase(moduleName)}.swift +// Pods +// +// Created by ${userName} on ${new Date().toLocaleDateString()}. +// + +import Foundation class Hybrid${toPascalCase(moduleName)}: Hybrid${toPascalCase(moduleName)}Spec { func ${funcName}(num1: Double, num2: Double) throws -> Double { @@ -12,7 +20,14 @@ class Hybrid${toPascalCase(moduleName)}: Hybrid${toPascalCase(moduleName)}Spec { } ` -export const getSwiftViewCode = (moduleName: string) => `import Foundation +export const getSwiftViewCode = (moduleName: string, userName: string) => `// +// Hybrid${toPascalCase(moduleName)}.swift +// Pods +// +// Created by ${userName} on ${new Date().toLocaleDateString()}. +// + +import Foundation import UIKit class Hybrid${toPascalCase(moduleName)} : Hybrid${toPascalCase(moduleName)}Spec { diff --git a/src/constants.ts b/src/constants.ts index d5219283..1feb7a75 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -8,13 +8,15 @@ export const ANDROID_CXX_LIB_NAME_TAG = '$$androidCxxLibName$$' export const CXX_NAME_SPACE_TAG = '$$cxxNamespace$$' export const IOS_MODULE_NAME_TAG = '$$iosModuleName$$' export const JS_PACKAGE_NAME_TAG = '$$packageName$$' +export const AUTHOR_TAG = '$$author$$' +export const DESCRIPTION_TAG = '$$description$$' export const messages = { - creating: 'Creating your Nitro Module...', + creating: `Creating your Nitro {packageType}...`, generating: 'Generating example app...', installing: 'Installing dependencies...', - runningCodegen: '🚀 Running codegen...', - success: '✨ Nitro Module created successfully!', + runningCodegen: 'Running codegen...', + success: 'Nitro Module created successfully!', } as const export const packagesToRemoveFromExampleApp = [ diff --git a/src/create.ts b/src/create.ts deleted file mode 100644 index 88fd61d8..00000000 --- a/src/create.ts +++ /dev/null @@ -1,206 +0,0 @@ -import { mkdirSync, rmSync } from 'fs' -import inquirer from 'inquirer' -import kleur from 'kleur' -import ora from 'ora' -import path from 'path' -import projectPackageJsonFile from '../package.json' -import { generateInstructions, SUPPORTED_PLATFORMS } from './constants' -import { NitroModuleFactory } from './generate-nitro-module' -import { CreateModuleOptions, Nitro, PLATFORM_LANGUAGE_MAP } from './types' -import { detectPackageManager, dirExist, validateModuleName } from './utils' - -export const createModule = async ( - name: string, - options: CreateModuleOptions -) => { - const spinner = ora() - let moduleType = Nitro.Module - try { - if (typeof name !== 'string') { - name = '' - } else { - const validationResult = validateModuleName(name) - if (validationResult !== true) { - throw new Error(`Invalid module name: ${validationResult}`) - } - } - - if (options.moduleDir) { - const moduleDirExists = await dirExist(options.moduleDir) - if (!moduleDirExists) { - mkdirSync(options.moduleDir, { recursive: true }) - } - } - - const usedPm = detectPackageManager() - const answers = await getUserAnswers(name, usedPm) - name = answers.moduleName - answers.pm = usedPm || answers.pm - moduleType = answers.moduleType - - const moduleFactory = new NitroModuleFactory({ - langs: answers.langs, - moduleName: name, - platforms: answers.platforms, - pm: answers.pm, - cwd: options.moduleDir || process.cwd(), - spinner, - moduleType, - finalModuleName: 'react-native-' + name.toLowerCase(), - skipInstall: options.skipInstall, - skipExample: options.skipExample, - }) - - await moduleFactory.createNitroModule() - - console.log( - generateInstructions({ - moduleName: `react-native-${name.toLowerCase()}`, - pm: answers.pm, - skipExample: options.skipExample, - skipInstall: options.skipInstall, - }) - ) - - spinner.succeed( - kleur.dim( - `Create Nitro Module - ${projectPackageJsonFile.description}\n` - ) - ) - } catch (error) { - spinner.fail( - kleur.red( - `Failed to create Nitro ${moduleType}: ${(error as Error).message}` - ) - ) - if (name) { - const modulePath = path.join( - process.cwd(), - 'react-native-' + name.toLowerCase() - ) - rmSync(modulePath, { recursive: true, force: true }) - } - process.exit(1) - } -} - -const getUserAnswers = async (name: string, usedPm?: string) => { - const moduleName = await inquirer.prompt({ - type: 'input', - message: kleur.cyan('📝 What is the name of your module?'), - name: 'name', - when: !name, - default: 'awesome-library', - validate: (input: string) => { - const result = validateModuleName(input) - if (result !== true) { - return kleur.red(`⚠️ ${result}`) - } - return true - }, - }) - - const platforms = await inquirer.prompt({ - type: 'checkbox', - message: kleur.cyan('🎯 Select target platforms:'), - name: 'names', - choices: SUPPORTED_PLATFORMS, - validate: answers => { - if (answers.length < 1) { - return kleur.red('⚠️ You must choose at least one platform') - } - return true - }, - }) - - const availableLanguages = new Set() - platforms.names.forEach((platform: string) => { - PLATFORM_LANGUAGE_MAP[platform].forEach(lang => - availableLanguages.add(lang) - ) - }) - - const langs = await inquirer.prompt({ - type: 'checkbox', - message: kleur.cyan('💻 Select programming languages:'), - name: 'names', - choices: Array.from(availableLanguages), - validate: choices => { - if (choices.length < 1) { - return kleur.red('⚠️ You must choose at least one language') - } - - let answers: string[] = [] - - for (let c of choices) { - answers.push(c.value as string) - } - - const hasCpp = answers.some(lang => lang === 'cpp') - const hasNative = answers.some( - lang => lang === 'swift' || lang === 'kotlin' - ) - - if (hasCpp && hasNative) { - return kleur.red( - '⚠️ C++ cannot be selected along with Swift or Kotlin' - ) - } - - if (!hasCpp) { - for (const platform of platforms.names) { - const requiredNative = - platform === 'ios' ? 'swift' : 'kotlin' - if (!answers.includes(requiredNative)) { - return kleur.red( - `⚠️ When not using C++, you must select ${requiredNative} for ${platform}` - ) - } - } - } - - return true - }, - }) - - const moduleType = await inquirer.prompt({ - type: 'list', - message: kleur.cyan('📦 Select module type:'), - name: 'name', - choices: ['Nitro Module', 'Nitro View'], - default: 'Nitro Module', - when: !langs.names.includes('cpp'), - }) - - const pm = await inquirer.prompt({ - type: 'list', - message: kleur.cyan('📦 Select package manager:'), - name: 'name', - choices: ['bun', 'yarn', 'npm'], - default: usedPm || 'yarn', - when: usedPm === undefined, - }) - - const packageName = await inquirer.prompt({ - type: 'confirm', - message: kleur.cyan( - `✨ Your package name will be called: "${kleur.green('react-native-' + (moduleName.name || name).toLowerCase())}" would you like to continue?` - ), - name: 'name', - choices: ['y', 'n'], - default: true, - }) - - if (!packageName.name) { - process.exit(0) - } - - return { - moduleName: moduleName.name || name, - platforms: platforms.names, - langs: langs.names.includes('cpp') ? ['c++'] : langs.names, - pm: pm.name, - moduleType: - moduleType.name === 'Nitro View' ? Nitro.View : Nitro.Module, - } -} diff --git a/src/file-generators/android-file-generator.ts b/src/file-generators/android-file-generator.ts index 4daa909e..a99e61a7 100644 --- a/src/file-generators/android-file-generator.ts +++ b/src/file-generators/android-file-generator.ts @@ -29,7 +29,7 @@ export class AndroidFileGenerator implements FileGenerator { private androidPackageName: string = '' async generate(config: GenerateModuleConfig): Promise { - this.androidPackageName = `com.${replaceHyphen(config.moduleName)}` + this.androidPackageName = `com.${replaceHyphen(config.packageName)}` await this.copyAndroidFiles(config) await this.generateAndroidFiles(config) } @@ -53,7 +53,7 @@ export class AndroidFileGenerator implements FileGenerator { 'main', 'java', 'com', - replaceHyphen(config.moduleName) + replaceHyphen(config.packageName) ) await createFolder(config.cwd, androidNamespacePath) @@ -73,19 +73,19 @@ export class AndroidFileGenerator implements FileGenerator { // Only generate Kotlin file(s) if Kotlin is supported if (config.langs.includes(SupportedLang.KOTLIN)) { // Generate HybridObject file - const isHybridView = config.moduleType === Nitro.View + const isHybridView = config.packageType === Nitro.View await createModuleFile( config.cwd, `android/src/main/java/${this.androidPackageName .split('.') - .join('/')}/Hybrid${toPascalCase(config.moduleName)}.kt`, + .join('/')}/Hybrid${toPascalCase(config.packageName)}.kt`, isHybridView ? getKotlinViewCode( - config.moduleName, + config.packageName, this.androidPackageName ) : getKotlinCode( - config.moduleName, + config.packageName, this.androidPackageName, `${config.funcName}` ) @@ -111,7 +111,7 @@ export class AndroidFileGenerator implements FileGenerator { const replacements = { [`com.${ANDROID_NAME_SPACE_TAG}`]: this.androidPackageName, - [ANDROID_CXX_LIB_NAME_TAG]: toPascalCase(config.moduleName), + [ANDROID_CXX_LIB_NAME_TAG]: toPascalCase(config.packageName), } await createModuleFile( @@ -141,7 +141,7 @@ export class AndroidFileGenerator implements FileGenerator { cmakeListFile ) const replacements = { - [ANDROID_CXX_LIB_NAME_TAG]: toPascalCase(config.moduleName), + [ANDROID_CXX_LIB_NAME_TAG]: toPascalCase(config.packageName), } await createModuleFile( config.cwd, @@ -163,8 +163,8 @@ export class AndroidFileGenerator implements FileGenerator { ) const replacements = { - [ANDROID_CXX_LIB_NAME_TAG]: toPascalCase(config.moduleName), - [ANDROID_NAME_SPACE_TAG]: replaceHyphen(config.moduleName), + [ANDROID_CXX_LIB_NAME_TAG]: toPascalCase(config.packageName), + [ANDROID_NAME_SPACE_TAG]: replaceHyphen(config.packageName), } await createModuleFile( @@ -178,9 +178,9 @@ export class AndroidFileGenerator implements FileGenerator { } private async generatePackageFile(config: GenerateModuleConfig) { - const androidPackageFile = `${toPascalCase(config.moduleName)}Package.java` + const androidPackageFile = `${toPascalCase(config.packageName)}Package.java` const prefixPath = `android/src/main/java` - const isHybridView = config.moduleType === Nitro.View + const isHybridView = config.packageType === Nitro.View const androidPackageFilePath = path.join( config.cwd, prefixPath + `/com/${ANDROID_NAME_SPACE_TAG}`, @@ -190,10 +190,10 @@ export class AndroidFileGenerator implements FileGenerator { ) const replacements = { - [ANDROID_NAME_SPACE_TAG]: replaceHyphen(config.moduleName), + [ANDROID_NAME_SPACE_TAG]: replaceHyphen(config.packageName), [`${ANDROID_CXX_LIB_NAME_TAG}Package`]: androidPackageFile.split('.')[0], - [ANDROID_CXX_LIB_NAME_TAG]: toPascalCase(config.moduleName), + [ANDROID_CXX_LIB_NAME_TAG]: toPascalCase(config.packageName), } await createModuleFile( @@ -217,8 +217,8 @@ export class AndroidFileGenerator implements FileGenerator { await writeFile( androidWorkaroundPath, postScript( - toPascalCase(config.moduleName), - config.moduleType === Nitro.View + toPascalCase(config.packageName), + config.packageType === Nitro.View ) ) } diff --git a/src/file-generators/cpp-file-generator.ts b/src/file-generators/cpp-file-generator.ts index aa3eabbd..6ba7640f 100644 --- a/src/file-generators/cpp-file-generator.ts +++ b/src/file-generators/cpp-file-generator.ts @@ -40,7 +40,7 @@ export class CppFileGenerator implements FileGenerator { cmakeListsContent = cmakeListsContent.replace( 'add_library(${PACKAGE_NAME} SHARED', 'add_library(${PACKAGE_NAME} SHARED \n\t' + - `src/main/cpp/cpp-adapter.cpp\n\t../cpp/Hybrid${toPascalCase(config.moduleName)}.cpp\n\t../cpp/Hybrid${toPascalCase(config.moduleName)}.hpp` + `src/main/cpp/cpp-adapter.cpp\n\t../cpp/Hybrid${toPascalCase(config.packageName)}.cpp\n\t../cpp/Hybrid${toPascalCase(config.packageName)}.hpp` ) await createModuleFile( @@ -62,22 +62,22 @@ export class CppFileGenerator implements FileGenerator { async generateCppCodeFiles(config: GenerateModuleConfig) { const cppPath = path.join( 'cpp', - `Hybrid${toPascalCase(config.moduleName)}.cpp` + `Hybrid${toPascalCase(config.packageName)}.cpp` ) const hppPath = path.join( 'cpp', - `Hybrid${toPascalCase(config.moduleName)}.hpp` + `Hybrid${toPascalCase(config.packageName)}.hpp` ) await createModuleFile( config.cwd, cppPath, - cppCode(toPascalCase(config.moduleName), `${config.funcName}`) + cppCode(toPascalCase(config.packageName), `${config.funcName}`) ) await createModuleFile( config.cwd, hppPath, - hppCode(toPascalCase(config.moduleName), `${config.funcName}`) + hppCode(toPascalCase(config.packageName), `${config.funcName}`) ) } } diff --git a/src/file-generators/ios-file-generator.ts b/src/file-generators/ios-file-generator.ts index 0e30e28f..986a254b 100644 --- a/src/file-generators/ios-file-generator.ts +++ b/src/file-generators/ios-file-generator.ts @@ -42,7 +42,7 @@ export class IOSFileGenerator implements FileGenerator { ) const podspecFilePath = path.join( config.cwd, - `${toPascalCase(config.moduleName)}.podspec` + `${toPascalCase(config.packageName)}.podspec` ) await cp(iosFolderPath, path.join(config.cwd, 'ios'), { recursive: true, @@ -52,14 +52,14 @@ export class IOSFileGenerator implements FileGenerator { // Create a podspec file const replacements = { - [IOS_MODULE_NAME_TAG]: toPascalCase(config.moduleName), + [IOS_MODULE_NAME_TAG]: toPascalCase(config.packageName), 'patrickkabwe/create-nitro-module': - `${name.replaceAll(' ', '')}/${config.finalModuleName}`.toLowerCase(), + `${name.replaceAll(' ', '')}/${config.finalPackageName}`.toLowerCase(), } await createModuleFile( config.cwd, - `${toPascalCase(config.moduleName)}.podspec`, + `${toPascalCase(config.packageName)}.podspec`, await replacePlaceholder({ filePath: podspecFilePath, replacements, @@ -70,7 +70,7 @@ export class IOSFileGenerator implements FileGenerator { const bridgeFilePath = path.join(config.cwd, 'ios', 'Bridge.h') const bridgeReplacements = { - [IOS_MODULE_NAME_TAG]: config.moduleName, + [IOS_MODULE_NAME_TAG]: config.packageName, 'Created by Marc Rousavy on 22.07.24.': `Created by ${name} on ${new Date().toLocaleDateString()}`, //TODO: user regex } @@ -83,13 +83,17 @@ export class IOSFileGenerator implements FileGenerator { }) ) if (config.langs.includes(SupportedLang.SWIFT)) { - const isHybridView = config.moduleType === Nitro.View + const isHybridView = config.packageType === Nitro.View await createModuleFile( config.cwd, - `ios/Hybrid${toPascalCase(config.moduleName)}.swift`, + `ios/Hybrid${toPascalCase(config.packageName)}.swift`, isHybridView - ? getSwiftViewCode(config.moduleName) - : getSwiftCode(config.moduleName, `${config.funcName}`) + ? getSwiftViewCode(config.packageName, name) + : getSwiftCode( + config.packageName, + `${config.funcName}`, + name + ) ) } } diff --git a/src/file-generators/js-file-generator.ts b/src/file-generators/js-file-generator.ts index 841e3cfd..1545df9e 100644 --- a/src/file-generators/js-file-generator.ts +++ b/src/file-generators/js-file-generator.ts @@ -11,7 +11,7 @@ import { createFolder, createModuleFile, mapPlatformToLanguage } from '../utils' export class JSFileGenerator implements FileGenerator { async generate(config: GenerateModuleConfig): Promise { const nitroSpecFolder = - config.moduleType === Nitro.View ? '/src/views' : '/src/specs' + config.packageType === Nitro.View ? '/src/views' : '/src/specs' await createFolder(config.cwd, nitroSpecFolder) const platformToLangMap = mapPlatformToLanguage( @@ -23,7 +23,7 @@ export class JSFileGenerator implements FileGenerator { .map(([platform, lang]) => `${platform}: '${lang.toLowerCase()}'`) .join(', ') - switch (config.moduleType) { + switch (config.packageType) { case Nitro.View: await this.generateNitroViewFiles(config, platformLang) break @@ -41,13 +41,13 @@ export class JSFileGenerator implements FileGenerator { ): Promise { await createModuleFile( config.cwd, - `/src/views/${config.moduleName}.nitro.ts`, - nitroViewSpecCode(config.moduleName, platformLang) + `/src/views/${config.packageName}.nitro.ts`, + nitroViewSpecCode(config.packageName, platformLang) ) await createModuleFile( config.cwd, '/src/index.ts', - nitroViewCode(config.moduleName) + nitroViewCode(config.packageName) ) } @@ -57,9 +57,9 @@ export class JSFileGenerator implements FileGenerator { ): Promise { await createModuleFile( config.cwd, - `/src/specs/${config.moduleName}.nitro.ts`, + `/src/specs/${config.packageName}.nitro.ts`, nitroModuleSpecCode( - config.moduleName, + config.packageName, platformLang, `${config.funcName}` ) @@ -67,7 +67,7 @@ export class JSFileGenerator implements FileGenerator { await createModuleFile( config.cwd, '/src/index.ts', - nitroModuleCode(config.moduleName) + nitroModuleCode(config.packageName) ) } } diff --git a/src/generate-nitro-module.ts b/src/generate-nitro-package.ts similarity index 84% rename from src/generate-nitro-module.ts rename to src/generate-nitro-package.ts index 8e42d3c3..da252979 100644 --- a/src/generate-nitro-module.ts +++ b/src/generate-nitro-package.ts @@ -14,6 +14,8 @@ import { import { ANDROID_CXX_LIB_NAME_TAG, ANDROID_NAME_SPACE_TAG, + AUTHOR_TAG, + DESCRIPTION_TAG, CXX_NAME_SPACE_TAG, foldersToRemoveFromExampleApp, IOS_MODULE_NAME_TAG, @@ -42,6 +44,7 @@ import { replacePlaceholder, toPascalCase, } from './utils' +import kleur from 'kleur' const execAsync = util.promisify(exec) const __filename = fileURLToPath(import.meta.url) @@ -64,10 +67,10 @@ export class NitroModuleFactory { ]) this.config.funcName = 'sum' this.config.prefix = 'react-native-' - this.config.finalModuleName = `${this.config.prefix}${this.config.moduleName}` + this.config.finalPackageName = `${this.config.prefix}${this.config.packageName}` this.config.cwd = path.join( this.config.cwd, - this.config.finalModuleName + this.config.finalPackageName ) } @@ -80,7 +83,6 @@ export class NitroModuleFactory { } await createFolder(this.config.cwd) const supportedLanguages = [...this.config.langs, SupportedLang.JS] - this.config.spinner.start(messages.creating) for (const lang of supportedLanguages) { const generator = this.generators.get(lang) if (!generator) { @@ -91,21 +93,22 @@ export class NitroModuleFactory { await this.copyNitroTemplateFiles() await this.replaceNitroJsonPlaceholders() await this.updatePackageJsonConfig(this.config.skipExample) - await this.updateReadme() + await this.updateTemplateFiles() if (!this.config.skipExample) { - this.config.spinner.text = messages.generating + this.config.spinner.message(messages.generating) await this.createExampleApp() await this.configureExamplePackageJson() await this.syncExampleAppConfigurations() await this.setupWorkflows() await this.gitInit() + this.config.spinner.stop(kleur.cyan(messages.generating + 'Done')) } if (!this.config.skipInstall && !this.config.skipExample) { - this.config.spinner.text = messages.installing + this.config.spinner.start(messages.installing) await this.installDependenciesAndRunCodegen() + this.config.spinner.stop(kleur.cyan(messages.installing + 'Done')) } - this.config.spinner.succeed() } private async replaceNitroJsonPlaceholders() { @@ -114,14 +117,14 @@ export class NitroModuleFactory { { encoding: 'utf-8' } ) const replacements = { - [ANDROID_NAME_SPACE_TAG]: replaceHyphen(this.config.moduleName), - [CXX_NAME_SPACE_TAG]: replaceHyphen(this.config.moduleName), - [IOS_MODULE_NAME_TAG]: toPascalCase(this.config.moduleName), - [ANDROID_CXX_LIB_NAME_TAG]: toPascalCase(this.config.moduleName), + [ANDROID_NAME_SPACE_TAG]: replaceHyphen(this.config.packageName), + [CXX_NAME_SPACE_TAG]: replaceHyphen(this.config.packageName), + [IOS_MODULE_NAME_TAG]: toPascalCase(this.config.packageName), + [ANDROID_CXX_LIB_NAME_TAG]: toPascalCase(this.config.packageName), } const newNitroJsonContent = JSON.parse(nitroJsonContent) newNitroJsonContent.autolinking = generateAutolinking( - toPascalCase(this.config.moduleName), + toPascalCase(this.config.packageName), this.config.langs ) await createModuleFile( @@ -147,17 +150,24 @@ export class NitroModuleFactory { { encoding: 'utf8' } ) const newWorkspacePackageJsonFile = JSON.parse(workspacePackageJsonFile) - newWorkspacePackageJsonFile.name = this.config.finalModuleName - newWorkspacePackageJsonFile.repository = `https://github.com/${userName}/${this.config.finalModuleName}.git` - newWorkspacePackageJsonFile.bugs = `https://github.com/${userName}/${this.config.finalModuleName}/issues` - newWorkspacePackageJsonFile.homepage = `https://github.com/${userName}/${this.config.finalModuleName}#readme` + newWorkspacePackageJsonFile.name = this.config.finalPackageName + newWorkspacePackageJsonFile.description = this.config.description + newWorkspacePackageJsonFile.repository = `https://github.com/${userName}/${this.config.finalPackageName}.git` + newWorkspacePackageJsonFile.bugs = `https://github.com/${userName}/${this.config.finalPackageName}/issues` + newWorkspacePackageJsonFile.homepage = `https://github.com/${userName}/${this.config.finalPackageName}#readme` newWorkspacePackageJsonFile.author = name newWorkspacePackageJsonFile.scripts = { ...newWorkspacePackageJsonFile.scripts, build: `${this.config.pm} run typecheck && bob build`, codegen: `nitro-codegen --logLevel="debug" && ${this.config.pm} run build${this.config.langs.includes(SupportedLang.KOTLIN) ? ' && node post-script.js' : ''}`, + postcodegen: `${this.config.pm} ${this.config.pm === 'npm' ? '--prefix' : '--cwd'} example run pod`, } + newWorkspacePackageJsonFile.keywords = [ + ...newWorkspacePackageJsonFile.keywords, + this.config.finalPackageName, + ] + if (this.config.pm === 'yarn') { await execAsync('corepack enable', { cwd: this.config.cwd }) await execAsync('yarn set version 4.6.0', { cwd: this.config.cwd }) @@ -180,15 +190,18 @@ export class NitroModuleFactory { ) } - private async updateReadme() { + private async updateTemplateFiles() { const readmePath = path.join(this.config.cwd, 'README.md') + const licensePath = path.join(this.config.cwd, 'LICENSE') const replacements = { - [JS_PACKAGE_NAME_TAG]: this.config.finalModuleName, + [JS_PACKAGE_NAME_TAG]: this.config.finalPackageName, $$command$$: this.config.pm === 'bun' || this.config.pm === 'yarn' ? `${this.config.pm} add` : 'npm install', + [DESCRIPTION_TAG]: this.config.description, + [AUTHOR_TAG]: getGitUserInfo().name, } const readmeContents = await replacePlaceholder({ @@ -196,9 +209,17 @@ export class NitroModuleFactory { replacements, }) + const licenseContents = await replacePlaceholder({ + filePath: licensePath, + replacements, + }) + await writeFile(readmePath, readmeContents, { encoding: 'utf8', }) + await writeFile(licensePath, licenseContents, { + encoding: 'utf8', + }) } private async copyNitroTemplateFiles() { @@ -211,6 +232,8 @@ export class NitroModuleFactory { 'README.md', 'package.json', '.github', + 'release.config.cjs', + 'LICENSE', ] await copyTemplateFiles( @@ -230,8 +253,8 @@ export class NitroModuleFactory { templatePackageJson.devDependencies['react-native'] const args = `${packageManager} \ - @react-native-community/cli@latest init ${toPascalCase(this.config.moduleName)}Example \ - --package-name com.${replaceHyphen(this.config.moduleName)}example \ + @react-native-community/cli@latest init ${toPascalCase(this.config.packageName)}Example \ + --package-name com.${replaceHyphen(this.config.packageName)}example \ --directory example --skip-install --skip-git-init --version ${reactNativeVersion}` await execAsync(args, { cwd: this.config.cwd }) @@ -241,10 +264,10 @@ export class NitroModuleFactory { await writeFile( appPath, appExampleCode( - this.config.moduleName, - this.config.finalModuleName, + this.config.packageName, + this.config.finalPackageName, `${this.config.funcName}`, - this.config.moduleType === Nitro.View + this.config.packageType === Nitro.View ), { encoding: 'utf8' } ) @@ -261,7 +284,7 @@ export class NitroModuleFactory { }) const exampleAppPackageJson = JSON.parse(examplePackageJsonStr) - exampleAppPackageJson.name = `${this.config.finalModuleName}-example` + exampleAppPackageJson.name = `${this.config.finalPackageName}-example` exampleAppPackageJson.scripts = { ...exampleAppPackageJson.scripts, @@ -300,7 +323,7 @@ export class NitroModuleFactory { ) const replacements = { - [JS_PACKAGE_NAME_TAG]: this.config.finalModuleName, + [JS_PACKAGE_NAME_TAG]: this.config.finalPackageName, } const reactNativeConfig = await replacePlaceholder({ @@ -343,7 +366,7 @@ export class NitroModuleFactory { await writeFile( tsConfigPath, - exampleTsConfig(this.config.finalModuleName), + exampleTsConfig(this.config.finalPackageName), { encoding: 'utf8' } ) @@ -356,7 +379,7 @@ export class NitroModuleFactory { await writeFile( androidSettingsGradlePath, - androidSettingsGradleCode(toPascalCase(this.config.moduleName)), + androidSettingsGradleCode(toPascalCase(this.config.packageName)), { encoding: 'utf8' } ) @@ -426,7 +449,7 @@ export class NitroModuleFactory { }) const iosBuildReplacements = { - $$exampleApp$$: `${toPascalCase(this.config.moduleName)}Example`, + $$exampleApp$$: `${toPascalCase(this.config.packageName)}Example`, } const iosBuildWorkflowContent = await replacePlaceholder({ diff --git a/src/types.ts b/src/types.ts index 9f31f5ea..3212fec1 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,4 +1,13 @@ -import { Ora } from 'ora' +import * as p from '@clack/prompts' + +export interface UserAnswers { + packageName: string + description: string + platforms: SupportedPlatform[] + packageType: Nitro + langs: SupportedLang[] + pm: PackageManager +} export enum SupportedLang { SWIFT = 'swift', @@ -18,6 +27,7 @@ export type PlatformLang = { } export type CreateModuleOptions = { + ci?: boolean moduleDir?: string skipExample?: boolean skipInstall?: boolean @@ -35,12 +45,13 @@ export type GenerateModuleConfig = { cwd: string langs: SupportedLang[] prefix?: string - spinner: Ora + spinner: ReturnType + description: string funcName?: string platforms: SupportedPlatform[] - moduleType: Nitro - moduleName: string - finalModuleName: string + packageType: Nitro + packageName: string + finalPackageName: string } & Omit export interface FileGenerator { @@ -62,4 +73,4 @@ export type InstructionsParams = { pm: string skipInstall?: boolean skipExample?: boolean -} \ No newline at end of file +} diff --git a/src/utils.ts b/src/utils.ts index 8e6a3abe..bbd5f4a0 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,3 +1,4 @@ +import kleur from 'kleur' import { execSync } from 'node:child_process' import { access, cp, mkdir, readFile, writeFile } from 'node:fs/promises' import path from 'node:path' @@ -9,17 +10,20 @@ type AutolinkingConfig = { export const LANGS = ['c++', 'swift', 'kotlin'] as const -export const validateModuleName = (input: string): string | true => { - if (input.trim().length < 1) { - return 'Module name cannot be empty' +export const validatePackageName = (input: string): string => { + if (input.length === 0) { + return 'Package name is required' } if (/[A-Z]/.test(input)) { - return 'Module name should be lowercase' + return 'Package name should be lowercase' } - if (input.startsWith('react-native-')) { - return 'Do not include "react-native-" prefix, it will be added automatically' + if ( + input.toLowerCase().includes('react-native') || + input.toLowerCase().includes('react') + ) { + return `Package name cannot contain ${kleur.red('react-native')} or ${kleur.red('react')}` } if (input.includes('@') || input.includes('/')) { @@ -27,10 +31,10 @@ export const validateModuleName = (input: string): string | true => { } if (!/^[a-z0-9-]+$/.test(input)) { - return 'Module name can only contain lowercase letters, numbers, and hyphens' + return 'Package name can only contain lowercase letters, numbers, and hyphens' } - return true + return '' } export const replaceTag = (tag: string, oldValue: string, newValue: string) => { @@ -207,3 +211,7 @@ export const detectPackageManager = () => { if (userAgent.startsWith('bun')) return 'bun' return 'bun' } + +export const capitalize = (str: string) => { + return str.charAt(0).toUpperCase() + str.slice(1) +}