diff --git a/.env.local b/.env.local new file mode 100644 index 000000000..82e90d3f0 --- /dev/null +++ b/.env.local @@ -0,0 +1,2 @@ +CRAWLAB_TAG=develop +CRAWLAB_PORT=8082 diff --git a/.github/workflows/docker-crawlab-tencent.yml b/.github/workflows/docker-crawlab-tencent.yml deleted file mode 100644 index c1e0a8e90..000000000 --- a/.github/workflows/docker-crawlab-tencent.yml +++ /dev/null @@ -1,197 +0,0 @@ -name: "Docker Image CI: crawlab (tencent)" - -on: - push: - branches: [ develop, main ] - #pull_request: - # branches: [ main ] - release: - types: [ published ] - workflow_dispatch: - repository_dispatch: - types: [ docker-crawlab ] - -env: - IMAGE_PATH_CRAWLAB_BACKEND: backend - IMAGE_PATH_CRAWLAB_FRONTEND: frontend - IMAGE_NAME_CRAWLAB: ccr.ccs.tencentyun.com/crawlab/crawlab - IMAGE_NAME_CRAWLAB_BACKEND: crawlabteam/crawlab-backend - IMAGE_NAME_CRAWLAB_FRONTEND: crawlabteam/crawlab-frontend - -jobs: - setup: - runs-on: ubuntu-latest - outputs: - is_matched_backend: ${{ steps.check_changed_files.outputs.is_matched_backend }} - is_matched_frontend: ${{ steps.check_changed_files.outputs.is_matched_frontend }} - is_matched_dockerfile: ${{ steps.check_changed_files.outputs.is_matched_dockerfile }} - version: ${{ steps.version.outputs.version }} - steps: - - uses: actions/checkout@v2 - - name: Get changed files - id: changed_files - uses: tj-actions/changed-files@v18.7 - - id: check_changed_files - name: Check changed files - run: | - # check changed files - is_matched_backend=0 - is_matched_frontend=0 - is_matched_dockerfile=0 - for file in ${{ steps.changed_files.outputs.all_changed_files }}; do - if [[ $file =~ ^${IMAGE_PATH_CRAWLAB_BACKEND}/.* ]]; then - file_backend=$file - is_matched_backend=1 - fi - if [[ $file =~ ^${IMAGE_PATH_CRAWLAB_FRONTEND}/.* ]]; then - file_frontend=$file - is_matched_frontend=1 - fi - if [[ $file == Dockerfile ]]; then - file_dockerfile=$file - is_matched_dockerfile=1 - fi - done - - # set outputs - if [[ "${{ github.ref }}" == "refs/tags/"* ]]; then - is_matched_backend=1 - is_matched_frontend=1 - is_matched_dockerfile=1 - fi - - echo "::set-output name=is_matched_backend::$is_matched_backend" - echo "::set-output name=is_matched_frontend::$is_matched_frontend" - echo "::set-output name=is_matched_dockerfile::$is_matched_dockerfile" - - # echo outputs - echo "is_matched_backend=$is_matched_backend, file_backend=$file_backend" - echo "is_matched_frontend=$is_matched_frontend, file_frontend=$file_frontend" - echo "is_matched_dockerfile=$is_matched_dockerfile, file_dockerfile=$file_dockerfile" - - - id: version - name: Get version - run: | - # Strip git ref prefix from version - VERSION=$(echo "${{ github.ref }}" | sed -e 's,.*/\(.*\),\1,') - - # Strip "v" prefix from tag name - [[ "${{ github.ref }}" == "refs/tags/"* ]] && VERSION=$(echo $VERSION | sed -e 's/^v//') - - # Use Docker `latest` tag convention - [ "$VERSION" == "main" ] && VERSION=latest - - echo "::set-output name=version::$VERSION" - - build-backend: - needs: [ setup ] - if: needs.setup.outputs.is_matched_backend == '1' - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - name: Get changed files - id: changed-files - uses: tj-actions/changed-files@v18.7 - - name: Build image - run: | - cd $IMAGE_PATH_CRAWLAB_BACKEND - docker build . --file Dockerfile --tag image - - name: Log into registry - run: echo ${{ secrets.DOCKER_PASSWORD }} | docker login -u ${{ secrets.DOCKER_USERNAME }} --password-stdin - - name: Push image - run: | - IMAGE_VERSION=${{needs.setup.outputs.version}} - IMAGE_NAME=$IMAGE_NAME_CRAWLAB_BACKEND - docker tag image $IMAGE_NAME:$IMAGE_VERSION - docker push $IMAGE_NAME:$IMAGE_VERSION - - build-frontend: - needs: [ setup ] - if: needs.setup.outputs.is_matched_frontend == '1' - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - name: Get changed files - id: changed-files - uses: tj-actions/changed-files@v18.7 - - name: Build image - run: | - cd $IMAGE_PATH_CRAWLAB_FRONTEND - docker build . --file Dockerfile --tag image - - name: Log into registry - run: echo ${{ secrets.DOCKER_PASSWORD }} | docker login -u ${{ secrets.DOCKER_USERNAME }} --password-stdin - - name: Push image - run: | - IMAGE_VERSION=${{needs.setup.outputs.version}} - IMAGE_NAME=$IMAGE_NAME_CRAWLAB_FRONTEND - docker tag image $IMAGE_NAME:$IMAGE_VERSION - docker push $IMAGE_NAME:$IMAGE_VERSION - - build-crawlab: - if: ${{ always() }} - needs: [ setup, build-backend, build-frontend ] - runs-on: ubuntu-latest - services: - mongo: - image: mongo:4.2 - ports: - - 27017:27017 - steps: - - uses: actions/checkout@v2 - - name: Update Dockerfile - run: | - IMAGE_VERSION=${{needs.setup.outputs.version}} - if [[ $IMAGE_VERSION != "latest" ]]; then - for n in crawlab-backend crawlab-frontend; do - IMAGE_NAME=$n - sed -i "s/${IMAGE_NAME}:latest/${IMAGE_NAME}:${IMAGE_VERSION}/" Dockerfile - done - fi - - - name: Build image - run: docker build . --file Dockerfile --tag image - - - name: Test image - run: | - docker run --rm -d --name crawlab_master \ - -e CRAWLAB_NODE_MASTER=true \ - -e CRAWLAB_DEMO=true \ - -e CRAWLAB_MONGO_HOST=localhost \ - -e CRAWLAB_MONGO_PORT=27017 \ - -p 8080:8080 \ - --network host \ - image - docker exec crawlab_master env - docker logs -f crawlab_master & - sleep 10 - docker ps - cmd='curl http://localhost:8080/api/system-info -s' - echo "cmd: ${cmd}" - res=`${cmd}` - echo "res: ${res}" - if [[ $res =~ "success" ]]; then - : - else - exit 1 - fi - docker stop crawlab_master - - - name: Set up Python - uses: actions/setup-python@v1 - with: - python-version: '3.8' - - - name: Test demo - run: | - pip install crawlab-demo - crawlab-demo validate - - - name: Log into registry - run: echo ${{ secrets.DOCKER_TENCENT_PASSWORD }} | docker login -u ${{ secrets.DOCKER_TENCENT_USERNAME }} --password-stdin ccr.ccs.tencentyun.com - - - name: Push image - run: | - IMAGE_VERSION=${{needs.setup.outputs.version}} - IMAGE_ID=$IMAGE_NAME_CRAWLAB - docker tag image $IMAGE_ID:$IMAGE_VERSION - docker push $IMAGE_ID:$IMAGE_VERSION diff --git a/.github/workflows/docker-crawlab.yml b/.github/workflows/docker-crawlab.yml index f447a7645..ebadc9aea 100644 --- a/.github/workflows/docker-crawlab.yml +++ b/.github/workflows/docker-crawlab.yml @@ -2,9 +2,7 @@ name: "Docker Image CI: crawlab" on: push: - branches: [ develop, main ] - #pull_request: - # branches: [ main ] + branches: [ develop, test, main ] release: types: [ published ] workflow_dispatch: @@ -14,61 +12,83 @@ on: env: IMAGE_PATH_CRAWLAB_BACKEND: backend IMAGE_PATH_CRAWLAB_FRONTEND: frontend - IMAGE_NAME_CRAWLAB: crawlabteam/crawlab - IMAGE_NAME_CRAWLAB_BACKEND: crawlabteam/crawlab-backend - IMAGE_NAME_CRAWLAB_FRONTEND: crawlabteam/crawlab-frontend + GH_PKG_NAME_CRAWLAB_BASE: ${{ github.repository_owner }}/crawlab-base + GH_PKG_NAME_CRAWLAB_BACKEND: ${{ github.repository_owner }}/crawlab-backend + GH_PKG_NAME_CRAWLAB_FRONTEND: ${{ github.repository_owner }}/crawlab-frontend + GH_PKG_NAME_CRAWLAB: ${{ github.repository_owner }}/crawlab + IMAGE_NAME_CRAWLAB_BASE: ghcr.io/${{ github.repository_owner }}/crawlab-base + IMAGE_NAME_CRAWLAB_BACKEND: ghcr.io/${{ github.repository_owner }}/crawlab-backend + IMAGE_NAME_CRAWLAB_FRONTEND: ghcr.io/${{ github.repository_owner }}/crawlab-frontend + IMAGE_NAME_CRAWLAB_GH: ghcr.io/${{ github.repository_owner }}/crawlab + IMAGE_NAME_CRAWLAB_DOCKERHUB: crawlabteam/crawlab + IMAGE_NAME_CRAWLAB_TENCENT: ccr.ccs.tencentyun.com/crawlab/crawlab + E2E_TESTS_IMAGE_NAME: ghcr.io/${{ github.repository_owner }}/e2e-tests + E2E_TESTS_WORKSPACE: ${{ github.workspace }}/playwright-report jobs: setup: + name: Setup runs-on: ubuntu-latest outputs: - is_matched_backend: ${{ steps.check_changed_files.outputs.is_matched_backend }} - is_matched_frontend: ${{ steps.check_changed_files.outputs.is_matched_frontend }} - is_matched_dockerfile: ${{ steps.check_changed_files.outputs.is_matched_dockerfile }} + backend_changed: ${{ steps.check_changed_files.outputs.backend_changed }} + frontend_changed: ${{ steps.check_changed_files.outputs.frontend_changed }} + docker_changed: ${{ steps.check_changed_files.outputs.docker_changed }} + workflow_changed: ${{ steps.check_changed_files.outputs.workflow_changed }} + base_image_changed: ${{ steps.check_changed_files.outputs.base_image_changed }} version: ${{ steps.version.outputs.version }} + test_script: ${{ steps.test_config.outputs.test_script }} + steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 + - name: Get changed files id: changed_files - uses: tj-actions/changed-files@v18.7 + uses: tj-actions/changed-files@v45 + with: + files_yaml: | + backend: + - 'backend/**' + - 'core/**' + - 'fs/**' + - 'grpc/**' + - 'vcs/**' + - 'trace/**' + frontend: + - '${{ env.IMAGE_PATH_CRAWLAB_FRONTEND }}/**' + docker: + - 'Dockerfile' + - 'docker/bin/**' + - 'docker/nginx/**' + workflow: + - '.github/workflows/docker-crawlab.yml' + base_image: + - 'docker/base-image/**' + - id: check_changed_files name: Check changed files run: | - # check changed files - is_matched_backend=0 - is_matched_frontend=0 - is_matched_dockerfile=0 - for file in ${{ steps.changed_files.outputs.all_changed_files }}; do - if [[ $file =~ ^${IMAGE_PATH_CRAWLAB_BACKEND}/.* ]]; then - file_backend=$file - is_matched_backend=1 - fi - if [[ $file =~ ^${IMAGE_PATH_CRAWLAB_FRONTEND}/.* ]]; then - file_frontend=$file - is_matched_frontend=1 - fi - if [[ $file == Dockerfile ]]; then - file_dockerfile=$file - is_matched_dockerfile=1 - fi - done - # set outputs if [[ "${{ github.ref }}" == "refs/tags/"* ]]; then - is_matched_backend=1 - is_matched_frontend=1 - is_matched_dockerfile=1 + echo "backend_changed=true" >> $GITHUB_OUTPUT + echo "frontend_changed=true" >> $GITHUB_OUTPUT + echo "docker_changed=true" >> $GITHUB_OUTPUT + echo "workflow_changed=true" >> $GITHUB_OUTPUT + echo "base_image_changed=true" >> $GITHUB_OUTPUT + else + echo "backend_changed=${{ steps.changed_files.outputs.backend_any_changed }}" >> $GITHUB_OUTPUT + echo "frontend_changed=${{ steps.changed_files.outputs.frontend_any_changed }}" >> $GITHUB_OUTPUT + echo "docker_changed=${{ steps.changed_files.outputs.docker_any_changed }}" >> $GITHUB_OUTPUT + echo "workflow_changed=${{ steps.changed_files.outputs.workflow_any_changed }}" >> $GITHUB_OUTPUT + echo "base_image_changed=${{ steps.changed_files.outputs.base_image_any_changed }}" >> $GITHUB_OUTPUT fi - echo "::set-output name=is_matched_backend::$is_matched_backend" - echo "::set-output name=is_matched_frontend::$is_matched_frontend" - echo "::set-output name=is_matched_dockerfile::$is_matched_dockerfile" - - # echo outputs - echo "is_matched_backend=$is_matched_backend, file_backend=$file_backend" - echo "is_matched_frontend=$is_matched_frontend, file_frontend=$file_frontend" - echo "is_matched_dockerfile=$is_matched_dockerfile, file_dockerfile=$file_dockerfile" - + # Display change status for each component + echo "Backend changed: ${{ steps.changed_files.outputs.backend_any_changed }}" + echo "Frontend changed: ${{ steps.changed_files.outputs.frontend_any_changed }}" + echo "Docker changed: ${{ steps.changed_files.outputs.docker_any_changed }}" + echo "Workflow changed: ${{ steps.changed_files.outputs.workflow_any_changed }}" + echo "Base image changed: ${{ steps.changed_files.outputs.base_image_any_changed }}" + - id: version name: Get version run: | @@ -81,117 +101,270 @@ jobs: # Use Docker `latest` tag convention [ "$VERSION" == "main" ] && VERSION=latest - echo "::set-output name=version::$VERSION" - - build-backend: - needs: [ setup ] - if: needs.setup.outputs.is_matched_backend == '1' - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - name: Get changed files - id: changed-files - uses: tj-actions/changed-files@v18.7 - - name: Build image - run: | - cd $IMAGE_PATH_CRAWLAB_BACKEND - docker build . --file Dockerfile --tag image - - name: Log into registry - run: echo ${{ secrets.DOCKER_PASSWORD }} | docker login -u ${{ secrets.DOCKER_USERNAME }} --password-stdin - - name: Push image + echo "version=$VERSION" >> $GITHUB_OUTPUT + + - id: test_config + name: Set test configuration run: | - IMAGE_VERSION=${{needs.setup.outputs.version}} - IMAGE_NAME=$IMAGE_NAME_CRAWLAB_BACKEND - docker tag image $IMAGE_NAME:$IMAGE_VERSION - docker push $IMAGE_NAME:$IMAGE_VERSION + if [[ "${{ github.ref }}" == "refs/heads/main" ]]; then + echo "test_script=test:full" >> $GITHUB_OUTPUT + elif [[ "${{ github.ref }}" == "refs/heads/test" ]]; then + echo "test_script=test:extended" >> $GITHUB_OUTPUT + else + echo "test_script=test:normal" >> $GITHUB_OUTPUT + fi - build-frontend: + build_base_image: + name: Build base image needs: [ setup ] - if: needs.setup.outputs.is_matched_frontend == '1' + if: needs.setup.outputs.base_image_changed == 'true' || needs.setup.outputs.workflow_changed == 'true' runs-on: ubuntu-latest + outputs: + failed: ${{ steps.set_output.outputs.failed }} steps: - - uses: actions/checkout@v2 - - name: Get changed files - id: changed-files - uses: tj-actions/changed-files@v18.7 - - name: Build image - run: | - cd $IMAGE_PATH_CRAWLAB_FRONTEND - docker build . --file Dockerfile --tag image - - name: Log into registry - run: echo ${{ secrets.DOCKER_PASSWORD }} | docker login -u ${{ secrets.DOCKER_USERNAME }} --password-stdin - - name: Push image - run: | - IMAGE_VERSION=${{needs.setup.outputs.version}} - IMAGE_NAME=$IMAGE_NAME_CRAWLAB_FRONTEND - docker tag image $IMAGE_NAME:$IMAGE_VERSION - docker push $IMAGE_NAME:$IMAGE_VERSION + - uses: actions/checkout@v4 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + - name: Log in to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Build and push image + uses: docker/build-push-action@v5 + with: + context: ./docker/base-image + push: true + tags: ${{ env.IMAGE_NAME_CRAWLAB_BASE }}:${{ needs.setup.outputs.version }} + - name: Set output + id: set_output + if: failure() + run: echo "failed=true" >> $GITHUB_OUTPUT - build-crawlab: - if: ${{ always() }} - needs: [ setup, build-backend, build-frontend ] + test_backend: + name: Test backend + needs: [ setup ] + if: needs.setup.outputs.backend_changed == 'true' || needs.setup.outputs.workflow_changed == 'true' runs-on: ubuntu-latest + outputs: + failed: ${{ steps.set_output.outputs.failed }} services: mongo: - image: mongo:4.2 + image: mongo:5 ports: - 27017:27017 + strategy: + matrix: + package: [core] steps: - - uses: actions/checkout@v2 - - name: Update Dockerfile + - uses: actions/checkout@v4 + - name: Set up Go + uses: actions/setup-go@v5 + with: + go-version-file: '${{ matrix.package }}/go.mod' + cache-dependency-path: '${{ matrix.package }}/go.sum' + - name: Run tests + working-directory: ${{ matrix.package }} run: | - IMAGE_VERSION=${{needs.setup.outputs.version}} - if [[ $IMAGE_VERSION != "latest" ]]; then - for n in crawlab-backend crawlab-frontend; do - IMAGE_NAME=$n - sed -i "s/${IMAGE_NAME}:latest/${IMAGE_NAME}:${IMAGE_VERSION}/" Dockerfile - done - fi - - - name: Build image - run: docker build . --file Dockerfile --tag image + # Find all directories containing *_test.go files + test_dirs=$(find . -name "*_test.go" -exec dirname {} \; | sort -u) + # Run go test on each directory + for dir in $test_dirs + do + echo "Running tests in $dir" + go test ./$dir + done + - name: Set output + id: set_output + if: failure() + run: echo "failed=true" >> $GITHUB_OUTPUT - - name: Test image - run: | - docker run --rm -d --name crawlab_master \ - -e CRAWLAB_NODE_MASTER=true \ - -e CRAWLAB_DEMO=true \ - -e CRAWLAB_MONGO_HOST=localhost \ - -e CRAWLAB_MONGO_PORT=27017 \ - -p 8080:8080 \ - --network host \ - image - docker exec crawlab_master env - docker logs -f crawlab_master & - sleep 10 - docker ps - cmd='curl http://localhost:8080/api/system-info -s' - echo "cmd: ${cmd}" - res=`${cmd}` - echo "res: ${res}" - if [[ $res =~ "success" ]]; then - : - else - exit 1 - fi - docker stop crawlab_master + build_backend: + name: Build backend + needs: [ setup, test_backend ] + if: needs.test_backend.result == 'success' || needs.setup.outputs.workflow_changed == 'true' + runs-on: ubuntu-latest + outputs: + failed: ${{ steps.set_output.outputs.failed }} + steps: + - uses: actions/checkout@v4 + - name: Log in to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Build and push image + uses: docker/build-push-action@v5 + with: + context: . + file: ${{ env.IMAGE_PATH_CRAWLAB_BACKEND }}/Dockerfile + push: true + tags: ${{ env.IMAGE_NAME_CRAWLAB_BACKEND }}:${{ needs.setup.outputs.version }} + - name: Set output + id: set_output + if: failure() + run: echo "failed=true" >> $GITHUB_OUTPUT - - name: Set up Python - uses: actions/setup-python@v1 + build_frontend: + name: Build frontend + needs: [ setup ] + if: needs.setup.outputs.frontend_changed == 'true' || needs.setup.outputs.workflow_changed == 'true' + runs-on: ubuntu-latest + outputs: + failed: ${{ steps.set_output.outputs.failed }} + steps: + - uses: actions/checkout@v4 + with: + submodules: 'recursive' + - name: Log in to GitHub Container Registry + uses: docker/login-action@v3 with: - python-version: '3.8' + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Build and push image + uses: docker/build-push-action@v5 + with: + context: ${{ env.IMAGE_PATH_CRAWLAB_FRONTEND }} + push: true + tags: ${{ env.IMAGE_NAME_CRAWLAB_FRONTEND }}:${{ needs.setup.outputs.version }} + - name: Set output + id: set_output + if: failure() + run: echo "failed=true" >> $GITHUB_OUTPUT - - name: Test demo + build_crawlab: + name: Build crawlab + needs: [setup, build_base_image, test_backend, build_backend, build_frontend] + if: | + always() && + ( + needs.test_backend.outputs.failed != 'true' && + needs.build_backend.outputs.failed != 'true' && + needs.build_frontend.outputs.failed != 'true' && + needs.build_base_image.outputs.failed != 'true' + ) && + ( + needs.setup.outputs.backend_changed == 'true' || + needs.setup.outputs.frontend_changed == 'true' || + needs.setup.outputs.docker_changed == 'true' || + needs.setup.outputs.base_image_changed == 'true' || + needs.setup.outputs.workflow_changed == 'true' + ) + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Update Dockerfile run: | - pip install crawlab-demo - crawlab-demo validate + IMAGE_NAMES=( + "crawlab-base" + "crawlab-backend" + "crawlab-frontend" + ) + for name in "${IMAGE_NAMES[@]}"; do + IMAGE_NAME="ghcr.io/${{ github.repository_owner }}/$name" + OLD_IMAGE="crawlabteam/${name}:" + NEW_IMAGE="${IMAGE_NAME}:" + sed -i "s|${OLD_IMAGE}|${NEW_IMAGE}|" Dockerfile + done + - name: Log in to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Build and push image + uses: docker/build-push-action@v5 + with: + context: . + file: ./Dockerfile + build-args: | + CRAWLAB_TAG=${{ needs.setup.outputs.version }} + push: true + tags: | + ${{ env.IMAGE_NAME_CRAWLAB_GH }}:${{ needs.setup.outputs.version }} - - name: Log into registry - run: echo ${{ secrets.DOCKER_PASSWORD }} | docker login -u ${{ secrets.DOCKER_USERNAME }} --password-stdin + test_crawlab: + name: Test crawlab + needs: [setup, build_crawlab] + if: ${{ always() && needs.build_crawlab.result == 'success' }} + runs-on: ubuntu-latest + services: + mongo: + image: mongo:5 + options: >- + --health-cmd "mongosh --eval 'db.adminCommand(\"ping\")' || exit 1" + --health-interval 10s + --health-timeout 5s + --health-retries 5 + master: + image: ghcr.io/${{ github.repository_owner }}/crawlab:${{ needs.setup.outputs.version }} + env: + CRAWLAB_NODE_MASTER: Y + CRAWLAB_MONGO_HOST: mongo + CRAWLAB_MONGO_PORT: 27017 + ports: + - 8080:8080 + worker: + image: ghcr.io/${{ github.repository_owner }}/crawlab:${{ needs.setup.outputs.version }} + env: + CRAWLAB_NODE_MASTER: N + CRAWLAB_MASTER_HOST: master + steps: + - name: Checkout repository + uses: actions/checkout@v4 + - name: Log in to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Pull e2e test image + run: | + docker pull ${{ env.E2E_TESTS_IMAGE_NAME }}:latest + - name: Run e2e test image + run: | + docker run --network host \ + -e BASE_URL=http://localhost:8080 \ + -e TEST_SCRIPT=${{ needs.setup.outputs.test_script }} \ + -v ${{ env.E2E_TESTS_WORKSPACE }}:/app/playwright-report \ + ${{ env.E2E_TESTS_IMAGE_NAME }}:latest + - name: Upload test results + if: ${{ success() || failure() }} + uses: actions/upload-artifact@v4 + with: + name: playwright-report-${{ needs.setup.outputs.version }} + path: ${{ env.E2E_TESTS_WORKSPACE }} + retention-days: 1 + overwrite: true - - name: Push image + push_images: + name: Push images + if: ${{ always() && needs.test_crawlab.result == 'success' }} + needs: [setup, test_crawlab] + runs-on: ubuntu-latest + strategy: + matrix: + registry: [dockerhub, tencent] + steps: + - name: Login to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Pull Docker image from GitHub Container Registry + run: docker pull ${{ env.IMAGE_NAME_CRAWLAB_GH }}:${{ needs.setup.outputs.version }} + - name: Login to DockerHub or Tencent Registry + uses: docker/login-action@v3 + with: + registry: ${{ (matrix.registry == 'dockerhub' && 'https://index.docker.io/v1/') || (matrix.registry == 'tencent' && 'ccr.ccs.tencentyun.com') }} + username: ${{ (matrix.registry == 'dockerhub' && secrets.DOCKER_USERNAME) || (matrix.registry == 'tencent' && secrets.DOCKER_TENCENT_USERNAME) }} + password: ${{ (matrix.registry == 'dockerhub' && secrets.DOCKER_PASSWORD) || (matrix.registry == 'tencent' && secrets.DOCKER_TENCENT_PASSWORD) }} + - name: Tag and push image + if: ${{ matrix.registry == 'dockerhub' || (matrix.registry == 'tencent' && github.ref != 'refs/heads/develop') }} run: | - IMAGE_VERSION=${{needs.setup.outputs.version}} - IMAGE_ID=$IMAGE_NAME_CRAWLAB - docker tag image $IMAGE_ID:$IMAGE_VERSION - docker push $IMAGE_ID:$IMAGE_VERSION + docker tag ${{ env.IMAGE_NAME_CRAWLAB_GH }}:${{ needs.setup.outputs.version }} ${{ (matrix.registry == 'dockerhub' && env.IMAGE_NAME_CRAWLAB_DOCKERHUB) || (matrix.registry == 'tencent' && env.IMAGE_NAME_CRAWLAB_TENCENT) }}:${{ needs.setup.outputs.version }} + docker push ${{ (matrix.registry == 'dockerhub' && env.IMAGE_NAME_CRAWLAB_DOCKERHUB) || (matrix.registry == 'tencent' && env.IMAGE_NAME_CRAWLAB_TENCENT) }}:${{ needs.setup.outputs.version }} diff --git a/.github/workflows/qodana_code_quality.yml b/.github/workflows/qodana_code_quality.yml deleted file mode 100644 index ebfb9343b..000000000 --- a/.github/workflows/qodana_code_quality.yml +++ /dev/null @@ -1,21 +0,0 @@ -name: Qodana -on: - workflow_dispatch: - pull_request: - push: - branches: - - main - - develop - -jobs: - qodana: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - - name: 'Qodana Scan' - uses: JetBrains/qodana-action@v2024.1 - env: - QODANA_TOKEN: ${{ secrets.QODANA_TOKEN }} \ No newline at end of file diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 000000000..9b4f4025d --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "frontend/packages/crawlab-ui"] + path = frontend/packages/crawlab-ui + url = git@github.com:crawlab-team/crawlab-ui.git diff --git a/Dockerfile b/Dockerfile index d05fbee44..f9aec9f79 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,30 +1,24 @@ -FROM crawlabteam/crawlab-backend:latest AS backend-build +ARG CRAWLAB_TAG=latest -FROM crawlabteam/crawlab-frontend:latest AS frontend-build +FROM crawlabteam/crawlab-backend:${CRAWLAB_TAG} AS backend-build -FROM crawlabteam/crawlab-public-plugins:latest AS public-plugins-build +FROM crawlabteam/crawlab-frontend:${CRAWLAB_TAG} AS frontend-build -# images -FROM crawlabteam/crawlab-base:latest +FROM crawlabteam/crawlab-base:${CRAWLAB_TAG} -# add files -COPY ./backend/conf /app/backend/conf -COPY ./nginx /app/nginx -COPY ./bin /app/bin - -# copy backend files -RUN mkdir -p /opt/bin -COPY --from=backend-build /go/bin/crawlab /opt/bin -RUN cp /opt/bin/crawlab /usr/local/bin/crawlab-server - -# copy frontend files +# Copy files +COPY --from=backend-build /go/bin/crawlab /usr/local/bin/crawlab-server COPY --from=frontend-build /app/dist /app/dist +COPY ./backend/conf /app/backend/conf +COPY ./docker/nginx/crawlab.conf /etc/nginx/conf.d +COPY ./docker/bin/docker-init.sh /app/bin/docker-init.sh -# copy public-plugins files -COPY --from=public-plugins-build /app/plugins /app/plugins +# Start backend +CMD ["/bin/bash", "/app/bin/docker-init.sh"] -# copy nginx config files -COPY ./nginx/crawlab.conf /etc/nginx/conf.d +# Frontend port +EXPOSE 8080 -# start backend -CMD ["/bin/bash", "/app/bin/docker-init.sh"] +# Healthcheck for backend +HEALTHCHECK --interval=1m --timeout=3s \ + CMD curl -f http://localhost:8000/health || exit 1 \ No newline at end of file diff --git a/backend/.air.master.conf b/backend/.air.master.conf deleted file mode 100644 index 47c2ee4d6..000000000 --- a/backend/.air.master.conf +++ /dev/null @@ -1,47 +0,0 @@ -# Config file for [Air](https://github.com/cosmtrek/air) in TOML format - -# Working directory -# . or absolute path, please note that the directories following must be under root. -root = "." -tmp_dir = "/tmp" - -[build] -# Just plain old shell command. You could use `make` as well. -cmd = "go build -o ../tmp/main ./ " -# Binary file yields from `cmd`. -bin = "../tmp/main" -# Customize binary. -full_bin = "../tmp/main master" -# Watch these filename extensions. -include_ext = ["go", "tpl", "tmpl", "html"] -# Ignore these filename extensions or directories. -exclude_dir = ["assets", "tmp", "vendor", "frontend/node_modules"] -# Watch these directories if you specified. -include_dir = ["../libs"] -# Exclude files. -exclude_file = [] -# This log file places in your tmp_dir. -log = "air.log" -# It's not necessary to trigger build each time file changes if it's too frequent. -delay = 1000 # ms -# Stop running old binary when build errors occur. -stop_on_error = true -# Send Interrupt signal before killing process (windows does not support this feature) -send_interrupt = false -# Delay after sending Interrupt signal -kill_delay = 500 # ms - -[log] -# Show log time -time = false - -[color] -# Customize each part's color. If no color found, use the raw app log. -main = "magenta" -watcher = "cyan" -build = "yellow" -runner = "green" - -[misc] -# Delete tmp directory on exit -clean_on_exit = true \ No newline at end of file diff --git a/backend/.air.worker.conf b/backend/.air.worker.conf deleted file mode 100644 index 6198cadcf..000000000 --- a/backend/.air.worker.conf +++ /dev/null @@ -1,47 +0,0 @@ -# Config file for [Air](https://github.com/cosmtrek/air) in TOML format - -# Working directory -# . or absolute path, please note that the directories following must be under root. -root = "." -tmp_dir = "/tmp" - -[build] -# Just plain old shell command. You could use `make` as well. -cmd = "go build -o ../tmp/main ./ " -# Binary file yields from `cmd`. -bin = "../tmp/main" -# Customize binary. -full_bin = "../tmp/main worker" -# Watch these filename extensions. -include_ext = ["go", "tpl", "tmpl", "html"] -# Ignore these filename extensions or directories. -exclude_dir = ["assets", "tmp", "vendor", "frontend/node_modules"] -# Watch these directories if you specified. -include_dir = ["../libs"] -# Exclude files. -exclude_file = [] -# This log file places in your tmp_dir. -log = "air.log" -# It's not necessary to trigger build each time file changes if it's too frequent. -delay = 1000 # ms -# Stop running old binary when build errors occur. -stop_on_error = true -# Send Interrupt signal before killing process (windows does not support this feature) -send_interrupt = false -# Delay after sending Interrupt signal -kill_delay = 500 # ms - -[log] -# Show log time -time = false - -[color] -# Customize each part's color. If no color found, use the raw app log. -main = "magenta" -watcher = "cyan" -build = "yellow" -runner = "green" - -[misc] -# Delete tmp directory on exit -clean_on_exit = true \ No newline at end of file diff --git a/backend/.dockerignore b/backend/.dockerignore new file mode 100644 index 000000000..ed54ce6f3 --- /dev/null +++ b/backend/.dockerignore @@ -0,0 +1,48 @@ +# Go build artifacts +*.exe +*.exe~ +*.dll +*.so +*.dylib +*.test +*.out + +# Go workspace file +go.work + +# IDE directories +.idea/ +.vscode/ + +# Dependencies +vendor/ + +# Build output +bin/ +dist/ + +# Debug files +debug/ + +# Environment files +.env +*.env + +# System files +.DS_Store +Thumbs.db + +# Test coverage +coverage.txt +*.cover + +# Temporary files +*.tmp +*~ +**/tmp + +# Git directories +.git/ + +# Node modules +**/node_modules diff --git a/backend/.editorconfig b/backend/.editorconfig deleted file mode 100644 index c3c68a6c6..000000000 --- a/backend/.editorconfig +++ /dev/null @@ -1,12 +0,0 @@ -root = true - -[*] -charset = utf-8 -end_of_line = lf -indent_size = 4 -indent_style = tab -insert_final_newline = true -trim_trailing_whitespace = true - -[{*.yml, *.yaml, *.json}] -indent_size = 2 diff --git a/backend/Dockerfile b/backend/Dockerfile index a0de6db91..7f7b41acd 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -1,15 +1,24 @@ -FROM golang:1.18 AS build +FROM golang:1.22.9 AS build + +# Context path is the root of the repository WORKDIR /go/src/app -COPY . . + +# Copy the current directory (backend) first +COPY ./backend ./backend/ + +# Copy required modules from relative paths +COPY ./core ./core/ +COPY ./grpc ./grpc/ +COPY ./trace ./trace/ +COPY ./vcs ./vcs/ ENV GO111MODULE on -#ENV GOPROXY https://goproxy.io -RUN go mod tidy \ - && go install -v ./... +# Build from the backend directory which contains the main.go +RUN cd backend && go install -v ./... FROM alpine:3.14 -# copy files +# Copy the built binary COPY --from=build /go/bin/crawlab /go/bin/crawlab diff --git a/backend/README.md b/backend/README.md deleted file mode 100644 index bd6eb1229..000000000 --- a/backend/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# crawlab-backend - -Backend (Golang) for Crawlab \ No newline at end of file diff --git a/backend/Taskfile.yml b/backend/Taskfile.yml deleted file mode 100644 index 5e279c596..000000000 --- a/backend/Taskfile.yml +++ /dev/null @@ -1,12 +0,0 @@ -version: '3' - -tasks: - dev: - desc: Switch to dev mode for local development. - cmds: - - cp -f go.mod.dev go.mod - - deploy: - desc: Switch to deploy mode for code publish. - cmds: - - echo 'not implemented' diff --git a/backend/bin/semver.sh b/backend/bin/semver.sh deleted file mode 100755 index a16042505..000000000 --- a/backend/bin/semver.sh +++ /dev/null @@ -1,446 +0,0 @@ -#!/usr/bin/env bash -# SPDX-License-Identifier: Apache-2.0 - -set -o errexit -o nounset -o pipefail - -NAT='0|[1-9][0-9]*' -ALPHANUM='[0-9]*[A-Za-z-][0-9A-Za-z-]*' -IDENT="$NAT|$ALPHANUM" -FIELD='[0-9A-Za-z-]+' - -SEMVER_REGEX="\ -^[vV]?\ -($NAT)\\.($NAT)\\.($NAT)\ -(\\-(${IDENT})(\\.(${IDENT}))*)?\ -(\\+${FIELD}(\\.${FIELD})*)?$" - -PROG=semver -PROG_VERSION="3.4.0" - -USAGE="\ -Usage: - $PROG bump major - $PROG bump minor - $PROG bump patch - $PROG bump prerel|prerelease [] - $PROG bump build - $PROG bump release - $PROG get major - $PROG get minor - $PROG get patch - $PROG get prerel|prerelease - $PROG get build - $PROG get release - $PROG compare - $PROG diff - $PROG validate - $PROG --help - $PROG --version - -Arguments: - A version must match the following regular expression: - \"${SEMVER_REGEX}\" - In English: - -- The version must match X.Y.Z[-PRERELEASE][+BUILD] - where X, Y and Z are non-negative integers. - -- PRERELEASE is a dot separated sequence of non-negative integers and/or - identifiers composed of alphanumeric characters and hyphens (with - at least one non-digit). Numeric identifiers must not have leading - zeros. A hyphen (\"-\") introduces this optional part. - -- BUILD is a dot separated sequence of identifiers composed of alphanumeric - characters and hyphens. A plus (\"+\") introduces this optional part. - - See definition. - - A string as defined by PRERELEASE above. Or, it can be a PRERELEASE - prototype string followed by a dot. - - A string as defined by BUILD above. - -Options: - -v, --version Print the version of this tool. - -h, --help Print this help message. - -Commands: - bump Bump by one of major, minor, patch; zeroing or removing - subsequent parts. \"bump prerel\" (or its synonym \"bump prerelease\") - sets the PRERELEASE part and removes any BUILD part. A trailing dot - in the argument introduces an incrementing numeric field - which is added or bumped. If no argument is provided, an - incrementing numeric field is introduced/bumped. \"bump build\" sets - the BUILD part. \"bump release\" removes any PRERELEASE or BUILD parts. - The bumped version is written to stdout. - - get Extract given part of , where part is one of major, minor, - patch, prerel (alternatively: prerelease), build, or release. - - compare Compare with , output to stdout the - following values: -1 if is newer, 0 if equal, 1 if - older. The BUILD part is not used in comparisons. - - diff Compare with , output to stdout the - difference between two versions by the release type (MAJOR, MINOR, - PATCH, PRERELEASE, BUILD). - - validate Validate if follows the SEMVER pattern (see - definition). Print 'valid' to stdout if the version is valid, otherwise - print 'invalid'. - -See also: - https://semver.org -- Semantic Versioning 2.0.0" - -function error { - echo -e "$1" >&2 - exit 1 -} - -function usage_help { - error "$USAGE" -} - -function usage_version { - echo -e "${PROG}: $PROG_VERSION" - exit 0 -} - -# normalize the "part" keywords to a canonical string. At present, -# only "prerelease" is normalized to "prerel". - -function normalize_part { - if [ "$1" == "prerelease" ] - then - echo "prerel" - else - echo "$1" - fi -} - -function validate_version { - local version=$1 - if [[ "$version" =~ $SEMVER_REGEX ]]; then - # if a second argument is passed, store the result in var named by $2 - if [ "$#" -eq "2" ]; then - local major=${BASH_REMATCH[1]} - local minor=${BASH_REMATCH[2]} - local patch=${BASH_REMATCH[3]} - local prere=${BASH_REMATCH[4]} - local build=${BASH_REMATCH[8]} - eval "$2=(\"$major\" \"$minor\" \"$patch\" \"$prere\" \"$build\")" - else - echo "$version" - fi - else - error "version $version does not match the semver scheme 'X.Y.Z(-PRERELEASE)(+BUILD)'. See help for more information." - fi -} - -function is_nat { - [[ "$1" =~ ^($NAT)$ ]] -} - -function is_null { - [ -z "$1" ] -} - -function order_nat { - [ "$1" -lt "$2" ] && { echo -1 ; return ; } - [ "$1" -gt "$2" ] && { echo 1 ; return ; } - echo 0 -} - -function order_string { - [[ $1 < $2 ]] && { echo -1 ; return ; } - [[ $1 > $2 ]] && { echo 1 ; return ; } - echo 0 -} - -# given two (named) arrays containing NAT and/or ALPHANUM fields, compare them -# one by one according to semver 2.0.0 spec. Return -1, 0, 1 if left array ($1) -# is less-than, equal, or greater-than the right array ($2). The longer array -# is considered greater-than the shorter if the shorter is a prefix of the longer. -# -function compare_fields { - local l="$1[@]" - local r="$2[@]" - local leftfield=( "${!l}" ) - local rightfield=( "${!r}" ) - local left - local right - - local i=$(( -1 )) - local order=$(( 0 )) - - while true - do - [ $order -ne 0 ] && { echo $order ; return ; } - - : $(( i++ )) - left="${leftfield[$i]}" - right="${rightfield[$i]}" - - is_null "$left" && is_null "$right" && { echo 0 ; return ; } - is_null "$left" && { echo -1 ; return ; } - is_null "$right" && { echo 1 ; return ; } - - is_nat "$left" && is_nat "$right" && { order=$(order_nat "$left" "$right") ; continue ; } - is_nat "$left" && { echo -1 ; return ; } - is_nat "$right" && { echo 1 ; return ; } - { order=$(order_string "$left" "$right") ; continue ; } - done -} - -# shellcheck disable=SC2206 # checked by "validate"; ok to expand prerel id's into array -function compare_version { - local order - validate_version "$1" V - validate_version "$2" V_ - - # compare major, minor, patch - - local left=( "${V[0]}" "${V[1]}" "${V[2]}" ) - local right=( "${V_[0]}" "${V_[1]}" "${V_[2]}" ) - - order=$(compare_fields left right) - [ "$order" -ne 0 ] && { echo "$order" ; return ; } - - # compare pre-release ids when M.m.p are equal - - local prerel="${V[3]:1}" - local prerel_="${V_[3]:1}" - local left=( ${prerel//./ } ) - local right=( ${prerel_//./ } ) - - # if left and right have no pre-release part, then left equals right - # if only one of left/right has pre-release part, that one is less than simple M.m.p - - [ -z "$prerel" ] && [ -z "$prerel_" ] && { echo 0 ; return ; } - [ -z "$prerel" ] && { echo 1 ; return ; } - [ -z "$prerel_" ] && { echo -1 ; return ; } - - # otherwise, compare the pre-release id's - - compare_fields left right -} - -# render_prerel -- return a prerel field with a trailing numeric string -# usage: render_prerel numeric [prefix-string] -# -function render_prerel { - if [ -z "$2" ] - then - echo "${1}" - else - echo "${2}${1}" - fi -} - -# extract_prerel -- extract prefix and trailing numeric portions of a pre-release part -# usage: extract_prerel prerel prerel_parts -# The prefix and trailing numeric parts are returned in "prerel_parts". -# -PREFIX_ALPHANUM='[.0-9A-Za-z-]*[.A-Za-z-]' -DIGITS='[0-9][0-9]*' -EXTRACT_REGEX="^(${PREFIX_ALPHANUM})*(${DIGITS})$" - -function extract_prerel { - local prefix; local numeric; - - if [[ "$1" =~ $EXTRACT_REGEX ]] - then # found prefix and trailing numeric parts - prefix="${BASH_REMATCH[1]}" - numeric="${BASH_REMATCH[2]}" - else # no numeric part - prefix="${1}" - numeric= - fi - - eval "$2=(\"$prefix\" \"$numeric\")" -} - -# bump_prerel -- return the new pre-release part based on previous pre-release part -# and prototype for bump -# usage: bump_prerel proto previous -# -function bump_prerel { - local proto; local prev_prefix; local prev_numeric; - - # case one: no trailing dot in prototype => simply replace previous with proto - if [[ ! ( "$1" =~ \.$ ) ]] - then - echo "$1" - return - fi - - proto="${1%.}" # discard trailing dot marker from prototype - - extract_prerel "${2#-}" prerel_parts # extract parts of previous pre-release -# shellcheck disable=SC2154 - prev_prefix="${prerel_parts[0]}" - prev_numeric="${prerel_parts[1]}" - - # case two: bump or append numeric to previous pre-release part - if [ "$proto" == "+" ] # dummy "+" indicates no prototype argument provided - then - if [ -n "$prev_numeric" ] - then - : $(( ++prev_numeric )) # previous pre-release is already numbered, bump it - render_prerel "$prev_numeric" "$prev_prefix" - else - render_prerel 1 "$prev_prefix" # append starting number - fi - return - fi - - # case three: set, bump, or append using prototype prefix - if [ "$prev_prefix" != "$proto" ] - then - render_prerel 1 "$proto" # proto not same pre-release; set and start at '1' - elif [ -n "$prev_numeric" ] - then - : $(( ++prev_numeric )) # pre-release is numbered; bump it - render_prerel "$prev_numeric" "$prev_prefix" - else - render_prerel 1 "$prev_prefix" # start pre-release at number '1' - fi -} - -function command_bump { - local new; local version; local sub_version; local command; - - command="$(normalize_part "$1")" - - case $# in - 2) case "$command" in - major|minor|patch|prerel|release) sub_version="+."; version=$2;; - *) usage_help;; - esac ;; - 3) case "$command" in - prerel|build) sub_version=$2 version=$3 ;; - *) usage_help;; - esac ;; - *) usage_help;; - esac - - validate_version "$version" parts - # shellcheck disable=SC2154 - local major="${parts[0]}" - local minor="${parts[1]}" - local patch="${parts[2]}" - local prere="${parts[3]}" - local build="${parts[4]}" - - case "$command" in - major) new="$((major + 1)).0.0";; - minor) new="${major}.$((minor + 1)).0";; - patch) new="${major}.${minor}.$((patch + 1))";; - release) new="${major}.${minor}.${patch}";; - prerel) new=$(validate_version "${major}.${minor}.${patch}-$(bump_prerel "$sub_version" "$prere")");; - build) new=$(validate_version "${major}.${minor}.${patch}${prere}+${sub_version}");; - *) usage_help ;; - esac - - echo "$new" - exit 0 -} - -function command_compare { - local v; local v_; - - case $# in - 2) v=$(validate_version "$1"); v_=$(validate_version "$2") ;; - *) usage_help ;; - esac - - set +u # need unset array element to evaluate to null - compare_version "$v" "$v_" - exit 0 -} - -function command_diff { - validate_version "$1" v1_parts - # shellcheck disable=SC2154 - local v1_major="${v1_parts[0]}" - local v1_minor="${v1_parts[1]}" - local v1_patch="${v1_parts[2]}" - local v1_prere="${v1_parts[3]}" - local v1_build="${v1_parts[4]}" - - validate_version "$2" v2_parts - # shellcheck disable=SC2154 - local v2_major="${v2_parts[0]}" - local v2_minor="${v2_parts[1]}" - local v2_patch="${v2_parts[2]}" - local v2_prere="${v2_parts[3]}" - local v2_build="${v2_parts[4]}" - - if [ "${v1_major}" != "${v2_major}" ]; then - echo "major" - elif [ "${v1_minor}" != "${v2_minor}" ]; then - echo "minor" - elif [ "${v1_patch}" != "${v2_patch}" ]; then - echo "patch" - elif [ "${v1_prere}" != "${v2_prere}" ]; then - echo "prerelease" - elif [ "${v1_build}" != "${v2_build}" ]; then - echo "build" - fi -} - -# shellcheck disable=SC2034 -function command_get { - local part version - - if [[ "$#" -ne "2" ]] || [[ -z "$1" ]] || [[ -z "$2" ]]; then - usage_help - exit 0 - fi - - part="$1" - version="$2" - - validate_version "$version" parts - local major="${parts[0]}" - local minor="${parts[1]}" - local patch="${parts[2]}" - local prerel="${parts[3]:1}" - local build="${parts[4]:1}" - local release="${major}.${minor}.${patch}" - - part="$(normalize_part "$part")" - - case "$part" in - major|minor|patch|release|prerel|build) echo "${!part}" ;; - *) usage_help ;; - esac - - exit 0 -} - -function command_validate { - if [[ "$#" -ne "1" ]]; then - usage_help - fi - - if [[ "$1" =~ $SEMVER_REGEX ]]; then - echo "valid" - else - echo "invalid" - fi - - exit 0 -} - -case $# in - 0) echo "Unknown command: $*"; usage_help;; -esac - -case $1 in - --help|-h) echo -e "$USAGE"; exit 0;; - --version|-v) usage_version ;; - bump) shift; command_bump "$@";; - get) shift; command_get "$@";; - compare) shift; command_compare "$@";; - diff) shift; command_diff "$@";; - validate) shift; command_validate "$@";; - *) echo "Unknown arguments: $*"; usage_help;; -esac diff --git a/backend/bin/update-deps.sh b/backend/bin/update-deps.sh deleted file mode 100755 index 38d6eab94..000000000 --- a/backend/bin/update-deps.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash - -go get -u github.com/crawlab-team/crawlab/core@main -go mod tidy diff --git a/backend/bin/update-ver.sh b/backend/bin/update-ver.sh deleted file mode 100755 index 6d8e402d2..000000000 --- a/backend/bin/update-ver.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/sh - -# update version type (major, minor, patch, prerelease) -update_version_type="prerelease" -if [ -n "$1" ]; then - update_version_type="$1" -fi - -# current version -current_version=$(grep -oEi 'version: v([0-9\.?]+)' conf/config.yml | sed -E 's/version: v//g') - -# next version -next_version=$(./bin/semver.sh bump $update_version_type $current_version) - -# update next version to conf/config.yml -sed -i '' "s/version: v$current_version/version: v$next_version/g" conf/config.yml - diff --git a/backend/conf/config.yml b/backend/conf/config.yml old mode 100755 new mode 100644 index 322ade507..a1701de3c --- a/backend/conf/config.yml +++ b/backend/conf/config.yml @@ -1,3 +1,2 @@ -info: - edition: global.edition.community - version: v0.6.3 +edition: global.edition.community +version: v0.7.0 diff --git a/backend/go.mod b/backend/go.mod index d2d7ae5c8..f36f94d71 100644 --- a/backend/go.mod +++ b/backend/go.mod @@ -1,118 +1,88 @@ module crawlab -go 1.22 +go 1.22.9 replace ( github.com/crawlab-team/crawlab/core => ../core - github.com/crawlab-team/crawlab/db => ../db - github.com/crawlab-team/crawlab/fs => ../fs github.com/crawlab-team/crawlab/grpc => ../grpc - github.com/crawlab-team/crawlab/template-parser => ../template-parser github.com/crawlab-team/crawlab/trace => ../trace github.com/crawlab-team/crawlab/vcs => ../vcs ) -require github.com/crawlab-team/crawlab/core v0.0.0-20240614095218-7b4ee8399ab0 +require github.com/crawlab-team/crawlab/core v0.0.0 require ( + cloud.google.com/go/auth v0.7.2 // indirect + cloud.google.com/go/auth/oauth2adapt v0.2.3 // indirect + cloud.google.com/go/compute/metadata v0.5.2 // indirect dario.cat/mergo v1.0.0 // indirect - github.com/cyphar/filepath-securejoin v0.2.4 // indirect - github.com/golang-jwt/jwt/v5 v5.2.1 // indirect - github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe // indirect - github.com/sirupsen/logrus v1.9.0 // indirect -) - -require ( - cloud.google.com/go/compute/metadata v0.3.0 // indirect - github.com/Masterminds/semver v1.4.2 // indirect - github.com/Masterminds/sprig v2.16.0+incompatible // indirect - github.com/Microsoft/go-winio v0.6.1 // indirect + github.com/Microsoft/go-winio v0.6.2 // indirect github.com/ProtonMail/go-crypto v1.0.0 // indirect - github.com/PuerkitoBio/goquery v1.8.0 // indirect + github.com/PuerkitoBio/goquery v1.9.2 // indirect github.com/ReneKroon/ttlcache v1.7.0 // indirect - github.com/andybalholm/cascadia v1.3.1 // indirect - github.com/aokoli/goutils v1.0.1 // indirect + github.com/andybalholm/cascadia v1.3.2 // indirect github.com/apex/log v1.9.0 // indirect - github.com/bytedance/sonic v1.9.1 // indirect - github.com/cenkalti/backoff/v4 v4.1.0 // indirect - github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect + github.com/bytedance/sonic v1.11.6 // indirect + github.com/bytedance/sonic/loader v0.1.1 // indirect + github.com/cenkalti/backoff/v4 v4.3.0 // indirect github.com/cloudflare/circl v1.3.7 // indirect - github.com/crawlab-team/crawlab/db v0.0.0-20240614095218-7b4ee8399ab0 // indirect - github.com/crawlab-team/crawlab/fs v0.0.0-20240614095218-7b4ee8399ab0 // indirect - github.com/crawlab-team/crawlab/grpc v0.0.0-20240614111723-e5b20af9a40b // indirect - github.com/crawlab-team/crawlab/template-parser v0.0.0-20240614095218-7b4ee8399ab0 // indirect - github.com/crawlab-team/crawlab/trace v0.0.0-20240614095218-7b4ee8399ab0 // indirect - github.com/crawlab-team/crawlab/vcs v0.0.0-20240614095218-7b4ee8399ab0 // indirect - github.com/crawlab-team/goseaweedfs v0.6.3 // indirect - github.com/denisenkom/go-mssqldb v0.11.0 // indirect - github.com/elastic/elastic-transport-go/v8 v8.6.0 // indirect - github.com/elastic/go-elasticsearch/v8 v8.14.0 // indirect + github.com/cloudwego/base64x v0.1.4 // indirect + github.com/cloudwego/iasm v0.2.0 // indirect + github.com/common-nighthawk/go-figure v0.0.0-20210622060536-734e95fb86be // indirect + github.com/crawlab-team/crawlab/grpc v0.0.0 // indirect + github.com/crawlab-team/crawlab/trace v0.0.0 // indirect + github.com/crawlab-team/crawlab/vcs v0.0.0 // indirect + github.com/cyphar/filepath-securejoin v0.2.4 // indirect github.com/emirpasic/gods v1.18.1 // indirect + github.com/felixge/httpsnoop v1.0.4 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect - github.com/gabriel-vasile/mimetype v1.4.2 // indirect + github.com/gabriel-vasile/mimetype v1.4.3 // indirect github.com/gin-contrib/sse v0.1.0 // indirect - github.com/gin-gonic/gin v1.9.1 // indirect + github.com/gin-gonic/gin v1.10.0 // indirect github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect github.com/go-git/go-billy/v5 v5.5.0 // indirect github.com/go-git/go-git/v5 v5.12.0 // indirect - github.com/go-logr/logr v1.4.1 // indirect + github.com/go-logr/logr v1.4.2 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/go-ole/go-ole v1.2.6 // indirect github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect - github.com/go-playground/validator/v10 v10.14.0 // indirect - github.com/go-sql-driver/mysql v1.6.0 // indirect + github.com/go-playground/validator/v10 v10.20.0 // indirect github.com/goccy/go-json v0.10.2 // indirect - github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe // indirect + github.com/golang-jwt/jwt/v5 v5.2.1 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect - github.com/golang/protobuf v1.5.4 // indirect github.com/golang/snappy v0.0.4 // indirect + github.com/gomarkdown/markdown v0.0.0-20241105142532-d03b89096d81 // indirect + github.com/google/s2a-go v0.1.8 // indirect github.com/google/uuid v1.6.0 // indirect - github.com/gorilla/css v1.0.0 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect + github.com/googleapis/gax-go/v2 v2.13.0 // indirect + github.com/gorilla/websocket v1.5.3 // indirect github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4 // indirect + github.com/hashicorp/errwrap v1.1.0 // indirect + github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/go-uuid v1.0.3 // indirect github.com/hashicorp/hcl v1.0.0 // indirect - github.com/huandu/xstrings v1.2.0 // indirect - github.com/imdario/mergo v0.3.16 // indirect - github.com/imroc/req v0.3.0 // indirect github.com/inconshreveable/mousetrap v1.0.0 // indirect - github.com/jackc/chunkreader/v2 v2.0.1 // indirect - github.com/jackc/pgconn v1.11.0 // indirect - github.com/jackc/pgio v1.0.0 // indirect - github.com/jackc/pgpassfile v1.0.0 // indirect - github.com/jackc/pgproto3/v2 v2.2.0 // indirect - github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b // indirect - github.com/jackc/pgtype v1.10.0 // indirect - github.com/jackc/pgx/v4 v4.15.0 // indirect - github.com/jaytaylor/html2text v0.0.0-20180606194806-57d518f124b0 // indirect github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/kevinburke/ssh_config v1.2.0 // indirect - github.com/klauspost/compress v1.17.2 // indirect - github.com/klauspost/cpuid/v2 v2.2.5 // indirect - github.com/leodido/go-urn v1.2.4 // indirect - github.com/lib/pq v1.10.4 // indirect + github.com/klauspost/compress v1.17.7 // indirect + github.com/klauspost/cpuid/v2 v2.2.7 // indirect + github.com/leodido/go-urn v1.4.0 // indirect github.com/magiconair/properties v1.8.7 // indirect - github.com/matcornic/hermes/v2 v2.1.0 // indirect - github.com/mattn/go-isatty v0.0.19 // indirect - github.com/mattn/go-runewidth v0.0.3 // indirect - github.com/mattn/go-sqlite3 v1.14.9 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect - github.com/olekukonko/tablewriter v0.0.1 // indirect + github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe // indirect github.com/pelletier/go-toml/v2 v2.2.2 // indirect - github.com/pierrec/lz4/v4 v4.1.18 // indirect github.com/pjbgf/sha1cd v0.3.0 // indirect github.com/pkg/errors v0.9.1 // indirect - github.com/robertkrimen/otto v0.0.0-20210614181706-373ff5438452 // indirect github.com/robfig/cron/v3 v3.0.0 // indirect - github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/sagikazarmark/locafero v0.4.0 // indirect github.com/sagikazarmark/slog-shim v0.1.0 // indirect - github.com/segmentio/fasthash v1.0.3 // indirect - github.com/segmentio/kafka-go v0.4.39 // indirect github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect github.com/shirou/gopsutil v3.21.11+incompatible // indirect github.com/skeema/knownhosts v1.2.2 // indirect @@ -122,46 +92,40 @@ require ( github.com/spf13/cobra v1.3.0 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/spf13/viper v1.19.0 // indirect - github.com/ssor/bom v0.0.0-20170718123548-6386211fdfcf // indirect github.com/subosito/gotenv v1.6.0 // indirect - github.com/thoas/go-funk v0.9.1 // indirect - github.com/tklauser/go-sysconf v0.3.9 // indirect - github.com/tklauser/numcpus v0.3.0 // indirect + github.com/tklauser/go-sysconf v0.3.12 // indirect + github.com/tklauser/numcpus v0.6.1 // indirect github.com/twitchyliquid64/golang-asm v0.15.1 // indirect - github.com/ugorji/go/codec v1.2.11 // indirect - github.com/upper/db/v4 v4.6.0 // indirect - github.com/vanng822/css v0.0.0-20190504095207-a21e860bcd04 // indirect - github.com/vanng822/go-premailer v0.0.0-20191214114701-be27abe028fe // indirect + github.com/ugorji/go/codec v1.2.12 // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect github.com/xdg-go/pbkdf2 v1.0.0 // indirect github.com/xdg-go/scram v1.1.2 // indirect github.com/xdg-go/stringprep v1.0.4 // indirect github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // indirect - github.com/yusufpapurcu/wmi v1.2.2 // indirect + github.com/yusufpapurcu/wmi v1.2.3 // indirect github.com/ztrue/tracerr v0.4.0 // indirect - go.mongodb.org/mongo-driver v1.15.0 // indirect - go.opentelemetry.io/otel v1.24.0 // indirect - go.opentelemetry.io/otel/metric v1.24.0 // indirect - go.opentelemetry.io/otel/trace v1.24.0 // indirect - go.uber.org/atomic v1.9.0 // indirect - go.uber.org/dig v1.10.0 // indirect - go.uber.org/multierr v1.9.0 // indirect - golang.org/x/arch v0.3.0 // indirect - golang.org/x/crypto v0.23.0 // indirect - golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect - golang.org/x/mod v0.17.0 // indirect - golang.org/x/net v0.25.0 // indirect - golang.org/x/sync v0.7.0 // indirect - golang.org/x/sys v0.20.0 // indirect - golang.org/x/text v0.15.0 // indirect - golang.org/x/tools v0.20.0 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117 // indirect - google.golang.org/grpc v1.64.0 // indirect - google.golang.org/protobuf v1.34.2 // indirect + go.mongodb.org/mongo-driver v1.15.1 // indirect + go.opencensus.io v0.24.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0 // indirect + go.opentelemetry.io/otel v1.31.0 // indirect + go.opentelemetry.io/otel/metric v1.31.0 // indirect + go.opentelemetry.io/otel/trace v1.31.0 // indirect + go.uber.org/multierr v1.11.0 // indirect + golang.org/x/arch v0.8.0 // indirect + golang.org/x/crypto v0.31.0 // indirect + golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect + golang.org/x/net v0.33.0 // indirect + golang.org/x/oauth2 v0.23.0 // indirect + golang.org/x/sync v0.10.0 // indirect + golang.org/x/sys v0.28.0 // indirect + golang.org/x/text v0.21.0 // indirect + google.golang.org/api v0.189.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20241118233622-e639e219e697 // indirect + google.golang.org/grpc v1.69.2 // indirect + google.golang.org/protobuf v1.36.1 // indirect gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df // indirect gopkg.in/ini.v1 v1.67.0 // indirect - gopkg.in/sourcemap.v1 v1.0.5 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/backend/go.mod.dev b/backend/go.mod.dev deleted file mode 100644 index 89afabb12..000000000 --- a/backend/go.mod.dev +++ /dev/null @@ -1,20 +0,0 @@ -module crawlab - -go 1.16 - -replace ( - github.com/crawlab-team/crawlab/core => ../../crawlab-core - github.com/crawlab-team/crawlab-vcs => ../../crawlab-vcs - github.com/crawlab-team/crawlab/fs => ../../crawlab-fs - github.com/crawlab-team/crawlab/db => ../../crawlab-db -) - -require ( - github.com/apex/log v1.9.0 - github.com/crawlab-team/crawlab/core v0.6.0-beta.20211230.1200 - github.com/crawlab-team/crawlab/vcs v0.1.1 - github.com/gin-gonic/gin v1.7.1 - github.com/spf13/cobra v1.1.3 - github.com/spf13/viper v1.7.1 - go.uber.org/dig v1.10.0 -) diff --git a/backend/go.mod.local b/backend/go.mod.local deleted file mode 100644 index fd8c268e7..000000000 --- a/backend/go.mod.local +++ /dev/null @@ -1,20 +0,0 @@ -module crawlab - -go 1.16 - -replace ( - github.com/crawlab-team/crawlab/core => /libs/crawlab-team/crawlab-core - github.com/crawlab-team/crawlab-vcs => /libs/crawlab-team/crawlab-vcs - github.com/crawlab-team/crawlab/fs => /libs/crawlab-team/crawlab-fs - github.com/crawlab-team/crawlab/db => /libs/crawlab-team/crawlab-db -) - -require ( - github.com/apex/log v1.9.0 - github.com/crawlab-team/crawlab/core v0.6.0-beta.20211230.1200 - github.com/crawlab-team/crawlab/vcs v0.1.1 - github.com/gin-gonic/gin v1.7.1 - github.com/spf13/cobra v1.1.3 - github.com/spf13/viper v1.7.1 - go.uber.org/dig v1.10.0 -) diff --git a/backend/go.sum b/backend/go.sum index 4407623e3..bbea437ea 100644 --- a/backend/go.sum +++ b/backend/go.sum @@ -27,14 +27,18 @@ cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= cloud.google.com/go v0.98.0/go.mod h1:ua6Ush4NALrHk5QXDWnjvZHN93OuF0HfuEPq9I1X0cM= cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= +cloud.google.com/go/auth v0.7.2 h1:uiha352VrCDMXg+yoBtaD0tUF4Kv9vrtrWPYXwutnDE= +cloud.google.com/go/auth v0.7.2/go.mod h1:VEc4p5NNxycWQTMQEDQF0bd6aTMb6VgYDXEwiJJQAbs= +cloud.google.com/go/auth/oauth2adapt v0.2.3 h1:MlxF+Pd3OmSudg/b1yZ5lJwoXCEaeedAguodky1PcKI= +cloud.google.com/go/auth/oauth2adapt v0.2.3/go.mod h1:tMQXOfZzFuNuUxOypHlQEXgdfX5cuhwU+ffUuXRJE8I= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/compute/metadata v0.3.0 h1:Tz+eQXMEqDIKRsmY3cHTL6FVaynIjX2QxYC4trgAKZc= -cloud.google.com/go/compute/metadata v0.3.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= +cloud.google.com/go/compute/metadata v0.5.2 h1:UxK4uu/Tn+I3p2dYWTfiX4wva7aYlKixAHn3fyqngqo= +cloud.google.com/go/compute/metadata v0.5.2/go.mod h1:C66sj2AluDcIqakBq/M8lw8/ybHgOZqin2obFxa/E5k= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= cloud.google.com/go/firestore v1.6.1/go.mod h1:asNXNOzBdyVQmEU+ggO8UPodTkEVFW5Qx+rwHnAz+EY= @@ -53,41 +57,25 @@ dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= -github.com/Masterminds/semver v1.4.2 h1:WBLTQ37jOCzSLtXNdoo8bNM8876KhNqOKvrlGITgsTc= -github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= -github.com/Masterminds/semver/v3 v3.1.1 h1:hLg3sBzpNErnxhQtUy/mmLR2I9foDujNK030IGemrRc= -github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= -github.com/Masterminds/sprig v2.16.0+incompatible h1:QZbMUPxRQ50EKAq3LFMnxddMu88/EUUG3qmxwtDmPsY= -github.com/Masterminds/sprig v2.16.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= -github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= -github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= +github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= +github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/ProtonMail/go-crypto v1.0.0 h1:LRuvITjQWX+WIfr930YHG2HNfjR1uOfyf5vE0kC2U78= github.com/ProtonMail/go-crypto v1.0.0/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= -github.com/PuerkitoBio/goquery v1.5.0/go.mod h1:qD2PgZ9lccMbQlc7eEOjaeRlFQON7xY8kdmcsrnKqMg= -github.com/PuerkitoBio/goquery v1.8.0 h1:PJTF7AmFCFKk1N6V6jmKfrNH9tV5pNE6lZMkG0gta/U= -github.com/PuerkitoBio/goquery v1.8.0/go.mod h1:ypIiRMtY7COPGk+I/YbZLbxsxn9g5ejnI2HSMtkjZvI= +github.com/PuerkitoBio/goquery v1.9.2 h1:4/wZksC3KgkQw7SQgkKotmKljk0M6V8TUvA8Wb4yPeE= +github.com/PuerkitoBio/goquery v1.9.2/go.mod h1:GHPCaP0ODyyxqcNoFGYlAprUFH81NuRPd0GX3Zu2Mvk= github.com/ReneKroon/ttlcache v1.7.0 h1:8BkjFfrzVFXyrqnMtezAaJ6AHPSsVV10m6w28N/Fgkk= github.com/ReneKroon/ttlcache v1.7.0/go.mod h1:8BGGzdumrIjWxdRx8zpK6L3oGMWvIXdvB2GD1cfvd+I= -github.com/TylerBrock/colorjson v0.0.0-20200706003622-8a50f05110d2 h1:ZBbLwSJqkHBuFDA6DUhhse0IGJ7T5bemHyNILUjvOq4= -github.com/TylerBrock/colorjson v0.0.0-20200706003622-8a50f05110d2/go.mod h1:VSw57q4QFiWDbRnjdX8Cb3Ow0SFncRw+bA/ofY6Q83w= -github.com/ajg/form v1.5.1 h1:t9c7v8JUKu/XxOGBU0yjNpaMloxGEJhUkqFRq0ibGeU= -github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/andybalholm/brotli v1.0.4 h1:V7DdXeJtZscaqfNuAdSRuRFzuiKlHSC/Zh3zl9qY3JY= -github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= -github.com/andybalholm/cascadia v1.0.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y= -github.com/andybalholm/cascadia v1.3.1 h1:nhxRkql1kdYCc8Snf7D5/D3spOX+dBgjA6u8x004T2c= -github.com/andybalholm/cascadia v1.3.1/go.mod h1:R4bJ1UQfqADjvDa4P6HZHLh/3OxWWEqc0Sk8XGwHqvA= +github.com/andybalholm/cascadia v1.3.2 h1:3Xi6Dw5lHF15JtdcmAHD3i1+T8plmv7BQ/nsViSLyss= +github.com/andybalholm/cascadia v1.3.2/go.mod h1:7gtRlve5FxPPgIgX36uWBX58OdBsSS6lUvCFb+h7KvU= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/aokoli/goutils v1.0.1 h1:7fpzNGoJ3VA8qcrm++XEE1QUe0mIwNeLa02Nwq7RDkg= -github.com/aokoli/goutils v1.0.1/go.mod h1:SijmP0QR8LtwsmDs8Yii5Z/S4trXFGFC2oO5g9DP+DQ= github.com/apex/log v1.9.0 h1:FHtw/xuaM8AgmvDDTI9fiwoAL25Sq2cxojnZICUU8l0= github.com/apex/log v1.9.0/go.mod h1:m82fZlWIuiWzWP04XCTXmnX0xRkYYbCdYn8jbJeLBEA= github.com/apex/logs v1.0.0/go.mod h1:XzxuLZ5myVHDy9SAmYpamKKRNApGj54PfYLcFrXqDwo= @@ -107,19 +95,17 @@ github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+Ce github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= -github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM= -github.com/bytedance/sonic v1.9.1 h1:6iJ6NqdoxCDr6mbY8h18oSO+cShGSMRGCEo7F2h0x8s= -github.com/bytedance/sonic v1.9.1/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U= -github.com/cenkalti/backoff/v4 v4.1.0 h1:c8LkOFQTzuO0WBM/ae5HdGQuZPfPxp7lqBRwQRm4fSc= -github.com/cenkalti/backoff/v4 v4.1.0/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/bytedance/sonic v1.11.6 h1:oUp34TzMlL+OY1OUWxHqsdkgC/Zfc85zGqw9siXjrc0= +github.com/bytedance/sonic v1.11.6/go.mod h1:LysEHSvpvDySVdC2f87zGWf6CIKJcAvqab1ZaiQtds4= +github.com/bytedance/sonic/loader v0.1.1 h1:c+e5Pt1k/cy5wMveRDyk2X4B9hF4g7an8N3zCYjJFNM= +github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= +github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= +github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY= -github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams= -github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= @@ -129,6 +115,10 @@ github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDk github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= github.com/cloudflare/circl v1.3.7 h1:qlCDlTPz2n9fu58M0Nh1J/JzcFpfgkFHHX3O35r5vcU= github.com/cloudflare/circl v1.3.7/go.mod h1:sRTcRWXGLrKw6yIGJ+l7amYJFfAXbZG0kBSc8r4zxgA= +github.com/cloudwego/base64x v0.1.4 h1:jwCgWpFanWmN8xoIUHa2rtzmkd5J2plF/dnLS6Xd/0Y= +github.com/cloudwego/base64x v0.1.4/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w= +github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg= +github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= @@ -139,26 +129,17 @@ github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211130200136-a8f946100490/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cockroachdb/apd v1.1.0 h1:3LFP3629v+1aKXU5Q37mxmRxX/pIu1nijXydLShEq5I= -github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= +github.com/common-nighthawk/go-figure v0.0.0-20210622060536-734e95fb86be h1:J5BL2kskAlV9ckgEsNQXscjIaLiOYiZ75d4e94E6dcQ= +github.com/common-nighthawk/go-figure v0.0.0-20210622060536-734e95fb86be/go.mod h1:mk5IQ+Y0ZeO87b858TlA645sVcEcbiX6YqP98kt+7+w= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/crawlab-team/goseaweedfs v0.6.3 h1:f96H2QCLrZpof9na1mhIKouKrv8p32XRUyouSVm4YHU= -github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg= github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/denisenkom/go-mssqldb v0.11.0 h1:9rHa233rhdOyrz2GcP9NM+gi2psgJZ4GWDpL/7ND8HI= -github.com/denisenkom/go-mssqldb v0.11.0/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= -github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= -github.com/elastic/elastic-transport-go/v8 v8.6.0 h1:Y2S/FBjx1LlCv5m6pWAF2kDJAHoSjSRSJCApolgfthA= -github.com/elastic/go-elasticsearch/v8 v8.14.0 h1:1ywU8WFReLLcxE1WJqii3hTtbPUE2hc38ZK/j4mMFow= github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a h1:mATvB/9r/3gvcejNsXKSkQ6lcIaNec2nyfOdlTBR2lU= github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a/go.mod h1:Ro8st/ElPeALwNFlcTpWmkr6IoMFfkjXAvTHpevnDsM= github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= @@ -177,25 +158,21 @@ github.com/envoyproxy/protoc-gen-validate v0.6.2/go.mod h1:2t7qjJNvHPx8IjnBOzl9E github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= -github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= -github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw= -github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo= -github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= +github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= +github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= -github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU= -github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA= -github.com/gavv/httpexpect/v2 v2.16.0 h1:Ty2favARiTYTOkCRZGX7ojXXjGyNAIohM1lZ3vqaEwI= -github.com/gavv/httpexpect/v2 v2.16.0/go.mod h1:uJLaO+hQ25ukBJtQi750PsztObHybNllN+t+MbbW8PY= +github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0= +github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= -github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg= -github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU= +github.com/gin-gonic/gin v1.10.0 h1:nTuyha1TYqgedzytsKYqna+DfLos46nTv2ygFy86HFU= +github.com/gin-gonic/gin v1.10.0/go.mod h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y= github.com/gliderlabs/ssh v0.3.7 h1:iV3Bqi942d9huXnzEF2Mt+CY9gLu8DNM4Obd+8bODRE= github.com/gliderlabs/ssh v0.3.7/go.mod h1:zpHEXBstFnQYtGnB8k8kQLol82umzn/2/snG7alWVD8= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= @@ -209,15 +186,15 @@ github.com/go-git/go-git/v5 v5.12.0/go.mod h1:FTM9VKtnI2m65hNI/TenDDDnUf2Q9FHnXY github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gomail/gomail v0.0.0-20160411212932-81ebce5c23df/go.mod h1:GJr+FCSXshIwgHBtLglIg9M2l2kQSi6QjVAngtzI08Y= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= -github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= +github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= @@ -226,24 +203,16 @@ github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/o github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= -github.com/go-playground/validator/v10 v10.14.0 h1:vgvQWe3XCz3gIeFDm/HnTIbj6UGmg/+t63MyGU2n5js= -github.com/go-playground/validator/v10 v10.14.0/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU= -github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE= -github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= +github.com/go-playground/validator/v10 v10.20.0 h1:K9ISHbSaI0lyB2eWMPJo+kOS/FBExVwjEviJTixqxL8= +github.com/go-playground/validator/v10 v10.20.0/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= -github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/gofrs/uuid v4.0.0+incompatible h1:1SD/1F5pU8p29ybwgQSwpQk+mwdRrXCYuPhW6m+TnJw= -github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk= github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= -github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe h1:lXe2qZdvpiX5WZkZR4hgp4KJVfY3nMkvmwbVkpv1rVY= -github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -281,6 +250,8 @@ github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6 github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/gomarkdown/markdown v0.0.0-20241105142532-d03b89096d81 h1:5lyLWsV+qCkoYqsKUDuycESh9DEIPVKN6iCFeL7ag50= +github.com/gomarkdown/markdown v0.0.0-20241105142532-d03b89096d81/go.mod h1:JDGcbDT52eL4fju3sZ4TeHGsQwhG9nbDV21aMyhwPoA= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= @@ -297,8 +268,6 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= -github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= @@ -319,27 +288,30 @@ github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/s2a-go v0.1.8 h1:zZDs9gcbt9ZPLV0ndSyQk6Kacx2g/X+SKYovpnz3SMM= +github.com/google/s2a-go v0.1.8/go.mod h1:6iNWHTpQ+nfNRN5E00MSdfDwVesa8hhS32PhPO8deJA= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs= +github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gorilla/css v1.0.0 h1:BQqNyPTi50JCFMTw/b67hByjMVXZRwGha6wxVGkeihY= -github.com/gorilla/css v1.0.0/go.mod h1:Dn721qIggHpt4+EFCcTLTU/vk5ySda2ReITrtgBl60c= -github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= -github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/googleapis/gax-go/v2 v2.13.0 h1:yitjD5f7jQHhyDsnhKEBU52NdvvdSeGzlAnDPT0hH1s= +github.com/googleapis/gax-go/v2 v2.13.0/go.mod h1:Z/fvTZXF8/uw7Xu5GuslPw+bplx6SS338j1Is2S+B7A= +github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= +github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4 h1:z53tR0945TRRQO/fLEVPI6SMv7ZflF0TEaTAoU7tOzg= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/hashicorp/consul/api v1.11.0/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= +github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= @@ -350,6 +322,8 @@ github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjh github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= +github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= +github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= @@ -371,71 +345,11 @@ github.com/hashicorp/memberlist v0.3.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOn github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk= github.com/hashicorp/serf v0.9.6/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/huandu/xstrings v1.2.0 h1:yPeWdRnmynF7p+lLYz0H2tthW9lqhMJrQV/U7yy4wX0= -github.com/huandu/xstrings v1.2.0/go.mod h1:DvyZB1rfVYsBIigL8HwpZgxHwXozlTgGqn63UyNX5k4= github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4= -github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= -github.com/imkira/go-interpol v1.1.0 h1:KIiKr0VSG2CUW1hl1jpiyuzuJeKUUpC8iM1AIE7N1Vk= -github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA= -github.com/imroc/req v0.3.0 h1:3EioagmlSG+z+KySToa+Ylo3pTFZs+jh3Brl7ngU12U= -github.com/imroc/req v0.3.0/go.mod h1:F+NZ+2EFSo6EFXdeIbpfE9hcC233id70kf0byW97Caw= github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/ipfs/go-detect-race v0.0.1 h1:qX/xay2W3E4Q1U7d9lNs1sU9nvguX0a7319XbyQ6cOk= -github.com/ipfs/go-detect-race v0.0.1/go.mod h1:8BNT7shDZPo99Q74BpGMK+4D8Mn4j46UU0LZ723meps= -github.com/jackc/chunkreader v1.0.0/go.mod h1:RT6O25fNZIuasFJRyZ4R/Y2BbhasbmZXF9QQ7T3kePo= -github.com/jackc/chunkreader/v2 v2.0.0/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= -github.com/jackc/chunkreader/v2 v2.0.1 h1:i+RDz65UE+mmpjTfyz0MoVTnzeYxroil2G82ki7MGG8= -github.com/jackc/chunkreader/v2 v2.0.1/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= -github.com/jackc/pgconn v0.0.0-20190420214824-7e0022ef6ba3/go.mod h1:jkELnwuX+w9qN5YIfX0fl88Ehu4XC3keFuOJJk9pcnA= -github.com/jackc/pgconn v0.0.0-20190824142844-760dd75542eb/go.mod h1:lLjNuW/+OfW9/pnVKPazfWOgNfH2aPem8YQ7ilXGvJE= -github.com/jackc/pgconn v0.0.0-20190831204454-2fabfa3c18b7/go.mod h1:ZJKsE/KZfsUgOEh9hBm+xYTstcNHg7UPMVJqRfQxq4s= -github.com/jackc/pgconn v1.8.0/go.mod h1:1C2Pb36bGIP9QHGBYCjnyhqu7Rv3sGshaQUvmfGIB/o= -github.com/jackc/pgconn v1.9.0/go.mod h1:YctiPyvzfU11JFxoXokUOOKQXQmDMoJL9vJzHH8/2JY= -github.com/jackc/pgconn v1.9.1-0.20210724152538-d89c8390a530/go.mod h1:4z2w8XhRbP1hYxkpTuBjTS3ne3J48K83+u0zoyvg2pI= -github.com/jackc/pgconn v1.11.0 h1:HiHArx4yFbwl91X3qqIHtUFoiIfLNJXCQRsnzkiwwaQ= -github.com/jackc/pgconn v1.11.0/go.mod h1:4z2w8XhRbP1hYxkpTuBjTS3ne3J48K83+u0zoyvg2pI= -github.com/jackc/pgio v1.0.0 h1:g12B9UwVnzGhueNavwioyEEpAmqMe1E/BN9ES+8ovkE= -github.com/jackc/pgio v1.0.0/go.mod h1:oP+2QK2wFfUWgr+gxjoBH9KGBb31Eio69xUb0w5bYf8= -github.com/jackc/pgmock v0.0.0-20190831213851-13a1b77aafa2/go.mod h1:fGZlG77KXmcq05nJLRkk0+p82V8B8Dw8KN2/V9c/OAE= -github.com/jackc/pgmock v0.0.0-20201204152224-4fe30f7445fd/go.mod h1:hrBW0Enj2AZTNpt/7Y5rr2xe/9Mn757Wtb2xeBzPv2c= -github.com/jackc/pgmock v0.0.0-20210724152146-4ad1a8207f65 h1:DadwsjnMwFjfWc9y5Wi/+Zz7xoE5ALHsRQlOctkOiHc= -github.com/jackc/pgmock v0.0.0-20210724152146-4ad1a8207f65/go.mod h1:5R2h2EEX+qri8jOWMbJCtaPWkrrNc7OHwsp2TCqp7ak= -github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= -github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= -github.com/jackc/pgproto3 v1.1.0/go.mod h1:eR5FA3leWg7p9aeAqi37XOTgTIbkABlvcPB3E5rlc78= -github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190420180111-c116219b62db/go.mod h1:bhq50y+xrl9n5mRYyCBFKkpRVTLYJVWeCc+mEAI3yXA= -github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190609003834-432c2951c711/go.mod h1:uH0AWtUmuShn0bcesswc4aBTWGvw0cAxIJp+6OB//Wg= -github.com/jackc/pgproto3/v2 v2.0.0-rc3/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM= -github.com/jackc/pgproto3/v2 v2.0.0-rc3.0.20190831210041-4c03ce451f29/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM= -github.com/jackc/pgproto3/v2 v2.0.6/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= -github.com/jackc/pgproto3/v2 v2.1.1/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= -github.com/jackc/pgproto3/v2 v2.2.0 h1:r7JypeP2D3onoQTCxWdTpCtJ4D+qpKr0TxvoyMhZ5ns= -github.com/jackc/pgproto3/v2 v2.2.0/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= -github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b h1:C8S2+VttkHFdOOCXJe+YGfa4vHYwlt4Zx+IVXQ97jYg= -github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b/go.mod h1:vsD4gTJCa9TptPL8sPkXrLZ+hDuNrZCnj29CQpr4X1E= -github.com/jackc/pgtype v0.0.0-20190421001408-4ed0de4755e0/go.mod h1:hdSHsc1V01CGwFsrv11mJRHWJ6aifDLfdV3aVjFF0zg= -github.com/jackc/pgtype v0.0.0-20190824184912-ab885b375b90/go.mod h1:KcahbBH1nCMSo2DXpzsoWOAfFkdEtEJpPbVLq8eE+mc= -github.com/jackc/pgtype v0.0.0-20190828014616-a8802b16cc59/go.mod h1:MWlu30kVJrUS8lot6TQqcg7mtthZ9T0EoIBFiJcmcyw= -github.com/jackc/pgtype v1.8.1-0.20210724151600-32e20a603178/go.mod h1:C516IlIV9NKqfsMCXTdChteoXmwgUceqaLfjg2e3NlM= -github.com/jackc/pgtype v1.10.0 h1:ILnBWrRMSXGczYvmkYD6PsYyVFUNLTnIUJHHDLmqk38= -github.com/jackc/pgtype v1.10.0/go.mod h1:LUMuVrfsFfdKGLw+AFFVv6KtHOFMwRgDDzBt76IqCA4= -github.com/jackc/pgx/v4 v4.0.0-20190420224344-cc3461e65d96/go.mod h1:mdxmSJJuR08CZQyj1PVQBHy9XOp5p8/SHH6a0psbY9Y= -github.com/jackc/pgx/v4 v4.0.0-20190421002000-1b8f0016e912/go.mod h1:no/Y67Jkk/9WuGR0JG/JseM9irFbnEPbuWV2EELPNuM= -github.com/jackc/pgx/v4 v4.0.0-pre1.0.20190824185557-6972a5742186/go.mod h1:X+GQnOEnf1dqHGpw7JmHqHc1NxDoalibchSk9/RWuDc= -github.com/jackc/pgx/v4 v4.12.1-0.20210724153913-640aa07df17c/go.mod h1:1QD0+tgSXP7iUjYm9C1NxKhny7lq6ee99u/z+IHFcgs= -github.com/jackc/pgx/v4 v4.15.0 h1:B7dTkXsdILD3MF987WGGCcg+tvLW6bZJdEcqVFeU//w= -github.com/jackc/pgx/v4 v4.15.0/go.mod h1:D/zyOyXiaM1TmVWnOM18p0xdDtdakRBa0RsVGI3U3bw= -github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= -github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= -github.com/jackc/puddle v1.1.3/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= -github.com/jackc/puddle v1.2.1/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= -github.com/jaytaylor/html2text v0.0.0-20180606194806-57d518f124b0 h1:xqgexXAGQgY3HAjNPSaCqn5Aahbo5TKsmhp8VRfr1iQ= -github.com/jaytaylor/html2text v0.0.0-20180606194806-57d518f124b0/go.mod h1:CVKlgaMiht+LXvHG173ujK6JUhZXKb2u/BQtjPDIvyk= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= @@ -447,21 +361,18 @@ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnr github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= -github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= -github.com/klauspost/compress v1.17.2 h1:RlWWUY/Dr4fL8qk9YG7DTZ7PDgME2V4csBXA8L/ixi4= -github.com/klauspost/compress v1.17.2/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/klauspost/compress v1.17.7 h1:ehO88t2UGzQK66LMdE8tibEd1ErmzZjNEqWkjLAKQQg= +github.com/klauspost/compress v1.17.7/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/cpuid/v2 v2.2.5 h1:0E5MSMDEoAulmXNFquVs//DdoomxaoTY1kUhbc/qbZg= -github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= +github.com/klauspost/cpuid/v2 v2.2.7 h1:ZWSB3igEs+d0qvnxR/ZBzXVmxkgt8DdzP6m9pfuVLDM= +github.com/klauspost/cpuid/v2 v2.2.7/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= +github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= @@ -469,24 +380,15 @@ github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfn github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/leodido/go-urn v1.2.4 h1:XlAE/cm/ms7TE/VMVoduSpNBoyc2dOxHs5MZSwAN63Q= -github.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4= -github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.1.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.10.2/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/lib/pq v1.10.4 h1:SO9z7FRPzA03QhHKJrH5BXA6HU1rS4V2nIVrrNC1iYk= -github.com/lib/pq v1.10.4/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= +github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= github.com/lyft/protoc-gen-star v0.5.3/go.mod h1:V0xaHgaf5oCCqmcxYcWiDfTiKsZsRc87/1qhoTACD8w= github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= -github.com/matcornic/hermes/v2 v2.1.0 h1:9TDYFBPFv6mcXanaDmRDEp/RTWj0dTTi+LpFnnnfNWc= -github.com/matcornic/hermes/v2 v2.1.0/go.mod h1:2+ziJeoyRfaLiATIL8VZ7f9hpzH4oDHqTmn0bhrsgVI= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= @@ -494,22 +396,15 @@ github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVc github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= -github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= -github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= -github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= -github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/mattn/go-runewidth v0.0.3 h1:a+kO+98RDGEfo6asOGMmpodZq4FNtnGP54yps8BzLR4= -github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-sqlite3 v1.14.9 h1:10HX2Td0ocZpYEjhilsuo6WWtUqttj2Kb0KtD86/KYA= -github.com/mattn/go-sqlite3 v1.14.9/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= @@ -519,9 +414,6 @@ github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXx github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0= -github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0= -github.com/mitchellh/hashstructure/v2 v2.0.2/go.mod h1:MG3aRVU/N29oo/V/IhBX8GR/zz4kQkprJgF2EVszyDE= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= @@ -537,20 +429,15 @@ github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjY github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe h1:iruDEfMl2E6fbMZ9s0scYfZQ84/6SPL6zC8ACM2oIL0= github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/olekukonko/tablewriter v0.0.1 h1:b3iUnf1v+ppJiOfNX4yxxqfWKMQPZR5yoh8urCTFX88= -github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI= -github.com/onsi/gomega v1.27.10/go.mod h1:RsS8tutOdbdgzbPtzzATp12yT7kM5I5aElG3evPbQ0M= +github.com/onsi/gomega v1.30.0 h1:hvMK7xYz4D3HapigLTeGdId/NcfQx1VHMJc60ew99+8= +github.com/onsi/gomega v1.30.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM= github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs= -github.com/pierrec/lz4/v4 v4.1.15/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= -github.com/pierrec/lz4/v4 v4.1.18 h1:xaKrnTkyoqfh1YItXl56+6KJNVYWlEEPuAQW9xsplYQ= -github.com/pierrec/lz4/v4 v4.1.18/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4= github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -575,10 +462,6 @@ github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8b github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= -github.com/remyoudompheng/bigfft v0.0.0-20190728182440-6a916e37a237/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= -github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= -github.com/robertkrimen/otto v0.0.0-20210614181706-373ff5438452 h1:ewTtJ72GFy2e0e8uyiDwMG3pKCS5mBh+hdSTYsPKEP8= -github.com/robertkrimen/otto v0.0.0-20210614181706-373ff5438452/go.mod h1:xvqspoSXJTIpemEonrMDFq6XzwHYYgToXWj5eRX1OtY= github.com/robfig/cron/v3 v3.0.0 h1:kQ6Cb7aHOHTSzNVNEhmp8EcWKLb4CbiMW9h9VyIhO4E= github.com/robfig/cron/v3 v3.0.0/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= github.com/rogpeppe/fastuuid v1.1.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= @@ -586,11 +469,6 @@ github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6L github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= -github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= -github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU= -github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThCjNc= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/sagikazarmark/crypt v0.3.0/go.mod h1:uD/D+6UF4SrIR1uGEv7bBNkNqLGqUr43MRiaGWX1Nig= @@ -598,37 +476,19 @@ github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6ke github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4= github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= -github.com/sanity-io/litter v1.5.5 h1:iE+sBxPBzoK6uaEP5Lt3fHNgpKcHXc/A2HGETy0uJQo= -github.com/sanity-io/litter v1.5.5/go.mod h1:9gzJgR2i4ZpjZHsKvUXIRQVk7P+yM3e+jAF7bU2UI5U= -github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/segmentio/fasthash v1.0.3 h1:EI9+KE1EwvMLBWwjpRDc+fEM+prwxDYbslddQGtrmhM= -github.com/segmentio/fasthash v1.0.3/go.mod h1:waKX8l2N8yckOgmSsXJi7x1ZfdKZ4x7KRMzBtS3oedY= -github.com/segmentio/kafka-go v0.4.39 h1:75smaomhvkYRwtuOwqLsdhgCG30B82NsbdkdDfFbvrw= -github.com/segmentio/kafka-go v0.4.39/go.mod h1:T0MLgygYvmqmBvC+s8aCcbVNfJN4znVne5j0Pzowp/Q= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8= github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI= github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= -github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= -github.com/shopspring/decimal v1.2.0 h1:abSATXmQEYyShuxI4/vyW3tV1MrKAJzCZ/0zLUXYbsQ= -github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= -github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/skeema/knownhosts v1.2.2 h1:Iug2P4fLmDw9f41PB6thxUkNUkJzB5i+1/exaj40L3A= github.com/skeema/knownhosts v1.2.2/go.mod h1:xYbVRSPxqBZFrdmDyMmsOs+uX1UZC3nTN3ThzgDxUwo= -github.com/smartystreets/assertions v1.0.0 h1:UVQPSSmc3qtTi+zPPkCXvZX9VvW/xT/NsRvKfwY81a8= github.com/smartystreets/assertions v1.0.0/go.mod h1:kHHU4qYBaI3q23Pp3VPrmWhuIUrLW/7eUrw0BU5VaoM= github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9/go.mod h1:SnhjPscd9TpLiy1LpzGSKh3bXCfxxXuqd9xmQJy3slM= -github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= -github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/smartystreets/gunit v1.0.0/go.mod h1:qwPWnhz6pn0NnRBP++URONOVyNkPyr4SauJk4cUOwJs= github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= @@ -648,14 +508,10 @@ github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An github.com/spf13/viper v1.10.0/go.mod h1:SoyBPwAtKDzypXNDFKN5kzH7ppppbGZtls1UpIy5AsM= github.com/spf13/viper v1.19.0 h1:RWq5SEjt8o25SROyN3z2OrDB9l7RPd3lwTWU8EcEdcI= github.com/spf13/viper v1.19.0/go.mod h1:GQUN9bilAbhU/jgc1bKs99f/suXKeUMct8Adx5+Ntkg= -github.com/ssor/bom v0.0.0-20170718123548-6386211fdfcf h1:pvbZ0lM0XWPBqUKqFU8cmavspvIl9nulOYwdy6IFRRo= -github.com/ssor/bom v0.0.0-20170718123548-6386211fdfcf/go.mod h1:RJID2RhlZKId02nZ62WenDCkgHFerpIOmW0iT7GKmXM= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= @@ -666,15 +522,12 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= -github.com/thoas/go-funk v0.9.1 h1:O549iLZqPpTUQ10ykd26sZhzD+rmR5pWhuElrhbC20M= -github.com/thoas/go-funk v0.9.1/go.mod h1:+IWnUfUmFO1+WVYQWQtIJHeRRdaIyyYglZN7xzUPe4Q= github.com/tj/assert v0.0.0-20171129193455-018094318fb0/go.mod h1:mZ9/Rh9oLWpLLDRpvE+3b7gP/C2YyLFYxNmcLnPTMe0= github.com/tj/assert v0.0.3 h1:Df/BlaZ20mq6kuai7f5z2TvPFiwC3xaWJSDQNiIS3Rk= github.com/tj/assert v0.0.3/go.mod h1:Ne6X72Q+TB1AteidzQncjw9PabbMp4PBMZ1k+vd1Pvk= @@ -682,25 +535,15 @@ github.com/tj/go-buffer v1.1.0/go.mod h1:iyiJpfFcR2B9sXu7KvjbT9fpM4mOelRSDTbntVj github.com/tj/go-elastic v0.0.0-20171221160941-36157cbbebc2/go.mod h1:WjeM0Oo1eNAjXGDx2yma7uG2XoyRZTq1uv3M/o7imD0= github.com/tj/go-kinesis v0.0.0-20171128231115-08b17f58cb1b/go.mod h1:/yhzCV0xPfx6jb1bBgRFjl5lytqVqZXEaeqWP8lTEao= github.com/tj/go-spin v1.1.0/go.mod h1:Mg1mzmePZm4dva8Qz60H2lHwmJ2loum4VIrLgVnKwh4= -github.com/tklauser/go-sysconf v0.3.9 h1:JeUVdAOWhhxVcU6Eqr/ATFHgXk/mmiItdKeJPev3vTo= -github.com/tklauser/go-sysconf v0.3.9/go.mod h1:11DU/5sG7UexIrp/O6g35hrWzu0JxlwQ3LSFUzyeuhs= -github.com/tklauser/numcpus v0.3.0 h1:ILuRUQBtssgnxw0XXIjKUC56fgnOrFoQQ/4+DeU2biQ= -github.com/tklauser/numcpus v0.3.0/go.mod h1:yFGUr7TUHQRAhyqBcEg0Ge34zDBAsIvJJcyE6boqnA8= +github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU= +github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= +github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk= +github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= -github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU= -github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= -github.com/upper/db/v4 v4.6.0 h1:0VmASnqrl/XN8Ehoq++HBgZ4zRD5j3GXygW8FhP0C5I= -github.com/upper/db/v4 v4.6.0/go.mod h1:2mnRcPf+RcCXmVcD+o04LYlyu3UuF7ubamJia7CkN6s= -github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= -github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasthttp v1.34.0 h1:d3AAQJ2DRcxJYHm7OXNXtXt2as1vMDfxeIcFvhmGGm4= -github.com/valyala/fasthttp v1.34.0/go.mod h1:epZA5N+7pY6ZaEKRmstzOuYJx9HI8DI1oaCGZpdH4h0= -github.com/vanng822/css v0.0.0-20190504095207-a21e860bcd04 h1:L0rPdfzq43+NV8rfIx2kA4iSSLRj2jN5ijYHoeXRwvQ= -github.com/vanng822/css v0.0.0-20190504095207-a21e860bcd04/go.mod h1:tcnB1voG49QhCrwq1W0w5hhGasvOg+VQp9i9H1rCM1w= -github.com/vanng822/go-premailer v0.0.0-20191214114701-be27abe028fe h1:9YnI5plmy+ad6BM+JCLJb2ZV7/TNiE5l7SNKfumYKgc= -github.com/vanng822/go-premailer v0.0.0-20191214114701-be27abe028fe/go.mod h1:JTFJA/t820uFDoyPpErFQ3rb3amdZoPtxcKervG0OE4= +github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65EE= +github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= @@ -709,40 +552,23 @@ github.com/xdg-go/scram v1.1.2 h1:FHX5I5B4i4hKRVRBCFRxq1iQRej7WO3hhBuJf+UUySY= github.com/xdg-go/scram v1.1.2/go.mod h1:RT/sEzTbU5y00aCK8UOx6R7YryM0iF1N2MOmC3kKLN4= github.com/xdg-go/stringprep v1.0.4 h1:XLI/Ng3O1Atzq0oBs3TWm+5ZVgkq2aqdlvP9JtoZ6c8= github.com/xdg-go/stringprep v1.0.4/go.mod h1:mPGuuIYwz7CmR2bT9j4GbQqutWS1zV24gijq1dTyGkM= -github.com/xdg/scram v1.0.5 h1:TuS0RFmt5Is5qm9Tm2SoD89OPqe4IRiFtyFY4iwWXsw= -github.com/xdg/scram v1.0.5/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= -github.com/xdg/stringprep v1.0.3 h1:cmL5Enob4W83ti/ZHuZLuKD/xqJfus4fVPwE+/BDm+4= -github.com/xdg/stringprep v1.0.3/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= -github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo= -github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= -github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= -github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= -github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= -github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= -github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0 h1:6fRhSjgLCkTD3JnJxvaJ4Sj+TYblw757bqYgZaOq5ZY= -github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0/go.mod h1:/LWChgwKmvncFJFHJ7Gvn9wZArjbV5/FppcK2fKk/tI= github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d h1:splanxYIlg+5LfHAM6xpdFEAYOk8iySO56hMFq6uLyA= github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= -github.com/yudai/gojsondiff v1.0.0 h1:27cbfqXLVEJ1o8I6v3y9lg8Ydm53EKqHXAOMxEGlCOA= -github.com/yudai/gojsondiff v1.0.0/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg= -github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82 h1:BHyfKlQyqbsFN5p3IfnEUduWvb9is428/nNb5L3U01M= -github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg= -github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= -github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= +github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw= +github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= github.com/ztrue/tracerr v0.4.0 h1:vT5PFxwIGs7rCg9ZgJ/y0NmOpJkPCPFK8x0vVIYzd04= github.com/ztrue/tracerr v0.4.0/go.mod h1:PaFfYlas0DfmXNpo7Eay4MFhZUONqvXM+T2HyGPpngk= go.etcd.io/etcd/api/v3 v3.5.1/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= go.etcd.io/etcd/client/pkg/v3 v3.5.1/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= go.etcd.io/etcd/client/v2 v2.305.1/go.mod h1:pMEacxZW7o8pg4CrFE7pquyCJJzZvkvdD2RibOCCCGs= -go.mongodb.org/mongo-driver v1.15.0 h1:rJCKC8eEliewXjZGf0ddURtl7tTVy1TK3bfl0gkUSLc= -go.mongodb.org/mongo-driver v1.15.0/go.mod h1:Vzb0Mk/pa7e6cWw85R4F/endUC3u0U9jGcNU603k65c= +go.mongodb.org/mongo-driver v1.15.1 h1:l+RvoUOoMXFmADTLfYDm7On9dRm7p4T80/lEQM+r7HU= +go.mongodb.org/mongo-driver v1.15.1/go.mod h1:Vzb0Mk/pa7e6cWw85R4F/endUC3u0U9jGcNU603k65c= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -750,43 +576,35 @@ go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= -go.opentelemetry.io/otel v1.24.0 h1:0LAOdjNmQeSTzGBzduGe/rU4tZhMwL5rWgtp9Ku5Jfo= -go.opentelemetry.io/otel/metric v1.24.0 h1:6EhoGWWK28x1fbpA4tYTOWBkPefTDQnb8WSGXlc88kI= -go.opentelemetry.io/otel/sdk v1.21.0 h1:FTt8qirL1EysG6sTQRZ5TokkU8d0ugCj8htOgThZXQ8= -go.opentelemetry.io/otel/trace v1.24.0 h1:CsKnnL4dUAr/0llH9FKuc698G04IrpWV0MQA/Y1YELI= +go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= +go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0 h1:4K4tsIXefpVJtvA/8srF4V4y0akAoPHkIslgAkjixJA= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0/go.mod h1:jjdQuTGVsXV4vSs+CJ2qYDeDPf9yIJV23qlIzBm73Vg= +go.opentelemetry.io/otel v1.31.0 h1:NsJcKPIW0D0H3NgzPDHmo0WW6SptzPdqg/L1zsIm2hY= +go.opentelemetry.io/otel v1.31.0/go.mod h1:O0C14Yl9FgkjqcCZAsE053C13OaddMYr/hz6clDkEJE= +go.opentelemetry.io/otel/metric v1.31.0 h1:FSErL0ATQAmYHUIzSezZibnyVlft1ybhy4ozRPcF2fE= +go.opentelemetry.io/otel/metric v1.31.0/go.mod h1:C3dEloVbLuYoX41KpmAhOqNriGbA+qqH6PQ5E5mUfnY= +go.opentelemetry.io/otel/sdk v1.31.0 h1:xLY3abVHYZ5HSfOg3l2E5LUj2Cwva5Y7yGxnSW9H5Gk= +go.opentelemetry.io/otel/sdk v1.31.0/go.mod h1:TfRbMdhvxIIr/B2N2LQW2S5v9m3gOQ/08KsbbO5BPT0= +go.opentelemetry.io/otel/sdk/metric v1.31.0 h1:i9hxxLJF/9kkvfHppyLL55aW7iIJz4JjxTeYusH7zMc= +go.opentelemetry.io/otel/sdk/metric v1.31.0/go.mod h1:CRInTMVvNhUKgSAMbKyTMxqOBC0zgyxzW55lZzX43Y8= +go.opentelemetry.io/otel/trace v1.31.0 h1:ffjsj1aRouKewfr85U2aGagJ46+MvodynlQ1HYdmJys= +go.opentelemetry.io/otel/trace v1.31.0/go.mod h1:TXZkRk7SM2ZQLtR6eoAWQFIHPvzQ06FJAsO1tJg480A= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= -go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/dig v1.10.0 h1:yLmDDj9/zuDjv3gz8GQGviXMs9TfysIUMUilCpgzUJY= -go.uber.org/dig v1.10.0/go.mod h1:X34SnWGr8Fyla9zQNO2GSO2D+TIuqB14OS8JhYocIyw= go.uber.org/goleak v0.10.0/go.mod h1:VCZuO8V8mFPlL0F5J5GK1rtHV3DrFcQ1R8ryq7FK0aI= -go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI= -go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= -go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= +go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= +go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= -go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= -go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= -go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= +go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= +go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= -golang.org/x/arch v0.3.0 h1:02VY4/ZcO/gBOH6PUaoiptASxtXU10jazRCP865E97k= -golang.org/x/arch v0.3.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= +golang.org/x/arch v0.8.0 h1:3wRIsP3pM4yUptoR96otTUOXI367OS0+c9eeRi9doIc= +golang.org/x/arch v0.8.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181029175232-7e6ffbd03851/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190411191339-88737f569e3a/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -794,18 +612,13 @@ golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201203163018-be400aefbc4c/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20220307211146-efcb8507fb70/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI= -golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= -golang.org/x/exp v0.0.0-20181106170214-d68db9428509/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= +golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -816,8 +629,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g= -golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k= +golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8= +golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -831,7 +644,6 @@ golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRu golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 h1:VLliZ0d+/avPrXXH+OakdXhpJuEoBZuwh1m2j7U6Iug= golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= @@ -847,9 +659,6 @@ golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= -golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -866,7 +675,6 @@ golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -893,15 +701,14 @@ golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96b golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210916014120-12bc252f5db8/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220706163947-c90051bbdb60/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= -golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac= -golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= +golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= +golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I= +golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -919,8 +726,8 @@ golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.21.0 h1:tsimM75w1tF/uws5rbeHzIWxEqElMehnc+iW793zsZs= -golang.org/x/oauth2 v0.21.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= +golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs= +golang.org/x/oauth2 v0.23.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -934,8 +741,8 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= -golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= +golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -944,9 +751,7 @@ golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190225065934-cc5685c2db12/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -954,7 +759,6 @@ golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1000,7 +804,6 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210816074244-15123e1e1f71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1008,7 +811,6 @@ golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211205182925-97ca703d548d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1016,16 +818,19 @@ golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y= -golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= +golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= -golang.org/x/term v0.20.0 h1:VnkxpohqXaOBYJtBmEppKUG6mXpi+4O6purfc2+sMhw= -golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= +golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= +golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q= +golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1039,8 +844,9 @@ golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk= -golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1051,20 +857,15 @@ golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3 golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190425163242-31fd60d6bfdc/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190823170909-c4a336ef6a2f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191030062658-86caa796c7ab/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -1072,7 +873,6 @@ golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= @@ -1106,10 +906,6 @@ golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.20.0 h1:hz/CVckiOxybQvFw6h7b/q80NTr9IUQb4s1IIzW7KNY= -golang.org/x/tools v0.20.0/go.mod h1:WvitBU7JJf6A4jOdg4S1tviW9bhUxkgeCui/0JHctQg= -golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1146,6 +942,8 @@ google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdr google.golang.org/api v0.59.0/go.mod h1:sT2boj7M9YJxZzgeZqXogmhfmRWDtPzT31xkieUbuZU= google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= google.golang.org/api v0.62.0/go.mod h1:dKmwPCydfsad4qCH08MSdgWjfHOyfpd4VtDGgRFdavw= +google.golang.org/api v0.189.0 h1:equMo30LypAkdkLMBqfeIqtyAnlyig1JSZArl4XPwdI= +google.golang.org/api v0.189.0/go.mod h1:FLWGJKb0hb+pU2j+rJqwbnsF+ym+fQs73rbJ+KAUgy8= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1216,8 +1014,11 @@ google.golang.org/genproto v0.0.0-20211129164237-f09f9a12af12/go.mod h1:5CzLGKJ6 google.golang.org/genproto v0.0.0-20211203200212-54befc351ae9/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117 h1:1GBuWVLM/KMVUv1t1En5Gs+gFZCNd360GGb4sSxtrhU= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0= +google.golang.org/genproto v0.0.0-20240722135656-d784300faade h1:lKFsS7wpngDgSCeFn7MoLy+wBDQZ1UQIJD4UNM1Qvkg= +google.golang.org/genproto/googleapis/api v0.0.0-20241015192408-796eee8c2d53 h1:fVoAXEKA4+yufmbdVYv+SE73+cPZbbbe8paLsHfkK+U= +google.golang.org/genproto/googleapis/api v0.0.0-20241015192408-796eee8c2d53/go.mod h1:riSXTwQ4+nqmPGtobMFyW5FqVAmIs0St6VPp4Ug7CE4= +google.golang.org/genproto/googleapis/rpc v0.0.0-20241118233622-e639e219e697 h1:LWZqQOEjDyONlF1H6afSWpAL/znlREo2tHfLoe+8LMA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20241118233622-e639e219e697/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -1245,8 +1046,8 @@ google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnD google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= -google.golang.org/grpc v1.64.0 h1:KH3VH9y/MgNQg1dE7b3XfVK0GsPSIzJwdF617gUSbvY= -google.golang.org/grpc v1.64.0/go.mod h1:oxjF8E3FBnjp+/gVFYdWacaLDx9na1aqy9oovLpxQYg= +google.golang.org/grpc v1.69.2 h1:U3S9QEtbXC0bYNvRtcoklF3xGtLViumSYxWykJS+7AU= +google.golang.org/grpc v1.69.2/go.mod h1:vyjdE6jLBI76dgpDojsFGNaHlxdjXN9ghpnd2o7JGZ4= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= @@ -1261,8 +1062,8 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= -google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= +google.golang.org/protobuf v1.36.1 h1:yBPeRvTftaleIgM3PZ/WBIZ7XM/eEYAaEyCwvyjq/gk= +google.golang.org/protobuf v1.36.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc h1:2gGKlE2+asNV9m7xrywl36YYNnBG5ZQ0r/BOOxqPpmk= gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk= @@ -1275,14 +1076,9 @@ gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df h1:n7WqCuqOuCbNr617RXOY0AWRXxgwEyPp2z+p0+hgMuE= gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df/go.mod h1:LRQQ+SO6ZHR7tOkpBDuZnXENFzX8qRjMDMyPD6BRkCw= -gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec/go.mod h1:aPpfJ7XW+gOuirDoZ8gHhLh3kZ1B08FtV2bbmy7Jv3s= gopkg.in/ini.v1 v1.66.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 h1:VpOs+IwYnYBaFnrNAeB8UUWtL3vEUnzSCL1nVjPhqrw= -gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= -gopkg.in/sourcemap.v1 v1.0.5 h1:inv58fC9f9J3TK2Y2R1NPntXEn3/wjWHkonhIUODNTI= -gopkg.in/sourcemap.v1 v1.0.5/go.mod h1:2RlvNNSMglmRrcvhfuzp4hQHwOtjxlbjX7UPY/GXb78= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= @@ -1305,26 +1101,7 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -modernc.org/b v1.0.2/go.mod h1:fVGfCIzkZw5RsuF2A2WHbJmY7FiMIq30nP4s52uWsoY= -modernc.org/db v1.0.3/go.mod h1:L4ltUg8tu2pkSJk+fKaRrXs/3EdW79ZKYQ5PfVDT53U= -modernc.org/file v1.0.3/go.mod h1:CNj/pwOfCtCbqiHcXDUlHBB2vWrzdaDCWdcnjtS1+XY= -modernc.org/fileutil v1.0.0/go.mod h1:JHsWpkrk/CnVV1H/eGlFf85BEpfkrp56ro8nojIq9Q8= -modernc.org/golex v1.0.1/go.mod h1:QCA53QtsT1NdGkaZZkF5ezFwk4IXh4BGNafAARTC254= -modernc.org/internal v1.0.0/go.mod h1:VUD/+JAkhCpvkUitlEOnhpVxCgsBI90oTzSCRcqQVSM= -modernc.org/internal v1.0.2/go.mod h1:bycJAcev709ZU/47nil584PeBD+kbu8nv61ozeMso9E= -modernc.org/lex v1.0.0/go.mod h1:G6rxMTy3cH2iA0iXL/HRRv4Znu8MK4higxph/lE7ypk= -modernc.org/lexer v1.0.0/go.mod h1:F/Dld0YKYdZCLQ7bD0USbWL4YKCyTDRDHiDTOs0q0vk= -modernc.org/lldb v1.0.2/go.mod h1:ovbKqyzA9H/iPwHkAOH0qJbIQVT9rlijecenxDwVUi0= -modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k= -modernc.org/mathutil v1.1.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= -modernc.org/mathutil v1.2.2/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= -modernc.org/mathutil v1.4.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= -modernc.org/ql v1.4.0/go.mod h1:q4c29Bgdx+iAtxx47ODW5Xo2X0PDkjSCK9NdQl6KFxc= -modernc.org/sortutil v1.1.0/go.mod h1:ZyL98OQHJgH9IEfN71VsamvJgrtRX9Dj2gX+vH86L1k= -modernc.org/strutil v1.1.1/go.mod h1:DE+MQQ/hjKBZS2zNInV5hhcipt5rLPWkmpbGeW5mmdw= -modernc.org/zappy v1.0.3/go.mod h1:w/Akq8ipfols/xZJdR5IYiQNOqC80qz2mVvsEwEbkiI= -moul.io/http2curl/v2 v2.3.0 h1:9r3JfDzWPcbIklMOs2TnIFzDYvfAZvjeavG6EzP7jYs= -moul.io/http2curl/v2 v2.3.0/go.mod h1:RW4hyBjTWSYDOxapodpNEtX0g5Eb16sxklBqmd2RHcE= +nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= diff --git a/backend/main.go b/backend/main.go index fe3048328..1d263afe4 100644 --- a/backend/main.go +++ b/backend/main.go @@ -2,8 +2,20 @@ package main import ( "github.com/crawlab-team/crawlab/core/cmd" + "github.com/crawlab-team/crawlab/core/config" + "github.com/crawlab-team/crawlab/core/utils" ) +func init() { + config.InitConfig() +} + func main() { - _ = cmd.Execute() + go func() { + err := cmd.Execute() + if err != nil { + panic(err) + } + }() + utils.DefaultWait() } diff --git a/backend/test/config-master.json b/backend/test/config-master.json deleted file mode 100644 index 411e1a75c..000000000 --- a/backend/test/config-master.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "key": "master", - "is_master": true, - "name": "Master Node", - "ip": "", - "mac": "", - "hostname": "", - "description": "", - "auth_key": "Crawlab2021!" -} \ No newline at end of file diff --git a/backend/test/config-worker-01.json b/backend/test/config-worker-01.json deleted file mode 100644 index 7b43497d2..000000000 --- a/backend/test/config-worker-01.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "key": "worker-01", - "is_master": false, - "name": "Worker Node 01", - "ip": "", - "mac": "", - "hostname": "", - "description": "", - "auth_key": "Crawlab2021!" -} \ No newline at end of file diff --git a/backend/test/config-worker-02.json b/backend/test/config-worker-02.json deleted file mode 100644 index bdd2e527e..000000000 --- a/backend/test/config-worker-02.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "key": "worker-02", - "is_master": false, - "name": "Worker Node 02", - "ip": "", - "mac": "", - "hostname": "", - "description": "", - "auth_key": "Crawlab2021!" -} \ No newline at end of file diff --git a/backend/test/config-worker-03.json b/backend/test/config-worker-03.json deleted file mode 100644 index 70da53f10..000000000 --- a/backend/test/config-worker-03.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "key": "worker-03", - "is_master": false, - "name": "Worker Node 03", - "ip": "", - "mac": "", - "hostname": "", - "description": "", - "auth_key": "Crawlab2021!" -} \ No newline at end of file diff --git a/backend/test/config-worker-invalid-auth-key.json b/backend/test/config-worker-invalid-auth-key.json deleted file mode 100644 index 5c724985c..000000000 --- a/backend/test/config-worker-invalid-auth-key.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "key": "worker-invalid-auth-key", - "is_master": false, - "name": "worker", - "ip": "", - "mac": "", - "hostname": "", - "description": "", - "auth_key": "invalid-auth-key" -} \ No newline at end of file diff --git a/bin/docker-init.sh b/bin/docker-init.sh deleted file mode 100755 index 3f49f8241..000000000 --- a/bin/docker-init.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash - -# replace default api path to new one -python /app/bin/update_docker_js_api_address.py - -crawlab-server server diff --git a/core/apps/api.go b/core/apps/api.go new file mode 100644 index 000000000..4f25e6b67 --- /dev/null +++ b/core/apps/api.go @@ -0,0 +1,119 @@ +package apps + +import ( + "context" + "errors" + "github.com/crawlab-team/crawlab/core/controllers" + "github.com/crawlab-team/crawlab/core/interfaces" + "github.com/crawlab-team/crawlab/core/middlewares" + "github.com/crawlab-team/crawlab/core/utils" + "github.com/gin-gonic/gin" + "net" + "net/http" + "sync" + "time" +) + +func init() { + // set gin mode + gin.SetMode(utils.GetGinMode()) +} + +type Api struct { + // internals + app *gin.Engine + ln net.Listener + srv *http.Server + initialized bool + interfaces.Logger +} + +func (app *Api) Init() { + // skip if already initialized + if app.initialized { + return + } + + // initialize middlewares + _ = app.initModuleWithApp("middlewares", middlewares.InitMiddlewares) + + // initialize routes + _ = app.initModuleWithApp("routes", controllers.InitRoutes) + + // set initialized + app.initialized = true +} + +func (app *Api) Start() { + // address + address := utils.GetServerAddress() + + // http server + app.srv = &http.Server{ + Handler: app.app, + Addr: address, + } + + // listen + var err error + app.ln, err = net.Listen("tcp", address) + if err != nil { + panic(err) + } + app.Infof("api server listening on %s", address) + + // serve + if err := http.Serve(app.ln, app.app); err != nil { + if !errors.Is(err, http.ErrServerClosed) { + app.Errorf("run api server error: %v", err) + } else { + app.Info("api server graceful down") + } + } +} + +func (app *Api) Wait() { + utils.DefaultWait() +} + +func (app *Api) Stop() { + ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) + defer cancel() + + if err := app.srv.Shutdown(ctx); err != nil { + app.Errorf("shutdown api server error: %v", err) + } +} + +func (app *Api) GetGinEngine() *gin.Engine { + return app.app +} + +func (app *Api) GetHttpServer() *http.Server { + return app.srv +} + +func (app *Api) initModuleWithApp(name string, fn func(app *gin.Engine) error) (err error) { + return initModule(name, func() error { + return fn(app.app) + }) +} + +func newApi() *Api { + api := &Api{ + app: gin.New(), + Logger: utils.NewLogger("Api"), + } + api.Init() + return api +} + +var api *Api +var apiOnce sync.Once + +func GetApi() *Api { + apiOnce.Do(func() { + api = newApi() + }) + return api +} diff --git a/core/apps/api_v2.go b/core/apps/api_v2.go deleted file mode 100644 index 966b1a087..000000000 --- a/core/apps/api_v2.go +++ /dev/null @@ -1,122 +0,0 @@ -package apps - -import ( - "context" - "errors" - "github.com/apex/log" - "github.com/crawlab-team/crawlab/core/controllers" - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/middlewares" - "github.com/gin-gonic/gin" - "github.com/spf13/viper" - "net" - "net/http" - "time" -) - -func init() { - // set gin mode - if viper.GetString("gin.mode") == "" { - gin.SetMode(gin.ReleaseMode) - } else { - gin.SetMode(viper.GetString("gin.mode")) - } -} - -type ApiV2 struct { - // dependencies - interfaces.WithConfigPath - - // internals - app *gin.Engine - ln net.Listener - srv *http.Server - ready bool -} - -func (app *ApiV2) Init() { - // initialize middlewares - _ = app.initModuleWithApp("middlewares", middlewares.InitMiddlewares) - - // initialize routes - _ = app.initModuleWithApp("routes", controllers.InitRoutes) -} - -func (app *ApiV2) Start() { - // address - host := viper.GetString("server.host") - port := viper.GetString("server.port") - address := net.JoinHostPort(host, port) - - // http server - app.srv = &http.Server{ - Handler: app.app, - Addr: address, - } - - // listen - var err error - app.ln, err = net.Listen("tcp", address) - if err != nil { - panic(err) - } - app.ready = true - - // serve - if err := http.Serve(app.ln, app.app); err != nil { - if !errors.Is(err, http.ErrServerClosed) { - log.Error("run server error:" + err.Error()) - } else { - log.Info("server graceful down") - } - } -} - -func (app *ApiV2) Wait() { - DefaultWait() -} - -func (app *ApiV2) Stop() { - ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) - defer cancel() - - if err := app.srv.Shutdown(ctx); err != nil { - log.Error("run server error:" + err.Error()) - } -} - -func (app *ApiV2) GetGinEngine() *gin.Engine { - return app.app -} - -func (app *ApiV2) GetHttpServer() *http.Server { - return app.srv -} - -func (app *ApiV2) Ready() (ok bool) { - return app.ready -} - -func (app *ApiV2) initModuleWithApp(name string, fn func(app *gin.Engine) error) (err error) { - return initModule(name, func() error { - return fn(app.app) - }) -} - -func NewApiV2() *ApiV2 { - api := &ApiV2{ - app: gin.New(), - } - api.Init() - return api -} - -var apiV2 *ApiV2 - -func GetApiV2() *ApiV2 { - if apiV2 != nil { - return apiV2 - } - apiV2 = NewApiV2() - return apiV2 -} diff --git a/core/apps/docker.go b/core/apps/docker.go deleted file mode 100644 index 33ad57031..000000000 --- a/core/apps/docker.go +++ /dev/null @@ -1,199 +0,0 @@ -package apps - -import ( - "bufio" - "fmt" - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/sys_exec" - "github.com/crawlab-team/crawlab/core/utils" - "github.com/crawlab-team/crawlab/trace" - "github.com/imroc/req" - "github.com/spf13/viper" - "os" - "os/exec" - "strings" - "time" -) - -type Docker struct { - // parent - parent ServerApp - - // dependencies - interfaces.WithConfigPath - - // seaweedfs log - fsLogFilePath string - fsLogFile *os.File - fsReady bool -} - -func (app *Docker) Init() { - var err error - app.fsLogFile, err = os.OpenFile(app.fsLogFilePath, os.O_WRONLY|os.O_CREATE|os.O_APPEND, os.FileMode(0777)) - if err != nil { - trace.PrintError(err) - } - - // replace paths - if err := app.replacePaths(); err != nil { - panic(err) - } - - // start nginx - go app.startNginx() - - // start seaweedfs - go app.startSeaweedFs() -} - -func (app *Docker) Start() { - // import demo - //if utils.IsDemo() && utils.InitializedDemo() { - // go app.importDemo() - //} -} - -func (app *Docker) Wait() { - DefaultWait() -} - -func (app *Docker) Stop() { -} - -func (app *Docker) GetParent() (parent ServerApp) { - return app.parent -} - -func (app *Docker) SetParent(parent ServerApp) { - app.parent = parent -} - -func (app *Docker) Ready() (ok bool) { - return app.fsReady && - app.parent.GetApi().Ready() -} - -func (app *Docker) replacePaths() (err error) { - // read - indexHtmlPath := "/app/dist/index.html" - indexHtmlBytes, err := os.ReadFile(indexHtmlPath) - if err != nil { - return trace.TraceError(err) - } - indexHtml := string(indexHtmlBytes) - - // replace paths - baseUrl := viper.GetString("base.url") - if baseUrl != "" { - indexHtml = app._replacePath(indexHtml, "js", baseUrl) - indexHtml = app._replacePath(indexHtml, "css", baseUrl) - indexHtml = app._replacePath(indexHtml, " d.svc.GetMany:start") - list, err := d.svc.GetList(nil, &mongo.FindOptions{ - Sort: bson.D{{"_id", -1}}, - }) - if err != nil { - if err == mongo2.ErrNoDocuments { - HandleErrorNotFound(c, err) - } else { - HandleErrorInternalServerError(c, err) - } - return - } - log.Debugf("getAll -> d.svc.GetMany:end. elapsed: %d ms", time.Now().Sub(tic).Milliseconds()) - tic = time.Now() - - // total count - tic = time.Now() - log.Debugf("getAll -> d.svc.Count:start") - total, err := d.svc.Count(nil) - if err != nil { - HandleErrorInternalServerError(c, err) - return - } - log.Debugf("getAll -> d.svc.Count:end. elapsed: %d ms", time.Now().Sub(tic).Milliseconds()) - - // response - HandleSuccessWithListData(c, list, total) -} - -func (d *ListControllerDelegate) getList(c *gin.Context) (l interfaces.List, total int, err error) { - // params - pagination := MustGetPagination(c) - query := MustGetFilterQuery(c) - sort := MustGetSortOption(c) - - // get list - l, err = d.svc.GetList(query, &mongo.FindOptions{ - Sort: sort, - Skip: pagination.Size * (pagination.Page - 1), - Limit: pagination.Size, - }) - if err != nil { - if err.Error() == mongo2.ErrNoDocuments.Error() { - HandleSuccessWithListData(c, nil, 0) - } else { - HandleErrorInternalServerError(c, err) - } - return - } - - // total count - total, err = d.svc.Count(query) - if err != nil { - HandleErrorInternalServerError(c, err) - return - } - - return l, total, nil -} diff --git a/core/controllers/delegate_list_action.go b/core/controllers/delegate_list_action.go deleted file mode 100644 index deacf347e..000000000 --- a/core/controllers/delegate_list_action.go +++ /dev/null @@ -1,17 +0,0 @@ -package controllers - -import ( - "github.com/crawlab-team/crawlab/core/interfaces" -) - -func NewListPostActionControllerDelegate(id ControllerId, svc interfaces.ModelBaseService, actions []Action) (d *ListActionControllerDelegate) { - return &ListActionControllerDelegate{ - NewListControllerDelegate(id, svc), - NewActionControllerDelegate(id, actions), - } -} - -type ListActionControllerDelegate struct { - ListController - ActionController -} diff --git a/core/controllers/environment.go b/core/controllers/environment.go deleted file mode 100644 index 560b02c9d..000000000 --- a/core/controllers/environment.go +++ /dev/null @@ -1,57 +0,0 @@ -package controllers - -import ( - "github.com/crawlab-team/crawlab/core/container" - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/models/service" -) - -var EnvironmentController *environmentController - -var EnvironmentActions []Action - -type environmentController struct { - ListActionControllerDelegate - d ListActionControllerDelegate - ctx *environmentContext -} - -type environmentContext struct { - modelSvc service.ModelService - userSvc interfaces.UserService -} - -func newEnvironmentContext() *environmentContext { - // context - ctx := &environmentContext{} - - // dependency injection - if err := container.GetContainer().Invoke(func( - modelSvc service.ModelService, - userSvc interfaces.UserService, - ) { - ctx.modelSvc = modelSvc - ctx.userSvc = userSvc - }); err != nil { - panic(err) - } - - return ctx -} - -func newEnvironmentController() *environmentController { - modelSvc, err := service.GetService() - if err != nil { - panic(err) - } - - ctr := NewListPostActionControllerDelegate(ControllerIdEnvironment, modelSvc.GetBaseService(interfaces.ModelIdEnvironment), EnvironmentActions) - d := NewListPostActionControllerDelegate(ControllerIdEnvironment, modelSvc.GetBaseService(interfaces.ModelIdEnvironment), EnvironmentActions) - ctx := newEnvironmentContext() - - return &environmentController{ - ListActionControllerDelegate: *ctr, - d: *d, - ctx: ctx, - } -} diff --git a/core/controllers/export_v2.go b/core/controllers/export.go similarity index 100% rename from core/controllers/export_v2.go rename to core/controllers/export.go diff --git a/core/controllers/filter_v2.go b/core/controllers/filter.go similarity index 96% rename from core/controllers/filter_v2.go rename to core/controllers/filter.go index 9455804dd..c7d753d9f 100644 --- a/core/controllers/filter_v2.go +++ b/core/controllers/filter.go @@ -2,7 +2,7 @@ package controllers import ( "github.com/crawlab-team/crawlab/core/entity" - "github.com/crawlab-team/crawlab/db/mongo" + "github.com/crawlab-team/crawlab/core/mongo" "github.com/gin-gonic/gin" "go.mongodb.org/mongo-driver/bson" mongo2 "go.mongodb.org/mongo-driver/mongo" diff --git a/core/controllers/health.go b/core/controllers/health.go new file mode 100644 index 000000000..8e19adb1b --- /dev/null +++ b/core/controllers/health.go @@ -0,0 +1,18 @@ +package controllers + +import ( + "github.com/gin-gonic/gin" + "net/http" +) + +func GetHealthFn(healthFn func() bool) func(c *gin.Context) { + return func(c *gin.Context) { + if healthFn() { + c.Writer.Write([]byte("ok")) + c.AbortWithStatus(http.StatusOK) + return + } + c.Writer.Write([]byte("not ready")) + c.AbortWithStatus(http.StatusServiceUnavailable) + } +} diff --git a/core/controllers/login_v2.go b/core/controllers/login.go similarity index 95% rename from core/controllers/login_v2.go rename to core/controllers/login.go index 2bb08cef1..082ff200b 100644 --- a/core/controllers/login_v2.go +++ b/core/controllers/login.go @@ -16,7 +16,7 @@ func PostLogin(c *gin.Context) { HandleErrorBadRequest(c, err) return } - userSvc, err := user.GetUserServiceV2() + userSvc, err := user.GetUserService() if err != nil { HandleErrorInternalServerError(c, err) return diff --git a/core/controllers/project_v2.go b/core/controllers/project.go similarity index 65% rename from core/controllers/project_v2.go rename to core/controllers/project.go index 34fb6b8dd..0bd21595c 100644 --- a/core/controllers/project_v2.go +++ b/core/controllers/project.go @@ -1,10 +1,10 @@ package controllers import ( - "github.com/crawlab-team/crawlab/core/errors" + "errors" "github.com/crawlab-team/crawlab/core/models/models" "github.com/crawlab-team/crawlab/core/models/service" - "github.com/crawlab-team/crawlab/db/mongo" + "github.com/crawlab-team/crawlab/core/mongo" "github.com/gin-gonic/gin" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" @@ -15,7 +15,7 @@ func GetProjectList(c *gin.Context) { // get all list all := MustGetFilterAll(c) if all { - NewControllerV2[models.ProjectV2]().getAll(c) + NewController[models.Project]().getAll(c) return } @@ -25,7 +25,7 @@ func GetProjectList(c *gin.Context) { sort := MustGetSortOption(c) // get list - projects, err := service.NewModelServiceV2[models.ProjectV2]().GetMany(query, &mongo.FindOptions{ + projects, err := service.NewModelService[models.Project]().GetMany(query, &mongo.FindOptions{ Sort: sort, Skip: pagination.Size * (pagination.Page - 1), Limit: pagination.Size, @@ -37,12 +37,12 @@ func GetProjectList(c *gin.Context) { return } if len(projects) == 0 { - HandleSuccessWithListData(c, []models.ProjectV2{}, 0) + HandleSuccessWithListData(c, []models.Project{}, 0) return } // total count - total, err := service.NewModelServiceV2[models.ProjectV2]().Count(query) + total, err := service.NewModelService[models.Project]().Count(query) if err != nil { HandleErrorInternalServerError(c, err) return @@ -53,15 +53,13 @@ func GetProjectList(c *gin.Context) { // count cache cache := map[primitive.ObjectID]int{} - - // iterate for _, p := range projects { ids = append(ids, p.Id) cache[p.Id] = 0 } // spiders - spiders, err := service.NewModelServiceV2[models.SpiderV2]().GetMany(bson.M{ + spiders, err := service.NewModelService[models.Spider]().GetMany(bson.M{ "project_id": bson.M{ "$in": ids, }, @@ -73,18 +71,16 @@ func GetProjectList(c *gin.Context) { for _, s := range spiders { _, ok := cache[s.ProjectId] if !ok { - HandleErrorInternalServerError(c, errors.ErrorControllerMissingInCache) + HandleErrorInternalServerError(c, errors.New("project id not found")) return } cache[s.ProjectId]++ } // assign - var data []models.ProjectV2 - for _, p := range projects { - p.Spiders = cache[p.Id] - data = append(data, p) + for i, p := range projects { + projects[i].Spiders = cache[p.Id] } - HandleSuccessWithListData(c, data, total) + HandleSuccessWithListData(c, projects, total) } diff --git a/core/controllers/result_v2.go b/core/controllers/result_v2.go deleted file mode 100644 index 9033367ff..000000000 --- a/core/controllers/result_v2.go +++ /dev/null @@ -1,119 +0,0 @@ -package controllers - -import ( - "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/core/models/service" - "github.com/crawlab-team/crawlab/core/result" - "github.com/crawlab-team/crawlab/core/utils" - "github.com/crawlab-team/crawlab/db/generic" - "github.com/gin-gonic/gin" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" - mongo2 "go.mongodb.org/mongo-driver/mongo" -) - -func GetResultList(c *gin.Context) { - // data collection id - dcId, err := primitive.ObjectIDFromHex(c.Param("id")) - if err != nil { - HandleErrorBadRequest(c, err) - return - } - - // data source id - var dsId primitive.ObjectID - dsIdStr := c.Query("data_source_id") - if dsIdStr != "" { - dsId, err = primitive.ObjectIDFromHex(dsIdStr) - if err != nil { - HandleErrorBadRequest(c, err) - return - } - } - - // data collection - dc, err := service.NewModelServiceV2[models.DataCollectionV2]().GetById(dcId) - if err != nil { - HandleErrorInternalServerError(c, err) - return - } - - // data source - ds, err := service.NewModelServiceV2[models.DataSourceV2]().GetById(dsId) - if err != nil { - if err.Error() == mongo2.ErrNoDocuments.Error() { - ds = &models.DataSourceV2{} - } else { - HandleErrorInternalServerError(c, err) - return - } - } - - // spider - sq := bson.M{ - "col_id": dc.Id, - "data_source_id": ds.Id, - } - s, err := service.NewModelServiceV2[models.SpiderV2]().GetOne(sq, nil) - if err != nil { - HandleErrorInternalServerError(c, err) - return - } - - // service - svc, err := result.GetResultService(s.Id) - if err != nil { - HandleErrorInternalServerError(c, err) - return - } - - // params - pagination := MustGetPagination(c) - query := getResultListQuery(c) - - // get results - data, err := svc.List(query, &generic.ListOptions{ - Sort: []generic.ListSort{{"_id", generic.SortDirectionDesc}}, - Skip: pagination.Size * (pagination.Page - 1), - Limit: pagination.Size, - }) - if err != nil { - if err.Error() == mongo2.ErrNoDocuments.Error() { - HandleSuccessWithListData(c, nil, 0) - return - } - HandleErrorInternalServerError(c, err) - return - } - - // validate results - if len(data) == 0 { - HandleSuccessWithListData(c, nil, 0) - return - } - - // total count - total, err := svc.Count(query) - if err != nil { - HandleErrorInternalServerError(c, err) - return - } - - // response - HandleSuccessWithListData(c, data, total) -} - -func getResultListQuery(c *gin.Context) (q generic.ListQuery) { - f, err := GetFilter(c) - if err != nil { - return q - } - for _, cond := range f.Conditions { - q = append(q, generic.ListQueryCondition{ - Key: cond.Key, - Op: cond.Op, - Value: utils.NormalizeObjectId(cond.Value), - }) - } - return q -} diff --git a/core/controllers/router_v2.go b/core/controllers/router.go similarity index 74% rename from core/controllers/router_v2.go rename to core/controllers/router.go index 809a2f79c..78da20d4c 100644 --- a/core/controllers/router_v2.go +++ b/core/controllers/router.go @@ -1,25 +1,33 @@ package controllers import ( + "net/http" + "github.com/crawlab-team/crawlab/core/middlewares" "github.com/crawlab-team/crawlab/core/models/models" "github.com/gin-gonic/gin" - "net/http" ) +// RouterGroups defines the different authentication levels for API routes type RouterGroups struct { - AuthGroup *gin.RouterGroup - AnonymousGroup *gin.RouterGroup + AuthGroup *gin.RouterGroup // Routes requiring full authentication + SyncAuthGroup *gin.RouterGroup // Routes for sync operations with special auth + AnonymousGroup *gin.RouterGroup // Public routes that don't require auth } +// NewRouterGroups initializes the router groups with their respective middleware func NewRouterGroups(app *gin.Engine) (groups *RouterGroups) { return &RouterGroups{ - AuthGroup: app.Group("/", middlewares.AuthorizationMiddlewareV2()), + AuthGroup: app.Group("/", middlewares.AuthorizationMiddleware()), + SyncAuthGroup: app.Group("/", middlewares.SyncAuthorizationMiddleware()), AnonymousGroup: app.Group("/"), } } -func RegisterController[T any](group *gin.RouterGroup, basePath string, ctr *BaseControllerV2[T]) { +// RegisterController registers a generic controller with standard CRUD endpoints +// and any additional custom actions +func RegisterController[T any](group *gin.RouterGroup, basePath string, ctr *BaseController[T]) { + // Track registered paths to avoid duplicates actionPaths := make(map[string]bool) for _, action := range ctr.actions { group.Handle(action.Method, basePath+action.Path, action.HandlerFunc) @@ -36,12 +44,15 @@ func RegisterController[T any](group *gin.RouterGroup, basePath string, ctr *Bas registerBuiltinHandler(group, http.MethodDelete, basePath+"", ctr.DeleteList, actionPaths) } +// RegisterActions registers a list of custom action handlers to a route group func RegisterActions(group *gin.RouterGroup, basePath string, actions []Action) { for _, action := range actions { group.Handle(action.Method, basePath+action.Path, action.HandlerFunc) } } +// registerBuiltinHandler registers a standard handler if it hasn't been overridden +// by a custom action func registerBuiltinHandler(group *gin.RouterGroup, method, path string, handlerFunc gin.HandlerFunc, existingActionPaths map[string]bool) { key := method + " - " + path _, ok := existingActionPaths[key] @@ -51,38 +62,25 @@ func registerBuiltinHandler(group *gin.RouterGroup, method, path string, handler group.Handle(method, path, handlerFunc) } +// InitRoutes configures all API routes for the application func InitRoutes(app *gin.Engine) (err error) { - // routes groups + // Initialize route groups with different auth levels groups := NewRouterGroups(app) - RegisterController(groups.AuthGroup, "/data/collections", NewControllerV2[models.DataCollectionV2]()) - RegisterController(groups.AuthGroup, "/data-sources", NewControllerV2[models.DataSourceV2]([]Action{ - { - Method: http.MethodPost, - Path: "", - HandlerFunc: PostDataSource, - }, - { - Method: http.MethodPut, - Path: "/:id", - HandlerFunc: PutDataSourceById, - }, - { - Method: http.MethodPost, - Path: "/:id/change-password", - HandlerFunc: PostDataSourceChangePassword, - }, - }...)) - RegisterController(groups.AuthGroup, "/environments", NewControllerV2[models.EnvironmentV2]()) - RegisterController(groups.AuthGroup, "/nodes", NewControllerV2[models.NodeV2]()) - RegisterController(groups.AuthGroup, "/projects", NewControllerV2[models.ProjectV2]([]Action{ + // Register resource controllers with their respective endpoints + // Each RegisterController call sets up standard CRUD operations + // Additional custom actions can be specified in the controller initialization + RegisterController(groups.AuthGroup, "/data/collections", NewController[models.DataCollection]()) + RegisterController(groups.AuthGroup, "/environments", NewController[models.Environment]()) + RegisterController(groups.AuthGroup, "/nodes", NewController[models.Node]()) + RegisterController(groups.AuthGroup, "/projects", NewController[models.Project]([]Action{ { Method: http.MethodGet, Path: "", HandlerFunc: GetProjectList, }, }...)) - RegisterController(groups.AuthGroup, "/schedules", NewControllerV2[models.ScheduleV2]([]Action{ + RegisterController(groups.AuthGroup, "/schedules", NewController[models.Schedule]([]Action{ { Method: http.MethodPost, Path: "", @@ -103,8 +101,13 @@ func InitRoutes(app *gin.Engine) (err error) { Path: "/:id/disable", HandlerFunc: PostScheduleDisable, }, + { + Method: http.MethodPost, + Path: "/:id/run", + HandlerFunc: PostScheduleRun, + }, }...)) - RegisterController(groups.AuthGroup, "/spiders", NewControllerV2[models.SpiderV2]([]Action{ + RegisterController(groups.AuthGroup, "/spiders", NewController[models.Spider]([]Action{ { Method: http.MethodGet, Path: "/:id", @@ -190,19 +193,13 @@ func InitRoutes(app *gin.Engine) (err error) { Path: "/:id/run", HandlerFunc: PostSpiderRun, }, - { Method: http.MethodGet, - Path: "/:id/data-source", - HandlerFunc: GetSpiderDataSource, - }, - { - Method: http.MethodPost, - Path: "/:id/data-source/:ds_id", - HandlerFunc: PostSpiderDataSource, + Path: "/:id/results", + HandlerFunc: GetSpiderResults, }, }...)) - RegisterController(groups.AuthGroup, "/tasks", NewControllerV2[models.TaskV2]([]Action{ + RegisterController(groups.AuthGroup, "/tasks", NewController[models.Task]([]Action{ { Method: http.MethodGet, Path: "/:id", @@ -243,30 +240,50 @@ func InitRoutes(app *gin.Engine) (err error) { Path: "/:id/logs", HandlerFunc: GetTaskLogs, }, - { - Method: http.MethodGet, - Path: "/:id/data", - HandlerFunc: GetTaskData, - }, }...)) - RegisterController(groups.AuthGroup, "/tokens", NewControllerV2[models.TokenV2]([]Action{ + RegisterController(groups.AuthGroup, "/tokens", NewController[models.Token]([]Action{ { Method: http.MethodPost, Path: "", HandlerFunc: PostToken, }, }...)) - RegisterController(groups.AuthGroup, "/users", NewControllerV2[models.UserV2]([]Action{ + RegisterController(groups.AuthGroup, "/users", NewController[models.User]([]Action{ + { + Method: http.MethodGet, + Path: "/:id", + HandlerFunc: GetUserById, + }, + { + Method: http.MethodGet, + Path: "", + HandlerFunc: GetUserList, + }, { Method: http.MethodPost, Path: "", HandlerFunc: PostUser, }, + { + Method: http.MethodPut, + Path: "/:id", + HandlerFunc: PutUserById, + }, { Method: http.MethodPost, Path: "/:id/change-password", HandlerFunc: PostUserChangePassword, }, + { + Method: http.MethodDelete, + Path: "/:id", + HandlerFunc: DeleteUserById, + }, + { + Method: http.MethodDelete, + Path: "", + HandlerFunc: DeleteUserList, + }, { Method: http.MethodGet, Path: "/me", @@ -275,17 +292,16 @@ func InitRoutes(app *gin.Engine) (err error) { { Method: http.MethodPut, Path: "/me", - HandlerFunc: PutUserById, + HandlerFunc: PutUserMe, }, - }...)) - - RegisterActions(groups.AuthGroup, "/results", []Action{ { - Method: http.MethodGet, - Path: "/:id", - HandlerFunc: GetResultList, + Method: http.MethodPost, + Path: "/me/change-password", + HandlerFunc: PostUserMeChangePassword, }, - }) + }...)) + + // Register standalone action routes that don't fit the standard CRUD pattern RegisterActions(groups.AuthGroup, "/export", []Action{ { Method: http.MethodPost, @@ -323,12 +339,17 @@ func InitRoutes(app *gin.Engine) (err error) { RegisterActions(groups.AuthGroup, "/settings", []Action{ { Method: http.MethodGet, - Path: "/:id", + Path: "/:key", HandlerFunc: GetSetting, }, + { + Method: http.MethodPost, + Path: "/:key", + HandlerFunc: PostSetting, + }, { Method: http.MethodPut, - Path: "/:id", + Path: "/:key", HandlerFunc: PutSetting, }, }) @@ -350,6 +371,28 @@ func InitRoutes(app *gin.Engine) (err error) { }, }) + // Register sync routes that require special authentication + RegisterActions(groups.SyncAuthGroup, "/sync", []Action{ + { + Method: http.MethodGet, + Path: "/:id/scan", + HandlerFunc: GetSyncScan, + }, + { + Method: http.MethodGet, + Path: "/:id/download", + HandlerFunc: GetSyncDownload, + }, + }) + + // Register public routes that don't require authentication + RegisterActions(groups.AnonymousGroup, "/health", []Action{ + { + Path: "", + Method: http.MethodGet, + HandlerFunc: GetHealthFn(func() bool { return true }), + }, + }) RegisterActions(groups.AnonymousGroup, "/system-info", []Action{ { Path: "", @@ -369,18 +412,6 @@ func InitRoutes(app *gin.Engine) (err error) { HandlerFunc: PostLogout, }, }) - RegisterActions(groups.AnonymousGroup, "/sync", []Action{ - { - Method: http.MethodGet, - Path: "/:id/scan", - HandlerFunc: GetSyncScan, - }, - { - Method: http.MethodGet, - Path: "/:id/download", - HandlerFunc: GetSyncDownload, - }, - }) return nil } diff --git a/core/controllers/router_v2_test.go b/core/controllers/router_test.go similarity index 97% rename from core/controllers/router_v2_test.go rename to core/controllers/router_test.go index 47642324d..e222ce8cd 100644 --- a/core/controllers/router_v2_test.go +++ b/core/controllers/router_test.go @@ -28,7 +28,7 @@ func TestRouterGroups(t *testing.T) { func TestRegisterController_Routes(t *testing.T) { router := gin.Default() groups := controllers.NewRouterGroups(router) - ctr := controllers.NewControllerV2[models.TestModel]() + ctr := controllers.NewController[models.TestModel]() basePath := "/testmodels" controllers.RegisterController(groups.AuthGroup, basePath, ctr) diff --git a/core/controllers/schedule_v2.go b/core/controllers/schedule.go similarity index 57% rename from core/controllers/schedule_v2.go rename to core/controllers/schedule.go index 3e19da769..a3a0056d5 100644 --- a/core/controllers/schedule_v2.go +++ b/core/controllers/schedule.go @@ -1,24 +1,26 @@ package controllers import ( - "github.com/crawlab-team/crawlab/core/errors" + errors2 "errors" + "github.com/crawlab-team/crawlab/core/interfaces" "github.com/crawlab-team/crawlab/core/models/models" "github.com/crawlab-team/crawlab/core/models/service" "github.com/crawlab-team/crawlab/core/schedule" + "github.com/crawlab-team/crawlab/core/spider/admin" "github.com/gin-gonic/gin" "go.mongodb.org/mongo-driver/bson/primitive" ) func PostSchedule(c *gin.Context) { - var s models.ScheduleV2 + var s models.Schedule if err := c.ShouldBindJSON(&s); err != nil { HandleErrorBadRequest(c, err) return } - u := GetUserFromContextV2(c) + u := GetUserFromContext(c) - modelSvc := service.NewModelServiceV2[models.ScheduleV2]() + modelSvc := service.NewModelService[models.Schedule]() s.SetCreated(u.Id) s.SetUpdated(u.Id) @@ -30,11 +32,7 @@ func PostSchedule(c *gin.Context) { s.Id = id if s.Enabled { - scheduleSvc, err := schedule.GetScheduleServiceV2() - if err != nil { - HandleErrorInternalServerError(c, err) - return - } + scheduleSvc := schedule.GetScheduleService() if err := scheduleSvc.Enable(s, u.Id); err != nil { HandleErrorInternalServerError(c, err) return @@ -50,30 +48,26 @@ func PutScheduleById(c *gin.Context) { HandleErrorBadRequest(c, err) return } - var s models.ScheduleV2 + var s models.Schedule if err := c.ShouldBindJSON(&s); err != nil { HandleErrorBadRequest(c, err) return } if s.Id != id { - HandleErrorBadRequest(c, errors.ErrorHttpBadRequest) + HandleErrorBadRequest(c, errors2.New("id in path does not match id in body")) return } - modelSvc := service.NewModelServiceV2[models.ScheduleV2]() + modelSvc := service.NewModelService[models.Schedule]() err = modelSvc.ReplaceById(id, s) if err != nil { HandleErrorInternalServerError(c, err) return } - scheduleSvc, err := schedule.GetScheduleServiceV2() - if err != nil { - HandleErrorInternalServerError(c, err) - return - } + scheduleSvc := schedule.GetScheduleService() - u := GetUserFromContextV2(c) + u := GetUserFromContext(c) if s.Enabled { if err := scheduleSvc.Enable(s, u.Id); err != nil { @@ -105,17 +99,13 @@ func postScheduleEnableDisableFunc(isEnable bool) func(c *gin.Context) { HandleErrorBadRequest(c, err) return } - svc, err := schedule.GetScheduleServiceV2() + svc := schedule.GetScheduleService() + s, err := service.NewModelService[models.Schedule]().GetById(id) if err != nil { HandleErrorInternalServerError(c, err) return } - s, err := service.NewModelServiceV2[models.ScheduleV2]().GetById(id) - if err != nil { - HandleErrorInternalServerError(c, err) - return - } - u := GetUserFromContextV2(c) + u := GetUserFromContext(c) if isEnable { err = svc.Enable(*s, u.Id) } else { @@ -128,3 +118,49 @@ func postScheduleEnableDisableFunc(isEnable bool) func(c *gin.Context) { HandleSuccess(c) } } + +func PostScheduleRun(c *gin.Context) { + id, err := primitive.ObjectIDFromHex(c.Param("id")) + if err != nil { + HandleErrorBadRequest(c, err) + return + } + + // options + var opts interfaces.SpiderRunOptions + if err := c.ShouldBindJSON(&opts); err != nil { + HandleErrorInternalServerError(c, err) + return + } + if opts.ScheduleId.IsZero() { + opts.ScheduleId = id + } + + // schedule + sch, err := service.NewModelService[models.Schedule]().GetById(id) + if err != nil { + HandleErrorInternalServerError(c, err) + return + } + + // spider + s, err := service.NewModelService[models.Spider]().GetById(sch.SpiderId) + if err != nil { + HandleErrorInternalServerError(c, err) + return + } + + // user + if u := GetUserFromContext(c); u != nil { + opts.UserId = u.GetId() + } + + // schedule tasks + taskIds, err := admin.GetSpiderAdminService().Schedule(s.Id, &opts) + if err != nil { + HandleErrorInternalServerError(c, err) + return + } + + HandleSuccessWithData(c, taskIds) +} diff --git a/core/controllers/setting_v2.go b/core/controllers/setting.go similarity index 51% rename from core/controllers/setting_v2.go rename to core/controllers/setting.go index 326873b99..de691ecb4 100644 --- a/core/controllers/setting_v2.go +++ b/core/controllers/setting.go @@ -1,19 +1,25 @@ package controllers import ( + "errors" "github.com/crawlab-team/crawlab/core/models/models" "github.com/crawlab-team/crawlab/core/models/service" "github.com/gin-gonic/gin" "go.mongodb.org/mongo-driver/bson" + "go.mongodb.org/mongo-driver/mongo" ) func GetSetting(c *gin.Context) { // key - key := c.Param("id") + key := c.Param("key") // setting - s, err := service.NewModelServiceV2[models.SettingV2]().GetOne(bson.M{"key": key}, nil) + s, err := service.NewModelService[models.Setting]().GetOne(bson.M{"key": key}, nil) if err != nil { + if errors.Is(err, mongo.ErrNoDocuments) { + HandleSuccess(c) + return + } HandleErrorInternalServerError(c, err) return } @@ -21,9 +27,39 @@ func GetSetting(c *gin.Context) { HandleSuccessWithData(c, s) } +func PostSetting(c *gin.Context) { + // key + key := c.Param("key") + + // settings + var s models.Setting + if err := c.ShouldBindJSON(&s); err != nil { + HandleErrorInternalServerError(c, err) + return + } + + if s.Key == "" { + s.Key = key + } + + u := GetUserFromContext(c) + + s.SetCreated(u.Id) + s.SetUpdated(u.Id) + + id, err := service.NewModelService[models.Setting]().InsertOne(s) + if err != nil { + HandleErrorInternalServerError(c, err) + return + } + s.Id = id + + HandleSuccessWithData(c, s) +} + func PutSetting(c *gin.Context) { // key - key := c.Param("id") + key := c.Param("key") // settings var s models.Setting @@ -32,7 +68,7 @@ func PutSetting(c *gin.Context) { return } - modelSvc := service.NewModelServiceV2[models.SettingV2]() + modelSvc := service.NewModelService[models.Setting]() // setting _s, err := modelSvc.GetOne(bson.M{"key": key}, nil) @@ -41,7 +77,7 @@ func PutSetting(c *gin.Context) { return } - u := GetUserFromContextV2(c) + u := GetUserFromContext(c) // save _s.Value = s.Value diff --git a/core/controllers/spider_v2.go b/core/controllers/spider.go similarity index 55% rename from core/controllers/spider_v2.go rename to core/controllers/spider.go index 7523d5407..7392a47e8 100644 --- a/core/controllers/spider_v2.go +++ b/core/controllers/spider.go @@ -2,25 +2,24 @@ package controllers import ( "errors" - "github.com/apex/log" "github.com/crawlab-team/crawlab/core/constants" + "github.com/crawlab-team/crawlab/core/models/models" + mongo2 "github.com/crawlab-team/crawlab/core/mongo" + "github.com/crawlab-team/crawlab/core/spider" + "math" + "os" + "path/filepath" + "sync" + "github.com/crawlab-team/crawlab/core/fs" "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/models/models" "github.com/crawlab-team/crawlab/core/models/service" "github.com/crawlab-team/crawlab/core/spider/admin" "github.com/crawlab-team/crawlab/core/utils" - "github.com/crawlab-team/crawlab/db/mongo" - "github.com/crawlab-team/crawlab/trace" "github.com/gin-gonic/gin" - "github.com/spf13/viper" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" - mongo2 "go.mongodb.org/mongo-driver/mongo" - "math" - "os" - "path/filepath" - "sync" + "go.mongodb.org/mongo-driver/mongo" ) func GetSpiderById(c *gin.Context) { @@ -29,8 +28,8 @@ func GetSpiderById(c *gin.Context) { HandleErrorBadRequest(c, err) return } - s, err := service.NewModelServiceV2[models.SpiderV2]().GetById(id) - if errors.Is(err, mongo2.ErrNoDocuments) { + s, err := service.NewModelService[models.Spider]().GetById(id) + if errors.Is(err, mongo.ErrNoDocuments) { HandleErrorNotFound(c, err) return } @@ -40,19 +39,19 @@ func GetSpiderById(c *gin.Context) { } // stat - s.Stat, err = service.NewModelServiceV2[models.SpiderStatV2]().GetById(s.Id) + s.Stat, err = service.NewModelService[models.SpiderStat]().GetById(s.Id) if err != nil { - if !errors.Is(err, mongo2.ErrNoDocuments) { + if !errors.Is(err, mongo.ErrNoDocuments) { HandleErrorInternalServerError(c, err) return } } - // data collection - if !s.ColId.IsZero() { - col, err := service.NewModelServiceV2[models.DataCollectionV2]().GetById(s.ColId) + // data collection (compatible to old version) # TODO: remove in the future + if s.ColName == "" && !s.ColId.IsZero() { + col, err := service.NewModelService[models.DataCollection]().GetById(s.ColId) if err != nil { - if !errors.Is(err, mongo2.ErrNoDocuments) { + if !errors.Is(err, mongo.ErrNoDocuments) { HandleErrorInternalServerError(c, err) return } @@ -63,9 +62,9 @@ func GetSpiderById(c *gin.Context) { // git if utils.IsPro() && !s.GitId.IsZero() { - s.Git, err = service.NewModelServiceV2[models.GitV2]().GetById(s.GitId) + s.Git, err = service.NewModelService[models.Git]().GetById(s.GitId) if err != nil { - if !errors.Is(err, mongo2.ErrNoDocuments) { + if !errors.Is(err, mongo.ErrNoDocuments) { HandleErrorInternalServerError(c, err) return } @@ -79,14 +78,14 @@ func GetSpiderList(c *gin.Context) { // get all list all := MustGetFilterAll(c) if all { - NewControllerV2[models.SpiderV2]().getAll(c) + NewController[models.Spider]().getAll(c) return } // get list withStats := c.Query("stats") if withStats == "" { - NewControllerV2[models.SpiderV2]().GetList(c) + NewController[models.Spider]().GetList(c) return } @@ -101,19 +100,19 @@ func getSpiderListWithStats(c *gin.Context) { sort := MustGetSortOption(c) // get list - spiders, err := service.NewModelServiceV2[models.SpiderV2]().GetMany(query, &mongo.FindOptions{ + spiders, err := service.NewModelService[models.Spider]().GetMany(query, &mongo2.FindOptions{ Sort: sort, Skip: pagination.Size * (pagination.Page - 1), Limit: pagination.Size, }) if err != nil { - if err.Error() != mongo2.ErrNoDocuments.Error() { + if err.Error() != mongo.ErrNoDocuments.Error() { HandleErrorInternalServerError(c, err) } return } if len(spiders) == 0 { - HandleSuccessWithListData(c, []models.SpiderV2{}, 0) + HandleSuccessWithListData(c, []models.Spider{}, 0) return } @@ -128,21 +127,21 @@ func getSpiderListWithStats(c *gin.Context) { } // total count - total, err := service.NewModelServiceV2[models.SpiderV2]().Count(query) + total, err := service.NewModelService[models.Spider]().Count(query) if err != nil { HandleErrorInternalServerError(c, err) return } // stat list - spiderStats, err := service.NewModelServiceV2[models.SpiderStatV2]().GetMany(bson.M{"_id": bson.M{"$in": ids}}, nil) + spiderStats, err := service.NewModelService[models.SpiderStat]().GetMany(bson.M{"_id": bson.M{"$in": ids}}, nil) if err != nil { HandleErrorInternalServerError(c, err) return } // cache stat list to dict - dict := map[primitive.ObjectID]models.SpiderStatV2{} + dict := map[primitive.ObjectID]models.SpiderStat{} var taskIds []primitive.ObjectID for _, st := range spiderStats { if st.Tasks > 0 { @@ -159,9 +158,9 @@ func getSpiderListWithStats(c *gin.Context) { } // task list and stats - var tasks []models.TaskV2 - dictTask := map[primitive.ObjectID]models.TaskV2{} - dictTaskStat := map[primitive.ObjectID]models.TaskStatV2{} + var tasks []models.Task + dictTask := map[primitive.ObjectID]models.Task{} + dictTaskStat := map[primitive.ObjectID]models.TaskStat{} if len(taskIds) > 0 { // task list queryTask := bson.M{ @@ -169,14 +168,14 @@ func getSpiderListWithStats(c *gin.Context) { "$in": taskIds, }, } - tasks, err = service.NewModelServiceV2[models.TaskV2]().GetMany(queryTask, nil) + tasks, err = service.NewModelService[models.Task]().GetMany(queryTask, nil) if err != nil { HandleErrorInternalServerError(c, err) return } // task stats list - taskStats, err := service.NewModelServiceV2[models.TaskStatV2]().GetMany(queryTask, nil) + taskStats, err := service.NewModelService[models.TaskStat]().GetMany(queryTask, nil) if err != nil { HandleErrorInternalServerError(c, err) return @@ -198,9 +197,9 @@ func getSpiderListWithStats(c *gin.Context) { } // git list - var gits []models.GitV2 + var gits []models.Git if len(gitIds) > 0 && utils.IsPro() { - gits, err = service.NewModelServiceV2[models.GitV2]().GetMany(bson.M{"_id": bson.M{"$in": gitIds}}, nil) + gits, err = service.NewModelService[models.Git]().GetMany(bson.M{"_id": bson.M{"$in": gitIds}}, nil) if err != nil { HandleErrorInternalServerError(c, err) return @@ -208,13 +207,13 @@ func getSpiderListWithStats(c *gin.Context) { } // cache git list to dict - dictGit := map[primitive.ObjectID]models.GitV2{} + dictGit := map[primitive.ObjectID]models.Git{} for _, g := range gits { dictGit[g.Id] = g } // iterate list again - var data []models.SpiderV2 + var data []models.Spider for _, s := range spiders { // spider stat st, ok := dict[s.Id] @@ -246,25 +245,26 @@ func getSpiderListWithStats(c *gin.Context) { func PostSpider(c *gin.Context) { // bind - var s models.SpiderV2 + var s models.Spider if err := c.ShouldBindJSON(&s); err != nil { HandleErrorBadRequest(c, err) return } - // upsert data collection - if err := upsertSpiderDataCollection(&s); err != nil { - HandleErrorInternalServerError(c, err) - return + if s.Mode == "" { + s.Mode = constants.RunTypeRandom + } + if s.Priority == 0 { + s.Priority = 5 } // user - u := GetUserFromContextV2(c) + u := GetUserFromContext(c) // add s.SetCreated(u.Id) s.SetUpdated(u.Id) - id, err := service.NewModelServiceV2[models.SpiderV2]().InsertOne(s) + id, err := service.NewModelService[models.Spider]().InsertOne(s) if err != nil { HandleErrorInternalServerError(c, err) return @@ -272,11 +272,11 @@ func PostSpider(c *gin.Context) { s.SetId(id) // add stat - st := models.SpiderStatV2{} + st := models.SpiderStat{} st.SetId(id) st.SetCreated(u.Id) st.SetUpdated(u.Id) - _, err = service.NewModelServiceV2[models.SpiderStatV2]().InsertOne(st) + _, err = service.NewModelService[models.SpiderStat]().InsertOne(st) if err != nil { HandleErrorInternalServerError(c, err) return @@ -294,6 +294,17 @@ func PostSpider(c *gin.Context) { return } + // create template if available + if utils.IsPro() && s.Template != "" { + if templateSvc := spider.GetSpiderTemplateRegistryService(); templateSvc != nil { + err = templateSvc.CreateTemplate(s.Id) + if err != nil { + HandleErrorInternalServerError(c, err) + return + } + } + } + HandleSuccessWithData(c, s) } @@ -305,21 +316,15 @@ func PutSpiderById(c *gin.Context) { } // bind - var s models.SpiderV2 + var s models.Spider if err := c.ShouldBindJSON(&s); err != nil { HandleErrorBadRequest(c, err) return } - // upsert data collection - if err := upsertSpiderDataCollection(&s); err != nil { - HandleErrorInternalServerError(c, err) - return - } + u := GetUserFromContext(c) - u := GetUserFromContextV2(c) - - modelSvc := service.NewModelServiceV2[models.SpiderV2]() + modelSvc := service.NewModelService[models.Spider]() // save s.SetUpdated(u.Id) @@ -346,21 +351,28 @@ func DeleteSpiderById(c *gin.Context) { return } - if err := mongo.RunTransaction(func(context mongo2.SessionContext) (err error) { + // spider + s, err := service.NewModelService[models.Spider]().GetById(id) + if err != nil { + HandleErrorInternalServerError(c, err) + return + } + + if err := mongo2.RunTransaction(func(context mongo.SessionContext) (err error) { // delete spider - err = service.NewModelServiceV2[models.SpiderV2]().DeleteById(id) + err = service.NewModelService[models.Spider]().DeleteById(id) if err != nil { return err } // delete spider stat - err = service.NewModelServiceV2[models.SpiderStatV2]().DeleteById(id) + err = service.NewModelService[models.SpiderStat]().DeleteById(id) if err != nil { return err } // related tasks - tasks, err := service.NewModelServiceV2[models.TaskV2]().GetMany(bson.M{"spider_id": id}, nil) + tasks, err := service.NewModelService[models.Task]().GetMany(bson.M{"spider_id": id}, nil) if err != nil { return err } @@ -376,13 +388,13 @@ func DeleteSpiderById(c *gin.Context) { } // delete related tasks - err = service.NewModelServiceV2[models.TaskV2]().DeleteMany(bson.M{"_id": bson.M{"$in": taskIds}}) + err = service.NewModelService[models.Task]().DeleteMany(bson.M{"_id": bson.M{"$in": taskIds}}) if err != nil { return err } // delete related task stats - err = service.NewModelServiceV2[models.TaskStatV2]().DeleteMany(bson.M{"_id": bson.M{"$in": taskIds}}) + err = service.NewModelService[models.TaskStat]().DeleteMany(bson.M{"_id": bson.M{"$in": taskIds}}) if err != nil { return err } @@ -393,9 +405,9 @@ func DeleteSpiderById(c *gin.Context) { for _, id := range taskIds { go func(id string) { // delete task logs - logPath := filepath.Join(viper.GetString("log.path"), id) + logPath := filepath.Join(utils.GetTaskLogPath(), id) if err := os.RemoveAll(logPath); err != nil { - log.Warnf("failed to remove task log directory: %s", logPath) + logger.Warnf("failed to remove task log directory: %s", logPath) } wg.Done() }(id.Hex()) @@ -408,34 +420,21 @@ func DeleteSpiderById(c *gin.Context) { return } - go func() { - // spider - s, err := service.NewModelServiceV2[models.SpiderV2]().GetById(id) - if err != nil { - log.Errorf("failed to get spider: %s", err.Error()) - trace.PrintError(err) - return - } - - // skip spider with git - if !s.GitId.IsZero() { - return - } - - // delete spider directory - fsSvc, err := getSpiderFsSvcById(id) - if err != nil { - log.Errorf("failed to get spider fs service: %s", err.Error()) - trace.PrintError(err) - return - } - err = fsSvc.Delete(".") - if err != nil { - log.Errorf("failed to delete spider directory: %s", err.Error()) - trace.PrintError(err) - return - } - }() + if !s.GitId.IsZero() { + go func() { + // delete spider directory + fsSvc, err := getSpiderFsSvcById(id) + if err != nil { + logger.Errorf("failed to get spider fs service: %v", err) + return + } + err = fsSvc.Delete(".") + if err != nil { + logger.Errorf("failed to delete spider directory: %v", err) + return + } + }() + } HandleSuccess(c) } @@ -449,9 +448,20 @@ func DeleteSpiderList(c *gin.Context) { return } - if err := mongo.RunTransaction(func(context mongo2.SessionContext) (err error) { + // Fetch spiders before deletion + spiders, err := service.NewModelService[models.Spider]().GetMany(bson.M{ + "_id": bson.M{ + "$in": payload.Ids, + }, + }, nil) + if err != nil { + HandleErrorInternalServerError(c, err) + return + } + + if err := mongo2.RunTransaction(func(context mongo.SessionContext) (err error) { // delete spiders - if err := service.NewModelServiceV2[models.SpiderV2]().DeleteMany(bson.M{ + if err := service.NewModelService[models.Spider]().DeleteMany(bson.M{ "_id": bson.M{ "$in": payload.Ids, }, @@ -460,7 +470,7 @@ func DeleteSpiderList(c *gin.Context) { } // delete spider stats - if err := service.NewModelServiceV2[models.SpiderStatV2]().DeleteMany(bson.M{ + if err := service.NewModelService[models.SpiderStat]().DeleteMany(bson.M{ "_id": bson.M{ "$in": payload.Ids, }, @@ -469,7 +479,7 @@ func DeleteSpiderList(c *gin.Context) { } // related tasks - tasks, err := service.NewModelServiceV2[models.TaskV2]().GetMany(bson.M{"spider_id": bson.M{"$in": payload.Ids}}, nil) + tasks, err := service.NewModelService[models.Task]().GetMany(bson.M{"spider_id": bson.M{"$in": payload.Ids}}, nil) if err != nil { return err } @@ -485,12 +495,12 @@ func DeleteSpiderList(c *gin.Context) { } // delete related tasks - if err := service.NewModelServiceV2[models.TaskV2]().DeleteMany(bson.M{"_id": bson.M{"$in": taskIds}}); err != nil { + if err := service.NewModelService[models.Task]().DeleteMany(bson.M{"_id": bson.M{"$in": taskIds}}); err != nil { return err } // delete related task stats - if err := service.NewModelServiceV2[models.TaskStatV2]().DeleteMany(bson.M{"_id": bson.M{"$in": taskIds}}); err != nil { + if err := service.NewModelService[models.TaskStat]().DeleteMany(bson.M{"_id": bson.M{"$in": taskIds}}); err != nil { return err } @@ -500,9 +510,9 @@ func DeleteSpiderList(c *gin.Context) { for _, id := range taskIds { go func(id string) { // delete task logs - logPath := filepath.Join(viper.GetString("log.path"), id) + logPath := filepath.Join(utils.GetTaskLogPath(), id) if err := os.RemoveAll(logPath); err != nil { - log.Warnf("failed to remove task log directory: %s", logPath) + logger.Warnf("failed to remove task log directory: %s", logPath) } wg.Done() }(id.Hex()) @@ -515,41 +525,31 @@ func DeleteSpiderList(c *gin.Context) { return } - // delete spider directories + // Delete spider directories go func() { wg := sync.WaitGroup{} - wg.Add(len(payload.Ids)) - for _, id := range payload.Ids { - go func(id primitive.ObjectID) { + wg.Add(len(spiders)) + for i := range spiders { + go func(s *models.Spider) { defer wg.Done() - // spider - s, err := service.NewModelServiceV2[models.SpiderV2]().GetById(id) - if err != nil { - log.Errorf("failed to get spider: %s", err.Error()) - trace.PrintError(err) - return - } - - // skip spider with git + // Skip spider with git if !s.GitId.IsZero() { return } - // delete spider directory - fsSvc, err := getSpiderFsSvcById(id) + // Delete spider directory + fsSvc, err := getSpiderFsSvcById(s.Id) if err != nil { - log.Errorf("failed to get spider fs service: %s", err.Error()) - trace.PrintError(err) + logger.Errorf("failed to get spider fs service: %v", err) return } err = fsSvc.Delete(".") if err != nil { - log.Errorf("failed to delete spider directory: %s", err.Error()) - trace.PrintError(err) + logger.Errorf("failed to delete spider directory: %v", err) return } - }(id) + }(&spiders[i]) } wg.Wait() }() @@ -558,7 +558,7 @@ func DeleteSpiderList(c *gin.Context) { } func GetSpiderListDir(c *gin.Context) { - rootPath, err := getSpiderRootPath(c) + rootPath, err := getSpiderRootPathByContext(c) if err != nil { HandleErrorForbidden(c, err) return @@ -567,7 +567,7 @@ func GetSpiderListDir(c *gin.Context) { } func GetSpiderFile(c *gin.Context) { - rootPath, err := getSpiderRootPath(c) + rootPath, err := getSpiderRootPathByContext(c) if err != nil { HandleErrorForbidden(c, err) return @@ -576,7 +576,7 @@ func GetSpiderFile(c *gin.Context) { } func GetSpiderFileInfo(c *gin.Context) { - rootPath, err := getSpiderRootPath(c) + rootPath, err := getSpiderRootPathByContext(c) if err != nil { HandleErrorForbidden(c, err) return @@ -585,7 +585,7 @@ func GetSpiderFileInfo(c *gin.Context) { } func PostSpiderSaveFile(c *gin.Context) { - rootPath, err := getSpiderRootPath(c) + rootPath, err := getSpiderRootPathByContext(c) if err != nil { HandleErrorForbidden(c, err) return @@ -594,7 +594,7 @@ func PostSpiderSaveFile(c *gin.Context) { } func PostSpiderSaveFiles(c *gin.Context) { - rootPath, err := getSpiderRootPath(c) + rootPath, err := getSpiderRootPathByContext(c) if err != nil { HandleErrorForbidden(c, err) return @@ -604,7 +604,7 @@ func PostSpiderSaveFiles(c *gin.Context) { } func PostSpiderSaveDir(c *gin.Context) { - rootPath, err := getSpiderRootPath(c) + rootPath, err := getSpiderRootPathByContext(c) if err != nil { HandleErrorForbidden(c, err) return @@ -613,7 +613,7 @@ func PostSpiderSaveDir(c *gin.Context) { } func PostSpiderRenameFile(c *gin.Context) { - rootPath, err := getSpiderRootPath(c) + rootPath, err := getSpiderRootPathByContext(c) if err != nil { HandleErrorForbidden(c, err) return @@ -622,7 +622,7 @@ func PostSpiderRenameFile(c *gin.Context) { } func DeleteSpiderFile(c *gin.Context) { - rootPath, err := getSpiderRootPath(c) + rootPath, err := getSpiderRootPathByContext(c) if err != nil { HandleErrorForbidden(c, err) return @@ -631,7 +631,7 @@ func DeleteSpiderFile(c *gin.Context) { } func PostSpiderCopyFile(c *gin.Context) { - rootPath, err := getSpiderRootPath(c) + rootPath, err := getSpiderRootPathByContext(c) if err != nil { HandleErrorForbidden(c, err) return @@ -640,7 +640,7 @@ func PostSpiderCopyFile(c *gin.Context) { } func PostSpiderExport(c *gin.Context) { - rootPath, err := getSpiderRootPath(c) + rootPath, err := getSpiderRootPathByContext(c) if err != nil { HandleErrorForbidden(c, err) return @@ -667,14 +667,8 @@ func PostSpiderRun(c *gin.Context) { opts.UserId = u.GetId() } - adminSvc, err := admin.GetSpiderAdminServiceV2() - if err != nil { - HandleErrorInternalServerError(c, err) - return - } - - // schedule - taskIds, err := adminSvc.Schedule(id, &opts) + // schedule tasks + taskIds, err := admin.GetSpiderAdminService().Schedule(id, &opts) if err != nil { HandleErrorInternalServerError(c, err) return @@ -683,140 +677,62 @@ func PostSpiderRun(c *gin.Context) { HandleSuccessWithData(c, taskIds) } -func GetSpiderDataSource(c *gin.Context) { - // spider id +func GetSpiderResults(c *gin.Context) { id, err := primitive.ObjectIDFromHex(c.Param("id")) if err != nil { HandleErrorBadRequest(c, err) return } - // spider - s, err := service.NewModelServiceV2[models.SpiderV2]().GetById(id) + s, err := service.NewModelService[models.Spider]().GetById(id) if err != nil { HandleErrorInternalServerError(c, err) return } - // data source - ds, err := service.NewModelServiceV2[models.DataSourceV2]().GetById(s.DataSourceId) - if err != nil { - if err.Error() == mongo2.ErrNoDocuments.Error() { - HandleSuccess(c) - return - } - HandleErrorInternalServerError(c, err) - return - } - - HandleSuccessWithData(c, ds) -} - -func PostSpiderDataSource(c *gin.Context) { - // spider id - id, err := primitive.ObjectIDFromHex(c.Param("id")) - if err != nil { - HandleErrorBadRequest(c, err) - return - } + // params + pagination := MustGetPagination(c) + query := getResultListQuery(c) - // data source id - dsId, err := primitive.ObjectIDFromHex(c.Param("ds_id")) - if err != nil { - HandleErrorBadRequest(c, err) - return - } + col := mongo2.GetMongoCol(s.ColName) - // spider - s, err := service.NewModelServiceV2[models.SpiderV2]().GetById(id) + var results []bson.M + err = col.Find(mongo2.GetMongoQuery(query), mongo2.GetMongoOpts(&mongo2.ListOptions{ + Sort: []mongo2.ListSort{{"_id", mongo2.SortDirectionDesc}}, + Skip: pagination.Size * (pagination.Page - 1), + Limit: pagination.Size, + })).All(&results) if err != nil { HandleErrorInternalServerError(c, err) return } - // data source - if !dsId.IsZero() { - _, err = service.NewModelServiceV2[models.DataSourceV2]().GetById(dsId) - if err != nil { - HandleErrorInternalServerError(c, err) - return - } - } - - // save data source id - u := GetUserFromContextV2(c) - s.DataSourceId = dsId - s.SetUpdatedBy(u.Id) - _, err = service.NewModelServiceV2[models.SpiderV2]().InsertOne(*s) + total, err := mongo2.GetMongoCol(s.ColName).Count(mongo2.GetMongoQuery(query)) if err != nil { HandleErrorInternalServerError(c, err) return } - HandleSuccess(c) + HandleSuccessWithListData(c, results, total) } -func getSpiderFsSvc(s *models.SpiderV2) (svc interfaces.FsServiceV2, err error) { - workspacePath := viper.GetString("workspace") - fsSvc := fs.NewFsServiceV2(filepath.Join(workspacePath, s.Id.Hex())) +func getSpiderFsSvc(s *models.Spider) (svc interfaces.FsService, err error) { + workspacePath := utils.GetWorkspace() + fsSvc := fs.NewFsService(filepath.Join(workspacePath, s.Id.Hex())) return fsSvc, nil } -func getSpiderFsSvcById(id primitive.ObjectID) (svc interfaces.FsServiceV2, err error) { - s, err := service.NewModelServiceV2[models.SpiderV2]().GetById(id) +func getSpiderFsSvcById(id primitive.ObjectID) (svc interfaces.FsService, err error) { + s, err := service.NewModelService[models.Spider]().GetById(id) if err != nil { - log.Errorf("failed to get spider: %s", err.Error()) - trace.PrintError(err) + logger.Errorf("failed to get spider: %v", err) return nil, err } return getSpiderFsSvc(s) } -func upsertSpiderDataCollection(s *models.SpiderV2) (err error) { - modelSvc := service.NewModelServiceV2[models.DataCollectionV2]() - if s.ColId.IsZero() { - // validate - if s.ColName == "" { - return errors.New("data collection name is required") - } - // no id - dc, err := modelSvc.GetOne(bson.M{"name": s.ColName}, nil) - if err != nil { - if errors.Is(err, mongo2.ErrNoDocuments) { - // not exists, add new - dc = &models.DataCollectionV2{Name: s.ColName} - dcId, err := modelSvc.InsertOne(*dc) - if err != nil { - return err - } - dc.SetId(dcId) - } else { - // error - return err - } - } - s.ColId = dc.Id - - // create index - _ = mongo.GetMongoCol(dc.Name).CreateIndex(mongo2.IndexModel{Keys: bson.M{constants.TaskKey: 1}}) - _ = mongo.GetMongoCol(dc.Name).CreateIndex(mongo2.IndexModel{Keys: bson.M{constants.HashKey: 1}}) - } else { - // with id - dc, err := modelSvc.GetById(s.ColId) - if err != nil { - return err - } - s.ColId = dc.Id - } - return nil -} - -func UpsertSpiderDataCollection(s *models.SpiderV2) (err error) { - return upsertSpiderDataCollection(s) -} - -func getSpiderRootPath(c *gin.Context) (rootPath string, err error) { +func getSpiderRootPathByContext(c *gin.Context) (rootPath string, err error) { // spider id id, err := primitive.ObjectIDFromHex(c.Param("id")) if err != nil { @@ -824,20 +740,10 @@ func getSpiderRootPath(c *gin.Context) (rootPath string, err error) { } // spider - s, err := service.NewModelServiceV2[models.SpiderV2]().GetById(id) + s, err := service.NewModelService[models.Spider]().GetById(id) if err != nil { return "", err } - // check git permission - if !utils.IsPro() && !s.GitId.IsZero() { - return "", errors.New("git is not allowed in the community version") - } - - // if git id is zero, return spider id as root path - if s.GitId.IsZero() { - return id.Hex(), nil - } - - return filepath.Join(s.GitId.Hex(), s.GitRootPath), nil + return utils.GetSpiderRootPath(s) } diff --git a/core/controllers/spider_v2_test.go b/core/controllers/spider_test.go similarity index 64% rename from core/controllers/spider_v2_test.go rename to core/controllers/spider_test.go index 69c50f280..10c2f4e0e 100644 --- a/core/controllers/spider_v2_test.go +++ b/core/controllers/spider_test.go @@ -3,18 +3,19 @@ package controllers_test import ( "bytes" "encoding/json" + "github.com/crawlab-team/crawlab/core/models/models" + "net/http" + "net/http/httptest" + "testing" + "github.com/crawlab-team/crawlab/core/controllers" "github.com/crawlab-team/crawlab/core/middlewares" - "github.com/crawlab-team/crawlab/core/models/models" "github.com/crawlab-team/crawlab/core/models/service" "github.com/gin-gonic/gin" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" - "net/http" - "net/http/httptest" - "testing" ) func TestCreateSpider(t *testing.T) { @@ -24,10 +25,10 @@ func TestCreateSpider(t *testing.T) { gin.SetMode(gin.TestMode) router := gin.Default() - router.Use(middlewares.AuthorizationMiddlewareV2()) + router.Use(middlewares.AuthorizationMiddleware()) router.POST("/spiders", controllers.PostSpider) - payload := models.SpiderV2{ + payload := models.Spider{ Name: "Test Spider", ColName: "test_spiders", } @@ -40,12 +41,11 @@ func TestCreateSpider(t *testing.T) { assert.Equal(t, http.StatusOK, resp.Code) - var response controllers.Response[models.SpiderV2] + var response controllers.Response[models.Spider] err := json.Unmarshal(resp.Body.Bytes(), &response) require.Nil(t, err) assert.False(t, response.Data.Id.IsZero()) assert.Equal(t, payload.Name, response.Data.Name) - assert.False(t, response.Data.ColId.IsZero()) } func TestGetSpiderById(t *testing.T) { @@ -55,18 +55,18 @@ func TestGetSpiderById(t *testing.T) { gin.SetMode(gin.TestMode) router := gin.Default() - router.Use(middlewares.AuthorizationMiddlewareV2()) + router.Use(middlewares.AuthorizationMiddleware()) router.GET("/spiders/:id", controllers.GetSpiderById) - model := models.SpiderV2{ + model := models.Spider{ Name: "Test Spider", ColName: "test_spiders", } - id, err := service.NewModelServiceV2[models.SpiderV2]().InsertOne(model) + id, err := service.NewModelService[models.Spider]().InsertOne(model) require.Nil(t, err) - ts := models.SpiderStatV2{} + ts := models.SpiderStat{} ts.SetId(id) - _, err = service.NewModelServiceV2[models.SpiderStatV2]().InsertOne(ts) + _, err = service.NewModelService[models.SpiderStat]().InsertOne(ts) require.Nil(t, err) req, _ := http.NewRequest("GET", "/spiders/"+id.Hex(), nil) @@ -77,7 +77,7 @@ func TestGetSpiderById(t *testing.T) { assert.Equal(t, http.StatusOK, resp.Code) - var response controllers.Response[models.SpiderV2] + var response controllers.Response[models.Spider] err = json.Unmarshal(resp.Body.Bytes(), &response) require.Nil(t, err) assert.Equal(t, model.Name, response.Data.Name) @@ -90,22 +90,22 @@ func TestUpdateSpiderById(t *testing.T) { gin.SetMode(gin.TestMode) router := gin.Default() - router.Use(middlewares.AuthorizationMiddlewareV2()) + router.Use(middlewares.AuthorizationMiddleware()) router.PUT("/spiders/:id", controllers.PutSpiderById) - model := models.SpiderV2{ + model := models.Spider{ Name: "Test Spider", ColName: "test_spiders", } - id, err := service.NewModelServiceV2[models.SpiderV2]().InsertOne(model) + id, err := service.NewModelService[models.Spider]().InsertOne(model) require.Nil(t, err) - ts := models.SpiderStatV2{} + ts := models.SpiderStat{} ts.SetId(id) - _, err = service.NewModelServiceV2[models.SpiderStatV2]().InsertOne(ts) + _, err = service.NewModelService[models.SpiderStat]().InsertOne(ts) require.Nil(t, err) spiderId := id.Hex() - payload := models.SpiderV2{ + payload := models.Spider{ Name: "Updated Spider", ColName: "test_spider", } @@ -119,12 +119,12 @@ func TestUpdateSpiderById(t *testing.T) { assert.Equal(t, http.StatusOK, resp.Code) - var response controllers.Response[models.SpiderV2] + var response controllers.Response[models.Spider] err = json.Unmarshal(resp.Body.Bytes(), &response) require.Nil(t, err) assert.Equal(t, payload.Name, response.Data.Name) - svc := service.NewModelServiceV2[models.SpiderV2]() + svc := service.NewModelService[models.Spider]() resModel, err := svc.GetById(id) require.Nil(t, err) assert.Equal(t, payload.Name, resModel.Name) @@ -137,26 +137,26 @@ func TestDeleteSpiderById(t *testing.T) { gin.SetMode(gin.TestMode) router := gin.Default() - router.Use(middlewares.AuthorizationMiddlewareV2()) + router.Use(middlewares.AuthorizationMiddleware()) router.DELETE("/spiders/:id", controllers.DeleteSpiderById) - model := models.SpiderV2{ + model := models.Spider{ Name: "Test Spider", ColName: "test_spiders", } - id, err := service.NewModelServiceV2[models.SpiderV2]().InsertOne(model) + id, err := service.NewModelService[models.Spider]().InsertOne(model) require.Nil(t, err) - ts := models.SpiderStatV2{} + ts := models.SpiderStat{} ts.SetId(id) - _, err = service.NewModelServiceV2[models.SpiderStatV2]().InsertOne(ts) + _, err = service.NewModelService[models.SpiderStat]().InsertOne(ts) require.Nil(t, err) - task := models.TaskV2{} + task := models.Task{} task.SpiderId = id - taskId, err := service.NewModelServiceV2[models.TaskV2]().InsertOne(task) + taskId, err := service.NewModelService[models.Task]().InsertOne(task) require.Nil(t, err) - taskStat := models.TaskStatV2{} + taskStat := models.TaskStat{} taskStat.SetId(taskId) - _, err = service.NewModelServiceV2[models.TaskStatV2]().InsertOne(taskStat) + _, err = service.NewModelService[models.TaskStat]().InsertOne(taskStat) require.Nil(t, err) req, _ := http.NewRequest("DELETE", "/spiders/"+id.Hex(), nil) @@ -167,14 +167,14 @@ func TestDeleteSpiderById(t *testing.T) { assert.Equal(t, http.StatusOK, resp.Code) - _, err = service.NewModelServiceV2[models.SpiderV2]().GetById(id) + _, err = service.NewModelService[models.Spider]().GetById(id) assert.NotNil(t, err) - _, err = service.NewModelServiceV2[models.SpiderStatV2]().GetById(id) + _, err = service.NewModelService[models.SpiderStat]().GetById(id) assert.NotNil(t, err) - taskCount, err := service.NewModelServiceV2[models.TaskV2]().Count(bson.M{"spider_id": id}) + taskCount, err := service.NewModelService[models.Task]().Count(bson.M{"spider_id": id}) require.Nil(t, err) assert.Equal(t, 0, taskCount) - taskStatCount, err := service.NewModelServiceV2[models.TaskStatV2]().Count(bson.M{"_id": taskId}) + taskStatCount, err := service.NewModelService[models.TaskStat]().Count(bson.M{"_id": taskId}) require.Nil(t, err) assert.Equal(t, 0, taskStatCount) @@ -187,10 +187,10 @@ func TestDeleteSpiderList(t *testing.T) { gin.SetMode(gin.TestMode) router := gin.Default() - router.Use(middlewares.AuthorizationMiddlewareV2()) + router.Use(middlewares.AuthorizationMiddleware()) router.DELETE("/spiders", controllers.DeleteSpiderList) - modelList := []models.SpiderV2{ + modelList := []models.Spider{ { Name: "Test Name 1", ColName: "test_spiders", @@ -202,19 +202,19 @@ func TestDeleteSpiderList(t *testing.T) { var ids []primitive.ObjectID var taskIds []primitive.ObjectID for _, model := range modelList { - id, err := service.NewModelServiceV2[models.SpiderV2]().InsertOne(model) + id, err := service.NewModelService[models.Spider]().InsertOne(model) require.Nil(t, err) - ts := models.SpiderStatV2{} + ts := models.SpiderStat{} ts.SetId(id) - _, err = service.NewModelServiceV2[models.SpiderStatV2]().InsertOne(ts) + _, err = service.NewModelService[models.SpiderStat]().InsertOne(ts) require.Nil(t, err) - task := models.TaskV2{} + task := models.Task{} task.SpiderId = id - taskId, err := service.NewModelServiceV2[models.TaskV2]().InsertOne(task) + taskId, err := service.NewModelService[models.Task]().InsertOne(task) require.Nil(t, err) - taskStat := models.TaskStatV2{} + taskStat := models.TaskStat{} taskStat.SetId(taskId) - _, err = service.NewModelServiceV2[models.TaskStatV2]().InsertOne(taskStat) + _, err = service.NewModelService[models.TaskStat]().InsertOne(taskStat) require.Nil(t, err) ids = append(ids, id) taskIds = append(taskIds, taskId) @@ -234,16 +234,16 @@ func TestDeleteSpiderList(t *testing.T) { assert.Equal(t, http.StatusOK, resp.Code) - spiderCount, err := service.NewModelServiceV2[models.SpiderV2]().Count(bson.M{"_id": bson.M{"$in": ids}}) + spiderCount, err := service.NewModelService[models.Spider]().Count(bson.M{"_id": bson.M{"$in": ids}}) require.Nil(t, err) assert.Equal(t, 0, spiderCount) - spiderStatCount, err := service.NewModelServiceV2[models.SpiderStatV2]().Count(bson.M{"_id": bson.M{"$in": ids}}) + spiderStatCount, err := service.NewModelService[models.SpiderStat]().Count(bson.M{"_id": bson.M{"$in": ids}}) require.Nil(t, err) assert.Equal(t, 0, spiderStatCount) - taskCount, err := service.NewModelServiceV2[models.TaskV2]().Count(bson.M{"_id": bson.M{"$in": taskIds}}) + taskCount, err := service.NewModelService[models.Task]().Count(bson.M{"_id": bson.M{"$in": taskIds}}) require.Nil(t, err) assert.Equal(t, 0, taskCount) - taskStatCount, err := service.NewModelServiceV2[models.TaskStatV2]().Count(bson.M{"_id": bson.M{"$in": taskIds}}) + taskStatCount, err := service.NewModelService[models.TaskStat]().Count(bson.M{"_id": bson.M{"$in": taskIds}}) require.Nil(t, err) assert.Equal(t, 0, taskStatCount) } diff --git a/core/controllers/stats_v2.go b/core/controllers/stats.go similarity index 97% rename from core/controllers/stats_v2.go rename to core/controllers/stats.go index cf7bda039..92ec6452e 100644 --- a/core/controllers/stats_v2.go +++ b/core/controllers/stats.go @@ -8,7 +8,7 @@ import ( ) var statsDefaultQuery = bson.M{ - "create_ts": bson.M{ + "created_ts": bson.M{ "$gte": time.Now().Add(-30 * 24 * time.Hour), }, } diff --git a/core/controllers/sync_v2.go b/core/controllers/sync.go similarity index 83% rename from core/controllers/sync_v2.go rename to core/controllers/sync.go index 5e44fcd44..e7a77f8e0 100644 --- a/core/controllers/sync_v2.go +++ b/core/controllers/sync.go @@ -3,7 +3,6 @@ package controllers import ( "github.com/crawlab-team/crawlab/core/utils" "github.com/gin-gonic/gin" - "github.com/spf13/viper" "net/http" "path/filepath" ) @@ -12,7 +11,7 @@ func GetSyncScan(c *gin.Context) { id := c.Param("id") path := c.Query("path") - workspacePath := viper.GetString("workspace") + workspacePath := utils.GetWorkspace() dirPath := filepath.Join(workspacePath, id, path) files, err := utils.ScanDirectory(dirPath) if err != nil { @@ -25,7 +24,7 @@ func GetSyncScan(c *gin.Context) { func GetSyncDownload(c *gin.Context) { id := c.Param("id") path := c.Query("path") - workspacePath := viper.GetString("workspace") + workspacePath := utils.GetWorkspace() filePath := filepath.Join(workspacePath, id, path) c.File(filePath) } diff --git a/core/controllers/system_info_v2.go b/core/controllers/system_info.go similarity index 66% rename from core/controllers/system_info_v2.go rename to core/controllers/system_info.go index 9b4fad837..45ff983a7 100644 --- a/core/controllers/system_info_v2.go +++ b/core/controllers/system_info.go @@ -2,14 +2,14 @@ package controllers import ( "github.com/crawlab-team/crawlab/core/entity" + "github.com/crawlab-team/crawlab/core/utils" "github.com/gin-gonic/gin" - "github.com/spf13/viper" ) func GetSystemInfo(c *gin.Context) { info := &entity.SystemInfo{ - Edition: viper.GetString("edition"), - Version: viper.GetString("version"), + Edition: utils.GetEdition(), + Version: utils.GetVersion(), } HandleSuccessWithData(c, info) } diff --git a/core/controllers/task_v2.go b/core/controllers/task.go similarity index 63% rename from core/controllers/task_v2.go rename to core/controllers/task.go index aad4fcf3f..af110dbe9 100644 --- a/core/controllers/task_v2.go +++ b/core/controllers/task.go @@ -2,20 +2,16 @@ package controllers import ( "errors" - log2 "github.com/apex/log" "github.com/crawlab-team/crawlab/core/constants" "github.com/crawlab-team/crawlab/core/interfaces" "github.com/crawlab-team/crawlab/core/models/models" "github.com/crawlab-team/crawlab/core/models/service" - "github.com/crawlab-team/crawlab/core/result" + mongo3 "github.com/crawlab-team/crawlab/core/mongo" "github.com/crawlab-team/crawlab/core/spider/admin" "github.com/crawlab-team/crawlab/core/task/log" "github.com/crawlab-team/crawlab/core/task/scheduler" "github.com/crawlab-team/crawlab/core/utils" - "github.com/crawlab-team/crawlab/db/generic" - "github.com/crawlab-team/crawlab/db/mongo" "github.com/gin-gonic/gin" - "github.com/spf13/viper" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" mongo2 "go.mongodb.org/mongo-driver/mongo" @@ -34,7 +30,7 @@ func GetTaskById(c *gin.Context) { } // task - t, err := service.NewModelServiceV2[models.TaskV2]().GetById(id) + t, err := service.NewModelService[models.Task]().GetById(id) if errors.Is(err, mongo2.ErrNoDocuments) { HandleErrorNotFound(c, err) return @@ -44,17 +40,29 @@ func GetTaskById(c *gin.Context) { return } - // spider - t.Spider, _ = service.NewModelServiceV2[models.SpiderV2]().GetById(t.SpiderId) - // skip if task status is pending if t.Status == constants.TaskStatusPending { HandleSuccessWithData(c, t) return } + // spider + if !t.SpiderId.IsZero() { + t.Spider, _ = service.NewModelService[models.Spider]().GetById(t.SpiderId) + } + + // schedule + if !t.ScheduleId.IsZero() { + t.Schedule, _ = service.NewModelService[models.Schedule]().GetById(t.ScheduleId) + } + + // node + if !t.NodeId.IsZero() { + t.Node, _ = service.NewModelService[models.Node]().GetById(t.NodeId) + } + // task stat - t.Stat, _ = service.NewModelServiceV2[models.TaskStatV2]().GetById(id) + t.Stat, _ = service.NewModelService[models.TaskStat]().GetById(id) HandleSuccessWithData(c, t) } @@ -62,7 +70,7 @@ func GetTaskById(c *gin.Context) { func GetTaskList(c *gin.Context) { withStats := c.Query("stats") if withStats == "" { - NewControllerV2[models.TaskV2]().GetList(c) + NewController[models.Task]().GetList(c) return } @@ -72,7 +80,7 @@ func GetTaskList(c *gin.Context) { sort := MustGetSortOption(c) // get tasks - tasks, err := service.NewModelServiceV2[models.TaskV2]().GetMany(query, &mongo.FindOptions{ + tasks, err := service.NewModelService[models.Task]().GetMany(query, &mongo3.FindOptions{ Sort: sort, Skip: pagination.Size * (pagination.Page - 1), Limit: pagination.Size, @@ -101,14 +109,14 @@ func GetTaskList(c *gin.Context) { } // total count - total, err := service.NewModelServiceV2[models.TaskV2]().Count(query) + total, err := service.NewModelService[models.Task]().Count(query) if err != nil { HandleErrorInternalServerError(c, err) return } // stat list - stats, err := service.NewModelServiceV2[models.TaskStatV2]().GetMany(bson.M{ + stats, err := service.NewModelService[models.TaskStat]().GetMany(bson.M{ "_id": bson.M{ "$in": taskIds, }, @@ -119,13 +127,13 @@ func GetTaskList(c *gin.Context) { } // cache stat list to dict - statsDict := map[primitive.ObjectID]models.TaskStatV2{} + statsDict := map[primitive.ObjectID]models.TaskStat{} for _, s := range stats { statsDict[s.Id] = s } // spider list - spiders, err := service.NewModelServiceV2[models.SpiderV2]().GetMany(bson.M{ + spiders, err := service.NewModelService[models.Spider]().GetMany(bson.M{ "_id": bson.M{ "$in": spiderIds, }, @@ -136,7 +144,7 @@ func GetTaskList(c *gin.Context) { } // cache spider list to dict - spiderDict := map[primitive.ObjectID]models.SpiderV2{} + spiderDict := map[primitive.ObjectID]models.Spider{} for _, s := range spiders { spiderDict[s.Id] = s } @@ -168,26 +176,26 @@ func DeleteTaskById(c *gin.Context) { } // delete in db - if err := mongo.RunTransaction(func(context mongo2.SessionContext) (err error) { + if err := mongo3.RunTransaction(func(context mongo2.SessionContext) (err error) { // delete task - _, err = service.NewModelServiceV2[models.TaskV2]().GetById(id) + _, err = service.NewModelService[models.Task]().GetById(id) if err != nil { return err } - err = service.NewModelServiceV2[models.TaskV2]().DeleteById(id) + err = service.NewModelService[models.Task]().DeleteById(id) if err != nil { return err } // delete task stat - _, err = service.NewModelServiceV2[models.TaskStatV2]().GetById(id) + _, err = service.NewModelService[models.TaskStat]().GetById(id) if err != nil { - log2.Warnf("delete task stat error: %s", err.Error()) + logger.Warnf("delete task stat error: %s", err.Error()) return nil } - err = service.NewModelServiceV2[models.TaskStatV2]().DeleteById(id) + err = service.NewModelService[models.TaskStat]().DeleteById(id) if err != nil { - log2.Warnf("delete task stat error: %s", err.Error()) + logger.Warnf("delete task stat error: %s", err.Error()) return nil } @@ -198,9 +206,9 @@ func DeleteTaskById(c *gin.Context) { } // delete task logs - logPath := filepath.Join(viper.GetString("log.path"), id.Hex()) + logPath := filepath.Join(utils.GetTaskLogPath(), id.Hex()) if err := os.RemoveAll(logPath); err != nil { - log2.Warnf("failed to remove task log directory: %s", logPath) + logger.Warnf("failed to remove task log directory: %s", logPath) } HandleSuccess(c) @@ -215,9 +223,9 @@ func DeleteList(c *gin.Context) { return } - if err := mongo.RunTransaction(func(context mongo2.SessionContext) error { + if err := mongo3.RunTransaction(func(context mongo2.SessionContext) error { // delete tasks - if err := service.NewModelServiceV2[models.TaskV2]().DeleteMany(bson.M{ + if err := service.NewModelService[models.Task]().DeleteMany(bson.M{ "_id": bson.M{ "$in": payload.Ids, }, @@ -226,12 +234,12 @@ func DeleteList(c *gin.Context) { } // delete task stats - if err := service.NewModelServiceV2[models.TaskV2]().DeleteMany(bson.M{ + if err := service.NewModelService[models.Task]().DeleteMany(bson.M{ "_id": bson.M{ "$in": payload.Ids, }, }); err != nil { - log2.Warnf("delete task stat error: %s", err.Error()) + logger.Warnf("delete task stat error: %s", err.Error()) return nil } @@ -247,9 +255,9 @@ func DeleteList(c *gin.Context) { for _, id := range payload.Ids { go func(id string) { // delete task logs - logPath := filepath.Join(viper.GetString("log.path"), id) + logPath := filepath.Join(utils.GetTaskLogPath(), id) if err := os.RemoveAll(logPath); err != nil { - log2.Warnf("failed to remove task log directory: %s", logPath) + logger.Warnf("failed to remove task log directory: %s", logPath) } wg.Done() }(id.Hex()) @@ -261,7 +269,7 @@ func DeleteList(c *gin.Context) { func PostTaskRun(c *gin.Context) { // task - var t models.TaskV2 + var t models.Task if err := c.ShouldBindJSON(&t); err != nil { HandleErrorBadRequest(c, err) return @@ -274,7 +282,7 @@ func PostTaskRun(c *gin.Context) { } // spider - s, err := service.NewModelServiceV2[models.SpiderV2]().GetById(t.SpiderId) + s, err := service.NewModelService[models.Spider]().GetById(t.SpiderId) if err != nil { HandleErrorInternalServerError(c, err) return @@ -290,16 +298,12 @@ func PostTaskRun(c *gin.Context) { } // user - if u := GetUserFromContextV2(c); u != nil { + if u := GetUserFromContext(c); u != nil { opts.UserId = u.Id } // run - adminSvc, err := admin.GetSpiderAdminServiceV2() - if err != nil { - HandleErrorInternalServerError(c, err) - return - } + adminSvc := admin.GetSpiderAdminService() taskIds, err := adminSvc.Schedule(s.Id, opts) if err != nil { HandleErrorInternalServerError(c, err) @@ -319,7 +323,7 @@ func PostTaskRestart(c *gin.Context) { } // task - t, err := service.NewModelServiceV2[models.TaskV2]().GetById(id) + t, err := service.NewModelService[models.Task]().GetById(id) if err != nil { HandleErrorInternalServerError(c, err) return @@ -334,17 +338,19 @@ func PostTaskRestart(c *gin.Context) { Priority: t.Priority, } + // normalize options for tasks with assigned node + if !t.NodeId.IsZero() { + opts.NodeIds = []primitive.ObjectID{t.NodeId} + opts.Mode = constants.RunTypeSelectedNodes + } + // user - if u := GetUserFromContextV2(c); u != nil { + if u := GetUserFromContext(c); u != nil { opts.UserId = u.Id } // run - adminSvc, err := admin.GetSpiderAdminServiceV2() - if err != nil { - HandleErrorInternalServerError(c, err) - return - } + adminSvc := admin.GetSpiderAdminService() taskIds, err := adminSvc.Schedule(t.SpiderId, opts) if err != nil { HandleErrorInternalServerError(c, err) @@ -355,6 +361,10 @@ func PostTaskRestart(c *gin.Context) { } func PostTaskCancel(c *gin.Context) { + type Payload struct { + Force bool `json:"force,omitempty"` + } + // id id, err := primitive.ObjectIDFromHex(c.Param("id")) if err != nil { @@ -362,8 +372,15 @@ func PostTaskCancel(c *gin.Context) { return } + // payload + var p Payload + if err := c.ShouldBindJSON(&p); err != nil { + HandleErrorBadRequest(c, err) + return + } + // task - t, err := service.NewModelServiceV2[models.TaskV2]().GetById(id) + t, err := service.NewModelService[models.Task]().GetById(id) if err != nil { HandleErrorInternalServerError(c, err) return @@ -375,18 +392,15 @@ func PostTaskCancel(c *gin.Context) { return } - u := GetUserFromContextV2(c) + u := GetUserFromContext(c) // cancel - schedulerSvc, err := scheduler.GetTaskSchedulerServiceV2() + schedulerSvc := scheduler.GetTaskSchedulerService() + err = schedulerSvc.Cancel(id, u.Id, p.Force) if err != nil { HandleErrorInternalServerError(c, err) return } - if err := schedulerSvc.Cancel(id, u.Id); err != nil { - HandleErrorInternalServerError(c, err) - return - } HandleSuccess(c) } @@ -407,11 +421,7 @@ func GetTaskLogs(c *gin.Context) { } // logs - logDriver, err := log.GetFileLogDriver() - if err != nil { - HandleErrorInternalServerError(c, err) - return - } + logDriver := log.GetFileLogDriver() logs, err := logDriver.Find(id.Hex(), "", (p.Page-1)*p.Size, p.Size) if err != nil { if strings.HasSuffix(err.Error(), "Status:404 Not Found") { @@ -429,62 +439,3 @@ func GetTaskLogs(c *gin.Context) { HandleSuccessWithListData(c, logs, total) } - -func GetTaskData(c *gin.Context) { - // id - id, err := primitive.ObjectIDFromHex(c.Param("id")) - if err != nil { - HandleErrorBadRequest(c, err) - return - } - - // pagination - p, err := GetPagination(c) - if err != nil { - HandleErrorBadRequest(c, err) - return - } - - // task - t, err := service.NewModelServiceV2[models.TaskV2]().GetById(id) - if err != nil { - HandleErrorInternalServerError(c, err) - return - } - - // result service - resultSvc, err := result.GetResultService(t.SpiderId) - if err != nil { - HandleErrorInternalServerError(c, err) - return - } - - // query - query := generic.ListQuery{ - generic.ListQueryCondition{ - Key: constants.TaskKey, - Op: generic.OpEqual, - Value: t.Id, - }, - } - - // list - data, err := resultSvc.List(query, &generic.ListOptions{ - Skip: (p.Page - 1) * p.Size, - Limit: p.Size, - Sort: []generic.ListSort{{"_id", generic.SortDirectionDesc}}, - }) - if err != nil { - HandleErrorInternalServerError(c, err) - return - } - - // total - total, err := resultSvc.Count(query) - if err != nil { - HandleErrorInternalServerError(c, err) - return - } - - HandleSuccessWithListData(c, data, total) -} diff --git a/core/controllers/token_v2.go b/core/controllers/token.go similarity index 80% rename from core/controllers/token_v2.go rename to core/controllers/token.go index bac880b2c..6100e1781 100644 --- a/core/controllers/token_v2.go +++ b/core/controllers/token.go @@ -8,17 +8,17 @@ import ( ) func PostToken(c *gin.Context) { - var t models.TokenV2 + var t models.Token if err := c.ShouldBindJSON(&t); err != nil { HandleErrorBadRequest(c, err) return } - svc, err := user.GetUserServiceV2() + svc, err := user.GetUserService() if err != nil { HandleErrorInternalServerError(c, err) return } - u := GetUserFromContextV2(c) + u := GetUserFromContext(c) t.SetCreated(u.Id) t.SetUpdated(u.Id) t.Token, err = svc.MakeToken(u) @@ -26,7 +26,7 @@ func PostToken(c *gin.Context) { HandleErrorInternalServerError(c, err) return } - _, err = service.NewModelServiceV2[models.TokenV2]().InsertOne(t) + _, err = service.NewModelService[models.Token]().InsertOne(t) if err != nil { HandleErrorInternalServerError(c, err) return diff --git a/core/controllers/user.go b/core/controllers/user.go new file mode 100644 index 000000000..663886e00 --- /dev/null +++ b/core/controllers/user.go @@ -0,0 +1,356 @@ +package controllers + +import ( + "errors" + "fmt" + "github.com/crawlab-team/crawlab/core/mongo" + "regexp" + + "github.com/crawlab-team/crawlab/core/models/models" + "github.com/crawlab-team/crawlab/core/models/service" + "github.com/crawlab-team/crawlab/core/utils" + "github.com/gin-gonic/gin" + "go.mongodb.org/mongo-driver/bson" + "go.mongodb.org/mongo-driver/bson/primitive" + mongo2 "go.mongodb.org/mongo-driver/mongo" +) + +func GetUserById(c *gin.Context) { + id, err := primitive.ObjectIDFromHex(c.Param("id")) + if err != nil { + HandleErrorBadRequest(c, err) + return + } + getUserById(id, c) +} + +func GetUserList(c *gin.Context) { + // params + pagination := MustGetPagination(c) + query := MustGetFilterQuery(c) + sort := MustGetSortOption(c) + + // get users + users, err := service.NewModelService[models.User]().GetMany(query, &mongo.FindOptions{ + Sort: sort, + Skip: pagination.Size * (pagination.Page - 1), + Limit: pagination.Size, + }) + if err != nil { + if errors.Is(err, mongo2.ErrNoDocuments) { + HandleSuccessWithListData(c, nil, 0) + } else { + HandleErrorInternalServerError(c, err) + } + return + } + + // get roles + if utils.IsPro() { + var roleIds []primitive.ObjectID + for _, user := range users { + if !user.RoleId.IsZero() { + roleIds = append(roleIds, user.RoleId) + } + } + if len(roleIds) > 0 { + roles, err := service.NewModelService[models.Role]().GetMany(bson.M{ + "_id": bson.M{"$in": roleIds}, + }, nil) + if err != nil { + HandleErrorInternalServerError(c, err) + return + } + rolesMap := make(map[primitive.ObjectID]models.Role) + for _, role := range roles { + rolesMap[role.Id] = role + } + for i, user := range users { + if user.RoleId.IsZero() { + continue + } + if role, ok := rolesMap[user.RoleId]; ok { + users[i].Role = role.Name + users[i].RootAdminRole = role.RootAdmin + } + } + } + } + + // total count + total, err := service.NewModelService[models.User]().Count(query) + if err != nil { + HandleErrorInternalServerError(c, err) + return + } + + // response + HandleSuccessWithListData(c, users, total) +} + +func PostUser(c *gin.Context) { + var payload struct { + Username string `json:"username"` + Password string `json:"password"` + Role string `json:"role"` + RoleId primitive.ObjectID `json:"role_id"` + Email string `json:"email"` + } + if err := c.ShouldBindJSON(&payload); err != nil { + HandleErrorBadRequest(c, err) + return + } + + // Validate email format + if payload.Email != "" { + emailRegex := regexp.MustCompile(`^[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-zA-Z]{2,}$`) + if !emailRegex.MatchString(payload.Email) { + HandleErrorBadRequest(c, fmt.Errorf("invalid email format")) + return + } + } + + if !payload.RoleId.IsZero() { + _, err := service.NewModelService[models.Role]().GetById(payload.RoleId) + if err != nil { + HandleErrorBadRequest(c, err) + return + } + } + u := GetUserFromContext(c) + model := models.User{ + Username: payload.Username, + Password: utils.EncryptMd5(payload.Password), + Role: payload.Role, + RoleId: payload.RoleId, + Email: payload.Email, + } + model.SetCreated(u.Id) + model.SetUpdated(u.Id) + id, err := service.NewModelService[models.User]().InsertOne(model) + if err != nil { + HandleErrorInternalServerError(c, err) + return + } + + result, err := service.NewModelService[models.User]().GetById(id) + if err != nil { + HandleErrorInternalServerError(c, err) + return + } + + HandleSuccessWithData(c, result) +} + +func PutUserById(c *gin.Context) { + id, err := primitive.ObjectIDFromHex(c.Param("id")) + if err != nil { + HandleErrorBadRequest(c, err) + return + } + putUser(id, c) +} + +func PostUserChangePassword(c *gin.Context) { + // get id + id, err := primitive.ObjectIDFromHex(c.Param("id")) + if err != nil { + HandleErrorBadRequest(c, err) + return + } + + postUserChangePassword(id, c) +} + +func DeleteUserById(c *gin.Context) { + id, err := primitive.ObjectIDFromHex(c.Param("id")) + if err != nil { + HandleErrorBadRequest(c, err) + return + } + + user, err := service.NewModelService[models.User]().GetById(id) + if err != nil { + HandleErrorInternalServerError(c, err) + return + } + if user.RootAdmin { + HandleErrorForbidden(c, errors.New("root admin cannot be deleted")) + return + } + + if err := service.NewModelService[models.User]().DeleteById(id); err != nil { + HandleErrorInternalServerError(c, err) + return + } + + HandleSuccess(c) +} + +func DeleteUserList(c *gin.Context) { + type Payload struct { + Ids []string `json:"ids"` + } + + var payload Payload + if err := c.ShouldBindJSON(&payload); err != nil { + HandleErrorBadRequest(c, err) + return + } + + // Convert string IDs to ObjectIDs + var ids []primitive.ObjectID + for _, id := range payload.Ids { + objectId, err := primitive.ObjectIDFromHex(id) + if err != nil { + HandleErrorBadRequest(c, err) + return + } + ids = append(ids, objectId) + } + + // Check if root admin is in the list + _, err := service.NewModelService[models.User]().GetOne(bson.M{ + "_id": bson.M{ + "$in": ids, + }, + "root_admin": true, + }, nil) + if err == nil { + HandleErrorForbidden(c, errors.New("root admin cannot be deleted")) + return + } + if !errors.Is(err, mongo2.ErrNoDocuments) { + HandleErrorInternalServerError(c, err) + return + } + + // Delete users + if err := service.NewModelService[models.User]().DeleteMany(bson.M{ + "_id": bson.M{ + "$in": ids, + }, + }); err != nil { + HandleErrorInternalServerError(c, err) + return + } + + HandleSuccess(c) +} + +func GetUserMe(c *gin.Context) { + u := GetUserFromContext(c) + getUserById(u.Id, c) +} + +func PutUserMe(c *gin.Context) { + u := GetUserFromContext(c) + putUser(u.Id, c) +} + +func PostUserMeChangePassword(c *gin.Context) { + u := GetUserFromContext(c) + postUserChangePassword(u.Id, c) +} + +func getUserById(userId primitive.ObjectID, c *gin.Context) { + // get user + user, err := service.NewModelService[models.User]().GetById(userId) + if err != nil { + HandleErrorInternalServerError(c, err) + return + } + + // get role + if utils.IsPro() { + if !user.RoleId.IsZero() { + role, err := service.NewModelService[models.Role]().GetById(user.RoleId) + if err != nil { + HandleErrorInternalServerError(c, err) + return + } + user.Role = role.Name + user.RootAdminRole = role.RootAdmin + } + } + + HandleSuccessWithData(c, user) +} + +func putUser(userId primitive.ObjectID, c *gin.Context) { + // get payload + var user models.User + if err := c.ShouldBindJSON(&user); err != nil { + HandleErrorBadRequest(c, err) + return + } + + // model service + modelSvc := service.NewModelService[models.User]() + + // update user + userDb, err := modelSvc.GetById(userId) + if err != nil { + HandleErrorInternalServerError(c, err) + return + } + + // if root admin, disallow changing username and role + if userDb.RootAdmin { + user.Username = userDb.Username + user.RoleId = userDb.RoleId + } + + // disallow changing password + user.Password = userDb.Password + + // current user + u := GetUserFromContext(c) + + // update user + user.SetUpdated(u.Id) + if user.Id.IsZero() { + user.Id = userId + } + if err := modelSvc.ReplaceById(userId, user); err != nil { + HandleErrorInternalServerError(c, err) + return + } + + // handle success + HandleSuccess(c) +} + +func postUserChangePassword(userId primitive.ObjectID, c *gin.Context) { + // get payload + var payload struct { + Password string `json:"password"` + } + if err := c.ShouldBindJSON(&payload); err != nil { + HandleErrorBadRequest(c, err) + return + } + if len(payload.Password) < 5 { + HandleErrorBadRequest(c, errors.New("password must be at least 5 characters")) + return + } + + // current user + u := GetUserFromContext(c) + + // update password + userDb, err := service.NewModelService[models.User]().GetById(userId) + if err != nil { + HandleErrorInternalServerError(c, err) + return + } + userDb.SetUpdated(u.Id) + userDb.Password = utils.EncryptMd5(payload.Password) + if err := service.NewModelService[models.User]().ReplaceById(userDb.Id, *userDb); err != nil { + HandleErrorInternalServerError(c, err) + return + } + + // handle success + HandleSuccess(c) +} diff --git a/core/controllers/user_test.go b/core/controllers/user_test.go new file mode 100644 index 000000000..075bd9bd8 --- /dev/null +++ b/core/controllers/user_test.go @@ -0,0 +1,507 @@ +package controllers_test + +import ( + "fmt" + "net/http" + "net/http/httptest" + "strings" + "testing" + + "github.com/crawlab-team/crawlab/core/controllers" + "github.com/crawlab-team/crawlab/core/middlewares" + "github.com/crawlab-team/crawlab/core/models/models" + "github.com/crawlab-team/crawlab/core/models/service" + "github.com/crawlab-team/crawlab/core/user" + "github.com/gin-gonic/gin" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "go.mongodb.org/mongo-driver/bson" + "go.mongodb.org/mongo-driver/bson/primitive" + + "github.com/crawlab-team/crawlab/core/utils" +) + +func TestGetUserById_Success(t *testing.T) { + SetupTestDB() + defer CleanupTestDB() + + // Create test user with required fields + modelSvc := service.NewModelService[models.User]() + u := models.User{ + Username: "testuser", + Email: "test@example.com", + Password: utils.EncryptMd5("testpassword"), // Add password + } + id, err := modelSvc.InsertOne(u) + require.Nil(t, err) + u.SetId(id) + + router := gin.Default() + router.Use(middlewares.AuthorizationMiddleware()) + router.GET("/users/:id", controllers.GetUserById) + + // Test valid ID + req, err := http.NewRequest(http.MethodGet, "/users/"+id.Hex(), nil) + assert.Nil(t, err) + req.Header.Set("Content-Type", "application/json") + req.Header.Set("Authorization", TestToken) + + w := httptest.NewRecorder() + router.ServeHTTP(w, req) + assert.Equal(t, http.StatusOK, w.Code) + + // Test invalid ID format + req, err = http.NewRequest(http.MethodGet, "/users/invalid-id", nil) + assert.Nil(t, err) + req.Header.Set("Content-Type", "application/json") + req.Header.Set("Authorization", TestToken) + + w = httptest.NewRecorder() + router.ServeHTTP(w, req) + assert.Equal(t, http.StatusBadRequest, w.Code) +} + +func TestGetUserList_Success(t *testing.T) { + SetupTestDB() + defer CleanupTestDB() + + modelSvc := service.NewModelService[models.User]() + + // Create test users with required fields + users := []models.User{ + {Username: "user1", Email: "user1@example.com", Password: utils.EncryptMd5("password1")}, + {Username: "user2", Email: "user2@example.com", Password: utils.EncryptMd5("password2")}, + {Username: "user3", Email: "user3@example.com", Password: utils.EncryptMd5("password3")}, + } + + for _, u := range users { + _, err := modelSvc.InsertOne(u) + assert.Nil(t, err) + } + + router := gin.Default() + router.Use(middlewares.AuthorizationMiddleware()) + router.GET("/users", controllers.GetUserList) + + // Test default pagination + req, err := http.NewRequest(http.MethodGet, "/users", nil) + assert.Nil(t, err) + req.Header.Set("Content-Type", "application/json") + req.Header.Set("Authorization", TestToken) + + w := httptest.NewRecorder() + router.ServeHTTP(w, req) + assert.Equal(t, http.StatusOK, w.Code) + + // Test with pagination parameters + req, err = http.NewRequest(http.MethodGet, "/users?page=1&size=2", nil) + assert.Nil(t, err) + req.Header.Set("Content-Type", "application/json") + req.Header.Set("Authorization", TestToken) + + w = httptest.NewRecorder() + router.ServeHTTP(w, req) + assert.Equal(t, http.StatusOK, w.Code) +} + +func TestPostUser_Success(t *testing.T) { + SetupTestDB() + defer CleanupTestDB() + + router := gin.Default() + router.Use(middlewares.AuthorizationMiddleware()) + router.POST("/users", controllers.PostUser) + + // Test creating a new user with valid data + reqBody := strings.NewReader(`{ + "username": "newuser", + "password": "password123", + "email": "newuser@example.com" + }`) + req, err := http.NewRequest(http.MethodPost, "/users", reqBody) + assert.Nil(t, err) + req.Header.Set("Content-Type", "application/json") + req.Header.Set("Authorization", TestToken) + + w := httptest.NewRecorder() + router.ServeHTTP(w, req) + + assert.Equal(t, http.StatusOK, w.Code) + + // Verify user was created + modelSvc := service.NewModelService[models.User]() + u, err := modelSvc.GetOne(bson.M{"username": "newuser"}, nil) + assert.Nil(t, err) + assert.Equal(t, "newuser", u.Username) + assert.Equal(t, "newuser@example.com", u.Email) + + // Test creating a user with invalid data + reqBody = strings.NewReader(`{ + "username": "", + "password": "", + "email": "invalid-email" + }`) + req, err = http.NewRequest(http.MethodPost, "/users", reqBody) + assert.Nil(t, err) + req.Header.Set("Content-Type", "application/json") + req.Header.Set("Authorization", TestToken) + + w = httptest.NewRecorder() + router.ServeHTTP(w, req) + assert.Equal(t, http.StatusBadRequest, w.Code) +} + +func TestPutUserById_Success(t *testing.T) { + SetupTestDB() + defer CleanupTestDB() + + modelSvc := service.NewModelService[models.User]() + u := models.User{} + id, err := modelSvc.InsertOne(u) + require.Nil(t, err) + u.SetId(id) + + router := gin.Default() + router.Use(middlewares.AuthorizationMiddleware()) + router.PUT("/users/:id", controllers.PutUserById) + + // Test case 1: Regular user update + reqBody := strings.NewReader(`{ + "id":"` + id.Hex() + `", + "username":"newUsername", + "email":"newEmail@test.com" + }`) + req, _ := http.NewRequest(http.MethodPut, "/users/"+id.Hex(), reqBody) + req.Header.Set("Content-Type", "application/json") + req.Header.Set("Authorization", TestToken) + + // Make request + w := httptest.NewRecorder() + router.ServeHTTP(w, req) + assert.Equal(t, http.StatusOK, w.Code) + + // Test case 2: Root admin user update (should not change username) + u.RootAdmin = true + err = modelSvc.ReplaceById(id, u) + assert.Nil(t, err) + + reqBody = strings.NewReader(`{ + "id":"` + id.Hex() + `", + "username":"attemptedNewUsername", + "email":"newEmail@test.com" + }`) + req, _ = http.NewRequest(http.MethodPut, "/users/"+id.Hex(), reqBody) + req.Header.Set("Content-Type", "application/json") + req.Header.Set("Authorization", TestToken) + + w = httptest.NewRecorder() + router.ServeHTTP(w, req) + assert.Equal(t, http.StatusOK, w.Code) + + // Verify username wasn't changed for root admin + updatedUser, err := modelSvc.GetById(id) + assert.Nil(t, err) + assert.NotEqual(t, "attemptedNewUsername", updatedUser.Username) +} + +func TestPostUserChangePassword_Success(t *testing.T) { + SetupTestDB() + defer CleanupTestDB() + + modelSvc := service.NewModelService[models.User]() + u := models.User{} + id, err := modelSvc.InsertOne(u) + require.Nil(t, err) + u.SetId(id) + + router := gin.Default() + router.Use(middlewares.AuthorizationMiddleware()) + router.POST("/users/:id/change-password", controllers.PostUserChangePassword) + + // Add validation for minimum password length + // Test case 1: Valid password + password := "validPassword123" + reqBody := strings.NewReader(`{"password":"` + password + `"}`) + req, _ := http.NewRequest(http.MethodPost, "/users/"+id.Hex()+"/change-password", reqBody) + req.Header.Set("Content-Type", "application/json") + req.Header.Set("Authorization", TestToken) + + w := httptest.NewRecorder() + router.ServeHTTP(w, req) + assert.Equal(t, http.StatusOK, w.Code) + + // Test case 2: Password too short + shortPassword := "1234" + reqBody = strings.NewReader(`{"password":"` + shortPassword + `"}`) + req, _ = http.NewRequest(http.MethodPost, "/users/"+id.Hex()+"/change-password", reqBody) + req.Header.Set("Content-Type", "application/json") + req.Header.Set("Authorization", TestToken) + + w = httptest.NewRecorder() + router.ServeHTTP(w, req) + assert.Equal(t, http.StatusBadRequest, w.Code) +} + +func TestGetUserMe_Success(t *testing.T) { + SetupTestDB() + defer CleanupTestDB() + + modelSvc := service.NewModelService[models.User]() + u := models.User{} + id, err := modelSvc.InsertOne(u) + require.Nil(t, err) + u.SetId(id) + + router := gin.Default() + router.Use(middlewares.AuthorizationMiddleware()) + router.GET("/users/me", controllers.GetUserMe) + + req, _ := http.NewRequest(http.MethodGet, "/users/me", nil) + req.Header.Set("Content-Type", "application/json") + req.Header.Set("Authorization", TestToken) + + w := httptest.NewRecorder() + router.ServeHTTP(w, req) + + assert.Equal(t, http.StatusOK, w.Code) +} + +func TestPutUserMe_Success(t *testing.T) { + SetupTestDB() + defer CleanupTestDB() + + // Create test user with required fields + modelSvc := service.NewModelService[models.User]() + u := models.User{ + Username: "originaluser", + Email: "original@example.com", + Password: utils.EncryptMd5("testpassword"), + } + id, err := modelSvc.InsertOne(u) + require.Nil(t, err) + u.SetId(id) + + // Create token for user + userSvc, err := user.GetUserService() + require.Nil(t, err) + token, err := userSvc.MakeToken(&u) + require.Nil(t, err) + + // Create router + router := gin.Default() + router.Use(middlewares.AuthorizationMiddleware()) + router.PUT("/users/me", controllers.PutUserMe) + + // Test valid update + reqBody := strings.NewReader(`{ + "username": "updateduser", + "email": "updated@example.com" + }`) + req, err := http.NewRequest(http.MethodPut, "/users/me", reqBody) + assert.Nil(t, err) + req.Header.Set("Content-Type", "application/json") + req.Header.Set("Authorization", token) + + w := httptest.NewRecorder() + router.ServeHTTP(w, req) + assert.Equal(t, http.StatusOK, w.Code) + + // Verify the update + updatedUser, err := modelSvc.GetById(id) + assert.Nil(t, err) + assert.Equal(t, "updateduser", updatedUser.Username) + assert.Equal(t, "updated@example.com", updatedUser.Email) + + // Verify password wasn't changed + assert.Equal(t, utils.EncryptMd5("testpassword"), updatedUser.Password) +} + +func TestPostUserMeChangePassword_Success(t *testing.T) { + SetupTestDB() + defer CleanupTestDB() + + // Create test user with initial password + modelSvc := service.NewModelService[models.User]() + u := models.User{ + Username: "testuser", + Password: utils.EncryptMd5("initialpassword"), + Email: "test@example.com", + } + id, err := modelSvc.InsertOne(u) + require.Nil(t, err) + u.SetId(id) + + // Create token for user + userSvc, err := user.GetUserService() + require.Nil(t, err) + token, err := userSvc.MakeToken(&u) + require.Nil(t, err) + + // Create router + router := gin.Default() + router.Use(middlewares.AuthorizationMiddleware()) + router.POST("/users/me/change-password", controllers.PostUserMeChangePassword) + + // Test valid password change + password := "newValidPassword123" + reqBody := strings.NewReader(`{"password":"` + password + `"}`) + req, err := http.NewRequest(http.MethodPost, "/users/me/change-password", reqBody) + assert.Nil(t, err) + req.Header.Set("Content-Type", "application/json") + req.Header.Set("Authorization", token) + + // Make request + w := httptest.NewRecorder() + router.ServeHTTP(w, req) + assert.Equal(t, http.StatusOK, w.Code) + + // Verify password was changed + updatedUser, err := modelSvc.GetById(id) + assert.Nil(t, err) + assert.Equal(t, utils.EncryptMd5(password), updatedUser.Password) + + // Test invalid password (too short) + shortPassword := "123" + reqBody = strings.NewReader(`{"password":"` + shortPassword + `"}`) + req, err = http.NewRequest(http.MethodPost, "/users/me/change-password", reqBody) + assert.Nil(t, err) + req.Header.Set("Content-Type", "application/json") + req.Header.Set("Authorization", TestToken) + + w = httptest.NewRecorder() + router.ServeHTTP(w, req) + assert.Equal(t, http.StatusBadRequest, w.Code) +} + +func TestDeleteUserById_Success(t *testing.T) { + SetupTestDB() + defer CleanupTestDB() + + // Create test user + modelSvc := service.NewModelService[models.User]() + u := models.User{ + Username: "testuser", + Email: "test@example.com", + Password: utils.EncryptMd5("testpassword"), + } + id, err := modelSvc.InsertOne(u) + require.Nil(t, err) + u.SetId(id) + + router := gin.Default() + router.Use(middlewares.AuthorizationMiddleware()) + router.DELETE("/users/:id", controllers.DeleteUserById) + + // Test deleting normal user + req, err := http.NewRequest(http.MethodDelete, "/users/"+id.Hex(), nil) + assert.Nil(t, err) + req.Header.Set("Content-Type", "application/json") + req.Header.Set("Authorization", TestToken) + + w := httptest.NewRecorder() + router.ServeHTTP(w, req) + assert.Equal(t, http.StatusOK, w.Code) + + // Verify user was deleted + _, err = modelSvc.GetById(id) + assert.NotNil(t, err) + + // Test deleting root admin user + rootAdmin := models.User{ + Username: "rootadmin", + Email: "root@example.com", + Password: utils.EncryptMd5("rootpass"), + RootAdmin: true, + } + rootId, err := modelSvc.InsertOne(rootAdmin) + require.Nil(t, err) + + req, err = http.NewRequest(http.MethodDelete, "/users/"+rootId.Hex(), nil) + assert.Nil(t, err) + req.Header.Set("Content-Type", "application/json") + req.Header.Set("Authorization", TestToken) + + w = httptest.NewRecorder() + router.ServeHTTP(w, req) + assert.Equal(t, http.StatusForbidden, w.Code) + + // Test deleting with invalid ID + req, err = http.NewRequest(http.MethodDelete, "/users/invalid-id", nil) + assert.Nil(t, err) + req.Header.Set("Content-Type", "application/json") + req.Header.Set("Authorization", TestToken) + + w = httptest.NewRecorder() + router.ServeHTTP(w, req) + assert.Equal(t, http.StatusBadRequest, w.Code) +} + +func TestDeleteUserList_Success(t *testing.T) { + SetupTestDB() + defer CleanupTestDB() + + modelSvc := service.NewModelService[models.User]() + + // Create test users + users := []models.User{ + {Username: "user1", Email: "user1@example.com", Password: utils.EncryptMd5("pass1")}, + {Username: "user2", Email: "user2@example.com", Password: utils.EncryptMd5("pass2")}, + {Username: "rootadmin", Email: "root@example.com", Password: utils.EncryptMd5("rootpass"), RootAdmin: true}, + } + + var userIds []primitive.ObjectID + var normalUserIds []primitive.ObjectID + for _, user := range users { + id, err := modelSvc.InsertOne(user) + require.Nil(t, err) + userIds = append(userIds, id) + if !user.RootAdmin { + normalUserIds = append(normalUserIds, id) + } + } + + router := gin.Default() + router.Use(middlewares.AuthorizationMiddleware()) + router.DELETE("/users", controllers.DeleteUserList) + + // Test deleting normal users + reqBody := strings.NewReader(fmt.Sprintf(`{"ids":["%s","%s"]}`, + normalUserIds[0].Hex(), + normalUserIds[1].Hex())) + req, err := http.NewRequest(http.MethodDelete, "/users", reqBody) + assert.Nil(t, err) + req.Header.Set("Content-Type", "application/json") + req.Header.Set("Authorization", TestToken) + + w := httptest.NewRecorder() + router.ServeHTTP(w, req) + assert.Equal(t, http.StatusOK, w.Code) + + // Verify users were deleted + for _, id := range normalUserIds { + _, err = modelSvc.GetById(id) + assert.NotNil(t, err) + } + + // Test attempting to delete list including root admin + reqBody = strings.NewReader(fmt.Sprintf(`{"ids":["%s"]}`, userIds[2].Hex())) + req, err = http.NewRequest(http.MethodDelete, "/users", reqBody) + assert.Nil(t, err) + req.Header.Set("Content-Type", "application/json") + req.Header.Set("Authorization", TestToken) + + w = httptest.NewRecorder() + router.ServeHTTP(w, req) + assert.Equal(t, http.StatusForbidden, w.Code) + + // Test with mix of valid and invalid ids + reqBody = strings.NewReader(fmt.Sprintf(`{"ids":["%s","invalid-id"]}`, normalUserIds[0].Hex())) + req, err = http.NewRequest(http.MethodDelete, "/users", reqBody) + assert.Nil(t, err) + req.Header.Set("Content-Type", "application/json") + req.Header.Set("Authorization", TestToken) + + w = httptest.NewRecorder() + router.ServeHTTP(w, req) + assert.Equal(t, http.StatusBadRequest, w.Code) +} diff --git a/core/controllers/user_v2.go b/core/controllers/user_v2.go deleted file mode 100644 index 434b20614..000000000 --- a/core/controllers/user_v2.go +++ /dev/null @@ -1,126 +0,0 @@ -package controllers - -import ( - "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/core/models/service" - "github.com/crawlab-team/crawlab/core/utils" - "github.com/gin-gonic/gin" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -func PostUser(c *gin.Context) { - var payload struct { - Username string `json:"username"` - Password string `json:"password"` - Role string `json:"role"` - Email string `json:"email"` - } - if err := c.ShouldBindJSON(&payload); err != nil { - HandleErrorBadRequest(c, err) - return - } - u := GetUserFromContextV2(c) - model := models.UserV2{ - Username: payload.Username, - Password: utils.EncryptMd5(payload.Password), - Role: payload.Role, - Email: payload.Email, - } - model.SetCreated(u.Id) - model.SetUpdated(u.Id) - id, err := service.NewModelServiceV2[models.UserV2]().InsertOne(model) - if err != nil { - HandleErrorInternalServerError(c, err) - return - } - - result, err := service.NewModelServiceV2[models.UserV2]().GetById(id) - if err != nil { - HandleErrorInternalServerError(c, err) - return - } - - HandleSuccessWithData(c, result) - -} - -func PostUserChangePassword(c *gin.Context) { - // get id - id, err := primitive.ObjectIDFromHex(c.Param("id")) - if err != nil { - HandleErrorBadRequest(c, err) - return - } - - // get payload - var payload struct { - Password string `json:"password"` - } - if err := c.ShouldBindJSON(&payload); err != nil { - HandleErrorBadRequest(c, err) - return - } - - // get user - u := GetUserFromContextV2(c) - modelSvc := service.NewModelServiceV2[models.UserV2]() - - // update password - user, err := modelSvc.GetById(id) - if err != nil { - HandleErrorInternalServerError(c, err) - return - } - user.SetUpdated(u.Id) - user.Password = utils.EncryptMd5(payload.Password) - if err := modelSvc.ReplaceById(user.Id, *user); err != nil { - HandleErrorInternalServerError(c, err) - return - } - - // handle success - HandleSuccess(c) -} - -func GetUserMe(c *gin.Context) { - u := GetUserFromContextV2(c) - _u, err := service.NewModelServiceV2[models.UserV2]().GetById(u.Id) - if err != nil { - HandleErrorInternalServerError(c, err) - return - } - HandleSuccessWithData(c, _u) -} - -func PutUserById(c *gin.Context) { - // get payload - var user models.UserV2 - if err := c.ShouldBindJSON(&user); err != nil { - HandleErrorBadRequest(c, err) - return - } - - // get user - u := GetUserFromContextV2(c) - - modelSvc := service.NewModelServiceV2[models.UserV2]() - - // update user - userDb, err := modelSvc.GetById(u.Id) - if err != nil { - HandleErrorInternalServerError(c, err) - return - } - user.Password = userDb.Password - user.SetUpdated(u.Id) - if user.Id.IsZero() { - user.Id = u.Id - } - if err := modelSvc.ReplaceById(u.Id, user); err != nil { - HandleErrorInternalServerError(c, err) - return - } - - // handle success - HandleSuccess(c) -} diff --git a/core/controllers/user_v2_test.go b/core/controllers/user_v2_test.go deleted file mode 100644 index c86739fc6..000000000 --- a/core/controllers/user_v2_test.go +++ /dev/null @@ -1,89 +0,0 @@ -package controllers_test - -import ( - "github.com/crawlab-team/crawlab/core/controllers" - "github.com/crawlab-team/crawlab/core/middlewares" - "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/core/models/service" - "github.com/gin-gonic/gin" - "github.com/stretchr/testify/assert" - "net/http" - "net/http/httptest" - "strings" - "testing" -) - -func TestPostUserChangePassword_Success(t *testing.T) { - SetupTestDB() - defer CleanupTestDB() - - modelSvc := service.NewModelServiceV2[models.UserV2]() - u := models.UserV2{} - id, err := modelSvc.InsertOne(u) - assert.Nil(t, err) - u.SetId(id) - - router := gin.Default() - router.Use(middlewares.AuthorizationMiddlewareV2()) - router.POST("/users/:id/change-password", controllers.PostUserChangePassword) - - password := "newPassword" - reqBody := strings.NewReader(`{"password":"` + password + `"}`) - req, _ := http.NewRequest(http.MethodPost, "/users/"+id.Hex()+"/change-password", reqBody) - req.Header.Set("Content-Type", "application/json") - req.Header.Set("Authorization", TestToken) - - w := httptest.NewRecorder() - router.ServeHTTP(w, req) - - assert.Equal(t, http.StatusOK, w.Code) -} - -func TestGetUserMe_Success(t *testing.T) { - SetupTestDB() - defer CleanupTestDB() - - modelSvc := service.NewModelServiceV2[models.UserV2]() - u := models.UserV2{} - id, err := modelSvc.InsertOne(u) - assert.Nil(t, err) - u.SetId(id) - - router := gin.Default() - router.Use(middlewares.AuthorizationMiddlewareV2()) - router.GET("/users/me", controllers.GetUserMe) - - req, _ := http.NewRequest(http.MethodGet, "/users/me", nil) - req.Header.Set("Content-Type", "application/json") - req.Header.Set("Authorization", TestToken) - - w := httptest.NewRecorder() - router.ServeHTTP(w, req) - - assert.Equal(t, http.StatusOK, w.Code) -} - -func TestPutUserById_Success(t *testing.T) { - SetupTestDB() - defer CleanupTestDB() - - modelSvc := service.NewModelServiceV2[models.UserV2]() - u := models.UserV2{} - id, err := modelSvc.InsertOne(u) - assert.Nil(t, err) - u.SetId(id) - - router := gin.Default() - router.Use(middlewares.AuthorizationMiddlewareV2()) - router.PUT("/users/me", controllers.PutUserById) - - reqBody := strings.NewReader(`{"id":"` + id.Hex() + `","username":"newUsername","email":"newEmail@test.com"}`) - req, _ := http.NewRequest(http.MethodPut, "/users/me", reqBody) - req.Header.Set("Content-Type", "application/json") - req.Header.Set("Authorization", TestToken) - - w := httptest.NewRecorder() - router.ServeHTTP(w, req) - - assert.Equal(t, http.StatusOK, w.Code) -} diff --git a/core/controllers/utils_context.go b/core/controllers/utils_context.go index 9365bd0de..506c7549e 100644 --- a/core/controllers/utils_context.go +++ b/core/controllers/utils_context.go @@ -2,29 +2,16 @@ package controllers import ( "github.com/crawlab-team/crawlab/core/constants" - "github.com/crawlab-team/crawlab/core/interfaces" "github.com/crawlab-team/crawlab/core/models/models" "github.com/gin-gonic/gin" ) -func GetUserFromContext(c *gin.Context) (u interfaces.User) { +func GetUserFromContext(c *gin.Context) (u *models.User) { value, ok := c.Get(constants.UserContextKey) if !ok { return nil } - u, ok = value.(interfaces.User) - if !ok { - return nil - } - return u -} - -func GetUserFromContextV2(c *gin.Context) (u *models.UserV2) { - value, ok := c.Get(constants.UserContextKey) - if !ok { - return nil - } - u, ok = value.(*models.UserV2) + u, ok = value.(*models.User) if !ok { return nil } diff --git a/core/controllers/utils_filter.go b/core/controllers/utils_filter.go index 9a7b619cf..7bc5e1684 100644 --- a/core/controllers/utils_filter.go +++ b/core/controllers/utils_filter.go @@ -2,9 +2,10 @@ package controllers import ( "encoding/json" + errors2 "errors" "github.com/crawlab-team/crawlab/core/constants" "github.com/crawlab-team/crawlab/core/entity" - "github.com/crawlab-team/crawlab/core/errors" + "github.com/crawlab-team/crawlab/core/mongo" "github.com/crawlab-team/crawlab/core/utils" "github.com/gin-gonic/gin" "go.mongodb.org/mongo-driver/bson" @@ -56,6 +57,8 @@ func GetFilter(c *gin.Context) (f *entity.Filter, err error) { items = append(items, item) } conditions[i].Value = items + default: + return nil, errors2.New("invalid type") } } @@ -110,7 +113,7 @@ func GetFilterAll(c *gin.Context) (res bool, err error) { case "FALSE": return false, nil default: - return false, errors.ErrorFilterInvalidOperation + return false, errors2.New("invalid value") } } @@ -121,3 +124,18 @@ func MustGetFilterAll(c *gin.Context) (res bool) { } return res } + +func getResultListQuery(c *gin.Context) (q mongo.ListQuery) { + f, err := GetFilter(c) + if err != nil { + return q + } + for _, cond := range f.Conditions { + q = append(q, mongo.ListQueryCondition{ + Key: cond.Key, + Op: cond.Op, + Value: utils.NormalizeObjectId(cond.Value), + }) + } + return q +} diff --git a/core/controllers/utils_http.go b/core/controllers/utils_http.go index a26f4ea1d..0d50231de 100644 --- a/core/controllers/utils_http.go +++ b/core/controllers/utils_http.go @@ -3,13 +3,14 @@ package controllers import ( "github.com/crawlab-team/crawlab/core/constants" "github.com/crawlab-team/crawlab/core/entity" + "github.com/crawlab-team/crawlab/core/utils" "github.com/crawlab-team/crawlab/trace" "github.com/gin-gonic/gin" "net/http" ) -func handleError(statusCode int, c *gin.Context, err error, print bool) { - if print { +func handleError(statusCode int, c *gin.Context, err error) { + if utils.IsDev() { trace.PrintError(err) } c.AbortWithStatusJSON(statusCode, entity.Response{ @@ -20,11 +21,7 @@ func handleError(statusCode int, c *gin.Context, err error, print bool) { } func HandleError(statusCode int, c *gin.Context, err error) { - handleError(statusCode, c, err, true) -} - -func HandleErrorNoPrint(statusCode int, c *gin.Context, err error) { - handleError(statusCode, c, err, false) + handleError(statusCode, c, err) } func HandleErrorBadRequest(c *gin.Context, err error) { @@ -43,10 +40,6 @@ func HandleErrorNotFound(c *gin.Context, err error) { HandleError(http.StatusNotFound, c, err) } -func HandleErrorNotFoundNoPrint(c *gin.Context, err error) { - HandleErrorNoPrint(http.StatusNotFound, c, err) -} - func HandleErrorInternalServerError(c *gin.Context, err error) { HandleError(http.StatusInternalServerError, c, err) } diff --git a/core/controllers/utils_logger.go b/core/controllers/utils_logger.go new file mode 100644 index 000000000..002ff743f --- /dev/null +++ b/core/controllers/utils_logger.go @@ -0,0 +1,5 @@ +package controllers + +import "github.com/crawlab-team/crawlab/core/utils" + +var logger = utils.NewLogger("Controllers") diff --git a/core/controllers/utils_pagination.go b/core/controllers/utils_pagination.go index d16278af8..4f148ecf3 100644 --- a/core/controllers/utils_pagination.go +++ b/core/controllers/utils_pagination.go @@ -18,6 +18,12 @@ func GetPagination(c *gin.Context) (p *entity.Pagination, err error) { if err := c.ShouldBindQuery(&_p); err != nil { return GetDefaultPagination(), err } + if _p.Page == 0 { + _p.Page = constants.PaginationDefaultPage + } + if _p.Size == 0 { + _p.Size = constants.PaginationDefaultSize + } return &_p, nil } diff --git a/core/controllers/ws_writer.go b/core/controllers/ws_writer.go index 798b162c1..dcc096c32 100644 --- a/core/controllers/ws_writer.go +++ b/core/controllers/ws_writer.go @@ -1,8 +1,6 @@ package controllers import ( - "github.com/apex/log" - "github.com/crawlab-team/crawlab/trace" "github.com/gin-gonic/gin" "github.com/gorilla/websocket" "io" @@ -16,7 +14,7 @@ type WsWriter struct { } func (w *WsWriter) Write(data []byte) (n int, err error) { - log.Infof("websocket write: %s", string(data)) + logger.Infof("websocket write: %s", string(data)) err = w.conn.WriteMessage(websocket.TextMessage, data) if err != nil { return 0, err @@ -47,8 +45,7 @@ func NewWsWriter(c *gin.Context) (writer *WsWriter, err error) { conn, err := upgrader.Upgrade(c.Writer, c.Request, nil) if err != nil { - log.Errorf("websocket open connection error: %v", err) - trace.PrintError(err) + logger.Errorf("websocket open connection error: %v", err) } return &WsWriter{ diff --git a/core/data/colors.go b/core/data/colors.go deleted file mode 100644 index 6c97fb873..000000000 --- a/core/data/colors.go +++ /dev/null @@ -1,5212 +0,0 @@ -package data - -const ColorsDataText = `[ - { - "name": "Absolute Zero", - "hex": "#0048BA" - }, - { - "name": "Acid Green", - "hex": "#B0BF1A" - }, - { - "name": "Aero", - "hex": "#7CB9E8" - }, - { - "name": "Aero Blue", - "hex": "#C9FFE5" - }, - { - "name": "African Violet", - "hex": "#B284BE" - }, - { - "name": "Air Force Blue (RAF)", - "hex": "#5D8AA8" - }, - { - "name": "Air Force Blue (USAF)", - "hex": "#00308F" - }, - { - "name": "Air Superiority Blue", - "hex": "#72A0C1" - }, - { - "name": "Alabama Crimson", - "hex": "#AF002A" - }, - { - "name": "Alabaster", - "hex": "#F2F0E6" - }, - { - "name": "Alice Blue", - "hex": "#F0F8FF" - }, - { - "name": "Alien Armpit", - "hex": "#84DE02" - }, - { - "name": "Alizarin Crimson", - "hex": "#E32636" - }, - { - "name": "Alloy Orange", - "hex": "#C46210" - }, - { - "name": "Almond", - "hex": "#EFDECD" - }, - { - "name": "Amaranth", - "hex": "#E52B50" - }, - { - "name": "Amaranth Deep Purple", - "hex": "#9F2B68" - }, - { - "name": "Amaranth Pink", - "hex": "#F19CBB" - }, - { - "name": "Amaranth Purple", - "hex": "#AB274F" - }, - { - "name": "Amaranth Red", - "hex": "#D3212D" - }, - { - "name": "Amazon Store", - "hex": "#3B7A57" - }, - { - "name": "Amazonite", - "hex": "#00C4B0" - }, - { - "name": "Amber", - "hex": "#FFBF00" - }, - { - "name": "Amber (SAE/ECE)", - "hex": "#FF7E00" - }, - { - "name": "American Rose", - "hex": "#FF033E" - }, - { - "name": "Amethyst", - "hex": "#9966CC" - }, - { - "name": "Android Green", - "hex": "#A4C639" - }, - { - "name": "Anti-Flash White", - "hex": "#F2F3F4" - }, - { - "name": "Antique Brass", - "hex": "#CD9575" - }, - { - "name": "Antique Bronze", - "hex": "#665D1E" - }, - { - "name": "Antique Fuchsia", - "hex": "#915C83" - }, - { - "name": "Antique Ruby", - "hex": "#841B2D" - }, - { - "name": "Antique White", - "hex": "#FAEBD7" - }, - { - "name": "Ao (English)", - "hex": "#008000" - }, - { - "name": "Apple Green", - "hex": "#8DB600" - }, - { - "name": "Apricot", - "hex": "#FBCEB1" - }, - { - "name": "Aqua", - "hex": "#00FFFF" - }, - { - "name": "Aquamarine", - "hex": "#7FFFD4" - }, - { - "name": "Arctic Lime", - "hex": "#D0FF14" - }, - { - "name": "Army Green", - "hex": "#4B5320" - }, - { - "name": "Arsenic", - "hex": "#3B444B" - }, - { - "name": "Artichoke", - "hex": "#8F9779" - }, - { - "name": "Arylide Yellow", - "hex": "#E9D66B" - }, - { - "name": "Ash Gray", - "hex": "#B2BEB5" - }, - { - "name": "Asparagus", - "hex": "#87A96B" - }, - { - "name": "Atomic Tangerine", - "hex": "#FF9966" - }, - { - "name": "Auburn", - "hex": "#A52A2A" - }, - { - "name": "Aureolin", - "hex": "#FDEE00" - }, - { - "name": "AuroMetalSaurus", - "hex": "#6E7F80" - }, - { - "name": "Avocado", - "hex": "#568203" - }, - { - "name": "Awesome", - "hex": "#FF2052" - }, - { - "name": "Aztec Gold", - "hex": "#C39953" - }, - { - "name": "Azure", - "hex": "#007FFF" - }, - { - "name": "Azure (Web Color)", - "hex": "#F0FFFF" - }, - { - "name": "Azure Mist", - "hex": "#F0FFFF" - }, - { - "name": "Azureish White", - "hex": "#DBE9F4" - }, - { - "name": "Baby Blue", - "hex": "#89CFF0" - }, - { - "name": "Baby Blue Eyes", - "hex": "#A1CAF1" - }, - { - "name": "Baby Pink", - "hex": "#F4C2C2" - }, - { - "name": "Baby Powder", - "hex": "#FEFEFA" - }, - { - "name": "Baker-Miller Pink", - "hex": "#FF91AF" - }, - { - "name": "Ball Blue", - "hex": "#21ABCD" - }, - { - "name": "Banana Mania", - "hex": "#FAE7B5" - }, - { - "name": "Banana Yellow", - "hex": "#FFE135" - }, - { - "name": "Bangladesh Green", - "hex": "#006A4E" - }, - { - "name": "Barbie Pink", - "hex": "#E0218A" - }, - { - "name": "Barn Red", - "hex": "#7C0A02" - }, - { - "name": "Battery Charged Blue", - "hex": "#1DACD6" - }, - { - "name": "Battleship Grey", - "hex": "#848482" - }, - { - "name": "Bazaar", - "hex": "#98777B" - }, - { - "name": "Beau Blue", - "hex": "#BCD4E6" - }, - { - "name": "Beaver", - "hex": "#9F8170" - }, - { - "name": "Begonia", - "hex": "#FA6E79" - }, - { - "name": "Beige", - "hex": "#F5F5DC" - }, - { - "name": "B'dazzled Blue", - "hex": "#2E5894" - }, - { - "name": "Big Dip O'ruby", - "hex": "#9C2542" - }, - { - "name": "Big Foot Feet", - "hex": "#E88E5A" - }, - { - "name": "Bisque", - "hex": "#FFE4C4" - }, - { - "name": "Bistre", - "hex": "#3D2B1F" - }, - { - "name": "Bistre Brown", - "hex": "#967117" - }, - { - "name": "Bitter Lemon", - "hex": "#CAE00D" - }, - { - "name": "Bitter Lime", - "hex": "#BFFF00" - }, - { - "name": "Bittersweet", - "hex": "#FE6F5E" - }, - { - "name": "Bittersweet Shimmer", - "hex": "#BF4F51" - }, - { - "name": "Black", - "hex": "#000000" - }, - { - "name": "Black Bean", - "hex": "#3D0C02" - }, - { - "name": "Black Coral", - "hex": "#54626F" - }, - { - "name": "Black Leather Jacket", - "hex": "#253529" - }, - { - "name": "Black Olive", - "hex": "#3B3C36" - }, - { - "name": "Black Shadows", - "hex": "#BFAFB2" - }, - { - "name": "Blanched Almond", - "hex": "#FFEBCD" - }, - { - "name": "Blast-Off Bronze", - "hex": "#A57164" - }, - { - "name": "Bleu De France", - "hex": "#318CE7" - }, - { - "name": "Blizzard Blue", - "hex": "#ACE5EE" - }, - { - "name": "Blond", - "hex": "#FAF0BE" - }, - { - "name": "Blue", - "hex": "#0000FF" - }, - { - "name": "Blue (Crayola)", - "hex": "#1F75FE" - }, - { - "name": "Blue (Munsell)", - "hex": "#0093AF" - }, - { - "name": "Blue (NCS)", - "hex": "#0087BD" - }, - { - "name": "Blue (Pantone)", - "hex": "#0018A8" - }, - { - "name": "Blue (Pigment)", - "hex": "#333399" - }, - { - "name": "Blue (RYB)", - "hex": "#0247FE" - }, - { - "name": "Blue Bell", - "hex": "#A2A2D0" - }, - { - "name": "Blue Bolt", - "hex": "#00B9FB" - }, - { - "name": "Blue-Gray", - "hex": "#6699CC" - }, - { - "name": "Blue-Green", - "hex": "#0D98BA" - }, - { - "name": "Blue Jeans", - "hex": "#5DADEC" - }, - { - "name": "Blue Lagoon", - "hex": "#ACE5EE" - }, - { - "name": "Blue-Magenta Violet", - "hex": "#553592" - }, - { - "name": "Blue Sapphire", - "hex": "#126180" - }, - { - "name": "Blue-Violet", - "hex": "#8A2BE2" - }, - { - "name": "Blue Yonder", - "hex": "#5072A7" - }, - { - "name": "Blueberry", - "hex": "#4F86F7" - }, - { - "name": "Bluebonnet", - "hex": "#1C1CF0" - }, - { - "name": "Blush", - "hex": "#DE5D83" - }, - { - "name": "Bole", - "hex": "#79443B" - }, - { - "name": "Bondi Blue", - "hex": "#0095B6" - }, - { - "name": "Bone", - "hex": "#E3DAC9" - }, - { - "name": "Booger Buster", - "hex": "#DDE26A" - }, - { - "name": "Boston University Red", - "hex": "#CC0000" - }, - { - "name": "Bottle Green", - "hex": "#006A4E" - }, - { - "name": "Boysenberry", - "hex": "#873260" - }, - { - "name": "Brandeis Blue", - "hex": "#0070FF" - }, - { - "name": "Brass", - "hex": "#B5A642" - }, - { - "name": "Brick Red", - "hex": "#CB4154" - }, - { - "name": "Bright Cerulean", - "hex": "#1DACD6" - }, - { - "name": "Bright Green", - "hex": "#66FF00" - }, - { - "name": "Bright Lavender", - "hex": "#BF94E4" - }, - { - "name": "Bright Lilac", - "hex": "#D891EF" - }, - { - "name": "Bright Maroon", - "hex": "#C32148" - }, - { - "name": "Bright Navy Blue", - "hex": "#1974D2" - }, - { - "name": "Bright Pink", - "hex": "#FF007F" - }, - { - "name": "Bright Turquoise", - "hex": "#08E8DE" - }, - { - "name": "Bright Ube", - "hex": "#D19FE8" - }, - { - "name": "Bright Yellow (Crayola)", - "hex": "#FFAA1D" - }, - { - "name": "Brilliant Azure", - "hex": "#3399FF" - }, - { - "name": "Brilliant Lavender", - "hex": "#F4BBFF" - }, - { - "name": "Brilliant Rose", - "hex": "#FF55A3" - }, - { - "name": "Brink Pink", - "hex": "#FB607F" - }, - { - "name": "British Racing Green", - "hex": "#004225" - }, - { - "name": "Bronze", - "hex": "#CD7F32" - }, - { - "name": "Bronze Yellow", - "hex": "#737000" - }, - { - "name": "Brown (Traditional)", - "hex": "#964B00" - }, - { - "name": "Brown (Web)", - "hex": "#A52A2A" - }, - { - "name": "Brown-Nose", - "hex": "#6B4423" - }, - { - "name": "Brown Sugar", - "hex": "#AF6E4D" - }, - { - "name": "Brown Yellow", - "hex": "#cc9966" - }, - { - "name": "Brunswick Green", - "hex": "#1B4D3E" - }, - { - "name": "Bubble Gum", - "hex": "#FFC1CC" - }, - { - "name": "Bubbles", - "hex": "#E7FEFF" - }, - { - "name": "Bud Green", - "hex": "#7BB661" - }, - { - "name": "Buff", - "hex": "#F0DC82" - }, - { - "name": "Bulgarian Rose", - "hex": "#480607" - }, - { - "name": "Burgundy", - "hex": "#800020" - }, - { - "name": "Burlywood", - "hex": "#DEB887" - }, - { - "name": "Burnished Brown", - "hex": "#A17A74" - }, - { - "name": "Burnt Orange", - "hex": "#CC5500" - }, - { - "name": "Burnt Sienna", - "hex": "#E97451" - }, - { - "name": "Burnt Umber", - "hex": "#8A3324" - }, - { - "name": "Button Blue", - "hex": "#24A0ED" - }, - { - "name": "Byzantine", - "hex": "#BD33A4" - }, - { - "name": "Byzantium", - "hex": "#702963" - }, - { - "name": "Cadet", - "hex": "#536872" - }, - { - "name": "Cadet Blue", - "hex": "#5F9EA0" - }, - { - "name": "Cadet Grey", - "hex": "#91A3B0" - }, - { - "name": "Cadmium Green", - "hex": "#006B3C" - }, - { - "name": "Cadmium Orange", - "hex": "#ED872D" - }, - { - "name": "Cadmium Red", - "hex": "#E30022" - }, - { - "name": "Cadmium Yellow", - "hex": "#FFF600" - }, - { - "name": "Cafe Au Lait", - "hex": "#A67B5B" - }, - { - "name": "Cafe Noir", - "hex": "#4B3621" - }, - { - "name": "Cal Poly Pomona Green", - "hex": "#1E4D2B" - }, - { - "name": "Cambridge Blue", - "hex": "#A3C1AD" - }, - { - "name": "Camel", - "hex": "#C19A6B" - }, - { - "name": "Cameo Pink", - "hex": "#EFBBCC" - }, - { - "name": "Camouflage Green", - "hex": "#78866B" - }, - { - "name": "Canary", - "hex": "#FFFF99" - }, - { - "name": "Canary Yellow", - "hex": "#FFEF00" - }, - { - "name": "Candy Apple Red", - "hex": "#FF0800" - }, - { - "name": "Candy Pink", - "hex": "#E4717A" - }, - { - "name": "Capri", - "hex": "#00BFFF" - }, - { - "name": "Caput Mortuum", - "hex": "#592720" - }, - { - "name": "Cardinal", - "hex": "#C41E3A" - }, - { - "name": "Caribbean Green", - "hex": "#00CC99" - }, - { - "name": "Carmine", - "hex": "#960018" - }, - { - "name": "Carmine (M&P)", - "hex": "#D70040" - }, - { - "name": "Carmine Pink", - "hex": "#EB4C42" - }, - { - "name": "Carmine Red", - "hex": "#FF0038" - }, - { - "name": "Carnation Pink", - "hex": "#FFA6C9" - }, - { - "name": "Carnelian", - "hex": "#B31B1B" - }, - { - "name": "Carolina Blue", - "hex": "#56A0D3" - }, - { - "name": "Carrot Orange", - "hex": "#ED9121" - }, - { - "name": "Castleton Green", - "hex": "#00563F" - }, - { - "name": "Catalina Blue", - "hex": "#062A78" - }, - { - "name": "Catawba", - "hex": "#703642" - }, - { - "name": "Cedar Chest", - "hex": "#C95A49" - }, - { - "name": "Ceil", - "hex": "#92A1CF" - }, - { - "name": "Celadon", - "hex": "#ACE1AF" - }, - { - "name": "Celadon Blue", - "hex": "#007BA7" - }, - { - "name": "Celadon Green", - "hex": "#2F847C" - }, - { - "name": "Celeste", - "hex": "#B2FFFF" - }, - { - "name": "Celestial Blue", - "hex": "#4997D0" - }, - { - "name": "Cerise", - "hex": "#DE3163" - }, - { - "name": "Cerise Pink", - "hex": "#EC3B83" - }, - { - "name": "Cerulean", - "hex": "#007BA7" - }, - { - "name": "Cerulean Blue", - "hex": "#2A52BE" - }, - { - "name": "Cerulean Frost", - "hex": "#6D9BC3" - }, - { - "name": "CG Blue", - "hex": "#007AA5" - }, - { - "name": "CG Red", - "hex": "#E03C31" - }, - { - "name": "Chamoisee", - "hex": "#A0785A" - }, - { - "name": "Champagne", - "hex": "#F7E7CE" - }, - { - "name": "Champagne Pink", - "hex": "#F1DDCF" - }, - { - "name": "Charcoal", - "hex": "#36454F" - }, - { - "name": "Charleston Green", - "hex": "#232B2B" - }, - { - "name": "Charm Pink", - "hex": "#E68FAC" - }, - { - "name": "Chartreuse (Traditional)", - "hex": "#DFFF00" - }, - { - "name": "Chartreuse (Web)", - "hex": "#7FFF00" - }, - { - "name": "Cherry", - "hex": "#DE3163" - }, - { - "name": "Cherry Blossom Pink", - "hex": "#FFB7C5" - }, - { - "name": "Chestnut", - "hex": "#954535" - }, - { - "name": "China Pink", - "hex": "#DE6FA1" - }, - { - "name": "China Rose", - "hex": "#A8516E" - }, - { - "name": "Chinese Red", - "hex": "#AA381E" - }, - { - "name": "Chinese Violet", - "hex": "#856088" - }, - { - "name": "Chlorophyll Green", - "hex": "#4AFF00" - }, - { - "name": "Chocolate (Traditional)", - "hex": "#7B3F00" - }, - { - "name": "Chocolate (Web)", - "hex": "#D2691E" - }, - { - "name": "Chrome Yellow", - "hex": "#FFA700" - }, - { - "name": "Cinereous", - "hex": "#98817B" - }, - { - "name": "Cinnabar", - "hex": "#E34234" - }, - { - "name": "Cinnamon", - "hex": "#D2691E" - }, - { - "name": "Cinnamon Satin", - "hex": "#CD607E" - }, - { - "name": "Citrine", - "hex": "#E4D00A" - }, - { - "name": "Citron", - "hex": "#9FA91F" - }, - { - "name": "Claret", - "hex": "#7F1734" - }, - { - "name": "Classic Rose", - "hex": "#FBCCE7" - }, - { - "name": "Cobalt Blue", - "hex": "#0047AB" - }, - { - "name": "Cocoa Brown", - "hex": "#D2691E" - }, - { - "name": "Coconut", - "hex": "#965A3E" - }, - { - "name": "Coffee", - "hex": "#6F4E37" - }, - { - "name": "Columbia Blue", - "hex": "#C4D8E2" - }, - { - "name": "Congo Pink", - "hex": "#F88379" - }, - { - "name": "Cool Black", - "hex": "#002E63" - }, - { - "name": "Cool Grey", - "hex": "#8C92AC" - }, - { - "name": "Copper", - "hex": "#B87333" - }, - { - "name": "Copper (Crayola)", - "hex": "#DA8A67" - }, - { - "name": "Copper Penny", - "hex": "#AD6F69" - }, - { - "name": "Copper Red", - "hex": "#CB6D51" - }, - { - "name": "Copper Rose", - "hex": "#996666" - }, - { - "name": "Coquelicot", - "hex": "#FF3800" - }, - { - "name": "Coral", - "hex": "#FF7F50" - }, - { - "name": "Coral Pink", - "hex": "#F88379" - }, - { - "name": "Coral Red", - "hex": "#FF4040" - }, - { - "name": "Coral Reef", - "hex": "#FD7C6E" - }, - { - "name": "Cordovan", - "hex": "#893F45" - }, - { - "name": "Corn", - "hex": "#FBEC5D" - }, - { - "name": "Cornell Red", - "hex": "#B31B1B" - }, - { - "name": "Cornflower Blue", - "hex": "#6495ED" - }, - { - "name": "Cornsilk", - "hex": "#FFF8DC" - }, - { - "name": "Cosmic Cobalt", - "hex": "#2E2D88" - }, - { - "name": "Cosmic Latte", - "hex": "#FFF8E7" - }, - { - "name": "Coyote Brown", - "hex": "#81613C" - }, - { - "name": "Cotton Candy", - "hex": "#FFBCD9" - }, - { - "name": "Cream", - "hex": "#FFFDD0" - }, - { - "name": "Crimson", - "hex": "#DC143C" - }, - { - "name": "Crimson Glory", - "hex": "#BE0032" - }, - { - "name": "Crimson Red", - "hex": "#990000" - }, - { - "name": "Cultured", - "hex": "#F5F5F5" - }, - { - "name": "Cyan", - "hex": "#00FFFF" - }, - { - "name": "Cyan Azure", - "hex": "#4E82B4" - }, - { - "name": "Cyan-Blue Azure", - "hex": "#4682BF" - }, - { - "name": "Cyan Cobalt Blue", - "hex": "#28589C" - }, - { - "name": "Cyan Cornflower Blue", - "hex": "#188BC2" - }, - { - "name": "Cyan (Process)", - "hex": "#00B7EB" - }, - { - "name": "Cyber Grape", - "hex": "#58427C" - }, - { - "name": "Cyber Yellow", - "hex": "#FFD300" - }, - { - "name": "Cyclamen", - "hex": "#F56FA1" - }, - { - "name": "Daffodil", - "hex": "#FFFF31" - }, - { - "name": "Dandelion", - "hex": "#F0E130" - }, - { - "name": "Dark Blue", - "hex": "#00008B" - }, - { - "name": "Dark Blue-Gray", - "hex": "#666699" - }, - { - "name": "Dark Brown", - "hex": "#654321" - }, - { - "name": "Dark Brown-Tangelo", - "hex": "#88654E" - }, - { - "name": "Dark Byzantium", - "hex": "#5D3954" - }, - { - "name": "Dark Candy Apple Red", - "hex": "#A40000" - }, - { - "name": "Dark Cerulean", - "hex": "#08457E" - }, - { - "name": "Dark Chestnut", - "hex": "#986960" - }, - { - "name": "Dark Coral", - "hex": "#CD5B45" - }, - { - "name": "Dark Cyan", - "hex": "#008B8B" - }, - { - "name": "Dark Electric Blue", - "hex": "#536878" - }, - { - "name": "Dark Goldenrod", - "hex": "#B8860B" - }, - { - "name": "Dark Gray (X11)", - "hex": "#A9A9A9" - }, - { - "name": "Dark Green", - "hex": "#013220" - }, - { - "name": "Dark Green (X11)", - "hex": "#006400" - }, - { - "name": "Dark Gunmetal", - "hex": "#1F262A" - }, - { - "name": "Dark Imperial Blue", - "hex": "#00416A" - }, - { - "name": "Dark Imperial Blue", - "hex": "#00147E" - }, - { - "name": "Dark Jungle Green", - "hex": "#1A2421" - }, - { - "name": "Dark Khaki", - "hex": "#BDB76B" - }, - { - "name": "Dark Lava", - "hex": "#483C32" - }, - { - "name": "Dark Lavender", - "hex": "#734F96" - }, - { - "name": "Dark Liver", - "hex": "#534B4F" - }, - { - "name": "Dark Liver (Horses)", - "hex": "#543D37" - }, - { - "name": "Dark Magenta", - "hex": "#8B008B" - }, - { - "name": "Dark Medium Gray", - "hex": "#A9A9A9" - }, - { - "name": "Dark Midnight Blue", - "hex": "#003366" - }, - { - "name": "Dark Moss Green", - "hex": "#4A5D23" - }, - { - "name": "Dark Olive Green", - "hex": "#556B2F" - }, - { - "name": "Dark Orange", - "hex": "#FF8C00" - }, - { - "name": "Dark Orchid", - "hex": "#9932CC" - }, - { - "name": "Dark Pastel Blue", - "hex": "#779ECB" - }, - { - "name": "Dark Pastel Green", - "hex": "#03C03C" - }, - { - "name": "Dark Pastel Purple", - "hex": "#966FD6" - }, - { - "name": "Dark Pastel Red", - "hex": "#C23B22" - }, - { - "name": "Dark Pink", - "hex": "#E75480" - }, - { - "name": "Dark Powder Blue", - "hex": "#003399" - }, - { - "name": "Dark Puce", - "hex": "#4F3A3C" - }, - { - "name": "Dark Purple", - "hex": "#301934" - }, - { - "name": "Dark Raspberry", - "hex": "#872657" - }, - { - "name": "Dark Red", - "hex": "#8B0000" - }, - { - "name": "Dark Salmon", - "hex": "#E9967A" - }, - { - "name": "Dark Scarlet", - "hex": "#560319" - }, - { - "name": "Dark Sea Green", - "hex": "#8FBC8F" - }, - { - "name": "Dark Sienna", - "hex": "#3C1414" - }, - { - "name": "Dark Sky Blue", - "hex": "#8CBED6" - }, - { - "name": "Dark Slate Blue", - "hex": "#483D8B" - }, - { - "name": "Dark Slate Gray", - "hex": "#2F4F4F" - }, - { - "name": "Dark Spring Green", - "hex": "#177245" - }, - { - "name": "Dark Tan", - "hex": "#918151" - }, - { - "name": "Dark Tangerine", - "hex": "#FFA812" - }, - { - "name": "Dark Taupe", - "hex": "#483C32" - }, - { - "name": "Dark Terra Cotta", - "hex": "#CC4E5C" - }, - { - "name": "Dark Turquoise", - "hex": "#00CED1" - }, - { - "name": "Dark Vanilla", - "hex": "#D1BEA8" - }, - { - "name": "Dark Violet", - "hex": "#9400D3" - }, - { - "name": "Dark Yellow", - "hex": "#9B870C" - }, - { - "name": "Dartmouth Green", - "hex": "#00703C" - }, - { - "name": "Davy's Grey", - "hex": "#555555" - }, - { - "name": "Debian Red", - "hex": "#D70A53" - }, - { - "name": "Deep Aquamarine", - "hex": "#40826D" - }, - { - "name": "Deep Carmine", - "hex": "#A9203E" - }, - { - "name": "Deep Carmine Pink", - "hex": "#EF3038" - }, - { - "name": "Deep Carrot Orange", - "hex": "#E9692C" - }, - { - "name": "Deep Cerise", - "hex": "#DA3287" - }, - { - "name": "Deep Champagne", - "hex": "#FAD6A5" - }, - { - "name": "Deep Chestnut", - "hex": "#B94E48" - }, - { - "name": "Deep Coffee", - "hex": "#704241" - }, - { - "name": "Deep Fuchsia", - "hex": "#C154C1" - }, - { - "name": "Deep Green", - "hex": "#056608" - }, - { - "name": "Deep Green-Cyan Turquoise", - "hex": "#0E7C61" - }, - { - "name": "Deep Jungle Green", - "hex": "#004B49" - }, - { - "name": "Deep Koamaru", - "hex": "#333366" - }, - { - "name": "Deep Lemon", - "hex": "#F5C71A" - }, - { - "name": "Deep Lilac", - "hex": "#9955BB" - }, - { - "name": "Deep Magenta", - "hex": "#CC00CC" - }, - { - "name": "Deep Maroon", - "hex": "#820000" - }, - { - "name": "Deep Mauve", - "hex": "#D473D4" - }, - { - "name": "Deep Moss Green", - "hex": "#355E3B" - }, - { - "name": "Deep Peach", - "hex": "#FFCBA4" - }, - { - "name": "Deep Pink", - "hex": "#FF1493" - }, - { - "name": "Deep Puce", - "hex": "#A95C68" - }, - { - "name": "Deep Red", - "hex": "#850101" - }, - { - "name": "Deep Ruby", - "hex": "#843F5B" - }, - { - "name": "Deep Saffron", - "hex": "#FF9933" - }, - { - "name": "Deep Sky Blue", - "hex": "#00BFFF" - }, - { - "name": "Deep Space Sparkle", - "hex": "#4A646C" - }, - { - "name": "Deep Spring Bud", - "hex": "#556B2F" - }, - { - "name": "Deep Taupe", - "hex": "#7E5E60" - }, - { - "name": "Deep Tuscan Red", - "hex": "#66424D" - }, - { - "name": "Deep Violet", - "hex": "#330066" - }, - { - "name": "Deer", - "hex": "#BA8759" - }, - { - "name": "Denim", - "hex": "#1560BD" - }, - { - "name": "Denim Blue", - "hex": "#2243B6" - }, - { - "name": "Desaturated Cyan", - "hex": "#669999" - }, - { - "name": "Desert", - "hex": "#C19A6B" - }, - { - "name": "Desert Sand", - "hex": "#EDC9AF" - }, - { - "name": "Desire", - "hex": "#EA3C53" - }, - { - "name": "Diamond", - "hex": "#B9F2FF" - }, - { - "name": "Dim Gray", - "hex": "#696969" - }, - { - "name": "Dingy Dungeon", - "hex": "#C53151" - }, - { - "name": "Dirt", - "hex": "#9B7653" - }, - { - "name": "Dodger Blue", - "hex": "#1E90FF" - }, - { - "name": "Dodie Yellow", - "hex": "#FEF65B" - }, - { - "name": "Dogwood Rose", - "hex": "#D71868" - }, - { - "name": "Dollar Bill", - "hex": "#85BB65" - }, - { - "name": "Dolphin Gray", - "hex": "#828E84" - }, - { - "name": "Donkey Brown", - "hex": "#664C28" - }, - { - "name": "Drab", - "hex": "#967117" - }, - { - "name": "Duke Blue", - "hex": "#00009C" - }, - { - "name": "Dust Storm", - "hex": "#E5CCC9" - }, - { - "name": "Dutch White", - "hex": "#EFDFBB" - }, - { - "name": "Earth Yellow", - "hex": "#E1A95F" - }, - { - "name": "Ebony", - "hex": "#555D50" - }, - { - "name": "Ecru", - "hex": "#C2B280" - }, - { - "name": "Eerie Black", - "hex": "#1B1B1B" - }, - { - "name": "Eggplant", - "hex": "#614051" - }, - { - "name": "Eggshell", - "hex": "#F0EAD6" - }, - { - "name": "Egyptian Blue", - "hex": "#1034A6" - }, - { - "name": "Electric Blue", - "hex": "#7DF9FF" - }, - { - "name": "Electric Crimson", - "hex": "#FF003F" - }, - { - "name": "Electric Cyan", - "hex": "#00FFFF" - }, - { - "name": "Electric Green", - "hex": "#00FF00" - }, - { - "name": "Electric Indigo", - "hex": "#6F00FF" - }, - { - "name": "Electric Lavender", - "hex": "#F4BBFF" - }, - { - "name": "Electric Lime", - "hex": "#CCFF00" - }, - { - "name": "Electric Purple", - "hex": "#BF00FF" - }, - { - "name": "Electric Ultramarine", - "hex": "#3F00FF" - }, - { - "name": "Electric Violet", - "hex": "#8F00FF" - }, - { - "name": "Electric Yellow", - "hex": "#FFFF33" - }, - { - "name": "Emerald", - "hex": "#50C878" - }, - { - "name": "Eminence", - "hex": "#6C3082" - }, - { - "name": "English Green", - "hex": "#1B4D3E" - }, - { - "name": "English Lavender", - "hex": "#B48395" - }, - { - "name": "English Red", - "hex": "#AB4B52" - }, - { - "name": "English Vermillion", - "hex": "#CC474B" - }, - { - "name": "English Violet", - "hex": "#563C5C" - }, - { - "name": "Eton Blue", - "hex": "#96C8A2" - }, - { - "name": "Eucalyptus", - "hex": "#44D7A8" - }, - { - "name": "Fallow", - "hex": "#C19A6B" - }, - { - "name": "Falu Red", - "hex": "#801818" - }, - { - "name": "Fandango", - "hex": "#B53389" - }, - { - "name": "Fandango Pink", - "hex": "#DE5285" - }, - { - "name": "Fashion Fuchsia", - "hex": "#F400A1" - }, - { - "name": "Fawn", - "hex": "#E5AA70" - }, - { - "name": "Feldgrau", - "hex": "#4D5D53" - }, - { - "name": "Feldspar", - "hex": "#FDD5B1" - }, - { - "name": "Fern Green", - "hex": "#4F7942" - }, - { - "name": "Ferrari Red", - "hex": "#FF2800" - }, - { - "name": "Field Drab", - "hex": "#6C541E" - }, - { - "name": "Fiery Rose", - "hex": "#FF5470" - }, - { - "name": "Firebrick", - "hex": "#B22222" - }, - { - "name": "Fire Engine Red", - "hex": "#CE2029" - }, - { - "name": "Flame", - "hex": "#E25822" - }, - { - "name": "Flamingo Pink", - "hex": "#FC8EAC" - }, - { - "name": "Flattery", - "hex": "#6B4423" - }, - { - "name": "Flavescent", - "hex": "#F7E98E" - }, - { - "name": "Flax", - "hex": "#EEDC82" - }, - { - "name": "Flirt", - "hex": "#A2006D" - }, - { - "name": "Floral White", - "hex": "#FFFAF0" - }, - { - "name": "Fluorescent Orange", - "hex": "#FFBF00" - }, - { - "name": "Fluorescent Pink", - "hex": "#FF1493" - }, - { - "name": "Fluorescent Yellow", - "hex": "#CCFF00" - }, - { - "name": "Folly", - "hex": "#FF004F" - }, - { - "name": "Forest Green (Traditional)", - "hex": "#014421" - }, - { - "name": "Forest Green (Web)", - "hex": "#228B22" - }, - { - "name": "French Beige", - "hex": "#A67B5B" - }, - { - "name": "French Bistre", - "hex": "#856D4D" - }, - { - "name": "French Blue", - "hex": "#0072BB" - }, - { - "name": "French Fuchsia", - "hex": "#FD3F92" - }, - { - "name": "French Lilac", - "hex": "#86608E" - }, - { - "name": "French Lime", - "hex": "#9EFD38" - }, - { - "name": "French Mauve", - "hex": "#D473D4" - }, - { - "name": "French Pink", - "hex": "#FD6C9E" - }, - { - "name": "French Plum", - "hex": "#811453" - }, - { - "name": "French Puce", - "hex": "#4E1609" - }, - { - "name": "French Raspberry", - "hex": "#C72C48" - }, - { - "name": "French Rose", - "hex": "#F64A8A" - }, - { - "name": "French Sky Blue", - "hex": "#77B5FE" - }, - { - "name": "French Violet", - "hex": "#8806CE" - }, - { - "name": "French Wine", - "hex": "#AC1E44" - }, - { - "name": "Fresh Air", - "hex": "#A6E7FF" - }, - { - "name": "Frogert", - "hex": "#E936A7" - }, - { - "name": "Fuchsia", - "hex": "#FF00FF" - }, - { - "name": "Fuchsia (Crayola)", - "hex": "#C154C1" - }, - { - "name": "Fuchsia Pink", - "hex": "#FF77FF" - }, - { - "name": "Fuchsia Purple", - "hex": "#CC397B" - }, - { - "name": "Fuchsia Rose", - "hex": "#C74375" - }, - { - "name": "Fulvous", - "hex": "#E48400" - }, - { - "name": "Fuzzy Wuzzy", - "hex": "#CC6666" - }, - { - "name": "Gainsboro", - "hex": "#DCDCDC" - }, - { - "name": "Gamboge", - "hex": "#E49B0F" - }, - { - "name": "Gamboge Orange (Brown)", - "hex": "#996600" - }, - { - "name": "Gargoyle Gas", - "hex": "#FFDF46" - }, - { - "name": "Generic Viridian", - "hex": "#007F66" - }, - { - "name": "Ghost White", - "hex": "#F8F8FF" - }, - { - "name": "Giant's Club", - "hex": "#B05C52" - }, - { - "name": "Giants Orange", - "hex": "#FE5A1D" - }, - { - "name": "Ginger", - "hex": "#B06500" - }, - { - "name": "Glaucous", - "hex": "#6082B6" - }, - { - "name": "Glitter", - "hex": "#E6E8FA" - }, - { - "name": "Glossy Grape", - "hex": "#AB92B3" - }, - { - "name": "GO Green", - "hex": "#00AB66" - }, - { - "name": "Gold (Metallic)", - "hex": "#D4AF37" - }, - { - "name": "Gold (Web) (Golden)", - "hex": "#FFD700" - }, - { - "name": "Gold Fusion", - "hex": "#85754E" - }, - { - "name": "Golden Brown", - "hex": "#996515" - }, - { - "name": "Golden Poppy", - "hex": "#FCC200" - }, - { - "name": "Golden Yellow", - "hex": "#FFDF00" - }, - { - "name": "Goldenrod", - "hex": "#DAA520" - }, - { - "name": "Granite Gray", - "hex": "#676767" - }, - { - "name": "Granny Smith Apple", - "hex": "#A8E4A0" - }, - { - "name": "Grape", - "hex": "#6F2DA8" - }, - { - "name": "Gray", - "hex": "#808080" - }, - { - "name": "Gray (HTML/CSS Gray)", - "hex": "#808080" - }, - { - "name": "Gray (X11 Gray)", - "hex": "#BEBEBE" - }, - { - "name": "Gray-Asparagus", - "hex": "#465945" - }, - { - "name": "Gray-Blue", - "hex": "#8C92AC" - }, - { - "name": "Green (Color Wheel) (X11 Green)", - "hex": "#00FF00" - }, - { - "name": "Green (Crayola)", - "hex": "#1CAC78" - }, - { - "name": "Green (HTML/CSS Color)", - "hex": "#008000" - }, - { - "name": "Green (Munsell)", - "hex": "#00A877" - }, - { - "name": "Green (NCS)", - "hex": "#009F6B" - }, - { - "name": "Green (Pantone)", - "hex": "#00AD43" - }, - { - "name": "Green (Pigment)", - "hex": "#00A550" - }, - { - "name": "Green (RYB)", - "hex": "#66B032" - }, - { - "name": "Green-Blue", - "hex": "#1164B4" - }, - { - "name": "Green-Cyan", - "hex": "#009966" - }, - { - "name": "Green Lizard", - "hex": "#A7F432" - }, - { - "name": "Green Sheen", - "hex": "#6EAEA1" - }, - { - "name": "Green-Yellow", - "hex": "#ADFF2F" - }, - { - "name": "Grizzly", - "hex": "#885818" - }, - { - "name": "Grullo", - "hex": "#A99A86" - }, - { - "name": "Guppie Green", - "hex": "#00FF7F" - }, - { - "name": "Gunmetal", - "hex": "#2a3439" - }, - { - "name": "Halaya Ube", - "hex": "#663854" - }, - { - "name": "Han Blue", - "hex": "#446CCF" - }, - { - "name": "Han Purple", - "hex": "#5218FA" - }, - { - "name": "Hansa Yellow", - "hex": "#E9D66B" - }, - { - "name": "Harlequin", - "hex": "#3FFF00" - }, - { - "name": "Harlequin Green", - "hex": "#46CB18" - }, - { - "name": "Harvard Crimson", - "hex": "#C90016" - }, - { - "name": "Harvest Gold", - "hex": "#DA9100" - }, - { - "name": "Heart Gold", - "hex": "#808000" - }, - { - "name": "Heat Wave", - "hex": "#FF7A00" - }, - { - "name": "Heidelberg Red", - "hex": "#960018" - }, - { - "name": "Heliotrope", - "hex": "#DF73FF" - }, - { - "name": "Heliotrope Gray", - "hex": "#AA98A9" - }, - { - "name": "Heliotrope Magenta", - "hex": "#AA00BB" - }, - { - "name": "Hollywood Cerise", - "hex": "#F400A1" - }, - { - "name": "Honeydew", - "hex": "#F0FFF0" - }, - { - "name": "Honolulu Blue", - "hex": "#006DB0" - }, - { - "name": "Hooker's Green", - "hex": "#49796B" - }, - { - "name": "Hot Magenta", - "hex": "#FF1DCE" - }, - { - "name": "Hot Pink", - "hex": "#FF69B4" - }, - { - "name": "Hunter Green", - "hex": "#355E3B" - }, - { - "name": "Iceberg", - "hex": "#71A6D2" - }, - { - "name": "Icterine", - "hex": "#FCF75E" - }, - { - "name": "Iguana Green", - "hex": "#71BC78" - }, - { - "name": "Illuminating Emerald", - "hex": "#319177" - }, - { - "name": "Imperial", - "hex": "#602F6B" - }, - { - "name": "Imperial Blue", - "hex": "#002395" - }, - { - "name": "Imperial Purple", - "hex": "#66023C" - }, - { - "name": "Imperial Red", - "hex": "#ED2939" - }, - { - "name": "Inchworm", - "hex": "#B2EC5D" - }, - { - "name": "Independence", - "hex": "#4C516D" - }, - { - "name": "India Green", - "hex": "#138808" - }, - { - "name": "Indian Red", - "hex": "#CD5C5C" - }, - { - "name": "Indian Yellow", - "hex": "#E3A857" - }, - { - "name": "Indigo", - "hex": "#4B0082" - }, - { - "name": "Indigo Dye", - "hex": "#091F92" - }, - { - "name": "Indigo (Web)", - "hex": "#4B0082" - }, - { - "name": "Infra Red", - "hex": "#FF496C" - }, - { - "name": "Interdimensional Blue", - "hex": "#360CCC" - }, - { - "name": "International Klein Blue", - "hex": "#002FA7" - }, - { - "name": "International Orange (Aerospace)", - "hex": "#FF4F00" - }, - { - "name": "International Orange (Engineering)", - "hex": "#BA160C" - }, - { - "name": "International Orange (Golden Gate Bridge)", - "hex": "#C0362C" - }, - { - "name": "Iris", - "hex": "#5A4FCF" - }, - { - "name": "Irresistible", - "hex": "#B3446C" - }, - { - "name": "Isabelline", - "hex": "#F4F0EC" - }, - { - "name": "Islamic Green", - "hex": "#009000" - }, - { - "name": "Italian Sky Blue", - "hex": "#B2FFFF" - }, - { - "name": "Ivory", - "hex": "#FFFFF0" - }, - { - "name": "Jade", - "hex": "#00A86B" - }, - { - "name": "Japanese Carmine", - "hex": "#9D2933" - }, - { - "name": "Japanese Indigo", - "hex": "#264348" - }, - { - "name": "Japanese Violet", - "hex": "#5B3256" - }, - { - "name": "Jasmine", - "hex": "#F8DE7E" - }, - { - "name": "Jasper", - "hex": "#D73B3E" - }, - { - "name": "Jazzberry Jam", - "hex": "#A50B5E" - }, - { - "name": "Jelly Bean", - "hex": "#DA614E" - }, - { - "name": "Jet", - "hex": "#343434" - }, - { - "name": "Jonquil", - "hex": "#F4CA16" - }, - { - "name": "Jordy Blue", - "hex": "#8AB9F1" - }, - { - "name": "June Bud", - "hex": "#BDDA57" - }, - { - "name": "Jungle Green", - "hex": "#29AB87" - }, - { - "name": "Kelly Green", - "hex": "#4CBB17" - }, - { - "name": "Kenyan Copper", - "hex": "#7C1C05" - }, - { - "name": "Keppel", - "hex": "#3AB09E" - }, - { - "name": "Key Lime", - "hex": "#E8F48C" - }, - { - "name": "Khaki (HTML/CSS) (Khaki)", - "hex": "#C3B091" - }, - { - "name": "Khaki (X11) (Light Khaki)", - "hex": "#F0E68C" - }, - { - "name": "Kiwi", - "hex": "#8EE53F" - }, - { - "name": "Kobe", - "hex": "#882D17" - }, - { - "name": "Kobi", - "hex": "#E79FC4" - }, - { - "name": "Kobicha", - "hex": "#6B4423" - }, - { - "name": "Kombu Green", - "hex": "#354230" - }, - { - "name": "KSU Purple", - "hex": "#512888" - }, - { - "name": "KU Crimson", - "hex": "#E8000D" - }, - { - "name": "La Salle Green", - "hex": "#087830" - }, - { - "name": "Languid Lavender", - "hex": "#D6CADD" - }, - { - "name": "Lapis Lazuli", - "hex": "#26619C" - }, - { - "name": "Laser Lemon", - "hex": "#FFFF66" - }, - { - "name": "Laurel Green", - "hex": "#A9BA9D" - }, - { - "name": "Lava", - "hex": "#CF1020" - }, - { - "name": "Lavender (Floral)", - "hex": "#B57EDC" - }, - { - "name": "Lavender (Web)", - "hex": "#E6E6FA" - }, - { - "name": "Lavender Blue", - "hex": "#CCCCFF" - }, - { - "name": "Lavender Blush", - "hex": "#FFF0F5" - }, - { - "name": "Lavender Gray", - "hex": "#C4C3D0" - }, - { - "name": "Lavender Indigo", - "hex": "#9457EB" - }, - { - "name": "Lavender Magenta", - "hex": "#EE82EE" - }, - { - "name": "Lavender Mist", - "hex": "#E6E6FA" - }, - { - "name": "Lavender Pink", - "hex": "#FBAED2" - }, - { - "name": "Lavender Purple", - "hex": "#967BB6" - }, - { - "name": "Lavender Rose", - "hex": "#FBA0E3" - }, - { - "name": "Lawn Green", - "hex": "#7CFC00" - }, - { - "name": "Lemon", - "hex": "#FFF700" - }, - { - "name": "Lemon Chiffon", - "hex": "#FFFACD" - }, - { - "name": "Lemon Curry", - "hex": "#CCA01D" - }, - { - "name": "Lemon Glacier", - "hex": "#FDFF00" - }, - { - "name": "Lemon Lime", - "hex": "#E3FF00" - }, - { - "name": "Lemon Meringue", - "hex": "#F6EABE" - }, - { - "name": "Lemon Yellow", - "hex": "#FFF44F" - }, - { - "name": "Licorice", - "hex": "#1A1110" - }, - { - "name": "Liberty", - "hex": "#545AA7" - }, - { - "name": "Light Apricot", - "hex": "#FDD5B1" - }, - { - "name": "Light Blue", - "hex": "#ADD8E6" - }, - { - "name": "Light Brown", - "hex": "#B5651D" - }, - { - "name": "Light Carmine Pink", - "hex": "#E66771" - }, - { - "name": "Light Cobalt Blue", - "hex": "#88ACE0" - }, - { - "name": "Light Coral", - "hex": "#F08080" - }, - { - "name": "Light Cornflower Blue", - "hex": "#93CCEA" - }, - { - "name": "Light Crimson", - "hex": "#F56991" - }, - { - "name": "Light Cyan", - "hex": "#E0FFFF" - }, - { - "name": "Light Deep Pink", - "hex": "#FF5CCD" - }, - { - "name": "Light French Beige", - "hex": "#C8AD7F" - }, - { - "name": "Light Fuchsia Pink", - "hex": "#F984EF" - }, - { - "name": "Light Goldenrod Yellow", - "hex": "#FAFAD2" - }, - { - "name": "Light Gray", - "hex": "#D3D3D3" - }, - { - "name": "Light Grayish Magenta", - "hex": "#CC99CC" - }, - { - "name": "Light Green", - "hex": "#90EE90" - }, - { - "name": "Light Hot Pink", - "hex": "#FFB3DE" - }, - { - "name": "Light Khaki", - "hex": "#F0E68C" - }, - { - "name": "Light Medium Orchid", - "hex": "#D39BCB" - }, - { - "name": "Light Moss Green", - "hex": "#ADDFAD" - }, - { - "name": "Light Orange", - "hex": "#FED8B1" - }, - { - "name": "Light Orchid", - "hex": "#E6A8D7" - }, - { - "name": "Light Pastel Purple", - "hex": "#B19CD9" - }, - { - "name": "Light Pink", - "hex": "#FFB6C1" - }, - { - "name": "Light Red Ochre", - "hex": "#E97451" - }, - { - "name": "Light Salmon", - "hex": "#FFA07A" - }, - { - "name": "Light Salmon Pink", - "hex": "#FF9999" - }, - { - "name": "Light Sea Green", - "hex": "#20B2AA" - }, - { - "name": "Light Sky Blue", - "hex": "#87CEFA" - }, - { - "name": "Light Slate Gray", - "hex": "#778899" - }, - { - "name": "Light Steel Blue", - "hex": "#B0C4DE" - }, - { - "name": "Light Taupe", - "hex": "#B38B6D" - }, - { - "name": "Light Thulian Pink", - "hex": "#E68FAC" - }, - { - "name": "Light Yellow", - "hex": "#FFFFE0" - }, - { - "name": "Lilac", - "hex": "#C8A2C8" - }, - { - "name": "Lilac Luster", - "hex": "#AE98AA" - }, - { - "name": "Lime (Color Wheel)", - "hex": "#BFFF00" - }, - { - "name": "Lime (Web) (X11 Green)", - "hex": "#00FF00" - }, - { - "name": "Lime Green", - "hex": "#32CD32" - }, - { - "name": "Limerick", - "hex": "#9DC209" - }, - { - "name": "Lincoln Green", - "hex": "#195905" - }, - { - "name": "Linen", - "hex": "#FAF0E6" - }, - { - "name": "Loeen (Lopen) Look", - "hex": "#15F2FD" - }, - { - "name": "Liseran Purple", - "hex": "#DE6FA1" - }, - { - "name": "Little Boy Blue", - "hex": "#6CA0DC" - }, - { - "name": "Liver", - "hex": "#674C47" - }, - { - "name": "Liver (Dogs)", - "hex": "#B86D29" - }, - { - "name": "Liver (Organ)", - "hex": "#6C2E1F" - }, - { - "name": "Liver Chestnut", - "hex": "#987456" - }, - { - "name": "Livid", - "hex": "#6699CC" - }, - { - "name": "Lumber", - "hex": "#FFE4CD" - }, - { - "name": "Lust", - "hex": "#E62020" - }, - { - "name": "Maastricht Blue", - "hex": "#001C3D" - }, - { - "name": "Macaroni And Cheese", - "hex": "#FFBD88" - }, - { - "name": "Madder Lake", - "hex": "#CC3336" - }, - { - "name": "Magenta", - "hex": "#FF00FF" - }, - { - "name": "Magenta (Crayola)", - "hex": "#FF55A3" - }, - { - "name": "Magenta (Dye)", - "hex": "#CA1F7B" - }, - { - "name": "Magenta (Pantone)", - "hex": "#D0417E" - }, - { - "name": "Magenta (Process)", - "hex": "#FF0090" - }, - { - "name": "Magenta Haze", - "hex": "#9F4576" - }, - { - "name": "Magenta-Pink", - "hex": "#CC338B" - }, - { - "name": "Magic Mint", - "hex": "#AAF0D1" - }, - { - "name": "Magic Potion", - "hex": "#FF4466" - }, - { - "name": "Magnolia", - "hex": "#F8F4FF" - }, - { - "name": "Mahogany", - "hex": "#C04000" - }, - { - "name": "Maize", - "hex": "#FBEC5D" - }, - { - "name": "Majorelle Blue", - "hex": "#6050DC" - }, - { - "name": "Malachite", - "hex": "#0BDA51" - }, - { - "name": "Manatee", - "hex": "#979AAA" - }, - { - "name": "Mandarin", - "hex": "#F37A48" - }, - { - "name": "Mango Tango", - "hex": "#FF8243" - }, - { - "name": "Mantis", - "hex": "#74C365" - }, - { - "name": "Mardi Gras", - "hex": "#880085" - }, - { - "name": "Marigold", - "hex": "#EAA221" - }, - { - "name": "Maroon (Crayola)", - "hex": "#C32148" - }, - { - "name": "Maroon (HTML/CSS)", - "hex": "#800000" - }, - { - "name": "Maroon (X11)", - "hex": "#B03060" - }, - { - "name": "Mauve", - "hex": "#E0B0FF" - }, - { - "name": "Mauve Taupe", - "hex": "#915F6D" - }, - { - "name": "Mauvelous", - "hex": "#EF98AA" - }, - { - "name": "Maximum Blue", - "hex": "#47ABCC" - }, - { - "name": "Maximum Blue Green", - "hex": "#30BFBF" - }, - { - "name": "Maximum Blue Purple", - "hex": "#ACACE6" - }, - { - "name": "Maximum Green", - "hex": "#5E8C31" - }, - { - "name": "Maximum Green Yellow", - "hex": "#D9E650" - }, - { - "name": "Maximum Purple", - "hex": "#733380" - }, - { - "name": "Maximum Red", - "hex": "#D92121" - }, - { - "name": "Maximum Red Purple", - "hex": "#A63A79" - }, - { - "name": "Maximum Yellow", - "hex": "#FAFA37" - }, - { - "name": "Maximum Yellow Red", - "hex": "#F2BA49" - }, - { - "name": "May Green", - "hex": "#4C9141" - }, - { - "name": "Maya Blue", - "hex": "#73C2FB" - }, - { - "name": "Meat Brown", - "hex": "#E5B73B" - }, - { - "name": "Medium Aquamarine", - "hex": "#66DDAA" - }, - { - "name": "Medium Blue", - "hex": "#0000CD" - }, - { - "name": "Medium Candy Apple Red", - "hex": "#E2062C" - }, - { - "name": "Medium Carmine", - "hex": "#AF4035" - }, - { - "name": "Medium Champagne", - "hex": "#F3E5AB" - }, - { - "name": "Medium Electric Blue", - "hex": "#035096" - }, - { - "name": "Medium Jungle Green", - "hex": "#1C352D" - }, - { - "name": "Medium Lavender Magenta", - "hex": "#DDA0DD" - }, - { - "name": "Medium Orchid", - "hex": "#BA55D3" - }, - { - "name": "Medium Persian Blue", - "hex": "#0067A5" - }, - { - "name": "Medium Purple", - "hex": "#9370DB" - }, - { - "name": "Medium Red-Violet", - "hex": "#BB3385" - }, - { - "name": "Medium Ruby", - "hex": "#AA4069" - }, - { - "name": "Medium Sea Green", - "hex": "#3CB371" - }, - { - "name": "Medium Sky Blue", - "hex": "#80DAEB" - }, - { - "name": "Medium Slate Blue", - "hex": "#7B68EE" - }, - { - "name": "Medium Spring Bud", - "hex": "#C9DC87" - }, - { - "name": "Medium Spring Green", - "hex": "#00FA9A" - }, - { - "name": "Medium Taupe", - "hex": "#674C47" - }, - { - "name": "Medium Turquoise", - "hex": "#48D1CC" - }, - { - "name": "Medium Tuscan Red", - "hex": "#79443B" - }, - { - "name": "Medium Vermilion", - "hex": "#D9603B" - }, - { - "name": "Medium Violet-Red", - "hex": "#C71585" - }, - { - "name": "Mellow Apricot", - "hex": "#F8B878" - }, - { - "name": "Mellow Yellow", - "hex": "#F8DE7E" - }, - { - "name": "Melon", - "hex": "#FDBCB4" - }, - { - "name": "Metallic Seaweed", - "hex": "#0A7E8C" - }, - { - "name": "Metallic Sunburst", - "hex": "#9C7C38" - }, - { - "name": "Mexican Pink", - "hex": "#E4007C" - }, - { - "name": "Middle Blue", - "hex": "#7ED4E6" - }, - { - "name": "Middle Blue Green", - "hex": "#8DD9CC" - }, - { - "name": "Middle Blue Purple", - "hex": "#8B72BE" - }, - { - "name": "Middle Red Purple", - "hex": "#210837" - }, - { - "name": "Middle Green", - "hex": "#4D8C57" - }, - { - "name": "Middle Green Yellow", - "hex": "#ACBF60" - }, - { - "name": "Middle Purple", - "hex": "#D982B5" - }, - { - "name": "Middle Red", - "hex": "#E58E73" - }, - { - "name": "Middle Red Purple", - "hex": "#A55353" - }, - { - "name": "Middle Yellow", - "hex": "#FFEB00" - }, - { - "name": "Middle Yellow Red", - "hex": "#ECB176" - }, - { - "name": "Midnight", - "hex": "#702670" - }, - { - "name": "Midnight Blue", - "hex": "#191970" - }, - { - "name": "Midnight Green (Eagle Green)", - "hex": "#004953" - }, - { - "name": "Mikado Yellow", - "hex": "#FFC40C" - }, - { - "name": "Milk", - "hex": "#FDFFF5" - }, - { - "name": "Mimi Pink", - "hex": "#FFDAE9" - }, - { - "name": "Mindaro", - "hex": "#E3F988" - }, - { - "name": "Ming", - "hex": "#36747D" - }, - { - "name": "Minion Yellow", - "hex": "#F5E050" - }, - { - "name": "Mint", - "hex": "#3EB489" - }, - { - "name": "Mint Cream", - "hex": "#F5FFFA" - }, - { - "name": "Mint Green", - "hex": "#98FF98" - }, - { - "name": "Misty Moss", - "hex": "#BBB477" - }, - { - "name": "Misty Rose", - "hex": "#FFE4E1" - }, - { - "name": "Moccasin", - "hex": "#FAEBD7" - }, - { - "name": "Mode Beige", - "hex": "#967117" - }, - { - "name": "Moonstone Blue", - "hex": "#73A9C2" - }, - { - "name": "Mordant Red 19", - "hex": "#AE0C00" - }, - { - "name": "Morning Blue", - "hex": "#8DA399" - }, - { - "name": "Moss Green", - "hex": "#8A9A5B" - }, - { - "name": "Mountain Meadow", - "hex": "#30BA8F" - }, - { - "name": "Mountbatten Pink", - "hex": "#997A8D" - }, - { - "name": "MSU Green", - "hex": "#18453B" - }, - { - "name": "Mughal Green", - "hex": "#306030" - }, - { - "name": "Mulberry", - "hex": "#C54B8C" - }, - { - "name": "Mummy's Tomb", - "hex": "#828E84" - }, - { - "name": "Mustard", - "hex": "#FFDB58" - }, - { - "name": "Myrtle Green", - "hex": "#317873" - }, - { - "name": "Mystic", - "hex": "#D65282" - }, - { - "name": "Mystic Maroon", - "hex": "#AD4379" - }, - { - "name": "Nadeshiko Pink", - "hex": "#F6ADC6" - }, - { - "name": "Napier Green", - "hex": "#2A8000" - }, - { - "name": "Naples Yellow", - "hex": "#FADA5E" - }, - { - "name": "Navajo White", - "hex": "#FFDEAD" - }, - { - "name": "Navy", - "hex": "#000080" - }, - { - "name": "Navy Purple", - "hex": "#9457EB" - }, - { - "name": "Neon Carrot", - "hex": "#FFA343" - }, - { - "name": "Neon Fuchsia", - "hex": "#FE4164" - }, - { - "name": "Neon Green", - "hex": "#39FF14" - }, - { - "name": "New Car", - "hex": "#214FC6" - }, - { - "name": "New York Pink", - "hex": "#D7837F" - }, - { - "name": "Nickel", - "hex": "#727472" - }, - { - "name": "Non-Photo Blue", - "hex": "#A4DDED" - }, - { - "name": "North Texas Green", - "hex": "#059033" - }, - { - "name": "Nyanza", - "hex": "#E9FFDB" - }, - { - "name": "Ocean Blue", - "hex": "#4F42B5" - }, - { - "name": "Ocean Boat Blue", - "hex": "#0077BE" - }, - { - "name": "Ocean Green", - "hex": "#48BF91" - }, - { - "name": "Ochre", - "hex": "#CC7722" - }, - { - "name": "Office Green", - "hex": "#008000" - }, - { - "name": "Ogre Odor", - "hex": "#FD5240" - }, - { - "name": "Old Burgundy", - "hex": "#43302E" - }, - { - "name": "Old Gold", - "hex": "#CFB53B" - }, - { - "name": "Old Heliotrope", - "hex": "#563C5C" - }, - { - "name": "Old Lace", - "hex": "#FDF5E6" - }, - { - "name": "Old Lavender", - "hex": "#796878" - }, - { - "name": "Old Mauve", - "hex": "#673147" - }, - { - "name": "Old Moss Green", - "hex": "#867E36" - }, - { - "name": "Old Rose", - "hex": "#C08081" - }, - { - "name": "Old Silver", - "hex": "#848482" - }, - { - "name": "Olive", - "hex": "#808000" - }, - { - "name": "Olive Drab (#3)", - "hex": "#6B8E23" - }, - { - "name": "Olive Drab #7", - "hex": "#3C341F" - }, - { - "name": "Olivine", - "hex": "#9AB973" - }, - { - "name": "Onyx", - "hex": "#353839" - }, - { - "name": "Opera Mauve", - "hex": "#B784A7" - }, - { - "name": "Orange (Color Wheel)", - "hex": "#FF7F00" - }, - { - "name": "Orange (Crayola)", - "hex": "#FF7538" - }, - { - "name": "Orange (Pantone)", - "hex": "#FF5800" - }, - { - "name": "Orange (RYB)", - "hex": "#FB9902" - }, - { - "name": "Orange (Web)", - "hex": "#FFA500" - }, - { - "name": "Orange Peel", - "hex": "#FF9F00" - }, - { - "name": "Orange-Red", - "hex": "#FF4500" - }, - { - "name": "Orange Soda", - "hex": "#FA5B3D" - }, - { - "name": "Orange-Yellow", - "hex": "#F8D568" - }, - { - "name": "Orchid", - "hex": "#DA70D6" - }, - { - "name": "Orchid Pink", - "hex": "#F2BDCD" - }, - { - "name": "Orioles Orange", - "hex": "#FB4F14" - }, - { - "name": "Otter Brown", - "hex": "#654321" - }, - { - "name": "Outer Space", - "hex": "#414A4C" - }, - { - "name": "Outrageous Orange", - "hex": "#FF6E4A" - }, - { - "name": "Oxford Blue", - "hex": "#002147" - }, - { - "name": "OU Crimson Red", - "hex": "#990000" - }, - { - "name": "Pacific Blue", - "hex": "#1CA9C9" - }, - { - "name": "Pakistan Green", - "hex": "#006600" - }, - { - "name": "Palatinate Blue", - "hex": "#273BE2" - }, - { - "name": "Palatinate Purple", - "hex": "#682860" - }, - { - "name": "Pale Aqua", - "hex": "#BCD4E6" - }, - { - "name": "Pale Blue", - "hex": "#AFEEEE" - }, - { - "name": "Pale Brown", - "hex": "#987654" - }, - { - "name": "Pale Carmine", - "hex": "#AF4035" - }, - { - "name": "Pale Cerulean", - "hex": "#9BC4E2" - }, - { - "name": "Pale Chestnut", - "hex": "#DDADAF" - }, - { - "name": "Pale Copper", - "hex": "#DA8A67" - }, - { - "name": "Pale Cornflower Blue", - "hex": "#ABCDEF" - }, - { - "name": "Pale Cyan", - "hex": "#87D3F8" - }, - { - "name": "Pale Gold", - "hex": "#E6BE8A" - }, - { - "name": "Pale Goldenrod", - "hex": "#EEE8AA" - }, - { - "name": "Pale Green", - "hex": "#98FB98" - }, - { - "name": "Pale Lavender", - "hex": "#DCD0FF" - }, - { - "name": "Pale Magenta", - "hex": "#F984E5" - }, - { - "name": "Pale Magenta-Pink", - "hex": "#FF99CC" - }, - { - "name": "Pale Pink", - "hex": "#FADADD" - }, - { - "name": "Pale Plum", - "hex": "#DDA0DD" - }, - { - "name": "Pale Red-Violet", - "hex": "#DB7093" - }, - { - "name": "Pale Robin Egg Blue", - "hex": "#96DED1" - }, - { - "name": "Pale Silver", - "hex": "#C9C0BB" - }, - { - "name": "Pale Spring Bud", - "hex": "#ECEBBD" - }, - { - "name": "Pale Taupe", - "hex": "#BC987E" - }, - { - "name": "Pale Turquoise", - "hex": "#AFEEEE" - }, - { - "name": "Pale Violet", - "hex": "#CC99FF" - }, - { - "name": "Pale Violet-Red", - "hex": "#DB7093" - }, - { - "name": "Palm Leaf", - "hex": "#6F9940" - }, - { - "name": "Pansy Purple", - "hex": "#78184A" - }, - { - "name": "Paolo Veronese Green", - "hex": "#009B7D" - }, - { - "name": "Papaya Whip", - "hex": "#FFEFD5" - }, - { - "name": "Paradise Pink", - "hex": "#E63E62" - }, - { - "name": "Paris Green", - "hex": "#50C878" - }, - { - "name": "Parrot Pink", - "hex": "#D998A0" - }, - { - "name": "Pastel Blue", - "hex": "#AEC6CF" - }, - { - "name": "Pastel Brown", - "hex": "#836953" - }, - { - "name": "Pastel Gray", - "hex": "#CFCFC4" - }, - { - "name": "Pastel Green", - "hex": "#77DD77" - }, - { - "name": "Pastel Magenta", - "hex": "#F49AC2" - }, - { - "name": "Pastel Orange", - "hex": "#FFB347" - }, - { - "name": "Pastel Pink", - "hex": "#DEA5A4" - }, - { - "name": "Pastel Purple", - "hex": "#B39EB5" - }, - { - "name": "Pastel Red", - "hex": "#FF6961" - }, - { - "name": "Pastel Violet", - "hex": "#CB99C9" - }, - { - "name": "Pastel Yellow", - "hex": "#FDFD96" - }, - { - "name": "Patriarch", - "hex": "#800080" - }, - { - "name": "Payne's Grey", - "hex": "#536878" - }, - { - "name": "Peach", - "hex": "#FFE5B4" - }, - { - "name": "Peach", - "hex": "#FFCBA4" - }, - { - "name": "Peach-Orange", - "hex": "#FFCC99" - }, - { - "name": "Peach Puff", - "hex": "#FFDAB9" - }, - { - "name": "Peach-Yellow", - "hex": "#FADFAD" - }, - { - "name": "Pear", - "hex": "#D1E231" - }, - { - "name": "Pearl", - "hex": "#EAE0C8" - }, - { - "name": "Pearl Aqua", - "hex": "#88D8C0" - }, - { - "name": "Pearly Purple", - "hex": "#B768A2" - }, - { - "name": "Peridot", - "hex": "#E6E200" - }, - { - "name": "Periwinkle", - "hex": "#CCCCFF" - }, - { - "name": "Permanent Geranium Lake", - "hex": "#E12C2C" - }, - { - "name": "Persian Blue", - "hex": "#1C39BB" - }, - { - "name": "Persian Green", - "hex": "#00A693" - }, - { - "name": "Persian Indigo", - "hex": "#32127A" - }, - { - "name": "Persian Orange", - "hex": "#D99058" - }, - { - "name": "Persian Pink", - "hex": "#F77FBE" - }, - { - "name": "Persian Plum", - "hex": "#701C1C" - }, - { - "name": "Persian Red", - "hex": "#CC3333" - }, - { - "name": "Persian Rose", - "hex": "#FE28A2" - }, - { - "name": "Persimmon", - "hex": "#EC5800" - }, - { - "name": "Peru", - "hex": "#CD853F" - }, - { - "name": "Pewter Blue", - "hex": "#8BA8B7" - }, - { - "name": "Phlox", - "hex": "#DF00FF" - }, - { - "name": "Phthalo Blue", - "hex": "#000F89" - }, - { - "name": "Phthalo Green", - "hex": "#123524" - }, - { - "name": "Picton Blue", - "hex": "#45B1E8" - }, - { - "name": "Pictorial Carmine", - "hex": "#C30B4E" - }, - { - "name": "Piggy Pink", - "hex": "#FDDDE6" - }, - { - "name": "Pine Green", - "hex": "#01796F" - }, - { - "name": "Pineapple", - "hex": "#563C0D" - }, - { - "name": "Pink", - "hex": "#FFC0CB" - }, - { - "name": "Pink (Pantone)", - "hex": "#D74894" - }, - { - "name": "Pink Flamingo", - "hex": "#FC74FD" - }, - { - "name": "Pink Lace", - "hex": "#FFDDF4" - }, - { - "name": "Pink Lavender", - "hex": "#D8B2D1" - }, - { - "name": "Pink-Orange", - "hex": "#FF9966" - }, - { - "name": "Pink Pearl", - "hex": "#E7ACCF" - }, - { - "name": "Pink Raspberry", - "hex": "#980036" - }, - { - "name": "Pink Sherbet", - "hex": "#F78FA7" - }, - { - "name": "Pistachio", - "hex": "#93C572" - }, - { - "name": "Pixie Powder", - "hex": "#391285" - }, - { - "name": "Platinum", - "hex": "#E5E4E2" - }, - { - "name": "Plum", - "hex": "#8E4585" - }, - { - "name": "Plum (Web)", - "hex": "#DDA0DD" - }, - { - "name": "Plump Purple", - "hex": "#5946B2" - }, - { - "name": "Polished Pine", - "hex": "#5DA493" - }, - { - "name": "Pomp And Power", - "hex": "#86608E" - }, - { - "name": "Popstar", - "hex": "#BE4F62" - }, - { - "name": "Portland Orange", - "hex": "#FF5A36" - }, - { - "name": "Powder Blue", - "hex": "#B0E0E6" - }, - { - "name": "Princess Perfume", - "hex": "#FF85CF" - }, - { - "name": "Princeton Orange", - "hex": "#F58025" - }, - { - "name": "Prune", - "hex": "#701C1C" - }, - { - "name": "Prussian Blue", - "hex": "#003153" - }, - { - "name": "Psychedelic Purple", - "hex": "#DF00FF" - }, - { - "name": "Puce", - "hex": "#CC8899" - }, - { - "name": "Puce Red", - "hex": "#722F37" - }, - { - "name": "Pullman Brown (UPS Brown)", - "hex": "#644117" - }, - { - "name": "Pullman Green", - "hex": "#3B331C" - }, - { - "name": "Pumpkin", - "hex": "#FF7518" - }, - { - "name": "Purple (HTML)", - "hex": "#800080" - }, - { - "name": "Purple (Munsell)", - "hex": "#9F00C5" - }, - { - "name": "Purple (X11)", - "hex": "#A020F0" - }, - { - "name": "Purple Heart", - "hex": "#69359C" - }, - { - "name": "Purple Mountain Majesty", - "hex": "#9678B6" - }, - { - "name": "Purple Navy", - "hex": "#4E5180" - }, - { - "name": "Purple Pizzazz", - "hex": "#FE4EDA" - }, - { - "name": "Purple Plum", - "hex": "#9C51B6" - }, - { - "name": "Purple Taupe", - "hex": "#50404D" - }, - { - "name": "Purpureus", - "hex": "#9A4EAE" - }, - { - "name": "Quartz", - "hex": "#51484F" - }, - { - "name": "Queen Blue", - "hex": "#436B95" - }, - { - "name": "Queen Pink", - "hex": "#E8CCD7" - }, - { - "name": "Quick Silver", - "hex": "#A6A6A6" - }, - { - "name": "Quinacridone Magenta", - "hex": "#8E3A59" - }, - { - "name": "Rackley", - "hex": "#5D8AA8" - }, - { - "name": "Radical Red", - "hex": "#FF355E" - }, - { - "name": "Raisin Black", - "hex": "#242124" - }, - { - "name": "Rajah", - "hex": "#FBAB60" - }, - { - "name": "Raspberry", - "hex": "#E30B5D" - }, - { - "name": "Raspberry Glace", - "hex": "#915F6D" - }, - { - "name": "Raspberry Pink", - "hex": "#E25098" - }, - { - "name": "Raspberry Rose", - "hex": "#B3446C" - }, - { - "name": "Raw Sienna", - "hex": "#D68A59" - }, - { - "name": "Raw Umber", - "hex": "#826644" - }, - { - "name": "Razzle Dazzle Rose", - "hex": "#FF33CC" - }, - { - "name": "Razzmatazz", - "hex": "#E3256B" - }, - { - "name": "Razzmic Berry", - "hex": "#8D4E85" - }, - { - "name": "Rebecca Purple", - "hex": "#663399" - }, - { - "name": "Red", - "hex": "#FF0000" - }, - { - "name": "Red (Crayola)", - "hex": "#EE204D" - }, - { - "name": "Red (Munsell)", - "hex": "#F2003C" - }, - { - "name": "Red (NCS)", - "hex": "#C40233" - }, - { - "name": "Red (Pantone)", - "hex": "#ED2939" - }, - { - "name": "Red (Pigment)", - "hex": "#ED1C24" - }, - { - "name": "Red (RYB)", - "hex": "#FE2712" - }, - { - "name": "Red-Brown", - "hex": "#A52A2A" - }, - { - "name": "Red Devil", - "hex": "#860111" - }, - { - "name": "Red-Orange", - "hex": "#FF5349" - }, - { - "name": "Red-Purple", - "hex": "#E40078" - }, - { - "name": "Red Salsa", - "hex": "#FD3A4A" - }, - { - "name": "Red-Violet", - "hex": "#C71585" - }, - { - "name": "Redwood", - "hex": "#A45A52" - }, - { - "name": "Regalia", - "hex": "#522D80" - }, - { - "name": "Registration Black", - "hex": "#000000" - }, - { - "name": "Resolution Blue", - "hex": "#002387" - }, - { - "name": "Rhythm", - "hex": "#777696" - }, - { - "name": "Rich Black", - "hex": "#004040" - }, - { - "name": "Rich Black (FOGRA29)", - "hex": "#010B13" - }, - { - "name": "Rich Black (FOGRA39)", - "hex": "#010203" - }, - { - "name": "Rich Brilliant Lavender", - "hex": "#F1A7FE" - }, - { - "name": "Rich Carmine", - "hex": "#D70040" - }, - { - "name": "Rich Electric Blue", - "hex": "#0892D0" - }, - { - "name": "Rich Lavender", - "hex": "#A76BCF" - }, - { - "name": "Rich Lilac", - "hex": "#B666D2" - }, - { - "name": "Rich Maroon", - "hex": "#B03060" - }, - { - "name": "Rifle Green", - "hex": "#444C38" - }, - { - "name": "Roast Coffee", - "hex": "#704241" - }, - { - "name": "Robin Egg Blue", - "hex": "#00CCCC" - }, - { - "name": "Rocket Metallic", - "hex": "#8A7F80" - }, - { - "name": "Roman Silver", - "hex": "#838996" - }, - { - "name": "Rose", - "hex": "#FF007F" - }, - { - "name": "Rose Bonbon", - "hex": "#F9429E" - }, - { - "name": "Rose Dust", - "hex": "#9E5E6F" - }, - { - "name": "Rose Ebony", - "hex": "#674846" - }, - { - "name": "Rose Gold", - "hex": "#B76E79" - }, - { - "name": "Rose Madder", - "hex": "#E32636" - }, - { - "name": "Rose Pink", - "hex": "#FF66CC" - }, - { - "name": "Rose Quartz", - "hex": "#AA98A9" - }, - { - "name": "Rose Red", - "hex": "#C21E56" - }, - { - "name": "Rose Taupe", - "hex": "#905D5D" - }, - { - "name": "Rose Vale", - "hex": "#AB4E52" - }, - { - "name": "Rosewood", - "hex": "#65000B" - }, - { - "name": "Rosso Corsa", - "hex": "#D40000" - }, - { - "name": "Rosy Brown", - "hex": "#BC8F8F" - }, - { - "name": "Royal Azure", - "hex": "#0038A8" - }, - { - "name": "Royal Blue", - "hex": "#002366" - }, - { - "name": "Royal Blue", - "hex": "#4169E1" - }, - { - "name": "Royal Fuchsia", - "hex": "#CA2C92" - }, - { - "name": "Royal Purple", - "hex": "#7851A9" - }, - { - "name": "Royal Yellow", - "hex": "#FADA5E" - }, - { - "name": "Ruber", - "hex": "#CE4676" - }, - { - "name": "Rubine Red", - "hex": "#D10056" - }, - { - "name": "Ruby", - "hex": "#E0115F" - }, - { - "name": "Ruby Red", - "hex": "#9B111E" - }, - { - "name": "Ruddy", - "hex": "#FF0028" - }, - { - "name": "Ruddy Brown", - "hex": "#BB6528" - }, - { - "name": "Ruddy Pink", - "hex": "#E18E96" - }, - { - "name": "Rufous", - "hex": "#A81C07" - }, - { - "name": "Russet", - "hex": "#80461B" - }, - { - "name": "Russian Green", - "hex": "#679267" - }, - { - "name": "Russian Violet", - "hex": "#32174D" - }, - { - "name": "Rust", - "hex": "#B7410E" - }, - { - "name": "Rusty Red", - "hex": "#DA2C43" - }, - { - "name": "Sacramento State Green", - "hex": "#00563F" - }, - { - "name": "Saddle Brown", - "hex": "#8B4513" - }, - { - "name": "Safety Orange", - "hex": "#FF7800" - }, - { - "name": "Safety Orange (Blaze Orange)", - "hex": "#FF6700" - }, - { - "name": "Safety Yellow", - "hex": "#EED202" - }, - { - "name": "Saffron", - "hex": "#F4C430" - }, - { - "name": "Sage", - "hex": "#BCB88A" - }, - { - "name": "St. Patrick's Blue", - "hex": "#23297A" - }, - { - "name": "Salmon", - "hex": "#FA8072" - }, - { - "name": "Salmon Pink", - "hex": "#FF91A4" - }, - { - "name": "Sand", - "hex": "#C2B280" - }, - { - "name": "Sand Dune", - "hex": "#967117" - }, - { - "name": "Sandstorm", - "hex": "#ECD540" - }, - { - "name": "Sandy Brown", - "hex": "#F4A460" - }, - { - "name": "Sandy Tan", - "hex": "#FDD9B5" - }, - { - "name": "Sandy Taupe", - "hex": "#967117" - }, - { - "name": "Sangria", - "hex": "#92000A" - }, - { - "name": "Sap Green", - "hex": "#507D2A" - }, - { - "name": "Sapphire", - "hex": "#0F52BA" - }, - { - "name": "Sapphire Blue", - "hex": "#0067A5" - }, - { - "name": "Sasquatch Socks", - "hex": "#FF4681" - }, - { - "name": "Satin Sheen Gold", - "hex": "#CBA135" - }, - { - "name": "Scarlet", - "hex": "#FF2400" - }, - { - "name": "Scarlet", - "hex": "#FD0E35" - }, - { - "name": "Schauss Pink", - "hex": "#FF91AF" - }, - { - "name": "School Bus Yellow", - "hex": "#FFD800" - }, - { - "name": "Screamin' Green", - "hex": "#66FF66" - }, - { - "name": "Sea Blue", - "hex": "#006994" - }, - { - "name": "Sea Foam Green", - "hex": "#9FE2BF" - }, - { - "name": "Sea Green", - "hex": "#2E8B57" - }, - { - "name": "Sea Serpent", - "hex": "#4BC7CF" - }, - { - "name": "Seal Brown", - "hex": "#59260B" - }, - { - "name": "Seashell", - "hex": "#FFF5EE" - }, - { - "name": "Selective Yellow", - "hex": "#FFBA00" - }, - { - "name": "Sepia", - "hex": "#704214" - }, - { - "name": "Shadow", - "hex": "#8A795D" - }, - { - "name": "Shadow Blue", - "hex": "#778BA5" - }, - { - "name": "Shampoo", - "hex": "#FFCFF1" - }, - { - "name": "Shamrock Green", - "hex": "#009E60" - }, - { - "name": "Sheen Green", - "hex": "#8FD400" - }, - { - "name": "Shimmering Blush", - "hex": "#D98695" - }, - { - "name": "Shiny Shamrock", - "hex": "#5FA778" - }, - { - "name": "Shocking Pink", - "hex": "#FC0FC0" - }, - { - "name": "Shocking Pink (Crayola)", - "hex": "#FF6FFF" - }, - { - "name": "Sienna", - "hex": "#882D17" - }, - { - "name": "Silver", - "hex": "#C0C0C0" - }, - { - "name": "Silver Chalice", - "hex": "#ACACAC" - }, - { - "name": "Silver Lake Blue", - "hex": "#5D89BA" - }, - { - "name": "Silver Pink", - "hex": "#C4AEAD" - }, - { - "name": "Silver Sand", - "hex": "#BFC1C2" - }, - { - "name": "Sinopia", - "hex": "#CB410B" - }, - { - "name": "Sizzling Red", - "hex": "#FF3855" - }, - { - "name": "Sizzling Sunrise", - "hex": "#FFDB00" - }, - { - "name": "Skobeloff", - "hex": "#007474" - }, - { - "name": "Sky Blue", - "hex": "#87CEEB" - }, - { - "name": "Sky Magenta", - "hex": "#CF71AF" - }, - { - "name": "Slate Blue", - "hex": "#6A5ACD" - }, - { - "name": "Slate Gray", - "hex": "#708090" - }, - { - "name": "Smalt (Dark Powder Blue)", - "hex": "#003399" - }, - { - "name": "Slimy Green", - "hex": "#299617" - }, - { - "name": "Smashed Pumpkin", - "hex": "#FF6D3A" - }, - { - "name": "Smitten", - "hex": "#C84186" - }, - { - "name": "Smoke", - "hex": "#738276" - }, - { - "name": "Smokey Topaz", - "hex": "#832A0D" - }, - { - "name": "Smoky Black", - "hex": "#100C08" - }, - { - "name": "Smoky Topaz", - "hex": "#933D41" - }, - { - "name": "Snow", - "hex": "#FFFAFA" - }, - { - "name": "Soap", - "hex": "#CEC8EF" - }, - { - "name": "Solid Pink", - "hex": "#893843" - }, - { - "name": "Sonic Silver", - "hex": "#757575" - }, - { - "name": "Spartan Crimson", - "hex": "#9E1316" - }, - { - "name": "Space Cadet", - "hex": "#1D2951" - }, - { - "name": "Spanish Bistre", - "hex": "#807532" - }, - { - "name": "Spanish Blue", - "hex": "#0070B8" - }, - { - "name": "Spanish Carmine", - "hex": "#D10047" - }, - { - "name": "Spanish Crimson", - "hex": "#E51A4C" - }, - { - "name": "Spanish Gray", - "hex": "#989898" - }, - { - "name": "Spanish Green", - "hex": "#009150" - }, - { - "name": "Spanish Orange", - "hex": "#E86100" - }, - { - "name": "Spanish Pink", - "hex": "#F7BFBE" - }, - { - "name": "Spanish Red", - "hex": "#E60026" - }, - { - "name": "Spanish Sky Blue", - "hex": "#00FFFF" - }, - { - "name": "Spanish Violet", - "hex": "#4C2882" - }, - { - "name": "Spanish Viridian", - "hex": "#007F5C" - }, - { - "name": "Spicy Mix", - "hex": "#8B5f4D" - }, - { - "name": "Spiro Disco Ball", - "hex": "#0FC0FC" - }, - { - "name": "Spring Bud", - "hex": "#A7FC00" - }, - { - "name": "Spring Frost", - "hex": "#87FF2A" - }, - { - "name": "Spring Green", - "hex": "#00FF7F" - }, - { - "name": "Star Command Blue", - "hex": "#007BB8" - }, - { - "name": "Steel Blue", - "hex": "#4682B4" - }, - { - "name": "Steel Pink", - "hex": "#CC33CC" - }, - { - "name": "Steel Teal", - "hex": "#5F8A8B" - }, - { - "name": "Stil De Grain Yellow", - "hex": "#FADA5E" - }, - { - "name": "Stizza", - "hex": "#990000" - }, - { - "name": "Stormcloud", - "hex": "#4F666A" - }, - { - "name": "Straw", - "hex": "#E4D96F" - }, - { - "name": "Strawberry", - "hex": "#FC5A8D" - }, - { - "name": "Sugar Plum", - "hex": "#914E75" - }, - { - "name": "Sunburnt Cyclops", - "hex": "#FF404C" - }, - { - "name": "Sunglow", - "hex": "#FFCC33" - }, - { - "name": "Sunny", - "hex": "#F2F27A" - }, - { - "name": "Sunray", - "hex": "#E3AB57" - }, - { - "name": "Sunset", - "hex": "#FAD6A5" - }, - { - "name": "Sunset Orange", - "hex": "#FD5E53" - }, - { - "name": "Super Pink", - "hex": "#CF6BA9" - }, - { - "name": "Sweet Brown", - "hex": "#A83731" - }, - { - "name": "Tan", - "hex": "#D2B48C" - }, - { - "name": "Tangelo", - "hex": "#F94D00" - }, - { - "name": "Tangerine", - "hex": "#F28500" - }, - { - "name": "Tangerine Yellow", - "hex": "#FFCC00" - }, - { - "name": "Tango Pink", - "hex": "#E4717A" - }, - { - "name": "Tart Orange", - "hex": "#FB4D46" - }, - { - "name": "Taupe", - "hex": "#483C32" - }, - { - "name": "Taupe Gray", - "hex": "#8B8589" - }, - { - "name": "Tea Green", - "hex": "#D0F0C0" - }, - { - "name": "Tea Rose", - "hex": "#F88379" - }, - { - "name": "Tea Rose", - "hex": "#F4C2C2" - }, - { - "name": "Teal", - "hex": "#008080" - }, - { - "name": "Teal Blue", - "hex": "#367588" - }, - { - "name": "Teal Deer", - "hex": "#99E6B3" - }, - { - "name": "Teal Green", - "hex": "#00827F" - }, - { - "name": "Telemagenta", - "hex": "#CF3476" - }, - { - "name": "Tenne (Tawny)", - "hex": "#CD5700" - }, - { - "name": "Terra Cotta", - "hex": "#E2725B" - }, - { - "name": "Thistle", - "hex": "#D8BFD8" - }, - { - "name": "Thulian Pink", - "hex": "#DE6FA1" - }, - { - "name": "Tickle Me Pink", - "hex": "#FC89AC" - }, - { - "name": "Tiffany Blue", - "hex": "#0ABAB5" - }, - { - "name": "Tiger's Eye", - "hex": "#E08D3C" - }, - { - "name": "Timberwolf", - "hex": "#DBD7D2" - }, - { - "name": "Titanium Yellow", - "hex": "#EEE600" - }, - { - "name": "Tomato", - "hex": "#FF6347" - }, - { - "name": "Toolbox", - "hex": "#746CC0" - }, - { - "name": "Topaz", - "hex": "#FFC87C" - }, - { - "name": "Tractor Red", - "hex": "#FD0E35" - }, - { - "name": "Trolley Grey", - "hex": "#808080" - }, - { - "name": "Tropical Rain Forest", - "hex": "#00755E" - }, - { - "name": "Tropical Violet", - "hex": "#CDA4DE" - }, - { - "name": "True Blue", - "hex": "#0073CF" - }, - { - "name": "Tufts Blue", - "hex": "#3E8EDE" - }, - { - "name": "Tulip", - "hex": "#FF878D" - }, - { - "name": "Tumbleweed", - "hex": "#DEAA88" - }, - { - "name": "Turkish Rose", - "hex": "#B57281" - }, - { - "name": "Turquoise", - "hex": "#40E0D0" - }, - { - "name": "Turquoise Blue", - "hex": "#00FFEF" - }, - { - "name": "Turquoise Green", - "hex": "#A0D6B4" - }, - { - "name": "Turquoise Surf", - "hex": "#00C5CD" - }, - { - "name": "Turtle Green", - "hex": "#8A9A5B" - }, - { - "name": "Tuscan", - "hex": "#FAD6A5" - }, - { - "name": "Tuscan Brown", - "hex": "#6F4E37" - }, - { - "name": "Tuscan Red", - "hex": "#7C4848" - }, - { - "name": "Tuscan Tan", - "hex": "#A67B5B" - }, - { - "name": "Tuscany", - "hex": "#C09999" - }, - { - "name": "Twilight Lavender", - "hex": "#8A496B" - }, - { - "name": "Tyrian Purple", - "hex": "#66023C" - }, - { - "name": "UA Blue", - "hex": "#0033AA" - }, - { - "name": "UA Red", - "hex": "#D9004C" - }, - { - "name": "Ube", - "hex": "#8878C3" - }, - { - "name": "UCLA Blue", - "hex": "#536895" - }, - { - "name": "UCLA Gold", - "hex": "#FFB300" - }, - { - "name": "UFO Green", - "hex": "#3CD070" - }, - { - "name": "Ultramarine", - "hex": "#3F00FF" - }, - { - "name": "Ultramarine Blue", - "hex": "#4166F5" - }, - { - "name": "Ultra Pink", - "hex": "#FF6FFF" - }, - { - "name": "Ultra Red", - "hex": "#FC6C85" - }, - { - "name": "Umber", - "hex": "#635147" - }, - { - "name": "Unbleached Silk", - "hex": "#FFDDCA" - }, - { - "name": "United Nations Blue", - "hex": "#5B92E5" - }, - { - "name": "University Of California Gold", - "hex": "#B78727" - }, - { - "name": "Unmellow Yellow", - "hex": "#FFFF66" - }, - { - "name": "UP Forest Green", - "hex": "#014421" - }, - { - "name": "UP Maroon", - "hex": "#7B1113" - }, - { - "name": "Upsdell Red", - "hex": "#AE2029" - }, - { - "name": "Urobilin", - "hex": "#E1AD21" - }, - { - "name": "USAFA Blue", - "hex": "#004F98" - }, - { - "name": "USC Cardinal", - "hex": "#990000" - }, - { - "name": "USC Gold", - "hex": "#FFCC00" - }, - { - "name": "University Of Tennessee Orange", - "hex": "#F77F00" - }, - { - "name": "Utah Crimson", - "hex": "#D3003F" - }, - { - "name": "Van Dyke Brown", - "hex": "#664228" - }, - { - "name": "Vanilla", - "hex": "#F3E5AB" - }, - { - "name": "Vanilla Ice", - "hex": "#F38FA9" - }, - { - "name": "Vegas Gold", - "hex": "#C5B358" - }, - { - "name": "Venetian Red", - "hex": "#C80815" - }, - { - "name": "Verdigris", - "hex": "#43B3AE" - }, - { - "name": "Vermilion", - "hex": "#E34234" - }, - { - "name": "Vermilion", - "hex": "#D9381E" - }, - { - "name": "Veronica", - "hex": "#A020F0" - }, - { - "name": "Very Light Azure", - "hex": "#74BBFB" - }, - { - "name": "Very Light Blue", - "hex": "#6666FF" - }, - { - "name": "Very Light Malachite Green", - "hex": "#64E986" - }, - { - "name": "Very Light Tangelo", - "hex": "#FFB077" - }, - { - "name": "Very Pale Orange", - "hex": "#FFDFBF" - }, - { - "name": "Very Pale Yellow", - "hex": "#FFFFBF" - }, - { - "name": "Violet", - "hex": "#8F00FF" - }, - { - "name": "Violet (Color Wheel)", - "hex": "#7F00FF" - }, - { - "name": "Violet (RYB)", - "hex": "#8601AF" - }, - { - "name": "Violet (Web)", - "hex": "#EE82EE" - }, - { - "name": "Violet-Blue", - "hex": "#324AB2" - }, - { - "name": "Violet-Red", - "hex": "#F75394" - }, - { - "name": "Viridian", - "hex": "#40826D" - }, - { - "name": "Viridian Green", - "hex": "#009698" - }, - { - "name": "Vista Blue", - "hex": "#7C9ED9" - }, - { - "name": "Vivid Amber", - "hex": "#CC9900" - }, - { - "name": "Vivid Auburn", - "hex": "#922724" - }, - { - "name": "Vivid Burgundy", - "hex": "#9F1D35" - }, - { - "name": "Vivid Cerise", - "hex": "#DA1D81" - }, - { - "name": "Vivid Cerulean", - "hex": "#00AAEE" - }, - { - "name": "Vivid Crimson", - "hex": "#CC0033" - }, - { - "name": "Vivid Gamboge", - "hex": "#FF9900" - }, - { - "name": "Vivid Lime Green", - "hex": "#A6D608" - }, - { - "name": "Vivid Malachite", - "hex": "#00CC33" - }, - { - "name": "Vivid Mulberry", - "hex": "#B80CE3" - }, - { - "name": "Vivid Orange", - "hex": "#FF5F00" - }, - { - "name": "Vivid Orange Peel", - "hex": "#FFA000" - }, - { - "name": "Vivid Orchid", - "hex": "#CC00FF" - }, - { - "name": "Vivid Raspberry", - "hex": "#FF006C" - }, - { - "name": "Vivid Red", - "hex": "#F70D1A" - }, - { - "name": "Vivid Red-Tangelo", - "hex": "#DF6124" - }, - { - "name": "Vivid Sky Blue", - "hex": "#00CCFF" - }, - { - "name": "Vivid Tangelo", - "hex": "#F07427" - }, - { - "name": "Vivid Tangerine", - "hex": "#FFA089" - }, - { - "name": "Vivid Vermilion", - "hex": "#E56024" - }, - { - "name": "Vivid Violet", - "hex": "#9F00FF" - }, - { - "name": "Vivid Yellow", - "hex": "#FFE302" - }, - { - "name": "Volt", - "hex": "#CEFF00" - }, - { - "name": "Wageningen Green", - "hex": "#34B233" - }, - { - "name": "Warm Black", - "hex": "#004242" - }, - { - "name": "Waterspout", - "hex": "#A4F4F9" - }, - { - "name": "Weldon Blue", - "hex": "#7C98AB" - }, - { - "name": "Wenge", - "hex": "#645452" - }, - { - "name": "Wheat", - "hex": "#F5DEB3" - }, - { - "name": "White", - "hex": "#FFFFFF" - }, - { - "name": "White Smoke", - "hex": "#F5F5F5" - }, - { - "name": "Wild Blue Yonder", - "hex": "#A2ADD0" - }, - { - "name": "Wild Orchid", - "hex": "#D470A2" - }, - { - "name": "Wild Strawberry", - "hex": "#FF43A4" - }, - { - "name": "Wild Watermelon", - "hex": "#FC6C85" - }, - { - "name": "Willpower Orange", - "hex": "#FD5800" - }, - { - "name": "Windsor Tan", - "hex": "#A75502" - }, - { - "name": "Wine", - "hex": "#722F37" - }, - { - "name": "Wine Dregs", - "hex": "#673147" - }, - { - "name": "Winter Sky", - "hex": "#FF007C" - }, - { - "name": "Winter Wizard", - "hex": "#A0E6FF" - }, - { - "name": "Wintergreen Dream", - "hex": "#56887D" - }, - { - "name": "Wisteria", - "hex": "#C9A0DC" - }, - { - "name": "Wood Brown", - "hex": "#C19A6B" - }, - { - "name": "Xanadu", - "hex": "#738678" - }, - { - "name": "Yale Blue", - "hex": "#0F4D92" - }, - { - "name": "Yankees Blue", - "hex": "#1C2841" - }, - { - "name": "Yellow", - "hex": "#FFFF00" - }, - { - "name": "Yellow (Crayola)", - "hex": "#FCE883" - }, - { - "name": "Yellow (Munsell)", - "hex": "#EFCC00" - }, - { - "name": "Yellow (NCS)", - "hex": "#FFD300" - }, - { - "name": "Yellow (Pantone)", - "hex": "#FEDF00" - }, - { - "name": "Yellow (Process)", - "hex": "#FFEF00" - }, - { - "name": "Yellow (RYB)", - "hex": "#FEFE33" - }, - { - "name": "Yellow-Green", - "hex": "#9ACD32" - }, - { - "name": "Yellow Orange", - "hex": "#FFAE42" - }, - { - "name": "Yellow Rose", - "hex": "#FFF000" - }, - { - "name": "Yellow Sunshine", - "hex": "#FFF700" - }, - { - "name": "Zaffre", - "hex": "#0014A8" - }, - { - "name": "Zinnwaldite Brown", - "hex": "#2C1608" - }, - { - "name": "Zomp", - "hex": "#39A78E" - } -]` diff --git a/core/database/entity/database.go b/core/database/entity/database.go new file mode 100644 index 000000000..9c0d75696 --- /dev/null +++ b/core/database/entity/database.go @@ -0,0 +1,61 @@ +package entity + +type DatabaseMetadata struct { + Databases []Database `json:"databases"` +} + +type Database struct { + Name string `json:"name"` + Tables []DatabaseTable `json:"tables"` +} + +type DatabaseTable struct { + Name string `json:"name"` + Columns []DatabaseColumn `json:"columns"` + Indexes []DatabaseIndex `json:"indexes"` +} + +type DatabaseColumn struct { + Name string `json:"name"` + Type string `json:"type"` + Primary bool `json:"primary,omitempty"` + NotNull bool `json:"not_null,omitempty"` + Key string `json:"key,omitempty"` + Default string `json:"default,omitempty"` + Extra string `json:"extra,omitempty"` + AutoIncrement bool `json:"auto_increment,omitempty"` + Children []DatabaseColumn `json:"children,omitempty"` + Hash string `json:"hash,omitempty"` + OriginalName string `json:"original_name,omitempty"` + Status string `json:"status,omitempty"` +} + +type DatabaseIndex struct { + Name string `json:"name"` + Type string `json:"type,omitempty"` + Columns []DatabaseIndexColumn `json:"columns"` + Unique bool `json:"unique"` + Hash string `json:"hash,omitempty"` + OriginalName string `json:"original_name,omitempty"` + Status string `json:"status,omitempty"` +} + +type DatabaseIndexColumn struct { + Name string `json:"name"` + Order int `json:"order"` +} + +func (col *DatabaseIndexColumn) OrderString() string { + if col.Order < 0 { + return "DESC" + } else { + return "ASC" + } +} + +type DatabaseQueryResults struct { + Columns []DatabaseColumn `json:"columns,omitempty"` + Rows []map[string]interface{} `json:"rows,omitempty"` + Output string `json:"output,omitempty"` + Error string `json:"error,omitempty"` +} diff --git a/core/database/interfaces/database_registry_service.go b/core/database/interfaces/database_registry_service.go new file mode 100644 index 000000000..5fc666828 --- /dev/null +++ b/core/database/interfaces/database_registry_service.go @@ -0,0 +1,11 @@ +package interfaces + +import ( + "go.mongodb.org/mongo-driver/bson/primitive" +) + +type DatabaseRegistryService interface { + Start() + CheckStatus() + GetDatabaseService(id primitive.ObjectID) (res DatabaseService, err error) +} diff --git a/core/database/interfaces/database_service.go b/core/database/interfaces/database_service.go new file mode 100644 index 000000000..122cbb220 --- /dev/null +++ b/core/database/interfaces/database_service.go @@ -0,0 +1,27 @@ +package interfaces + +import ( + "github.com/crawlab-team/crawlab/core/database/entity" + "github.com/crawlab-team/crawlab/core/models/models" + "go.mongodb.org/mongo-driver/bson/primitive" +) + +type DatabaseService interface { + TestConnection(id primitive.ObjectID) (err error) + GetMetadata(id primitive.ObjectID) (m *entity.DatabaseMetadata, err error) + GetMetadataAllDb(id primitive.ObjectID) (m *entity.DatabaseMetadata, err error) + CreateDatabase(id primitive.ObjectID, databaseName string) (err error) + DropDatabase(id primitive.ObjectID, databaseName string) (err error) + GetTableMetadata(id primitive.ObjectID, databaseName, tableName string, filter map[string]interface{}) (table *entity.DatabaseTable, err error) + CreateTable(id primitive.ObjectID, databaseName string, table *entity.DatabaseTable) (err error) + ModifyTable(id primitive.ObjectID, databaseName string, table *entity.DatabaseTable) (err error) + DropTable(id primitive.ObjectID, databaseName, tableName string) (err error) + RenameTable(id primitive.ObjectID, databaseName, oldTableName, newTableName string) (err error) + GetColumnTypes(query string) (types []string) + ReadRows(id primitive.ObjectID, databaseName, tableName string, filter map[string]interface{}, skip, limit int) ([]map[string]interface{}, int64, error) + CreateRow(id primitive.ObjectID, databaseName, tableName string, row map[string]interface{}) error + UpdateRow(id primitive.ObjectID, databaseName, tableName string, filter map[string]interface{}, update map[string]interface{}) error + DeleteRow(id primitive.ObjectID, databaseName, tableName string, filter map[string]interface{}) error + Query(id primitive.ObjectID, databaseName, query string) (results *entity.DatabaseQueryResults, err error) + GetCurrentMetric(id primitive.ObjectID) (m *models.DatabaseMetric, err error) +} diff --git a/core/database/registry_service.go b/core/database/registry_service.go new file mode 100644 index 000000000..e05b78094 --- /dev/null +++ b/core/database/registry_service.go @@ -0,0 +1,15 @@ +package database + +import ( + "github.com/crawlab-team/crawlab/core/database/interfaces" +) + +var serviceInstance interfaces.DatabaseRegistryService + +func SetDatabaseRegistryService(svc interfaces.DatabaseRegistryService) { + serviceInstance = svc +} + +func GetDatabaseRegistryService() interfaces.DatabaseRegistryService { + return serviceInstance +} diff --git a/core/dependency/registry_service.go b/core/dependency/registry_service.go new file mode 100644 index 000000000..e78acd660 --- /dev/null +++ b/core/dependency/registry_service.go @@ -0,0 +1,15 @@ +package dependency + +import ( + "github.com/crawlab-team/crawlab/core/interfaces" +) + +var serviceInstance interfaces.DependencyInstallerService + +func SetDependencyInstallerRegistryService(svc interfaces.DependencyInstallerService) { + serviceInstance = svc +} + +func GetDependencyInstallerRegistryService() interfaces.DependencyInstallerService { + return serviceInstance +} diff --git a/core/ds/cockroachdb.go b/core/ds/cockroachdb.go deleted file mode 100644 index 44aca2630..000000000 --- a/core/ds/cockroachdb.go +++ /dev/null @@ -1,70 +0,0 @@ -package ds - -import ( - "github.com/crawlab-team/crawlab/core/constants" - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/core/models/service" - "github.com/crawlab-team/crawlab/core/utils" - "github.com/crawlab-team/crawlab/trace" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -type CockroachdbService struct { - SqlService -} - -func NewDataSourceCockroachdbService(colId primitive.ObjectID, dsId primitive.ObjectID) (svc2 interfaces.ResultService, err error) { - // service - svc := &CockroachdbService{} - - // dependency injection - svc.modelSvc, err = service.GetService() - if err != nil { - return nil, trace.TraceError(err) - } - - // data source - if dsId.IsZero() { - svc.ds = &models.DataSource{} - } else { - svc.ds, err = svc.modelSvc.GetDataSourceById(dsId) - if err != nil { - return nil, trace.TraceError(err) - } - } - - // data source defaults - if svc.ds.Host == "" { - svc.ds.Host = constants.DefaultHost - } - if svc.ds.Port == "" { - svc.ds.Port = constants.DefaultCockroachdbPort - } - - // data source password - pwd, err := svc.modelSvc.GetPasswordById(svc.ds.Id) - if err == nil { - svc.ds.Password, err = utils.DecryptAES(pwd.Password) - if err != nil { - return nil, err - } - } - - // data collection - svc.dc, err = svc.modelSvc.GetDataCollectionById(colId) - if err != nil { - return nil, trace.TraceError(err) - } - - // session - svc.s, err = utils.GetCockroachdbSession(svc.ds) - if err != nil { - return nil, trace.TraceError(err) - } - - // collection - svc.col = svc.s.Collection(svc.dc.Name) - - return svc, nil -} diff --git a/core/ds/default.go b/core/ds/default.go deleted file mode 100644 index e5143a2c9..000000000 --- a/core/ds/default.go +++ /dev/null @@ -1 +0,0 @@ -package ds diff --git a/core/ds/es.go b/core/ds/es.go deleted file mode 100644 index e3910d195..000000000 --- a/core/ds/es.go +++ /dev/null @@ -1,220 +0,0 @@ -package ds - -import ( - "context" - "encoding/json" - "errors" - "fmt" - "github.com/crawlab-team/crawlab/core/constants" - constants2 "github.com/crawlab-team/crawlab/core/constants" - "github.com/crawlab-team/crawlab/core/entity" - entity2 "github.com/crawlab-team/crawlab/core/entity" - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/core/models/service" - "github.com/crawlab-team/crawlab/core/utils" - "github.com/crawlab-team/crawlab/db/generic" - "github.com/crawlab-team/crawlab/trace" - "github.com/elastic/go-elasticsearch/v8" - "github.com/elastic/go-elasticsearch/v8/esapi" - "github.com/google/uuid" - "go.mongodb.org/mongo-driver/bson/primitive" - "strings" - "sync" - "time" -) - -type ElasticsearchService struct { - // dependencies - modelSvc service.ModelService - - // internals - dc *models.DataCollection // models.DataCollection - ds *models.DataSource // models.DataSource - c *elasticsearch.Client // elasticsearch.Client - t time.Time -} - -func (svc *ElasticsearchService) Insert(records ...interface{}) (err error) { - // wait group - var wg sync.WaitGroup - wg.Add(len(records)) - - // iterate records - for _, r := range records { - // async operation - go func(r interface{}) { - switch r.(type) { - case entity.Result: - // convert type to entity.Result - d := r.(entity.Result) - - // get document id - id := d.GetValue("id") - var docId string - switch id.(type) { - case string: - docId = id.(string) - } - if docId == "" { - docId = uuid.New().String() // generate new uuid if id is empty - } - - // collection - d[constants2.DataCollectionKey] = svc.dc.Name - - // index request - req := esapi.IndexRequest{ - Index: svc.getIndexName(), - DocumentID: docId, - Body: strings.NewReader(d.String()), - } - - // perform request - res, err := req.Do(context.Background(), svc.c) - if err != nil { - trace.PrintError(err) - wg.Done() - return - } - defer res.Body.Close() - if res.IsError() { - trace.PrintError(errors.New(fmt.Sprintf("[ElasticsearchService] [%s] error inserting record: %v", res.Status(), r))) - } - - // release - wg.Done() - default: - wg.Done() - return - } - }(r) - } - - // wait - wg.Wait() - - return nil -} - -func (svc *ElasticsearchService) List(query generic.ListQuery, opts *generic.ListOptions) (results []interface{}, err error) { - data, err := svc.getListResponse(query, opts, false) - if err != nil { - return nil, err - } - for _, hit := range data.Hits.Hits { - results = append(results, hit.Source) - } - return results, nil -} - -func (svc *ElasticsearchService) Count(query generic.ListQuery) (n int, err error) { - data, err := svc.getListResponse(query, nil, true) - if err != nil { - return n, err - } - return int(data.Hits.Total.Value), nil -} - -func (svc *ElasticsearchService) getListResponse(query generic.ListQuery, opts *generic.ListOptions, trackTotalHits bool) (data *entity2.ElasticsearchResponseData, err error) { - if opts == nil { - opts = &generic.ListOptions{} - } - query = append(query, generic.ListQueryCondition{ - Key: constants2.DataCollectionKey, - Op: constants2.FilterOpEqual, - Value: svc.dc.Name, - }) - res, err := svc.c.Search( - svc.c.Search.WithContext(context.Background()), - svc.c.Search.WithIndex(svc.getIndexName()), - svc.c.Search.WithBody(utils.GetElasticsearchQueryWithOptions(query, opts)), - svc.c.Search.WithTrackTotalHits(trackTotalHits), - ) - if err != nil { - return nil, trace.TraceError(err) - } - defer res.Body.Close() - if res.IsError() { - err = errors.New(fmt.Sprintf("[ElasticsearchService] [%s] error listing records: response=%s, query=%v opts=%v", res.Status(), res.String(), query, opts)) - trace.PrintError(err) - return nil, err - } - data = &entity2.ElasticsearchResponseData{} - if err := json.NewDecoder(res.Body).Decode(data); err != nil { - return nil, trace.TraceError(err) - } - return data, nil -} - -func (svc *ElasticsearchService) getIndexName() (index string) { - if svc.ds.Database == "" { - return svc.dc.Name - } else { - return svc.ds.Name - } -} - -func NewDataSourceElasticsearchService(colId primitive.ObjectID, dsId primitive.ObjectID) (svc2 interfaces.ResultService, err error) { - // service - svc := &ElasticsearchService{} - - // dependency injection - svc.modelSvc, err = service.GetService() - if err != nil { - return nil, err - } - - // data source - if dsId.IsZero() { - svc.ds = &models.DataSource{} - } else { - svc.ds, err = svc.modelSvc.GetDataSourceById(dsId) - if err != nil { - return nil, err - } - } - - // data source defaults - if svc.ds.Host == "" { - svc.ds.Host = constants.DefaultHost - } - if svc.ds.Port == "" { - svc.ds.Port = constants.DefaultElasticsearchPort - } - - // data source password - pwd, err := svc.modelSvc.GetPasswordById(svc.ds.Id) - if err == nil { - svc.ds.Password, err = utils.DecryptAES(pwd.Password) - if err != nil { - return nil, err - } - } - - // data collection - svc.dc, err = svc.modelSvc.GetDataCollectionById(colId) - if err != nil { - return nil, err - } - - // client - svc.c, err = utils.GetElasticsearchClient(svc.ds) - if err != nil { - return nil, err - } - - return svc, nil -} - -func (svc *ElasticsearchService) Index(fields []string) { - // TODO: implement me -} - -func (svc *ElasticsearchService) SetTime(t time.Time) { - svc.t = t -} - -func (svc *ElasticsearchService) GetTime() (t time.Time) { - return svc.t -} diff --git a/core/ds/kafka.go b/core/ds/kafka.go deleted file mode 100644 index 4931b6326..000000000 --- a/core/ds/kafka.go +++ /dev/null @@ -1,116 +0,0 @@ -package ds - -import ( - "github.com/cenkalti/backoff/v4" - "github.com/crawlab-team/crawlab/core/constants" - "github.com/crawlab-team/crawlab/core/entity" - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/core/models/service" - "github.com/crawlab-team/crawlab/core/utils" - "github.com/crawlab-team/crawlab/db/generic" - "github.com/crawlab-team/crawlab/trace" - "github.com/segmentio/kafka-go" - "go.mongodb.org/mongo-driver/bson/primitive" - "time" -) - -type KafkaService struct { - // dependencies - modelSvc service.ModelService - - // internals - dc *models.DataCollection // models.DataCollection - ds *models.DataSource // models.DataSource - c *kafka.Conn // kafka.Conn - rb backoff.BackOff - t time.Time -} - -func (svc *KafkaService) Insert(records ...interface{}) (err error) { - var messages []kafka.Message - for _, r := range records { - switch r.(type) { - case entity.Result: - d := r.(entity.Result) - messages = append(messages, kafka.Message{ - Topic: svc.ds.Database, - Key: []byte(d.GetTaskId().Hex()), - Value: d.Bytes(), - }) - } - } - _, err = svc.c.WriteMessages(messages...) - if err != nil { - return trace.TraceError(err) - } - return nil -} - -func (svc *KafkaService) List(query generic.ListQuery, opts *generic.ListOptions) (results []interface{}, err error) { - // N/A - return nil, nil -} - -func (svc *KafkaService) Count(query generic.ListQuery) (n int, err error) { - // N/A - return 0, nil -} - -func NewDataSourceKafkaService(colId primitive.ObjectID, dsId primitive.ObjectID) (svc2 interfaces.ResultService, err error) { - // service - svc := &KafkaService{} - - // dependency injection - svc.modelSvc, err = service.GetService() - if err != nil { - return nil, err - } - - // data source - if dsId.IsZero() { - svc.ds = &models.DataSource{} - } else { - svc.ds, err = svc.modelSvc.GetDataSourceById(dsId) - if err != nil { - return nil, err - } - } - - // data source defaults - if svc.ds.Host == "" { - svc.ds.Host = constants.DefaultHost - } - if svc.ds.Port == "" { - svc.ds.Port = constants.DefaultKafkaPort - } - - // data source password - pwd, err := svc.modelSvc.GetPasswordById(svc.ds.Id) - if err == nil { - svc.ds.Password, err = utils.DecryptAES(pwd.Password) - if err != nil { - return nil, err - } - } - - // data collection - svc.dc, err = svc.modelSvc.GetDataCollectionById(colId) - if err != nil { - return nil, err - } - - return svc, nil -} - -func (svc *KafkaService) Index(fields []string) { - // TODO: implement me -} - -func (svc *KafkaService) SetTime(t time.Time) { - svc.t = t -} - -func (svc *KafkaService) GetTime() (t time.Time) { - return svc.t -} diff --git a/core/ds/mongo.go b/core/ds/mongo.go deleted file mode 100644 index d6e69d3d4..000000000 --- a/core/ds/mongo.go +++ /dev/null @@ -1,118 +0,0 @@ -package ds - -import ( - "github.com/crawlab-team/crawlab/core/constants" - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/core/models/service" - "github.com/crawlab-team/crawlab/core/utils" - utils2 "github.com/crawlab-team/crawlab/core/utils" - "github.com/crawlab-team/crawlab/db/generic" - "github.com/crawlab-team/crawlab/db/mongo" - "go.mongodb.org/mongo-driver/bson/primitive" - mongo2 "go.mongodb.org/mongo-driver/mongo" - "time" -) - -type MongoService struct { - // dependencies - modelSvc service.ModelService - - // internals - dc *models.DataCollection // models.DataCollection - ds *models.DataSource // models.DataSource - c *mongo2.Client - db *mongo2.Database - col *mongo.Col - t time.Time -} - -func (svc *MongoService) Insert(records ...interface{}) (err error) { - _, err = svc.col.InsertMany(records) - return err -} - -func (svc *MongoService) List(query generic.ListQuery, opts *generic.ListOptions) (results []interface{}, err error) { - var docs []models.Result - if err := svc.col.Find(utils.GetMongoQuery(query), utils.GetMongoOpts(opts)).All(&docs); err != nil { - return nil, err - } - for i := range docs { - results = append(results, &docs[i]) - } - return results, nil -} - -func (svc *MongoService) Count(query generic.ListQuery) (n int, err error) { - return svc.col.Count(utils.GetMongoQuery(query)) -} - -func NewDataSourceMongoService(colId primitive.ObjectID, dsId primitive.ObjectID) (svc2 interfaces.ResultService, err error) { - // service - svc := &MongoService{} - - // dependency injection - svc.modelSvc, err = service.GetService() - if err != nil { - return nil, err - } - - // data source - if dsId.IsZero() { - svc.ds = &models.DataSource{} - } else { - svc.ds, err = svc.modelSvc.GetDataSourceById(dsId) - if err != nil { - return nil, err - } - } - - // data source defaults - if svc.ds.Host == "" { - svc.ds.Host = constants.DefaultHost - } - if svc.ds.Port == "" { - svc.ds.Port = constants.DefaultMongoPort - } - - // data source password - pwd, err := svc.modelSvc.GetPasswordById(svc.ds.Id) - if err == nil { - svc.ds.Password, err = utils.DecryptAES(pwd.Password) - if err != nil { - return nil, err - } - } - - // data collection - svc.dc, err = svc.modelSvc.GetDataCollectionById(colId) - if err != nil { - return nil, err - } - - // mongo client - svc.c, err = utils2.GetMongoClient(svc.ds) - if err != nil { - return nil, err - } - - // mongo database - svc.db = mongo.GetMongoDb(svc.ds.Database, mongo.WithDbClient(svc.c)) - - // mongo col - svc.col = mongo.GetMongoColWithDb(svc.dc.Name, svc.db) - - return svc, nil -} - -func (svc *MongoService) Index(fields []string) { - // TODO: implement me -} - -func (svc *MongoService) SetTime(t time.Time) { - svc.t = t -} - -func (svc *MongoService) GetTime() (t time.Time) { - return svc.t -} diff --git a/core/ds/mssql.go b/core/ds/mssql.go deleted file mode 100644 index f73e4be65..000000000 --- a/core/ds/mssql.go +++ /dev/null @@ -1,71 +0,0 @@ -package ds - -import ( - "github.com/crawlab-team/crawlab/core/constants" - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/core/models/service" - "github.com/crawlab-team/crawlab/core/utils" - utils2 "github.com/crawlab-team/crawlab/core/utils" - "github.com/crawlab-team/crawlab/trace" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -type MssqlService struct { - SqlService -} - -func NewDataSourceMssqlService(colId primitive.ObjectID, dsId primitive.ObjectID) (svc2 interfaces.ResultService, err error) { - // service - svc := &MssqlService{} - - // dependency injection - svc.modelSvc, err = service.GetService() - if err != nil { - return nil, trace.TraceError(err) - } - - // data source - if dsId.IsZero() { - svc.ds = &models.DataSource{} - } else { - svc.ds, err = svc.modelSvc.GetDataSourceById(dsId) - if err != nil { - return nil, trace.TraceError(err) - } - } - - // data source defaults - if svc.ds.Host == "" { - svc.ds.Host = constants.DefaultHost - } - if svc.ds.Port == "" { - svc.ds.Port = constants.DefaultMssqlPort - } - - // data source password - pwd, err := svc.modelSvc.GetPasswordById(svc.ds.Id) - if err == nil { - svc.ds.Password, err = utils.DecryptAES(pwd.Password) - if err != nil { - return nil, err - } - } - - // data collection - svc.dc, err = svc.modelSvc.GetDataCollectionById(colId) - if err != nil { - return nil, trace.TraceError(err) - } - - // session - svc.s, err = utils2.GetMssqlSession(svc.ds) - if err != nil { - return nil, trace.TraceError(err) - } - - // collection - svc.col = svc.s.Collection(svc.dc.Name) - - return svc, nil -} diff --git a/core/ds/mssql_test.go b/core/ds/mssql_test.go deleted file mode 100644 index 229197c74..000000000 --- a/core/ds/mssql_test.go +++ /dev/null @@ -1,8 +0,0 @@ -package ds - -import "testing" - -func TestNewDataSourceMssqlService(t *testing.T) { - t.Run("insert", func(t *testing.T) { - }) -} diff --git a/core/ds/mysql.go b/core/ds/mysql.go deleted file mode 100644 index b9f840181..000000000 --- a/core/ds/mysql.go +++ /dev/null @@ -1,69 +0,0 @@ -package ds - -import ( - "github.com/crawlab-team/crawlab/core/constants" - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/core/models/service" - "github.com/crawlab-team/crawlab/core/utils" - utils2 "github.com/crawlab-team/crawlab/core/utils" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -type MysqlService struct { - SqlService -} - -func NewDataSourceMysqlService(colId primitive.ObjectID, dsId primitive.ObjectID) (svc2 interfaces.ResultService, err error) { - // service - svc := &MysqlService{} - - // dependency injection - svc.modelSvc, err = service.GetService() - if err != nil { - return nil, err - } - - // data source - if dsId.IsZero() { - svc.ds = &models.DataSource{} - } else { - svc.ds, err = svc.modelSvc.GetDataSourceById(dsId) - if err != nil { - return nil, err - } - } - - // data source defaults - if svc.ds.Host == "" { - svc.ds.Host = constants.DefaultHost - } - if svc.ds.Port == "" { - svc.ds.Port = constants.DefaultMysqlPort - } - - // data source password - pwd, err := svc.modelSvc.GetPasswordById(svc.ds.Id) - if err == nil { - svc.ds.Password, err = utils.DecryptAES(pwd.Password) - if err != nil { - return nil, err - } - } - // data collection - svc.dc, err = svc.modelSvc.GetDataCollectionById(colId) - if err != nil { - return nil, err - } - - // session - svc.s, err = utils2.GetMysqlSession(svc.ds) - if err != nil { - return nil, err - } - - // collection - svc.col = svc.s.Collection(svc.dc.Name) - - return svc, nil -} diff --git a/core/ds/options.go b/core/ds/options.go deleted file mode 100644 index 58cc970e8..000000000 --- a/core/ds/options.go +++ /dev/null @@ -1,14 +0,0 @@ -package ds - -import ( - "github.com/crawlab-team/crawlab/core/interfaces" - "time" -) - -type DataSourceServiceOption func(svc interfaces.DataSourceService) - -func WithMonitorInterval(duration time.Duration) DataSourceServiceOption { - return func(svc interfaces.DataSourceService) { - svc.SetMonitorInterval(duration) - } -} diff --git a/core/ds/postgresql.go b/core/ds/postgresql.go deleted file mode 100644 index 174d004be..000000000 --- a/core/ds/postgresql.go +++ /dev/null @@ -1,71 +0,0 @@ -package ds - -import ( - "github.com/crawlab-team/crawlab/core/constants" - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/core/models/service" - "github.com/crawlab-team/crawlab/core/utils" - utils2 "github.com/crawlab-team/crawlab/core/utils" - "github.com/crawlab-team/crawlab/trace" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -type PostgresqlService struct { - SqlService -} - -func NewDataSourcePostgresqlService(colId primitive.ObjectID, dsId primitive.ObjectID) (svc2 interfaces.ResultService, err error) { - // service - svc := &PostgresqlService{} - - // dependency injection - svc.modelSvc, err = service.GetService() - if err != nil { - return nil, trace.TraceError(err) - } - - // data source - if dsId.IsZero() { - svc.ds = &models.DataSource{} - } else { - svc.ds, err = svc.modelSvc.GetDataSourceById(dsId) - if err != nil { - return nil, trace.TraceError(err) - } - } - - // data source defaults - if svc.ds.Host == "" { - svc.ds.Host = constants.DefaultHost - } - if svc.ds.Port == "" { - svc.ds.Port = constants.DefaultPostgresqlPort - } - - // data source password - pwd, err := svc.modelSvc.GetPasswordById(svc.ds.Id) - if err == nil { - svc.ds.Password, err = utils.DecryptAES(pwd.Password) - if err != nil { - return nil, err - } - } - - // data collection - svc.dc, err = svc.modelSvc.GetDataCollectionById(colId) - if err != nil { - return nil, trace.TraceError(err) - } - - // session - svc.s, err = utils2.GetPostgresqlSession(svc.ds) - if err != nil { - return nil, trace.TraceError(err) - } - - // collection - svc.col = svc.s.Collection(svc.dc.Name) - - return svc, nil -} diff --git a/core/ds/service.go b/core/ds/service.go deleted file mode 100644 index 9991e4d56..000000000 --- a/core/ds/service.go +++ /dev/null @@ -1,305 +0,0 @@ -package ds - -import ( - "github.com/apex/log" - "github.com/crawlab-team/crawlab/core/constants" - constants2 "github.com/crawlab-team/crawlab/core/constants" - "github.com/crawlab-team/crawlab/core/container" - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/models/delegate" - "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/core/models/service" - "github.com/crawlab-team/crawlab/core/result" - "github.com/crawlab-team/crawlab/core/utils" - utils2 "github.com/crawlab-team/crawlab/core/utils" - "github.com/crawlab-team/crawlab/trace" - "go.mongodb.org/mongo-driver/bson/primitive" - "go.mongodb.org/mongo-driver/mongo" - "sync" - "time" -) - -type Service struct { - // dependencies - modelSvc service.ModelService - - // internals - timeout time.Duration - monitorInterval time.Duration - stopped bool -} - -func (svc *Service) Init() { - // result service registry - reg := result.GetResultServiceRegistry() - - // register result services - reg.Register(constants.DataSourceTypeMongo, NewDataSourceMongoService) - reg.Register(constants.DataSourceTypeMysql, NewDataSourceMysqlService) - reg.Register(constants.DataSourceTypePostgresql, NewDataSourcePostgresqlService) - reg.Register(constants.DataSourceTypeMssql, NewDataSourceMssqlService) - reg.Register(constants.DataSourceTypeSqlite, NewDataSourceSqliteService) - reg.Register(constants.DataSourceTypeCockroachdb, NewDataSourceCockroachdbService) - reg.Register(constants.DataSourceTypeElasticSearch, NewDataSourceElasticsearchService) - reg.Register(constants.DataSourceTypeKafka, NewDataSourceKafkaService) -} - -func (svc *Service) Start() { - // start monitoring - go svc.Monitor() -} - -func (svc *Service) Wait() { - utils.DefaultWait() -} - -func (svc *Service) Stop() { - svc.stopped = true -} - -func (svc *Service) ChangePassword(id primitive.ObjectID, password string) (err error) { - p, err := svc.modelSvc.GetPasswordById(id) - if err == nil { - // exists, save - encryptedPassword, err := utils.EncryptAES(password) - if err != nil { - return err - } - p.Password = encryptedPassword - if err := delegate.NewModelDelegate(p).Save(); err != nil { - return err - } - return nil - } else if err.Error() == mongo.ErrNoDocuments.Error() { - // not exists, add - encryptedPassword, err := utils.EncryptAES(password) - if err != nil { - return err - } - p = &models.Password{ - Id: id, - Password: encryptedPassword, - } - if err := delegate.NewModelDelegate(p).Add(); err != nil { - return err - } - return nil - } else { - // error - return err - } -} - -func (svc *Service) Monitor() { - for { - // return if stopped - if svc.stopped { - return - } - - // monitor - if err := svc.monitor(); err != nil { - trace.PrintError(err) - } - - // wait - time.Sleep(svc.monitorInterval) - } -} - -func (svc *Service) CheckStatus(id primitive.ObjectID) (err error) { - ds, err := svc.modelSvc.GetDataSourceById(id) - if err != nil { - return err - } - return svc.checkStatus(ds, true) -} - -func (svc *Service) SetTimeout(duration time.Duration) { - svc.timeout = duration -} - -func (svc *Service) SetMonitorInterval(duration time.Duration) { - svc.monitorInterval = duration -} - -func (svc *Service) monitor() (err error) { - // start - tic := time.Now() - log.Debugf("[DataSourceService] start monitoring") - - // data source list - dsList, err := svc.modelSvc.GetDataSourceList(nil, nil) - if err != nil { - return err - } - - // waiting group - wg := sync.WaitGroup{} - wg.Add(len(dsList)) - - // iterate data source list - for _, ds := range dsList { - // async operation - go func(ds models.DataSource) { - // check status and save - _ = svc.checkStatus(&ds, true) - - // release - wg.Done() - }(ds) - } - - // wait - wg.Wait() - - // finish - toc := time.Now() - log.Debugf("[DataSourceService] finished monitoring. elapsed: %d ms", (toc.Sub(tic)).Milliseconds()) - - return nil -} - -func (svc *Service) checkStatus(ds *models.DataSource, save bool) (err error) { - // password - if ds.Password == "" { - pwd, err := svc.modelSvc.GetPasswordById(ds.Id) - if err == nil { - ds.Password, err = utils.DecryptAES(pwd.Password) - if err != nil { - return err - } - } else if err.Error() != mongo.ErrNoDocuments.Error() { - return trace.TraceError(err) - } - } - - // check status - if err := svc._checkStatus(ds); err != nil { - ds.Status = constants2.DataSourceStatusOffline - ds.Error = err.Error() - } else { - ds.Status = constants2.DataSourceStatusOnline - ds.Error = "" - } - - // save - if save { - return svc._save(ds) - } - - return nil -} - -func (svc *Service) _save(ds *models.DataSource) (err error) { - log.Debugf("[DataSourceService] saving data source: name=%s, type=%s, status=%s, error=%s", ds.Name, ds.Type, ds.Status, ds.Error) - return delegate.NewModelDelegate(ds).Save() -} - -func (svc *Service) _checkStatus(ds *models.DataSource) (err error) { - switch ds.Type { - case constants.DataSourceTypeMongo: - _, err := utils2.GetMongoClientWithTimeout(ds, svc.timeout) - if err != nil { - return err - } - case constants.DataSourceTypeMysql: - s, err := utils2.GetMysqlSessionWithTimeout(ds, svc.timeout) - if err != nil { - return err - } - if s != nil { - s.Close() - } - case constants.DataSourceTypePostgresql: - s, err := utils2.GetPostgresqlSessionWithTimeout(ds, svc.timeout) - if err != nil { - return err - } - if s != nil { - s.Close() - } - case constants.DataSourceTypeMssql: - s, err := utils2.GetMssqlSessionWithTimeout(ds, svc.timeout) - if err != nil { - return err - } - if s != nil { - s.Close() - } - case constants.DataSourceTypeSqlite: - s, err := utils2.GetSqliteSessionWithTimeout(ds, svc.timeout) - if err != nil { - return err - } - if s != nil { - s.Close() - } - case constants.DataSourceTypeCockroachdb: - s, err := utils2.GetCockroachdbSessionWithTimeout(ds, svc.timeout) - if err != nil { - return err - } - if s != nil { - s.Close() - } - case constants.DataSourceTypeElasticSearch: - _, err := utils2.GetElasticsearchClientWithTimeout(ds, svc.timeout) - if err != nil { - return err - } - case constants.DataSourceTypeKafka: - c, err := utils2.GetKafkaConnectionWithTimeout(ds, svc.timeout) - if err != nil { - return err - } - if c != nil { - c.Close() - } - default: - log.Warnf("[DataSourceService] invalid data source type: %s", ds.Type) - } - return nil -} - -func NewDataSourceService(opts ...DataSourceServiceOption) (svc2 interfaces.DataSourceService, err error) { - // service - svc := &Service{ - monitorInterval: 15 * time.Second, - timeout: 10 * time.Second, - } - - // apply options - for _, opt := range opts { - opt(svc) - } - - // dependency injection - if err := container.GetContainer().Invoke(func(modelSvc service.ModelService) { - svc.modelSvc = modelSvc - }); err != nil { - return nil, trace.TraceError(err) - } - - // initialize - svc.Init() - - // start - svc.Start() - - return svc, nil -} - -var _dsSvc interfaces.DataSourceService - -func GetDataSourceService() (svc interfaces.DataSourceService, err error) { - if _dsSvc != nil { - return _dsSvc, nil - } - svc, err = NewDataSourceService() - if err != nil { - return nil, err - } - _dsSvc = svc - return svc, nil -} diff --git a/core/ds/service_v2.go b/core/ds/service_v2.go deleted file mode 100644 index 120939494..000000000 --- a/core/ds/service_v2.go +++ /dev/null @@ -1,271 +0,0 @@ -package ds - -import ( - "github.com/apex/log" - "github.com/crawlab-team/crawlab/core/constants" - constants2 "github.com/crawlab-team/crawlab/core/constants" - "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/core/models/service" - "github.com/crawlab-team/crawlab/core/result" - "github.com/crawlab-team/crawlab/core/utils" - utils2 "github.com/crawlab-team/crawlab/core/utils" - "github.com/crawlab-team/crawlab/trace" - "go.mongodb.org/mongo-driver/bson/primitive" - "sync" - "time" -) - -type ServiceV2 struct { - // internals - timeout time.Duration - monitorInterval time.Duration - stopped bool -} - -func (svc *ServiceV2) Init() { - // result service registry - reg := result.GetResultServiceRegistry() - - // register result services - reg.Register(constants.DataSourceTypeMongo, NewDataSourceMongoService) - reg.Register(constants.DataSourceTypeMysql, NewDataSourceMysqlService) - reg.Register(constants.DataSourceTypePostgresql, NewDataSourcePostgresqlService) - reg.Register(constants.DataSourceTypeMssql, NewDataSourceMssqlService) - reg.Register(constants.DataSourceTypeSqlite, NewDataSourceSqliteService) - reg.Register(constants.DataSourceTypeCockroachdb, NewDataSourceCockroachdbService) - reg.Register(constants.DataSourceTypeElasticSearch, NewDataSourceElasticsearchService) - reg.Register(constants.DataSourceTypeKafka, NewDataSourceKafkaService) -} - -func (svc *ServiceV2) Start() { - // start monitoring - go svc.Monitor() -} - -func (svc *ServiceV2) Wait() { - utils.DefaultWait() -} - -func (svc *ServiceV2) Stop() { - svc.stopped = true -} - -func (svc *ServiceV2) ChangePassword(id primitive.ObjectID, password string, by primitive.ObjectID) (err error) { - dataSource, err := service.NewModelServiceV2[models.DataSourceV2]().GetById(id) - if err != nil { - return err - } - dataSource.Password, err = utils.EncryptAES(password) - if err != nil { - return err - } - dataSource.SetUpdated(by) - err = service.NewModelServiceV2[models.DataSourceV2]().ReplaceById(id, *dataSource) - if err != nil { - return err - } - return nil -} - -func (svc *ServiceV2) Monitor() { - for { - // return if stopped - if svc.stopped { - return - } - - // monitor - if err := svc.monitor(); err != nil { - trace.PrintError(err) - } - - // wait - time.Sleep(svc.monitorInterval) - } -} - -func (svc *ServiceV2) CheckStatus(id primitive.ObjectID) (err error) { - ds, err := service.NewModelServiceV2[models.DataSourceV2]().GetById(id) - if err != nil { - return err - } - return svc.checkStatus(ds, true) -} - -func (svc *ServiceV2) SetTimeout(duration time.Duration) { - svc.timeout = duration -} - -func (svc *ServiceV2) SetMonitorInterval(duration time.Duration) { - svc.monitorInterval = duration -} - -func (svc *ServiceV2) monitor() (err error) { - // start - tic := time.Now() - log.Debugf("[DataSourceService] start monitoring") - - // data source list - dataSources, err := service.NewModelServiceV2[models.DataSourceV2]().GetMany(nil, nil) - if err != nil { - return err - } - - // waiting group - wg := sync.WaitGroup{} - wg.Add(len(dataSources)) - - // iterate data source list - for _, ds := range dataSources { - // async operation - go func(ds *models.DataSourceV2) { - // check status and save - _ = svc.checkStatus(ds, true) - - // release - wg.Done() - }(&ds) - } - - // wait - wg.Wait() - - // finish - toc := time.Now() - log.Debugf("[DataSourceService] finished monitoring. elapsed: %d ms", (toc.Sub(tic)).Milliseconds()) - - return nil -} - -func (svc *ServiceV2) checkStatus(ds *models.DataSourceV2, save bool) (err error) { - // check status - if err := svc._checkStatus(ds); err != nil { - ds.Status = constants2.DataSourceStatusOffline - ds.Error = err.Error() - } else { - ds.Status = constants2.DataSourceStatusOnline - ds.Error = "" - } - - // save - if save { - return svc._save(ds) - } - - return nil -} - -func (svc *ServiceV2) _save(ds *models.DataSourceV2) (err error) { - log.Debugf("[DataSourceService] saving data source: name=%s, type=%s, status=%s, error=%s", ds.Name, ds.Type, ds.Status, ds.Error) - return service.NewModelServiceV2[models.DataSourceV2]().ReplaceById(ds.Id, *ds) -} - -func (svc *ServiceV2) _checkStatus(ds *models.DataSourceV2) (err error) { - switch ds.Type { - case constants.DataSourceTypeMongo: - _, err := utils2.GetMongoClientWithTimeoutV2(ds, svc.timeout) - if err != nil { - return err - } - case constants.DataSourceTypeMysql: - s, err := utils2.GetMysqlSessionWithTimeoutV2(ds, svc.timeout) - if err != nil { - return err - } - if s != nil { - err := s.Close() - if err != nil { - return err - } - } - case constants.DataSourceTypePostgresql: - s, err := utils2.GetPostgresqlSessionWithTimeoutV2(ds, svc.timeout) - if err != nil { - return err - } - if s != nil { - err := s.Close() - if err != nil { - return err - } - } - case constants.DataSourceTypeMssql: - s, err := utils2.GetMssqlSessionWithTimeoutV2(ds, svc.timeout) - if err != nil { - return err - } - if s != nil { - err := s.Close() - if err != nil { - return err - } - } - case constants.DataSourceTypeSqlite: - s, err := utils2.GetSqliteSessionWithTimeoutV2(ds, svc.timeout) - if err != nil { - return err - } - if s != nil { - err := s.Close() - if err != nil { - return err - } - } - case constants.DataSourceTypeCockroachdb: - s, err := utils2.GetCockroachdbSessionWithTimeoutV2(ds, svc.timeout) - if err != nil { - return err - } - if s != nil { - err := s.Close() - if err != nil { - return err - } - } - case constants.DataSourceTypeElasticSearch: - _, err := utils2.GetElasticsearchClientWithTimeoutV2(ds, svc.timeout) - if err != nil { - return err - } - case constants.DataSourceTypeKafka: - c, err := utils2.GetKafkaConnectionWithTimeoutV2(ds, svc.timeout) - if err != nil { - return err - } - if c != nil { - err := c.Close() - if err != nil { - return err - } - } - default: - log.Warnf("[DataSourceService] invalid data source type: %s", ds.Type) - } - return nil -} - -func NewDataSourceServiceV2() *ServiceV2 { - // service - svc := &ServiceV2{ - monitorInterval: 15 * time.Second, - timeout: 10 * time.Second, - } - - // initialize - svc.Init() - - // start - svc.Start() - - return svc -} - -var _dsSvcV2 *ServiceV2 - -func GetDataSourceServiceV2() *ServiceV2 { - if _dsSvcV2 != nil { - return _dsSvcV2 - } - _dsSvcV2 = NewDataSourceServiceV2() - return _dsSvcV2 -} diff --git a/core/ds/sql.go b/core/ds/sql.go deleted file mode 100644 index 1fa7b100e..000000000 --- a/core/ds/sql.go +++ /dev/null @@ -1,76 +0,0 @@ -package ds - -import ( - "github.com/crawlab-team/crawlab/core/entity" - "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/core/models/service" - utils2 "github.com/crawlab-team/crawlab/core/utils" - "github.com/crawlab-team/crawlab/db/generic" - "github.com/crawlab-team/crawlab/trace" - "github.com/upper/db/v4" - "time" -) - -type SqlService struct { - // dependencies - modelSvc service.ModelService - - // internals - ds *models.DataSource - dc *models.DataCollection - s db.Session - col db.Collection - t time.Time -} - -func (svc *SqlService) Insert(records ...interface{}) (err error) { - for _, d := range records { - var r entity.Result - switch d.(type) { - case entity.Result: - r = d.(entity.Result) - default: - continue - } - _r := r.Flatten() - if _, err = svc.col.Insert(_r); err != nil { - trace.PrintError(err) - continue - } - } - return nil -} - -func (svc *SqlService) List(query generic.ListQuery, opts *generic.ListOptions) (results []interface{}, err error) { - var docs []entity.Result - if err := svc.col.Find(utils2.GetSqlQuery(query)). - Offset(opts.Skip). - Limit(opts.Limit).All(&docs); err != nil { - return nil, trace.TraceError(err) - } - for i := range docs { - d := docs[i].ToJSON() - results = append(results, &d) - } - return results, nil -} - -func (svc *SqlService) Count(query generic.ListQuery) (n int, err error) { - nInt64, err := svc.col.Find(utils2.GetSqlQuery(query)).Count() - if err != nil { - return n, err - } - return int(nInt64), nil -} - -func (svc *SqlService) Index(fields []string) { - // TODO: implement me -} - -func (svc *SqlService) SetTime(t time.Time) { - svc.t = t -} - -func (svc *SqlService) GetTime() (t time.Time) { - return svc.t -} diff --git a/core/ds/sql_options.go b/core/ds/sql_options.go deleted file mode 100644 index e7d268764..000000000 --- a/core/ds/sql_options.go +++ /dev/null @@ -1,6 +0,0 @@ -package ds - -type SqlOptions struct { - DefaultHost string - DefaultPort string -} diff --git a/core/ds/sqlite.go b/core/ds/sqlite.go deleted file mode 100644 index 9e682cd5b..000000000 --- a/core/ds/sqlite.go +++ /dev/null @@ -1,52 +0,0 @@ -package ds - -import ( - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/core/models/service" - utils2 "github.com/crawlab-team/crawlab/core/utils" - "github.com/crawlab-team/crawlab/trace" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -type SqliteService struct { - SqlService -} - -func NewDataSourceSqliteService(colId primitive.ObjectID, dsId primitive.ObjectID) (svc2 interfaces.ResultService, err error) { - // service - svc := &SqliteService{} - - // dependency injection - svc.modelSvc, err = service.GetService() - if err != nil { - return nil, trace.TraceError(err) - } - - // data source - if dsId.IsZero() { - svc.ds = &models.DataSource{} - } else { - svc.ds, err = svc.modelSvc.GetDataSourceById(dsId) - if err != nil { - return nil, trace.TraceError(err) - } - } - - // data collection - svc.dc, err = svc.modelSvc.GetDataCollectionById(colId) - if err != nil { - return nil, trace.TraceError(err) - } - - // session - svc.s, err = utils2.GetSqliteSession(svc.ds) - if err != nil { - return nil, trace.TraceError(err) - } - - // collection - svc.col = svc.s.Collection(svc.dc.Name) - - return svc, nil -} diff --git a/core/entity/address.go b/core/entity/address.go deleted file mode 100644 index 5b91bd1b2..000000000 --- a/core/entity/address.go +++ /dev/null @@ -1,56 +0,0 @@ -package entity - -import ( - "errors" - "fmt" - "strings" -) - -type Address struct { - Host string - Port string -} - -func (a *Address) String() (res string) { - return fmt.Sprintf("%s:%s", a.Host, a.Port) -} - -func (a *Address) IsEmpty() (res bool) { - return a.Host == "" || a.Port == "" -} - -func (a *Address) Value() (res interface{}) { - return a -} - -type AddressOptions struct { - Host string - Port string -} - -func NewAddress(opts *AddressOptions) (res *Address) { - if opts == nil { - opts = &AddressOptions{} - } - //if opts.Host == "" { - // opts.Host = "localhost" - //} - if opts.Port == "" { - opts.Port = "9666" - } - return &Address{ - Host: opts.Host, - Port: opts.Port, - } -} - -func NewAddressFromString(address string) (res *Address, err error) { - parts := strings.Split(address, ":") - if len(parts) == 1 { - return NewAddress(&AddressOptions{Host: parts[0]}), nil - } else if len(parts) == 2 { - return NewAddress(&AddressOptions{Host: parts[0], Port: parts[1]}), nil - } else { - return nil, errors.New(fmt.Sprintf("parsing address error: %v", err)) - } -} diff --git a/core/entity/color.go b/core/entity/color.go deleted file mode 100644 index a8ed0c5b7..000000000 --- a/core/entity/color.go +++ /dev/null @@ -1,18 +0,0 @@ -package entity - -type Color struct { - Name string `json:"name"` - Hex string `json:"hex"` -} - -func (c *Color) GetHex() string { - return c.Hex -} - -func (c *Color) GetName() string { - return c.Name -} - -func (c *Color) Value() interface{} { - return c -} diff --git a/core/entity/common.go b/core/entity/common.go deleted file mode 100644 index c46ae4f9b..000000000 --- a/core/entity/common.go +++ /dev/null @@ -1,17 +0,0 @@ -package entity - -import "strconv" - -type Page struct { - Skip int - Limit int - PageNum int - PageSize int -} - -func (p *Page) GetPage(pageNum string, pageSize string) { - p.PageNum, _ = strconv.Atoi(pageNum) - p.PageSize, _ = strconv.Atoi(pageSize) - p.Skip = p.PageSize * (p.PageNum - 1) - p.Limit = p.PageSize -} diff --git a/core/entity/config_spider.go b/core/entity/config_spider.go deleted file mode 100644 index 054ee2fec..000000000 --- a/core/entity/config_spider.go +++ /dev/null @@ -1,40 +0,0 @@ -package entity - -type ConfigSpiderData struct { - // 通用 - Name string `yaml:"name" json:"name"` - DisplayName string `yaml:"display_name" json:"display_name"` - Col string `yaml:"col" json:"col"` - Remark string `yaml:"remark" json:"remark"` - Type string `yaml:"type" bson:"type"` - - // 可配置爬虫 - Engine string `yaml:"engine" json:"engine"` - StartUrl string `yaml:"start_url" json:"start_url"` - StartStage string `yaml:"start_stage" json:"start_stage"` - Stages []Stage `yaml:"stages" json:"stages"` - Settings map[string]string `yaml:"settings" json:"settings"` - - // 自定义爬虫 - Cmd string `yaml:"cmd" json:"cmd"` -} - -type Stage struct { - Name string `yaml:"name" json:"name"` - IsList bool `yaml:"is_list" json:"is_list"` - ListCss string `yaml:"list_css" json:"list_css"` - ListXpath string `yaml:"list_xpath" json:"list_xpath"` - PageCss string `yaml:"page_css" json:"page_css"` - PageXpath string `yaml:"page_xpath" json:"page_xpath"` - PageAttr string `yaml:"page_attr" json:"page_attr"` - Fields []Field `yaml:"fields" json:"fields"` -} - -type Field struct { - Name string `yaml:"name" json:"name"` - Css string `yaml:"css" json:"css"` - Xpath string `yaml:"xpath" json:"xpath"` - Attr string `yaml:"attr" json:"attr"` - NextStage string `yaml:"next_stage" json:"next_stage"` - Remark string `yaml:"remark" json:"remark"` -} diff --git a/core/entity/dependency.go b/core/entity/dependency.go deleted file mode 100644 index 55f9c6ada..000000000 --- a/core/entity/dependency.go +++ /dev/null @@ -1,14 +0,0 @@ -package entity - -import "go.mongodb.org/mongo-driver/bson/primitive" - -type DependencyResult struct { - Name string `json:"name,omitempty" bson:"name,omitempty"` - NodeIds []primitive.ObjectID `json:"node_ids,omitempty" bson:"node_ids,omitempty"` - Versions []string `json:"versions,omitempty" bson:"versions,omitempty"` - LatestVersion string `json:"latest_version" bson:"latest_version"` - Count int `json:"count,omitempty" bson:"count,omitempty"` - Upgradable bool `json:"upgradable" bson:"upgradable"` - Downgradable bool `json:"downgradable" bson:"downgradable"` - Installable bool `json:"installable" bson:"installable"` -} diff --git a/core/entity/doc.go b/core/entity/doc.go deleted file mode 100644 index b356d38ad..000000000 --- a/core/entity/doc.go +++ /dev/null @@ -1,8 +0,0 @@ -package entity - -type DocItem struct { - Title string `json:"title"` - Url string `json:"url"` - Path string `json:"path"` - Children []DocItem `json:"children"` -} diff --git a/core/entity/es.go b/core/entity/es.go deleted file mode 100644 index d3b5614ac..000000000 --- a/core/entity/es.go +++ /dev/null @@ -1,54 +0,0 @@ -package entity - -/* ElasticsearchResponseData JSON format -{ - "took" : 6, - "timed_out" : false, - "_shards" : { - "total" : 1, - "successful" : 1, - "skipped" : 0, - "failed" : 0 - }, - "hits" : { - "total" : { - "value" : 60, - "relation" : "eq" - }, - "max_score" : 1.0, - "hits" : [ - { - "_index" : "test_table", - "_id" : "c39ad9a2-9a37-49fb-b7ea-f1b55913e0af", - "_score" : 1.0, - "_source" : { - "_tid" : "62524ac7f5f99e7ef594de64", - "author" : "James Baldwin", - "tags" : [ - "love" - ], - "text" : "“Love does not begin and end the way we seem to think it does. Love is a battle, love is a war; love is a growing up.”" - } - } - ] - } -} -*/ - -type ElasticsearchResponseData struct { - Took int64 `json:"took"` - Timeout bool `json:"timeout"` - Hits struct { - Total struct { - Value int64 `json:"value"` - Relation string `json:"relation"` - } `json:"total"` - MaxScore float64 `json:"max_score"` - Hits []struct { - Index string `json:"_index"` - Id string `json:"_id"` - Score float64 `json:"_score"` - Source interface{} `json:"_source"` - } `json:"hits"` - } `json:"hits"` -} diff --git a/core/entity/event.go b/core/entity/event.go deleted file mode 100644 index 975cae60a..000000000 --- a/core/entity/event.go +++ /dev/null @@ -1,14 +0,0 @@ -package entity - -type EventData struct { - Event string - Data interface{} -} - -func (d *EventData) GetEvent() string { - return d.Event -} - -func (d *EventData) GetData() interface{} { - return d.Data -} diff --git a/core/entity/fs_file_info.go b/core/entity/fs_file_info.go index 826ec1316..c2adde5f5 100644 --- a/core/entity/fs_file_info.go +++ b/core/entity/fs_file_info.go @@ -13,7 +13,7 @@ type FsFileInfo struct { Extension string `json:"extension"` // file extension IsDir bool `json:"is_dir"` // whether it is directory FileSize int64 `json:"file_size"` // file size (bytes) - Children []interfaces.FsFileInfo `json:"children"` // children for sub-directory + Children []interfaces.FsFileInfo `json:"children"` // children for subdirectory ModTime time.Time `json:"mod_time"` // modification time Mode os.FileMode `json:"mode"` // file mode Hash string `json:"hash"` // file hash diff --git a/core/entity/git.go b/core/entity/git.go deleted file mode 100644 index f11e2306d..000000000 --- a/core/entity/git.go +++ /dev/null @@ -1,12 +0,0 @@ -package entity - -type GitPayload struct { - Paths []string `json:"paths"` - CommitMessage string `json:"commit_message"` - Branch string `json:"branch"` - Tag string `json:"tag"` -} - -type GitConfig struct { - Url string `json:"url" bson:"url"` -} diff --git a/core/entity/grpc_base_service_message.go b/core/entity/grpc_base_service_message.go deleted file mode 100644 index 243f74203..000000000 --- a/core/entity/grpc_base_service_message.go +++ /dev/null @@ -1,29 +0,0 @@ -package entity - -import ( - "encoding/json" - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/trace" -) - -type GrpcBaseServiceMessage struct { - ModelId interfaces.ModelId `json:"id"` - Data []byte `json:"d"` -} - -func (msg *GrpcBaseServiceMessage) GetModelId() interfaces.ModelId { - return msg.ModelId -} - -func (msg *GrpcBaseServiceMessage) GetData() []byte { - return msg.Data -} - -func (msg *GrpcBaseServiceMessage) ToBytes() (data []byte) { - data, err := json.Marshal(*msg) - if err != nil { - _ = trace.TraceError(err) - return data - } - return data -} diff --git a/core/entity/grpc_base_service_params.go b/core/entity/grpc_base_service_params.go deleted file mode 100644 index 29f0cb517..000000000 --- a/core/entity/grpc_base_service_params.go +++ /dev/null @@ -1,23 +0,0 @@ -package entity - -import ( - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/db/mongo" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -type GrpcBaseServiceParams struct { - Query bson.M `json:"q"` - Id primitive.ObjectID `json:"id"` - Update bson.M `json:"u"` - Doc interfaces.Model `json:"d"` - Fields []string `json:"f"` - FindOptions *mongo.FindOptions `json:"o"` - Docs []interface{} `json:"dl"` - User interfaces.User `json:"U"` -} - -func (params *GrpcBaseServiceParams) Value() interface{} { - return params -} diff --git a/core/entity/grpc_delegate_message.go b/core/entity/grpc_delegate_message.go deleted file mode 100644 index dd8e44255..000000000 --- a/core/entity/grpc_delegate_message.go +++ /dev/null @@ -1,34 +0,0 @@ -package entity - -import ( - "encoding/json" - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/trace" -) - -type GrpcDelegateMessage struct { - ModelId interfaces.ModelId `json:"id"` - Method interfaces.ModelDelegateMethod `json:"m"` - Data []byte `json:"d"` -} - -func (msg *GrpcDelegateMessage) GetModelId() interfaces.ModelId { - return msg.ModelId -} - -func (msg *GrpcDelegateMessage) GetMethod() interfaces.ModelDelegateMethod { - return msg.Method -} - -func (msg *GrpcDelegateMessage) GetData() []byte { - return msg.Data -} - -func (msg *GrpcDelegateMessage) ToBytes() (data []byte) { - data, err := json.Marshal(*msg) - if err != nil { - _ = trace.TraceError(err) - return data - } - return data -} diff --git a/core/entity/grpc_event_service_message.go b/core/entity/grpc_event_service_message.go deleted file mode 100644 index 93b41de18..000000000 --- a/core/entity/grpc_event_service_message.go +++ /dev/null @@ -1,8 +0,0 @@ -package entity - -type GrpcEventServiceMessage struct { - Type string `json:"type"` - Events []string `json:"events"` - Key string `json:"key"` - Data []byte `json:"data"` -} diff --git a/core/entity/grpc_subscribe.go b/core/entity/grpc_subscribe.go deleted file mode 100644 index 79ae46eeb..000000000 --- a/core/entity/grpc_subscribe.go +++ /dev/null @@ -1,26 +0,0 @@ -package entity - -import ( - "github.com/crawlab-team/crawlab/core/interfaces" -) - -type GrpcSubscribe struct { - Stream interfaces.GrpcStream - Finished chan bool -} - -func (sub *GrpcSubscribe) GetStream() interfaces.GrpcStream { - return sub.Stream -} - -func (sub *GrpcSubscribe) GetStreamBidirectional() interfaces.GrpcStreamBidirectional { - stream, ok := sub.Stream.(interfaces.GrpcStreamBidirectional) - if !ok { - return nil - } - return stream -} - -func (sub *GrpcSubscribe) GetFinished() chan bool { - return sub.Finished -} diff --git a/core/entity/http.go b/core/entity/http.go index a958b74bd..40be927f4 100644 --- a/core/entity/http.go +++ b/core/entity/http.go @@ -17,26 +17,8 @@ type ListResponse struct { Error string `json:"error"` } -type ListRequestData struct { - PageNum int `form:"page_num" json:"page_num"` - PageSize int `form:"page_size" json:"page_size"` - SortKey string `form:"sort_key" json:"sort_key"` - Status string `form:"status" json:"status"` - Keyword string `form:"keyword" json:"keyword"` -} - type BatchRequestPayload struct { Ids []primitive.ObjectID `form:"ids" json:"ids"` } -type BatchRequestPayloadWithStringData struct { - Ids []primitive.ObjectID `form:"ids" json:"ids"` - Data string `form:"data" json:"data"` - Fields []string `form:"fields" json:"fields"` -} - -type FileRequestPayload struct { - Path string `json:"path" form:"path"` - NewPath string `json:"new_path" form:"new_path"` - Data string `json:"data" form:"data"` -} +type RequestParam map[string]interface{} diff --git a/core/entity/ipc.go b/core/entity/ipc.go new file mode 100644 index 000000000..6446891e9 --- /dev/null +++ b/core/entity/ipc.go @@ -0,0 +1,8 @@ +package entity + +// IPCMessage defines the structure for messages exchanged between parent and child processes +type IPCMessage struct { + Type string `json:"type"` // message type identifier + Payload interface{} `json:"payload"` // message content + IPC bool `json:"ipc"` // Add this field to explicitly mark IPC messages +} diff --git a/core/entity/model_delegate.go b/core/entity/model_delegate.go deleted file mode 100644 index 533487a05..000000000 --- a/core/entity/model_delegate.go +++ /dev/null @@ -1,11 +0,0 @@ -package entity - -import "github.com/crawlab-team/crawlab/core/interfaces" - -type ModelDelegate struct { - Id interfaces.ModelId `json:"id"` - ColName string `json:"col_name"` - Doc interfaces.Model `json:"doc"` - Artifact interfaces.ModelArtifact `json:"a"` - User interfaces.User `json:"u"` -} diff --git a/core/entity/model_info.go b/core/entity/model_info.go deleted file mode 100644 index e7c9e06fc..000000000 --- a/core/entity/model_info.go +++ /dev/null @@ -1,8 +0,0 @@ -package entity - -import "github.com/crawlab-team/crawlab/core/interfaces" - -type ModelInfo struct { - Id interfaces.ModelId - ColName string -} diff --git a/core/entity/notification_variable.go b/core/entity/notification_variable.go new file mode 100644 index 000000000..631bcc954 --- /dev/null +++ b/core/entity/notification_variable.go @@ -0,0 +1,12 @@ +package entity + +import "fmt" + +type NotificationVariable struct { + Category string `json:"category"` + Name string `json:"name"` +} + +func (v *NotificationVariable) GetKey() string { + return fmt.Sprintf("${%s:%s}", v.Category, v.Name) +} diff --git a/core/entity/rpc.go b/core/entity/rpc.go deleted file mode 100644 index 48f14b266..000000000 --- a/core/entity/rpc.go +++ /dev/null @@ -1,11 +0,0 @@ -package entity - -type RpcMessage struct { - Id string `json:"id"` // 消息ID - Method string `json:"method"` // 消息方法 - NodeId string `json:"node_id"` // 节点ID - Params map[string]string `json:"params"` // 参数 - Timeout int `json:"timeout"` // 超时 - Result string `json:"result"` // 结果 - Error string `json:"error"` // 错误 -} diff --git a/core/entity/spider.go b/core/entity/spider.go deleted file mode 100644 index 616d3bbf7..000000000 --- a/core/entity/spider.go +++ /dev/null @@ -1,17 +0,0 @@ -package entity - -type SpiderType struct { - Type string `json:"type" bson:"_id"` - Count int `json:"count" bson:"count"` -} - -type ScrapySettingParam struct { - Key string `json:"key"` - Value interface{} `json:"value"` - Type string `json:"type"` -} - -type ScrapyItem struct { - Name string `json:"name"` - Fields []string `json:"fields"` -} diff --git a/core/entity/stats.go b/core/entity/stats.go index 7cc228cb2..d70caaba7 100644 --- a/core/entity/stats.go +++ b/core/entity/stats.go @@ -5,8 +5,3 @@ type StatsDailyItem struct { Tasks int64 `json:"tasks" bson:"tasks"` Results int64 `json:"results" bson:"results"` } - -type StatsTasksByStatusItem struct { - Status string `json:"status" bson:"_id"` - Tasks int64 `json:"tasks" bson:"tasks"` -} diff --git a/core/entity/task.go b/core/entity/task.go deleted file mode 100644 index aae4c199b..000000000 --- a/core/entity/task.go +++ /dev/null @@ -1,30 +0,0 @@ -package entity - -import ( - "encoding/json" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -type TaskMessage struct { - Id primitive.ObjectID `json:"id"` - Key string `json:"key"` - Cmd string `json:"cmd"` - Param string `json:"param"` -} - -func (m *TaskMessage) ToString() (string, error) { - data, err := json.Marshal(&m) - if err != nil { - return "", err - } - return string(data), err -} - -type TaskRunOptions struct { -} - -type StreamMessageTaskData struct { - TaskId primitive.ObjectID `json:"task_id"` - Records []Result `json:"data"` - Logs []string `json:"logs"` -} diff --git a/core/entity/translation.go b/core/entity/translation.go deleted file mode 100644 index f54ff2946..000000000 --- a/core/entity/translation.go +++ /dev/null @@ -1,11 +0,0 @@ -package entity - -type Translation struct { - Lang string `json:"lang"` - Key string `json:"key"` - Value string `json:"value"` -} - -func (t Translation) GetLang() (l string) { - return t.Lang -} diff --git a/core/entity/ttl_map.go b/core/entity/ttl_map.go deleted file mode 100644 index 57f7fd646..000000000 --- a/core/entity/ttl_map.go +++ /dev/null @@ -1,58 +0,0 @@ -package entity - -import ( - "sync" - "time" -) - -type TTLMap struct { - TTL time.Duration - - data sync.Map -} - -type expireEntry struct { - ExpiresAt time.Time - Value interface{} -} - -func (t *TTLMap) Store(key string, val interface{}) { - t.data.Store(key, expireEntry{ - ExpiresAt: time.Now().Add(t.TTL), - Value: val, - }) -} - -func (t *TTLMap) Load(key string) (val interface{}) { - entry, ok := t.data.Load(key) - if !ok { - return nil - } - - expireEntry := entry.(expireEntry) - if expireEntry.ExpiresAt.After(time.Now()) { - return nil - } - - return expireEntry.Value -} - -func NewTTLMap(ttl time.Duration) (m *TTLMap) { - m = &TTLMap{ - TTL: ttl, - } - - go func() { - for now := range time.Tick(time.Second) { - m.data.Range(func(k, v interface{}) bool { - expiresAt := v.(expireEntry).ExpiresAt - if expiresAt.Before(now) { - m.data.Delete(k) - } - return true - }) - } - }() - - return -} diff --git a/core/entity/version.go b/core/entity/version.go deleted file mode 100644 index 97a0278d5..000000000 --- a/core/entity/version.go +++ /dev/null @@ -1,23 +0,0 @@ -package entity - -type Release struct { - Name string `json:"name"` - Draft bool `json:"draft"` - PreRelease bool `json:"pre_release"` - PublishedAt string `json:"published_at"` - Body string `json:"body"` -} - -type ReleaseSlices []Release - -func (r ReleaseSlices) Len() int { - return len(r) -} - -func (r ReleaseSlices) Less(i, j int) bool { - return r[i].PublishedAt < r[j].PublishedAt -} - -func (r ReleaseSlices) Swap(i, j int) { - r[i], r[j] = r[j], r[i] -} diff --git a/core/errors/base.go b/core/errors/base.go index 0acfb6815..2a5cdfab8 100644 --- a/core/errors/base.go +++ b/core/errors/base.go @@ -6,24 +6,11 @@ import ( ) const ( - ErrorPrefixController = "controller" - ErrorPrefixModel = "model" - ErrorPrefixFilter = "filter" - ErrorPrefixHttp = "http" - ErrorPrefixGrpc = "grpc" - ErrorPrefixNode = "node" - ErrorPrefixInject = "inject" - ErrorPrefixSpider = "spider" - ErrorPrefixFs = "fs" - ErrorPrefixTask = "task" - ErrorPrefixSchedule = "schedule" - ErrorPrefixUser = "user" - ErrorPrefixStats = "stats" - ErrorPrefixEvent = "event" - ErrorPrefixProcess = "process" - ErrorPrefixGit = "git" - ErrorPrefixResult = "result" - ErrorPrefixDataSource = "data_source" + ErrorPrefixModel = "model" + ErrorPrefixGrpc = "grpc" + ErrorPrefixNode = "node" + ErrorPrefixTask = "task" + ErrorPrefixUser = "user" ) type ErrorPrefix string diff --git a/core/errors/controller.go b/core/errors/controller.go deleted file mode 100644 index 7c2f6bffb..000000000 --- a/core/errors/controller.go +++ /dev/null @@ -1,19 +0,0 @@ -package errors - -func NewControllerError(msg string) (err error) { - return NewError(ErrorPrefixController, msg) -} - -var ErrorControllerInvalidControllerId = NewControllerError("invalid controller id") -var ErrorControllerInvalidType = NewControllerError("invalid type") -var ErrorControllerAddError = NewControllerError("add error") -var ErrorControllerUpdateError = NewControllerError("update error") -var ErrorControllerDeleteError = NewControllerError("delete error") -var ErrorControllerNotImplemented = NewControllerError("not implemented") -var ErrorControllerNoModelService = NewControllerError("no model service") -var ErrorControllerRequestPayloadInvalid = NewControllerError("request payload invalid") -var ErrorControllerMissingInCache = NewControllerError("missing in cache") -var ErrorControllerNotCancellable = NewControllerError("not cancellable") -var ErrorControllerMissingRequestFields = NewControllerError("missing request fields") -var ErrorControllerEmptyResponse = NewControllerError("empty response") -var ErrorControllerFilerNotFound = NewControllerError("filer not found") diff --git a/core/errors/ds.go b/core/errors/ds.go deleted file mode 100644 index f9550160c..000000000 --- a/core/errors/ds.go +++ /dev/null @@ -1,15 +0,0 @@ -package errors - -func NewDataSourceError(msg string) (err error) { - return NewError(ErrorPrefixDataSource, msg) -} - -var ( - ErrorDataSourceInvalidType = NewDataSourceError("invalid type") - ErrorDataSourceNotExists = NewDataSourceError("not exists") - ErrorDataSourceNotExistsInContext = NewDataSourceError("not exists in context") - ErrorDataSourceAlreadyExists = NewDataSourceError("already exists") - ErrorDataSourceMismatch = NewDataSourceError("mismatch") - ErrorDataSourceMissingRequiredFields = NewDataSourceError("missing required fields") - ErrorDataSourceUnauthorized = NewDataSourceError("unauthorized") -) diff --git a/core/errors/event.go b/core/errors/event.go deleted file mode 100644 index 5a5281007..000000000 --- a/core/errors/event.go +++ /dev/null @@ -1,10 +0,0 @@ -package errors - -func NewEventError(msg string) (err error) { - return NewError(ErrorPrefixEvent, msg) -} - -var ErrorEventNotFound = NewEventError("not found") -var ErrorEventInvalidType = NewEventError("invalid type") -var ErrorEventAlreadyExists = NewEventError("already exists") -var ErrorEventUnknownAction = NewEventError("unknown action") diff --git a/core/errors/filter.go b/core/errors/filter.go deleted file mode 100644 index 0afaec397..000000000 --- a/core/errors/filter.go +++ /dev/null @@ -1,8 +0,0 @@ -package errors - -func NewFilterError(msg string) (err error) { - return NewError(ErrorPrefixFilter, msg) -} - -var ErrorFilterInvalidOperation = NewFilterError("invalid operation") -var ErrorFilterUnableToParseQuery = NewFilterError("unable to parse query") diff --git a/core/errors/fs.go b/core/errors/fs.go deleted file mode 100644 index 2c91cae24..000000000 --- a/core/errors/fs.go +++ /dev/null @@ -1,11 +0,0 @@ -package errors - -func NewFsError(msg string) (err error) { - return NewError(ErrorPrefixFs, msg) -} - -var ErrorFsForbidden = NewFsError("forbidden") -var ErrorFsEmptyWorkspacePath = NewFsError("empty workspace path") -var ErrorFsInvalidType = NewFsError("invalid type") -var ErrorFsAlreadyExists = NewFsError("already exists") -var ErrorFsInvalidContent = NewFsError("invalid content") diff --git a/core/errors/git.go b/core/errors/git.go deleted file mode 100644 index ea7e03a9e..000000000 --- a/core/errors/git.go +++ /dev/null @@ -1,10 +0,0 @@ -package errors - -func NewGitError(msg string) (err error) { - return NewError(ErrorPrefixGit, msg) -} - -var ( - ErrorGitInvalidAuthType = NewGitError("invalid auth type") - ErrorGitNoMainBranch = NewGitError("no main branch") -) diff --git a/core/errors/grpc.go b/core/errors/grpc.go index fbfdabb6b..c1975c0ea 100644 --- a/core/errors/grpc.go +++ b/core/errors/grpc.go @@ -8,13 +8,5 @@ var ( ErrorGrpcClientFailedToStart = NewGrpcError("client failed to start") ErrorGrpcServerFailedToListen = NewGrpcError("server failed to listen") ErrorGrpcServerFailedToServe = NewGrpcError("server failed to serve") - ErrorGrpcClientNotExists = NewGrpcError("client not exists") - ErrorGrpcClientAlreadyExists = NewGrpcError("client already exists") - ErrorGrpcInvalidType = NewGrpcError("invalid type") - ErrorGrpcNotAllowed = NewGrpcError("not allowed") - ErrorGrpcSubscribeNotExists = NewGrpcError("subscribe not exists") - ErrorGrpcStreamNotFound = NewGrpcError("stream not found") - ErrorGrpcInvalidCode = NewGrpcError("invalid code") ErrorGrpcUnauthorized = NewGrpcError("unauthorized") - ErrorGrpcInvalidNodeKey = NewGrpcError("invalid node key") ) diff --git a/core/errors/http.go b/core/errors/http.go deleted file mode 100644 index e10ad28fb..000000000 --- a/core/errors/http.go +++ /dev/null @@ -1,9 +0,0 @@ -package errors - -func NewHttpError(msg string) (err error) { - return NewError(ErrorPrefixHttp, msg) -} - -var ErrorHttpBadRequest = NewHttpError("bad request") -var ErrorHttpUnauthorized = NewHttpError("unauthorized") -var ErrorHttpNotFound = NewHttpError("not found") diff --git a/core/errors/model.go b/core/errors/model.go index 95baa31e6..db591efc3 100644 --- a/core/errors/model.go +++ b/core/errors/model.go @@ -1,19 +1,8 @@ package errors -import "errors" - func NewModelError(msg string) (err error) { return NewError(ErrorPrefixModel, msg) } var ErrorModelInvalidType = NewModelError("invalid type") -var ErrorModelInvalidModelId = NewModelError("invalid model id") -var ErrorModelNotImplemented = NewModelError("not implemented") -var ErrorModelNotFound = NewModelError("not found") -var ErrorModelAlreadyExists = NewModelError("already exists") -var ErrorModelNotExists = NewModelError("not exists") var ErrorModelMissingRequiredData = NewModelError("missing required data") -var ErrorModelMissingId = errors.New("missing _id") -var ErrorModelNotAllowed = NewModelError("not allowed") -var ErrorModelDeleteListError = NewModelError("delete list error") -var ErrorModelNilPointer = NewModelError("nil pointer") diff --git a/core/errors/node.go b/core/errors/node.go index e768ca521..1dd98d4c5 100644 --- a/core/errors/node.go +++ b/core/errors/node.go @@ -5,10 +5,4 @@ func NewNodeError(msg string) (err error) { } var ErrorNodeUnregistered = NewNodeError("unregistered") -var ErrorNodeServiceNotExists = NewNodeError("service not exists") -var ErrorNodeInvalidType = NewNodeError("invalid type") -var ErrorNodeInvalidStatus = NewNodeError("invalid status") -var ErrorNodeInvalidCode = NewNodeError("invalid code") -var ErrorNodeInvalidNodeKey = NewNodeError("invalid node key") -var ErrorNodeMonitorError = NewNodeError("monitor error") var ErrorNodeNotExists = NewNodeError("not exists") diff --git a/core/errors/process.go b/core/errors/process.go deleted file mode 100644 index aa5580b26..000000000 --- a/core/errors/process.go +++ /dev/null @@ -1,10 +0,0 @@ -package errors - -func NewProcessError(msg string) (err error) { - return NewError(ErrorPrefixProcess, msg) -} - -var ( - ErrorProcessReachedMaxErrors = NewProcessError("reached max errors") - ErrorProcessDaemonProcessExited = NewProcessError("daemon process exited") -) diff --git a/core/errors/result.go b/core/errors/result.go deleted file mode 100644 index 39b1f4594..000000000 --- a/core/errors/result.go +++ /dev/null @@ -1,5 +0,0 @@ -package errors - -func NewResultError(msg string) (err error) { - return NewError(ErrorPrefixResult, msg) -} diff --git a/core/errors/schedule.go b/core/errors/schedule.go deleted file mode 100644 index 8246b1be1..000000000 --- a/core/errors/schedule.go +++ /dev/null @@ -1,7 +0,0 @@ -package errors - -func NewScheduleError(msg string) (err error) { - return NewError(ErrorPrefixSchedule, msg) -} - -//var ErrorSchedule = NewScheduleError("unregistered") diff --git a/core/errors/spider.go b/core/errors/spider.go deleted file mode 100644 index d7fa5c6ae..000000000 --- a/core/errors/spider.go +++ /dev/null @@ -1,10 +0,0 @@ -package errors - -func NewSpiderError(msg string) (err error) { - return NewError(ErrorPrefixSpider, msg) -} - -var ( - ErrorSpiderMissingRequiredOption = NewSpiderError("missing required option") - ErrorSpiderForbidden = NewSpiderError("forbidden") -) diff --git a/core/errors/stats.go b/core/errors/stats.go deleted file mode 100644 index fab5f4643..000000000 --- a/core/errors/stats.go +++ /dev/null @@ -1,7 +0,0 @@ -package errors - -func NewStatsError(msg string) (err error) { - return NewError(ErrorPrefixStats, msg) -} - -var ErrorStatsInvalidType = NewStatsError("invalid type") diff --git a/core/errors/store.go b/core/errors/store.go deleted file mode 100644 index ead4fb67b..000000000 --- a/core/errors/store.go +++ /dev/null @@ -1,9 +0,0 @@ -package errors - -func NewInjectError(msg string) (err error) { - return NewError(ErrorPrefixInject, msg) -} - -var ErrorInjectEmptyValue = NewInjectError("empty value") -var ErrorInjectNotExists = NewInjectError("not exists") -var ErrorInjectInvalidType = NewInjectError("invalid type") diff --git a/core/errors/task.go b/core/errors/task.go index d4ec41ca5..87c1fbc5a 100644 --- a/core/errors/task.go +++ b/core/errors/task.go @@ -5,15 +5,8 @@ func NewTaskError(msg string) (err error) { } var ( - ErrorTaskNotExists = NewTaskError("not exists") - ErrorTaskAlreadyExists = NewTaskError("already exists") - ErrorTaskInvalidType = NewTaskError("invalid type") - ErrorTaskProcessStillExists = NewTaskError("process still exists") - ErrorTaskUnableToCancel = NewTaskError("unable to cancel") - ErrorTaskForbidden = NewTaskError("forbidden") - ErrorTaskNoAvailableRunners = NewTaskError("no available runner") - ErrorTaskEmptySpiderId = NewTaskError("empty spider id") - ErrorTaskNoNodeId = NewTaskError("no node id") - ErrorTaskNodeNotFound = NewTaskError("node not found") - ErrorTaskMissingRequiredOption = NewSpiderError("missing required option") + ErrorTaskNotExists = NewTaskError("not exists") + ErrorTaskAlreadyExists = NewTaskError("already exists") + ErrorTaskNoNodeId = NewTaskError("no node id") + ErrorTaskNodeNotFound = NewTaskError("node not found") ) diff --git a/core/errors/user.go b/core/errors/user.go index b0a1e940d..2cb2898c6 100644 --- a/core/errors/user.go +++ b/core/errors/user.go @@ -8,7 +8,6 @@ var ( ErrorUserInvalidType = NewUserError("invalid type") ErrorUserInvalidToken = NewUserError("invalid token") ErrorUserNotExists = NewUserError("not exists") - ErrorUserNotExistsInContext = NewUserError("not exists in context") ErrorUserAlreadyExists = NewUserError("already exists") ErrorUserMismatch = NewUserError("mismatch") ErrorUserMissingRequiredFields = NewUserError("missing required fields") diff --git a/core/event/func.go b/core/event/func.go deleted file mode 100644 index 21c7693ed..000000000 --- a/core/event/func.go +++ /dev/null @@ -1,6 +0,0 @@ -package event - -func SendEvent(eventName string, data ...interface{}) { - svc := NewEventService() - svc.SendEvent(eventName, data...) -} diff --git a/core/event/options.go b/core/event/options.go deleted file mode 100644 index 0e4b82e85..000000000 --- a/core/event/options.go +++ /dev/null @@ -1 +0,0 @@ -package event diff --git a/core/event/service.go b/core/event/service.go deleted file mode 100644 index 892cea9aa..000000000 --- a/core/event/service.go +++ /dev/null @@ -1,92 +0,0 @@ -package event - -import ( - "fmt" - "github.com/apex/log" - "github.com/crawlab-team/crawlab/core/entity" - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/utils" - "github.com/crawlab-team/crawlab/trace" - "github.com/thoas/go-funk" - "regexp" -) - -var S interfaces.EventService - -type Service struct { - keys []string - includes []string - excludes []string - chs []*chan interfaces.EventData -} - -func (svc *Service) Register(key, include, exclude string, ch *chan interfaces.EventData) { - svc.keys = append(svc.keys, key) - svc.includes = append(svc.includes, include) - svc.excludes = append(svc.excludes, exclude) - svc.chs = append(svc.chs, ch) -} - -func (svc *Service) Unregister(key string) { - idx := funk.IndexOfString(svc.keys, key) - if idx != -1 { - svc.keys = append(svc.keys[:idx], svc.keys[(idx+1):]...) - svc.includes = append(svc.includes[:idx], svc.includes[(idx+1):]...) - svc.excludes = append(svc.excludes[:idx], svc.excludes[(idx+1):]...) - svc.chs = append(svc.chs[:idx], svc.chs[(idx+1):]...) - log.Infof("[EventService] unregistered %s", key) - } -} - -func (svc *Service) SendEvent(eventName string, data ...interface{}) { - for i, key := range svc.keys { - // include - include := svc.includes[i] - matchedInclude, err := regexp.MatchString(include, eventName) - if err != nil { - trace.PrintError(err) - continue - } - if !matchedInclude { - continue - } - - // exclude - exclude := svc.excludes[i] - matchedExclude, err := regexp.MatchString(exclude, eventName) - if err != nil { - trace.PrintError(err) - continue - } - if matchedExclude { - continue - } - - // send event - utils.LogDebug(fmt.Sprintf("key %s matches event %s", key, eventName)) - ch := svc.chs[i] - go func(ch *chan interfaces.EventData) { - for _, d := range data { - *ch <- &entity.EventData{ - Event: eventName, - Data: d, - } - } - }(ch) - } -} - -func NewEventService() (svc interfaces.EventService) { - if S != nil { - return S - } - - svc = &Service{ - chs: []*chan interfaces.EventData{}, - keys: []string{}, - } - - S = svc - - return svc -} diff --git a/core/export/csv_service.go b/core/export/csv_service.go index 666cc331c..aac218763 100644 --- a/core/export/csv_service.go +++ b/core/export/csv_service.go @@ -6,13 +6,11 @@ import ( "errors" "fmt" "github.com/ReneKroon/ttlcache" - "github.com/apex/log" "github.com/crawlab-team/crawlab/core/constants" "github.com/crawlab-team/crawlab/core/entity" "github.com/crawlab-team/crawlab/core/interfaces" + "github.com/crawlab-team/crawlab/core/mongo" "github.com/crawlab-team/crawlab/core/utils" - "github.com/crawlab-team/crawlab/db/mongo" - "github.com/crawlab-team/crawlab/trace" "github.com/hashicorp/go-uuid" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" @@ -26,12 +24,14 @@ import ( type CsvService struct { cache *ttlcache.Cache + interfaces.Logger } func (svc *CsvService) GenerateId() (exportId string, err error) { exportId, err = uuid.GenerateUUID() if err != nil { - return "", trace.TraceError(err) + svc.Errorf("failed to generate export id: %v", err) + return "", err } return exportId, nil } @@ -69,7 +69,8 @@ func (svc *CsvService) GetExport(exportId string) (export interfaces.Export, err // get export from cache res, ok := svc.cache.Get(exportId) if !ok { - return nil, trace.TraceError(errors.New("export not found")) + svc.Errorf("export not found: %s", exportId) + return nil, err } export = res.(interfaces.Export) return export, nil @@ -81,8 +82,7 @@ func (svc *CsvService) export(export *entity.Export) { err := errors.New("empty target") export.Status = constants.TaskStatusError export.EndTs = time.Now() - log.Errorf("export error (id: %s): %v", export.Id, err) - trace.PrintError(err) + svc.Errorf("export error (id: %s): %v", export.Id, err) svc.cache.Set(export.Id, export) return } @@ -95,8 +95,7 @@ func (svc *CsvService) export(export *entity.Export) { if err != nil { export.Status = constants.TaskStatusError export.EndTs = time.Now() - log.Errorf("export error (id: %s): %v", export.Id, err) - trace.PrintError(err) + svc.Errorf("export error (id: %s): %v", export.Id, err) svc.cache.Set(export.Id, export) return } @@ -113,8 +112,7 @@ func (svc *CsvService) export(export *entity.Export) { if err != nil { export.Status = constants.TaskStatusError export.EndTs = time.Now() - log.Errorf("export error (id: %s): %v", export.Id, err) - trace.PrintError(err) + svc.Errorf("export error (id: %s): %v", export.Id, err) svc.cache.Set(export.Id, export) return } @@ -123,7 +121,7 @@ func (svc *CsvService) export(export *entity.Export) { bom := []byte{0xEF, 0xBB, 0xBF} _, err = csvFile.Write(bom) if err != nil { - trace.PrintError(err) + svc.Errorf("export error (id: %s): %v", export.Id, err) return } @@ -133,8 +131,7 @@ func (svc *CsvService) export(export *entity.Export) { if err != nil { export.Status = constants.TaskStatusError export.EndTs = time.Now() - log.Errorf("export error (id: %s): %v", export.Id, err) - trace.PrintError(err) + svc.Errorf("export error (id: %s): %v", export.Id, err) svc.cache.Set(export.Id, export) return } @@ -149,17 +146,16 @@ func (svc *CsvService) export(export *entity.Export) { // check error err := cur.Err() if err != nil { - if err != mongo2.ErrNoDocuments { + if !errors.Is(err, mongo2.ErrNoDocuments) { // error export.Status = constants.TaskStatusError export.EndTs = time.Now() - log.Errorf("export error (id: %s): %v", export.Id, err) - trace.PrintError(err) + svc.Errorf("export error (id: %s): %v", export.Id, err) } else { // no more data export.Status = constants.TaskStatusFinished export.EndTs = time.Now() - log.Infof("export finished (id: %s)", export.Id) + svc.Infof("export finished (id: %s)", export.Id) } svc.cache.Set(export.Id, export) return @@ -170,7 +166,7 @@ func (svc *CsvService) export(export *entity.Export) { // no more data export.Status = constants.TaskStatusFinished export.EndTs = time.Now() - log.Infof("export finished (id: %s)", export.Id) + svc.Infof("export finished (id: %s)", export.Id) svc.cache.Set(export.Id, export) return } @@ -182,8 +178,7 @@ func (svc *CsvService) export(export *entity.Export) { // error export.Status = constants.TaskStatusError export.EndTs = time.Now() - log.Errorf("export error (id: %s): %v", export.Id, err) - trace.PrintError(err) + svc.Errorf("export error (id: %s): %v", export.Id, err) svc.cache.Set(export.Id, export) return } @@ -195,8 +190,7 @@ func (svc *CsvService) export(export *entity.Export) { // error export.Status = constants.TaskStatusError export.EndTs = time.Now() - log.Errorf("export error (id: %s): %v", export.Id, err) - trace.PrintError(err) + svc.Errorf("export error (id: %s): %v", export.Id, err) svc.cache.Set(export.Id, export) return } @@ -240,7 +234,8 @@ func (svc *CsvService) getCsvWriter(export *entity.Export) (csvWriter *csv.Write // open file csvFile, err = os.Create(export.DownloadPath) if err != nil { - return nil, nil, trace.TraceError(err) + svc.Errorf("failed to create csv file: %v", err) + return nil, nil, err } // create csv writer @@ -256,7 +251,8 @@ func (svc *CsvService) getColumns(query bson.M, export interfaces.Export) (colum // get 10 records var data []bson.M if err := col.Find(query, &mongo.FindOptions{Limit: 10}).All(&data); err != nil { - return nil, trace.TraceError(err) + svc.Errorf("failed to get columns: %v", err) + return nil, err } // columns set @@ -329,7 +325,8 @@ func NewCsvService() (svc2 interfaces.ExportService) { cache := ttlcache.NewCache() cache.SetTTL(time.Minute * 5) svc := &CsvService{ - cache: cache, + cache: cache, + Logger: utils.NewLogger("CsvService"), } return svc } diff --git a/core/export/csv_service_test.go b/core/export/csv_service_test.go index 8e4dffaa5..ccb745926 100644 --- a/core/export/csv_service_test.go +++ b/core/export/csv_service_test.go @@ -4,7 +4,7 @@ import ( "encoding/csv" "fmt" "github.com/crawlab-team/crawlab/core/constants" - "github.com/crawlab-team/crawlab/db/mongo" + "github.com/crawlab-team/crawlab/core/mongo" "github.com/stretchr/testify/require" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" diff --git a/core/export/json_service.go b/core/export/json_service.go index 5d56268d7..0929d9e21 100644 --- a/core/export/json_service.go +++ b/core/export/json_service.go @@ -5,13 +5,11 @@ import ( "encoding/json" "errors" "github.com/ReneKroon/ttlcache" - "github.com/apex/log" "github.com/crawlab-team/crawlab/core/constants" "github.com/crawlab-team/crawlab/core/entity" "github.com/crawlab-team/crawlab/core/interfaces" + "github.com/crawlab-team/crawlab/core/mongo" "github.com/crawlab-team/crawlab/core/utils" - "github.com/crawlab-team/crawlab/db/mongo" - "github.com/crawlab-team/crawlab/trace" "github.com/hashicorp/go-uuid" mongo2 "go.mongodb.org/mongo-driver/mongo" "os" @@ -21,12 +19,14 @@ import ( type JsonService struct { cache *ttlcache.Cache + interfaces.Logger } func (svc *JsonService) GenerateId() (exportId string, err error) { exportId, err = uuid.GenerateUUID() if err != nil { - return "", trace.TraceError(err) + svc.Errorf("failed to generate export id: %v", err) + return "", err } return exportId, nil } @@ -64,7 +64,8 @@ func (svc *JsonService) GetExport(exportId string) (export interfaces.Export, er // get export from cache res, ok := svc.cache.Get(exportId) if !ok { - return nil, trace.TraceError(errors.New("export not found")) + svc.Errorf("export not found (id: %s)", exportId) + return nil, err } export = res.(interfaces.Export) return export, nil @@ -76,8 +77,7 @@ func (svc *JsonService) export(export *entity.Export) { err := errors.New("empty target") export.Status = constants.TaskStatusError export.EndTs = time.Now() - log.Errorf("export error (id: %s): %v", export.Id, err) - trace.PrintError(err) + svc.Errorf("export error (id: %s): %v", export.Id, err) svc.cache.Set(export.Id, export) return } @@ -90,8 +90,7 @@ func (svc *JsonService) export(export *entity.Export) { if err != nil { export.Status = constants.TaskStatusError export.EndTs = time.Now() - log.Errorf("export error (id: %s): %v", export.Id, err) - trace.PrintError(err) + svc.Errorf("export error (id: %s): %v", export.Id, err) svc.cache.Set(export.Id, export) return } @@ -111,17 +110,17 @@ func (svc *JsonService) export(export *entity.Export) { // check error err := cur.Err() if err != nil { - if err != mongo2.ErrNoDocuments { + if !errors.Is(err, mongo2.ErrNoDocuments) { // error export.Status = constants.TaskStatusError export.EndTs = time.Now() - log.Errorf("export error (id: %s): %v", export.Id, err) - trace.PrintError(err) + svc.Errorf("export error (id: %s): %v", export.Id, err) + } else { // no more data export.Status = constants.TaskStatusFinished export.EndTs = time.Now() - log.Infof("export finished (id: %s)", export.Id) + svc.Infof("export finished (id: %s)", export.Id) } svc.cache.Set(export.Id, export) return @@ -132,7 +131,7 @@ func (svc *JsonService) export(export *entity.Export) { // no more data export.Status = constants.TaskStatusFinished export.EndTs = time.Now() - log.Infof("export finished (id: %s)", export.Id) + svc.Infof("export finished (id: %s)", export.Id) svc.cache.Set(export.Id, export) break } @@ -144,8 +143,7 @@ func (svc *JsonService) export(export *entity.Export) { // error export.Status = constants.TaskStatusError export.EndTs = time.Now() - log.Errorf("export error (id: %s): %v", export.Id, err) - trace.PrintError(err) + svc.Errorf("export error (id: %s): %v", export.Id, err) svc.cache.Set(export.Id, export) return } @@ -158,8 +156,7 @@ func (svc *JsonService) export(export *entity.Export) { // error export.Status = constants.TaskStatusError export.EndTs = time.Now() - log.Errorf("export error (id: %s): %v", export.Id, err) - trace.PrintError(err) + svc.Errorf("export error (id: %s): %v", export.Id, err) svc.cache.Set(export.Id, export) return } @@ -170,8 +167,7 @@ func (svc *JsonService) export(export *entity.Export) { // error export.Status = constants.TaskStatusError export.EndTs = time.Now() - log.Errorf("export error (id: %s): %v", export.Id, err) - trace.PrintError(err) + svc.Errorf("export error (id: %s): %v", export.Id, err) svc.cache.Set(export.Id, export) return } @@ -208,7 +204,8 @@ func NewJsonService() (svc2 interfaces.ExportService) { cache := ttlcache.NewCache() cache.SetTTL(time.Minute * 5) svc := &JsonService{ - cache: cache, + cache: cache, + Logger: utils.NewLogger("JsonService"), } return svc } diff --git a/core/fs/default.go b/core/fs/default.go deleted file mode 100644 index 91fbb9591..000000000 --- a/core/fs/default.go +++ /dev/null @@ -1,24 +0,0 @@ -package fs - -import ( - "github.com/apex/log" - "github.com/mitchellh/go-homedir" - "github.com/spf13/viper" - "path/filepath" -) - -func init() { - rootDir, err := homedir.Dir() - if err != nil { - log.Warnf("cannot find home directory: %v", err) - return - } - DefaultWorkspacePath = filepath.Join(rootDir, "crawlab_workspace") - - workspacePath := viper.GetString("workspace") - if workspacePath == "" { - viper.Set("workspace", DefaultWorkspacePath) - } -} - -var DefaultWorkspacePath string diff --git a/core/fs/service_v2.go b/core/fs/service.go similarity index 72% rename from core/fs/service_v2.go rename to core/fs/service.go index 918a35938..835a1e007 100644 --- a/core/fs/service_v2.go +++ b/core/fs/service.go @@ -4,20 +4,22 @@ import ( "github.com/crawlab-team/crawlab/core/entity" "github.com/crawlab-team/crawlab/core/interfaces" "github.com/crawlab-team/crawlab/core/utils" - "github.com/crawlab-team/crawlab/trace" "github.com/google/uuid" "io" "os" "path/filepath" ) -type ServiceV2 struct { +type Service struct { // settings rootPath string skipNames []string + + // internals + interfaces.Logger } -func (svc *ServiceV2) List(path string) (files []interfaces.FsFileInfo, err error) { +func (svc *Service) List(path string) (files []interfaces.FsFileInfo, err error) { // Normalize the provided path normPath := filepath.Clean(path) if normPath == "." { @@ -31,11 +33,13 @@ func (svc *ServiceV2) List(path string) (files []interfaces.FsFileInfo, err erro // Use filepath.Walk to recursively traverse directories err = filepath.Walk(fullPath, func(p string, info os.FileInfo, err error) error { if err != nil { + svc.Errorf("failed to walk path: %v", err) return err } relPath, err := filepath.Rel(svc.rootPath, p) if err != nil { + svc.Errorf("failed to get relative path: %v", err) return err } @@ -78,13 +82,14 @@ func (svc *ServiceV2) List(path string) (files []interfaces.FsFileInfo, err erro return files, err } -func (svc *ServiceV2) GetFile(path string) (data []byte, err error) { +func (svc *Service) GetFile(path string) (data []byte, err error) { return os.ReadFile(filepath.Join(svc.rootPath, path)) } -func (svc *ServiceV2) GetFileInfo(path string) (file interfaces.FsFileInfo, err error) { +func (svc *Service) GetFileInfo(path string) (file interfaces.FsFileInfo, err error) { f, err := os.Stat(filepath.Join(svc.rootPath, path)) if err != nil { + svc.Errorf("failed to get file info: %v", err) return nil, err } return &entity.FsFileInfo{ @@ -100,11 +105,12 @@ func (svc *ServiceV2) GetFileInfo(path string) (file interfaces.FsFileInfo, err }, nil } -func (svc *ServiceV2) Save(path string, data []byte) (err error) { +func (svc *Service) Save(path string, data []byte) (err error) { // Create directories if not exist dir := filepath.Dir(filepath.Join(svc.rootPath, path)) if _, err := os.Stat(dir); os.IsNotExist(err) { if err := os.MkdirAll(dir, 0755); err != nil { + svc.Errorf("failed to create directory: %v", err) return err } } @@ -113,28 +119,29 @@ func (svc *ServiceV2) Save(path string, data []byte) (err error) { return os.WriteFile(filepath.Join(svc.rootPath, path), data, 0644) } -func (svc *ServiceV2) CreateDir(path string) (err error) { +func (svc *Service) CreateDir(path string) (err error) { return os.MkdirAll(filepath.Join(svc.rootPath, path), 0755) } -func (svc *ServiceV2) Rename(path, newPath string) (err error) { +func (svc *Service) Rename(path, newPath string) (err error) { oldPath := filepath.Join(svc.rootPath, path) newFullPath := filepath.Join(svc.rootPath, newPath) return os.Rename(oldPath, newFullPath) } -func (svc *ServiceV2) Delete(path string) (err error) { +func (svc *Service) Delete(path string) (err error) { fullPath := filepath.Join(svc.rootPath, path) return os.RemoveAll(fullPath) } -func (svc *ServiceV2) Copy(path, newPath string) (err error) { +func (svc *Service) Copy(path, newPath string) (err error) { srcPath := filepath.Join(svc.rootPath, path) destPath := filepath.Join(svc.rootPath, newPath) // Get source info srcInfo, err := os.Stat(srcPath) if err != nil { + svc.Errorf("failed to get source info: %v", err) return err } @@ -142,37 +149,45 @@ func (svc *ServiceV2) Copy(path, newPath string) (err error) { if !srcInfo.IsDir() { srcFile, err := os.Open(srcPath) if err != nil { + svc.Errorf("failed to open source file: %v", err) return err } defer srcFile.Close() destFile, err := os.Create(destPath) if err != nil { + svc.Errorf("failed to create destination file: %v", err) return err } defer destFile.Close() _, err = io.Copy(destFile, srcFile) + if err != nil { + svc.Errorf("failed to copy file: %v", err) + return err + } - return err + return nil } else { // If source is directory, copy it recursively return utils.CopyDir(srcPath, destPath) } } -func (svc *ServiceV2) Export() (resultPath string, err error) { +func (svc *Service) Export() (resultPath string, err error) { zipFilePath := filepath.Join(os.TempDir(), uuid.New().String()+".zip") if err := utils.ZipDirectory(svc.rootPath, zipFilePath); err != nil { - return "", trace.TraceError(err) + svc.Errorf("failed to zip directory: %v", err) + return "", err } return zipFilePath, nil } -func NewFsServiceV2(path string) (svc interfaces.FsServiceV2) { - return &ServiceV2{ +func NewFsService(path string) (svc interfaces.FsService) { + return &Service{ rootPath: path, skipNames: []string{".git"}, + Logger: utils.NewLogger("FsService"), } } diff --git a/core/fs/service_v2_test.go b/core/fs/service_test.go similarity index 54% rename from core/fs/service_v2_test.go rename to core/fs/service_test.go index 09191305d..06f4624be 100644 --- a/core/fs/service_v2_test.go +++ b/core/fs/service_test.go @@ -1,7 +1,7 @@ package fs import ( - "io/ioutil" + "github.com/apex/log" "os" "path/filepath" "testing" @@ -9,23 +9,28 @@ import ( "github.com/stretchr/testify/assert" ) -func TestServiceV2_List(t *testing.T) { - rootDir, err := ioutil.TempDir("", "fsTest") +func TestService_List(t *testing.T) { + rootDir, err := os.MkdirTemp("", "fsTest") if err != nil { t.Fatalf("Failed to create temp dir: %v", err) } - defer os.RemoveAll(rootDir) // clean up + defer func() { + err := os.RemoveAll(rootDir) // clean up + if err != nil { + log.Errorf("Failed to remove temp dir: %v", err) + } + }() testDir := filepath.Join(rootDir, "dir") - os.Mkdir(testDir, 0755) - ioutil.WriteFile(filepath.Join(testDir, "file1.txt"), []byte("hello world"), 0644) - ioutil.WriteFile(filepath.Join(testDir, "file2.txt"), []byte("hello again"), 0644) + _ = os.Mkdir(testDir, 0755) + _ = os.WriteFile(filepath.Join(testDir, "file1.txt"), []byte("hello world"), 0644) + _ = os.WriteFile(filepath.Join(testDir, "file2.txt"), []byte("hello again"), 0644) subDir := filepath.Join(testDir, "subdir") - os.Mkdir(subDir, 0755) - ioutil.WriteFile(filepath.Join(subDir, "file3.txt"), []byte("subdir file"), 0644) - os.Mkdir(filepath.Join(testDir, "empty"), 0755) // explicitly testing empty dir inclusion + _ = os.Mkdir(subDir, 0755) + _ = os.WriteFile(filepath.Join(subDir, "file3.txt"), []byte("subdir file"), 0644) + _ = os.Mkdir(filepath.Join(testDir, "empty"), 0755) // explicitly testing empty dir inclusion - svc := NewFsServiceV2(rootDir) + svc := NewFsService(rootDir) files, err := svc.List("dir") if err != nil { @@ -55,17 +60,22 @@ func TestServiceV2_List(t *testing.T) { } } -func TestServiceV2_GetFile(t *testing.T) { - rootDir, err := ioutil.TempDir("", "fsTest") +func TestService_GetFile(t *testing.T) { + rootDir, err := os.MkdirTemp("", "fsTest") if err != nil { t.Fatalf("Failed to create temp dir: %v", err) } - defer os.RemoveAll(rootDir) // clean up + defer func() { + err := os.RemoveAll(rootDir) // clean up + if err != nil { + log.Errorf("Failed to remove temp dir: %v", err) + } + }() expectedContent := []byte("hello world") - ioutil.WriteFile(filepath.Join(rootDir, "file.txt"), expectedContent, 0644) + _ = os.WriteFile(filepath.Join(rootDir, "file.txt"), expectedContent, 0644) - svc := NewFsServiceV2(rootDir) + svc := NewFsService(rootDir) content, err := svc.GetFile("file.txt") if err != nil { @@ -74,17 +84,22 @@ func TestServiceV2_GetFile(t *testing.T) { assert.Equal(t, expectedContent, content) } -func TestServiceV2_Delete(t *testing.T) { - rootDir, err := ioutil.TempDir("", "fsTest") +func TestService_Delete(t *testing.T) { + rootDir, err := os.MkdirTemp("", "fsTest") if err != nil { t.Fatalf("Failed to create temp dir: %v", err) } - defer os.RemoveAll(rootDir) // clean up + defer func() { + err := os.RemoveAll(rootDir) // clean up + if err != nil { + log.Errorf("Failed to remove temp dir: %v", err) + } + }() filePath := filepath.Join(rootDir, "file.txt") - ioutil.WriteFile(filePath, []byte("hello world"), 0644) + _ = os.WriteFile(filePath, []byte("hello world"), 0644) - svc := NewFsServiceV2(rootDir) + svc := NewFsService(rootDir) // Delete the file err = svc.Delete("file.txt") @@ -97,14 +112,19 @@ func TestServiceV2_Delete(t *testing.T) { assert.True(t, os.IsNotExist(err)) } -func TestServiceV2_CreateDir(t *testing.T) { - rootDir, err := ioutil.TempDir("", "fsTest") +func TestService_CreateDir(t *testing.T) { + rootDir, err := os.MkdirTemp("", "fsTest") if err != nil { t.Fatalf("Failed to create temp dir: %v", err) } - defer os.RemoveAll(rootDir) // clean up + defer func() { + err := os.RemoveAll(rootDir) // clean up + if err != nil { + log.Errorf("Failed to remove temp dir: %v", err) + } + }() - svc := NewFsServiceV2(rootDir) + svc := NewFsService(rootDir) // Create a new directory err = svc.CreateDir("newDir") @@ -117,14 +137,19 @@ func TestServiceV2_CreateDir(t *testing.T) { assert.NoError(t, err) } -func TestServiceV2_Save(t *testing.T) { - rootDir, err := ioutil.TempDir("", "fsTest") +func TestService_Save(t *testing.T) { + rootDir, err := os.MkdirTemp("", "fsTest") if err != nil { t.Fatalf("Failed to create temp dir: %v", err) } - defer os.RemoveAll(rootDir) // clean up + defer func() { + err := os.RemoveAll(rootDir) // clean up + if err != nil { + log.Errorf("Failed to remove temp dir: %v", err) + } + }() - svc := NewFsServiceV2(rootDir) + svc := NewFsService(rootDir) // Save a new file err = svc.Save("newFile.txt", []byte("Hello, world!")) @@ -133,22 +158,27 @@ func TestServiceV2_Save(t *testing.T) { } // Verify the file was saved - data, err := ioutil.ReadFile(filepath.Join(rootDir, "newFile.txt")) + data, err := os.ReadFile(filepath.Join(rootDir, "newFile.txt")) assert.NoError(t, err) assert.Equal(t, "Hello, world!", string(data)) } -func TestServiceV2_Rename(t *testing.T) { - rootDir, err := ioutil.TempDir("", "fsTest") +func TestService_Rename(t *testing.T) { + rootDir, err := os.MkdirTemp("", "fsTest") if err != nil { t.Fatalf("Failed to create temp dir: %v", err) } - defer os.RemoveAll(rootDir) // clean up + defer func() { + err := os.RemoveAll(rootDir) // clean up + if err != nil { + log.Errorf("Failed to remove temp dir: %v", err) + } + }() - svc := NewFsServiceV2(rootDir) + svc := NewFsService(rootDir) // Create a file to rename - ioutil.WriteFile(filepath.Join(rootDir, "oldName.txt"), []byte("Hello, world!"), 0644) + _ = os.WriteFile(filepath.Join(rootDir, "oldName.txt"), []byte("Hello, world!"), 0644) // Rename the file err = svc.Rename("oldName.txt", "newName.txt") @@ -161,17 +191,22 @@ func TestServiceV2_Rename(t *testing.T) { assert.NoError(t, err) } -func TestServiceV2_RenameDir(t *testing.T) { - rootDir, err := ioutil.TempDir("", "fsTest") +func TestService_RenameDir(t *testing.T) { + rootDir, err := os.MkdirTemp("", "fsTest") if err != nil { t.Fatalf("Failed to create temp dir: %v", err) } - defer os.RemoveAll(rootDir) // clean up + defer func() { + err := os.RemoveAll(rootDir) // clean up + if err != nil { + log.Errorf("Failed to remove temp dir: %v", err) + } + }() - svc := NewFsServiceV2(rootDir) + svc := NewFsService(rootDir) // Create a directory to rename - os.Mkdir(filepath.Join(rootDir, "oldName"), 0755) + _ = os.Mkdir(filepath.Join(rootDir, "oldName"), 0755) // Rename the directory err = svc.Rename("oldName", "newName") @@ -184,17 +219,22 @@ func TestServiceV2_RenameDir(t *testing.T) { assert.NoError(t, err) } -func TestServiceV2_Copy(t *testing.T) { - rootDir, err := ioutil.TempDir("", "fsTest") +func TestService_Copy(t *testing.T) { + rootDir, err := os.MkdirTemp("", "fsTest") if err != nil { t.Fatalf("Failed to create temp dir: %v", err) } - defer os.RemoveAll(rootDir) // clean up + defer func() { + err := os.RemoveAll(rootDir) // clean up + if err != nil { + log.Errorf("Failed to remove temp dir: %v", err) + } + }() - svc := NewFsServiceV2(rootDir) + svc := NewFsService(rootDir) // Create a file to copy - ioutil.WriteFile(filepath.Join(rootDir, "source.txt"), []byte("Hello, world!"), 0644) + _ = os.WriteFile(filepath.Join(rootDir, "source.txt"), []byte("Hello, world!"), 0644) // Copy the file err = svc.Copy("source.txt", "copy.txt") @@ -203,23 +243,28 @@ func TestServiceV2_Copy(t *testing.T) { } // Verify the file was copied - data, err := ioutil.ReadFile(filepath.Join(rootDir, "copy.txt")) + data, err := os.ReadFile(filepath.Join(rootDir, "copy.txt")) assert.NoError(t, err) assert.Equal(t, "Hello, world!", string(data)) } -func TestServiceV2_CopyDir(t *testing.T) { - rootDir, err := ioutil.TempDir("", "fsTest") +func TestService_CopyDir(t *testing.T) { + rootDir, err := os.MkdirTemp("", "fsTest") if err != nil { t.Fatalf("Failed to create temp dir: %v", err) } - defer os.RemoveAll(rootDir) // clean up + defer func() { + err := os.RemoveAll(rootDir) // clean up + if err != nil { + log.Errorf("Failed to remove temp dir: %v", err) + } + }() - svc := NewFsServiceV2(rootDir) + svc := NewFsService(rootDir) // Create a directory to copy - os.Mkdir(filepath.Join(rootDir, "sourceDir"), 0755) - ioutil.WriteFile(filepath.Join(rootDir, "sourceDir", "file.txt"), []byte("Hello, world!"), 0644) + _ = os.Mkdir(filepath.Join(rootDir, "sourceDir"), 0755) + _ = os.WriteFile(filepath.Join(rootDir, "sourceDir", "file.txt"), []byte("Hello, world!"), 0644) // Copy the directory err = svc.Copy("sourceDir", "copyDir") @@ -232,7 +277,7 @@ func TestServiceV2_CopyDir(t *testing.T) { assert.NoError(t, err) // Verify the file inside the directory was copied - data, err := ioutil.ReadFile(filepath.Join(rootDir, "copyDir", "file.txt")) + data, err := os.ReadFile(filepath.Join(rootDir, "copyDir", "file.txt")) assert.NoError(t, err) assert.Equal(t, "Hello, world!", string(data)) } diff --git a/core/fs/utils.go b/core/fs/utils.go new file mode 100644 index 000000000..9a658b302 --- /dev/null +++ b/core/fs/utils.go @@ -0,0 +1,14 @@ +package fs + +import ( + "github.com/crawlab-team/crawlab/core/interfaces" + "github.com/crawlab-team/crawlab/core/utils" + "path/filepath" +) + +func GetBaseFileFsSvc(rootPath string) (svc interfaces.FsService, err error) { + workspacePath := utils.GetWorkspace() + fsSvc := NewFsService(filepath.Join(workspacePath, rootPath)) + + return fsSvc, nil +} diff --git a/core/go.mod b/core/go.mod index aa42b786b..ddffb6490 100644 --- a/core/go.mod +++ b/core/go.mod @@ -1,54 +1,42 @@ module github.com/crawlab-team/crawlab/core -go 1.22 +go 1.22.9 replace ( - github.com/crawlab-team/crawlab/db => ../db - github.com/crawlab-team/crawlab/fs => ../fs github.com/crawlab-team/crawlab/grpc => ../grpc - github.com/crawlab-team/crawlab/template-parser => ../template-parser github.com/crawlab-team/crawlab/trace => ../trace github.com/crawlab-team/crawlab/vcs => ../vcs ) require ( + github.com/PuerkitoBio/goquery v1.9.2 github.com/ReneKroon/ttlcache v1.7.0 github.com/apex/log v1.9.0 github.com/cenkalti/backoff/v4 v4.3.0 - github.com/crawlab-team/crawlab/db v0.0.0-20240701075920-023ba275664a - github.com/crawlab-team/crawlab/fs v0.0.0-20240701075920-023ba275664a - github.com/crawlab-team/crawlab/grpc v0.0.0-20240701075920-023ba275664a - github.com/crawlab-team/crawlab/template-parser v0.0.0-20240701075920-023ba275664a - github.com/crawlab-team/crawlab/trace v0.0.0-20240701075920-023ba275664a - github.com/crawlab-team/crawlab/vcs v0.0.0-20240701075920-023ba275664a - github.com/elastic/go-elasticsearch/v8 v8.14.0 - github.com/emirpasic/gods v1.18.1 + github.com/common-nighthawk/go-figure v0.0.0-20210622060536-734e95fb86be + github.com/crawlab-team/crawlab/grpc v0.0.0 + github.com/crawlab-team/crawlab/trace v0.0.0 + github.com/crawlab-team/crawlab/vcs v0.0.0 github.com/fsnotify/fsnotify v1.7.0 - github.com/gavv/httpexpect/v2 v2.16.0 github.com/gin-gonic/gin v1.10.0 - github.com/go-git/go-git/v5 v5.12.0 github.com/golang-jwt/jwt/v5 v5.2.1 + github.com/gomarkdown/markdown v0.0.0-20241105142532-d03b89096d81 github.com/google/uuid v1.6.0 github.com/gorilla/websocket v1.5.3 github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4 + github.com/hashicorp/go-multierror v1.1.1 github.com/hashicorp/go-uuid v1.0.3 - github.com/imroc/req v0.3.2 - github.com/matcornic/hermes/v2 v2.1.0 github.com/mitchellh/go-homedir v1.1.0 github.com/pkg/errors v0.9.1 github.com/robfig/cron/v3 v3.0.0 - github.com/segmentio/kafka-go v0.4.39 github.com/shirou/gopsutil v3.21.11+incompatible - github.com/sirupsen/logrus v1.9.0 - github.com/smartystreets/goconvey v1.6.4 github.com/spf13/cobra v1.3.0 github.com/spf13/viper v1.19.0 github.com/stretchr/testify v1.9.0 - github.com/thoas/go-funk v0.9.1 - github.com/upper/db/v4 v4.6.0 go.mongodb.org/mongo-driver v1.15.1 - go.uber.org/dig v1.10.0 - google.golang.org/grpc v1.64.0 + golang.org/x/oauth2 v0.23.0 + google.golang.org/api v0.189.0 + google.golang.org/grpc v1.69.2 gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df ) @@ -58,143 +46,93 @@ require ( ) require ( - github.com/Masterminds/semver v1.4.2 // indirect - github.com/Masterminds/sprig v2.16.0+incompatible // indirect - github.com/Microsoft/go-winio v0.6.1 // indirect + cloud.google.com/go/auth v0.7.2 // indirect + cloud.google.com/go/auth/oauth2adapt v0.2.3 // indirect + cloud.google.com/go/compute/metadata v0.5.2 // indirect + github.com/Microsoft/go-winio v0.6.2 // indirect github.com/ProtonMail/go-crypto v1.0.0 // indirect - github.com/PuerkitoBio/goquery v1.9.2 // indirect - github.com/TylerBrock/colorjson v0.0.0-20200706003622-8a50f05110d2 // indirect - github.com/ajg/form v1.5.1 // indirect - github.com/andybalholm/brotli v1.1.0 // indirect github.com/andybalholm/cascadia v1.3.2 // indirect - github.com/aokoli/goutils v1.0.1 // indirect github.com/bytedance/sonic v1.11.6 // indirect github.com/bytedance/sonic/loader v0.1.1 // indirect github.com/cloudflare/circl v1.3.7 // indirect github.com/cloudwego/base64x v0.1.4 // indirect github.com/cloudwego/iasm v0.2.0 // indirect - github.com/crawlab-team/goseaweedfs v0.6.3 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect - github.com/denisenkom/go-mssqldb v0.11.0 // indirect - github.com/elastic/elastic-transport-go/v8 v8.6.0 // indirect - github.com/fatih/color v1.15.0 // indirect - github.com/fatih/structs v1.1.0 // indirect + github.com/emirpasic/gods v1.18.1 // indirect + github.com/felixge/httpsnoop v1.0.4 // indirect github.com/gabriel-vasile/mimetype v1.4.3 // indirect github.com/gin-contrib/sse v0.1.0 // indirect github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect github.com/go-git/go-billy/v5 v5.5.0 // indirect - github.com/go-logr/logr v1.4.1 // indirect + github.com/go-git/go-git/v5 v5.12.0 // indirect + github.com/go-logr/logr v1.4.2 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/go-ole/go-ole v1.2.6 // indirect github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect github.com/go-playground/validator/v10 v10.20.0 // indirect - github.com/go-sql-driver/mysql v1.6.0 // indirect - github.com/gobwas/glob v0.2.3 // indirect github.com/goccy/go-json v0.10.2 // indirect - github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/snappy v0.0.4 // indirect - github.com/google/go-querystring v1.1.0 // indirect - github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 // indirect - github.com/gorilla/css v1.0.0 // indirect + github.com/google/s2a-go v0.1.8 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect + github.com/googleapis/gax-go/v2 v2.13.0 // indirect + github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/hcl v1.0.0 // indirect - github.com/huandu/xstrings v1.2.0 // indirect - github.com/imdario/mergo v0.3.16 // indirect - github.com/imkira/go-interpol v1.1.0 // indirect github.com/inconshreveable/mousetrap v1.0.0 // indirect - github.com/jackc/chunkreader/v2 v2.0.1 // indirect - github.com/jackc/pgconn v1.11.0 // indirect - github.com/jackc/pgio v1.0.0 // indirect - github.com/jackc/pgpassfile v1.0.0 // indirect - github.com/jackc/pgproto3/v2 v2.2.0 // indirect - github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b // indirect - github.com/jackc/pgtype v1.10.0 // indirect - github.com/jackc/pgx/v4 v4.15.0 // indirect - github.com/jaytaylor/html2text v0.0.0-20180606194806-57d518f124b0 // indirect github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect github.com/json-iterator/go v1.1.12 // indirect - github.com/jtolds/gls v4.20.0+incompatible // indirect github.com/kevinburke/ssh_config v1.2.0 // indirect github.com/klauspost/compress v1.17.7 // indirect github.com/klauspost/cpuid/v2 v2.2.7 // indirect github.com/leodido/go-urn v1.4.0 // indirect - github.com/lib/pq v1.10.4 // indirect github.com/magiconair/properties v1.8.7 // indirect - github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect - github.com/mattn/go-runewidth v0.0.3 // indirect - github.com/mattn/go-sqlite3 v1.14.9 // indirect - github.com/mitchellh/go-wordwrap v1.0.1 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe // indirect - github.com/olekukonko/tablewriter v0.0.1 // indirect - github.com/onsi/gomega v1.30.0 // indirect github.com/pelletier/go-toml/v2 v2.2.2 // indirect - github.com/pierrec/lz4/v4 v4.1.18 // indirect github.com/pjbgf/sha1cd v0.3.0 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - github.com/robertkrimen/otto v0.0.0-20210614181706-373ff5438452 // indirect - github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/sagikazarmark/locafero v0.4.0 // indirect github.com/sagikazarmark/slog-shim v0.1.0 // indirect - github.com/sanity-io/litter v1.5.5 // indirect - github.com/segmentio/fasthash v1.0.3 // indirect github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect github.com/skeema/knownhosts v1.2.2 // indirect - github.com/smartystreets/assertions v1.0.0 // indirect github.com/sourcegraph/conc v0.3.0 // indirect github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.6.0 // indirect github.com/spf13/pflag v1.0.5 // indirect - github.com/ssor/bom v0.0.0-20170718123548-6386211fdfcf // indirect - github.com/stretchr/objx v0.5.2 // indirect github.com/subosito/gotenv v1.6.0 // indirect - github.com/tklauser/go-sysconf v0.3.9 // indirect - github.com/tklauser/numcpus v0.3.0 // indirect + github.com/tklauser/go-sysconf v0.3.12 // indirect + github.com/tklauser/numcpus v0.6.1 // indirect github.com/twitchyliquid64/golang-asm v0.15.1 // indirect github.com/ugorji/go/codec v1.2.12 // indirect - github.com/valyala/bytebufferpool v1.0.0 // indirect - github.com/valyala/fasthttp v1.34.0 // indirect - github.com/vanng822/css v0.0.0-20190504095207-a21e860bcd04 // indirect - github.com/vanng822/go-premailer v0.0.0-20191214114701-be27abe028fe // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect github.com/xdg-go/pbkdf2 v1.0.0 // indirect github.com/xdg-go/scram v1.1.2 // indirect github.com/xdg-go/stringprep v1.0.4 // indirect - github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect - github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect - github.com/xeipuuv/gojsonschema v1.2.0 // indirect - github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0 // indirect github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // indirect - github.com/yudai/gojsondiff v1.0.0 // indirect - github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82 // indirect - github.com/yusufpapurcu/wmi v1.2.2 // indirect + github.com/yusufpapurcu/wmi v1.2.3 // indirect github.com/ztrue/tracerr v0.4.0 // indirect - go.opentelemetry.io/otel v1.24.0 // indirect - go.opentelemetry.io/otel/metric v1.24.0 // indirect - go.opentelemetry.io/otel/trace v1.24.0 // indirect - go.uber.org/atomic v1.9.0 // indirect - go.uber.org/goleak v1.1.11 // indirect - go.uber.org/multierr v1.9.0 // indirect + go.opencensus.io v0.24.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0 // indirect + go.opentelemetry.io/otel v1.31.0 // indirect + go.opentelemetry.io/otel/metric v1.31.0 // indirect + go.opentelemetry.io/otel/trace v1.31.0 // indirect + go.uber.org/goleak v1.3.0 // indirect + go.uber.org/multierr v1.11.0 // indirect golang.org/x/arch v0.8.0 // indirect - golang.org/x/crypto v0.23.0 // indirect - golang.org/x/exp v0.0.0-20240222234643-814bf88cf225 // indirect - golang.org/x/mod v0.17.0 // indirect - golang.org/x/net v0.25.0 // indirect - golang.org/x/oauth2 v0.21.0 // indirect - golang.org/x/sync v0.7.0 // indirect - golang.org/x/sys v0.20.0 // indirect - golang.org/x/text v0.15.0 // indirect - golang.org/x/tools v0.20.0 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117 // indirect - google.golang.org/protobuf v1.34.2 // indirect + golang.org/x/crypto v0.31.0 // indirect + golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect + golang.org/x/net v0.33.0 // indirect + golang.org/x/sync v0.10.0 // indirect + golang.org/x/sys v0.28.0 // indirect + golang.org/x/text v0.21.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20241118233622-e639e219e697 // indirect + google.golang.org/protobuf v1.36.1 // indirect gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect gopkg.in/ini.v1 v1.67.0 // indirect - gopkg.in/sourcemap.v1 v1.0.5 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - moul.io/http2curl/v2 v2.3.0 // indirect ) diff --git a/core/go.sum b/core/go.sum index 9bfd5e460..bbea437ea 100644 --- a/core/go.sum +++ b/core/go.sum @@ -27,16 +27,18 @@ cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= cloud.google.com/go v0.98.0/go.mod h1:ua6Ush4NALrHk5QXDWnjvZHN93OuF0HfuEPq9I1X0cM= cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= -cloud.google.com/go v0.112.1 h1:uJSeirPke5UNZHIb4SxfZklVSiWWVqW4oXlETwZziwM= +cloud.google.com/go/auth v0.7.2 h1:uiha352VrCDMXg+yoBtaD0tUF4Kv9vrtrWPYXwutnDE= +cloud.google.com/go/auth v0.7.2/go.mod h1:VEc4p5NNxycWQTMQEDQF0bd6aTMb6VgYDXEwiJJQAbs= +cloud.google.com/go/auth/oauth2adapt v0.2.3 h1:MlxF+Pd3OmSudg/b1yZ5lJwoXCEaeedAguodky1PcKI= +cloud.google.com/go/auth/oauth2adapt v0.2.3/go.mod h1:tMQXOfZzFuNuUxOypHlQEXgdfX5cuhwU+ffUuXRJE8I= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/compute v1.25.1 h1:ZRpHJedLtTpKgr3RV1Fx23NuaAEN1Zfx9hw1u4aJdjU= -cloud.google.com/go/compute/metadata v0.3.0 h1:Tz+eQXMEqDIKRsmY3cHTL6FVaynIjX2QxYC4trgAKZc= -cloud.google.com/go/compute/metadata v0.3.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= +cloud.google.com/go/compute/metadata v0.5.2 h1:UxK4uu/Tn+I3p2dYWTfiX4wva7aYlKixAHn3fyqngqo= +cloud.google.com/go/compute/metadata v0.5.2/go.mod h1:C66sj2AluDcIqakBq/M8lw8/ybHgOZqin2obFxa/E5k= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= cloud.google.com/go/firestore v1.6.1/go.mod h1:asNXNOzBdyVQmEU+ggO8UPodTkEVFW5Qx+rwHnAz+EY= @@ -55,39 +57,25 @@ dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= -github.com/Masterminds/semver v1.4.2 h1:WBLTQ37jOCzSLtXNdoo8bNM8876KhNqOKvrlGITgsTc= -github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= -github.com/Masterminds/semver/v3 v3.1.1 h1:hLg3sBzpNErnxhQtUy/mmLR2I9foDujNK030IGemrRc= -github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= -github.com/Masterminds/sprig v2.16.0+incompatible h1:QZbMUPxRQ50EKAq3LFMnxddMu88/EUUG3qmxwtDmPsY= -github.com/Masterminds/sprig v2.16.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= -github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= -github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= +github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= +github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/ProtonMail/go-crypto v1.0.0 h1:LRuvITjQWX+WIfr930YHG2HNfjR1uOfyf5vE0kC2U78= github.com/ProtonMail/go-crypto v1.0.0/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= -github.com/PuerkitoBio/goquery v1.5.0/go.mod h1:qD2PgZ9lccMbQlc7eEOjaeRlFQON7xY8kdmcsrnKqMg= github.com/PuerkitoBio/goquery v1.9.2 h1:4/wZksC3KgkQw7SQgkKotmKljk0M6V8TUvA8Wb4yPeE= +github.com/PuerkitoBio/goquery v1.9.2/go.mod h1:GHPCaP0ODyyxqcNoFGYlAprUFH81NuRPd0GX3Zu2Mvk= github.com/ReneKroon/ttlcache v1.7.0 h1:8BkjFfrzVFXyrqnMtezAaJ6AHPSsVV10m6w28N/Fgkk= github.com/ReneKroon/ttlcache v1.7.0/go.mod h1:8BGGzdumrIjWxdRx8zpK6L3oGMWvIXdvB2GD1cfvd+I= -github.com/TylerBrock/colorjson v0.0.0-20200706003622-8a50f05110d2 h1:ZBbLwSJqkHBuFDA6DUhhse0IGJ7T5bemHyNILUjvOq4= -github.com/TylerBrock/colorjson v0.0.0-20200706003622-8a50f05110d2/go.mod h1:VSw57q4QFiWDbRnjdX8Cb3Ow0SFncRw+bA/ofY6Q83w= -github.com/ajg/form v1.5.1 h1:t9c7v8JUKu/XxOGBU0yjNpaMloxGEJhUkqFRq0ibGeU= -github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= -github.com/andybalholm/brotli v1.1.0 h1:eLKJA0d02Lf0mVpIDgYnqXcUn0GqVmEFny3VuID1U3M= -github.com/andybalholm/cascadia v1.0.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y= github.com/andybalholm/cascadia v1.3.2 h1:3Xi6Dw5lHF15JtdcmAHD3i1+T8plmv7BQ/nsViSLyss= +github.com/andybalholm/cascadia v1.3.2/go.mod h1:7gtRlve5FxPPgIgX36uWBX58OdBsSS6lUvCFb+h7KvU= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/aokoli/goutils v1.0.1 h1:7fpzNGoJ3VA8qcrm++XEE1QUe0mIwNeLa02Nwq7RDkg= -github.com/aokoli/goutils v1.0.1/go.mod h1:SijmP0QR8LtwsmDs8Yii5Z/S4trXFGFC2oO5g9DP+DQ= github.com/apex/log v1.9.0 h1:FHtw/xuaM8AgmvDDTI9fiwoAL25Sq2cxojnZICUU8l0= github.com/apex/log v1.9.0/go.mod h1:m82fZlWIuiWzWP04XCTXmnX0xRkYYbCdYn8jbJeLBEA= github.com/apex/logs v1.0.0/go.mod h1:XzxuLZ5myVHDy9SAmYpamKKRNApGj54PfYLcFrXqDwo= @@ -112,6 +100,7 @@ github.com/bytedance/sonic v1.11.6/go.mod h1:LysEHSvpvDySVdC2f87zGWf6CIKJcAvqab1 github.com/bytedance/sonic/loader v0.1.1 h1:c+e5Pt1k/cy5wMveRDyk2X4B9hF4g7an8N3zCYjJFNM= github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= +github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= @@ -140,30 +129,17 @@ github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211130200136-a8f946100490/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cockroachdb/apd v1.1.0 h1:3LFP3629v+1aKXU5Q37mxmRxX/pIu1nijXydLShEq5I= -github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= +github.com/common-nighthawk/go-figure v0.0.0-20210622060536-734e95fb86be h1:J5BL2kskAlV9ckgEsNQXscjIaLiOYiZ75d4e94E6dcQ= +github.com/common-nighthawk/go-figure v0.0.0-20210622060536-734e95fb86be/go.mod h1:mk5IQ+Y0ZeO87b858TlA645sVcEcbiX6YqP98kt+7+w= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/crawlab-team/goseaweedfs v0.6.3 h1:f96H2QCLrZpof9na1mhIKouKrv8p32XRUyouSVm4YHU= -github.com/crawlab-team/goseaweedfs v0.6.3/go.mod h1:Anqw9QErRJpTeVAVdcSfzprGzUz7OW4MVCHLJjKeO1U= -github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg= github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= -github.com/davecgh/go-spew v0.0.0-20161028175848-04cdfd42973b/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/denisenkom/go-mssqldb v0.11.0 h1:9rHa233rhdOyrz2GcP9NM+gi2psgJZ4GWDpL/7ND8HI= -github.com/denisenkom/go-mssqldb v0.11.0/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= -github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= -github.com/elastic/elastic-transport-go/v8 v8.6.0 h1:Y2S/FBjx1LlCv5m6pWAF2kDJAHoSjSRSJCApolgfthA= -github.com/elastic/elastic-transport-go/v8 v8.6.0/go.mod h1:YLHer5cj0csTzNFXoNQ8qhtGY1GTvSqPnKWKaqQE3Hk= -github.com/elastic/go-elasticsearch/v8 v8.14.0 h1:1ywU8WFReLLcxE1WJqii3hTtbPUE2hc38ZK/j4mMFow= -github.com/elastic/go-elasticsearch/v8 v8.14.0/go.mod h1:WRvnlGkSuZyp83M2U8El/LGXpCjYLrvlkSgkAH4O5I4= github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a h1:mATvB/9r/3gvcejNsXKSkQ6lcIaNec2nyfOdlTBR2lU= github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a/go.mod h1:Ro8st/ElPeALwNFlcTpWmkr6IoMFfkjXAvTHpevnDsM= github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= @@ -182,10 +158,8 @@ github.com/envoyproxy/protoc-gen-validate v0.6.2/go.mod h1:2t7qjJNvHPx8IjnBOzl9E github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= -github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= -github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw= -github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo= -github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= +github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= +github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= @@ -194,8 +168,6 @@ github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nos github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0= github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk= -github.com/gavv/httpexpect/v2 v2.16.0 h1:Ty2favARiTYTOkCRZGX7ojXXjGyNAIohM1lZ3vqaEwI= -github.com/gavv/httpexpect/v2 v2.16.0/go.mod h1:uJLaO+hQ25ukBJtQi750PsztObHybNllN+t+MbbW8PY= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= @@ -214,16 +186,13 @@ github.com/go-git/go-git/v5 v5.12.0/go.mod h1:FTM9VKtnI2m65hNI/TenDDDnUf2Q9FHnXY github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gomail/gomail v0.0.0-20160411212932-81ebce5c23df/go.mod h1:GJr+FCSXshIwgHBtLglIg9M2l2kQSi6QjVAngtzI08Y= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= -github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= +github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= @@ -236,22 +205,14 @@ github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJn github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= github.com/go-playground/validator/v10 v10.20.0 h1:K9ISHbSaI0lyB2eWMPJo+kOS/FBExVwjEviJTixqxL8= github.com/go-playground/validator/v10 v10.20.0/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM= -github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE= -github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= -github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/gofrs/uuid v4.0.0+incompatible h1:1SD/1F5pU8p29ybwgQSwpQk+mwdRrXCYuPhW6m+TnJw= -github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk= github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= -github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe h1:lXe2qZdvpiX5WZkZR4hgp4KJVfY3nMkvmwbVkpv1rVY= -github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -289,6 +250,8 @@ github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6 github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/gomarkdown/markdown v0.0.0-20241105142532-d03b89096d81 h1:5lyLWsV+qCkoYqsKUDuycESh9DEIPVKN6iCFeL7ag50= +github.com/gomarkdown/markdown v0.0.0-20241105142532-d03b89096d81/go.mod h1:JDGcbDT52eL4fju3sZ4TeHGsQwhG9nbDV21aMyhwPoA= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= @@ -305,8 +268,6 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= -github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= @@ -327,19 +288,20 @@ github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/s2a-go v0.1.8 h1:zZDs9gcbt9ZPLV0ndSyQk6Kacx2g/X+SKYovpnz3SMM= +github.com/google/s2a-go v0.1.8/go.mod h1:6iNWHTpQ+nfNRN5E00MSdfDwVesa8hhS32PhPO8deJA= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs= +github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gorilla/css v1.0.0 h1:BQqNyPTi50JCFMTw/b67hByjMVXZRwGha6wxVGkeihY= -github.com/gorilla/css v1.0.0/go.mod h1:Dn721qIggHpt4+EFCcTLTU/vk5ySda2ReITrtgBl60c= +github.com/googleapis/gax-go/v2 v2.13.0 h1:yitjD5f7jQHhyDsnhKEBU52NdvvdSeGzlAnDPT0hH1s= +github.com/googleapis/gax-go/v2 v2.13.0/go.mod h1:Z/fvTZXF8/uw7Xu5GuslPw+bplx6SS338j1Is2S+B7A= github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4 h1:z53tR0945TRRQO/fLEVPI6SMv7ZflF0TEaTAoU7tOzg= @@ -348,6 +310,8 @@ github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFb github.com/hashicorp/consul/api v1.11.0/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= +github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= @@ -358,6 +322,8 @@ github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjh github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= +github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= +github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= @@ -378,74 +344,12 @@ github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOn github.com/hashicorp/memberlist v0.3.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk= github.com/hashicorp/serf v0.9.6/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= -github.com/hokaccha/go-prettyjson v0.0.0-20211117102719-0474bc63780f h1:7LYC+Yfkj3CTRcShK0KOL/w6iTiKyqqBA9a41Wnggw8= -github.com/hokaccha/go-prettyjson v0.0.0-20211117102719-0474bc63780f/go.mod h1:pFlLw2CfqZiIBOx6BuCeRLCrfxBJipTY0nIOF/VbGcI= -github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/huandu/xstrings v1.2.0 h1:yPeWdRnmynF7p+lLYz0H2tthW9lqhMJrQV/U7yy4wX0= -github.com/huandu/xstrings v1.2.0/go.mod h1:DvyZB1rfVYsBIigL8HwpZgxHwXozlTgGqn63UyNX5k4= github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4= -github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= -github.com/imkira/go-interpol v1.1.0 h1:KIiKr0VSG2CUW1hl1jpiyuzuJeKUUpC8iM1AIE7N1Vk= -github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA= -github.com/imroc/req v0.3.2 h1:M/JkeU6RPmX+WYvT2vaaOL0K+q8ufL5LxwvJc4xeB4o= github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/ipfs/go-detect-race v0.0.1 h1:qX/xay2W3E4Q1U7d9lNs1sU9nvguX0a7319XbyQ6cOk= -github.com/ipfs/go-detect-race v0.0.1/go.mod h1:8BNT7shDZPo99Q74BpGMK+4D8Mn4j46UU0LZ723meps= -github.com/jackc/chunkreader v1.0.0/go.mod h1:RT6O25fNZIuasFJRyZ4R/Y2BbhasbmZXF9QQ7T3kePo= -github.com/jackc/chunkreader/v2 v2.0.0/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= -github.com/jackc/chunkreader/v2 v2.0.1 h1:i+RDz65UE+mmpjTfyz0MoVTnzeYxroil2G82ki7MGG8= -github.com/jackc/chunkreader/v2 v2.0.1/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= -github.com/jackc/pgconn v0.0.0-20190420214824-7e0022ef6ba3/go.mod h1:jkELnwuX+w9qN5YIfX0fl88Ehu4XC3keFuOJJk9pcnA= -github.com/jackc/pgconn v0.0.0-20190824142844-760dd75542eb/go.mod h1:lLjNuW/+OfW9/pnVKPazfWOgNfH2aPem8YQ7ilXGvJE= -github.com/jackc/pgconn v0.0.0-20190831204454-2fabfa3c18b7/go.mod h1:ZJKsE/KZfsUgOEh9hBm+xYTstcNHg7UPMVJqRfQxq4s= -github.com/jackc/pgconn v1.8.0/go.mod h1:1C2Pb36bGIP9QHGBYCjnyhqu7Rv3sGshaQUvmfGIB/o= -github.com/jackc/pgconn v1.9.0/go.mod h1:YctiPyvzfU11JFxoXokUOOKQXQmDMoJL9vJzHH8/2JY= -github.com/jackc/pgconn v1.9.1-0.20210724152538-d89c8390a530/go.mod h1:4z2w8XhRbP1hYxkpTuBjTS3ne3J48K83+u0zoyvg2pI= -github.com/jackc/pgconn v1.11.0 h1:HiHArx4yFbwl91X3qqIHtUFoiIfLNJXCQRsnzkiwwaQ= -github.com/jackc/pgconn v1.11.0/go.mod h1:4z2w8XhRbP1hYxkpTuBjTS3ne3J48K83+u0zoyvg2pI= -github.com/jackc/pgio v1.0.0 h1:g12B9UwVnzGhueNavwioyEEpAmqMe1E/BN9ES+8ovkE= -github.com/jackc/pgio v1.0.0/go.mod h1:oP+2QK2wFfUWgr+gxjoBH9KGBb31Eio69xUb0w5bYf8= -github.com/jackc/pgmock v0.0.0-20190831213851-13a1b77aafa2/go.mod h1:fGZlG77KXmcq05nJLRkk0+p82V8B8Dw8KN2/V9c/OAE= -github.com/jackc/pgmock v0.0.0-20201204152224-4fe30f7445fd/go.mod h1:hrBW0Enj2AZTNpt/7Y5rr2xe/9Mn757Wtb2xeBzPv2c= -github.com/jackc/pgmock v0.0.0-20210724152146-4ad1a8207f65 h1:DadwsjnMwFjfWc9y5Wi/+Zz7xoE5ALHsRQlOctkOiHc= -github.com/jackc/pgmock v0.0.0-20210724152146-4ad1a8207f65/go.mod h1:5R2h2EEX+qri8jOWMbJCtaPWkrrNc7OHwsp2TCqp7ak= -github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= -github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= -github.com/jackc/pgproto3 v1.1.0/go.mod h1:eR5FA3leWg7p9aeAqi37XOTgTIbkABlvcPB3E5rlc78= -github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190420180111-c116219b62db/go.mod h1:bhq50y+xrl9n5mRYyCBFKkpRVTLYJVWeCc+mEAI3yXA= -github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190609003834-432c2951c711/go.mod h1:uH0AWtUmuShn0bcesswc4aBTWGvw0cAxIJp+6OB//Wg= -github.com/jackc/pgproto3/v2 v2.0.0-rc3/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM= -github.com/jackc/pgproto3/v2 v2.0.0-rc3.0.20190831210041-4c03ce451f29/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM= -github.com/jackc/pgproto3/v2 v2.0.6/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= -github.com/jackc/pgproto3/v2 v2.1.1/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= -github.com/jackc/pgproto3/v2 v2.2.0 h1:r7JypeP2D3onoQTCxWdTpCtJ4D+qpKr0TxvoyMhZ5ns= -github.com/jackc/pgproto3/v2 v2.2.0/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= -github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b h1:C8S2+VttkHFdOOCXJe+YGfa4vHYwlt4Zx+IVXQ97jYg= -github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b/go.mod h1:vsD4gTJCa9TptPL8sPkXrLZ+hDuNrZCnj29CQpr4X1E= -github.com/jackc/pgtype v0.0.0-20190421001408-4ed0de4755e0/go.mod h1:hdSHsc1V01CGwFsrv11mJRHWJ6aifDLfdV3aVjFF0zg= -github.com/jackc/pgtype v0.0.0-20190824184912-ab885b375b90/go.mod h1:KcahbBH1nCMSo2DXpzsoWOAfFkdEtEJpPbVLq8eE+mc= -github.com/jackc/pgtype v0.0.0-20190828014616-a8802b16cc59/go.mod h1:MWlu30kVJrUS8lot6TQqcg7mtthZ9T0EoIBFiJcmcyw= -github.com/jackc/pgtype v1.8.1-0.20210724151600-32e20a603178/go.mod h1:C516IlIV9NKqfsMCXTdChteoXmwgUceqaLfjg2e3NlM= -github.com/jackc/pgtype v1.10.0 h1:ILnBWrRMSXGczYvmkYD6PsYyVFUNLTnIUJHHDLmqk38= -github.com/jackc/pgtype v1.10.0/go.mod h1:LUMuVrfsFfdKGLw+AFFVv6KtHOFMwRgDDzBt76IqCA4= -github.com/jackc/pgx/v4 v4.0.0-20190420224344-cc3461e65d96/go.mod h1:mdxmSJJuR08CZQyj1PVQBHy9XOp5p8/SHH6a0psbY9Y= -github.com/jackc/pgx/v4 v4.0.0-20190421002000-1b8f0016e912/go.mod h1:no/Y67Jkk/9WuGR0JG/JseM9irFbnEPbuWV2EELPNuM= -github.com/jackc/pgx/v4 v4.0.0-pre1.0.20190824185557-6972a5742186/go.mod h1:X+GQnOEnf1dqHGpw7JmHqHc1NxDoalibchSk9/RWuDc= -github.com/jackc/pgx/v4 v4.12.1-0.20210724153913-640aa07df17c/go.mod h1:1QD0+tgSXP7iUjYm9C1NxKhny7lq6ee99u/z+IHFcgs= -github.com/jackc/pgx/v4 v4.15.0 h1:B7dTkXsdILD3MF987WGGCcg+tvLW6bZJdEcqVFeU//w= -github.com/jackc/pgx/v4 v4.15.0/go.mod h1:D/zyOyXiaM1TmVWnOM18p0xdDtdakRBa0RsVGI3U3bw= -github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= -github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= -github.com/jackc/puddle v1.1.3/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= -github.com/jackc/puddle v1.2.1/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= -github.com/jaytaylor/html2text v0.0.0-20180606194806-57d518f124b0 h1:xqgexXAGQgY3HAjNPSaCqn5Aahbo5TKsmhp8VRfr1iQ= -github.com/jaytaylor/html2text v0.0.0-20180606194806-57d518f124b0/go.mod h1:CVKlgaMiht+LXvHG173ujK6JUhZXKb2u/BQtjPDIvyk= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= @@ -457,22 +361,18 @@ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnr github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= -github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.15.0/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= github.com/klauspost/compress v1.17.7 h1:ehO88t2UGzQK66LMdE8tibEd1ErmzZjNEqWkjLAKQQg= +github.com/klauspost/compress v1.17.7/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.2.7 h1:ZWSB3igEs+d0qvnxR/ZBzXVmxkgt8DdzP6m9pfuVLDM= github.com/klauspost/cpuid/v2 v2.2.7/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= @@ -480,24 +380,15 @@ github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfn github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= -github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.1.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.10.2/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/lib/pq v1.10.4 h1:SO9z7FRPzA03QhHKJrH5BXA6HU1rS4V2nIVrrNC1iYk= -github.com/lib/pq v1.10.4/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/lyft/protoc-gen-star v0.5.3/go.mod h1:V0xaHgaf5oCCqmcxYcWiDfTiKsZsRc87/1qhoTACD8w= github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= -github.com/matcornic/hermes/v2 v2.1.0 h1:9TDYFBPFv6mcXanaDmRDEp/RTWj0dTTi+LpFnnnfNWc= -github.com/matcornic/hermes/v2 v2.1.0/go.mod h1:2+ziJeoyRfaLiATIL8VZ7f9hpzH4oDHqTmn0bhrsgVI= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= @@ -505,23 +396,15 @@ github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVc github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= -github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= -github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= -github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/mattn/go-runewidth v0.0.3 h1:a+kO+98RDGEfo6asOGMmpodZq4FNtnGP54yps8BzLR4= -github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-sqlite3 v1.14.9 h1:10HX2Td0ocZpYEjhilsuo6WWtUqttj2Kb0KtD86/KYA= -github.com/mattn/go-sqlite3 v1.14.9/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= @@ -531,9 +414,6 @@ github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXx github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0= -github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0= -github.com/mitchellh/hashstructure/v2 v2.0.2/go.mod h1:MG3aRVU/N29oo/V/IhBX8GR/zz4kQkprJgF2EVszyDE= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= @@ -549,30 +429,22 @@ github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjY github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe h1:iruDEfMl2E6fbMZ9s0scYfZQ84/6SPL6zC8ACM2oIL0= github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/olekukonko/tablewriter v0.0.1 h1:b3iUnf1v+ppJiOfNX4yxxqfWKMQPZR5yoh8urCTFX88= -github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.10.1 h1:q/mM8GF/n0shIN8SaAZ0V+jnLPzen6WIVZdiwrRlMlo= -github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.30.0 h1:hvMK7xYz4D3HapigLTeGdId/NcfQx1VHMJc60ew99+8= +github.com/onsi/gomega v1.30.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM= github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs= -github.com/pierrec/lz4/v4 v4.1.15/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= -github.com/pierrec/lz4/v4 v4.1.18 h1:xaKrnTkyoqfh1YItXl56+6KJNVYWlEEPuAQW9xsplYQ= -github.com/pierrec/lz4/v4 v4.1.18/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4= github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI= -github.com/pkg/diff v0.0.0-20200914180035-5b29258ca4f7/go.mod h1:zO8QMzTeZd5cpnIkz/Gn6iK0jDfGicM1nynOkkPIl28= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= -github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= @@ -590,10 +462,6 @@ github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8b github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= -github.com/remyoudompheng/bigfft v0.0.0-20190728182440-6a916e37a237/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= -github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= -github.com/robertkrimen/otto v0.0.0-20210614181706-373ff5438452 h1:ewTtJ72GFy2e0e8uyiDwMG3pKCS5mBh+hdSTYsPKEP8= -github.com/robertkrimen/otto v0.0.0-20210614181706-373ff5438452/go.mod h1:xvqspoSXJTIpemEonrMDFq6XzwHYYgToXWj5eRX1OtY= github.com/robfig/cron/v3 v3.0.0 h1:kQ6Cb7aHOHTSzNVNEhmp8EcWKLb4CbiMW9h9VyIhO4E= github.com/robfig/cron/v3 v3.0.0/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= github.com/rogpeppe/fastuuid v1.1.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= @@ -601,11 +469,6 @@ github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6L github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= -github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= -github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU= -github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThCjNc= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/sagikazarmark/crypt v0.3.0/go.mod h1:uD/D+6UF4SrIR1uGEv7bBNkNqLGqUr43MRiaGWX1Nig= @@ -613,38 +476,19 @@ github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6ke github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4= github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= -github.com/sanity-io/litter v1.5.5 h1:iE+sBxPBzoK6uaEP5Lt3fHNgpKcHXc/A2HGETy0uJQo= -github.com/sanity-io/litter v1.5.5/go.mod h1:9gzJgR2i4ZpjZHsKvUXIRQVk7P+yM3e+jAF7bU2UI5U= -github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/segmentio/fasthash v1.0.3 h1:EI9+KE1EwvMLBWwjpRDc+fEM+prwxDYbslddQGtrmhM= -github.com/segmentio/fasthash v1.0.3/go.mod h1:waKX8l2N8yckOgmSsXJi7x1ZfdKZ4x7KRMzBtS3oedY= -github.com/segmentio/kafka-go v0.4.39 h1:75smaomhvkYRwtuOwqLsdhgCG30B82NsbdkdDfFbvrw= -github.com/segmentio/kafka-go v0.4.39/go.mod h1:T0MLgygYvmqmBvC+s8aCcbVNfJN4znVne5j0Pzowp/Q= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8= github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI= github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= -github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= -github.com/shopspring/decimal v1.2.0 h1:abSATXmQEYyShuxI4/vyW3tV1MrKAJzCZ/0zLUXYbsQ= -github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= -github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/skeema/knownhosts v1.2.2 h1:Iug2P4fLmDw9f41PB6thxUkNUkJzB5i+1/exaj40L3A= github.com/skeema/knownhosts v1.2.2/go.mod h1:xYbVRSPxqBZFrdmDyMmsOs+uX1UZC3nTN3ThzgDxUwo= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/assertions v1.0.0 h1:UVQPSSmc3qtTi+zPPkCXvZX9VvW/xT/NsRvKfwY81a8= github.com/smartystreets/assertions v1.0.0/go.mod h1:kHHU4qYBaI3q23Pp3VPrmWhuIUrLW/7eUrw0BU5VaoM= github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9/go.mod h1:SnhjPscd9TpLiy1LpzGSKh3bXCfxxXuqd9xmQJy3slM= -github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= -github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/smartystreets/gunit v1.0.0/go.mod h1:qwPWnhz6pn0NnRBP++URONOVyNkPyr4SauJk4cUOwJs= github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= @@ -664,16 +508,11 @@ github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An github.com/spf13/viper v1.10.0/go.mod h1:SoyBPwAtKDzypXNDFKN5kzH7ppppbGZtls1UpIy5AsM= github.com/spf13/viper v1.19.0 h1:RWq5SEjt8o25SROyN3z2OrDB9l7RPd3lwTWU8EcEdcI= github.com/spf13/viper v1.19.0/go.mod h1:GQUN9bilAbhU/jgc1bKs99f/suXKeUMct8Adx5+Ntkg= -github.com/ssor/bom v0.0.0-20170718123548-6386211fdfcf h1:pvbZ0lM0XWPBqUKqFU8cmavspvIl9nulOYwdy6IFRRo= -github.com/ssor/bom v0.0.0-20170718123548-6386211fdfcf/go.mod h1:RJID2RhlZKId02nZ62WenDCkgHFerpIOmW0iT7GKmXM= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= -github.com/stretchr/testify v0.0.0-20161117074351-18a02ba4a312/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -689,9 +528,6 @@ github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8 github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= -github.com/tailscale/depaware v0.0.0-20210622194025-720c4b409502/go.mod h1:p9lPsd+cx33L3H9nNoecRRxPssFKUwwI50I3pZ0yT+8= -github.com/thoas/go-funk v0.9.1 h1:O549iLZqPpTUQ10ykd26sZhzD+rmR5pWhuElrhbC20M= -github.com/thoas/go-funk v0.9.1/go.mod h1:+IWnUfUmFO1+WVYQWQtIJHeRRdaIyyYglZN7xzUPe4Q= github.com/tj/assert v0.0.0-20171129193455-018094318fb0/go.mod h1:mZ9/Rh9oLWpLLDRpvE+3b7gP/C2YyLFYxNmcLnPTMe0= github.com/tj/assert v0.0.3 h1:Df/BlaZ20mq6kuai7f5z2TvPFiwC3xaWJSDQNiIS3Rk= github.com/tj/assert v0.0.3/go.mod h1:Ne6X72Q+TB1AteidzQncjw9PabbMp4PBMZ1k+vd1Pvk= @@ -699,26 +535,15 @@ github.com/tj/go-buffer v1.1.0/go.mod h1:iyiJpfFcR2B9sXu7KvjbT9fpM4mOelRSDTbntVj github.com/tj/go-elastic v0.0.0-20171221160941-36157cbbebc2/go.mod h1:WjeM0Oo1eNAjXGDx2yma7uG2XoyRZTq1uv3M/o7imD0= github.com/tj/go-kinesis v0.0.0-20171128231115-08b17f58cb1b/go.mod h1:/yhzCV0xPfx6jb1bBgRFjl5lytqVqZXEaeqWP8lTEao= github.com/tj/go-spin v1.1.0/go.mod h1:Mg1mzmePZm4dva8Qz60H2lHwmJ2loum4VIrLgVnKwh4= -github.com/tklauser/go-sysconf v0.3.9 h1:JeUVdAOWhhxVcU6Eqr/ATFHgXk/mmiItdKeJPev3vTo= -github.com/tklauser/go-sysconf v0.3.9/go.mod h1:11DU/5sG7UexIrp/O6g35hrWzu0JxlwQ3LSFUzyeuhs= -github.com/tklauser/numcpus v0.3.0 h1:ILuRUQBtssgnxw0XXIjKUC56fgnOrFoQQ/4+DeU2biQ= -github.com/tklauser/numcpus v0.3.0/go.mod h1:yFGUr7TUHQRAhyqBcEg0Ge34zDBAsIvJJcyE6boqnA8= +github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU= +github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= +github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk= +github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65EE= github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= -github.com/upper/db/v4 v4.6.0 h1:0VmASnqrl/XN8Ehoq++HBgZ4zRD5j3GXygW8FhP0C5I= -github.com/upper/db/v4 v4.6.0/go.mod h1:2mnRcPf+RcCXmVcD+o04LYlyu3UuF7ubamJia7CkN6s= -github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= -github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasthttp v1.34.0 h1:d3AAQJ2DRcxJYHm7OXNXtXt2as1vMDfxeIcFvhmGGm4= -github.com/valyala/fasthttp v1.34.0/go.mod h1:epZA5N+7pY6ZaEKRmstzOuYJx9HI8DI1oaCGZpdH4h0= -github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc= -github.com/vanng822/css v0.0.0-20190504095207-a21e860bcd04 h1:L0rPdfzq43+NV8rfIx2kA4iSSLRj2jN5ijYHoeXRwvQ= -github.com/vanng822/css v0.0.0-20190504095207-a21e860bcd04/go.mod h1:tcnB1voG49QhCrwq1W0w5hhGasvOg+VQp9i9H1rCM1w= -github.com/vanng822/go-premailer v0.0.0-20191214114701-be27abe028fe h1:9YnI5plmy+ad6BM+JCLJb2ZV7/TNiE5l7SNKfumYKgc= -github.com/vanng822/go-premailer v0.0.0-20191214114701-be27abe028fe/go.mod h1:JTFJA/t820uFDoyPpErFQ3rb3amdZoPtxcKervG0OE4= github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= @@ -727,42 +552,23 @@ github.com/xdg-go/scram v1.1.2 h1:FHX5I5B4i4hKRVRBCFRxq1iQRej7WO3hhBuJf+UUySY= github.com/xdg-go/scram v1.1.2/go.mod h1:RT/sEzTbU5y00aCK8UOx6R7YryM0iF1N2MOmC3kKLN4= github.com/xdg-go/stringprep v1.0.4 h1:XLI/Ng3O1Atzq0oBs3TWm+5ZVgkq2aqdlvP9JtoZ6c8= github.com/xdg-go/stringprep v1.0.4/go.mod h1:mPGuuIYwz7CmR2bT9j4GbQqutWS1zV24gijq1dTyGkM= -github.com/xdg/scram v1.0.5 h1:TuS0RFmt5Is5qm9Tm2SoD89OPqe4IRiFtyFY4iwWXsw= -github.com/xdg/scram v1.0.5/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= -github.com/xdg/stringprep v1.0.3 h1:cmL5Enob4W83ti/ZHuZLuKD/xqJfus4fVPwE+/BDm+4= -github.com/xdg/stringprep v1.0.3/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= -github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= -github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo= -github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= -github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= -github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= -github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= -github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= -github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0 h1:6fRhSjgLCkTD3JnJxvaJ4Sj+TYblw757bqYgZaOq5ZY= -github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0/go.mod h1:/LWChgwKmvncFJFHJ7Gvn9wZArjbV5/FppcK2fKk/tI= github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d h1:splanxYIlg+5LfHAM6xpdFEAYOk8iySO56hMFq6uLyA= github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= -github.com/yudai/gojsondiff v1.0.0 h1:27cbfqXLVEJ1o8I6v3y9lg8Ydm53EKqHXAOMxEGlCOA= -github.com/yudai/gojsondiff v1.0.0/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg= -github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82 h1:BHyfKlQyqbsFN5p3IfnEUduWvb9is428/nNb5L3U01M= -github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM= -github.com/yudai/pp v2.0.1+incompatible h1:Q4//iY4pNF6yPLZIigmvcl7k/bPgrcTPIFIcmawg5bI= -github.com/yudai/pp v2.0.1+incompatible/go.mod h1:PuxR/8QJ7cyCkFp/aUDS+JY727OFEZkTdatxwunjIkc= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg= -github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= -github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= +github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw= +github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= github.com/ztrue/tracerr v0.4.0 h1:vT5PFxwIGs7rCg9ZgJ/y0NmOpJkPCPFK8x0vVIYzd04= github.com/ztrue/tracerr v0.4.0/go.mod h1:PaFfYlas0DfmXNpo7Eay4MFhZUONqvXM+T2HyGPpngk= go.etcd.io/etcd/api/v3 v3.5.1/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= go.etcd.io/etcd/client/pkg/v3 v3.5.1/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= go.etcd.io/etcd/client/v2 v2.305.1/go.mod h1:pMEacxZW7o8pg4CrFE7pquyCJJzZvkvdD2RibOCCCGs= go.mongodb.org/mongo-driver v1.15.1 h1:l+RvoUOoMXFmADTLfYDm7On9dRm7p4T80/lEQM+r7HU= +go.mongodb.org/mongo-driver v1.15.1/go.mod h1:Vzb0Mk/pa7e6cWw85R4F/endUC3u0U9jGcNU603k65c= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -770,47 +576,35 @@ go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= -go.opentelemetry.io/otel v1.24.0 h1:0LAOdjNmQeSTzGBzduGe/rU4tZhMwL5rWgtp9Ku5Jfo= -go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo= -go.opentelemetry.io/otel/metric v1.24.0 h1:6EhoGWWK28x1fbpA4tYTOWBkPefTDQnb8WSGXlc88kI= -go.opentelemetry.io/otel/metric v1.24.0/go.mod h1:VYhLe1rFfxuTXLgj4CBiyz+9WYBA8pNGJgDcSFRKBco= -go.opentelemetry.io/otel/sdk v1.21.0 h1:FTt8qirL1EysG6sTQRZ5TokkU8d0ugCj8htOgThZXQ8= -go.opentelemetry.io/otel/sdk v1.21.0/go.mod h1:Nna6Yv7PWTdgJHVRD9hIYywQBRx7pbox6nwBnZIxl/E= -go.opentelemetry.io/otel/trace v1.24.0 h1:CsKnnL4dUAr/0llH9FKuc698G04IrpWV0MQA/Y1YELI= -go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU= +go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= +go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0 h1:4K4tsIXefpVJtvA/8srF4V4y0akAoPHkIslgAkjixJA= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0/go.mod h1:jjdQuTGVsXV4vSs+CJ2qYDeDPf9yIJV23qlIzBm73Vg= +go.opentelemetry.io/otel v1.31.0 h1:NsJcKPIW0D0H3NgzPDHmo0WW6SptzPdqg/L1zsIm2hY= +go.opentelemetry.io/otel v1.31.0/go.mod h1:O0C14Yl9FgkjqcCZAsE053C13OaddMYr/hz6clDkEJE= +go.opentelemetry.io/otel/metric v1.31.0 h1:FSErL0ATQAmYHUIzSezZibnyVlft1ybhy4ozRPcF2fE= +go.opentelemetry.io/otel/metric v1.31.0/go.mod h1:C3dEloVbLuYoX41KpmAhOqNriGbA+qqH6PQ5E5mUfnY= +go.opentelemetry.io/otel/sdk v1.31.0 h1:xLY3abVHYZ5HSfOg3l2E5LUj2Cwva5Y7yGxnSW9H5Gk= +go.opentelemetry.io/otel/sdk v1.31.0/go.mod h1:TfRbMdhvxIIr/B2N2LQW2S5v9m3gOQ/08KsbbO5BPT0= +go.opentelemetry.io/otel/sdk/metric v1.31.0 h1:i9hxxLJF/9kkvfHppyLL55aW7iIJz4JjxTeYusH7zMc= +go.opentelemetry.io/otel/sdk/metric v1.31.0/go.mod h1:CRInTMVvNhUKgSAMbKyTMxqOBC0zgyxzW55lZzX43Y8= +go.opentelemetry.io/otel/trace v1.31.0 h1:ffjsj1aRouKewfr85U2aGagJ46+MvodynlQ1HYdmJys= +go.opentelemetry.io/otel/trace v1.31.0/go.mod h1:TXZkRk7SM2ZQLtR6eoAWQFIHPvzQ06FJAsO1tJg480A= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= -go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/dig v1.10.0 h1:yLmDDj9/zuDjv3gz8GQGviXMs9TfysIUMUilCpgzUJY= -go.uber.org/dig v1.10.0/go.mod h1:X34SnWGr8Fyla9zQNO2GSO2D+TIuqB14OS8JhYocIyw= go.uber.org/goleak v0.10.0/go.mod h1:VCZuO8V8mFPlL0F5J5GK1rtHV3DrFcQ1R8ryq7FK0aI= -go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI= -go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= -go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= +go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= +go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= -go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= -go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= -go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= +go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= +go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/arch v0.8.0 h1:3wRIsP3pM4yUptoR96otTUOXI367OS0+c9eeRi9doIc= golang.org/x/arch v0.8.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181029175232-7e6ffbd03851/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190411191339-88737f569e3a/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -818,19 +612,13 @@ golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201203163018-be400aefbc4c/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220307211146-efcb8507fb70/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI= -golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= -golang.org/x/exp v0.0.0-20181106170214-d68db9428509/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= +golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -841,7 +629,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20240222234643-814bf88cf225 h1:LfspQV/FYTatPTr/3HzIcmiUFH7PGP+OQ6mgDYo3yuQ= +golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8= +golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -855,7 +644,6 @@ golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRu golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 h1:VLliZ0d+/avPrXXH+OakdXhpJuEoBZuwh1m2j7U6Iug= golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= @@ -871,9 +659,6 @@ golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= -golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -890,7 +675,6 @@ golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -918,14 +702,13 @@ golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220706163947-c90051bbdb60/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= -golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac= -golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= +golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= +golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I= +golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -943,8 +726,8 @@ golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.21.0 h1:tsimM75w1tF/uws5rbeHzIWxEqElMehnc+iW793zsZs= -golang.org/x/oauth2 v0.21.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= +golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs= +golang.org/x/oauth2 v0.23.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -958,8 +741,8 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= -golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= +golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -968,9 +751,7 @@ golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190225065934-cc5685c2db12/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -978,7 +759,6 @@ golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1024,7 +804,6 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210816074244-15123e1e1f71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1032,27 +811,26 @@ golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211205182925-97ca703d548d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y= -golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= +golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= -golang.org/x/term v0.20.0 h1:VnkxpohqXaOBYJtBmEppKUG6mXpi+4O6purfc2+sMhw= -golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= +golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= +golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q= +golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1066,8 +844,9 @@ golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk= -golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1077,22 +856,16 @@ golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3 golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190425163242-31fd60d6bfdc/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190823170909-c4a336ef6a2f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191030062658-86caa796c7ab/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -1100,7 +873,6 @@ golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= @@ -1124,7 +896,6 @@ golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82u golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201211185031-d93e913c1a58/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= @@ -1135,10 +906,6 @@ golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.20.0 h1:hz/CVckiOxybQvFw6h7b/q80NTr9IUQb4s1IIzW7KNY= -golang.org/x/tools v0.20.0/go.mod h1:WvitBU7JJf6A4jOdg4S1tviW9bhUxkgeCui/0JHctQg= -golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1175,6 +942,8 @@ google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdr google.golang.org/api v0.59.0/go.mod h1:sT2boj7M9YJxZzgeZqXogmhfmRWDtPzT31xkieUbuZU= google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= google.golang.org/api v0.62.0/go.mod h1:dKmwPCydfsad4qCH08MSdgWjfHOyfpd4VtDGgRFdavw= +google.golang.org/api v0.189.0 h1:equMo30LypAkdkLMBqfeIqtyAnlyig1JSZArl4XPwdI= +google.golang.org/api v0.189.0/go.mod h1:FLWGJKb0hb+pU2j+rJqwbnsF+ym+fQs73rbJ+KAUgy8= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1245,8 +1014,11 @@ google.golang.org/genproto v0.0.0-20211129164237-f09f9a12af12/go.mod h1:5CzLGKJ6 google.golang.org/genproto v0.0.0-20211203200212-54befc351ae9/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117 h1:1GBuWVLM/KMVUv1t1En5Gs+gFZCNd360GGb4sSxtrhU= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0= +google.golang.org/genproto v0.0.0-20240722135656-d784300faade h1:lKFsS7wpngDgSCeFn7MoLy+wBDQZ1UQIJD4UNM1Qvkg= +google.golang.org/genproto/googleapis/api v0.0.0-20241015192408-796eee8c2d53 h1:fVoAXEKA4+yufmbdVYv+SE73+cPZbbbe8paLsHfkK+U= +google.golang.org/genproto/googleapis/api v0.0.0-20241015192408-796eee8c2d53/go.mod h1:riSXTwQ4+nqmPGtobMFyW5FqVAmIs0St6VPp4Ug7CE4= +google.golang.org/genproto/googleapis/rpc v0.0.0-20241118233622-e639e219e697 h1:LWZqQOEjDyONlF1H6afSWpAL/znlREo2tHfLoe+8LMA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20241118233622-e639e219e697/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -1274,8 +1046,8 @@ google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnD google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= -google.golang.org/grpc v1.64.0 h1:KH3VH9y/MgNQg1dE7b3XfVK0GsPSIzJwdF617gUSbvY= -google.golang.org/grpc v1.64.0/go.mod h1:oxjF8E3FBnjp+/gVFYdWacaLDx9na1aqy9oovLpxQYg= +google.golang.org/grpc v1.69.2 h1:U3S9QEtbXC0bYNvRtcoklF3xGtLViumSYxWykJS+7AU= +google.golang.org/grpc v1.69.2/go.mod h1:vyjdE6jLBI76dgpDojsFGNaHlxdjXN9ghpnd2o7JGZ4= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= @@ -1290,8 +1062,8 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= -google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= +google.golang.org/protobuf v1.36.1 h1:yBPeRvTftaleIgM3PZ/WBIZ7XM/eEYAaEyCwvyjq/gk= +google.golang.org/protobuf v1.36.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc h1:2gGKlE2+asNV9m7xrywl36YYNnBG5ZQ0r/BOOxqPpmk= gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk= @@ -1301,19 +1073,12 @@ gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df h1:n7WqCuqOuCbNr617RXOY0AWRXxgwEyPp2z+p0+hgMuE= gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df/go.mod h1:LRQQ+SO6ZHR7tOkpBDuZnXENFzX8qRjMDMyPD6BRkCw= -gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec/go.mod h1:aPpfJ7XW+gOuirDoZ8gHhLh3kZ1B08FtV2bbmy7Jv3s= gopkg.in/ini.v1 v1.66.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 h1:VpOs+IwYnYBaFnrNAeB8UUWtL3vEUnzSCL1nVjPhqrw= -gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= -gopkg.in/sourcemap.v1 v1.0.5 h1:inv58fC9f9J3TK2Y2R1NPntXEn3/wjWHkonhIUODNTI= -gopkg.in/sourcemap.v1 v1.0.5/go.mod h1:2RlvNNSMglmRrcvhfuzp4hQHwOtjxlbjX7UPY/GXb78= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= @@ -1336,26 +1101,6 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -modernc.org/b v1.0.2/go.mod h1:fVGfCIzkZw5RsuF2A2WHbJmY7FiMIq30nP4s52uWsoY= -modernc.org/db v1.0.3/go.mod h1:L4ltUg8tu2pkSJk+fKaRrXs/3EdW79ZKYQ5PfVDT53U= -modernc.org/file v1.0.3/go.mod h1:CNj/pwOfCtCbqiHcXDUlHBB2vWrzdaDCWdcnjtS1+XY= -modernc.org/fileutil v1.0.0/go.mod h1:JHsWpkrk/CnVV1H/eGlFf85BEpfkrp56ro8nojIq9Q8= -modernc.org/golex v1.0.1/go.mod h1:QCA53QtsT1NdGkaZZkF5ezFwk4IXh4BGNafAARTC254= -modernc.org/internal v1.0.0/go.mod h1:VUD/+JAkhCpvkUitlEOnhpVxCgsBI90oTzSCRcqQVSM= -modernc.org/internal v1.0.2/go.mod h1:bycJAcev709ZU/47nil584PeBD+kbu8nv61ozeMso9E= -modernc.org/lex v1.0.0/go.mod h1:G6rxMTy3cH2iA0iXL/HRRv4Znu8MK4higxph/lE7ypk= -modernc.org/lexer v1.0.0/go.mod h1:F/Dld0YKYdZCLQ7bD0USbWL4YKCyTDRDHiDTOs0q0vk= -modernc.org/lldb v1.0.2/go.mod h1:ovbKqyzA9H/iPwHkAOH0qJbIQVT9rlijecenxDwVUi0= -modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k= -modernc.org/mathutil v1.1.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= -modernc.org/mathutil v1.2.2/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= -modernc.org/mathutil v1.4.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= -modernc.org/ql v1.4.0/go.mod h1:q4c29Bgdx+iAtxx47ODW5Xo2X0PDkjSCK9NdQl6KFxc= -modernc.org/sortutil v1.1.0/go.mod h1:ZyL98OQHJgH9IEfN71VsamvJgrtRX9Dj2gX+vH86L1k= -modernc.org/strutil v1.1.1/go.mod h1:DE+MQQ/hjKBZS2zNInV5hhcipt5rLPWkmpbGeW5mmdw= -modernc.org/zappy v1.0.3/go.mod h1:w/Akq8ipfols/xZJdR5IYiQNOqC80qz2mVvsEwEbkiI= -moul.io/http2curl/v2 v2.3.0 h1:9r3JfDzWPcbIklMOs2TnIFzDYvfAZvjeavG6EzP7jYs= -moul.io/http2curl/v2 v2.3.0/go.mod h1:RW4hyBjTWSYDOxapodpNEtX0g5Eb16sxklBqmd2RHcE= nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= diff --git a/core/grpc/client/client.go b/core/grpc/client/client.go index 6767e8d74..8ae6eb1fd 100644 --- a/core/grpc/client/client.go +++ b/core/grpc/client/client.go @@ -2,419 +2,257 @@ package client import ( "context" - "encoding/json" - "github.com/apex/log" + "fmt" + "sync" + "time" + "github.com/cenkalti/backoff/v4" - "github.com/crawlab-team/crawlab/core/constants" - "github.com/crawlab-team/crawlab/core/container" - "github.com/crawlab-team/crawlab/core/entity" - "github.com/crawlab-team/crawlab/core/errors" "github.com/crawlab-team/crawlab/core/grpc/middlewares" "github.com/crawlab-team/crawlab/core/interfaces" "github.com/crawlab-team/crawlab/core/utils" grpc2 "github.com/crawlab-team/crawlab/grpc" - "github.com/crawlab-team/crawlab/trace" - "github.com/spf13/viper" "google.golang.org/grpc" "google.golang.org/grpc/connectivity" - "io" - "time" + "google.golang.org/grpc/credentials/insecure" ) -type Client struct { +type GrpcClient struct { // dependencies nodeCfgSvc interfaces.NodeConfigService // settings - cfgPath string - address interfaces.Address - timeout time.Duration - subscribeType string - handleMessage bool + address string + timeout time.Duration // internals - conn *grpc.ClientConn - stream grpc2.NodeService_SubscribeClient - msgCh chan *grpc2.StreamMessage - err error - - // grpc clients - ModelDelegateClient grpc2.ModelDelegateClient - ModelBaseServiceClient grpc2.ModelBaseServiceClient + conn *grpc.ClientConn + err error + once sync.Once + stopped bool + stop chan struct{} + interfaces.Logger + + // clients NodeClient grpc2.NodeServiceClient TaskClient grpc2.TaskServiceClient - MessageClient grpc2.MessageServiceClient -} + ModelBaseServiceClient grpc2.ModelBaseServiceClient + DependencyClient grpc2.DependencyServiceClient + MetricClient grpc2.MetricServiceClient -func (c *Client) Init() (err error) { - // do nothing - return nil + // Add new fields for state management + state connectivity.State + stateMux sync.RWMutex + reconnect chan struct{} } -func (c *Client) Start() (err error) { - // connect - if err := c.connect(); err != nil { - return err - } - - // register rpc services - if err := c.Register(); err != nil { - return err - } +func (c *GrpcClient) Start() { + c.once.Do(func() { + // initialize reconnect channel + c.reconnect = make(chan struct{}) - // subscribe - if err := c.subscribe(); err != nil { - return err - } + // start state monitor + go c.monitorState() - // handle stream message - if c.handleMessage { - go c.handleStreamMessage() - } + // connect + err := c.connect() + if err != nil { + c.Fatalf("failed to connect: %v", err) + return + } - return nil + // register rpc services + c.register() + }) } -func (c *Client) Stop() (err error) { +func (c *GrpcClient) Stop() (err error) { + // set stopped flag + c.stopped = true + c.stop <- struct{}{} + c.Infof("stopped") + // skip if connection is nil if c.conn == nil { return nil } - // grpc server address - address := c.address.String() - - // unsubscribe - if err := c.unsubscribe(); err != nil { - return err - } - log.Infof("grpc client unsubscribed from %s", address) - // close connection if err := c.conn.Close(); err != nil { + c.Errorf("failed to close connection: %v", err) return err } - log.Infof("grpc client disconnected from %s", address) + c.Infof("disconnected from %s", c.address) return nil } -func (c *Client) Register() (err error) { - // model delegate - c.ModelDelegateClient = grpc2.NewModelDelegateClient(c.conn) - - // model base service - c.ModelBaseServiceClient = grpc2.NewModelBaseServiceClient(c.conn) +func (c *GrpcClient) WaitForReady() { + ticker := time.NewTicker(1 * time.Second) + defer ticker.Stop() + for { + select { + case <-ticker.C: + if c.IsReady() { + c.Debugf("client is now ready") + return + } + case <-c.stop: + c.Errorf("client has stopped") + } + } +} - // node +func (c *GrpcClient) register() { c.NodeClient = grpc2.NewNodeServiceClient(c.conn) - - // task + c.ModelBaseServiceClient = grpc2.NewModelBaseServiceClient(c.conn) c.TaskClient = grpc2.NewTaskServiceClient(c.conn) - - // message - c.MessageClient = grpc2.NewMessageServiceClient(c.conn) - - // log - log.Infof("[GrpcClient] grpc client registered client services") - log.Debugf("[GrpcClient] ModelDelegateClient: %v", c.ModelDelegateClient) - log.Debugf("[GrpcClient] ModelBaseServiceClient: %v", c.ModelBaseServiceClient) - log.Debugf("[GrpcClient] NodeClient: %v", c.NodeClient) - log.Debugf("[GrpcClient] TaskClient: %v", c.TaskClient) - log.Debugf("[GrpcClient] MessageClient: %v", c.MessageClient) - - return nil -} - -func (c *Client) GetModelDelegateClient() (res grpc2.ModelDelegateClient) { - return c.ModelDelegateClient -} - -func (c *Client) GetModelBaseServiceClient() (res grpc2.ModelBaseServiceClient) { - return c.ModelBaseServiceClient -} - -func (c *Client) GetNodeClient() grpc2.NodeServiceClient { - return c.NodeClient -} - -func (c *Client) GetTaskClient() grpc2.TaskServiceClient { - return c.TaskClient + c.DependencyClient = grpc2.NewDependencyServiceClient(c.conn) + c.MetricClient = grpc2.NewMetricServiceClient(c.conn) } -func (c *Client) GetMessageClient() grpc2.MessageServiceClient { - return c.MessageClient -} - -func (c *Client) SetAddress(address interfaces.Address) { - c.address = address -} - -func (c *Client) SetTimeout(timeout time.Duration) { - c.timeout = timeout -} - -func (c *Client) SetSubscribeType(value string) { - c.subscribeType = value -} - -func (c *Client) SetHandleMessage(handleMessage bool) { - c.handleMessage = handleMessage -} - -func (c *Client) Context() (ctx context.Context, cancel context.CancelFunc) { +func (c *GrpcClient) Context() (ctx context.Context, cancel context.CancelFunc) { return context.WithTimeout(context.Background(), c.timeout) } -func (c *Client) NewRequest(d interface{}) (req *grpc2.Request) { - return &grpc2.Request{ - NodeKey: c.nodeCfgSvc.GetNodeKey(), - Data: c.getRequestData(d), - } -} - -func (c *Client) GetConfigPath() (path string) { - return c.cfgPath -} - -func (c *Client) SetConfigPath(path string) { - c.cfgPath = path -} - -func (c *Client) NewModelBaseServiceRequest(id interfaces.ModelId, params interfaces.GrpcBaseServiceParams) (req *grpc2.Request, err error) { - data, err := json.Marshal(params) - if err != nil { - return nil, trace.TraceError(err) - } - msg := &entity.GrpcBaseServiceMessage{ - ModelId: id, - Data: data, - } - return c.NewRequest(msg), nil -} - -func (c *Client) GetMessageChannel() (msgCh chan *grpc2.StreamMessage) { - return c.msgCh -} - -func (c *Client) Restart() (err error) { - if c.needRestart() { - return c.Start() - } - return nil -} - -func (c *Client) IsStarted() (res bool) { - return c.conn != nil +func (c *GrpcClient) IsReady() (res bool) { + state := c.conn.GetState() + return c.conn != nil && state == connectivity.Ready } -func (c *Client) IsClosed() (res bool) { +func (c *GrpcClient) IsClosed() (res bool) { if c.conn != nil { return c.conn.GetState() == connectivity.Shutdown } return false } -func (c *Client) Err() (err error) { - return c.err -} - -func (c *Client) GetStream() (stream grpc2.NodeService_SubscribeClient) { - return c.stream -} - -func (c *Client) connect() (err error) { - return backoff.RetryNotify(c._connect, backoff.NewExponentialBackOff(), utils.BackoffErrorNotify("grpc client connect")) -} - -func (c *Client) _connect() (err error) { - // grpc server address - address := c.address.String() - - // timeout context - ctx, cancel := context.WithTimeout(context.Background(), c.timeout) - defer cancel() - - // connection - // TODO: configure dial options - var opts []grpc.DialOption - opts = append(opts, grpc.WithInsecure()) - opts = append(opts, grpc.WithBlock()) - opts = append(opts, grpc.WithChainUnaryInterceptor(middlewares.GetAuthTokenUnaryChainInterceptor(c.nodeCfgSvc))) - opts = append(opts, grpc.WithChainStreamInterceptor(middlewares.GetAuthTokenStreamChainInterceptor(c.nodeCfgSvc))) - c.conn, err = grpc.DialContext(ctx, address, opts...) - if err != nil { - _ = trace.TraceError(err) - return errors.ErrorGrpcClientFailedToStart - } - log.Infof("[GrpcClient] grpc client connected to %s", address) +func (c *GrpcClient) monitorState() { + for { + select { + case <-c.stop: + return + default: + if c.conn == nil { + time.Sleep(time.Second) + continue + } - return nil -} + previous := c.getState() + current := c.conn.GetState() + + if previous != current { + c.setState(current) + c.Infof("state changed from %s to %s", previous, current) + + // Trigger reconnect if connection is lost or becomes idle from ready state + if current == connectivity.TransientFailure || + current == connectivity.Shutdown || + (previous == connectivity.Ready && current == connectivity.Idle) { + select { + case c.reconnect <- struct{}{}: + c.Infof("triggering reconnection due to state change to %s", current) + default: + } + } + } -func (c *Client) subscribe() (err error) { - var op func() error - switch c.subscribeType { - case constants.GrpcSubscribeTypeNode: - op = c._subscribeNode - default: - return errors.ErrorGrpcInvalidType + time.Sleep(time.Second) + } } - return backoff.RetryNotify(op, backoff.NewExponentialBackOff(), utils.BackoffErrorNotify("grpc client subscribe")) } -func (c *Client) _subscribeNode() (err error) { - req := c.NewRequest(&entity.NodeInfo{ - Key: c.nodeCfgSvc.GetNodeKey(), - IsMaster: false, - }) - c.stream, err = c.GetNodeClient().Subscribe(context.Background(), req) - if err != nil { - return trace.TraceError(err) - } - - // log - log.Infof("[GrpcClient] grpc client subscribed to remote server") - - return nil +func (c *GrpcClient) setState(state connectivity.State) { + c.stateMux.Lock() + defer c.stateMux.Unlock() + c.state = state } -func (c *Client) unsubscribe() (err error) { - req := c.NewRequest(&entity.NodeInfo{ - Key: c.nodeCfgSvc.GetNodeKey(), - IsMaster: false, - }) - if _, err = c.GetNodeClient().Unsubscribe(context.Background(), req); err != nil { - return trace.TraceError(err) - } - return nil +func (c *GrpcClient) getState() connectivity.State { + c.stateMux.RLock() + defer c.stateMux.RUnlock() + return c.state } -func (c *Client) handleStreamMessage() { - log.Infof("[GrpcClient] start handling stream message...") - for { - // resubscribe if stream is set to nil - if c.stream == nil { - if err := backoff.RetryNotify(c.subscribe, backoff.NewExponentialBackOff(), utils.BackoffErrorNotify("grpc client subscribe")); err != nil { - log.Errorf("subscribe") - return - } - } - - // receive stream message - msg, err := c.stream.Recv() - log.Debugf("[GrpcClient] received message: %v", msg) - if err != nil { - // set error - c.err = err - - // end - if err == io.EOF { - log.Infof("[GrpcClient] received EOF signal, disconnecting") - return - } - - // connection closed - if c.IsClosed() { +func (c *GrpcClient) connect() (err error) { + // Start reconnection loop + go func() { + for { + select { + case <-c.stop: return + case <-c.reconnect: + if !c.stopped { + c.Infof("attempting to reconnect to %s", c.address) + if err := c.doConnect(); err != nil { + c.Errorf("reconnection failed: %v", err) + } + } } - - // error - trace.PrintError(err) - c.stream = nil - time.Sleep(1 * time.Second) - continue } + }() - // send stream message to channel - c.msgCh <- msg - - // reset error - c.err = nil - } + return c.doConnect() } -func (c *Client) needRestart() bool { - switch c.conn.GetState() { - case connectivity.Shutdown, connectivity.TransientFailure: - return true - case connectivity.Idle, connectivity.Connecting, connectivity.Ready: - return false - default: - return false - } -} +func (c *GrpcClient) doConnect() (err error) { + op := func() error { + // connection options + opts := []grpc.DialOption{ + grpc.WithTransportCredentials(insecure.NewCredentials()), + grpc.WithChainUnaryInterceptor(middlewares.GetGrpcClientAuthTokenUnaryChainInterceptor()), + grpc.WithChainStreamInterceptor(middlewares.GetGrpcClientAuthTokenStreamChainInterceptor()), + } -func (c *Client) getRequestData(d interface{}) (data []byte) { - if d == nil { - return data - } - switch d.(type) { - case []byte: - data = d.([]byte) - default: - var err error - data, err = json.Marshal(d) + // create new client connection + c.conn, err = grpc.NewClient(c.address, opts...) if err != nil { - panic(err) + c.Errorf("failed to connect to %s: %v", c.address, err) + return err } - } - return data -} -func NewClient() (res interfaces.GrpcClient, err error) { - // client - client := &Client{ - address: entity.NewAddress(&entity.AddressOptions{ - Host: constants.DefaultGrpcClientRemoteHost, - Port: constants.DefaultGrpcClientRemotePort, - }), - timeout: 10 * time.Second, - msgCh: make(chan *grpc2.StreamMessage), - subscribeType: constants.GrpcSubscribeTypeNode, - handleMessage: true, - } + // connect + c.Infof("connecting to %s", c.address) + c.conn.Connect() - if viper.GetString("grpc.address") != "" { - client.address, err = entity.NewAddressFromString(viper.GetString("grpc.address")) - if err != nil { - return nil, trace.TraceError(err) + // wait for connection to be ready + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + ok := c.conn.WaitForStateChange(ctx, connectivity.Ready) + if !ok { + return fmt.Errorf("failed to connect to %s: timed out", c.address) } - } - // dependency injection - if err := container.GetContainer().Invoke(func(nodeCfgSvc interfaces.NodeConfigService) { - client.nodeCfgSvc = nodeCfgSvc - }); err != nil { - return nil, err - } + // success + c.Infof("connected to %s", c.address) - // init - if err := client.Init(); err != nil { - return nil, err + return nil } - - return client, nil + b := backoff.NewExponentialBackOff() + b.InitialInterval = 5 * time.Second + b.MaxElapsedTime = 10 * time.Minute + n := func(err error, duration time.Duration) { + c.Errorf("failed to connect to %s: %v, retrying in %s", c.address, err, duration) + } + return backoff.RetryNotify(op, b, n) } -var _client interfaces.GrpcClient - -func GetClient() (c interfaces.GrpcClient, err error) { - if _client != nil { - return _client, nil - } - _client, err = createClient() - if err != nil { - return nil, err +func newGrpcClient() (c *GrpcClient) { + return &GrpcClient{ + address: utils.GetGrpcAddress(), + timeout: 10 * time.Second, + stop: make(chan struct{}), + Logger: utils.NewLogger("GrpcClient"), + state: connectivity.Idle, } - return _client, nil } -func createClient() (client2 interfaces.GrpcClient, err error) { - if err := container.GetContainer().Invoke(func(client interfaces.GrpcClient) { - client2 = client - }); err != nil { - return nil, trace.TraceError(err) - } - return client2, nil +var _client *GrpcClient +var _clientOnce sync.Once + +func GetGrpcClient() *GrpcClient { + _clientOnce.Do(func() { + _client = newGrpcClient() + go _client.Start() + }) + return _client } diff --git a/core/grpc/client/client_v2.go b/core/grpc/client/client_v2.go deleted file mode 100644 index a5f32ee0b..000000000 --- a/core/grpc/client/client_v2.go +++ /dev/null @@ -1,281 +0,0 @@ -package client - -import ( - "context" - "encoding/json" - "github.com/apex/log" - "github.com/cenkalti/backoff/v4" - "github.com/crawlab-team/crawlab/core/constants" - "github.com/crawlab-team/crawlab/core/entity" - "github.com/crawlab-team/crawlab/core/errors" - "github.com/crawlab-team/crawlab/core/grpc/middlewares" - "github.com/crawlab-team/crawlab/core/interfaces" - nodeconfig "github.com/crawlab-team/crawlab/core/node/config" - "github.com/crawlab-team/crawlab/core/utils" - grpc2 "github.com/crawlab-team/crawlab/grpc" - "github.com/crawlab-team/crawlab/trace" - "github.com/spf13/viper" - "google.golang.org/grpc" - "google.golang.org/grpc/connectivity" - "google.golang.org/grpc/credentials/insecure" - "io" - "sync" - "time" -) - -type GrpcClientV2 struct { - // dependencies - nodeCfgSvc interfaces.NodeConfigService - - // settings - address interfaces.Address - timeout time.Duration - - // internals - conn *grpc.ClientConn - stream grpc2.NodeService_SubscribeClient - msgCh chan *grpc2.StreamMessage - err error - once sync.Once - - // clients - NodeClient grpc2.NodeServiceClient - TaskClient grpc2.TaskServiceClient - ModelBaseServiceV2Client grpc2.ModelBaseServiceV2Client - DependenciesClient grpc2.DependenciesServiceV2Client - MetricsClient grpc2.MetricsServiceV2Client -} - -func (c *GrpcClientV2) Start() (err error) { - c.once.Do(func() { - // connect - err = c.connect() - if err != nil { - return - } - - // register rpc services - c.Register() - - // subscribe - err = c.subscribe() - if err != nil { - return - } - - // handle stream message - go c.handleStreamMessage() - }) - - return err -} - -func (c *GrpcClientV2) Stop() (err error) { - // skip if connection is nil - if c.conn == nil { - return nil - } - - // grpc server address - address := c.address.String() - - // unsubscribe - if err := c.unsubscribe(); err != nil { - return err - } - log.Infof("grpc client unsubscribed from %s", address) - - // close connection - if err := c.conn.Close(); err != nil { - return err - } - log.Infof("grpc client disconnected from %s", address) - - return nil -} - -func (c *GrpcClientV2) Register() { - c.NodeClient = grpc2.NewNodeServiceClient(c.conn) - c.ModelBaseServiceV2Client = grpc2.NewModelBaseServiceV2Client(c.conn) - c.TaskClient = grpc2.NewTaskServiceClient(c.conn) - c.DependenciesClient = grpc2.NewDependenciesServiceV2Client(c.conn) - c.MetricsClient = grpc2.NewMetricsServiceV2Client(c.conn) -} - -func (c *GrpcClientV2) Context() (ctx context.Context, cancel context.CancelFunc) { - return context.WithTimeout(context.Background(), c.timeout) -} - -func (c *GrpcClientV2) NewRequest(d interface{}) (req *grpc2.Request) { - return &grpc2.Request{ - NodeKey: c.nodeCfgSvc.GetNodeKey(), - Data: c.getRequestData(d), - } -} - -func (c *GrpcClientV2) IsStarted() (res bool) { - return c.conn != nil -} - -func (c *GrpcClientV2) IsClosed() (res bool) { - if c.conn != nil { - return c.conn.GetState() == connectivity.Shutdown - } - return false -} - -func (c *GrpcClientV2) GetMessageChannel() (msgCh chan *grpc2.StreamMessage) { - return c.msgCh -} - -func (c *GrpcClientV2) getRequestData(d interface{}) (data []byte) { - if d == nil { - return data - } - switch d.(type) { - case []byte: - data = d.([]byte) - default: - var err error - data, err = json.Marshal(d) - if err != nil { - panic(err) - } - } - return data -} - -func (c *GrpcClientV2) unsubscribe() (err error) { - req := c.NewRequest(&entity.NodeInfo{ - Key: c.nodeCfgSvc.GetNodeKey(), - IsMaster: false, - }) - if _, err = c.NodeClient.Unsubscribe(context.Background(), req); err != nil { - return trace.TraceError(err) - } - return nil -} - -func (c *GrpcClientV2) connect() (err error) { - op := func() error { - // grpc server address - address := c.address.String() - - // timeout context - ctx, cancel := context.WithTimeout(context.Background(), c.timeout) - defer cancel() - - // connection - // TODO: configure dial options - var opts []grpc.DialOption - opts = append(opts, grpc.WithTransportCredentials(insecure.NewCredentials())) - opts = append(opts, grpc.WithBlock()) - opts = append(opts, grpc.WithChainUnaryInterceptor(middlewares.GetAuthTokenUnaryChainInterceptor(c.nodeCfgSvc))) - opts = append(opts, grpc.WithChainStreamInterceptor(middlewares.GetAuthTokenStreamChainInterceptor(c.nodeCfgSvc))) - c.conn, err = grpc.DialContext(ctx, address, opts...) - if err != nil { - _ = trace.TraceError(err) - return errors.ErrorGrpcClientFailedToStart - } - log.Infof("[GrpcClient] grpc client connected to %s", address) - - return nil - } - return backoff.RetryNotify(op, backoff.NewExponentialBackOff(), utils.BackoffErrorNotify("grpc client connect")) -} - -func (c *GrpcClientV2) subscribe() (err error) { - op := func() error { - req := c.NewRequest(&entity.NodeInfo{ - Key: c.nodeCfgSvc.GetNodeKey(), - IsMaster: false, - }) - c.stream, err = c.NodeClient.Subscribe(context.Background(), req) - if err != nil { - return trace.TraceError(err) - } - - // log - log.Infof("[GrpcClient] grpc client subscribed to remote server") - - return nil - } - return backoff.RetryNotify(op, backoff.NewExponentialBackOff(), utils.BackoffErrorNotify("grpc client subscribe")) -} - -func (c *GrpcClientV2) handleStreamMessage() { - log.Infof("[GrpcClient] start handling stream message...") - for { - // resubscribe if stream is set to nil - if c.stream == nil { - if err := backoff.RetryNotify(c.subscribe, backoff.NewExponentialBackOff(), utils.BackoffErrorNotify("grpc client subscribe")); err != nil { - log.Errorf("subscribe") - return - } - } - - // receive stream message - msg, err := c.stream.Recv() - log.Debugf("[GrpcClient] received message: %v", msg) - if err != nil { - // set error - c.err = err - - // end - if err == io.EOF { - log.Infof("[GrpcClient] received EOF signal, disconnecting") - return - } - - // connection closed - if c.IsClosed() { - return - } - - // error - trace.PrintError(err) - c.stream = nil - time.Sleep(1 * time.Second) - continue - } - - // send stream message to channel - c.msgCh <- msg - - // reset error - c.err = nil - } -} - -func newGrpcClientV2() (c *GrpcClientV2) { - client := &GrpcClientV2{ - address: entity.NewAddress(&entity.AddressOptions{ - Host: constants.DefaultGrpcClientRemoteHost, - Port: constants.DefaultGrpcClientRemotePort, - }), - timeout: 10 * time.Second, - msgCh: make(chan *grpc2.StreamMessage), - } - client.nodeCfgSvc = nodeconfig.GetNodeConfigService() - - if viper.GetString("grpc.address") != "" { - address, err := entity.NewAddressFromString(viper.GetString("grpc.address")) - if err != nil { - log.Errorf("failed to parse grpc address: %s", viper.GetString("grpc.address")) - panic(err) - } - client.address = address - } - - return client -} - -var clientV2 *GrpcClientV2 -var clientV2Once sync.Once - -func GetGrpcClientV2() *GrpcClientV2 { - clientV2Once.Do(func() { - clientV2 = newGrpcClientV2() - }) - return clientV2 -} diff --git a/core/grpc/client/options.go b/core/grpc/client/options.go deleted file mode 100644 index 8f69e3a98..000000000 --- a/core/grpc/client/options.go +++ /dev/null @@ -1,51 +0,0 @@ -package client - -import ( - "github.com/crawlab-team/crawlab/core/interfaces" - "time" -) - -type Option func(client interfaces.GrpcClient) - -func WithConfigPath(path string) Option { - return func(c interfaces.GrpcClient) { - c.SetConfigPath(path) - } -} - -func WithAddress(address interfaces.Address) Option { - return func(c interfaces.GrpcClient) { - c.SetAddress(address) - } -} - -func WithTimeout(timeout time.Duration) Option { - return func(c interfaces.GrpcClient) { - } -} - -func WithSubscribeType(subscribeType string) Option { - return func(c interfaces.GrpcClient) { - c.SetSubscribeType(subscribeType) - } -} - -func WithHandleMessage(handleMessage bool) Option { - return func(c interfaces.GrpcClient) { - c.SetHandleMessage(handleMessage) - } -} - -type PoolOption func(p interfaces.GrpcClientPool) - -func WithPoolConfigPath(path string) PoolOption { - return func(c interfaces.GrpcClientPool) { - c.SetConfigPath(path) - } -} - -func WithPoolSize(size int) PoolOption { - return func(c interfaces.GrpcClientPool) { - c.SetSize(size) - } -} diff --git a/core/grpc/client/pool.go b/core/grpc/client/pool.go deleted file mode 100644 index 6559610ce..000000000 --- a/core/grpc/client/pool.go +++ /dev/null @@ -1,88 +0,0 @@ -package client - -import ( - "github.com/crawlab-team/crawlab/core/errors" - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/trace" - "github.com/emirpasic/gods/lists/arraylist" - "math/rand" -) - -type Pool struct { - // settings - size int - cfgPath string - - // internals - clients *arraylist.List -} - -func (p *Pool) GetConfigPath() (path string) { - return p.cfgPath -} - -func (p *Pool) SetConfigPath(path string) { - p.cfgPath = path -} - -func (p *Pool) Init() (err error) { - for i := 0; i < p.size; i++ { - if err := p.NewClient(); err != nil { - return err - } - } - return nil -} - -func (p *Pool) NewClient() (err error) { - c, err := NewClient() - if err != nil { - return trace.TraceError(err) - } - if err := c.Start(); err != nil { - return err - } - p.clients.Add(c) - return nil -} - -func (p *Pool) GetClient() (c interfaces.GrpcClient, err error) { - idx := p.getRandomIndex() - res, ok := p.clients.Get(idx) - if !ok { - return nil, trace.TraceError(errors.ErrorGrpcClientNotExists) - } - c, ok = res.(interfaces.GrpcClient) - if !ok { - return nil, trace.TraceError(errors.ErrorGrpcInvalidType) - } - return c, nil -} - -func (p *Pool) SetSize(size int) { - p.size = size -} - -func (p *Pool) getRandomIndex() (idx int) { - return rand.Intn(p.clients.Size()) -} - -func NewPool(opts ...PoolOption) (p interfaces.GrpcClientPool, err error) { - // pool - p = &Pool{ - size: 1, - clients: arraylist.New(), - } - - // apply options - for _, opt := range opts { - opt(p) - } - - // initialize - if err := p.Init(); err != nil { - return nil, err - } - - return p, nil -} diff --git a/core/grpc/client/utils_proto.go b/core/grpc/client/utils_proto.go deleted file mode 100644 index e47592330..000000000 --- a/core/grpc/client/utils_proto.go +++ /dev/null @@ -1,5 +0,0 @@ -package client - -import grpc2 "github.com/crawlab-team/crawlab/grpc" - -var EmptyRequest = &grpc2.Request{} diff --git a/core/grpc/middlewares/auth_token.go b/core/grpc/middlewares/auth_token.go index 7135ec34d..d93db1c9c 100644 --- a/core/grpc/middlewares/auth_token.go +++ b/core/grpc/middlewares/auth_token.go @@ -2,15 +2,16 @@ package middlewares import ( "context" - "github.com/crawlab-team/crawlab/core/constants" "github.com/crawlab-team/crawlab/core/errors" - "github.com/crawlab-team/crawlab/core/interfaces" + "github.com/crawlab-team/crawlab/core/utils" "github.com/grpc-ecosystem/go-grpc-middleware/auth" "google.golang.org/grpc" "google.golang.org/grpc/metadata" ) -func GetAuthTokenFunc(nodeCfgSvc interfaces.NodeConfigService) grpc_auth.AuthFunc { +const GrpcHeaderAuthorization = "authorization" + +func GetGrpcServerAuthTokenFunc() grpc_auth.AuthFunc { return func(ctx context.Context) (ctx2 context.Context, err error) { // authentication (token verification) md, ok := metadata.FromIncomingContext(ctx) @@ -19,7 +20,7 @@ func GetAuthTokenFunc(nodeCfgSvc interfaces.NodeConfigService) grpc_auth.AuthFun } // auth key from incoming context - res, ok := md[constants.GrpcHeaderAuthorization] + res, ok := md[GrpcHeaderAuthorization] if !ok { return ctx, errors.ErrorGrpcUnauthorized } @@ -29,7 +30,7 @@ func GetAuthTokenFunc(nodeCfgSvc interfaces.NodeConfigService) grpc_auth.AuthFun authKey := res[0] // validate - svrAuthKey := nodeCfgSvc.GetAuthKey() + svrAuthKey := utils.GetAuthKey() if authKey != svrAuthKey { return ctx, errors.ErrorGrpcUnauthorized } @@ -38,26 +39,20 @@ func GetAuthTokenFunc(nodeCfgSvc interfaces.NodeConfigService) grpc_auth.AuthFun } } -func GetAuthTokenUnaryChainInterceptor(nodeCfgSvc interfaces.NodeConfigService) grpc.UnaryClientInterceptor { +func GetGrpcClientAuthTokenUnaryChainInterceptor() grpc.UnaryClientInterceptor { // set auth key - md := metadata.Pairs(constants.GrpcHeaderAuthorization, nodeCfgSvc.GetAuthKey()) - //header := metadata.MD{} - //header[constants.GrpcHeaderAuthorization] = []string{nodeCfgSvc.GetAuthKey()} + md := metadata.Pairs(GrpcHeaderAuthorization, utils.GetAuthKey()) return func(ctx context.Context, method string, req, reply interface{}, cc *grpc.ClientConn, invoker grpc.UnaryInvoker, opts ...grpc.CallOption) error { ctx = metadata.NewOutgoingContext(context.Background(), md) - //opts = append(opts, grpc.Header(&header)) return invoker(ctx, method, req, reply, cc, opts...) } } -func GetAuthTokenStreamChainInterceptor(nodeCfgSvc interfaces.NodeConfigService) grpc.StreamClientInterceptor { +func GetGrpcClientAuthTokenStreamChainInterceptor() grpc.StreamClientInterceptor { // set auth key - md := metadata.Pairs(constants.GrpcHeaderAuthorization, nodeCfgSvc.GetAuthKey()) - //header := metadata.MD{} - //header[constants.GrpcHeaderAuthorization] = []string{nodeCfgSvc.GetAuthKey()} + md := metadata.Pairs(GrpcHeaderAuthorization, utils.GetAuthKey()) return func(ctx context.Context, desc *grpc.StreamDesc, cc *grpc.ClientConn, method string, streamer grpc.Streamer, opts ...grpc.CallOption) (grpc.ClientStream, error) { ctx = metadata.NewOutgoingContext(context.Background(), md) - //opts = append(opts, grpc.Header(&header)) s, err := streamer(ctx, desc, cc, method, opts...) if err != nil { return nil, err diff --git a/core/grpc/payload/model_service_v2_payload.go b/core/grpc/payload/model_service_v2_payload.go deleted file mode 100644 index 926386cfa..000000000 --- a/core/grpc/payload/model_service_v2_payload.go +++ /dev/null @@ -1,17 +0,0 @@ -package payload - -import ( - "github.com/crawlab-team/crawlab/db/mongo" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -type ModelServiceV2Payload struct { - Type string `json:"type,omitempty"` - Id primitive.ObjectID `json:"_id,omitempty"` - Query bson.M `json:"query,omitempty"` - FindOptions *mongo.FindOptions `json:"find_options,omitempty"` - Model any `json:"model,omitempty"` - Update bson.M `json:"update,omitempty"` - Models []any `json:"models,omitempty"` -} diff --git a/core/grpc/server/dependencies_server_v2.go b/core/grpc/server/dependencies_server_v2.go deleted file mode 100644 index f7ede5c05..000000000 --- a/core/grpc/server/dependencies_server_v2.go +++ /dev/null @@ -1,180 +0,0 @@ -package server - -import ( - "context" - "errors" - "github.com/apex/log" - "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/core/models/service" - mongo2 "github.com/crawlab-team/crawlab/db/mongo" - "github.com/crawlab-team/crawlab/grpc" - "github.com/crawlab-team/crawlab/trace" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" - "go.mongodb.org/mongo-driver/mongo" - "io" - "sync" - "time" -) - -type DependenciesServerV2 struct { - grpc.UnimplementedDependenciesServiceV2Server - mu *sync.Mutex - streams map[string]*grpc.DependenciesServiceV2_ConnectServer -} - -func (svr DependenciesServerV2) Connect(req *grpc.DependenciesServiceV2ConnectRequest, stream grpc.DependenciesServiceV2_ConnectServer) (err error) { - svr.mu.Lock() - svr.streams[req.NodeKey] = &stream - svr.mu.Unlock() - log.Info("[DependenciesServerV2] connected: " + req.NodeKey) - - // Keep this scope alive because once this scope exits - the stream is closed - for { - select { - case <-stream.Context().Done(): - log.Info("[DependenciesServerV2] disconnected: " + req.NodeKey) - return nil - } - } -} - -func (svr DependenciesServerV2) Sync(ctx context.Context, request *grpc.DependenciesServiceV2SyncRequest) (response *grpc.Response, err error) { - n, err := service.NewModelServiceV2[models.NodeV2]().GetOne(bson.M{"key": request.NodeKey}, nil) - if err != nil { - return nil, err - } - - depsDb, err := service.NewModelServiceV2[models.DependencyV2]().GetMany(bson.M{ - "node_id": n.Id, - "type": request.Lang, - }, nil) - if err != nil { - if !errors.Is(err, mongo.ErrNoDocuments) { - log.Errorf("[DependenciesServiceV2] get dependencies from db error: %v", err) - return nil, err - } - } - - depsDbMap := make(map[string]*models.DependencyV2) - for _, d := range depsDb { - depsDbMap[d.Name] = &d - } - - var depsToInsert []models.DependencyV2 - depsMap := make(map[string]*models.DependencyV2) - for _, dep := range request.Dependencies { - d := models.DependencyV2{ - Name: dep.Name, - NodeId: n.Id, - Type: request.Lang, - Version: dep.Version, - } - d.SetCreatedAt(time.Now()) - - depsMap[d.Name] = &d - - _, ok := depsDbMap[d.Name] - if !ok { - depsToInsert = append(depsToInsert, d) - } - } - - var depIdsToDelete []primitive.ObjectID - for _, d := range depsDb { - _, ok := depsMap[d.Name] - if !ok { - depIdsToDelete = append(depIdsToDelete, d.Id) - } - } - - err = mongo2.RunTransaction(func(ctx mongo.SessionContext) (err error) { - if len(depIdsToDelete) > 0 { - err = service.NewModelServiceV2[models.DependencyV2]().DeleteMany(bson.M{ - "_id": bson.M{"$in": depIdsToDelete}, - }) - if err != nil { - log.Errorf("[DependenciesServerV2] delete dependencies in db error: %v", err) - trace.PrintError(err) - return err - } - } - - if len(depsToInsert) > 0 { - _, err = service.NewModelServiceV2[models.DependencyV2]().InsertMany(depsToInsert) - if err != nil { - log.Errorf("[DependenciesServerV2] insert dependencies in db error: %v", err) - trace.PrintError(err) - return err - } - } - - return nil - }) - - return nil, err -} - -func (svr DependenciesServerV2) UpdateTaskLog(stream grpc.DependenciesServiceV2_UpdateTaskLogServer) (err error) { - var t *models.DependencyTaskV2 - for { - req, err := stream.Recv() - if err == io.EOF { - // all messages have been received - return stream.SendAndClose(&grpc.Response{Message: "update task log finished"}) - } - if err != nil { - return err - } - taskId, err := primitive.ObjectIDFromHex(req.TaskId) - if err != nil { - return err - } - if t == nil { - t, err = service.NewModelServiceV2[models.DependencyTaskV2]().GetById(taskId) - if err != nil { - return err - } - } - var logs []models.DependencyLogV2 - for _, line := range req.LogLines { - l := models.DependencyLogV2{ - TaskId: taskId, - Content: line, - } - l.SetCreated(t.CreatedBy) - logs = append(logs, l) - } - _, err = service.NewModelServiceV2[models.DependencyLogV2]().InsertMany(logs) - if err != nil { - return err - } - } -} - -func (svr DependenciesServerV2) GetStream(key string) (stream *grpc.DependenciesServiceV2_ConnectServer, err error) { - svr.mu.Lock() - defer svr.mu.Unlock() - stream, ok := svr.streams[key] - if !ok { - return nil, errors.New("stream not found") - } - return stream, nil -} - -func NewDependenciesServerV2() *DependenciesServerV2 { - return &DependenciesServerV2{ - mu: new(sync.Mutex), - streams: make(map[string]*grpc.DependenciesServiceV2_ConnectServer), - } -} - -var depSvc *DependenciesServerV2 - -func GetDependenciesServerV2() *DependenciesServerV2 { - if depSvc != nil { - return depSvc - } - depSvc = NewDependenciesServerV2() - return depSvc -} diff --git a/core/grpc/server/dependency_service_server.go b/core/grpc/server/dependency_service_server.go new file mode 100644 index 000000000..243eedeb2 --- /dev/null +++ b/core/grpc/server/dependency_service_server.go @@ -0,0 +1,294 @@ +package server + +import ( + "context" + "errors" + "fmt" + "github.com/cenkalti/backoff/v4" + "github.com/crawlab-team/crawlab/core/interfaces" + mongo2 "github.com/crawlab-team/crawlab/core/mongo" + "github.com/crawlab-team/crawlab/core/utils" + "io" + "sync" + "time" + + "github.com/crawlab-team/crawlab/core/constants" + "github.com/crawlab-team/crawlab/core/models/models" + "github.com/crawlab-team/crawlab/core/models/service" + "github.com/crawlab-team/crawlab/grpc" + "go.mongodb.org/mongo-driver/bson" + "go.mongodb.org/mongo-driver/bson/primitive" + "go.mongodb.org/mongo-driver/mongo" +) + +type DependencyServiceServer struct { + grpc.UnimplementedDependencyServiceServer + mu *sync.Mutex + streams map[string]*grpc.DependencyService_ConnectServer + interfaces.Logger +} + +func (svr DependencyServiceServer) Connect(req *grpc.DependencyServiceConnectRequest, stream grpc.DependencyService_ConnectServer) (err error) { + svr.mu.Lock() + svr.streams[req.NodeKey] = &stream + svr.mu.Unlock() + svr.Info("[DependencyServiceServer] connected: " + req.NodeKey) + + // Keep this scope alive because once this scope exits - the stream is closed + <-stream.Context().Done() + svr.Info("[DependencyServiceServer] disconnected: " + req.NodeKey) + + return nil +} + +// Sync handles synchronization of dependencies between nodes and the database +func (svr DependencyServiceServer) Sync(_ context.Context, request *grpc.DependencyServiceSyncRequest) (response *grpc.Response, err error) { + // Get node by node key + n, err := service.NewModelService[models.Node]().GetOne(bson.M{"key": request.NodeKey}, nil) + if err != nil { + return nil, err + } + + // Get existing dependencies from database for this node and language + depsDb, err := service.NewModelService[models.Dependency]().GetMany(bson.M{ + "node_id": n.Id, + "type": request.Lang, + }, nil) + if err != nil { + if !errors.Is(err, mongo.ErrNoDocuments) { + svr.Errorf("[DependencyService] get dependencies from db error: %v", err) + return nil, err + } + } + + // Create map of existing dependencies for faster lookup + depsDbMap := make(map[string]*models.Dependency) + for _, d := range depsDb { + depsDbMap[d.Name] = &d + } + + // Process new dependencies from request + var depsToInsert []models.Dependency + var depsToUpdate []models.Dependency + depsMap := make(map[string]*models.Dependency) + for _, dep := range request.Dependencies { + // Create dependency model + d := models.Dependency{ + Name: dep.Name, + NodeId: n.Id, + Type: request.Lang, + Version: dep.Version, + Status: constants.DependencyStatusInstalled, + } + d.SetCreatedAt(time.Now()) + d.SetUpdatedAt(time.Now()) + + // Add to map + depsMap[d.Name] = &d + + // Check if dependency exists in DB + existingDep, ok := depsDbMap[d.Name] + if !ok { + // If dependency doesn't exist, add to insert list + depsToInsert = append(depsToInsert, d) + } else if existingDep.Version != d.Version || existingDep.Status != constants.DependencyStatusInstalled { + // If dependency exists but version is different or status is not installed, add to update list + d.Id = existingDep.Id + d.SetUpdatedAt(time.Now()) + depsToUpdate = append(depsToUpdate, d) + } + } + + // Find dependencies to delete (exist in DB but not in request) + var depIdsToDelete []primitive.ObjectID + for _, d := range depsDb { + _, ok := depsMap[d.Name] + if !ok { + // Only delete dependencies that are uninstalled/error/abnormal and older than 7 days + if d.Status != constants.DependencyStatusInstalled && time.Since(d.UpdatedAt) > 7*24*time.Hour { + depIdsToDelete = append(depIdsToDelete, d.Id) + } + } + } + + // Run database operations in a transaction + err = mongo2.RunTransaction(func(ctx mongo.SessionContext) (err error) { + // Delete old dependencies if any + if len(depIdsToDelete) > 0 { + err = service.NewModelService[models.Dependency]().DeleteMany(bson.M{ + "_id": bson.M{"$in": depIdsToDelete}, + }) + if err != nil { + svr.Errorf("[DependencyServiceServer] delete dependencies in db error: %v", err) + return err + } + } + + // Insert new dependencies if any + if len(depsToInsert) > 0 { + _, err = service.NewModelService[models.Dependency]().InsertMany(depsToInsert) + if err != nil { + svr.Errorf("[DependencyServiceServer] insert dependencies in db error: %v", err) + return err + } + } + + // Update dependencies with different versions + for _, d := range depsToUpdate { + err = service.NewModelService[models.Dependency]().ReplaceById(d.Id, d) + if err != nil { + svr.Errorf("[DependencyServiceServer] update dependency in db error: %v", err) + return err + } + } + + return nil + }) + + return nil, err +} + +func (svr DependencyServiceServer) UpdateLogs(stream grpc.DependencyService_UpdateLogsServer) (err error) { + for { + // receive message + req, err := stream.Recv() + if err == io.EOF { + // all messages have been received + return stream.SendAndClose(&grpc.Response{Message: "update task log finished"}) + } + if err != nil { + return err + } + + // get id + id, err := primitive.ObjectIDFromHex(req.TargetId) + if err != nil { + svr.Errorf("[DependencyServiceServer] convert dependency id error: %v", err) + return err + } + + // insert dependency logs + var depLogs []models.DependencyLog + for _, line := range req.Logs { + depLog := models.DependencyLog{ + TargetId: id, + Content: line, + } + depLogs = append(depLogs, depLog) + } + _, err = service.NewModelService[models.DependencyLog]().InsertMany(depLogs) + if err != nil { + svr.Errorf("[DependencyServiceServer] insert dependency logs error: %v", err) + return err + } + } +} + +func (svr DependencyServiceServer) SyncConfigSetup(_ context.Context, request *grpc.DependencyServiceSyncConfigSetupRequest) (response *grpc.Response, err error) { + // Get node by node key + n, err := service.NewModelService[models.Node]().GetOne(bson.M{"key": request.NodeKey}, nil) + if err != nil { + return nil, err + } + + // Get config + cfg, err := service.NewModelService[models.DependencyConfig]().GetOne(bson.M{"key": request.Lang}, nil) + if err != nil { + return nil, err + } + + // Get config setup for the node + cs, err := service.NewModelService[models.DependencyConfigSetup]().GetOne(bson.M{ + "node_id": n.Id, + "dependency_config_id": cfg.Id, + }, nil) + if err != nil { + if !errors.Is(err, mongo.ErrNoDocuments) { + svr.Errorf("[DependencyService] get dependency config setup from db error: %v", err) + return nil, err + } + } + + // drivers + var drivers []models.DependencyDriver + if request.Drivers != nil && len(request.Drivers) > 0 { + for _, d := range request.Drivers { + drivers = append(drivers, models.DependencyDriver{ + Name: d.Name, + Version: d.Version, + }) + } + } + + if cs == nil { + // Create new config setup + cs = &models.DependencyConfigSetup{ + NodeId: n.Id, + DependencyConfigId: cfg.Id, + Status: request.Status, + Error: request.Error, + Version: request.Version, + Drivers: drivers, + } + _, err = service.NewModelService[models.DependencyConfigSetup]().InsertOne(*cs) + if err != nil { + svr.Errorf("[DependencyService] insert dependency config setup error: %v", err) + return nil, err + } + } else { + // Update existing config setup + if cs.Status == constants.DependencyStatusUninstalled || request.Status == constants.DependencyStatusInstalled { + cs.Status = request.Status + } + cs.Error = request.Error + cs.Version = request.Version + cs.Drivers = drivers + err = service.NewModelService[models.DependencyConfigSetup]().ReplaceById(cs.Id, *cs) + if err != nil { + svr.Errorf("[DependencyService] update dependency config setup error: %v", err) + return nil, err + } + } + return nil, nil +} + +func (svr DependencyServiceServer) GetStream(nodeKey string) (stream *grpc.DependencyService_ConnectServer, err error) { + b := backoff.WithMaxRetries(backoff.NewConstantBackOff(1*time.Second), 30) + err = backoff.Retry(func() error { + stream, err = svr.getStream(nodeKey) + return err + }, b) + if err != nil { + svr.Errorf("get stream error: %v", err) + return nil, err + } + return stream, nil +} + +func (svr DependencyServiceServer) getStream(nodeKey string) (stream *grpc.DependencyService_ConnectServer, err error) { + svr.mu.Lock() + defer svr.mu.Unlock() + stream, ok := svr.streams[nodeKey] + if !ok { + return nil, fmt.Errorf("stream not found for node: %s", nodeKey) + } + return stream, nil +} + +func newDependencyServer() *DependencyServiceServer { + return &DependencyServiceServer{ + mu: new(sync.Mutex), + streams: make(map[string]*grpc.DependencyService_ConnectServer), + Logger: utils.NewLogger("DependencyServiceServer"), + } +} + +var depSvc *DependencyServiceServer +var depSvcOnce sync.Once + +func GetDependencyServer() *DependencyServiceServer { + depSvcOnce.Do(func() { + depSvc = newDependencyServer() + }) + return depSvc +} diff --git a/core/grpc/server/message_server.go b/core/grpc/server/message_server.go deleted file mode 100644 index ea29df090..000000000 --- a/core/grpc/server/message_server.go +++ /dev/null @@ -1,93 +0,0 @@ -package server - -import ( - "github.com/apex/log" - "github.com/crawlab-team/crawlab/core/container" - "github.com/crawlab-team/crawlab/core/entity" - "github.com/crawlab-team/crawlab/core/errors" - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/models/service" - grpc "github.com/crawlab-team/crawlab/grpc" - "github.com/crawlab-team/crawlab/trace" - "io" -) - -type MessageServer struct { - grpc.UnimplementedMessageServiceServer - - // dependencies - modelSvc service.ModelService - cfgSvc interfaces.NodeConfigService - - // internals - server interfaces.GrpcServer -} - -func (svr MessageServer) Connect(stream grpc.MessageService_ConnectServer) (err error) { - finished := make(chan bool) - for { - msg, err := stream.Recv() - nodeKey := "unknown node key" - if msg != nil { - nodeKey = msg.NodeKey - } - if err == io.EOF { - log.Infof("[MessageServer] received signal EOF from node[%s], now quit", nodeKey) - return nil - } - if err != nil { - log.Errorf("[MessageServer] receiving message error from node[%s]: %v", nodeKey, err) - return err - } - switch msg.Code { - case grpc.StreamMessageCode_CONNECT: - log.Infof("[MessageServer] received connect request from node[%s], key: %s", nodeKey, msg.Key) - svr.server.SetSubscribe(msg.Key, &entity.GrpcSubscribe{ - Stream: stream, - Finished: finished, - }) - case grpc.StreamMessageCode_DISCONNECT: - log.Infof("[MessageServer] received disconnect request from node[%s], key: %s", nodeKey, msg.Key) - svr.server.DeleteSubscribe(msg.Key) - return nil - case grpc.StreamMessageCode_SEND: - log.Debugf("[MessageServer] received send request from node[%s] to %s", nodeKey, msg.To) - sub, err := svr.server.GetSubscribe(msg.To) - if err != nil { - return err - } - svr.redirectMessage(sub, msg) - } - } -} - -func (svr MessageServer) redirectMessage(sub interfaces.GrpcSubscribe, msg *grpc.StreamMessage) { - stream := sub.GetStream() - if stream == nil { - trace.PrintError(errors.ErrorGrpcStreamNotFound) - return - } - log.Debugf("[MessageServer] redirect message: %v", msg) - if err := stream.Send(msg); err != nil { - trace.PrintError(err) - return - } -} - -func NewMessageServer() (res *MessageServer, err error) { - // message server - svr := &MessageServer{} - - // dependency injection - if err := container.GetContainer().Invoke(func( - modelSvc service.ModelService, - cfgSvc interfaces.NodeConfigService, - ) { - svr.modelSvc = modelSvc - svr.cfgSvc = cfgSvc - }); err != nil { - return nil, err - } - - return svr, nil -} diff --git a/core/grpc/server/metrics_server_v2.go b/core/grpc/server/metric_service_server.go similarity index 51% rename from core/grpc/server/metrics_server_v2.go rename to core/grpc/server/metric_service_server.go index fc51ad01a..2288f614c 100644 --- a/core/grpc/server/metrics_server_v2.go +++ b/core/grpc/server/metric_service_server.go @@ -2,27 +2,29 @@ package server import ( "context" - "github.com/apex/log" + "github.com/crawlab-team/crawlab/core/interfaces" "github.com/crawlab-team/crawlab/core/models/models" "github.com/crawlab-team/crawlab/core/models/service" + "github.com/crawlab-team/crawlab/core/utils" "github.com/crawlab-team/crawlab/grpc" "go.mongodb.org/mongo-driver/bson" "sync" "time" ) -type MetricsServerV2 struct { - grpc.UnimplementedMetricsServiceV2Server +type MetricServiceServer struct { + grpc.UnimplementedMetricServiceServer + interfaces.Logger } -func (svr MetricsServerV2) Send(_ context.Context, req *grpc.MetricsServiceV2SendRequest) (res *grpc.Response, err error) { - log.Info("[MetricsServerV2] received metric from node: " + req.NodeKey) - n, err := service.NewModelServiceV2[models.NodeV2]().GetOne(bson.M{"key": req.NodeKey}, nil) +func (svr MetricServiceServer) Send(_ context.Context, req *grpc.MetricServiceSendRequest) (res *grpc.Response, err error) { + svr.Debugf("received metric from node: " + req.NodeKey) + n, err := service.NewModelService[models.Node]().GetOne(bson.M{"key": req.NodeKey}, nil) if err != nil { - log.Errorf("[MetricsServerV2] error getting node: %v", err) + svr.Errorf("failed to get node: %v", err) return HandleError(err) } - metric := models.MetricV2{ + metric := models.Metric{ Type: req.Type, NodeId: n.Id, CpuUsagePercent: req.CpuUsagePercent, @@ -40,27 +42,26 @@ func (svr MetricsServerV2) Send(_ context.Context, req *grpc.MetricsServiceV2Sen NetworkBytesRecvRate: req.NetworkBytesRecvRate, } metric.CreatedAt = time.Unix(req.Timestamp, 0) - _, err = service.NewModelServiceV2[models.MetricV2]().InsertOne(metric) + _, err = service.NewModelService[models.Metric]().InsertOne(metric) if err != nil { - log.Errorf("[MetricsServerV2] error inserting metric: %v", err) + svr.Errorf("failed to insert metric: %v", err) return HandleError(err) } return HandleSuccess() } -func newMetricsServerV2() *MetricsServerV2 { - return &MetricsServerV2{} +func newMetricsServer() *MetricServiceServer { + return &MetricServiceServer{ + Logger: utils.NewLogger("MetricServiceServer"), + } } -var metricsServerV2 *MetricsServerV2 -var metricsServerV2Once = &sync.Once{} +var metricsServer *MetricServiceServer +var metricsServerOnce = &sync.Once{} -func GetMetricsServerV2() *MetricsServerV2 { - if metricsServerV2 != nil { - return metricsServerV2 - } - metricsServerV2Once.Do(func() { - metricsServerV2 = newMetricsServerV2() +func GetMetricsServer() *MetricServiceServer { + metricsServerOnce.Do(func() { + metricsServer = newMetricsServer() }) - return metricsServerV2 + return metricsServer } diff --git a/core/grpc/server/model_base_service_binder.go b/core/grpc/server/model_base_service_binder.go deleted file mode 100644 index c9f7331e9..000000000 --- a/core/grpc/server/model_base_service_binder.go +++ /dev/null @@ -1,59 +0,0 @@ -package server - -import ( - "encoding/json" - "github.com/crawlab-team/crawlab/core/entity" - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/grpc" - "github.com/crawlab-team/crawlab/trace" -) - -func NewModelBaseServiceBinder(req *grpc.Request) (b *ModelBaseServiceBinder) { - return &ModelBaseServiceBinder{ - req: req, - msg: &entity.GrpcBaseServiceMessage{}, - } -} - -type ModelBaseServiceBinder struct { - req *grpc.Request - msg interfaces.GrpcModelBaseServiceMessage -} - -func (b *ModelBaseServiceBinder) Bind() (res *entity.GrpcBaseServiceParams, err error) { - if err := b.bindBaseServiceMessage(); err != nil { - return nil, err - } - params := &entity.GrpcBaseServiceParams{} - return b.process(params) -} - -func (b *ModelBaseServiceBinder) MustBind() (res interface{}) { - res, err := b.Bind() - if err != nil { - panic(err) - } - return res -} - -func (b *ModelBaseServiceBinder) BindWithBaseServiceMessage() (params *entity.GrpcBaseServiceParams, msg interfaces.GrpcModelBaseServiceMessage, err error) { - if err := json.Unmarshal(b.req.Data, b.msg); err != nil { - return nil, nil, err - } - params, err = b.Bind() - if err != nil { - return nil, nil, err - } - return params, b.msg, nil -} - -func (b *ModelBaseServiceBinder) process(params *entity.GrpcBaseServiceParams) (res *entity.GrpcBaseServiceParams, err error) { - if err := json.Unmarshal(b.msg.GetData(), params); err != nil { - return nil, trace.TraceError(err) - } - return params, nil -} - -func (b *ModelBaseServiceBinder) bindBaseServiceMessage() (err error) { - return json.Unmarshal(b.req.Data, b.msg) -} diff --git a/core/grpc/server/model_base_service_server.go b/core/grpc/server/model_base_service_server.go index 661c9505a..2f9d0657b 100644 --- a/core/grpc/server/model_base_service_server.go +++ b/core/grpc/server/model_base_service_server.go @@ -3,137 +3,335 @@ package server import ( "context" "encoding/json" - "github.com/crawlab-team/crawlab/core/container" - "github.com/crawlab-team/crawlab/core/entity" - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/models/service" + "github.com/crawlab-team/crawlab/core/mongo" "github.com/crawlab-team/crawlab/core/utils" - grpc "github.com/crawlab-team/crawlab/grpc" - "github.com/crawlab-team/crawlab/trace" + "go.mongodb.org/mongo-driver/mongo/options" + "reflect" + "sync" + + "github.com/crawlab-team/crawlab/core/models/models" + "github.com/crawlab-team/crawlab/core/models/service" + "github.com/crawlab-team/crawlab/grpc" + "go.mongodb.org/mongo-driver/bson" + "go.mongodb.org/mongo-driver/bson/primitive" +) + +var ( + typeNameColNameMap = make(map[string]string) + typeOneNameModelMap = make(map[string]any) + typeOneInstances = models.GetModelInstances() ) +func init() { + for _, v := range typeOneInstances { + t := reflect.TypeOf(v) + typeName := t.Name() + colName := service.GetCollectionNameByInstance(v) + typeNameColNameMap[typeName] = colName + typeOneNameModelMap[typeName] = v + } +} + +func GetOneInstanceModel(typeName string) any { + return typeOneNameModelMap[typeName] +} + type ModelBaseServiceServer struct { grpc.UnimplementedModelBaseServiceServer +} - // dependencies - modelSvc interfaces.ModelService +func (svr ModelBaseServiceServer) GetById(_ context.Context, req *grpc.ModelServiceGetByIdRequest) (res *grpc.Response, err error) { + id, err := primitive.ObjectIDFromHex(req.Id) + if err != nil { + return HandleError(err) + } + modelSvc := service.NewModelServiceWithColName[bson.M](typeNameColNameMap[req.ModelType]) + data, err := modelSvc.GetById(id) + if err != nil { + return HandleError(err) + } + return HandleSuccessWithData(data) } -func (svr ModelBaseServiceServer) GetById(ctx context.Context, req *grpc.Request) (res *grpc.Response, err error) { - return svr.handleRequest(req, func(params *entity.GrpcBaseServiceParams, svc interfaces.ModelBaseService) (interface{}, error) { - return svc.GetById(params.Id) - }) +func (svr ModelBaseServiceServer) GetOne(_ context.Context, req *grpc.ModelServiceGetOneRequest) (res *grpc.Response, err error) { + var query bson.M + err = json.Unmarshal(req.Query, &query) + if err != nil { + return HandleError(err) + } + query = utils.NormalizeBsonMObjectId(query) + var opts mongo.FindOptions + err = json.Unmarshal(req.FindOptions, &opts) + if err != nil { + return HandleError(err) + } + modelSvc := service.NewModelServiceWithColName[bson.M](typeNameColNameMap[req.ModelType]) + data, err := modelSvc.GetOne(query, &opts) + if err != nil { + return HandleError(err) + } + return HandleSuccessWithData(data) } -func (svr ModelBaseServiceServer) Get(ctx context.Context, req *grpc.Request) (res *grpc.Response, err error) { - return svr.handleRequest(req, func(params *entity.GrpcBaseServiceParams, svc interfaces.ModelBaseService) (interface{}, error) { - return svc.Get(utils.NormalizeBsonMObjectId(params.Query), params.FindOptions) - }) +func (svr ModelBaseServiceServer) GetMany(_ context.Context, req *grpc.ModelServiceGetManyRequest) (res *grpc.Response, err error) { + var query bson.M + err = json.Unmarshal(req.Query, &query) + if err != nil { + return HandleError(err) + } + query = utils.NormalizeBsonMObjectId(query) + var opts mongo.FindOptions + err = json.Unmarshal(req.FindOptions, &opts) + if err != nil { + return HandleError(err) + } + modelSvc := service.NewModelServiceWithColName[bson.M](typeNameColNameMap[req.ModelType]) + data, err := modelSvc.GetMany(query, &opts) + if err != nil { + return HandleError(err) + } + return HandleSuccessWithData(data) } -func (svr ModelBaseServiceServer) GetList(ctx context.Context, req *grpc.Request) (res *grpc.Response, err error) { - return svr.handleRequest(req, func(params *entity.GrpcBaseServiceParams, svc interfaces.ModelBaseService) (interface{}, error) { - list, err := svc.GetList(utils.NormalizeBsonMObjectId(params.Query), params.FindOptions) - if err != nil { - return nil, err - } - data, err := json.Marshal(list) - if err != nil { - return nil, err - } - return data, nil - }) +func (svr ModelBaseServiceServer) DeleteById(_ context.Context, req *grpc.ModelServiceDeleteByIdRequest) (res *grpc.Response, err error) { + id, err := primitive.ObjectIDFromHex(req.Id) + if err != nil { + return HandleError(err) + } + modelSvc := GetModelService[bson.M](req.ModelType) + err = modelSvc.DeleteById(id) + if err != nil { + return HandleError(err) + } + return HandleSuccess() } -func (svr ModelBaseServiceServer) DeleteById(ctx context.Context, req *grpc.Request) (res *grpc.Response, err error) { - return svr.handleRequest(req, func(params *entity.GrpcBaseServiceParams, svc interfaces.ModelBaseService) (interface{}, error) { - err := svc.DeleteById(params.Id, params.User) - return nil, err - }) +func (svr ModelBaseServiceServer) DeleteOne(_ context.Context, req *grpc.ModelServiceDeleteOneRequest) (res *grpc.Response, err error) { + var query bson.M + err = json.Unmarshal(req.Query, &query) + if err != nil { + return HandleError(err) + } + query = utils.NormalizeBsonMObjectId(query) + modelSvc := GetModelService[bson.M](req.ModelType) + err = modelSvc.DeleteOne(query) + if err != nil { + return HandleError(err) + } + return HandleSuccess() } -func (svr ModelBaseServiceServer) Delete(ctx context.Context, req *grpc.Request) (res *grpc.Response, err error) { - return svr.handleRequest(req, func(params *entity.GrpcBaseServiceParams, svc interfaces.ModelBaseService) (interface{}, error) { - err := svc.Delete(utils.NormalizeBsonMObjectId(params.Query), params.User) - return nil, err - }) +func (svr ModelBaseServiceServer) DeleteMany(_ context.Context, req *grpc.ModelServiceDeleteManyRequest) (res *grpc.Response, err error) { + var query bson.M + err = json.Unmarshal(req.Query, &query) + if err != nil { + return HandleError(err) + } + query = utils.NormalizeBsonMObjectId(query) + modelSvc := GetModelService[bson.M](req.ModelType) + err = modelSvc.DeleteMany(query) + if err != nil { + return HandleError(err) + } + return HandleSuccess() } -func (svr ModelBaseServiceServer) DeleteList(ctx context.Context, req *grpc.Request) (res *grpc.Response, err error) { - return svr.handleRequest(req, func(params *entity.GrpcBaseServiceParams, svc interfaces.ModelBaseService) (interface{}, error) { - err := svc.DeleteList(utils.NormalizeBsonMObjectId(params.Query), params.User) - return nil, err - }) +func (svr ModelBaseServiceServer) UpdateById(_ context.Context, req *grpc.ModelServiceUpdateByIdRequest) (res *grpc.Response, err error) { + id, err := primitive.ObjectIDFromHex(req.Id) + if err != nil { + return HandleError(err) + } + var update bson.M + err = json.Unmarshal(req.Update, &update) + if err != nil { + return HandleError(err) + } + modelSvc := GetModelService[bson.M](req.ModelType) + err = modelSvc.UpdateById(id, update) + if err != nil { + return HandleError(err) + } + return HandleSuccess() } -func (svr ModelBaseServiceServer) ForceDeleteList(ctx context.Context, req *grpc.Request) (res *grpc.Response, err error) { - return svr.handleRequest(req, func(params *entity.GrpcBaseServiceParams, svc interfaces.ModelBaseService) (interface{}, error) { - err := svc.ForceDeleteList(utils.NormalizeBsonMObjectId(params.Query), params.User) - return nil, err - }) +func (svr ModelBaseServiceServer) UpdateOne(_ context.Context, req *grpc.ModelServiceUpdateOneRequest) (res *grpc.Response, err error) { + var query bson.M + err = json.Unmarshal(req.Query, &query) + if err != nil { + return HandleError(err) + } + query = utils.NormalizeBsonMObjectId(query) + var update bson.M + err = json.Unmarshal(req.Update, &update) + if err != nil { + return HandleError(err) + } + update = utils.NormalizeBsonMObjectId(update) + modelSvc := GetModelService[bson.M](req.ModelType) + err = modelSvc.UpdateOne(query, update) + if err != nil { + return HandleError(err) + } + return HandleSuccess() } -func (svr ModelBaseServiceServer) UpdateById(ctx context.Context, req *grpc.Request) (res *grpc.Response, err error) { - return svr.handleRequest(req, func(params *entity.GrpcBaseServiceParams, svc interfaces.ModelBaseService) (interface{}, error) { - err := svc.UpdateById(params.Id, params.Update) - return nil, err - }) +func (svr ModelBaseServiceServer) UpdateMany(_ context.Context, req *grpc.ModelServiceUpdateManyRequest) (res *grpc.Response, err error) { + var query bson.M + err = json.Unmarshal(req.Query, &query) + if err != nil { + return HandleError(err) + } + query = utils.NormalizeBsonMObjectId(query) + var update bson.M + err = json.Unmarshal(req.Update, &update) + if err != nil { + return HandleError(err) + } + update = utils.NormalizeBsonMObjectId(update) + modelSvc := GetModelService[bson.M](req.ModelType) + err = modelSvc.UpdateMany(query, update) + if err != nil { + return HandleError(err) + } + return HandleSuccess() } -func (svr ModelBaseServiceServer) Update(ctx context.Context, req *grpc.Request) (res *grpc.Response, err error) { - return svr.handleRequest(req, func(params *entity.GrpcBaseServiceParams, svc interfaces.ModelBaseService) (interface{}, error) { - err := svc.Update(utils.NormalizeBsonMObjectId(params.Query), params.Update, params.Fields, params.User) - return nil, err - }) +func (svr ModelBaseServiceServer) ReplaceById(_ context.Context, req *grpc.ModelServiceReplaceByIdRequest) (res *grpc.Response, err error) { + id, err := primitive.ObjectIDFromHex(req.Id) + if err != nil { + return HandleError(err) + } + model := GetOneInstanceModel(req.ModelType) + modelType := reflect.TypeOf(model) + modelValuePtr := reflect.New(modelType).Interface() + err = json.Unmarshal(req.Model, modelValuePtr) + if err != nil { + return HandleError(err) + } + modelSvc := GetModelService[bson.M](req.ModelType) + err = modelSvc.GetCol().ReplaceId(id, modelValuePtr) + if err != nil { + return HandleError(err) + } + return HandleSuccess() } -func (svr ModelBaseServiceServer) UpdateDoc(ctx context.Context, req *grpc.Request) (res *grpc.Response, err error) { - return svr.handleRequest(req, func(params *entity.GrpcBaseServiceParams, svc interfaces.ModelBaseService) (interface{}, error) { - err := svc.UpdateDoc(utils.NormalizeBsonMObjectId(params.Query), params.Doc, params.Fields, params.User) - return nil, err - }) +func (svr ModelBaseServiceServer) ReplaceOne(_ context.Context, req *grpc.ModelServiceReplaceOneRequest) (res *grpc.Response, err error) { + var query bson.M + err = json.Unmarshal(req.Query, &query) + if err != nil { + return HandleError(err) + } + query = utils.NormalizeBsonMObjectId(query) + model := GetOneInstanceModel(req.ModelType) + modelType := reflect.TypeOf(model) + modelValuePtr := reflect.New(modelType).Interface() + err = json.Unmarshal(req.Model, &modelValuePtr) + if err != nil { + return HandleError(err) + } + modelSvc := GetModelService[bson.M](req.ModelType) + err = modelSvc.GetCol().Replace(query, modelValuePtr) + if err != nil { + return HandleError(err) + } + return HandleSuccess() } -func (svr ModelBaseServiceServer) Insert(ctx context.Context, req *grpc.Request) (res *grpc.Response, err error) { - return svr.handleRequest(req, func(params *entity.GrpcBaseServiceParams, svc interfaces.ModelBaseService) (interface{}, error) { - err := svc.Insert(params.User, params.Docs...) - return nil, err - }) +func (svr ModelBaseServiceServer) InsertOne(_ context.Context, req *grpc.ModelServiceInsertOneRequest) (res *grpc.Response, err error) { + model := GetOneInstanceModel(req.ModelType) + modelType := reflect.TypeOf(model) + modelValuePtr := reflect.New(modelType).Interface() + err = json.Unmarshal(req.Model, modelValuePtr) + if err != nil { + return HandleError(err) + } + modelSvc := GetModelService[bson.M](req.ModelType) + r, err := modelSvc.GetCol().GetCollection().InsertOne(modelSvc.GetCol().GetContext(), modelValuePtr) + if err != nil { + return HandleError(err) + } + return HandleSuccessWithData(r.InsertedID) } -func (svr ModelBaseServiceServer) Count(ctx context.Context, req *grpc.Request) (res *grpc.Response, err error) { - return svr.handleRequest(req, func(params *entity.GrpcBaseServiceParams, svc interfaces.ModelBaseService) (interface{}, error) { - return svc.Count(utils.NormalizeBsonMObjectId(params.Query)) - }) +func (svr ModelBaseServiceServer) InsertMany(_ context.Context, req *grpc.ModelServiceInsertManyRequest) (res *grpc.Response, err error) { + model := GetOneInstanceModel(req.ModelType) + modelType := reflect.TypeOf(model) + modelsSliceType := reflect.SliceOf(modelType) + modelsSlicePtr := reflect.New(modelsSliceType).Interface() + err = json.Unmarshal(req.Models, modelsSlicePtr) + if err != nil { + return HandleError(err) + } + modelsSlice := reflect.ValueOf(modelsSlicePtr).Elem() + modelsInterface := make([]any, modelsSlice.Len()) + for i := 0; i < modelsSlice.Len(); i++ { + modelValue := modelsSlice.Index(i) + if modelValue.FieldByName("Id").Interface().(primitive.ObjectID).IsZero() { + modelValue.FieldByName("Id").Set(reflect.ValueOf(primitive.NewObjectID())) + } + modelsInterface[i] = modelValue.Interface() + } + modelSvc := GetModelService[bson.M](req.ModelType) + r, err := modelSvc.GetCol().GetCollection().InsertMany(modelSvc.GetCol().GetContext(), modelsInterface) + if err != nil { + return HandleError(err) + } + return HandleSuccessWithData(r.InsertedIDs) } -func (svr ModelBaseServiceServer) handleRequest(req *grpc.Request, handle handleBaseServiceRequest) (res *grpc.Response, err error) { - params, msg, err := NewModelBaseServiceBinder(req).BindWithBaseServiceMessage() +func (svr ModelBaseServiceServer) UpsertOne(_ context.Context, req *grpc.ModelServiceUpsertOneRequest) (res *grpc.Response, err error) { + model := GetOneInstanceModel(req.ModelType) + modelType := reflect.TypeOf(model) + modelValuePtr := reflect.New(modelType).Interface() + err = json.Unmarshal(req.Model, modelValuePtr) if err != nil { return HandleError(err) } - svc := svr.modelSvc.GetBaseService(msg.GetModelId()) - d, err := handle(params, svc) + var query bson.M + err = json.Unmarshal(req.Query, &query) if err != nil { return HandleError(err) } - if d == nil { - return HandleSuccess() + query = utils.NormalizeBsonMObjectId(query) + modelSvc := GetModelService[bson.M](req.ModelType) + opts := &options.ReplaceOptions{} + opts.SetUpsert(true) + id, err := modelSvc.GetCol().GetCollection().ReplaceOne(modelSvc.GetCol().GetContext(), query, modelValuePtr, opts) + if err != nil { + return HandleError(err) } - return HandleSuccessWithData(d) + + return HandleSuccessWithData(id) } -type handleBaseServiceRequest func(params *entity.GrpcBaseServiceParams, svc interfaces.ModelBaseService) (interface{}, error) +func (svr ModelBaseServiceServer) Count(_ context.Context, req *grpc.ModelServiceCountRequest) (res *grpc.Response, err error) { + var query bson.M + err = json.Unmarshal(req.Query, &query) + if err != nil { + return HandleError(err) + } + count, err := GetModelService[bson.M](req.ModelType).Count(query) + if err != nil { + return HandleError(err) + } + return HandleSuccessWithData(count) +} + +func GetModelService[T any](typeName string) *service.ModelService[T] { + return service.NewModelServiceWithColName[T](typeNameColNameMap[typeName]) +} -func NewModelBaseServiceServer() (svr2 *ModelBaseServiceServer, err error) { - svr := &ModelBaseServiceServer{} +var modelBaseServiceServer *ModelBaseServiceServer +var modelBaseServiceServerOnce = &sync.Once{} - // dependency injection - if err := container.GetContainer().Invoke(func(modelSvc service.ModelService) { - svr.modelSvc = modelSvc - }); err != nil { - return nil, trace.TraceError(err) - } +func newModelBaseServiceServer() *ModelBaseServiceServer { + return &ModelBaseServiceServer{} +} - return svr, nil +func GetModelBaseServiceServer() *ModelBaseServiceServer { + modelBaseServiceServerOnce.Do(func() { + modelBaseServiceServer = newModelBaseServiceServer() + }) + return modelBaseServiceServer } diff --git a/core/grpc/server/model_base_service_v2_server.go b/core/grpc/server/model_base_service_v2_server.go deleted file mode 100644 index f777da61a..000000000 --- a/core/grpc/server/model_base_service_v2_server.go +++ /dev/null @@ -1,312 +0,0 @@ -package server - -import ( - "context" - "encoding/json" - "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/core/models/service" - "github.com/crawlab-team/crawlab/db/mongo" - grpc "github.com/crawlab-team/crawlab/grpc" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" - "reflect" -) - -var ( - typeNameColNameMap = make(map[string]string) - typeOneNameModelMap = make(map[string]any) - typeOneInstances = []any{ - *new(models.TestModel), - *new(models.DataCollectionV2), - *new(models.DataSourceV2), - *new(models.DependencyV2), - *new(models.DependencyLogV2), - *new(models.DependencySettingV2), - *new(models.DependencyTaskV2), - *new(models.EnvironmentV2), - *new(models.GitV2), - *new(models.MetricV2), - *new(models.NodeV2), - *new(models.NotificationSettingV2), - *new(models.PermissionV2), - *new(models.ProjectV2), - *new(models.RolePermissionV2), - *new(models.RoleV2), - *new(models.ScheduleV2), - *new(models.SettingV2), - *new(models.SpiderV2), - *new(models.SpiderStatV2), - *new(models.TaskQueueItemV2), - *new(models.TaskStatV2), - *new(models.TaskV2), - *new(models.TokenV2), - *new(models.UserRoleV2), - *new(models.UserV2), - } -) - -func init() { - for _, v := range typeOneInstances { - t := reflect.TypeOf(v) - typeName := t.Name() - colName := service.GetCollectionNameByInstance(v) - typeNameColNameMap[typeName] = colName - typeOneNameModelMap[typeName] = v - } -} - -func GetOneInstanceModel(typeName string) any { - return typeOneNameModelMap[typeName] -} - -type ModelBaseServiceServerV2 struct { - grpc.UnimplementedModelBaseServiceV2Server -} - -func (svr ModelBaseServiceServerV2) GetById(ctx context.Context, req *grpc.ModelServiceV2GetByIdRequest) (res *grpc.Response, err error) { - id, err := primitive.ObjectIDFromHex(req.Id) - if err != nil { - return HandleError(err) - } - modelSvc := service.NewModelServiceV2WithColName[bson.M](typeNameColNameMap[req.ModelType]) - data, err := modelSvc.GetById(id) - if err != nil { - return HandleError(err) - } - return HandleSuccessWithData(data) -} - -func (svr ModelBaseServiceServerV2) GetOne(ctx context.Context, req *grpc.ModelServiceV2GetOneRequest) (res *grpc.Response, err error) { - var query bson.M - err = json.Unmarshal(req.Query, &query) - if err != nil { - return HandleError(err) - } - var options mongo.FindOptions - err = json.Unmarshal(req.FindOptions, &options) - if err != nil { - return HandleError(err) - } - modelSvc := service.NewModelServiceV2WithColName[bson.M](typeNameColNameMap[req.ModelType]) - data, err := modelSvc.GetOne(query, &options) - if err != nil { - return HandleError(err) - } - return HandleSuccessWithData(data) -} - -func (svr ModelBaseServiceServerV2) GetMany(ctx context.Context, req *grpc.ModelServiceV2GetManyRequest) (res *grpc.Response, err error) { - var query bson.M - err = json.Unmarshal(req.Query, &query) - if err != nil { - return HandleError(err) - } - var options mongo.FindOptions - err = json.Unmarshal(req.FindOptions, &options) - if err != nil { - return HandleError(err) - } - modelSvc := service.NewModelServiceV2WithColName[bson.M](typeNameColNameMap[req.ModelType]) - data, err := modelSvc.GetMany(query, &options) - if err != nil { - return HandleError(err) - } - return HandleSuccessWithData(data) -} - -func (svr ModelBaseServiceServerV2) DeleteById(ctx context.Context, req *grpc.ModelServiceV2DeleteByIdRequest) (res *grpc.Response, err error) { - id, err := primitive.ObjectIDFromHex(req.Id) - if err != nil { - return HandleError(err) - } - modelSvc := GetModelService[bson.M](req.ModelType) - err = modelSvc.DeleteById(id) - if err != nil { - return HandleError(err) - } - return HandleSuccess() -} - -func (svr ModelBaseServiceServerV2) DeleteOne(ctx context.Context, req *grpc.ModelServiceV2DeleteOneRequest) (res *grpc.Response, err error) { - var query bson.M - err = json.Unmarshal(req.Query, &query) - if err != nil { - return HandleError(err) - } - modelSvc := GetModelService[bson.M](req.ModelType) - err = modelSvc.DeleteOne(query) - if err != nil { - return HandleError(err) - } - return HandleSuccess() -} - -func (svr ModelBaseServiceServerV2) DeleteMany(ctx context.Context, req *grpc.ModelServiceV2DeleteManyRequest) (res *grpc.Response, err error) { - var query bson.M - err = json.Unmarshal(req.Query, &query) - if err != nil { - return HandleError(err) - } - modelSvc := GetModelService[bson.M](req.ModelType) - err = modelSvc.DeleteMany(query) - if err != nil { - return HandleError(err) - } - return HandleSuccess() -} - -func (svr ModelBaseServiceServerV2) UpdateById(ctx context.Context, req *grpc.ModelServiceV2UpdateByIdRequest) (res *grpc.Response, err error) { - id, err := primitive.ObjectIDFromHex(req.Id) - if err != nil { - return HandleError(err) - } - var update bson.M - err = json.Unmarshal(req.Update, &update) - if err != nil { - return HandleError(err) - } - modelSvc := GetModelService[bson.M](req.ModelType) - err = modelSvc.UpdateById(id, update) - if err != nil { - return HandleError(err) - } - return HandleSuccess() -} - -func (svr ModelBaseServiceServerV2) UpdateOne(ctx context.Context, req *grpc.ModelServiceV2UpdateOneRequest) (res *grpc.Response, err error) { - var query bson.M - err = json.Unmarshal(req.Query, &query) - if err != nil { - return HandleError(err) - } - var update bson.M - err = json.Unmarshal(req.Update, &update) - if err != nil { - return HandleError(err) - } - modelSvc := GetModelService[bson.M](req.ModelType) - err = modelSvc.UpdateOne(query, update) - if err != nil { - return HandleError(err) - } - return HandleSuccess() -} - -func (svr ModelBaseServiceServerV2) UpdateMany(ctx context.Context, req *grpc.ModelServiceV2UpdateManyRequest) (res *grpc.Response, err error) { - var query bson.M - err = json.Unmarshal(req.Query, &query) - if err != nil { - return HandleError(err) - } - var update bson.M - err = json.Unmarshal(req.Update, &update) - if err != nil { - return HandleError(err) - } - modelSvc := GetModelService[bson.M](req.ModelType) - err = modelSvc.UpdateMany(query, update) - if err != nil { - return HandleError(err) - } - return HandleSuccess() -} - -func (svr ModelBaseServiceServerV2) ReplaceById(ctx context.Context, req *grpc.ModelServiceV2ReplaceByIdRequest) (res *grpc.Response, err error) { - id, err := primitive.ObjectIDFromHex(req.Id) - if err != nil { - return HandleError(err) - } - model := GetOneInstanceModel(req.ModelType) - modelType := reflect.TypeOf(model) - modelValuePtr := reflect.New(modelType).Interface() - err = json.Unmarshal(req.Model, modelValuePtr) - if err != nil { - return HandleError(err) - } - modelSvc := GetModelService[bson.M](req.ModelType) - err = modelSvc.GetCol().ReplaceId(id, modelValuePtr) - if err != nil { - return HandleError(err) - } - return HandleSuccess() -} - -func (svr ModelBaseServiceServerV2) ReplaceOne(ctx context.Context, req *grpc.ModelServiceV2ReplaceOneRequest) (res *grpc.Response, err error) { - var query bson.M - err = json.Unmarshal(req.Query, &query) - if err != nil { - return HandleError(err) - } - model := GetOneInstanceModel(req.ModelType) - modelType := reflect.TypeOf(model) - modelValuePtr := reflect.New(modelType).Interface() - err = json.Unmarshal(req.Model, &modelValuePtr) - if err != nil { - return HandleError(err) - } - modelSvc := GetModelService[bson.M](req.ModelType) - err = modelSvc.GetCol().Replace(query, modelValuePtr) - if err != nil { - return HandleError(err) - } - return HandleSuccess() -} - -func (svr ModelBaseServiceServerV2) InsertOne(ctx context.Context, req *grpc.ModelServiceV2InsertOneRequest) (res *grpc.Response, err error) { - model := GetOneInstanceModel(req.ModelType) - modelType := reflect.TypeOf(model) - modelValuePtr := reflect.New(modelType).Interface() - err = json.Unmarshal(req.Model, modelValuePtr) - if err != nil { - return HandleError(err) - } - modelSvc := GetModelService[bson.M](req.ModelType) - r, err := modelSvc.GetCol().GetCollection().InsertOne(modelSvc.GetCol().GetContext(), modelValuePtr) - if err != nil { - return HandleError(err) - } - return HandleSuccessWithData(r.InsertedID) -} - -func (svr ModelBaseServiceServerV2) InsertMany(ctx context.Context, req *grpc.ModelServiceV2InsertManyRequest) (res *grpc.Response, err error) { - model := GetOneInstanceModel(req.ModelType) - modelType := reflect.TypeOf(model) - modelsSliceType := reflect.SliceOf(modelType) - modelsSlicePtr := reflect.New(modelsSliceType).Interface() - err = json.Unmarshal(req.Models, modelsSlicePtr) - if err != nil { - return HandleError(err) - } - modelsSlice := reflect.ValueOf(modelsSlicePtr).Elem() - modelsInterface := make([]any, modelsSlice.Len()) - for i := 0; i < modelsSlice.Len(); i++ { - modelsInterface[i] = modelsSlice.Index(i).Interface() - } - modelSvc := GetModelService[bson.M](req.ModelType) - r, err := modelSvc.GetCol().GetCollection().InsertMany(modelSvc.GetCol().GetContext(), modelsInterface) - if err != nil { - return HandleError(err) - } - return HandleSuccessWithData(r.InsertedIDs) -} - -func (svr ModelBaseServiceServerV2) Count(ctx context.Context, req *grpc.ModelServiceV2CountRequest) (res *grpc.Response, err error) { - var query bson.M - err = json.Unmarshal(req.Query, &query) - if err != nil { - return HandleError(err) - } - count, err := GetModelService[bson.M](req.ModelType).Count(query) - if err != nil { - return HandleError(err) - } - return HandleSuccessWithData(count) -} - -func GetModelService[T any](typeName string) *service.ModelServiceV2[T] { - return service.NewModelServiceV2WithColName[T](typeNameColNameMap[typeName]) -} - -func NewModelBaseServiceV2Server() *ModelBaseServiceServerV2 { - return &ModelBaseServiceServerV2{} -} diff --git a/core/grpc/server/model_delegate_binder.go b/core/grpc/server/model_delegate_binder.go deleted file mode 100644 index 172eae0ec..000000000 --- a/core/grpc/server/model_delegate_binder.go +++ /dev/null @@ -1,120 +0,0 @@ -package server - -import ( - "encoding/json" - "github.com/crawlab-team/crawlab/core/entity" - "github.com/crawlab-team/crawlab/core/errors" - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/grpc" -) - -func NewModelDelegateBinder(req *grpc.Request) (b *ModelDelegateBinder) { - return &ModelDelegateBinder{ - req: req, - msg: &entity.GrpcDelegateMessage{}, - } -} - -type ModelDelegateBinder struct { - req *grpc.Request - msg interfaces.GrpcModelDelegateMessage -} - -func (b *ModelDelegateBinder) Bind() (res interface{}, err error) { - if err := b.bindDelegateMessage(); err != nil { - return nil, err - } - - m := models.NewModelMap() - - switch b.msg.GetModelId() { - case interfaces.ModelIdArtifact: - return b.process(&m.Artifact, interfaces.ModelIdTag) - case interfaces.ModelIdTag: - return b.process(&m.Tag, interfaces.ModelIdTag) - case interfaces.ModelIdNode: - return b.process(&m.Node, interfaces.ModelIdTag) - case interfaces.ModelIdProject: - return b.process(&m.Project, interfaces.ModelIdTag) - case interfaces.ModelIdSpider: - return b.process(&m.Spider, interfaces.ModelIdTag) - case interfaces.ModelIdTask: - return b.process(&m.Task) - case interfaces.ModelIdJob: - return b.process(&m.Job) - case interfaces.ModelIdSchedule: - return b.process(&m.Schedule) - case interfaces.ModelIdUser: - return b.process(&m.User) - case interfaces.ModelIdSetting: - return b.process(&m.Setting) - case interfaces.ModelIdToken: - return b.process(&m.Token) - case interfaces.ModelIdVariable: - return b.process(&m.Variable) - case interfaces.ModelIdTaskQueue: - return b.process(&m.TaskQueueItem) - case interfaces.ModelIdTaskStat: - return b.process(&m.TaskStat) - case interfaces.ModelIdSpiderStat: - return b.process(&m.SpiderStat) - case interfaces.ModelIdDataSource: - return b.process(&m.DataSource) - case interfaces.ModelIdDataCollection: - return b.process(&m.DataCollection) - case interfaces.ModelIdResult: - return b.process(&m.Result) - case interfaces.ModelIdPassword: - return b.process(&m.Password) - case interfaces.ModelIdExtraValue: - return b.process(&m.ExtraValue) - case interfaces.ModelIdGit: - return b.process(&m.Git) - case interfaces.ModelIdRole: - return b.process(&m.Role) - case interfaces.ModelIdUserRole: - return b.process(&m.UserRole) - case interfaces.ModelIdPermission: - return b.process(&m.Permission) - case interfaces.ModelIdRolePermission: - return b.process(&m.RolePermission) - case interfaces.ModelIdEnvironment: - return b.process(&m.Environment) - case interfaces.ModelIdDependencySetting: - return b.process(&m.DependencySetting) - default: - return nil, errors.ErrorModelInvalidModelId - } -} - -func (b *ModelDelegateBinder) MustBind() (res interface{}) { - res, err := b.Bind() - if err != nil { - panic(err) - } - return res -} - -func (b *ModelDelegateBinder) BindWithDelegateMessage() (res interface{}, msg interfaces.GrpcModelDelegateMessage, err error) { - if err := json.Unmarshal(b.req.Data, b.msg); err != nil { - return nil, nil, err - } - res, err = b.Bind() - if err != nil { - return nil, nil, err - } - return res, b.msg, nil -} - -func (b *ModelDelegateBinder) process(d interface{}, fieldIds ...interfaces.ModelId) (res interface{}, err error) { - if err := json.Unmarshal(b.msg.GetData(), d); err != nil { - return nil, err - } - //return models.AssignFields(d, fieldIds...) // TODO: do we need to assign fields? - return d, nil -} - -func (b *ModelDelegateBinder) bindDelegateMessage() (err error) { - return json.Unmarshal(b.req.Data, b.msg) -} diff --git a/core/grpc/server/model_delegate_server.go b/core/grpc/server/model_delegate_server.go deleted file mode 100644 index 4f097d559..000000000 --- a/core/grpc/server/model_delegate_server.go +++ /dev/null @@ -1,67 +0,0 @@ -package server - -import ( - "context" - "github.com/crawlab-team/crawlab/core/errors" - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/models/delegate" - grpc "github.com/crawlab-team/crawlab/grpc" -) - -type ModelDelegateServer struct { - grpc.UnimplementedModelDelegateServer -} - -// Do and perform an RPC action of constants.Delegate -func (svr ModelDelegateServer) Do(ctx context.Context, req *grpc.Request) (res *grpc.Response, err error) { - // bind message - obj, msg, err := NewModelDelegateBinder(req).BindWithDelegateMessage() - if err != nil { - return HandleError(err) - } - - // convert to model - doc, ok := obj.(interfaces.Model) - if !ok { - return HandleError(errors.ErrorModelInvalidType) - } - - // model delegate - d := delegate.NewModelDelegate(doc) - - // apply method - switch msg.GetMethod() { - case interfaces.ModelDelegateMethodAdd: - err = d.Add() - case interfaces.ModelDelegateMethodSave: - err = d.Save() - case interfaces.ModelDelegateMethodDelete: - err = d.Delete() - case interfaces.ModelDelegateMethodGetArtifact, interfaces.ModelDelegateMethodRefresh: - err = d.Refresh() - } - if err != nil { - return HandleError(err) - } - - // model - m := d.GetModel() - if msg.GetMethod() == interfaces.ModelDelegateMethodGetArtifact { - m, err = d.GetArtifact() - if err != nil { - return nil, err - } - } - - // json bytes - data, err := d.ToBytes(m) - if err != nil { - return nil, err - } - - return HandleSuccessWithData(data) -} - -func NewModelDelegateServer() (svr *ModelDelegateServer) { - return &ModelDelegateServer{} -} diff --git a/core/grpc/server/node_server.go b/core/grpc/server/node_server.go deleted file mode 100644 index ce1c99291..000000000 --- a/core/grpc/server/node_server.go +++ /dev/null @@ -1,199 +0,0 @@ -package server - -import ( - "context" - "encoding/json" - "github.com/apex/log" - "github.com/crawlab-team/crawlab/core/constants" - "github.com/crawlab-team/crawlab/core/entity" - "github.com/crawlab-team/crawlab/core/errors" - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/models/delegate" - "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/core/models/service" - nodeconfig "github.com/crawlab-team/crawlab/core/node/config" - "github.com/crawlab-team/crawlab/grpc" - "go.mongodb.org/mongo-driver/mongo" -) - -type NodeServer struct { - grpc.UnimplementedNodeServiceServer - - // dependencies - modelSvc service.ModelService - cfgSvc interfaces.NodeConfigService - - // internals - server interfaces.GrpcServer -} - -// Register from handler/worker to master -func (svr NodeServer) Register(ctx context.Context, req *grpc.Request) (res *grpc.Response, err error) { - // unmarshall data - var nodeInfo entity.NodeInfo - if req.Data != nil { - if err := json.Unmarshal(req.Data, &nodeInfo); err != nil { - return HandleError(err) - } - - if nodeInfo.IsMaster { - // error: cannot register master node - return HandleError(errors.ErrorGrpcNotAllowed) - } - } - - // node key - var nodeKey string - if req.NodeKey != "" { - nodeKey = req.NodeKey - } else { - nodeKey = nodeInfo.Key - } - if nodeKey == "" { - return HandleError(errors.ErrorModelMissingRequiredData) - } - - // find in db - node, err := svr.modelSvc.GetNodeByKey(nodeKey, nil) - if err == nil { - if node.IsMaster { - // error: cannot register master node - return HandleError(errors.ErrorGrpcNotAllowed) - } else { - // register existing - node.Status = constants.NodeStatusRegistered - node.Active = true - nodeD := delegate.NewModelNodeDelegate(node) - if err := nodeD.Save(); err != nil { - return HandleError(err) - } - var ok bool - node, ok = nodeD.GetModel().(*models.Node) - if !ok { - return HandleError(errors.ErrorGrpcInvalidType) - } - log.Infof("[NodeServer] updated worker[%s] in db. id: %s", nodeKey, nodeD.GetModel().GetId().Hex()) - } - } else if err == mongo.ErrNoDocuments { - // register new - node = &models.Node{ - Key: nodeKey, - Name: nodeInfo.Name, - Ip: nodeInfo.Ip, - Hostname: nodeInfo.Hostname, - Description: nodeInfo.Description, - MaxRunners: nodeInfo.MaxRunners, - Status: constants.NodeStatusRegistered, - Active: true, - Enabled: true, - } - if node.Name == "" { - node.Name = nodeKey - } - nodeD := delegate.NewModelDelegate(node) - if err := nodeD.Add(); err != nil { - return HandleError(err) - } - var ok bool - node, ok = nodeD.GetModel().(*models.Node) - if !ok { - return HandleError(errors.ErrorGrpcInvalidType) - } - log.Infof("[NodeServer] added worker[%s] in db. id: %s", nodeKey, nodeD.GetModel().GetId().Hex()) - } else { - // error - return HandleError(err) - } - - log.Infof("[NodeServer] master registered worker[%s]", req.GetNodeKey()) - - return HandleSuccessWithData(node) -} - -// SendHeartbeat from worker to master -func (svr NodeServer) SendHeartbeat(ctx context.Context, req *grpc.Request) (res *grpc.Response, err error) { - // find in db - node, err := svr.modelSvc.GetNodeByKey(req.NodeKey, nil) - if err != nil { - if err == mongo.ErrNoDocuments { - return HandleError(errors.ErrorNodeNotExists) - } - return HandleError(err) - } - - // validate status - if node.Status == constants.NodeStatusUnregistered { - return HandleError(errors.ErrorNodeUnregistered) - } - - // update status - nodeD := delegate.NewModelNodeDelegate(node) - if err := nodeD.UpdateStatusOnline(); err != nil { - return HandleError(err) - } - - return HandleSuccessWithData(node) -} - -// Ping from worker to master -func (svr NodeServer) Ping(ctx context.Context, req *grpc.Request) (res *grpc.Response, err error) { - return HandleSuccess() -} - -func (svr NodeServer) Subscribe(request *grpc.Request, stream grpc.NodeService_SubscribeServer) (err error) { - log.Infof("[NodeServer] master received subscribe request from node[%s]", request.NodeKey) - - // finished channel - finished := make(chan bool) - - // set subscribe - svr.server.SetSubscribe("node:"+request.NodeKey, &entity.GrpcSubscribe{ - Stream: stream, - Finished: finished, - }) - ctx := stream.Context() - - log.Infof("[NodeServer] master subscribed node[%s]", request.NodeKey) - - // Keep this scope alive because once this scope exits - the stream is closed - for { - select { - case <-finished: - log.Infof("[NodeServer] closing stream for node[%s]", request.NodeKey) - return nil - case <-ctx.Done(): - log.Infof("[NodeServer] node[%s] has disconnected", request.NodeKey) - return nil - } - } -} - -func (svr NodeServer) Unsubscribe(ctx context.Context, req *grpc.Request) (res *grpc.Response, err error) { - sub, err := svr.server.GetSubscribe("node:" + req.NodeKey) - if err != nil { - return nil, errors.ErrorGrpcSubscribeNotExists - } - select { - case sub.GetFinished() <- true: - log.Infof("unsubscribed node[%s]", req.NodeKey) - default: - // Default case is to avoid blocking in case client has already unsubscribed - } - svr.server.DeleteSubscribe(req.NodeKey) - return &grpc.Response{ - Code: grpc.ResponseCode_OK, - Message: "unsubscribed successfully", - }, nil -} - -func NewNodeServer() (res *NodeServer, err error) { - // node server - svr := &NodeServer{} - svr.modelSvc, err = service.GetService() - if err != nil { - return nil, err - } - svr.cfgSvc = nodeconfig.GetNodeConfigService() - - return svr, nil -} diff --git a/core/grpc/server/node_server_v2.go b/core/grpc/server/node_server_v2.go deleted file mode 100644 index a45e222e4..000000000 --- a/core/grpc/server/node_server_v2.go +++ /dev/null @@ -1,178 +0,0 @@ -package server - -import ( - "context" - "github.com/apex/log" - "github.com/crawlab-team/crawlab/core/constants" - "github.com/crawlab-team/crawlab/core/entity" - "github.com/crawlab-team/crawlab/core/errors" - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/core/models/service" - nodeconfig "github.com/crawlab-team/crawlab/core/node/config" - "github.com/crawlab-team/crawlab/grpc" - errors2 "github.com/pkg/errors" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" - "go.mongodb.org/mongo-driver/mongo" - "sync" - "time" -) - -type NodeServerV2 struct { - grpc.UnimplementedNodeServiceServer - - // dependencies - cfgSvc interfaces.NodeConfigService - - // internals - server *GrpcServerV2 -} - -// Register from handler/worker to master -func (svr NodeServerV2) Register(ctx context.Context, req *grpc.NodeServiceRegisterRequest) (res *grpc.Response, err error) { - // unmarshall data - if req.IsMaster { - // error: cannot register master node - return HandleError(errors.ErrorGrpcNotAllowed) - } - - // node key - if req.Key == "" { - return HandleError(errors.ErrorModelMissingRequiredData) - } - - // find in db - var node *models.NodeV2 - node, err = service.NewModelServiceV2[models.NodeV2]().GetOne(bson.M{"key": req.Key}, nil) - if err == nil { - // register existing - node.Status = constants.NodeStatusRegistered - node.Active = true - node.ActiveAt = time.Now() - err = service.NewModelServiceV2[models.NodeV2]().ReplaceById(node.Id, *node) - if err != nil { - return HandleError(err) - } - log.Infof("[NodeServerV2] updated worker[%s] in db. id: %s", req.Key, node.Id.Hex()) - } else if errors2.Is(err, mongo.ErrNoDocuments) { - // register new - node = &models.NodeV2{ - Key: req.Key, - Name: req.Name, - Status: constants.NodeStatusRegistered, - Active: true, - ActiveAt: time.Now(), - Enabled: true, - MaxRunners: int(req.MaxRunners), - } - node.SetCreated(primitive.NilObjectID) - node.SetUpdated(primitive.NilObjectID) - node.Id, err = service.NewModelServiceV2[models.NodeV2]().InsertOne(*node) - if err != nil { - return HandleError(err) - } - log.Infof("[NodeServerV2] added worker[%s] in db. id: %s", req.Key, node.Id.Hex()) - } else { - // error - return HandleError(err) - } - - log.Infof("[NodeServerV2] master registered worker[%s]", req.Key) - - return HandleSuccessWithData(node) -} - -// SendHeartbeat from worker to master -func (svr NodeServerV2) SendHeartbeat(ctx context.Context, req *grpc.NodeServiceSendHeartbeatRequest) (res *grpc.Response, err error) { - // find in db - node, err := service.NewModelServiceV2[models.NodeV2]().GetOne(bson.M{"key": req.Key}, nil) - if err != nil { - if errors2.Is(err, mongo.ErrNoDocuments) { - return HandleError(errors.ErrorNodeNotExists) - } - return HandleError(err) - } - - // validate status - if node.Status == constants.NodeStatusUnregistered { - return HandleError(errors.ErrorNodeUnregistered) - } - - // update status - node.Status = constants.NodeStatusOnline - node.Active = true - node.ActiveAt = time.Now() - err = service.NewModelServiceV2[models.NodeV2]().ReplaceById(node.Id, *node) - if err != nil { - return HandleError(err) - } - - return HandleSuccessWithData(node) -} - -func (svr NodeServerV2) Subscribe(request *grpc.Request, stream grpc.NodeService_SubscribeServer) (err error) { - log.Infof("[NodeServerV2] master received subscribe request from node[%s]", request.NodeKey) - - // finished channel - finished := make(chan bool) - - // set subscribe - svr.server.SetSubscribe("node:"+request.NodeKey, &entity.GrpcSubscribe{ - Stream: stream, - Finished: finished, - }) - ctx := stream.Context() - - log.Infof("[NodeServerV2] master subscribed node[%s]", request.NodeKey) - - // Keep this scope alive because once this scope exits - the stream is closed - for { - select { - case <-finished: - log.Infof("[NodeServerV2] closing stream for node[%s]", request.NodeKey) - return nil - case <-ctx.Done(): - log.Infof("[NodeServerV2] node[%s] has disconnected", request.NodeKey) - return nil - } - } -} - -func (svr NodeServerV2) Unsubscribe(ctx context.Context, req *grpc.Request) (res *grpc.Response, err error) { - sub, err := svr.server.GetSubscribe("node:" + req.NodeKey) - if err != nil { - return nil, errors.ErrorGrpcSubscribeNotExists - } - select { - case sub.GetFinished() <- true: - log.Infof("unsubscribed node[%s]", req.NodeKey) - default: - // Default case is to avoid blocking in case client has already unsubscribed - } - svr.server.DeleteSubscribe(req.NodeKey) - return &grpc.Response{ - Code: grpc.ResponseCode_OK, - Message: "unsubscribed successfully", - }, nil -} - -var nodeSvrV2 *NodeServerV2 -var nodeSvrV2Once = new(sync.Once) - -func NewNodeServerV2() (res *NodeServerV2, err error) { - if nodeSvrV2 != nil { - return nodeSvrV2, nil - } - nodeSvrV2Once.Do(func() { - nodeSvrV2 = &NodeServerV2{} - nodeSvrV2.cfgSvc = nodeconfig.GetNodeConfigService() - if err != nil { - log.Errorf("[NodeServerV2] error: %s", err.Error()) - } - }) - if err != nil { - return nil, err - } - return nodeSvrV2, nil -} diff --git a/core/grpc/server/node_service_server.go b/core/grpc/server/node_service_server.go new file mode 100644 index 000000000..be53406e0 --- /dev/null +++ b/core/grpc/server/node_service_server.go @@ -0,0 +1,167 @@ +package server + +import ( + "context" + "github.com/crawlab-team/crawlab/core/constants" + "github.com/crawlab-team/crawlab/core/errors" + "github.com/crawlab-team/crawlab/core/interfaces" + "github.com/crawlab-team/crawlab/core/models/models" + "github.com/crawlab-team/crawlab/core/models/service" + nodeconfig "github.com/crawlab-team/crawlab/core/node/config" + "github.com/crawlab-team/crawlab/core/notification" + "github.com/crawlab-team/crawlab/core/utils" + "github.com/crawlab-team/crawlab/grpc" + errors2 "github.com/pkg/errors" + "go.mongodb.org/mongo-driver/bson" + "go.mongodb.org/mongo-driver/bson/primitive" + "go.mongodb.org/mongo-driver/mongo" + "sync" + "time" +) + +var nodeServiceMutex = sync.Mutex{} + +type NodeServiceServer struct { + grpc.UnimplementedNodeServiceServer + + // dependencies + cfgSvc interfaces.NodeConfigService + + // internals + subs map[primitive.ObjectID]grpc.NodeService_SubscribeServer + interfaces.Logger +} + +// Register from handler/worker to master +func (svr NodeServiceServer) Register(_ context.Context, req *grpc.NodeServiceRegisterRequest) (res *grpc.Response, err error) { + // node key + if req.NodeKey == "" { + return HandleError(errors.ErrorModelMissingRequiredData) + } + + // find in db + var node *models.Node + node, err = service.NewModelService[models.Node]().GetOne(bson.M{"key": req.NodeKey}, nil) + if err == nil { + // register existing + node.Status = constants.NodeStatusOnline + node.Active = true + node.ActiveAt = time.Now() + err = service.NewModelService[models.Node]().ReplaceById(node.Id, *node) + if err != nil { + return HandleError(err) + } + svr.Infof("updated worker[%s] in db. id: %s", req.NodeKey, node.Id.Hex()) + } else if errors2.Is(err, mongo.ErrNoDocuments) { + // register new + node = &models.Node{ + Key: req.NodeKey, + Name: req.NodeName, + Status: constants.NodeStatusOnline, + Active: true, + ActiveAt: time.Now(), + Enabled: true, + MaxRunners: int(req.MaxRunners), + } + node.SetCreated(primitive.NilObjectID) + node.SetUpdated(primitive.NilObjectID) + node.Id, err = service.NewModelService[models.Node]().InsertOne(*node) + if err != nil { + return HandleError(err) + } + svr.Infof("added worker[%s] in db. id: %s", req.NodeKey, node.Id.Hex()) + } else { + // error + return HandleError(err) + } + + svr.Infof("master registered worker[%s]", req.NodeKey) + + return HandleSuccessWithData(node) +} + +// SendHeartbeat from worker to master +func (svr NodeServiceServer) SendHeartbeat(_ context.Context, req *grpc.NodeServiceSendHeartbeatRequest) (res *grpc.Response, err error) { + // find in db + node, err := service.NewModelService[models.Node]().GetOne(bson.M{"key": req.NodeKey}, nil) + if err != nil { + if errors2.Is(err, mongo.ErrNoDocuments) { + return HandleError(errors.ErrorNodeNotExists) + } + return HandleError(err) + } + oldStatus := node.Status + + // update status + node.Status = constants.NodeStatusOnline + node.Active = true + node.ActiveAt = time.Now() + err = service.NewModelService[models.Node]().ReplaceById(node.Id, *node) + if err != nil { + return HandleError(err) + } + newStatus := node.Status + + // send notification if status changed + if utils.IsPro() { + if oldStatus != newStatus { + go notification.GetNotificationService().SendNodeNotification(node) + } + } + + return HandleSuccessWithData(node) +} + +func (svr NodeServiceServer) Subscribe(request *grpc.NodeServiceSubscribeRequest, stream grpc.NodeService_SubscribeServer) (err error) { + svr.Infof("master received subscribe request from node[%s]", request.NodeKey) + + // find in db + node, err := service.NewModelService[models.Node]().GetOne(bson.M{"key": request.NodeKey}, nil) + if err != nil { + svr.Errorf("error getting node: %v", err) + return err + } + + // subscribe + nodeServiceMutex.Lock() + svr.subs[node.Id] = stream + nodeServiceMutex.Unlock() + + // TODO: send notification + + // wait for stream to close + <-stream.Context().Done() + + // unsubscribe + nodeServiceMutex.Lock() + delete(svr.subs, node.Id) + nodeServiceMutex.Unlock() + svr.Infof("master unsubscribed from node[%s]", request.NodeKey) + + return nil +} + +func (svr NodeServiceServer) GetSubscribeStream(nodeId primitive.ObjectID) (stream grpc.NodeService_SubscribeServer, ok bool) { + nodeServiceMutex.Lock() + defer nodeServiceMutex.Unlock() + stream, ok = svr.subs[nodeId] + return stream, ok +} + +func newNodeServiceServer() *NodeServiceServer { + return &NodeServiceServer{ + cfgSvc: nodeconfig.GetNodeConfigService(), + subs: make(map[primitive.ObjectID]grpc.NodeService_SubscribeServer), + Logger: utils.NewLogger("GrpcNodeServiceServer"), + } +} + +var nodeSvr *NodeServiceServer +var nodeSvrOnce sync.Once + +func GetNodeServiceServer() *NodeServiceServer { + nodeSvrOnce.Do(func() { + nodeSvr = newNodeServiceServer() + }) + return nodeSvr +} diff --git a/core/grpc/server/options.go b/core/grpc/server/options.go deleted file mode 100644 index afae5dbae..000000000 --- a/core/grpc/server/options.go +++ /dev/null @@ -1,43 +0,0 @@ -package server - -import ( - "github.com/crawlab-team/crawlab/core/interfaces" -) - -type Option func(svr interfaces.GrpcServer) - -func WithConfigPath(path string) Option { - return func(svr interfaces.GrpcServer) { - svr.SetConfigPath(path) - } -} - -func WithAddress(address interfaces.Address) Option { - return func(svr interfaces.GrpcServer) { - svr.SetAddress(address) - } -} - -type NodeServerOption func(svr *NodeServer) - -func WithServerNodeServerService(server interfaces.GrpcServer) NodeServerOption { - return func(svr *NodeServer) { - svr.server = server - } -} - -type TaskServerOption func(svr *TaskServer) - -func WithServerTaskServerService(server interfaces.GrpcServer) TaskServerOption { - return func(svr *TaskServer) { - svr.server = server - } -} - -type MessageServerOption func(svr *MessageServer) - -func WithServerMessageServerService(server interfaces.GrpcServer) MessageServerOption { - return func(svr *MessageServer) { - svr.server = server - } -} diff --git a/core/grpc/server/server.go b/core/grpc/server/server.go new file mode 100644 index 000000000..dbde28854 --- /dev/null +++ b/core/grpc/server/server.go @@ -0,0 +1,147 @@ +package server + +import ( + "fmt" + "github.com/crawlab-team/crawlab/core/grpc/middlewares" + "github.com/crawlab-team/crawlab/core/interfaces" + "github.com/crawlab-team/crawlab/core/utils" + grpc2 "github.com/crawlab-team/crawlab/grpc" + grpcmiddleware "github.com/grpc-ecosystem/go-grpc-middleware" + grpcauth "github.com/grpc-ecosystem/go-grpc-middleware/auth" + grpcrecovery "github.com/grpc-ecosystem/go-grpc-middleware/recovery" + errors2 "github.com/pkg/errors" + "google.golang.org/grpc" + "net" + "sync" +) + +type GrpcServer struct { + // settings + address string + + // internals + svr *grpc.Server + l net.Listener + stopped bool + interfaces.Logger + + // servers + NodeSvr *NodeServiceServer + TaskSvr *TaskServiceServer + ModelBaseServiceSvr *ModelBaseServiceServer + DependencySvr *DependencyServiceServer + MetricSvr *MetricServiceServer +} + +func (svr *GrpcServer) Init() { + svr.register() +} + +func (svr *GrpcServer) Start() (err error) { + // listener + svr.l, err = net.Listen("tcp", svr.address) + if err != nil { + svr.Errorf("failed to listen: %v", err) + return err + } + svr.Infof("server listens to %s", svr.address) + + // start grpc server + go func() { + if err := svr.svr.Serve(svr.l); err != nil { + if errors2.Is(err, grpc.ErrServerStopped) { + return + } + svr.Errorf("failed to serve: %v", err) + } + }() + + return nil +} + +func (svr *GrpcServer) Stop() (err error) { + // skip if listener is nil + if svr.l == nil { + return nil + } + + // graceful stop + svr.Infof("server stopping...") + svr.svr.Stop() + + // close listener + svr.Infof("server closing listener...") + _ = svr.l.Close() + + // mark as stopped + svr.stopped = true + + // log + svr.Infof("server stopped") + + return nil +} + +func (svr *GrpcServer) register() { + grpc2.RegisterNodeServiceServer(svr.svr, *svr.NodeSvr) + grpc2.RegisterModelBaseServiceServer(svr.svr, *svr.ModelBaseServiceSvr) + grpc2.RegisterTaskServiceServer(svr.svr, *svr.TaskSvr) + grpc2.RegisterDependencyServiceServer(svr.svr, *svr.DependencySvr) + grpc2.RegisterMetricServiceServer(svr.svr, *svr.MetricSvr) +} + +func (svr *GrpcServer) recoveryHandlerFunc(p interface{}) (err error) { + svr.Errorf("recovered from panic: %v", p) + return fmt.Errorf("recovered from panic: %v", p) +} + +func newGrpcServer() *GrpcServer { + // server + svr := &GrpcServer{ + address: utils.GetGrpcServerAddress(), + Logger: utils.NewLogger("GrpcServer"), + } + + // services servers + svr.NodeSvr = GetNodeServiceServer() + svr.ModelBaseServiceSvr = GetModelBaseServiceServer() + svr.TaskSvr = GetTaskServiceServer() + svr.DependencySvr = GetDependencyServer() + svr.MetricSvr = GetMetricsServer() + + // recovery options + recoveryOpts := []grpcrecovery.Option{ + grpcrecovery.WithRecoveryHandler(svr.recoveryHandlerFunc), + } + + // grpc server + svr.svr = grpc.NewServer( + grpcmiddleware.WithUnaryServerChain( + grpcrecovery.UnaryServerInterceptor(recoveryOpts...), + grpcauth.UnaryServerInterceptor(middlewares.GetGrpcServerAuthTokenFunc()), + ), + grpcmiddleware.WithStreamServerChain( + grpcrecovery.StreamServerInterceptor(recoveryOpts...), + grpcauth.StreamServerInterceptor(middlewares.GetGrpcServerAuthTokenFunc()), + ), + ) + + // initialize + svr.Init() + + return svr +} + +var _server *GrpcServer +var _serverOnce sync.Once + +func GetGrpcServer() *GrpcServer { + _serverOnce.Do(func() { + _server = newGrpcServer() + }) + return _server +} + +func NewGrpcServer() *GrpcServer { + return newGrpcServer() +} diff --git a/core/grpc/server/server_v2.go b/core/grpc/server/server_v2.go deleted file mode 100644 index e8c8ba069..000000000 --- a/core/grpc/server/server_v2.go +++ /dev/null @@ -1,260 +0,0 @@ -package server - -import ( - "encoding/json" - "fmt" - "github.com/apex/log" - "github.com/crawlab-team/crawlab/core/constants" - "github.com/crawlab-team/crawlab/core/entity" - "github.com/crawlab-team/crawlab/core/errors" - "github.com/crawlab-team/crawlab/core/grpc/middlewares" - "github.com/crawlab-team/crawlab/core/interfaces" - nodeconfig "github.com/crawlab-team/crawlab/core/node/config" - grpc2 "github.com/crawlab-team/crawlab/grpc" - "github.com/crawlab-team/crawlab/trace" - grpc_middleware "github.com/grpc-ecosystem/go-grpc-middleware" - grpc_auth "github.com/grpc-ecosystem/go-grpc-middleware/auth" - grpc_recovery "github.com/grpc-ecosystem/go-grpc-middleware/recovery" - errors2 "github.com/pkg/errors" - "github.com/spf13/viper" - "go/types" - "google.golang.org/grpc" - "net" - "sync" -) - -var ( - subsV2 = map[string]interfaces.GrpcSubscribe{} - mutexSubsV2 = &sync.Mutex{} -) - -type GrpcServerV2 struct { - // settings - cfgPath string - address interfaces.Address - - // internals - svr *grpc.Server - l net.Listener - stopped bool - - // dependencies - nodeCfgSvc interfaces.NodeConfigService - - // servers - NodeSvr *NodeServerV2 - TaskSvr *TaskServerV2 - ModelBaseServiceSvr *ModelBaseServiceServerV2 - DependenciesSvr *DependenciesServerV2 - MetricsSvr *MetricsServerV2 -} - -func (svr *GrpcServerV2) GetConfigPath() (path string) { - return svr.cfgPath -} - -func (svr *GrpcServerV2) SetConfigPath(path string) { - svr.cfgPath = path -} - -func (svr *GrpcServerV2) Init() (err error) { - // register - if err := svr.Register(); err != nil { - return err - } - - return nil -} - -func (svr *GrpcServerV2) Start() (err error) { - // grpc server binding address - address := svr.address.String() - - // listener - svr.l, err = net.Listen("tcp", address) - if err != nil { - _ = trace.TraceError(err) - return errors.ErrorGrpcServerFailedToListen - } - log.Infof("grpc server listens to %s", address) - - // start grpc server - go func() { - if err := svr.svr.Serve(svr.l); err != nil { - if errors2.Is(err, grpc.ErrServerStopped) { - return - } - trace.PrintError(err) - log.Error(errors.ErrorGrpcServerFailedToServe.Error()) - } - }() - - return nil -} - -func (svr *GrpcServerV2) Stop() (err error) { - // skip if listener is nil - if svr.l == nil { - return nil - } - - // graceful stop - log.Infof("grpc server stopping...") - svr.svr.Stop() - - // close listener - log.Infof("grpc server closing listener...") - _ = svr.l.Close() - - // mark as stopped - svr.stopped = true - - // log - log.Infof("grpc server stopped") - - return nil -} - -func (svr *GrpcServerV2) Register() (err error) { - grpc2.RegisterNodeServiceServer(svr.svr, *svr.NodeSvr) - grpc2.RegisterModelBaseServiceV2Server(svr.svr, *svr.ModelBaseServiceSvr) - grpc2.RegisterTaskServiceServer(svr.svr, *svr.TaskSvr) - grpc2.RegisterDependenciesServiceV2Server(svr.svr, *svr.DependenciesSvr) - grpc2.RegisterMetricsServiceV2Server(svr.svr, *svr.MetricsSvr) - - return nil -} - -func (svr *GrpcServerV2) recoveryHandlerFunc(p interface{}) (err error) { - err = errors.NewError(errors.ErrorPrefixGrpc, fmt.Sprintf("%v", p)) - trace.PrintError(err) - return err -} - -func (svr *GrpcServerV2) SetAddress(address interfaces.Address) { - -} - -func (svr *GrpcServerV2) GetSubscribe(key string) (sub interfaces.GrpcSubscribe, err error) { - mutexSubsV2.Lock() - defer mutexSubsV2.Unlock() - sub, ok := subsV2[key] - if !ok { - return nil, errors.ErrorGrpcSubscribeNotExists - } - return sub, nil -} - -func (svr *GrpcServerV2) SetSubscribe(key string, sub interfaces.GrpcSubscribe) { - mutexSubsV2.Lock() - defer mutexSubsV2.Unlock() - subsV2[key] = sub -} - -func (svr *GrpcServerV2) DeleteSubscribe(key string) { - mutexSubsV2.Lock() - defer mutexSubsV2.Unlock() - delete(subsV2, key) -} - -func (svr *GrpcServerV2) SendStreamMessage(key string, code grpc2.StreamMessageCode) (err error) { - return svr.SendStreamMessageWithData(key, code, nil) -} - -func (svr *GrpcServerV2) SendStreamMessageWithData(key string, code grpc2.StreamMessageCode, d interface{}) (err error) { - var data []byte - switch d.(type) { - case types.Nil: - // do nothing - case []byte: - data = d.([]byte) - default: - var err error - data, err = json.Marshal(d) - if err != nil { - return err - } - } - sub, err := svr.GetSubscribe(key) - if err != nil { - return err - } - msg := &grpc2.StreamMessage{ - Code: code, - Key: svr.nodeCfgSvc.GetNodeKey(), - Data: data, - } - return sub.GetStream().Send(msg) -} - -func (svr *GrpcServerV2) IsStopped() (res bool) { - return svr.stopped -} - -func NewGrpcServerV2() (svr *GrpcServerV2, err error) { - // server - svr = &GrpcServerV2{ - address: entity.NewAddress(&entity.AddressOptions{ - Host: constants.DefaultGrpcServerHost, - Port: constants.DefaultGrpcServerPort, - }), - } - - if viper.GetString("grpc.server.address") != "" { - svr.address, err = entity.NewAddressFromString(viper.GetString("grpc.server.address")) - if err != nil { - return nil, err - } - } - - svr.nodeCfgSvc = nodeconfig.GetNodeConfigService() - - svr.NodeSvr, err = NewNodeServerV2() - if err != nil { - return nil, err - } - svr.ModelBaseServiceSvr = NewModelBaseServiceV2Server() - svr.TaskSvr, err = NewTaskServerV2() - if err != nil { - return nil, err - } - svr.DependenciesSvr = GetDependenciesServerV2() - svr.MetricsSvr = GetMetricsServerV2() - - // recovery options - recoveryOpts := []grpc_recovery.Option{ - grpc_recovery.WithRecoveryHandler(svr.recoveryHandlerFunc), - } - - // grpc server - svr.svr = grpc.NewServer( - grpc_middleware.WithUnaryServerChain( - grpc_recovery.UnaryServerInterceptor(recoveryOpts...), - grpc_auth.UnaryServerInterceptor(middlewares.GetAuthTokenFunc(svr.nodeCfgSvc)), - ), - grpc_middleware.WithStreamServerChain( - grpc_recovery.StreamServerInterceptor(recoveryOpts...), - grpc_auth.StreamServerInterceptor(middlewares.GetAuthTokenFunc(svr.nodeCfgSvc)), - ), - ) - - // initialize - if err := svr.Init(); err != nil { - return nil, err - } - - return svr, nil -} - -var _serverV2 *GrpcServerV2 - -func GetGrpcServerV2() (svr *GrpcServerV2, err error) { - if _serverV2 != nil { - return _serverV2, nil - } - _serverV2, err = NewGrpcServerV2() - if err != nil { - return nil, err - } - return _serverV2, nil -} diff --git a/core/grpc/server/task_server.go b/core/grpc/server/task_server.go deleted file mode 100644 index b6d085923..000000000 --- a/core/grpc/server/task_server.go +++ /dev/null @@ -1,238 +0,0 @@ -package server - -import ( - "context" - "encoding/json" - "github.com/apex/log" - "github.com/crawlab-team/crawlab/core/constants" - "github.com/crawlab-team/crawlab/core/container" - "github.com/crawlab-team/crawlab/core/entity" - "github.com/crawlab-team/crawlab/core/errors" - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/models/delegate" - "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/core/models/service" - "github.com/crawlab-team/crawlab/core/notification" - "github.com/crawlab-team/crawlab/core/utils" - "github.com/crawlab-team/crawlab/db/mongo" - grpc "github.com/crawlab-team/crawlab/grpc" - "github.com/crawlab-team/crawlab/trace" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" - mongo2 "go.mongodb.org/mongo-driver/mongo" - "io" - "strings" -) - -type TaskServer struct { - grpc.UnimplementedTaskServiceServer - - // dependencies - modelSvc service.ModelService - cfgSvc interfaces.NodeConfigService - statsSvc interfaces.TaskStatsService - - // internals - server interfaces.GrpcServer -} - -// Subscribe to task stream when a task runner in a node starts -func (svr TaskServer) Subscribe(stream grpc.TaskService_SubscribeServer) (err error) { - for { - msg, err := stream.Recv() - utils.LogDebug(msg.String()) - if err == io.EOF { - return nil - } - if err != nil { - if strings.HasSuffix(err.Error(), "context canceled") { - return nil - } - trace.PrintError(err) - continue - } - switch msg.Code { - case grpc.StreamMessageCode_INSERT_DATA: - err = svr.handleInsertData(msg) - case grpc.StreamMessageCode_INSERT_LOGS: - err = svr.handleInsertLogs(msg) - default: - err = errors.ErrorGrpcInvalidCode - log.Errorf("invalid stream message code: %d", msg.Code) - continue - } - if err != nil { - log.Errorf("grpc error[%d]: %v", msg.Code, err) - } - } -} - -// Fetch tasks to be executed by a task handler -func (svr TaskServer) Fetch(ctx context.Context, request *grpc.Request) (response *grpc.Response, err error) { - nodeKey := request.GetNodeKey() - if nodeKey == "" { - return nil, trace.TraceError(errors.ErrorGrpcInvalidNodeKey) - } - n, err := svr.modelSvc.GetNodeByKey(nodeKey, nil) - if err != nil { - return nil, trace.TraceError(err) - } - var tid primitive.ObjectID - opts := &mongo.FindOptions{ - Sort: bson.D{ - {"p", 1}, - {"_id", 1}, - }, - Limit: 1, - } - if err := mongo.RunTransactionWithContext(ctx, func(sc mongo2.SessionContext) (err error) { - // get task queue item assigned to this node - tid, err = svr.getTaskQueueItemIdAndDequeue(bson.M{"nid": n.Id}, opts, n.Id) - if err != nil { - return err - } - if !tid.IsZero() { - return nil - } - - // get task queue item assigned to any node (random mode) - tid, err = svr.getTaskQueueItemIdAndDequeue(bson.M{"nid": nil}, opts, n.Id) - if !tid.IsZero() { - return nil - } - if err != nil { - return err - } - return nil - }); err != nil { - return nil, err - } - return HandleSuccessWithData(tid) -} - -func (svr TaskServer) SendNotification(ctx context.Context, request *grpc.Request) (response *grpc.Response, err error) { - svc := notification.GetService() - var t = new(models.Task) - if err := json.Unmarshal(request.Data, t); err != nil { - return nil, trace.TraceError(err) - } - t, err = svr.modelSvc.GetTaskById(t.Id) - if err != nil { - return nil, trace.TraceError(err) - } - td, err := json.Marshal(t) - if err != nil { - return nil, trace.TraceError(err) - } - var e bson.M - if err := json.Unmarshal(td, &e); err != nil { - return nil, trace.TraceError(err) - } - ts, err := svr.modelSvc.GetTaskStatById(t.Id) - if err != nil { - return nil, trace.TraceError(err) - } - settings, _, err := svc.GetSettingList(bson.M{ - "enabled": true, - }, nil, nil) - if err != nil { - return nil, trace.TraceError(err) - } - for _, s := range settings { - switch s.TaskTrigger { - case constants.NotificationTriggerTaskFinish: - if t.Status != constants.TaskStatusPending && t.Status != constants.TaskStatusRunning { - _ = svc.Send(s, e) - } - case constants.NotificationTriggerTaskError: - if t.Status == constants.TaskStatusError || t.Status == constants.TaskStatusAbnormal { - _ = svc.Send(s, e) - } - case constants.NotificationTriggerTaskEmptyResults: - if t.Status != constants.TaskStatusPending && t.Status != constants.TaskStatusRunning { - if ts.ResultCount == 0 { - _ = svc.Send(s, e) - } - } - case constants.NotificationTriggerTaskNever: - } - } - return nil, nil -} - -func (svr TaskServer) handleInsertData(msg *grpc.StreamMessage) (err error) { - data, err := svr.deserialize(msg) - if err != nil { - return err - } - var records []interface{} - for _, d := range data.Records { - res, ok := d[constants.TaskKey] - if ok { - switch res.(type) { - case string: - id, err := primitive.ObjectIDFromHex(res.(string)) - if err == nil { - d[constants.TaskKey] = id - } - } - } - records = append(records, d) - } - return svr.statsSvc.InsertData(data.TaskId, records...) -} - -func (svr TaskServer) handleInsertLogs(msg *grpc.StreamMessage) (err error) { - data, err := svr.deserialize(msg) - if err != nil { - return err - } - return svr.statsSvc.InsertLogs(data.TaskId, data.Logs...) -} - -func (svr TaskServer) getTaskQueueItemIdAndDequeue(query bson.M, opts *mongo.FindOptions, nid primitive.ObjectID) (tid primitive.ObjectID, err error) { - var tq models.TaskQueueItem - if err := mongo.GetMongoCol(interfaces.ModelColNameTaskQueue).Find(query, opts).One(&tq); err != nil { - if err == mongo2.ErrNoDocuments { - return tid, nil - } - return tid, trace.TraceError(err) - } - t, err := svr.modelSvc.GetTaskById(tq.Id) - if err == nil { - t.NodeId = nid - _ = delegate.NewModelDelegate(t).Save() - } - _ = delegate.NewModelDelegate(&tq).Delete() - return tq.Id, nil -} - -func (svr TaskServer) deserialize(msg *grpc.StreamMessage) (data entity.StreamMessageTaskData, err error) { - if err := json.Unmarshal(msg.Data, &data); err != nil { - return data, trace.TraceError(err) - } - if data.TaskId.IsZero() { - return data, trace.TraceError(errors.ErrorGrpcInvalidType) - } - return data, nil -} - -func NewTaskServer() (res *TaskServer, err error) { - // task server - svr := &TaskServer{} - - // dependency injection - if err := container.GetContainer().Invoke(func( - modelSvc service.ModelService, - statsSvc interfaces.TaskStatsService, - cfgSvc interfaces.NodeConfigService, - ) { - svr.modelSvc = modelSvc - svr.statsSvc = statsSvc - svr.cfgSvc = cfgSvc - }); err != nil { - return nil, err - } - - return svr, nil -} diff --git a/core/grpc/server/task_server_v2.go b/core/grpc/server/task_server_v2.go deleted file mode 100644 index 62b6ab328..000000000 --- a/core/grpc/server/task_server_v2.go +++ /dev/null @@ -1,237 +0,0 @@ -package server - -import ( - "context" - "encoding/json" - "errors" - "github.com/apex/log" - "github.com/crawlab-team/crawlab/core/constants" - "github.com/crawlab-team/crawlab/core/entity" - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/core/models/service" - nodeconfig "github.com/crawlab-team/crawlab/core/node/config" - "github.com/crawlab-team/crawlab/core/notification" - "github.com/crawlab-team/crawlab/core/task/stats" - "github.com/crawlab-team/crawlab/core/utils" - "github.com/crawlab-team/crawlab/db/mongo" - grpc "github.com/crawlab-team/crawlab/grpc" - "github.com/crawlab-team/crawlab/trace" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" - mongo2 "go.mongodb.org/mongo-driver/mongo" - "io" - "strings" -) - -type TaskServerV2 struct { - grpc.UnimplementedTaskServiceServer - - // dependencies - cfgSvc interfaces.NodeConfigService - statsSvc *stats.ServiceV2 - - // internals - server interfaces.GrpcServer -} - -// Subscribe to task stream when a task runner in a node starts -func (svr TaskServerV2) Subscribe(stream grpc.TaskService_SubscribeServer) (err error) { - for { - msg, err := stream.Recv() - utils.LogDebug(msg.String()) - if err == io.EOF { - return nil - } - if err != nil { - if strings.HasSuffix(err.Error(), "context canceled") { - return nil - } - trace.PrintError(err) - continue - } - switch msg.Code { - case grpc.StreamMessageCode_INSERT_DATA: - err = svr.handleInsertData(msg) - case grpc.StreamMessageCode_INSERT_LOGS: - err = svr.handleInsertLogs(msg) - default: - err = errors.New("invalid stream message code") - log.Errorf("invalid stream message code: %d", msg.Code) - continue - } - if err != nil { - log.Errorf("grpc error[%d]: %v", msg.Code, err) - } - } -} - -// Fetch tasks to be executed by a task handler -func (svr TaskServerV2) Fetch(ctx context.Context, request *grpc.Request) (response *grpc.Response, err error) { - nodeKey := request.GetNodeKey() - if nodeKey == "" { - return nil, errors.New("invalid node key") - } - n, err := service.NewModelServiceV2[models.NodeV2]().GetOne(bson.M{"key": nodeKey}, nil) - if err != nil { - return nil, trace.TraceError(err) - } - var tid primitive.ObjectID - opts := &mongo.FindOptions{ - Sort: bson.D{ - {"p", 1}, - {"_id", 1}, - }, - Limit: 1, - } - if err := mongo.RunTransactionWithContext(ctx, func(sc mongo2.SessionContext) (err error) { - // get task queue item assigned to this node - tid, err = svr.getTaskQueueItemIdAndDequeue(bson.M{"nid": n.Id}, opts, n.Id) - if err != nil { - return err - } - if !tid.IsZero() { - return nil - } - - // get task queue item assigned to any node (random mode) - tid, err = svr.getTaskQueueItemIdAndDequeue(bson.M{"nid": nil}, opts, n.Id) - if !tid.IsZero() { - return nil - } - if err != nil { - return err - } - return nil - }); err != nil { - return nil, err - } - return HandleSuccessWithData(tid) -} - -func (svr TaskServerV2) SendNotification(ctx context.Context, request *grpc.Request) (response *grpc.Response, err error) { - svc := notification.GetNotificationServiceV2() - var t = new(models.TaskV2) - if err := json.Unmarshal(request.Data, t); err != nil { - return nil, trace.TraceError(err) - } - t, err = service.NewModelServiceV2[models.TaskV2]().GetById(t.Id) - if err != nil { - return nil, trace.TraceError(err) - } - td, err := json.Marshal(t) - if err != nil { - return nil, trace.TraceError(err) - } - var e bson.M - if err := json.Unmarshal(td, &e); err != nil { - return nil, trace.TraceError(err) - } - ts, err := service.NewModelServiceV2[models.TaskStatV2]().GetById(t.Id) - if err != nil { - return nil, trace.TraceError(err) - } - settings, _, err := svc.GetSettingList(bson.M{ - "enabled": true, - }, nil, nil) - if err != nil { - return nil, trace.TraceError(err) - } - for _, s := range settings { - switch s.TaskTrigger { - case constants.NotificationTriggerTaskFinish: - if t.Status != constants.TaskStatusPending && t.Status != constants.TaskStatusRunning { - _ = svc.Send(&s, e) - } - case constants.NotificationTriggerTaskError: - if t.Status == constants.TaskStatusError || t.Status == constants.TaskStatusAbnormal { - _ = svc.Send(&s, e) - } - case constants.NotificationTriggerTaskEmptyResults: - if t.Status != constants.TaskStatusPending && t.Status != constants.TaskStatusRunning { - if ts.ResultCount == 0 { - _ = svc.Send(&s, e) - } - } - case constants.NotificationTriggerTaskNever: - } - } - return nil, nil -} - -func (svr TaskServerV2) handleInsertData(msg *grpc.StreamMessage) (err error) { - data, err := svr.deserialize(msg) - if err != nil { - return err - } - var records []interface{} - for _, d := range data.Records { - res, ok := d[constants.TaskKey] - if ok { - switch res.(type) { - case string: - id, err := primitive.ObjectIDFromHex(res.(string)) - if err == nil { - d[constants.TaskKey] = id - } - } - } - records = append(records, d) - } - return svr.statsSvc.InsertData(data.TaskId, records...) -} - -func (svr TaskServerV2) handleInsertLogs(msg *grpc.StreamMessage) (err error) { - data, err := svr.deserialize(msg) - if err != nil { - return err - } - return svr.statsSvc.InsertLogs(data.TaskId, data.Logs...) -} - -func (svr TaskServerV2) getTaskQueueItemIdAndDequeue(query bson.M, opts *mongo.FindOptions, nid primitive.ObjectID) (tid primitive.ObjectID, err error) { - tq, err := service.NewModelServiceV2[models.TaskQueueItemV2]().GetOne(query, opts) - if err != nil { - if errors.Is(err, mongo2.ErrNoDocuments) { - return tid, nil - } - return tid, trace.TraceError(err) - } - t, err := service.NewModelServiceV2[models.TaskV2]().GetById(tq.Id) - if err == nil { - t.NodeId = nid - err = service.NewModelServiceV2[models.TaskV2]().ReplaceById(t.Id, *t) - if err != nil { - return tid, trace.TraceError(err) - } - } - err = service.NewModelServiceV2[models.TaskQueueItemV2]().DeleteById(tq.Id) - if err != nil { - return tid, trace.TraceError(err) - } - return tq.Id, nil -} - -func (svr TaskServerV2) deserialize(msg *grpc.StreamMessage) (data entity.StreamMessageTaskData, err error) { - if err := json.Unmarshal(msg.Data, &data); err != nil { - return data, trace.TraceError(err) - } - if data.TaskId.IsZero() { - return data, errors.New("invalid task id") - } - return data, nil -} - -func NewTaskServerV2() (res *TaskServerV2, err error) { - // task server - svr := &TaskServerV2{} - - svr.cfgSvc = nodeconfig.GetNodeConfigService() - - svr.statsSvc, err = stats.GetTaskStatsServiceV2() - if err != nil { - return nil, err - } - - return svr, nil -} diff --git a/core/grpc/server/task_service_server.go b/core/grpc/server/task_service_server.go new file mode 100644 index 000000000..6f871e73b --- /dev/null +++ b/core/grpc/server/task_service_server.go @@ -0,0 +1,351 @@ +package server + +import ( + "context" + "encoding/json" + "errors" + "fmt" + mongo3 "github.com/crawlab-team/crawlab/core/mongo" + "io" + "strings" + "sync" + + "github.com/crawlab-team/crawlab/core/constants" + "github.com/crawlab-team/crawlab/core/interfaces" + "github.com/crawlab-team/crawlab/core/models/models" + "github.com/crawlab-team/crawlab/core/models/service" + nodeconfig "github.com/crawlab-team/crawlab/core/node/config" + "github.com/crawlab-team/crawlab/core/notification" + "github.com/crawlab-team/crawlab/core/task/stats" + "github.com/crawlab-team/crawlab/core/utils" + "github.com/crawlab-team/crawlab/grpc" + "go.mongodb.org/mongo-driver/bson" + "go.mongodb.org/mongo-driver/bson/primitive" + mongo2 "go.mongodb.org/mongo-driver/mongo" +) + +var taskServiceMutex = sync.Mutex{} + +type TaskServiceServer struct { + grpc.UnimplementedTaskServiceServer + + // dependencies + cfgSvc interfaces.NodeConfigService + statsSvc *stats.Service + + // internals + subs map[primitive.ObjectID]grpc.TaskService_SubscribeServer + interfaces.Logger +} + +func (svr TaskServiceServer) Subscribe(req *grpc.TaskServiceSubscribeRequest, stream grpc.TaskService_SubscribeServer) (err error) { + // task id + taskId, err := primitive.ObjectIDFromHex(req.TaskId) + if err != nil { + return errors.New("invalid task id") + } + + // validate stream + if stream == nil { + return errors.New("invalid stream") + } + + // add stream + taskServiceMutex.Lock() + svr.subs[taskId] = stream + taskServiceMutex.Unlock() + + // wait for stream to close + <-stream.Context().Done() + + // remove stream + taskServiceMutex.Lock() + delete(svr.subs, taskId) + taskServiceMutex.Unlock() + svr.Infof("task stream closed: %s", taskId.Hex()) + + return nil +} + +// Connect to task stream when a task runner in a node starts +// Connect handles the bidirectional streaming connection from task runners in nodes. +// It receives messages containing task data and logs, processes them, and handles any errors. +func (svr TaskServiceServer) Connect(stream grpc.TaskService_ConnectServer) (err error) { + // spider id and task id to track which spider/task this connection belongs to + var spiderId primitive.ObjectID + var taskId primitive.ObjectID + + // continuously receive messages from the stream + for { + // receive next message from stream + msg, err := stream.Recv() + if err == io.EOF { + // stream has ended normally + return nil + } + if err != nil { + // handle graceful context cancellation + if strings.HasSuffix(err.Error(), "context canceled") { + return nil + } + // log other stream receive errors and continue + svr.Errorf("error receiving stream message: %v", err) + continue + } + + // validate and parse the task ID from the message if not already set + if taskId.IsZero() { + taskId, err = primitive.ObjectIDFromHex(msg.TaskId) + if err != nil { + svr.Errorf("invalid task id: %s", msg.TaskId) + continue + } + } + + // get spider id if not already set + // this only needs to be done once per connection + if spiderId.IsZero() { + t, err := service.NewModelService[models.Task]().GetById(taskId) + if err != nil { + svr.Errorf("error getting spider[%s]: %v", taskId.Hex(), err) + continue + } + spiderId = t.SpiderId + } + + // handle different message types based on the code + switch msg.Code { + case grpc.TaskServiceConnectCode_INSERT_DATA: + // handle scraped data insertion + err = svr.handleInsertData(taskId, spiderId, msg) + case grpc.TaskServiceConnectCode_INSERT_LOGS: + // handle task log insertion + err = svr.handleInsertLogs(taskId, msg) + default: + // invalid message code received + svr.Errorf("invalid stream message code: %d", msg.Code) + continue + } + if err != nil { + // log any errors from handlers + svr.Errorf("grpc error[%d]: %v", msg.Code, err) + } + } +} + +// FetchTask tasks to be executed by a task handler +func (svr TaskServiceServer) FetchTask(ctx context.Context, request *grpc.TaskServiceFetchTaskRequest) (response *grpc.TaskServiceFetchTaskResponse, err error) { + nodeKey := request.GetNodeKey() + if nodeKey == "" { + err = fmt.Errorf("invalid node key") + svr.Errorf("error fetching task: %v", err) + return nil, err + } + n, err := service.NewModelService[models.Node]().GetOne(bson.M{"key": nodeKey}, nil) + if err != nil { + svr.Errorf("error getting node[%s]: %v", nodeKey, err) + return nil, err + } + var tid primitive.ObjectID + opts := &mongo3.FindOptions{ + Sort: bson.D{ + {"priority", 1}, + {"_id", 1}, + }, + Limit: 1, + } + if err := mongo3.RunTransactionWithContext(ctx, func(sc mongo2.SessionContext) (err error) { + // fetch task for the given node + t, err := service.NewModelService[models.Task]().GetOne(bson.M{ + "node_id": n.Id, + "status": constants.TaskStatusPending, + }, opts) + if err == nil { + tid = t.Id + t.Status = constants.TaskStatusAssigned + return svr.saveTask(t) + } else if !errors.Is(err, mongo2.ErrNoDocuments) { + svr.Errorf("error fetching task for node[%s]: %v", nodeKey, err) + return err + } + + // fetch task for any node + t, err = service.NewModelService[models.Task]().GetOne(bson.M{ + "node_id": primitive.NilObjectID, + "status": constants.TaskStatusPending, + }, opts) + if err == nil { + tid = t.Id + t.NodeId = n.Id + t.Status = constants.TaskStatusAssigned + return svr.saveTask(t) + } else if !errors.Is(err, mongo2.ErrNoDocuments) { + svr.Errorf("error fetching task for any node: %v", err) + return err + } + + // no task found + return nil + }); err != nil { + return nil, err + } + + return &grpc.TaskServiceFetchTaskResponse{TaskId: tid.Hex()}, nil +} + +func (svr TaskServiceServer) SendNotification(_ context.Context, request *grpc.TaskServiceSendNotificationRequest) (response *grpc.Response, err error) { + if !utils.IsPro() { + return nil, nil + } + + // task id + taskId, err := primitive.ObjectIDFromHex(request.TaskId) + if err != nil { + svr.Errorf("invalid task id: %s", request.TaskId) + return nil, err + } + + // arguments + var args []any + + // task + task, err := service.NewModelService[models.Task]().GetById(taskId) + if err != nil { + svr.Errorf("error getting task[%s]: %v", request.TaskId, err) + return nil, err + } + args = append(args, task) + + // task stat + taskStat, err := service.NewModelService[models.TaskStat]().GetById(task.Id) + if err != nil { + svr.Errorf("error getting task stat for task[%s]: %v", request.TaskId, err) + return nil, err + } + args = append(args, taskStat) + + // spider + spider, err := service.NewModelService[models.Spider]().GetById(task.SpiderId) + if err != nil { + svr.Errorf("error getting spider[%s]: %v", task.SpiderId.Hex(), err) + return nil, err + } + args = append(args, spider) + + // node + node, err := service.NewModelService[models.Node]().GetById(task.NodeId) + if err != nil { + svr.Errorf("error getting node[%s]: %v", task.NodeId.Hex(), err) + return nil, err + } + args = append(args, node) + + // schedule + var schedule *models.Schedule + if !task.ScheduleId.IsZero() { + schedule, err = service.NewModelService[models.Schedule]().GetById(task.ScheduleId) + if err != nil { + svr.Errorf("error getting schedule[%s]: %v", task.ScheduleId.Hex(), err) + return nil, err + } + args = append(args, schedule) + } + + // settings + settings, err := service.NewModelService[models.NotificationSetting]().GetMany(bson.M{ + "enabled": true, + "trigger": bson.M{ + "$regex": constants.NotificationTriggerPatternTask, + }, + }, nil) + if err != nil { + svr.Errorf("error getting notification settings: %v", err) + return nil, err + } + + // notification service + svc := notification.GetNotificationService() + + for _, s := range settings { + // compatible with old settings + trigger := s.Trigger + if trigger == "" { + trigger = s.TaskTrigger + } + + // send notification + switch trigger { + case constants.NotificationTriggerTaskFinish: + if task.Status != constants.TaskStatusPending && task.Status != constants.TaskStatusRunning { + go svc.Send(&s, args...) + } + case constants.NotificationTriggerTaskError: + if task.Status == constants.TaskStatusError || task.Status == constants.TaskStatusAbnormal { + go svc.Send(&s, args...) + } + case constants.NotificationTriggerTaskEmptyResults: + if task.Status != constants.TaskStatusPending && task.Status != constants.TaskStatusRunning { + if taskStat.ResultCount == 0 { + go svc.Send(&s, args...) + } + } + } + } + + return nil, nil +} + +func (svr TaskServiceServer) GetSubscribeStream(taskId primitive.ObjectID) (stream grpc.TaskService_SubscribeServer, ok bool) { + taskServiceMutex.Lock() + defer taskServiceMutex.Unlock() + stream, ok = svr.subs[taskId] + return stream, ok +} + +func (svr TaskServiceServer) handleInsertData(taskId, spiderId primitive.ObjectID, msg *grpc.TaskServiceConnectRequest) (err error) { + var records []map[string]interface{} + err = json.Unmarshal(msg.Data, &records) + if err != nil { + svr.Errorf("error unmarshalling data: %v", err) + return err + } + for i := range records { + records[i][constants.TaskKey] = taskId + records[i][constants.SpiderKey] = spiderId + } + return svr.statsSvc.InsertData(taskId, records...) +} + +func (svr TaskServiceServer) handleInsertLogs(taskId primitive.ObjectID, msg *grpc.TaskServiceConnectRequest) (err error) { + var logs []string + err = json.Unmarshal(msg.Data, &logs) + if err != nil { + svr.Errorf("error unmarshalling logs: %v", err) + return err + } + return svr.statsSvc.InsertLogs(taskId, logs...) +} + +func (svr TaskServiceServer) saveTask(t *models.Task) (err error) { + t.SetUpdated(t.CreatedBy) + return service.NewModelService[models.Task]().ReplaceById(t.Id, *t) +} + +func newTaskServiceServer() *TaskServiceServer { + return &TaskServiceServer{ + cfgSvc: nodeconfig.GetNodeConfigService(), + subs: make(map[primitive.ObjectID]grpc.TaskService_SubscribeServer), + statsSvc: stats.GetTaskStatsService(), + Logger: utils.NewLogger("GrpcTaskServiceServer"), + } +} + +var _taskServiceServer *TaskServiceServer +var _taskServiceServerOnce sync.Once + +func GetTaskServiceServer() *TaskServiceServer { + _taskServiceServerOnce.Do(func() { + _taskServiceServer = newTaskServiceServer() + }) + return _taskServiceServer +} diff --git a/core/grpc/server/utils_handle.go b/core/grpc/server/utils_handle.go index d860360a3..26c276fb2 100644 --- a/core/grpc/server/utils_handle.go +++ b/core/grpc/server/utils_handle.go @@ -2,12 +2,15 @@ package server import ( "encoding/json" + "github.com/crawlab-team/crawlab/core/utils" "github.com/crawlab-team/crawlab/grpc" "github.com/crawlab-team/crawlab/trace" ) func HandleError(err error) (res *grpc.Response, err2 error) { - trace.PrintError(err) + if utils.IsDev() { + trace.PrintError(err) + } return &grpc.Response{ Code: grpc.ResponseCode_ERROR, Error: err.Error(), @@ -38,16 +41,3 @@ func HandleSuccessWithData(data interface{}) (res *grpc.Response, err error) { Data: bytes, }, nil } - -func HandleSuccessWithListData(data interface{}, total int) (res *grpc.Response, err error) { - bytes, err := json.Marshal(data) - if err != nil { - return HandleError(err) - } - return &grpc.Response{ - Code: grpc.ResponseCode_OK, - Message: "success", - Data: bytes, - Total: int64(total), - }, nil -} diff --git a/core/grpc/test/main_test.go b/core/grpc/test/main_test.go deleted file mode 100644 index 232a8c6e8..000000000 --- a/core/grpc/test/main_test.go +++ /dev/null @@ -1,7 +0,0 @@ -package test - -import "testing" - -func TestMain(m *testing.M) { - m.Run() -} diff --git a/core/grpc/test/model_base_service_server_test.go b/core/grpc/test/model_base_service_server_test.go deleted file mode 100644 index ad9b53724..000000000 --- a/core/grpc/test/model_base_service_server_test.go +++ /dev/null @@ -1,312 +0,0 @@ -package test - -import ( - "encoding/json" - "github.com/crawlab-team/crawlab/core/entity" - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/core/node/test" - "github.com/stretchr/testify/require" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" - mongo2 "go.mongodb.org/mongo-driver/mongo" - "testing" -) - -func TestModelBaseService_GetById(t *testing.T) { - var err error - - T, _ = NewTest() - T.Setup(t) - - // add - modelDelegateAdd(t) - p, err := test.T.ModelSvc.GetProject(bson.M{"name": "test-project"}, nil) - require.Nil(t, err) - - // get by id - ctx, cancel := T.Client.Context() - defer cancel() - req, err := T.Client.NewModelBaseServiceRequest(interfaces.ModelIdProject, &entity.GrpcBaseServiceParams{Id: p.Id}) - require.Nil(t, err) - res, err := T.Client.GetModelBaseServiceClient().GetById(ctx, req) - require.Nil(t, err) - var p2 models.Project - err = json.Unmarshal(res.Data, &p2) - require.Nil(t, err) - - // validate - require.Equal(t, p.Id, p2.Id) - require.Equal(t, p.Name, p2.Name) - require.Equal(t, p.Description, p2.Description) -} - -func TestModelBaseService_Get(t *testing.T) { - var err error - - T, _ = NewTest() - T.Setup(t) - - // add - modelDelegateAdd(t) - p, err := test.T.ModelSvc.GetProject(bson.M{"name": "test-project"}, nil) - require.Nil(t, err) - - // get - ctx, cancel := T.Client.Context() - defer cancel() - req, err := T.Client.NewModelBaseServiceRequest(interfaces.ModelIdProject, &entity.GrpcBaseServiceParams{Query: bson.M{"name": "test-project"}}) - require.Nil(t, err) - res, err := T.Client.GetModelBaseServiceClient().Get(ctx, req) - require.Nil(t, err) - var p2 models.Project - err = json.Unmarshal(res.Data, &p2) - require.Nil(t, err) - - // validate - require.Equal(t, p.Id, p2.Id) - require.Equal(t, p.Name, p2.Name) - require.Equal(t, p.Description, p2.Description) -} - -func TestModelBaseService_GetList(t *testing.T) { - var err error - - T, _ = NewTest() - T.Setup(t) - - // add - n := 10 - for i := 0; i < n; i++ { - modelDelegateAdd(t) - } - - // get list - ctx, cancel := T.Client.Context() - defer cancel() - req, err := T.Client.NewModelBaseServiceRequest(interfaces.ModelIdProject, &entity.GrpcBaseServiceParams{Query: bson.M{"name": "test-project"}}) - require.Nil(t, err) - res, err := T.Client.GetModelBaseServiceClient().GetList(ctx, req) - require.Nil(t, err) - var list []models.Project - err = json.Unmarshal(res.Data, &list) - require.Nil(t, err) - - // validate - require.Equal(t, n, len(list)) -} - -func TestModelBaseService_DeleteById(t *testing.T) { - var err error - - T, _ = NewTest() - T.Setup(t) - - // add - modelDelegateAdd(t) - p, err := test.T.ModelSvc.GetProject(bson.M{"name": "test-project"}, nil) - require.Nil(t, err) - - // delete by id - ctx, cancel := T.Client.Context() - defer cancel() - req, err := T.Client.NewModelBaseServiceRequest(interfaces.ModelIdProject, &entity.GrpcBaseServiceParams{Id: p.Id}) - require.Nil(t, err) - _, err = T.Client.GetModelBaseServiceClient().DeleteById(ctx, req) - require.Nil(t, err) - - // validate - p, err = test.T.ModelSvc.GetProjectById(p.Id) - require.Equal(t, mongo2.ErrNoDocuments, err) -} - -func TestModelBaseService_Delete(t *testing.T) { - var err error - - T, _ = NewTest() - T.Setup(t) - - // add - modelDelegateAdd(t) - p, err := test.T.ModelSvc.GetProject(bson.M{"name": "test-project"}, nil) - require.Nil(t, err) - - // delete by id - ctx, cancel := T.Client.Context() - defer cancel() - req, err := T.Client.NewModelBaseServiceRequest(interfaces.ModelIdProject, &entity.GrpcBaseServiceParams{Query: bson.M{"name": "test-project"}}) - require.Nil(t, err) - _, err = T.Client.GetModelBaseServiceClient().Delete(ctx, req) - require.Nil(t, err) - - // validate - p, err = test.T.ModelSvc.GetProjectById(p.Id) - require.Equal(t, mongo2.ErrNoDocuments, err) -} - -func TestModelBaseService_DeleteList(t *testing.T) { - var err error - - T, _ = NewTest() - T.Setup(t) - - // add - n := 10 - for i := 0; i < n; i++ { - modelDelegateAdd(t) - } - - // delete by id - ctx, cancel := T.Client.Context() - defer cancel() - req, err := T.Client.NewModelBaseServiceRequest(interfaces.ModelIdProject, &entity.GrpcBaseServiceParams{Query: bson.M{"name": "test-project"}}) - require.Nil(t, err) - _, err = T.Client.GetModelBaseServiceClient().DeleteList(ctx, req) - require.Nil(t, err) - - // validate - list, err := test.T.ModelSvc.GetProjectList(bson.M{"name": "test-project"}, nil) - require.Nil(t, err) - require.Equal(t, 0, len(list)) -} - -func TestModelBaseService_ForceDeleteList(t *testing.T) { - var err error - - T, _ = NewTest() - T.Setup(t) - - // add - n := 10 - for i := 0; i < n; i++ { - modelDelegateAdd(t) - } - - // delete by id - ctx, cancel := T.Client.Context() - defer cancel() - req, err := T.Client.NewModelBaseServiceRequest(interfaces.ModelIdProject, &entity.GrpcBaseServiceParams{Query: bson.M{"name": "test-project"}}) - require.Nil(t, err) - _, err = T.Client.GetModelBaseServiceClient().ForceDeleteList(ctx, req) - require.Nil(t, err) - - // validate - list, err := test.T.ModelSvc.GetProjectList(bson.M{"name": "test-project"}, nil) - require.Nil(t, err) - require.Equal(t, 0, len(list)) -} - -func TestModelBaseService_UpdateById(t *testing.T) { - var err error - - T, _ = NewTest() - T.Setup(t) - - // add - modelDelegateAdd(t) - p, err := test.T.ModelSvc.GetProject(bson.M{"name": "test-project"}, nil) - require.Nil(t, err) - - // update by id - ctx, cancel := T.Client.Context() - defer cancel() - update := bson.M{ - "name": "test-new-project", - } - req, err := T.Client.NewModelBaseServiceRequest(interfaces.ModelIdProject, &entity.GrpcBaseServiceParams{Id: p.Id, Update: update}) - require.Nil(t, err) - _, err = T.Client.GetModelBaseServiceClient().UpdateById(ctx, req) - require.Nil(t, err) - - // validate - p2, err := test.T.ModelSvc.GetProjectById(p.Id) - require.Nil(t, err) - require.Equal(t, "test-new-project", p2.Name) -} - -func TestModelBaseService_Update(t *testing.T) { - var err error - - T, _ = NewTest() - T.Setup(t) - - // add - n := 10 - for i := 0; i < n; i++ { - modelDelegateAdd(t) - } - - // update - ctx, cancel := T.Client.Context() - defer cancel() - update := bson.M{ - "name": "test-new-project", - } - req, err := T.Client.NewModelBaseServiceRequest(interfaces.ModelIdProject, &entity.GrpcBaseServiceParams{Query: bson.M{"name": "test-project"}, Update: update}) - require.Nil(t, err) - _, err = T.Client.GetModelBaseServiceClient().Update(ctx, req) - require.Nil(t, err) - - // validate - list, err := test.T.ModelSvc.GetProjectList(bson.M{"name": "test-project"}, nil) - require.Nil(t, err) - require.Equal(t, 0, len(list)) - list, err = test.T.ModelSvc.GetProjectList(bson.M{"name": "test-new-project"}, nil) - require.Nil(t, err) - require.Equal(t, n, len(list)) -} - -func TestModelBaseService_Insert(t *testing.T) { - var err error - - T, _ = NewTest() - T.Setup(t) - - // insert - var docs []interface{} - n := 10 - for i := 0; i < n; i++ { - docs = append(docs, models.Project{ - Id: primitive.NewObjectID(), - Name: "test-project", - }) - } - ctx, cancel := T.Client.Context() - defer cancel() - req, err := T.Client.NewModelBaseServiceRequest(interfaces.ModelIdProject, &entity.GrpcBaseServiceParams{Docs: docs}) - require.Nil(t, err) - _, err = T.Client.GetModelBaseServiceClient().Insert(ctx, req) - require.Nil(t, err) - - // validate - list, err := test.T.ModelSvc.GetProjectList(bson.M{"name": "test-project"}, nil) - require.Nil(t, err) - require.Equal(t, n, len(list)) -} - -func TestModelBaseService_Count(t *testing.T) { - var err error - - T, _ = NewTest() - T.Setup(t) - - // add - n := 10 - for i := 0; i < n; i++ { - modelDelegateAdd(t) - } - - // count - ctx, cancel := T.Client.Context() - defer cancel() - req, err := T.Client.NewModelBaseServiceRequest(interfaces.ModelIdProject, &entity.GrpcBaseServiceParams{Query: bson.M{"name": "test-project"}}) - require.Nil(t, err) - res, err := T.Client.GetModelBaseServiceClient().Count(ctx, req) - require.Nil(t, err) - - // validate - var total int - err = json.Unmarshal(res.Data, &total) - require.Nil(t, err) - require.Equal(t, n, total) -} diff --git a/core/grpc/test/model_delegate_server_test.go b/core/grpc/test/model_delegate_server_test.go deleted file mode 100644 index c761b9b68..000000000 --- a/core/grpc/test/model_delegate_server_test.go +++ /dev/null @@ -1,147 +0,0 @@ -package test - -import ( - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/models/client" - "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/core/node/test" - "github.com/stretchr/testify/require" - "go.mongodb.org/mongo-driver/bson" - mongo2 "go.mongodb.org/mongo-driver/mongo" - "testing" -) - -func TestModelDelegate_Do(t *testing.T) { - var err error - - T, _ = NewTest() - T.Setup(t) - - // add - modelDelegateAdd(t) - project, err := test.T.ModelSvc.GetProject(bson.M{"name": "test-project"}, nil) - require.Nil(t, err) - - // get artifact - a := modelDelegateGetArtifact(t) - require.Equal(t, project.GetId(), a.GetId()) - - // save - modelDelegateSave(t) - project, err = test.T.ModelSvc.GetProject(bson.M{"name": "test-new-project"}, nil) - require.Nil(t, err) - require.Equal(t, "test-new-project", project.Name) - require.Equal(t, "test-new-description", project.Description) - - // delete - modelDelegateDelete(t) - _, err = test.T.ModelSvc.GetProject(bson.M{"name": "test-new-project"}, nil) - require.Equal(t, mongo2.ErrNoDocuments, err) -} - -func TestModelDelegate_Do_All(t *testing.T) { - T, _ = NewTest() - T.Setup(t) - - // add - modelDelegateAddAll(t) - modelDelegateValidateAddAll(t) -} - -func modelDelegateAdd(t *testing.T) { - // modelDelegateAdd - project := &models.Project{ - Name: "test-project", - Description: "test-description", - } - projectD := client.NewModelDelegate(project, client.WithDelegateConfigPath(T.Client.GetConfigPath())) - err := projectD.Add() - require.Nil(t, err) -} - -func modelDelegateGetArtifact(t *testing.T) interfaces.ModelArtifact { - project, err := test.T.ModelSvc.GetProject(bson.M{"name": "test-project"}, nil) - require.Nil(t, err) - - projectD := client.NewModelDelegate(project, client.WithDelegateConfigPath(T.Client.GetConfigPath())) - a, err := projectD.GetArtifact() - require.Nil(t, err) - return a -} - -func modelDelegateSave(t *testing.T) { - project, err := test.T.ModelSvc.GetProject(bson.M{"name": "test-project"}, nil) - require.Nil(t, err) - - project.Name = "test-new-project" - project.Description = "test-new-description" - - projectD := client.NewModelDelegate(project, client.WithDelegateConfigPath(T.Client.GetConfigPath())) - err = projectD.Save() - require.Nil(t, err) -} - -func modelDelegateDelete(t *testing.T) { - project, err := test.T.ModelSvc.GetProject(bson.M{"name": "test-new-project"}, nil) - require.Nil(t, err) - - projectD := client.NewModelDelegate(project, client.WithDelegateConfigPath(T.Client.GetConfigPath())) - err = projectD.Delete() - require.Nil(t, err) -} - -func modelDelegateAddAll(t *testing.T) { - var err error - cfgOpt := client.WithDelegateConfigPath(T.Client.GetConfigPath()) - m := models.NewModelMap() - err = client.NewModelDelegate(&m.Tag, cfgOpt).Add() - require.Nil(t, err) - err = client.NewModelDelegate(&m.Node, cfgOpt).Add() - require.Nil(t, err) - err = client.NewModelDelegate(&m.Project, cfgOpt).Add() - require.Nil(t, err) - err = client.NewModelDelegate(&m.Spider, cfgOpt).Add() - require.Nil(t, err) - err = client.NewModelDelegate(&m.Task, cfgOpt).Add() - require.Nil(t, err) - err = client.NewModelDelegate(&m.Job, cfgOpt).Add() - require.Nil(t, err) - err = client.NewModelDelegate(&m.Schedule, cfgOpt).Add() - require.Nil(t, err) - err = client.NewModelDelegate(&m.User, cfgOpt).Add() - require.Nil(t, err) - err = client.NewModelDelegate(&m.Setting, cfgOpt).Add() - require.Nil(t, err) - err = client.NewModelDelegate(&m.Token, cfgOpt).Add() - require.Nil(t, err) - err = client.NewModelDelegate(&m.Variable, cfgOpt).Add() - require.Nil(t, err) - err = client.NewModelDelegate(&m.User, cfgOpt).Add() - require.Nil(t, err) -} - -func modelDelegateValidateAddAll(t *testing.T) { - var err error - _, err = test.T.ModelSvc.GetBaseService(interfaces.ModelIdNode).Get(bson.M{}, nil) - require.Nil(t, err) - _, err = test.T.ModelSvc.GetBaseService(interfaces.ModelIdNode).Get(bson.M{}, nil) - require.Nil(t, err) - _, err = test.T.ModelSvc.GetBaseService(interfaces.ModelIdNode).Get(bson.M{}, nil) - require.Nil(t, err) - _, err = test.T.ModelSvc.GetBaseService(interfaces.ModelIdNode).Get(bson.M{}, nil) - require.Nil(t, err) - _, err = test.T.ModelSvc.GetBaseService(interfaces.ModelIdNode).Get(bson.M{}, nil) - require.Nil(t, err) - _, err = test.T.ModelSvc.GetBaseService(interfaces.ModelIdNode).Get(bson.M{}, nil) - require.Nil(t, err) - _, err = test.T.ModelSvc.GetBaseService(interfaces.ModelIdNode).Get(bson.M{}, nil) - require.Nil(t, err) - _, err = test.T.ModelSvc.GetBaseService(interfaces.ModelIdNode).Get(bson.M{}, nil) - require.Nil(t, err) - _, err = test.T.ModelSvc.GetBaseService(interfaces.ModelIdNode).Get(bson.M{}, nil) - require.Nil(t, err) - _, err = test.T.ModelSvc.GetBaseService(interfaces.ModelIdNode).Get(bson.M{}, nil) - require.Nil(t, err) - _, err = test.T.ModelSvc.GetBaseService(interfaces.ModelIdNode).Get(bson.M{}, nil) - require.Nil(t, err) -} diff --git a/core/grpc/test/node_server_test.go b/core/grpc/test/node_server_test.go deleted file mode 100644 index de858bed9..000000000 --- a/core/grpc/test/node_server_test.go +++ /dev/null @@ -1,140 +0,0 @@ -package test - -import ( - "context" - "github.com/crawlab-team/crawlab/core/constants" - "github.com/crawlab-team/crawlab/core/models/delegate" - "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/core/node/test" - grpc "github.com/crawlab-team/crawlab/grpc" - "github.com/stretchr/testify/require" - "testing" - "time" -) - -func TestGrpcServer_Register(t *testing.T) { - var err error - - T, _ = NewTest() - T.Setup(t) - - // register - register(t) - - // validate - workerNodeKey := T.WorkerNodeInfo.Key - workerNode, err := test.T.ModelSvc.GetNodeByKey(workerNodeKey, nil) - require.Nil(t, err) - require.Equal(t, workerNodeKey, workerNode.Key) - require.Equal(t, constants.NodeStatusRegistered, workerNode.Status) -} - -func TestGrpcServer_Register_Existing(t *testing.T) { - var err error - - T, _ = NewTest() - T.Setup(t) - - // add to db - node := &models.Node{ - Key: T.WorkerNodeInfo.Key, - IsMaster: false, - Status: constants.NodeStatusUnregistered, - } - nodeD := delegate.NewModelDelegate(node) - err = nodeD.Add() - require.Nil(t, err) - - // register - register(t) - - // validate - workerNodeKey := T.WorkerNodeInfo.Key - workerNode, err := test.T.ModelSvc.GetNodeByKey(workerNodeKey, nil) - require.Nil(t, err) - require.Equal(t, workerNodeKey, workerNode.Key) - require.Equal(t, constants.NodeStatusRegistered, workerNode.Status) -} - -func TestGrpcServer_SendHeartbeat(t *testing.T) { - var err error - - T, _ = NewTest() - T.Setup(t) - - // register - register(t) - - // send heartbeat - sendHeartbeat(t) - - // validate - workerNodeKey := T.WorkerNodeInfo.Key - workerNode, err := test.T.ModelSvc.GetNodeByKey(workerNodeKey, nil) - require.Nil(t, err) - require.Equal(t, workerNodeKey, workerNode.Key) - require.Equal(t, constants.NodeStatusOnline, workerNode.Status) -} - -func TestGrpcServer_Subscribe(t *testing.T) { - var err error - - T, _ = NewTest() - T.Setup(t) - - // register - register(t) - - // handle client message - go handleClientMessage(t) - - time.Sleep(1 * time.Second) - - // server PING client - sub, err := T.Server.GetSubscribe("node:" + T.WorkerNodeInfo.Key) - require.Nil(t, err) - require.NotNil(t, sub) - err = sub.GetStream().Send(&grpc.StreamMessage{ - Code: grpc.StreamMessageCode_PING, - NodeKey: T.MasterNodeInfo.Key, - }) - require.Nil(t, err) - - // wait - time.Sleep(1 * time.Second) - - // validate - workerNode, err := test.T.ModelSvc.GetNodeByKey(T.WorkerNodeInfo.Key, nil) - require.Nil(t, err) - require.Equal(t, constants.NodeStatusOnline, workerNode.Status) -} - -func register(t *testing.T) { - ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) - defer cancel() - res, err := T.Client.GetNodeClient().Register(ctx, T.Client.NewRequest(T.WorkerNodeInfo)) - require.Nil(t, err) - require.Equal(t, grpc.ResponseCode_OK, res.Code) -} - -func sendHeartbeat(t *testing.T) { - ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) - defer cancel() - res, err := T.Client.GetNodeClient().SendHeartbeat(ctx, T.Client.NewRequest(T.WorkerNodeInfo)) - require.Nil(t, err) - require.Equal(t, grpc.ResponseCode_OK, res.Code) -} - -func handleClientMessage(t *testing.T) { - msgCh := T.Client.GetMessageChannel() - for { - msg := <-msgCh - switch msg.Code { - case grpc.StreamMessageCode_PING: - require.Equal(t, T.MasterNodeInfo.Key, msg.NodeKey) - res, err := T.Client.GetNodeClient().SendHeartbeat(context.Background(), T.Client.NewRequest(T.WorkerNodeInfo)) - require.Nil(t, err) - require.NotNil(t, res) - } - } -} diff --git a/core/i18n/service.go b/core/i18n/service.go deleted file mode 100644 index ac7174756..000000000 --- a/core/i18n/service.go +++ /dev/null @@ -1,43 +0,0 @@ -package i18n - -import "github.com/crawlab-team/crawlab/core/interfaces" - -var translations []interfaces.Translation - -var _svc interfaces.I18nService - -type Service struct { -} - -func (svc *Service) AddTranslations(t []interfaces.Translation) { - translations = append(translations, t...) -} - -func (svc *Service) GetTranslations() (t []interfaces.Translation) { - return translations -} - -func GetI18nService(cfgPath string) (svc2 interfaces.I18nService, err error) { - if _svc != nil { - return _svc, nil - } - - _svc, err = NewI18nService() - if err != nil { - return nil, err - } - - return _svc, nil -} - -func ProvideGetI18nService(cfgPath string) func() (svc interfaces.I18nService, err error) { - return func() (svc interfaces.I18nService, err error) { - return GetI18nService(cfgPath) - } -} - -func NewI18nService() (svc2 interfaces.I18nService, err error) { - svc := &Service{} - - return svc, nil -} diff --git a/core/interfaces/color.go b/core/interfaces/color.go deleted file mode 100644 index 7f10fbc51..000000000 --- a/core/interfaces/color.go +++ /dev/null @@ -1,7 +0,0 @@ -package interfaces - -type Color interface { - Entity - GetHex() string - GetName() string -} diff --git a/core/interfaces/color_service.go b/core/interfaces/color_service.go deleted file mode 100644 index 68bba285c..000000000 --- a/core/interfaces/color_service.go +++ /dev/null @@ -1,7 +0,0 @@ -package interfaces - -type ColorService interface { - Injectable - GetByName(name string) (res Color, err error) - GetRandom() (res Color, err error) -} diff --git a/core/interfaces/controller_params.go b/core/interfaces/controller_params.go deleted file mode 100644 index 986af8922..000000000 --- a/core/interfaces/controller_params.go +++ /dev/null @@ -1,6 +0,0 @@ -package interfaces - -type ControllerParams interface { - IsZero() (ok bool) - IsDefault() (ok bool) -} diff --git a/core/interfaces/data_source_service.go b/core/interfaces/data_source_service.go deleted file mode 100644 index f5309dfa8..000000000 --- a/core/interfaces/data_source_service.go +++ /dev/null @@ -1,14 +0,0 @@ -package interfaces - -import ( - "go.mongodb.org/mongo-driver/bson/primitive" - "time" -) - -type DataSourceService interface { - ChangePassword(id primitive.ObjectID, password string) (err error) - Monitor() - CheckStatus(id primitive.ObjectID) (err error) - SetTimeout(duration time.Duration) - SetMonitorInterval(duration time.Duration) -} diff --git a/core/interfaces/dependency_installer_service.go b/core/interfaces/dependency_installer_service.go new file mode 100644 index 000000000..faa832b5a --- /dev/null +++ b/core/interfaces/dependency_installer_service.go @@ -0,0 +1,11 @@ +package interfaces + +import ( + "go.mongodb.org/mongo-driver/bson/primitive" + "os/exec" +) + +type DependencyInstallerService interface { + IsAutoInstallEnabled() (enabled bool) + GetInstallDependencyRequirementsCmdBySpiderId(id primitive.ObjectID) (cmd *exec.Cmd, err error) +} diff --git a/core/interfaces/event_data.go b/core/interfaces/event_data.go deleted file mode 100644 index 12f790ea6..000000000 --- a/core/interfaces/event_data.go +++ /dev/null @@ -1,6 +0,0 @@ -package interfaces - -type EventData interface { - GetEvent() string - GetData() interface{} -} diff --git a/core/interfaces/event_service.go b/core/interfaces/event_service.go deleted file mode 100644 index 35bf05053..000000000 --- a/core/interfaces/event_service.go +++ /dev/null @@ -1,9 +0,0 @@ -package interfaces - -type EventFn func(data ...interface{}) (err error) - -type EventService interface { - Register(key, include, exclude string, ch *chan EventData) - Unregister(key string) - SendEvent(eventName string, data ...interface{}) -} diff --git a/core/interfaces/fs_service.go b/core/interfaces/fs_service.go index 001e978d5..5121e027d 100644 --- a/core/interfaces/fs_service.go +++ b/core/interfaces/fs_service.go @@ -1,28 +1,13 @@ package interfaces -import ( - cfs "github.com/crawlab-team/crawlab/fs" - vcs "github.com/crawlab-team/crawlab/vcs" -) - type FsService interface { - WithConfigPath - List(path string, opts ...ServiceCrudOption) (files []FsFileInfo, err error) - GetFile(path string, opts ...ServiceCrudOption) (data []byte, err error) - GetFileInfo(path string, opts ...ServiceCrudOption) (file FsFileInfo, err error) - Save(path string, data []byte, opts ...ServiceCrudOption) (err error) - Rename(path, newPath string, opts ...ServiceCrudOption) (err error) - Delete(path string, opts ...ServiceCrudOption) (err error) - Copy(path, newPath string, opts ...ServiceCrudOption) (err error) - Commit(msg string) (err error) - SyncToFs(opts ...ServiceCrudOption) (err error) - SyncToWorkspace() (err error) - GetFsPath() (path string) - SetFsPath(path string) - GetWorkspacePath() (path string) - SetWorkspacePath(path string) - GetRepoPath() (path string) - SetRepoPath(path string) - GetFs() (fs cfs.Manager) - GetGitClient() (c *vcs.GitClient) + List(path string) (files []FsFileInfo, err error) + GetFile(path string) (data []byte, err error) + GetFileInfo(path string) (file FsFileInfo, err error) + Save(path string, data []byte) (err error) + CreateDir(path string) (err error) + Rename(path, newPath string) (err error) + Delete(path string) (err error) + Copy(path, newPath string) (err error) + Export() (resultPath string, err error) } diff --git a/core/interfaces/fs_service_options.go b/core/interfaces/fs_service_options.go deleted file mode 100644 index fa50f8b3b..000000000 --- a/core/interfaces/fs_service_options.go +++ /dev/null @@ -1,21 +0,0 @@ -package interfaces - -type ServiceCrudOptions struct { - IsAbsolute bool // whether the path is absolute - OnlyFromWorkspace bool // whether only sync from workspace - NotSyncToWorkspace bool // whether not sync to workspace -} - -type ServiceCrudOption func(o *ServiceCrudOptions) - -func WithOnlyFromWorkspace() ServiceCrudOption { - return func(o *ServiceCrudOptions) { - o.OnlyFromWorkspace = true - } -} - -func WithNotSyncToWorkspace() ServiceCrudOption { - return func(o *ServiceCrudOptions) { - o.NotSyncToWorkspace = true - } -} diff --git a/core/interfaces/fs_service_v2.go b/core/interfaces/fs_service_v2.go deleted file mode 100644 index 533a9d6b6..000000000 --- a/core/interfaces/fs_service_v2.go +++ /dev/null @@ -1,13 +0,0 @@ -package interfaces - -type FsServiceV2 interface { - List(path string) (files []FsFileInfo, err error) - GetFile(path string) (data []byte, err error) - GetFileInfo(path string) (file FsFileInfo, err error) - Save(path string, data []byte) (err error) - CreateDir(path string) (err error) - Rename(path, newPath string) (err error) - Delete(path string) (err error) - Copy(path, newPath string) (err error) - Export() (resultPath string, err error) -} diff --git a/core/interfaces/grpc_base.go b/core/interfaces/grpc_base.go deleted file mode 100644 index 4ab5f5464..000000000 --- a/core/interfaces/grpc_base.go +++ /dev/null @@ -1,9 +0,0 @@ -package interfaces - -type GrpcBase interface { - WithConfigPath - Init() (err error) - Start() (err error) - Stop() (err error) - Register() (err error) -} diff --git a/core/interfaces/grpc_base_service_params.go b/core/interfaces/grpc_base_service_params.go deleted file mode 100644 index 239c1b6ce..000000000 --- a/core/interfaces/grpc_base_service_params.go +++ /dev/null @@ -1,5 +0,0 @@ -package interfaces - -type GrpcBaseServiceParams interface { - Entity -} diff --git a/core/interfaces/grpc_client.go b/core/interfaces/grpc_client.go deleted file mode 100644 index 12fa2e901..000000000 --- a/core/interfaces/grpc_client.go +++ /dev/null @@ -1,30 +0,0 @@ -package interfaces - -import ( - "context" - grpc "github.com/crawlab-team/crawlab/grpc" - "time" -) - -type GrpcClient interface { - GrpcBase - WithConfigPath - GetModelDelegateClient() grpc.ModelDelegateClient - GetModelBaseServiceClient() grpc.ModelBaseServiceClient - GetNodeClient() grpc.NodeServiceClient - GetTaskClient() grpc.TaskServiceClient - GetMessageClient() grpc.MessageServiceClient - SetAddress(Address) - SetTimeout(time.Duration) - SetSubscribeType(string) - SetHandleMessage(bool) - Context() (context.Context, context.CancelFunc) - NewRequest(interface{}) *grpc.Request - GetMessageChannel() chan *grpc.StreamMessage - Restart() error - NewModelBaseServiceRequest(ModelId, GrpcBaseServiceParams) (*grpc.Request, error) - IsStarted() bool - IsClosed() bool - Err() error - GetStream() grpc.NodeService_SubscribeClient -} diff --git a/core/interfaces/grpc_client_model_base_service.go b/core/interfaces/grpc_client_model_base_service.go deleted file mode 100644 index 87b702e41..000000000 --- a/core/interfaces/grpc_client_model_base_service.go +++ /dev/null @@ -1,7 +0,0 @@ -package interfaces - -type GrpcClientModelBaseService interface { - WithModelId - WithConfigPath - ModelBaseService -} diff --git a/core/interfaces/grpc_client_model_delegate.go b/core/interfaces/grpc_client_model_delegate.go deleted file mode 100644 index b45e9e2c5..000000000 --- a/core/interfaces/grpc_client_model_delegate.go +++ /dev/null @@ -1,7 +0,0 @@ -package interfaces - -type GrpcClientModelDelegate interface { - ModelDelegate - WithConfigPath - Close() error -} diff --git a/core/interfaces/grpc_client_model_environment_service.go b/core/interfaces/grpc_client_model_environment_service.go deleted file mode 100644 index d8276d69f..000000000 --- a/core/interfaces/grpc_client_model_environment_service.go +++ /dev/null @@ -1,14 +0,0 @@ -package interfaces - -import ( - "github.com/crawlab-team/crawlab/db/mongo" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -type GrpcClientModelEnvironmentService interface { - ModelBaseService - GetEnvironmentById(id primitive.ObjectID) (s Environment, err error) - GetEnvironment(query bson.M, opts *mongo.FindOptions) (s Environment, err error) - GetEnvironmentList(query bson.M, opts *mongo.FindOptions) (res []Environment, err error) -} diff --git a/core/interfaces/grpc_client_model_node_service.go b/core/interfaces/grpc_client_model_node_service.go deleted file mode 100644 index e3168941b..000000000 --- a/core/interfaces/grpc_client_model_node_service.go +++ /dev/null @@ -1,15 +0,0 @@ -package interfaces - -import ( - "github.com/crawlab-team/crawlab/db/mongo" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -type GrpcClientModelNodeService interface { - ModelBaseService - GetNodeById(id primitive.ObjectID) (n Node, err error) - GetNode(query bson.M, opts *mongo.FindOptions) (n Node, err error) - GetNodeByKey(key string) (n Node, err error) - GetNodeList(query bson.M, opts *mongo.FindOptions) (res []Node, err error) -} diff --git a/core/interfaces/grpc_client_model_service.go b/core/interfaces/grpc_client_model_service.go deleted file mode 100644 index 9e79c96f0..000000000 --- a/core/interfaces/grpc_client_model_service.go +++ /dev/null @@ -1,6 +0,0 @@ -package interfaces - -type GrpcClientModelService interface { - WithConfigPath - NewBaseServiceDelegate(id ModelId) (GrpcClientModelBaseService, error) -} diff --git a/core/interfaces/grpc_client_model_spider_service.go b/core/interfaces/grpc_client_model_spider_service.go deleted file mode 100644 index de0a993c2..000000000 --- a/core/interfaces/grpc_client_model_spider_service.go +++ /dev/null @@ -1,14 +0,0 @@ -package interfaces - -import ( - "github.com/crawlab-team/crawlab/db/mongo" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -type GrpcClientModelSpiderService interface { - ModelBaseService - GetSpiderById(id primitive.ObjectID) (s Spider, err error) - GetSpider(query bson.M, opts *mongo.FindOptions) (s Spider, err error) - GetSpiderList(query bson.M, opts *mongo.FindOptions) (res []Spider, err error) -} diff --git a/core/interfaces/grpc_client_model_task_service.go b/core/interfaces/grpc_client_model_task_service.go deleted file mode 100644 index cabeb81cb..000000000 --- a/core/interfaces/grpc_client_model_task_service.go +++ /dev/null @@ -1,14 +0,0 @@ -package interfaces - -import ( - "github.com/crawlab-team/crawlab/db/mongo" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -type GrpcClientModelTaskService interface { - ModelBaseService - GetTaskById(id primitive.ObjectID) (s Task, err error) - GetTask(query bson.M, opts *mongo.FindOptions) (s Task, err error) - GetTaskList(query bson.M, opts *mongo.FindOptions) (res []Task, err error) -} diff --git a/core/interfaces/grpc_client_model_task_stat_service.go b/core/interfaces/grpc_client_model_task_stat_service.go deleted file mode 100644 index ded7ee192..000000000 --- a/core/interfaces/grpc_client_model_task_stat_service.go +++ /dev/null @@ -1,14 +0,0 @@ -package interfaces - -import ( - "github.com/crawlab-team/crawlab/db/mongo" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -type GrpcClientModelTaskStatService interface { - ModelBaseService - GetTaskStatById(id primitive.ObjectID) (s TaskStat, err error) - GetTaskStat(query bson.M, opts *mongo.FindOptions) (s TaskStat, err error) - GetTaskStatList(query bson.M, opts *mongo.FindOptions) (res []TaskStat, err error) -} diff --git a/core/interfaces/grpc_client_pool.go b/core/interfaces/grpc_client_pool.go deleted file mode 100644 index 7294daf04..000000000 --- a/core/interfaces/grpc_client_pool.go +++ /dev/null @@ -1,9 +0,0 @@ -package interfaces - -type GrpcClientPool interface { - WithConfigPath - Init() error - NewClient() error - GetClient() (GrpcClient, error) - SetSize(int) -} diff --git a/core/interfaces/grpc_model_base_service_message.go b/core/interfaces/grpc_model_base_service_message.go deleted file mode 100644 index 3df2d296c..000000000 --- a/core/interfaces/grpc_model_base_service_message.go +++ /dev/null @@ -1,7 +0,0 @@ -package interfaces - -type GrpcModelBaseServiceMessage interface { - GetModelId() ModelId - GetData() []byte - ToBytes() (data []byte) -} diff --git a/core/interfaces/grpc_model_binder.go b/core/interfaces/grpc_model_binder.go deleted file mode 100644 index 695b370b3..000000000 --- a/core/interfaces/grpc_model_binder.go +++ /dev/null @@ -1,5 +0,0 @@ -package interfaces - -type GrpcModelBinder interface { - ModelBinder -} diff --git a/core/interfaces/grpc_model_delegate_message.go b/core/interfaces/grpc_model_delegate_message.go deleted file mode 100644 index dd24e129a..000000000 --- a/core/interfaces/grpc_model_delegate_message.go +++ /dev/null @@ -1,8 +0,0 @@ -package interfaces - -type GrpcModelDelegateMessage interface { - GetModelId() ModelId - GetMethod() ModelDelegateMethod - GetData() []byte - ToBytes() (data []byte) -} diff --git a/core/interfaces/grpc_model_list_binder.go b/core/interfaces/grpc_model_list_binder.go deleted file mode 100644 index ed96892d1..000000000 --- a/core/interfaces/grpc_model_list_binder.go +++ /dev/null @@ -1,5 +0,0 @@ -package interfaces - -type GrpcModelListBinder interface { - ModelListBinder -} diff --git a/core/interfaces/grpc_server.go b/core/interfaces/grpc_server.go deleted file mode 100644 index 440a7b3c9..000000000 --- a/core/interfaces/grpc_server.go +++ /dev/null @@ -1,16 +0,0 @@ -package interfaces - -import ( - grpc "github.com/crawlab-team/crawlab/grpc" -) - -type GrpcServer interface { - GrpcBase - SetAddress(Address) - GetSubscribe(key string) (sub GrpcSubscribe, err error) - SetSubscribe(key string, sub GrpcSubscribe) - DeleteSubscribe(key string) - SendStreamMessage(key string, code grpc.StreamMessageCode) (err error) - SendStreamMessageWithData(nodeKey string, code grpc.StreamMessageCode, d interface{}) (err error) - IsStopped() (res bool) -} diff --git a/core/interfaces/grpc_stream.go b/core/interfaces/grpc_stream.go deleted file mode 100644 index 3b87e7262..000000000 --- a/core/interfaces/grpc_stream.go +++ /dev/null @@ -1,12 +0,0 @@ -package interfaces - -import grpc "github.com/crawlab-team/crawlab/grpc" - -type GrpcStream interface { - Send(msg *grpc.StreamMessage) (err error) -} - -type GrpcStreamBidirectional interface { - GrpcStream - Recv() (msg *grpc.StreamMessage, err error) -} diff --git a/core/interfaces/grpc_subscribe.go b/core/interfaces/grpc_subscribe.go deleted file mode 100644 index fcbb92773..000000000 --- a/core/interfaces/grpc_subscribe.go +++ /dev/null @@ -1,7 +0,0 @@ -package interfaces - -type GrpcSubscribe interface { - GetStream() GrpcStream - GetStreamBidirectional() GrpcStreamBidirectional - GetFinished() chan bool -} diff --git a/core/interfaces/i18n_service.go b/core/interfaces/i18n_service.go deleted file mode 100644 index 9436092ae..000000000 --- a/core/interfaces/i18n_service.go +++ /dev/null @@ -1,6 +0,0 @@ -package interfaces - -type I18nService interface { - AddTranslations(t []Translation) - GetTranslations() (t []Translation) -} diff --git a/core/interfaces/injectable.go b/core/interfaces/injectable.go deleted file mode 100644 index 4ec79ad5d..000000000 --- a/core/interfaces/injectable.go +++ /dev/null @@ -1,5 +0,0 @@ -package interfaces - -type Injectable interface { - Inject() error -} diff --git a/core/interfaces/list.go b/core/interfaces/list.go deleted file mode 100644 index 7c5c08aab..000000000 --- a/core/interfaces/list.go +++ /dev/null @@ -1,5 +0,0 @@ -package interfaces - -type List interface { - GetModels() (res []Model) -} diff --git a/core/interfaces/logger.go b/core/interfaces/logger.go new file mode 100644 index 000000000..08381cd66 --- /dev/null +++ b/core/interfaces/logger.go @@ -0,0 +1,34 @@ +package interfaces + +// Logger interface for reporting informational and warning messages. +type Logger interface { + // Debug logs a debugging message. + Debug(message string) + + // Info logs an informational message. + Info(message string) + + // Warn logs a warning message. + Warn(message string) + + // Error logs an error message. + Error(message string) + + // Fatal logs a fatal message. + Fatal(message string) + + // Debugf logs a formatted debugging message. + Debugf(format string, args ...interface{}) + + // Infof logs a formatted informational message. + Infof(format string, args ...interface{}) + + // Warnf logs a formatted warning message. + Warnf(format string, args ...interface{}) + + // Errorf logs a formatted error message. + Errorf(format string, args ...interface{}) + + // Fatalf logs a formatted fatal message. + Fatalf(format string, args ...interface{}) +} diff --git a/core/interfaces/model.go b/core/interfaces/model.go index bcbc6f7b6..ed7ec822d 100644 --- a/core/interfaces/model.go +++ b/core/interfaces/model.go @@ -7,92 +7,6 @@ import ( type Model interface { GetId() (id primitive.ObjectID) SetId(id primitive.ObjectID) -} - -type ModelV2 interface { - GetId() (id primitive.ObjectID) - SetId(id primitive.ObjectID) SetCreated(by primitive.ObjectID) SetUpdated(by primitive.ObjectID) } - -type ModelId int - -const ( - ModelIdArtifact = iota - ModelIdTag - ModelIdNode - ModelIdProject - ModelIdSpider - ModelIdTask - ModelIdJob - ModelIdSchedule - ModelIdUser - ModelIdSetting - ModelIdToken - ModelIdVariable - ModelIdTaskQueue - ModelIdTaskStat - ModelIdSpiderStat - ModelIdDataSource - ModelIdDataCollection - ModelIdResult - ModelIdPassword - ModelIdExtraValue - ModelIdGit - ModelIdRole - ModelIdUserRole - ModelIdPermission - ModelIdRolePermission - ModelIdEnvironment - ModelIdDependencySetting -) - -const ( - ModelColNameArtifact = "artifacts" - ModelColNameTag = "tags" - ModelColNameNode = "nodes" - ModelColNameProject = "projects" - ModelColNameSpider = "spiders" - ModelColNameTask = "tasks" - ModelColNameJob = "jobs" - ModelColNameSchedule = "schedules" - ModelColNameUser = "users" - ModelColNameSetting = "settings" - ModelColNameToken = "tokens" - ModelColNameVariable = "variables" - ModelColNameTaskQueue = "task_queue" - ModelColNameTaskStat = "task_stats" - ModelColNameSpiderStat = "spider_stats" - ModelColNameDataSource = "data_sources" - ModelColNameDataCollection = "data_collections" - ModelColNamePasswords = "passwords" - ModelColNameExtraValues = "extra_values" - ModelColNameGit = "gits" - ModelColNameRole = "roles" - ModelColNameUserRole = "user_roles" - ModelColNamePermission = "permissions" - ModelColNameRolePermission = "role_permissions" - ModelColNameEnvironment = "environments" - ModelColNameDependencySetting = "dependency_settings" -) - -type ModelWithTags interface { - Model - SetTags(tags []Tag) - GetTags() (tags []Tag) -} - -type ModelWithNameDescription interface { - Model - GetName() (name string) - SetName(name string) - GetDescription() (description string) - SetDescription(description string) -} - -type ModelWithKey interface { - Model - GetKey() (key string) - SetKey(key string) -} diff --git a/core/interfaces/model_artifact.go b/core/interfaces/model_artifact.go deleted file mode 100644 index 297c08536..000000000 --- a/core/interfaces/model_artifact.go +++ /dev/null @@ -1,12 +0,0 @@ -package interfaces - -import "go.mongodb.org/mongo-driver/bson/primitive" - -type ModelArtifact interface { - Model - GetSys() (sys ModelArtifactSys) - GetTagIds() (ids []primitive.ObjectID) - SetTagIds(ids []primitive.ObjectID) - SetObj(obj Model) - SetDel(del bool) -} diff --git a/core/interfaces/model_artifact_sys.go b/core/interfaces/model_artifact_sys.go deleted file mode 100644 index 3c2e10115..000000000 --- a/core/interfaces/model_artifact_sys.go +++ /dev/null @@ -1,21 +0,0 @@ -package interfaces - -import ( - "go.mongodb.org/mongo-driver/bson/primitive" - "time" -) - -type ModelArtifactSys interface { - GetCreateTs() time.Time - SetCreateTs(ts time.Time) - GetUpdateTs() time.Time - SetUpdateTs(ts time.Time) - GetDeleteTs() time.Time - SetDeleteTs(ts time.Time) - GetCreateUid() primitive.ObjectID - SetCreateUid(id primitive.ObjectID) - GetUpdateUid() primitive.ObjectID - SetUpdateUid(id primitive.ObjectID) - GetDeleteUid() primitive.ObjectID - SetDeleteUid(id primitive.ObjectID) -} diff --git a/core/interfaces/model_base_service.go b/core/interfaces/model_base_service.go deleted file mode 100644 index f3062b5e7..000000000 --- a/core/interfaces/model_base_service.go +++ /dev/null @@ -1,28 +0,0 @@ -package interfaces - -import ( - "github.com/crawlab-team/crawlab/db/mongo" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -type ModelBaseService interface { - GetModelId() (id ModelId) - SetModelId(id ModelId) - GetById(id primitive.ObjectID) (res Model, err error) - Get(query bson.M, opts *mongo.FindOptions) (res Model, err error) - GetList(query bson.M, opts *mongo.FindOptions) (res List, err error) - DeleteById(id primitive.ObjectID, args ...interface{}) (err error) - Delete(query bson.M, args ...interface{}) (err error) - DeleteList(query bson.M, args ...interface{}) (err error) - ForceDeleteList(query bson.M, args ...interface{}) (err error) - UpdateById(id primitive.ObjectID, update bson.M, args ...interface{}) (err error) - Update(query bson.M, update bson.M, fields []string, args ...interface{}) (err error) - UpdateDoc(query bson.M, doc Model, fields []string, args ...interface{}) (err error) - Insert(u User, docs ...interface{}) (err error) - Count(query bson.M) (total int, err error) -} - -type ModelService interface { - GetBaseService(id ModelId) (svc ModelBaseService) -} diff --git a/core/interfaces/model_binder.go b/core/interfaces/model_binder.go deleted file mode 100644 index 1fda66721..000000000 --- a/core/interfaces/model_binder.go +++ /dev/null @@ -1,6 +0,0 @@ -package interfaces - -type ModelBinder interface { - Bind() (res Model, err error) - Process(d Model) (res Model, err error) -} diff --git a/core/interfaces/model_delegate.go b/core/interfaces/model_delegate.go deleted file mode 100644 index 5224d5790..000000000 --- a/core/interfaces/model_delegate.go +++ /dev/null @@ -1,22 +0,0 @@ -package interfaces - -type ModelDelegateMethod string - -type ModelDelegate interface { - Add() error - Save() error - Delete() error - GetArtifact() (ModelArtifact, error) - GetModel() Model - Refresh() error - ToBytes(interface{}) ([]byte, error) -} - -const ( - ModelDelegateMethodAdd = "add" - ModelDelegateMethodSave = "save" - ModelDelegateMethodDelete = "delete" - ModelDelegateMethodGetArtifact = "get-artifact" - ModelDelegateMethodRefresh = "refresh" - ModelDelegateMethodChange = "change" -) diff --git a/core/interfaces/model_environment.go b/core/interfaces/model_environment.go deleted file mode 100644 index 121d7d0db..000000000 --- a/core/interfaces/model_environment.go +++ /dev/null @@ -1,9 +0,0 @@ -package interfaces - -type Environment interface { - Model - GetKey() (key string) - SetKey(key string) - GetValue() (value string) - SetValue(value string) -} diff --git a/core/interfaces/model_extra_value.go b/core/interfaces/model_extra_value.go deleted file mode 100644 index a3889976e..000000000 --- a/core/interfaces/model_extra_value.go +++ /dev/null @@ -1,17 +0,0 @@ -package interfaces - -import ( - "go.mongodb.org/mongo-driver/bson/primitive" -) - -type ExtraValue interface { - Model - GetValue() (v interface{}) - SetValue(v interface{}) - GetObjectId() (oid primitive.ObjectID) - SetObjectId(oid primitive.ObjectID) - GetModel() (m string) - SetModel(m string) - GetType() (t string) - SetType(t string) -} diff --git a/core/interfaces/model_git.go b/core/interfaces/model_git.go deleted file mode 100644 index e24eb06c1..000000000 --- a/core/interfaces/model_git.go +++ /dev/null @@ -1,18 +0,0 @@ -package interfaces - -// Git interface -type Git interface { - Model - GetUrl() (url string) - SetUrl(url string) - GetAuthType() (authType string) - SetAuthType(authType string) - GetUsername() (username string) - SetUsername(username string) - GetPassword() (password string) - SetPassword(password string) - GetCurrentBranch() (currentBranch string) - SetCurrentBranch(currentBranch string) - GetAutoPull() (autoPull bool) - SetAutoPull(autoPull bool) -} diff --git a/core/interfaces/model_list_binder.go b/core/interfaces/model_list_binder.go deleted file mode 100644 index d05ba94c8..000000000 --- a/core/interfaces/model_list_binder.go +++ /dev/null @@ -1,6 +0,0 @@ -package interfaces - -type ModelListBinder interface { - Bind() (l List, err error) - Process(d interface{}) (l List, err error) -} diff --git a/core/interfaces/model_node.go b/core/interfaces/model_node.go deleted file mode 100644 index bf9046605..000000000 --- a/core/interfaces/model_node.go +++ /dev/null @@ -1,22 +0,0 @@ -package interfaces - -import "time" - -type Node interface { - ModelWithNameDescription - GetKey() (key string) - GetIsMaster() (ok bool) - GetActive() (active bool) - SetActive(active bool) - SetActiveTs(activeTs time.Time) - GetStatus() (status string) - SetStatus(status string) - GetEnabled() (enabled bool) - SetEnabled(enabled bool) - GetAvailableRunners() (runners int) - SetAvailableRunners(runners int) - GetMaxRunners() (runners int) - SetMaxRunners(runners int) - IncrementAvailableRunners() - DecrementAvailableRunners() -} diff --git a/core/interfaces/model_node_delegate.go b/core/interfaces/model_node_delegate.go deleted file mode 100644 index 11272fbb5..000000000 --- a/core/interfaces/model_node_delegate.go +++ /dev/null @@ -1,10 +0,0 @@ -package interfaces - -import "time" - -type ModelNodeDelegate interface { - ModelDelegate - UpdateStatus(active bool, activeTs *time.Time, status string) (err error) - UpdateStatusOnline() (err error) - UpdateStatusOffline() (err error) -} diff --git a/core/interfaces/model_permission.go b/core/interfaces/model_permission.go deleted file mode 100644 index 99b4e7462..000000000 --- a/core/interfaces/model_permission.go +++ /dev/null @@ -1,14 +0,0 @@ -package interfaces - -type Permission interface { - ModelWithKey - ModelWithNameDescription - GetType() (t string) - SetType(t string) - GetTarget() (target []string) - SetTarget(target []string) - GetAllow() (allow []string) - SetAllow(allow []string) - GetDeny() (deny []string) - SetDeny(deny []string) -} diff --git a/core/interfaces/model_result.go b/core/interfaces/model_result.go deleted file mode 100644 index 91e349e36..000000000 --- a/core/interfaces/model_result.go +++ /dev/null @@ -1,11 +0,0 @@ -package interfaces - -import "go.mongodb.org/mongo-driver/bson/primitive" - -type Result interface { - Value() map[string]interface{} - SetValue(key string, value interface{}) - GetValue(key string) (value interface{}) - GetTaskId() (id primitive.ObjectID) - SetTaskId(id primitive.ObjectID) -} diff --git a/core/interfaces/model_role.go b/core/interfaces/model_role.go deleted file mode 100644 index efcc085ec..000000000 --- a/core/interfaces/model_role.go +++ /dev/null @@ -1,6 +0,0 @@ -package interfaces - -type Role interface { - ModelWithKey - ModelWithNameDescription -} diff --git a/core/interfaces/model_schedule.go b/core/interfaces/model_schedule.go deleted file mode 100644 index ec805472e..000000000 --- a/core/interfaces/model_schedule.go +++ /dev/null @@ -1,28 +0,0 @@ -package interfaces - -import ( - "github.com/robfig/cron/v3" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -type Schedule interface { - Model - GetEnabled() (enabled bool) - SetEnabled(enabled bool) - GetEntryId() (id cron.EntryID) - SetEntryId(id cron.EntryID) - GetCron() (c string) - SetCron(c string) - GetSpiderId() (id primitive.ObjectID) - SetSpiderId(id primitive.ObjectID) - GetMode() (mode string) - SetMode(mode string) - GetNodeIds() (ids []primitive.ObjectID) - SetNodeIds(ids []primitive.ObjectID) - GetCmd() (cmd string) - SetCmd(cmd string) - GetParam() (param string) - SetParam(param string) - GetPriority() (p int) - SetPriority(p int) -} diff --git a/core/interfaces/model_service_v2.go b/core/interfaces/model_service_v2.go deleted file mode 100644 index 723de9539..000000000 --- a/core/interfaces/model_service_v2.go +++ /dev/null @@ -1,25 +0,0 @@ -package interfaces - -import ( - "github.com/crawlab-team/crawlab/db/mongo" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -type ModelServiceV2[T any] interface { - GetById(id primitive.ObjectID) (model *T, err error) - Get(query bson.M, options *mongo.FindOptions) (model *T, err error) - GetList(query bson.M, options *mongo.FindOptions) (models []T, err error) - DeleteById(id primitive.ObjectID) (err error) - Delete(query bson.M) (err error) - DeleteList(query bson.M) (err error) - UpdateById(id primitive.ObjectID, update bson.M) (err error) - UpdateOne(query bson.M, update bson.M) (err error) - UpdateMany(query bson.M, update bson.M) (err error) - ReplaceById(id primitive.ObjectID, model T) (err error) - Replace(query bson.M, model T) (err error) - InsertOne(model T) (id primitive.ObjectID, err error) - InsertMany(models []T) (ids []primitive.ObjectID, err error) - Count(query bson.M) (total int, err error) - GetCol() (col *mongo.Col) -} diff --git a/core/interfaces/model_spider.go b/core/interfaces/model_spider.go deleted file mode 100644 index c6cfe416e..000000000 --- a/core/interfaces/model_spider.go +++ /dev/null @@ -1,24 +0,0 @@ -package interfaces - -import "go.mongodb.org/mongo-driver/bson/primitive" - -type Spider interface { - ModelWithNameDescription - GetType() (ty string) - GetMode() (mode string) - SetMode(mode string) - GetNodeIds() (ids []primitive.ObjectID) - SetNodeIds(ids []primitive.ObjectID) - GetCmd() (cmd string) - SetCmd(cmd string) - GetParam() (param string) - SetParam(param string) - GetPriority() (p int) - SetPriority(p int) - GetColId() (id primitive.ObjectID) - SetColId(id primitive.ObjectID) - GetIncrementalSync() (incrementalSync bool) - SetIncrementalSync(incrementalSync bool) - GetAutoInstall() (autoInstall bool) - SetAutoInstall(autoInstall bool) -} diff --git a/core/interfaces/model_tag.go b/core/interfaces/model_tag.go deleted file mode 100644 index 5afd89bab..000000000 --- a/core/interfaces/model_tag.go +++ /dev/null @@ -1,8 +0,0 @@ -package interfaces - -type Tag interface { - Model - GetName() string - GetColor() string - SetCol(string) -} diff --git a/core/interfaces/model_task.go b/core/interfaces/model_task.go deleted file mode 100644 index 7eb07a79d..000000000 --- a/core/interfaces/model_task.go +++ /dev/null @@ -1,23 +0,0 @@ -package interfaces - -import "go.mongodb.org/mongo-driver/bson/primitive" - -type Task interface { - Model - GetNodeId() (id primitive.ObjectID) - SetNodeId(id primitive.ObjectID) - GetNodeIds() (ids []primitive.ObjectID) - GetStatus() (status string) - SetStatus(status string) - GetError() (error string) - SetError(error string) - GetPid() (pid int) - SetPid(pid int) - GetSpiderId() (id primitive.ObjectID) - GetType() (ty string) - GetCmd() (cmd string) - GetParam() (param string) - GetPriority() (p int) - GetUserId() (id primitive.ObjectID) - SetUserId(id primitive.ObjectID) -} diff --git a/core/interfaces/model_task_stat.go b/core/interfaces/model_task_stat.go deleted file mode 100644 index 7ddce156f..000000000 --- a/core/interfaces/model_task_stat.go +++ /dev/null @@ -1,23 +0,0 @@ -package interfaces - -import "time" - -type TaskStat interface { - Model - GetCreateTs() (ts time.Time) - SetCreateTs(ts time.Time) - GetStartTs() (ts time.Time) - SetStartTs(ts time.Time) - GetEndTs() (ts time.Time) - SetEndTs(ts time.Time) - GetWaitDuration() (d int64) - SetWaitDuration(d int64) - GetRuntimeDuration() (d int64) - SetRuntimeDuration(d int64) - GetTotalDuration() (d int64) - SetTotalDuration(d int64) - GetResultCount() (c int64) - SetResultCount(c int64) - GetErrorLogCount() (c int64) - SetErrorLogCount(c int64) -} diff --git a/core/interfaces/model_user.go b/core/interfaces/model_user.go deleted file mode 100644 index d8f86c7cf..000000000 --- a/core/interfaces/model_user.go +++ /dev/null @@ -1,9 +0,0 @@ -package interfaces - -type User interface { - Model - GetUsername() (name string) - GetPassword() (p string) - GetRole() (r string) - GetEmail() (email string) -} diff --git a/core/interfaces/model_user_group.go b/core/interfaces/model_user_group.go deleted file mode 100644 index f3930a1e7..000000000 --- a/core/interfaces/model_user_group.go +++ /dev/null @@ -1,6 +0,0 @@ -package interfaces - -type UserGroup interface { - Model - GetUsers() (users []User, err error) -} diff --git a/core/interfaces/module.go b/core/interfaces/module.go index 4fc693037..44693a5bc 100644 --- a/core/interfaces/module.go +++ b/core/interfaces/module.go @@ -3,7 +3,6 @@ package interfaces type ModuleId int type Module interface { - Init() error Start() Wait() Stop() diff --git a/core/interfaces/node_config_service.go b/core/interfaces/node_config_service.go index 80e5b5108..829928b69 100644 --- a/core/interfaces/node_config_service.go +++ b/core/interfaces/node_config_service.go @@ -1,7 +1,6 @@ package interfaces type NodeConfigService interface { - WithConfigPath Init() error Reload() error GetBasicNodeInfo() Entity diff --git a/core/interfaces/node_master_service.go b/core/interfaces/node_master_service.go deleted file mode 100644 index dc9dcfc8c..000000000 --- a/core/interfaces/node_master_service.go +++ /dev/null @@ -1,14 +0,0 @@ -package interfaces - -import ( - "time" -) - -type NodeMasterService interface { - NodeService - Monitor() - SetMonitorInterval(duration time.Duration) - Register() error - StopOnError() - GetServer() GrpcServer -} diff --git a/core/interfaces/node_service.go b/core/interfaces/node_service.go index 54cf7885c..5ca19879d 100644 --- a/core/interfaces/node_service.go +++ b/core/interfaces/node_service.go @@ -2,7 +2,4 @@ package interfaces type NodeService interface { Module - WithConfigPath - WithAddress - GetConfigService() NodeConfigService } diff --git a/core/interfaces/node_service_option.go b/core/interfaces/node_service_option.go deleted file mode 100644 index 0402b349a..000000000 --- a/core/interfaces/node_service_option.go +++ /dev/null @@ -1,4 +0,0 @@ -package interfaces - -type NodeServiceOption interface { -} diff --git a/core/interfaces/node_worker_service.go b/core/interfaces/node_worker_service.go deleted file mode 100644 index b25c654a0..000000000 --- a/core/interfaces/node_worker_service.go +++ /dev/null @@ -1,11 +0,0 @@ -package interfaces - -import "time" - -type NodeWorkerService interface { - NodeService - Register() - Recv() - ReportStatus() - SetHeartbeatInterval(duration time.Duration) -} diff --git a/core/interfaces/options.go b/core/interfaces/options.go deleted file mode 100644 index 08badf2f9..000000000 --- a/core/interfaces/options.go +++ /dev/null @@ -1 +0,0 @@ -package interfaces diff --git a/core/interfaces/process_daemon.go b/core/interfaces/process_daemon.go deleted file mode 100644 index aea65df70..000000000 --- a/core/interfaces/process_daemon.go +++ /dev/null @@ -1,17 +0,0 @@ -package interfaces - -import ( - "os/exec" - "time" -) - -type ProcessDaemon interface { - Start() (err error) - Stop() - GetMaxErrors() (maxErrors int) - SetMaxErrors(maxErrors int) - GetExitTimeout() (timeout time.Duration) - SetExitTimeout(timeout time.Duration) - GetCmd() (cmd *exec.Cmd) - GetCh() (ch chan int) -} diff --git a/core/interfaces/provide.go b/core/interfaces/provide.go deleted file mode 100644 index e83929485..000000000 --- a/core/interfaces/provide.go +++ /dev/null @@ -1,3 +0,0 @@ -package interfaces - -type Provide func(env string) diff --git a/core/interfaces/result_service.go b/core/interfaces/result_service.go deleted file mode 100644 index 739bc6df3..000000000 --- a/core/interfaces/result_service.go +++ /dev/null @@ -1,15 +0,0 @@ -package interfaces - -import ( - "github.com/crawlab-team/crawlab/db/generic" - "time" -) - -type ResultService interface { - Insert(records ...interface{}) (err error) - List(query generic.ListQuery, opts *generic.ListOptions) (results []interface{}, err error) - Count(query generic.ListQuery) (n int, err error) - Index(fields []string) - SetTime(t time.Time) - GetTime() (t time.Time) -} diff --git a/core/interfaces/result_service_mongo.go b/core/interfaces/result_service_mongo.go deleted file mode 100644 index dcca1c5b3..000000000 --- a/core/interfaces/result_service_mongo.go +++ /dev/null @@ -1,15 +0,0 @@ -package interfaces - -import ( - "github.com/crawlab-team/crawlab/db/mongo" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -type ResultServiceMongo interface { - GetId() (id primitive.ObjectID) - SetId(id primitive.ObjectID) - List(query bson.M, opts *mongo.FindOptions) (results []Result, err error) - Count(query bson.M) (total int, err error) - Insert(docs ...interface{}) (err error) -} diff --git a/core/interfaces/result_service_registry.go b/core/interfaces/result_service_registry.go deleted file mode 100644 index e989ffe85..000000000 --- a/core/interfaces/result_service_registry.go +++ /dev/null @@ -1,11 +0,0 @@ -package interfaces - -import "go.mongodb.org/mongo-driver/bson/primitive" - -type ResultServiceRegistry interface { - Register(key string, fn ResultServiceRegistryFn) - Unregister(key string) - Get(key string) (fn ResultServiceRegistryFn) -} - -type ResultServiceRegistryFn func(colId primitive.ObjectID, dsId primitive.ObjectID) (ResultService, error) diff --git a/core/interfaces/schedule_service.go b/core/interfaces/schedule_service.go deleted file mode 100644 index 9e535dbac..000000000 --- a/core/interfaces/schedule_service.go +++ /dev/null @@ -1,23 +0,0 @@ -package interfaces - -import ( - "github.com/robfig/cron/v3" - "time" -) - -type ScheduleService interface { - WithConfigPath - Module - GetLocation() (loc *time.Location) - SetLocation(loc *time.Location) - GetDelay() (delay bool) - SetDelay(delay bool) - GetSkip() (skip bool) - SetSkip(skip bool) - GetUpdateInterval() (interval time.Duration) - SetUpdateInterval(interval time.Duration) - Enable(s Schedule, args ...interface{}) (err error) - Disable(s Schedule, args ...interface{}) (err error) - Update() - GetCron() (c *cron.Cron) -} diff --git a/core/interfaces/spider_admin_service.go b/core/interfaces/spider_admin_service.go deleted file mode 100644 index d410e5cb2..000000000 --- a/core/interfaces/spider_admin_service.go +++ /dev/null @@ -1,22 +0,0 @@ -package interfaces - -import ( - "go.mongodb.org/mongo-driver/bson/primitive" -) - -type SpiderAdminService interface { - WithConfigPath - Start() (err error) - // Schedule a new task of the spider - Schedule(id primitive.ObjectID, opts *SpiderRunOptions) (taskIds []primitive.ObjectID, err error) - // Clone the spider - Clone(id primitive.ObjectID, opts *SpiderCloneOptions) (err error) - // Delete the spider - Delete(id primitive.ObjectID) (err error) - // SyncGit syncs all git repositories - SyncGit() (err error) - // SyncGitOne syncs one git repository - SyncGitOne(g Git) (err error) - // Export exports the spider and return zip file path - Export(id primitive.ObjectID) (filePath string, err error) -} diff --git a/core/interfaces/spider_template_service.go b/core/interfaces/spider_template_service.go new file mode 100644 index 000000000..a788b59fc --- /dev/null +++ b/core/interfaces/spider_template_service.go @@ -0,0 +1,7 @@ +package interfaces + +import "go.mongodb.org/mongo-driver/bson/primitive" + +type SpiderTemplateService interface { + CreateTemplate(id primitive.ObjectID) (err error) +} diff --git a/core/interfaces/task_base_service.go b/core/interfaces/task_base_service.go deleted file mode 100644 index 951613161..000000000 --- a/core/interfaces/task_base_service.go +++ /dev/null @@ -1,11 +0,0 @@ -package interfaces - -import "go.mongodb.org/mongo-driver/bson/primitive" - -type TaskBaseService interface { - WithConfigPath - Module - SaveTask(t Task, status string) (err error) - IsStopped() (res bool) - GetQueue(nodeId primitive.ObjectID) (queue string) -} diff --git a/core/interfaces/task_handler_service.go b/core/interfaces/task_handler_service.go deleted file mode 100644 index 382764ce9..000000000 --- a/core/interfaces/task_handler_service.go +++ /dev/null @@ -1,60 +0,0 @@ -package interfaces - -import ( - "go.mongodb.org/mongo-driver/bson/primitive" - "time" -) - -type TaskHandlerService interface { - TaskBaseService - // Run task and execute locally - Run(taskId primitive.ObjectID) (err error) - // Cancel task locally - Cancel(taskId primitive.ObjectID) (err error) - // Fetch tasks and run - Fetch() - // ReportStatus periodically report handler status to master - ReportStatus() - // Reset reset internals to default - Reset() - // IsSyncLocked whether the given task is locked for files sync - IsSyncLocked(path string) (ok bool) - // LockSync lock files sync for given task - LockSync(path string) - // UnlockSync unlock files sync for given task - UnlockSync(path string) - // GetExitWatchDuration get max runners - GetExitWatchDuration() (duration time.Duration) - // SetExitWatchDuration set max runners - SetExitWatchDuration(duration time.Duration) - // GetFetchInterval get report interval - GetFetchInterval() (interval time.Duration) - // SetFetchInterval set report interval - SetFetchInterval(interval time.Duration) - // GetReportInterval get report interval - GetReportInterval() (interval time.Duration) - // SetReportInterval set report interval - SetReportInterval(interval time.Duration) - // GetCancelTimeout get report interval - GetCancelTimeout() (timeout time.Duration) - // SetCancelTimeout set report interval - SetCancelTimeout(timeout time.Duration) - // GetModelService get model service - GetModelService() (modelSvc GrpcClientModelService) - // GetModelSpiderService get model spider service - GetModelSpiderService() (modelSpiderSvc GrpcClientModelSpiderService) - // GetModelTaskService get model task service - GetModelTaskService() (modelTaskSvc GrpcClientModelTaskService) - // GetModelTaskStatService get model task stat service - GetModelTaskStatService() (modelTaskStatSvc GrpcClientModelTaskStatService) - // GetModelEnvironmentService get model environment service - GetModelEnvironmentService() (modelEnvironmentSvc GrpcClientModelEnvironmentService) - // GetNodeConfigService get node config service - GetNodeConfigService() (cfgSvc NodeConfigService) - // GetCurrentNode get node of the handler - GetCurrentNode() (n Node, err error) - // GetTaskById get task by id - GetTaskById(id primitive.ObjectID) (t Task, err error) - // GetSpiderById get task by id - GetSpiderById(id primitive.ObjectID) (t Spider, err error) -} diff --git a/core/interfaces/task_hook_service.go b/core/interfaces/task_hook_service.go deleted file mode 100644 index f7c18082e..000000000 --- a/core/interfaces/task_hook_service.go +++ /dev/null @@ -1,6 +0,0 @@ -package interfaces - -type TaskHookService interface { - PreActions(Task, Spider, FsServiceV2, TaskHandlerService) (err error) - PostActions(Task, Spider, FsServiceV2, TaskHandlerService) (err error) -} diff --git a/core/interfaces/task_runner.go b/core/interfaces/task_runner.go index 4194764c0..9815c3a10 100644 --- a/core/interfaces/task_runner.go +++ b/core/interfaces/task_runner.go @@ -8,8 +8,7 @@ import ( type TaskRunner interface { Init() (err error) Run() (err error) - Cancel() (err error) + Cancel(force bool) (err error) SetSubscribeTimeout(timeout time.Duration) GetTaskId() (id primitive.ObjectID) - CleanUp() (err error) } diff --git a/core/interfaces/task_scheduler_service.go b/core/interfaces/task_scheduler_service.go deleted file mode 100644 index b287440f2..000000000 --- a/core/interfaces/task_scheduler_service.go +++ /dev/null @@ -1,16 +0,0 @@ -package interfaces - -import ( - "go.mongodb.org/mongo-driver/bson/primitive" - "time" -) - -type TaskSchedulerService interface { - TaskBaseService - // Enqueue task into the task queue - Enqueue(t Task) (t2 Task, err error) - // Cancel task to corresponding node - Cancel(id primitive.ObjectID, args ...interface{}) (err error) - // SetInterval set the interval or duration between two adjacent fetches - SetInterval(interval time.Duration) -} diff --git a/core/interfaces/task_stats_service.go b/core/interfaces/task_stats_service.go deleted file mode 100644 index 9d1604ac2..000000000 --- a/core/interfaces/task_stats_service.go +++ /dev/null @@ -1,9 +0,0 @@ -package interfaces - -import "go.mongodb.org/mongo-driver/bson/primitive" - -type TaskStatsService interface { - TaskBaseService - InsertData(id primitive.ObjectID, records ...interface{}) (err error) - InsertLogs(id primitive.ObjectID, logs ...string) (err error) -} diff --git a/core/interfaces/test.go b/core/interfaces/test.go deleted file mode 100644 index bc107b42b..000000000 --- a/core/interfaces/test.go +++ /dev/null @@ -1,8 +0,0 @@ -package interfaces - -import "testing" - -type Test interface { - Setup(*testing.T) - Cleanup() -} diff --git a/core/interfaces/translation.go b/core/interfaces/translation.go deleted file mode 100644 index c5c4c6b66..000000000 --- a/core/interfaces/translation.go +++ /dev/null @@ -1,5 +0,0 @@ -package interfaces - -type Translation interface { - GetLang() (l string) -} diff --git a/core/interfaces/user_service.go b/core/interfaces/user_service.go deleted file mode 100644 index d04952344..000000000 --- a/core/interfaces/user_service.go +++ /dev/null @@ -1,19 +0,0 @@ -package interfaces - -import ( - "github.com/gin-gonic/gin" - "github.com/golang-jwt/jwt/v5" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -type UserService interface { - Init() (err error) - SetJwtSecret(secret string) - SetJwtSigningMethod(method jwt.SigningMethod) - Create(opts *UserCreateOptions, args ...interface{}) (err error) - Login(opts *UserLoginOptions) (token string, u User, err error) - CheckToken(token string) (u User, err error) - ChangePassword(id primitive.ObjectID, password string, args ...interface{}) (err error) - MakeToken(user User) (tokenStr string, err error) - GetCurrentUser(c *gin.Context) (u User, err error) -} diff --git a/core/interfaces/user_service_options.go b/core/interfaces/user_service_options.go deleted file mode 100644 index abf29774e..000000000 --- a/core/interfaces/user_service_options.go +++ /dev/null @@ -1,13 +0,0 @@ -package interfaces - -type UserCreateOptions struct { - Username string - Password string - Email string - Role string -} - -type UserLoginOptions struct { - Username string - Password string -} diff --git a/core/interfaces/with_address.go b/core/interfaces/with_address.go deleted file mode 100644 index 805eff184..000000000 --- a/core/interfaces/with_address.go +++ /dev/null @@ -1,6 +0,0 @@ -package interfaces - -type WithAddress interface { - GetAddress() (address Address) - SetAddress(address Address) -} diff --git a/core/interfaces/with_model_id.go b/core/interfaces/with_model_id.go deleted file mode 100644 index f2f59f8cc..000000000 --- a/core/interfaces/with_model_id.go +++ /dev/null @@ -1,6 +0,0 @@ -package interfaces - -type WithModelId interface { - GetModelId() (id ModelId) - SetModelId(id ModelId) -} diff --git a/core/main.go b/core/main.go index da29a2cad..c63240e8d 100644 --- a/core/main.go +++ b/core/main.go @@ -1,4 +1,16 @@ package main +import ( + "github.com/crawlab-team/crawlab/core/cmd" + "github.com/crawlab-team/crawlab/core/utils" +) + func main() { + go func() { + err := cmd.Execute() + if err != nil { + panic(err) + } + }() + utils.DefaultWait() } diff --git a/core/middlewares/auth.go b/core/middlewares/auth.go index 201695cfc..f7621afc4 100644 --- a/core/middlewares/auth.go +++ b/core/middlewares/auth.go @@ -1,26 +1,23 @@ package middlewares import ( + "errors" "github.com/crawlab-team/crawlab/core/constants" - "github.com/crawlab-team/crawlab/core/errors" + "github.com/crawlab-team/crawlab/core/models/models" "github.com/crawlab-team/crawlab/core/models/service" "github.com/crawlab-team/crawlab/core/user" "github.com/crawlab-team/crawlab/core/utils" "github.com/gin-gonic/gin" - "github.com/spf13/viper" + "go.mongodb.org/mongo-driver/bson" + "strings" ) func AuthorizationMiddleware() gin.HandlerFunc { userSvc, _ := user.GetUserService() return func(c *gin.Context) { // disable auth for test - if viper.GetBool("auth.disabled") { - modelSvc, err := service.GetService() - if err != nil { - utils.HandleErrorInternalServerError(c, err) - return - } - u, err := modelSvc.GetUserByUsername(constants.DefaultAdminUsername, nil) + if utils.IsAuthDisabled() { + u, err := service.NewModelService[models.User]().GetOne(bson.M{"username": constants.DefaultAdminUsername}, nil) if err != nil { utils.HandleErrorInternalServerError(c, err) return @@ -32,12 +29,15 @@ func AuthorizationMiddleware() gin.HandlerFunc { // token string tokenStr := c.GetHeader("Authorization") + if strings.HasPrefix(tokenStr, "Bearer ") { + tokenStr = strings.Replace(tokenStr, "Bearer ", "", 1) + } // validate token u, err := userSvc.CheckToken(tokenStr) if err != nil { // validation failed, return error response - utils.HandleErrorUnauthorized(c, errors.ErrorHttpUnauthorized) + utils.HandleErrorUnauthorized(c, errors.New("invalid token")) return } @@ -48,3 +48,21 @@ func AuthorizationMiddleware() gin.HandlerFunc { c.Next() } } + +func SyncAuthorizationMiddleware() gin.HandlerFunc { + return func(c *gin.Context) { + if utils.IsAuthDisabled() { + c.Next() + return + } + + authKey := c.GetHeader("Authorization") + + if authKey != utils.GetAuthKey() { + utils.HandleErrorUnauthorized(c, errors.New("invalid auth key")) + return + } + + c.Next() + } +} diff --git a/core/middlewares/auth_v2.go b/core/middlewares/auth_v2.go deleted file mode 100644 index 61b8954b7..000000000 --- a/core/middlewares/auth_v2.go +++ /dev/null @@ -1,50 +0,0 @@ -package middlewares - -import ( - "github.com/crawlab-team/crawlab/core/constants" - "github.com/crawlab-team/crawlab/core/errors" - "github.com/crawlab-team/crawlab/core/models/service" - "github.com/crawlab-team/crawlab/core/user" - "github.com/crawlab-team/crawlab/core/utils" - "github.com/gin-gonic/gin" - "github.com/spf13/viper" -) - -func AuthorizationMiddlewareV2() gin.HandlerFunc { - userSvc, _ := user.GetUserServiceV2() - return func(c *gin.Context) { - // disable auth for test - if viper.GetBool("auth.disabled") { - modelSvc, err := service.GetService() - if err != nil { - utils.HandleErrorInternalServerError(c, err) - return - } - u, err := modelSvc.GetUserByUsername(constants.DefaultAdminUsername, nil) - if err != nil { - utils.HandleErrorInternalServerError(c, err) - return - } - c.Set(constants.UserContextKey, u) - c.Next() - return - } - - // token string - tokenStr := c.GetHeader("Authorization") - - // validate token - u, err := userSvc.CheckToken(tokenStr) - if err != nil { - // validation failed, return error response - utils.HandleErrorUnauthorized(c, errors.ErrorHttpUnauthorized) - return - } - - // set user in context - c.Set(constants.UserContextKey, u) - - // validation success - c.Next() - } -} diff --git a/core/middlewares/cors.go b/core/middlewares/cors.go index 5397251d1..d0dc24e11 100644 --- a/core/middlewares/cors.go +++ b/core/middlewares/cors.go @@ -1,16 +1,20 @@ package middlewares -import "github.com/gin-gonic/gin" +import ( + "github.com/crawlab-team/crawlab/core/utils" + "github.com/gin-gonic/gin" + "net/http" +) func CORSMiddleware() gin.HandlerFunc { return func(c *gin.Context) { - c.Writer.Header().Set("Access-Control-Allow-Origin", "*") - c.Writer.Header().Set("Access-Control-Allow-Credentials", "true") - c.Writer.Header().Set("Access-Control-Allow-Headers", "Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization, accept, origin, Cache-Control, X-Requested-With") - c.Writer.Header().Set("Access-Control-Allow-Methods", "DELETE, POST, OPTIONS, GET, PUT") + c.Writer.Header().Set("Access-Control-Allow-Origin", utils.GetAllowOrigin()) + c.Writer.Header().Set("Access-Control-Allow-Credentials", utils.GetAllowCredentials()) + c.Writer.Header().Set("Access-Control-Allow-Headers", utils.GetAllowHeaders()) + c.Writer.Header().Set("Access-Control-Allow-Methods", utils.GetAllowMethods()) if c.Request.Method == "OPTIONS" { - c.AbortWithStatus(204) + c.AbortWithStatus(http.StatusNoContent) return } diff --git a/core/middlewares/filer_auth.go b/core/middlewares/filer_auth.go deleted file mode 100644 index 1535f2b80..000000000 --- a/core/middlewares/filer_auth.go +++ /dev/null @@ -1,34 +0,0 @@ -package middlewares - -import ( - "github.com/crawlab-team/crawlab/core/errors" - "github.com/crawlab-team/crawlab/core/utils" - "github.com/gin-gonic/gin" - "github.com/spf13/viper" -) - -func FilerAuthorizationMiddleware() gin.HandlerFunc { - return func(c *gin.Context) { - // auth key - authKey := c.GetHeader("Authorization") - - // server auth key - svrAuthKey := viper.GetString("fs.filer.authKey") - - // skip to next if no server auth key is provided - if svrAuthKey == "" { - c.Next() - return - } - - // validate - if authKey != svrAuthKey { - // validation failed, return error response - utils.HandleErrorUnauthorized(c, errors.ErrorHttpUnauthorized) - return - } - - // validation success - c.Next() - } -} diff --git a/core/middlewares/middlewares.go b/core/middlewares/utils.go similarity index 100% rename from core/middlewares/middlewares.go rename to core/middlewares/utils.go diff --git a/core/models/client/binder_basic.go b/core/models/client/binder_basic.go deleted file mode 100644 index 4d4b47164..000000000 --- a/core/models/client/binder_basic.go +++ /dev/null @@ -1,92 +0,0 @@ -package client - -import ( - "encoding/json" - "github.com/crawlab-team/crawlab/core/errors" - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/models/models" - grpc "github.com/crawlab-team/crawlab/grpc" - "github.com/crawlab-team/crawlab/trace" -) - -func NewBasicBinder(id interfaces.ModelId, res *grpc.Response) (b interfaces.GrpcModelBinder) { - return &BasicBinder{ - id: id, - res: res, - } -} - -type BasicBinder struct { - id interfaces.ModelId - res *grpc.Response -} - -func (b *BasicBinder) Bind() (res interfaces.Model, err error) { - m := models.NewModelMap() - - switch b.id { - case interfaces.ModelIdArtifact: - return b.Process(&m.Artifact) - case interfaces.ModelIdTag: - return b.Process(&m.Tag) - case interfaces.ModelIdNode: - return b.Process(&m.Node) - case interfaces.ModelIdProject: - return b.Process(&m.Project) - case interfaces.ModelIdSpider: - return b.Process(&m.Spider) - case interfaces.ModelIdTask: - return b.Process(&m.Task) - case interfaces.ModelIdJob: - return b.Process(&m.Job) - case interfaces.ModelIdSchedule: - return b.Process(&m.Schedule) - case interfaces.ModelIdUser: - return b.Process(&m.User) - case interfaces.ModelIdSetting: - return b.Process(&m.Setting) - case interfaces.ModelIdToken: - return b.Process(&m.Token) - case interfaces.ModelIdVariable: - return b.Process(&m.Variable) - case interfaces.ModelIdTaskQueue: - return b.Process(&m.TaskQueueItem) - case interfaces.ModelIdTaskStat: - return b.Process(&m.TaskStat) - case interfaces.ModelIdSpiderStat: - return b.Process(&m.SpiderStat) - case interfaces.ModelIdDataSource: - return b.Process(&m.DataSource) - case interfaces.ModelIdDataCollection: - return b.Process(&m.DataCollection) - case interfaces.ModelIdResult: - return b.Process(&m.Result) - case interfaces.ModelIdPassword: - return b.Process(&m.Password) - case interfaces.ModelIdExtraValue: - return b.Process(&m.ExtraValue) - case interfaces.ModelIdGit: - return b.Process(&m.Git) - case interfaces.ModelIdRole: - return b.Process(&m.Role) - case interfaces.ModelIdUserRole: - return b.Process(&m.UserRole) - case interfaces.ModelIdPermission: - return b.Process(&m.Permission) - case interfaces.ModelIdRolePermission: - return b.Process(&m.RolePermission) - case interfaces.ModelIdEnvironment: - return b.Process(&m.Environment) - case interfaces.ModelIdDependencySetting: - return b.Process(&m.DependencySetting) - default: - return nil, errors.ErrorModelInvalidModelId - } -} - -func (b *BasicBinder) Process(d interfaces.Model) (res interfaces.Model, err error) { - if err := json.Unmarshal(b.res.Data, d); err != nil { - return nil, trace.TraceError(err) - } - return d, nil -} diff --git a/core/models/client/binder_list.go b/core/models/client/binder_list.go deleted file mode 100644 index fe5788044..000000000 --- a/core/models/client/binder_list.go +++ /dev/null @@ -1,100 +0,0 @@ -package client - -import ( - "encoding/json" - "github.com/crawlab-team/crawlab/core/errors" - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/models/models" - grpc "github.com/crawlab-team/crawlab/grpc" - "github.com/crawlab-team/crawlab/trace" -) - -func NewListBinder(id interfaces.ModelId, res *grpc.Response) (b interfaces.GrpcModelListBinder) { - return &ListBinder{ - id: id, - res: res, - } -} - -type ListBinder struct { - id interfaces.ModelId - res *grpc.Response -} - -func (b *ListBinder) Bind() (l interfaces.List, err error) { - m := models.NewModelListMap() - - switch b.id { - case interfaces.ModelIdArtifact: - return b.Process(&m.Artifacts) - case interfaces.ModelIdTag: - return b.Process(&m.Tags) - case interfaces.ModelIdNode: - return b.Process(&m.Nodes) - case interfaces.ModelIdProject: - return b.Process(&m.Projects) - case interfaces.ModelIdSpider: - return b.Process(&m.Spiders) - case interfaces.ModelIdTask: - return b.Process(&m.Tasks) - case interfaces.ModelIdJob: - return b.Process(&m.Jobs) - case interfaces.ModelIdSchedule: - return b.Process(&m.Schedules) - case interfaces.ModelIdUser: - return b.Process(&m.Users) - case interfaces.ModelIdSetting: - return b.Process(&m.Settings) - case interfaces.ModelIdToken: - return b.Process(&m.Tokens) - case interfaces.ModelIdVariable: - return b.Process(&m.Variables) - case interfaces.ModelIdTaskQueue: - return b.Process(&m.TaskQueueItems) - case interfaces.ModelIdTaskStat: - return b.Process(&m.TaskStats) - case interfaces.ModelIdSpiderStat: - return b.Process(&m.SpiderStats) - case interfaces.ModelIdDataSource: - return b.Process(&m.DataSources) - case interfaces.ModelIdDataCollection: - return b.Process(&m.DataCollections) - case interfaces.ModelIdResult: - return b.Process(&m.Results) - case interfaces.ModelIdPassword: - return b.Process(&m.Passwords) - case interfaces.ModelIdExtraValue: - return b.Process(&m.ExtraValues) - case interfaces.ModelIdGit: - return b.Process(&m.Gits) - case interfaces.ModelIdRole: - return b.Process(&m.Roles) - case interfaces.ModelIdUserRole: - return b.Process(&m.UserRoles) - case interfaces.ModelIdPermission: - return b.Process(&m.PermissionList) - case interfaces.ModelIdRolePermission: - return b.Process(&m.RolePermissionList) - case interfaces.ModelIdEnvironment: - return b.Process(&m.Environments) - case interfaces.ModelIdDependencySetting: - return b.Process(&m.DependencySettings) - default: - return l, errors.ErrorModelInvalidModelId - } -} - -func (b *ListBinder) MustBind() (res interface{}) { - res, err := b.Bind() - if err != nil { - panic(err) - } - return res -} - -func (b *ListBinder) Process(d interface{}) (l interfaces.List, err error) { - if err := json.Unmarshal(b.res.Data, d); err != nil { - return l, trace.TraceError(err) - } - return d.(interfaces.List), nil -} diff --git a/core/models/client/model_base_service.go b/core/models/client/model_base_service.go deleted file mode 100644 index 6ee6b9dd2..000000000 --- a/core/models/client/model_base_service.go +++ /dev/null @@ -1,251 +0,0 @@ -package client - -import ( - "encoding/json" - "github.com/apex/log" - "github.com/cenkalti/backoff/v4" - "github.com/crawlab-team/crawlab/core/container" - "github.com/crawlab-team/crawlab/core/entity" - "github.com/crawlab-team/crawlab/core/errors" - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/utils" - "github.com/crawlab-team/crawlab/db/mongo" - grpc "github.com/crawlab-team/crawlab/grpc" - "github.com/crawlab-team/crawlab/trace" - errors2 "github.com/pkg/errors" - "github.com/spf13/viper" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" - "time" -) - -type BaseServiceDelegate struct { - // settings - cfgPath string - - // internals - id interfaces.ModelId - c interfaces.GrpcClient -} - -func (d *BaseServiceDelegate) GetModelId() (id interfaces.ModelId) { - return d.id -} - -func (d *BaseServiceDelegate) SetModelId(id interfaces.ModelId) { - d.id = id -} - -func (d *BaseServiceDelegate) GetConfigPath() (path string) { - return d.cfgPath -} - -func (d *BaseServiceDelegate) SetConfigPath(path string) { - d.cfgPath = path -} - -func (d *BaseServiceDelegate) GetById(id primitive.ObjectID) (doc interfaces.Model, err error) { - log.Debugf("[BaseServiceDelegate] get by id[%s]", id.Hex()) - ctx, cancel := d.c.Context() - defer cancel() - req := d.mustNewRequest(&entity.GrpcBaseServiceParams{Id: id}) - c := d.getModelBaseServiceClient() - if c == nil { - return nil, trace.TraceError(errors.ErrorModelNilPointer) - } - log.Debugf("[BaseServiceDelegate] get by id[%s] req: %v", id.Hex(), req) - res, err := c.GetById(ctx, req) - if err != nil { - return nil, trace.TraceError(err) - } - log.Debugf("[BaseServiceDelegate] get by id[%s] res: %v", id.Hex(), res) - return NewBasicBinder(d.id, res).Bind() -} - -func (d *BaseServiceDelegate) Get(query bson.M, opts *mongo.FindOptions) (doc interfaces.Model, err error) { - ctx, cancel := d.c.Context() - defer cancel() - req := d.mustNewRequest(&entity.GrpcBaseServiceParams{Query: query, FindOptions: opts}) - res, err := d.getModelBaseServiceClient().Get(ctx, req) - if err != nil { - return nil, err - } - return NewBasicBinder(d.id, res).Bind() -} - -func (d *BaseServiceDelegate) GetList(query bson.M, opts *mongo.FindOptions) (l interfaces.List, err error) { - ctx, cancel := d.c.Context() - defer cancel() - req := d.mustNewRequest(&entity.GrpcBaseServiceParams{Query: query, FindOptions: opts}) - res, err := d.getModelBaseServiceClient().GetList(ctx, req) - if err != nil { - return l, err - } - return NewListBinder(d.id, res).Bind() -} - -func (d *BaseServiceDelegate) DeleteById(id primitive.ObjectID, args ...interface{}) (err error) { - u := utils.GetUserFromArgs(args...) - ctx, cancel := d.c.Context() - defer cancel() - req := d.mustNewRequest(&entity.GrpcBaseServiceParams{Id: id, User: u}) - _, err = d.getModelBaseServiceClient().DeleteById(ctx, req) - if err != nil { - return err - } - return nil -} - -func (d *BaseServiceDelegate) Delete(query bson.M, args ...interface{}) (err error) { - u := utils.GetUserFromArgs(args...) - ctx, cancel := d.c.Context() - defer cancel() - req := d.mustNewRequest(&entity.GrpcBaseServiceParams{Query: query, User: u}) - _, err = d.getModelBaseServiceClient().Delete(ctx, req) - if err != nil { - return err - } - return nil -} - -func (d *BaseServiceDelegate) DeleteList(query bson.M, args ...interface{}) (err error) { - u := utils.GetUserFromArgs(args...) - ctx, cancel := d.c.Context() - defer cancel() - req := d.mustNewRequest(&entity.GrpcBaseServiceParams{Query: query, User: u}) - _, err = d.getModelBaseServiceClient().DeleteList(ctx, req) - if err != nil { - return err - } - return nil -} - -func (d *BaseServiceDelegate) ForceDeleteList(query bson.M, args ...interface{}) (err error) { - u := utils.GetUserFromArgs(args...) - ctx, cancel := d.c.Context() - defer cancel() - req := d.mustNewRequest(&entity.GrpcBaseServiceParams{Query: query, User: u}) - _, err = d.getModelBaseServiceClient().ForceDeleteList(ctx, req) - if err != nil { - return err - } - return nil -} - -func (d *BaseServiceDelegate) UpdateById(id primitive.ObjectID, update bson.M, args ...interface{}) (err error) { - u := utils.GetUserFromArgs(args...) - ctx, cancel := d.c.Context() - defer cancel() - req := d.mustNewRequest(&entity.GrpcBaseServiceParams{Id: id, Update: update, User: u}) - _, err = d.getModelBaseServiceClient().UpdateById(ctx, req) - if err != nil { - return err - } - return nil -} - -func (d *BaseServiceDelegate) Update(query bson.M, update bson.M, fields []string, args ...interface{}) (err error) { - u := utils.GetUserFromArgs(args...) - ctx, cancel := d.c.Context() - defer cancel() - req := d.mustNewRequest(&entity.GrpcBaseServiceParams{Query: query, Update: update, Fields: fields, User: u}) - _, err = d.getModelBaseServiceClient().Update(ctx, req) - if err != nil { - return err - } - return nil -} - -func (d *BaseServiceDelegate) UpdateDoc(query bson.M, doc interfaces.Model, fields []string, args ...interface{}) (err error) { - u := utils.GetUserFromArgs(args...) - ctx, cancel := d.c.Context() - defer cancel() - req := d.mustNewRequest(&entity.GrpcBaseServiceParams{Query: query, Doc: doc, Fields: fields, User: u}) - _, err = d.getModelBaseServiceClient().UpdateDoc(ctx, req) - if err != nil { - return err - } - return nil -} - -func (d *BaseServiceDelegate) Insert(u interfaces.User, docs ...interface{}) (err error) { - ctx, cancel := d.c.Context() - defer cancel() - req := d.mustNewRequest(&entity.GrpcBaseServiceParams{Docs: docs, User: u}) - _, err = d.getModelBaseServiceClient().Insert(ctx, req) - if err != nil { - return err - } - return nil -} - -func (d *BaseServiceDelegate) Count(query bson.M) (total int, err error) { - ctx, cancel := d.c.Context() - defer cancel() - req := d.mustNewRequest(&entity.GrpcBaseServiceParams{Query: query}) - res, err := d.getModelBaseServiceClient().Count(ctx, req) - if err != nil { - return total, err - } - if err := json.Unmarshal(res.Data, &total); err != nil { - return total, err - } - return total, nil -} - -func (d *BaseServiceDelegate) newRequest(params interfaces.GrpcBaseServiceParams) (req *grpc.Request, err error) { - return d.c.NewModelBaseServiceRequest(d.id, params) -} - -func (d *BaseServiceDelegate) mustNewRequest(params *entity.GrpcBaseServiceParams) (req *grpc.Request) { - req, err := d.newRequest(params) - if err != nil { - panic(err) - } - return req -} - -func (d *BaseServiceDelegate) getModelBaseServiceClient() (c grpc.ModelBaseServiceClient) { - if err := backoff.Retry(func() (err error) { - c = d.c.GetModelBaseServiceClient() - if c == nil { - err = errors2.New("unable to get model base service client") - log.Debugf("[BaseServiceDelegate] err: %v", err) - return err - } - return nil - }, backoff.NewConstantBackOff(1*time.Second)); err != nil { - trace.PrintError(err) - } - return c -} - -func NewBaseServiceDelegate(opts ...ModelBaseServiceDelegateOption) (svc2 interfaces.GrpcClientModelBaseService, err error) { - // base service - svc := &BaseServiceDelegate{} - - // apply options - for _, opt := range opts { - opt(svc) - } - - // config path - if viper.GetString("config.path") != "" { - svc.cfgPath = viper.GetString("config.path") - } - - // dependency injection - if err := container.GetContainer().Invoke(func(client interfaces.GrpcClient) { - svc.c = client - }); err != nil { - return nil, err - } - - return svc, nil -} - -func ProvideBaseServiceDelegate(id interfaces.ModelId) func() (svc interfaces.GrpcClientModelBaseService, err error) { - return func() (svc interfaces.GrpcClientModelBaseService, err error) { - return NewBaseServiceDelegate(WithBaseServiceModelId(id)) - } -} diff --git a/core/models/client/model_delegate.go b/core/models/client/model_delegate.go deleted file mode 100644 index d59524ca4..000000000 --- a/core/models/client/model_delegate.go +++ /dev/null @@ -1,329 +0,0 @@ -package client - -import ( - "encoding/json" - config2 "github.com/crawlab-team/crawlab/core/config" - "github.com/crawlab-team/crawlab/core/entity" - "github.com/crawlab-team/crawlab/core/errors" - "github.com/crawlab-team/crawlab/core/grpc/client" - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/core/utils" - grpc "github.com/crawlab-team/crawlab/grpc" - "github.com/crawlab-team/crawlab/trace" - "github.com/spf13/viper" -) - -func NewModelDelegate(doc interfaces.Model, opts ...ModelDelegateOption) interfaces.GrpcClientModelDelegate { - switch doc.(type) { - case *models.Artifact: - return newModelDelegate(interfaces.ModelIdArtifact, doc, opts...) - case *models.Tag: - return newModelDelegate(interfaces.ModelIdTag, doc, opts...) - case *models.Node: - return newModelDelegate(interfaces.ModelIdNode, doc, opts...) - case *models.Project: - return newModelDelegate(interfaces.ModelIdProject, doc, opts...) - case *models.Spider: - return newModelDelegate(interfaces.ModelIdSpider, doc, opts...) - case *models.Task: - return newModelDelegate(interfaces.ModelIdTask, doc, opts...) - case *models.Job: - return newModelDelegate(interfaces.ModelIdJob, doc, opts...) - case *models.Schedule: - return newModelDelegate(interfaces.ModelIdSchedule, doc, opts...) - case *models.User: - return newModelDelegate(interfaces.ModelIdUser, doc, opts...) - case *models.Setting: - return newModelDelegate(interfaces.ModelIdSetting, doc, opts...) - case *models.Token: - return newModelDelegate(interfaces.ModelIdToken, doc, opts...) - case *models.Variable: - return newModelDelegate(interfaces.ModelIdVariable, doc, opts...) - case *models.TaskQueueItem: - return newModelDelegate(interfaces.ModelIdTaskQueue, doc, opts...) - case *models.TaskStat: - return newModelDelegate(interfaces.ModelIdTaskStat, doc, opts...) - case *models.SpiderStat: - return newModelDelegate(interfaces.ModelIdSpiderStat, doc, opts...) - case *models.DataSource: - return newModelDelegate(interfaces.ModelIdDataSource, doc, opts...) - case *models.DataCollection: - return newModelDelegate(interfaces.ModelIdDataCollection, doc, opts...) - case *models.Result: - return newModelDelegate(interfaces.ModelIdResult, doc, opts...) - case *models.Password: - return newModelDelegate(interfaces.ModelIdPassword, doc, opts...) - case *models.ExtraValue: - return newModelDelegate(interfaces.ModelIdExtraValue, doc, opts...) - case *models.Git: - return newModelDelegate(interfaces.ModelIdGit, doc, opts...) - case *models.UserRole: - return newModelDelegate(interfaces.ModelIdUserRole, doc, opts...) - case *models.Permission: - return newModelDelegate(interfaces.ModelIdPermission, doc, opts...) - case *models.RolePermission: - return newModelDelegate(interfaces.ModelIdRolePermission, doc, opts...) - case *models.Environment: - return newModelDelegate(interfaces.ModelIdEnvironment, doc, opts...) - case *models.DependencySetting: - return newModelDelegate(interfaces.ModelIdDependencySetting, doc, opts...) - default: - _ = trace.TraceError(errors.ErrorModelInvalidType) - return nil - } -} - -func newModelDelegate(id interfaces.ModelId, doc interfaces.Model, opts ...ModelDelegateOption) interfaces.GrpcClientModelDelegate { - var err error - - // collection name - colName := models.GetModelColName(id) - - // model delegate - d := &ModelDelegate{ - id: id, - colName: colName, - doc: doc, - cfgPath: config2.GetConfigPath(), - a: &models.Artifact{ - Col: colName, - }, - } - - // config path - if viper.GetString("config.path") != "" { - d.cfgPath = viper.GetString("config.path") - } - - // apply options - for _, opt := range opts { - opt(d) - } - - // grpc client - d.c, err = client.GetClient() - if err != nil { - trace.PrintError(errors.ErrorModelInvalidType) - return nil - } - if !d.c.IsStarted() { - if err := d.c.Start(); err != nil { - trace.PrintError(err) - return nil - } - } else if d.c.IsClosed() { - if err := d.c.Restart(); err != nil { - trace.PrintError(err) - return nil - } - } - - return d -} - -type ModelDelegate struct { - // settings - cfgPath string - - // internals - id interfaces.ModelId - colName string - c interfaces.GrpcClient - doc interfaces.Model - a interfaces.ModelArtifact -} - -func (d *ModelDelegate) Add() (err error) { - return d.do(interfaces.ModelDelegateMethodAdd) -} - -func (d *ModelDelegate) Save() (err error) { - return d.do(interfaces.ModelDelegateMethodSave) -} - -func (d *ModelDelegate) Delete() (err error) { - return d.do(interfaces.ModelDelegateMethodDelete) -} - -func (d *ModelDelegate) GetArtifact() (res interfaces.ModelArtifact, err error) { - if err := d.do(interfaces.ModelDelegateMethodGetArtifact); err != nil { - return nil, err - } - return d.a, nil -} - -func (d *ModelDelegate) GetModel() (res interfaces.Model) { - return d.doc -} - -func (d *ModelDelegate) Refresh() (err error) { - return d.refresh() -} - -func (d *ModelDelegate) GetConfigPath() (path string) { - return d.cfgPath -} - -func (d *ModelDelegate) SetConfigPath(path string) { - d.cfgPath = path -} - -func (d *ModelDelegate) Close() (err error) { - return d.c.Stop() -} - -func (d *ModelDelegate) ToBytes(m interface{}) (bytes []byte, err error) { - if m != nil { - return utils.JsonToBytes(m) - } - return json.Marshal(d.doc) -} - -func (d *ModelDelegate) do(method interfaces.ModelDelegateMethod) (err error) { - switch method { - case interfaces.ModelDelegateMethodAdd: - err = d.add() - case interfaces.ModelDelegateMethodSave: - err = d.save() - case interfaces.ModelDelegateMethodDelete: - err = d.delete() - case interfaces.ModelDelegateMethodGetArtifact, interfaces.ModelDelegateMethodRefresh: - return d.refresh() - default: - return trace.TraceError(errors.ErrorModelInvalidType) - } - - if err != nil { - return err - } - - return nil -} - -func (d *ModelDelegate) add() (err error) { - ctx, cancel := d.c.Context() - defer cancel() - method := interfaces.ModelDelegateMethod(interfaces.ModelDelegateMethodAdd) - res, err := d.c.GetModelDelegateClient().Do(ctx, d.c.NewRequest(entity.GrpcDelegateMessage{ - ModelId: d.id, - Method: method, - Data: d.mustGetData(), - })) - if err != nil { - return trace.TraceError(err) - } - if err := d.deserialize(res, method); err != nil { - return err - } - return d.refreshArtifact() -} - -func (d *ModelDelegate) save() (err error) { - ctx, cancel := d.c.Context() - defer cancel() - method := interfaces.ModelDelegateMethod(interfaces.ModelDelegateMethodSave) - res, err := d.c.GetModelDelegateClient().Do(ctx, d.c.NewRequest(entity.GrpcDelegateMessage{ - ModelId: d.id, - Method: method, - Data: d.mustGetData(), - })) - if err != nil { - return trace.TraceError(err) - } - if err := d.deserialize(res, method); err != nil { - return err - } - return d.refreshArtifact() -} - -func (d *ModelDelegate) delete() (err error) { - ctx, cancel := d.c.Context() - defer cancel() - method := interfaces.ModelDelegateMethod(interfaces.ModelDelegateMethodDelete) - res, err := d.c.GetModelDelegateClient().Do(ctx, d.c.NewRequest(entity.GrpcDelegateMessage{ - ModelId: d.id, - Method: method, - Data: d.mustGetData(), - })) - if err != nil { - return trace.TraceError(err) - } - if err := d.deserialize(res, method); err != nil { - return err - } - return d.refreshArtifact() -} - -func (d *ModelDelegate) refresh() (err error) { - ctx, cancel := d.c.Context() - defer cancel() - method := interfaces.ModelDelegateMethod(interfaces.ModelDelegateMethodRefresh) - res, err := d.c.GetModelDelegateClient().Do(ctx, d.c.NewRequest(entity.GrpcDelegateMessage{ - ModelId: d.id, - Method: method, - Data: d.mustGetData(), - })) - if err != nil { - return trace.TraceError(err) - } - if err := d.deserialize(res, method); err != nil { - return err - } - return nil -} - -func (d *ModelDelegate) refreshArtifact() (err error) { - _, err = d.getArtifact() - return err -} - -func (d *ModelDelegate) getArtifact() (res2 interfaces.ModelArtifact, err error) { - ctx, cancel := d.c.Context() - defer cancel() - method := interfaces.ModelDelegateMethod(interfaces.ModelDelegateMethodGetArtifact) - res, err := d.c.GetModelDelegateClient().Do(ctx, d.c.NewRequest(entity.GrpcDelegateMessage{ - ModelId: d.id, - Method: method, - Data: d.mustGetData(), - })) - if err != nil { - return nil, err - } - if err := d.deserialize(res, method); err != nil { - return nil, err - } - return d.a, nil -} - -func (d *ModelDelegate) mustGetData() (data []byte) { - data, err := d.getData() - if err != nil { - panic(err) - } - return data -} - -func (d *ModelDelegate) getData() (data []byte, err error) { - return json.Marshal(d.doc) -} - -func (d *ModelDelegate) deserialize(res *grpc.Response, method interfaces.ModelDelegateMethod) (err error) { - if method == interfaces.ModelDelegateMethodGetArtifact { - res, err := NewBasicBinder(interfaces.ModelIdArtifact, res).Bind() - if err != nil { - return err - } - a, ok := res.(interfaces.ModelArtifact) - if !ok { - return trace.TraceError(errors.ErrorModelInvalidType) - } - d.a = a - } else { - d.doc, err = NewBasicBinder(d.id, res).Bind() - if err != nil { - return err - } - } - return nil -} diff --git a/core/models/client/model_environment_service.go b/core/models/client/model_environment_service.go deleted file mode 100644 index 6de3fbd96..000000000 --- a/core/models/client/model_environment_service.go +++ /dev/null @@ -1,70 +0,0 @@ -package client - -import ( - "github.com/crawlab-team/crawlab/core/errors" - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/db/mongo" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -type EnvironmentServiceDelegate struct { - interfaces.GrpcClientModelBaseService -} - -func (svc *EnvironmentServiceDelegate) GetEnvironmentById(id primitive.ObjectID) (e interfaces.Environment, err error) { - res, err := svc.GetById(id) - if err != nil { - return nil, err - } - s, ok := res.(interfaces.Environment) - if !ok { - return nil, errors.ErrorModelInvalidType - } - return s, nil -} - -func (svc *EnvironmentServiceDelegate) GetEnvironment(query bson.M, opts *mongo.FindOptions) (e interfaces.Environment, err error) { - res, err := svc.Get(query, opts) - if err != nil { - return nil, err - } - s, ok := res.(interfaces.Environment) - if !ok { - return nil, errors.ErrorModelInvalidType - } - return s, nil -} - -func (svc *EnvironmentServiceDelegate) GetEnvironmentList(query bson.M, opts *mongo.FindOptions) (res []interfaces.Environment, err error) { - list, err := svc.GetList(query, opts) - if err != nil { - return nil, err - } - for _, item := range list.GetModels() { - s, ok := item.(interfaces.Environment) - if !ok { - return nil, errors.ErrorModelInvalidType - } - res = append(res, s) - } - return res, nil -} - -func NewEnvironmentServiceDelegate() (svc2 interfaces.GrpcClientModelEnvironmentService, err error) { - var opts []ModelBaseServiceDelegateOption - - // apply options - opts = append(opts, WithBaseServiceModelId(interfaces.ModelIdEnvironment)) - - // base service - baseSvc, err := NewBaseServiceDelegate(opts...) - if err != nil { - return nil, err - } - - // service - svc := &EnvironmentServiceDelegate{baseSvc} - - return svc, nil -} diff --git a/core/models/client/model_node_delegate.go b/core/models/client/model_node_delegate.go deleted file mode 100644 index 4d7d8eb45..000000000 --- a/core/models/client/model_node_delegate.go +++ /dev/null @@ -1,37 +0,0 @@ -package client - -import ( - "github.com/crawlab-team/crawlab/core/constants" - "github.com/crawlab-team/crawlab/core/interfaces" - "time" -) - -type ModelNodeDelegate struct { - n interfaces.Node - interfaces.GrpcClientModelDelegate -} - -func (d *ModelNodeDelegate) UpdateStatus(active bool, activeTs *time.Time, status string) (err error) { - d.n.SetActive(active) - if activeTs != nil { - d.n.SetActiveTs(*activeTs) - } - d.n.SetStatus(status) - return d.Save() -} - -func (d *ModelNodeDelegate) UpdateStatusOnline() (err error) { - now := time.Now() - return d.UpdateStatus(true, &now, constants.NodeStatusOnline) -} - -func (d *ModelNodeDelegate) UpdateStatusOffline() (err error) { - return d.UpdateStatus(false, nil, constants.NodeStatusOffline) -} - -func NewModelNodeDelegate(n interfaces.Node) interfaces.ModelNodeDelegate { - return &ModelNodeDelegate{ - n: n, - GrpcClientModelDelegate: NewModelDelegate(n), - } -} diff --git a/core/models/client/model_node_service.go b/core/models/client/model_node_service.go deleted file mode 100644 index 2518b1ec9..000000000 --- a/core/models/client/model_node_service.go +++ /dev/null @@ -1,74 +0,0 @@ -package client - -import ( - "github.com/crawlab-team/crawlab/core/errors" - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/db/mongo" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -type NodeServiceDelegate struct { - interfaces.GrpcClientModelBaseService -} - -func (svc *NodeServiceDelegate) GetNodeById(id primitive.ObjectID) (n interfaces.Node, err error) { - res, err := svc.GetById(id) - if err != nil { - return nil, err - } - s, ok := res.(interfaces.Node) - if !ok { - return nil, errors.ErrorModelInvalidType - } - return s, nil -} - -func (svc *NodeServiceDelegate) GetNode(query bson.M, opts *mongo.FindOptions) (n interfaces.Node, err error) { - res, err := svc.Get(query, opts) - if err != nil { - return nil, err - } - s, ok := res.(interfaces.Node) - if !ok { - return nil, errors.ErrorModelInvalidType - } - return s, nil -} - -func (svc *NodeServiceDelegate) GetNodeByKey(key string) (n interfaces.Node, err error) { - return svc.GetNode(bson.M{"key": key}, nil) -} - -func (svc *NodeServiceDelegate) GetNodeList(query bson.M, opts *mongo.FindOptions) (res []interfaces.Node, err error) { - list, err := svc.GetList(query, opts) - if err != nil { - return nil, err - } - for _, item := range list.GetModels() { - s, ok := item.(interfaces.Node) - if !ok { - return nil, errors.ErrorModelInvalidType - } - res = append(res, s) - } - return res, nil -} - -func NewNodeServiceDelegate() (svc2 interfaces.GrpcClientModelNodeService, err error) { - var opts []ModelBaseServiceDelegateOption - - // apply options - opts = append(opts, WithBaseServiceModelId(interfaces.ModelIdNode)) - - // base service - baseSvc, err := NewBaseServiceDelegate(opts...) - if err != nil { - return nil, err - } - - // service - svc := &NodeServiceDelegate{baseSvc} - - return svc, nil -} diff --git a/core/models/client/model_service.go b/core/models/client/model_service.go index fde84d56b..df82de191 100644 --- a/core/models/client/model_service.go +++ b/core/models/client/model_service.go @@ -1,48 +1,366 @@ package client import ( - config2 "github.com/crawlab-team/crawlab/core/config" - "github.com/crawlab-team/crawlab/core/container" + "encoding/json" + "github.com/crawlab-team/crawlab/core/grpc/client" "github.com/crawlab-team/crawlab/core/interfaces" + "github.com/crawlab-team/crawlab/core/mongo" + nodeconfig "github.com/crawlab-team/crawlab/core/node/config" + "github.com/crawlab-team/crawlab/grpc" + "go.mongodb.org/mongo-driver/bson" + "go.mongodb.org/mongo-driver/bson/primitive" + "reflect" + "sync" ) -type ServiceDelegate struct { - // settings - cfgPath string +var ( + instanceMap = make(map[string]interface{}) + onceMap = make(map[string]*sync.Once) + mu sync.Mutex +) + +type ModelService[T any] struct { + cfg interfaces.NodeConfigService + modelType string +} + +func (svc *ModelService[T]) GetById(id primitive.ObjectID) (model *T, err error) { + ctx, cancel := client.GetGrpcClient().Context() + defer cancel() + res, err := client.GetGrpcClient().ModelBaseServiceClient.GetById(ctx, &grpc.ModelServiceGetByIdRequest{ + NodeKey: svc.cfg.GetNodeKey(), + ModelType: svc.modelType, + Id: id.Hex(), + }) + if err != nil { + return nil, err + } + return svc.deserializeOne(res) +} + +func (svc *ModelService[T]) GetOne(query bson.M, options *mongo.FindOptions) (model *T, err error) { + ctx, cancel := client.GetGrpcClient().Context() + defer cancel() + queryData, err := json.Marshal(query) + if err != nil { + return nil, err + } + findOptionsData, err := json.Marshal(options) + if err != nil { + return nil, err + } + res, err := client.GetGrpcClient().ModelBaseServiceClient.GetOne(ctx, &grpc.ModelServiceGetOneRequest{ + NodeKey: svc.cfg.GetNodeKey(), + ModelType: svc.modelType, + Query: queryData, + FindOptions: findOptionsData, + }) + if err != nil { + return nil, err + } + return svc.deserializeOne(res) +} + +func (svc *ModelService[T]) GetMany(query bson.M, options *mongo.FindOptions) (models []T, err error) { + ctx, cancel := client.GetGrpcClient().Context() + defer cancel() + queryData, err := json.Marshal(query) + if err != nil { + return nil, err + } + findOptionsData, err := json.Marshal(options) + if err != nil { + return nil, err + } + res, err := client.GetGrpcClient().ModelBaseServiceClient.GetMany(ctx, &grpc.ModelServiceGetManyRequest{ + NodeKey: svc.cfg.GetNodeKey(), + ModelType: svc.modelType, + Query: queryData, + FindOptions: findOptionsData, + }) + if err != nil { + return nil, err + } + return svc.deserializeMany(res) +} + +func (svc *ModelService[T]) DeleteById(id primitive.ObjectID) (err error) { + ctx, cancel := client.GetGrpcClient().Context() + defer cancel() + _, err = client.GetGrpcClient().ModelBaseServiceClient.DeleteById(ctx, &grpc.ModelServiceDeleteByIdRequest{ + NodeKey: svc.cfg.GetNodeKey(), + ModelType: svc.modelType, + Id: id.Hex(), + }) + if err != nil { + return err + } + return nil +} + +func (svc *ModelService[T]) DeleteOne(query bson.M) (err error) { + ctx, cancel := client.GetGrpcClient().Context() + defer cancel() + queryData, err := json.Marshal(query) + if err != nil { + return err + } + _, err = client.GetGrpcClient().ModelBaseServiceClient.DeleteOne(ctx, &grpc.ModelServiceDeleteOneRequest{ + NodeKey: svc.cfg.GetNodeKey(), + ModelType: svc.modelType, + Query: queryData, + }) + if err != nil { + return err + } + return nil +} - // internals - c interfaces.GrpcClient +func (svc *ModelService[T]) DeleteMany(query bson.M) (err error) { + ctx, cancel := client.GetGrpcClient().Context() + defer cancel() + queryData, err := json.Marshal(query) + if err != nil { + return err + } + _, err = client.GetGrpcClient().ModelBaseServiceClient.DeleteMany(ctx, &grpc.ModelServiceDeleteManyRequest{ + NodeKey: svc.cfg.GetNodeKey(), + ModelType: svc.modelType, + Query: queryData, + }) + if err != nil { + return err + } + return nil } -func (d *ServiceDelegate) GetConfigPath() string { - return d.cfgPath +func (svc *ModelService[T]) UpdateById(id primitive.ObjectID, update bson.M) (err error) { + ctx, cancel := client.GetGrpcClient().Context() + defer cancel() + updateData, err := json.Marshal(update) + if err != nil { + return err + } + _, err = client.GetGrpcClient().ModelBaseServiceClient.UpdateById(ctx, &grpc.ModelServiceUpdateByIdRequest{ + NodeKey: svc.cfg.GetNodeKey(), + ModelType: svc.modelType, + Id: id.Hex(), + Update: updateData, + }) + if err != nil { + return err + } + return nil } -func (d *ServiceDelegate) SetConfigPath(path string) { - d.cfgPath = path +func (svc *ModelService[T]) UpdateOne(query bson.M, update bson.M) (err error) { + ctx, cancel := client.GetGrpcClient().Context() + defer cancel() + queryData, err := json.Marshal(query) + if err != nil { + return err + } + updateData, err := json.Marshal(update) + if err != nil { + return err + } + _, err = client.GetGrpcClient().ModelBaseServiceClient.UpdateOne(ctx, &grpc.ModelServiceUpdateOneRequest{ + NodeKey: svc.cfg.GetNodeKey(), + ModelType: svc.modelType, + Query: queryData, + Update: updateData, + }) + if err != nil { + return err + } + return nil } -func (d *ServiceDelegate) NewBaseServiceDelegate(id interfaces.ModelId) (svc interfaces.GrpcClientModelBaseService, err error) { - var opts []ModelBaseServiceDelegateOption - opts = append(opts, WithBaseServiceModelId(id)) - if d.cfgPath != "" { - opts = append(opts, WithBaseServiceConfigPath(d.cfgPath)) +func (svc *ModelService[T]) UpdateMany(query bson.M, update bson.M) (err error) { + ctx, cancel := client.GetGrpcClient().Context() + defer cancel() + queryData, err := json.Marshal(query) + if err != nil { + return err + } + updateData, err := json.Marshal(update) + if err != nil { + return err } - return NewBaseServiceDelegate(opts...) + _, err = client.GetGrpcClient().ModelBaseServiceClient.UpdateMany(ctx, &grpc.ModelServiceUpdateManyRequest{ + NodeKey: svc.cfg.GetNodeKey(), + ModelType: svc.modelType, + Query: queryData, + Update: updateData, + }) + return nil } -func NewServiceDelegate() (svc2 interfaces.GrpcClientModelService, err error) { - // service delegate - svc := &ServiceDelegate{ - cfgPath: config2.GetConfigPath(), +func (svc *ModelService[T]) ReplaceById(id primitive.ObjectID, model T) (err error) { + ctx, cancel := client.GetGrpcClient().Context() + defer cancel() + modelData, err := json.Marshal(model) + if err != nil { + return err } + _, err = client.GetGrpcClient().ModelBaseServiceClient.ReplaceById(ctx, &grpc.ModelServiceReplaceByIdRequest{ + NodeKey: svc.cfg.GetNodeKey(), + ModelType: svc.modelType, + Id: id.Hex(), + Model: modelData, + }) + if err != nil { + return err + } + return nil +} - // dependency injection - if err := container.GetContainer().Invoke(func(client interfaces.GrpcClient) { - svc.c = client - }); err != nil { +func (svc *ModelService[T]) ReplaceOne(query bson.M, model T) (err error) { + ctx, cancel := client.GetGrpcClient().Context() + defer cancel() + queryData, err := json.Marshal(query) + if err != nil { + return err + } + modelData, err := json.Marshal(model) + if err != nil { + return err + } + _, err = client.GetGrpcClient().ModelBaseServiceClient.ReplaceOne(ctx, &grpc.ModelServiceReplaceOneRequest{ + NodeKey: svc.cfg.GetNodeKey(), + ModelType: svc.modelType, + Query: queryData, + Model: modelData, + }) + if err != nil { + return err + } + return nil +} + +func (svc *ModelService[T]) InsertOne(model T) (id primitive.ObjectID, err error) { + ctx, cancel := client.GetGrpcClient().Context() + defer cancel() + modelData, err := json.Marshal(model) + if err != nil { + return primitive.NilObjectID, err + } + res, err := client.GetGrpcClient().ModelBaseServiceClient.InsertOne(ctx, &grpc.ModelServiceInsertOneRequest{ + NodeKey: svc.cfg.GetNodeKey(), + ModelType: svc.modelType, + Model: modelData, + }) + if err != nil { + return primitive.NilObjectID, err + } + return deserialize[primitive.ObjectID](res) +} + +func (svc *ModelService[T]) InsertMany(models []T) (ids []primitive.ObjectID, err error) { + ctx, cancel := client.GetGrpcClient().Context() + defer cancel() + modelsData, err := json.Marshal(models) + if err != nil { + return nil, err + } + res, err := client.GetGrpcClient().ModelBaseServiceClient.InsertMany(ctx, &grpc.ModelServiceInsertManyRequest{ + NodeKey: svc.cfg.GetNodeKey(), + ModelType: svc.modelType, + Models: modelsData, + }) + if err != nil { return nil, err } + return deserialize[[]primitive.ObjectID](res) +} + +func (svc *ModelService[T]) UpsertOne(query bson.M, model T) (id primitive.ObjectID, err error) { + ctx, cancel := client.GetGrpcClient().Context() + defer cancel() + queryData, err := json.Marshal(query) + if err != nil { + return primitive.NilObjectID, err + } + modelData, err := json.Marshal(model) + if err != nil { + return primitive.NilObjectID, err + } + res, err := client.GetGrpcClient().ModelBaseServiceClient.UpsertOne(ctx, &grpc.ModelServiceUpsertOneRequest{ + NodeKey: svc.cfg.GetNodeKey(), + ModelType: svc.modelType, + Query: queryData, + Model: modelData, + }) + if err != nil { + return primitive.NilObjectID, err + } + + return deserialize[primitive.ObjectID](res) +} + +func (svc *ModelService[T]) Count(query bson.M) (total int, err error) { + ctx, cancel := client.GetGrpcClient().Context() + defer cancel() + queryData, err := json.Marshal(query) + if err != nil { + return 0, err + } + res, err := client.GetGrpcClient().ModelBaseServiceClient.Count(ctx, &grpc.ModelServiceCountRequest{ + NodeKey: svc.cfg.GetNodeKey(), + ModelType: svc.modelType, + Query: queryData, + }) + if err != nil { + return 0, err + } + return deserialize[int](res) +} + +func (svc *ModelService[T]) GetCol() (col *mongo.Col) { + return nil +} + +func (svc *ModelService[T]) deserializeOne(res *grpc.Response) (result *T, err error) { + r, err := deserialize[T](res) + if err != nil { + return nil, err + } + return &r, err +} + +func (svc *ModelService[T]) deserializeMany(res *grpc.Response) (results []T, err error) { + return deserialize[[]T](res) +} + +func deserialize[T any](res *grpc.Response) (result T, err error) { + err = json.Unmarshal(res.Data, &result) + if err != nil { + return result, err + } + return result, nil +} + +func NewModelService[T any]() *ModelService[T] { + mu.Lock() + defer mu.Unlock() + + var v T + t := reflect.TypeOf(v) + typeName := t.Name() + + if _, exists := onceMap[typeName]; !exists { + onceMap[typeName] = new(sync.Once) + } + + var instance *ModelService[T] + + onceMap[typeName].Do(func() { + instance = &ModelService[T]{ + cfg: nodeconfig.GetNodeConfigService(), + modelType: typeName, + } + instanceMap[typeName] = instance + }) - return svc, nil + return instanceMap[typeName].(*ModelService[T]) } diff --git a/core/models/client/model_service_test.go b/core/models/client/model_service_test.go new file mode 100644 index 000000000..004d2ad2b --- /dev/null +++ b/core/models/client/model_service_test.go @@ -0,0 +1,410 @@ +package client_test + +import ( + "context" + client2 "github.com/crawlab-team/crawlab/core/grpc/client" + "github.com/crawlab-team/crawlab/core/models/models" + "github.com/crawlab-team/crawlab/core/mongo" + "testing" + "time" + + "github.com/apex/log" + "github.com/crawlab-team/crawlab/core/grpc/server" + "github.com/crawlab-team/crawlab/core/models/client" + "github.com/crawlab-team/crawlab/core/models/service" + "github.com/spf13/viper" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "go.mongodb.org/mongo-driver/bson" +) + +func setupTestDB() { + viper.Set("mongo.db", "testdb") +} + +func teardownTestDB() { + db := mongo.GetMongoDb("testdb") + db.Drop(context.Background()) +} + +func startSvr(svr *server.GrpcServer) { + err := svr.Start() + if err != nil { + log.Errorf("failed to start grpc server: %v", err) + } +} + +func stopSvr(svr *server.GrpcServer) { + err := svr.Stop() + if err != nil { + log.Errorf("failed to stop grpc server: %v", err) + } +} + +func TestModelService_GetById(t *testing.T) { + setupTestDB() + defer teardownTestDB() + svr := server.NewGrpcServer() + go startSvr(svr) + defer stopSvr(svr) + + m := models.TestModel{ + Name: "Test Name", + } + modelSvc := service.NewModelService[models.TestModel]() + id, err := modelSvc.InsertOne(m) + require.Nil(t, err) + m.SetId(id) + time.Sleep(100 * time.Millisecond) + + client2.GetGrpcClient().Start() + + clientSvc := client.NewModelService[models.TestModel]() + res, err := clientSvc.GetById(m.Id) + require.Nil(t, err) + assert.Equal(t, res.Id, m.Id) + assert.Equal(t, res.Name, m.Name) +} + +func TestModelService_GetOne(t *testing.T) { + setupTestDB() + defer teardownTestDB() + svr := server.NewGrpcServer() + go startSvr(svr) + defer stopSvr(svr) + + m := models.TestModel{ + Name: "Test Name", + } + modelSvc := service.NewModelService[models.TestModel]() + id, err := modelSvc.InsertOne(m) + require.Nil(t, err) + m.SetId(id) + time.Sleep(100 * time.Millisecond) + + client2.GetGrpcClient().Start() + + clientSvc := client.NewModelService[models.TestModel]() + res, err := clientSvc.GetOne(bson.M{"name": m.Name}, nil) + require.Nil(t, err) + assert.Equal(t, res.Id, m.Id) + assert.Equal(t, res.Name, m.Name) +} + +func TestModelService_GetMany(t *testing.T) { + setupTestDB() + defer teardownTestDB() + svr := server.NewGrpcServer() + go startSvr(svr) + defer stopSvr(svr) + + m := models.TestModel{ + Name: "Test Name", + } + modelSvc := service.NewModelService[models.TestModel]() + id, err := modelSvc.InsertOne(m) + require.Nil(t, err) + m.SetId(id) + time.Sleep(100 * time.Millisecond) + + client2.GetGrpcClient().Start() + + clientSvc := client.NewModelService[models.TestModel]() + res, err := clientSvc.GetMany(bson.M{"name": m.Name}, nil) + require.Nil(t, err) + assert.Equal(t, len(res), 1) + assert.Equal(t, res[0].Id, m.Id) + assert.Equal(t, res[0].Name, m.Name) +} + +func TestModelService_DeleteById(t *testing.T) { + setupTestDB() + defer teardownTestDB() + svr := server.NewGrpcServer() + go startSvr(svr) + defer stopSvr(svr) + + m := models.TestModel{ + Name: "Test Name", + } + modelSvc := service.NewModelService[models.TestModel]() + id, err := modelSvc.InsertOne(m) + require.Nil(t, err) + m.SetId(id) + time.Sleep(100 * time.Millisecond) + + client2.GetGrpcClient().Start() + + clientSvc := client.NewModelService[models.TestModel]() + err = clientSvc.DeleteById(m.Id) + require.Nil(t, err) + + res, err := clientSvc.GetById(m.Id) + assert.NotNil(t, err) + require.Nil(t, res) +} + +func TestModelService_DeleteOne(t *testing.T) { + setupTestDB() + defer teardownTestDB() + svr := server.NewGrpcServer() + go startSvr(svr) + defer stopSvr(svr) + + m := models.TestModel{ + Name: "Test Name", + } + modelSvc := service.NewModelService[models.TestModel]() + id, err := modelSvc.InsertOne(m) + require.Nil(t, err) + m.SetId(id) + time.Sleep(100 * time.Millisecond) + + client2.GetGrpcClient().Start() + + clientSvc := client.NewModelService[models.TestModel]() + err = clientSvc.DeleteOne(bson.M{"name": m.Name}) + require.Nil(t, err) + + res, err := clientSvc.GetOne(bson.M{"name": m.Name}, nil) + assert.NotNil(t, err) + require.Nil(t, res) +} + +func TestModelService_DeleteMany(t *testing.T) { + setupTestDB() + defer teardownTestDB() + svr := server.NewGrpcServer() + go startSvr(svr) + defer stopSvr(svr) + + m := models.TestModel{ + Name: "Test Name", + } + modelSvc := service.NewModelService[models.TestModel]() + id, err := modelSvc.InsertOne(m) + require.Nil(t, err) + m.SetId(id) + time.Sleep(100 * time.Millisecond) + + client2.GetGrpcClient().Start() + + clientSvc := client.NewModelService[models.TestModel]() + err = clientSvc.DeleteMany(bson.M{"name": m.Name}) + require.Nil(t, err) + + res, err := clientSvc.GetMany(bson.M{"name": m.Name}, nil) + require.Nil(t, err) + assert.Equal(t, len(res), 0) +} + +func TestModelService_UpdateById(t *testing.T) { + setupTestDB() + defer teardownTestDB() + svr := server.NewGrpcServer() + go startSvr(svr) + defer stopSvr(svr) + + m := models.TestModel{ + Name: "Test Name", + } + modelSvc := service.NewModelService[models.TestModel]() + id, err := modelSvc.InsertOne(m) + require.Nil(t, err) + m.SetId(id) + time.Sleep(100 * time.Millisecond) + + client2.GetGrpcClient().Start() + + clientSvc := client.NewModelService[models.TestModel]() + err = clientSvc.UpdateById(m.Id, bson.M{"$set": bson.M{"name": "New Name"}}) + require.Nil(t, err) + + res, err := clientSvc.GetById(m.Id) + require.Nil(t, err) + assert.Equal(t, res.Name, "New Name") +} + +func TestModelService_UpdateOne(t *testing.T) { + setupTestDB() + defer teardownTestDB() + svr := server.NewGrpcServer() + go startSvr(svr) + defer stopSvr(svr) + + m := models.TestModel{ + Name: "Test Name", + } + modelSvc := service.NewModelService[models.TestModel]() + id, err := modelSvc.InsertOne(m) + require.Nil(t, err) + m.SetId(id) + time.Sleep(100 * time.Millisecond) + + client2.GetGrpcClient().Start() + + clientSvc := client.NewModelService[models.TestModel]() + err = clientSvc.UpdateOne(bson.M{"name": m.Name}, bson.M{"$set": bson.M{"name": "New Name"}}) + require.Nil(t, err) + + res, err := clientSvc.GetOne(bson.M{"name": "New Name"}, nil) + require.Nil(t, err) + assert.Equal(t, res.Name, "New Name") +} + +func TestModelService_UpdateMany(t *testing.T) { + setupTestDB() + defer teardownTestDB() + svr := server.NewGrpcServer() + go startSvr(svr) + defer stopSvr(svr) + + m1 := models.TestModel{ + Name: "Test Name", + } + m2 := models.TestModel{ + Name: "Test Name", + } + modelSvc := service.NewModelService[models.TestModel]() + _, err := modelSvc.InsertOne(m1) + require.Nil(t, err) + _, err = modelSvc.InsertOne(m2) + require.Nil(t, err) + time.Sleep(100 * time.Millisecond) + + client2.GetGrpcClient().Start() + + clientSvc := client.NewModelService[models.TestModel]() + err = clientSvc.UpdateMany(bson.M{"name": "Test Name"}, bson.M{"$set": bson.M{"name": "New Name"}}) + require.Nil(t, err) + + res, err := clientSvc.GetMany(bson.M{"name": "New Name"}, nil) + require.Nil(t, err) + assert.Equal(t, len(res), 2) +} + +func TestModelService_ReplaceById(t *testing.T) { + setupTestDB() + defer teardownTestDB() + svr := server.NewGrpcServer() + go startSvr(svr) + defer stopSvr(svr) + + m := models.TestModel{ + Name: "Test Name", + } + modelSvc := service.NewModelService[models.TestModel]() + id, err := modelSvc.InsertOne(m) + require.Nil(t, err) + m.SetId(id) + time.Sleep(100 * time.Millisecond) + + client2.GetGrpcClient().Start() + + clientSvc := client.NewModelService[models.TestModel]() + m.Name = "New Name" + err = clientSvc.ReplaceById(m.Id, m) + require.Nil(t, err) + + res, err := clientSvc.GetById(m.Id) + require.Nil(t, err) + assert.Equal(t, res.Name, "New Name") +} + +func TestModelService_ReplaceOne(t *testing.T) { + setupTestDB() + defer teardownTestDB() + svr := server.NewGrpcServer() + go startSvr(svr) + defer stopSvr(svr) + + m := models.TestModel{ + Name: "Test Name", + } + modelSvc := service.NewModelService[models.TestModel]() + id, err := modelSvc.InsertOne(m) + require.Nil(t, err) + m.SetId(id) + time.Sleep(100 * time.Millisecond) + + client2.GetGrpcClient().Start() + + clientSvc := client.NewModelService[models.TestModel]() + m.Name = "New Name" + err = clientSvc.ReplaceOne(bson.M{"name": "Test Name"}, m) + require.Nil(t, err) + + res, err := clientSvc.GetOne(bson.M{"name": "New Name"}, nil) + require.Nil(t, err) + assert.Equal(t, res.Name, "New Name") +} + +func TestModelService_InsertOne(t *testing.T) { + setupTestDB() + defer teardownTestDB() + svr := server.NewGrpcServer() + go startSvr(svr) + defer stopSvr(svr) + + client2.GetGrpcClient().Start() + + clientSvc := client.NewModelService[models.TestModel]() + m := models.TestModel{ + Name: "Test Name", + } + id, err := clientSvc.InsertOne(m) + require.Nil(t, err) + + res, err := clientSvc.GetById(id) + require.Nil(t, err) + assert.Equal(t, res.Name, m.Name) +} + +func TestModelService_InsertMany(t *testing.T) { + setupTestDB() + defer teardownTestDB() + svr := server.NewGrpcServer() + go startSvr(svr) + defer stopSvr(svr) + + client2.GetGrpcClient().Start() + + clientSvc := client.NewModelService[models.TestModel]() + testModels := []models.TestModel{ + {Name: "Test Name 1"}, + {Name: "Test Name 2"}, + } + ids, err := clientSvc.InsertMany(testModels) + require.Nil(t, err) + + for i, id := range ids { + res, err := clientSvc.GetById(id) + require.Nil(t, err) + assert.Equal(t, res.Name, testModels[i].Name) + } +} + +func TestModelService_Count(t *testing.T) { + setupTestDB() + defer teardownTestDB() + svr := server.NewGrpcServer() + go startSvr(svr) + defer stopSvr(svr) + + modelSvc := service.NewModelService[models.TestModel]() + for i := 0; i < 5; i++ { + _, err := modelSvc.InsertOne(models.TestModel{ + Name: "Test Name", + }) + require.Nil(t, err) + } + time.Sleep(100 * time.Millisecond) + + client2.GetGrpcClient().Start() + + clientSvc := client.NewModelService[models.TestModel]() + count, err := clientSvc.Count(bson.M{}) + require.Nil(t, err) + + assert.Equal(t, count, 5) +} diff --git a/core/models/client/model_service_v2.go b/core/models/client/model_service_v2.go deleted file mode 100644 index 8ad827d8c..000000000 --- a/core/models/client/model_service_v2.go +++ /dev/null @@ -1,357 +0,0 @@ -package client - -import ( - "encoding/json" - "github.com/crawlab-team/crawlab/core/grpc/client" - "github.com/crawlab-team/crawlab/core/interfaces" - nodeconfig "github.com/crawlab-team/crawlab/core/node/config" - "github.com/crawlab-team/crawlab/db/mongo" - grpc "github.com/crawlab-team/crawlab/grpc" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" - "reflect" - "sync" -) - -var ( - instanceMap = make(map[string]interface{}) - onceMap = make(map[string]*sync.Once) - mu sync.Mutex -) - -type ModelServiceV2[T any] struct { - cfg interfaces.NodeConfigService - c *client.GrpcClientV2 - modelType string -} - -func (svc *ModelServiceV2[T]) GetById(id primitive.ObjectID) (model *T, err error) { - ctx, cancel := svc.c.Context() - defer cancel() - res, err := svc.c.ModelBaseServiceV2Client.GetById(ctx, &grpc.ModelServiceV2GetByIdRequest{ - NodeKey: svc.cfg.GetNodeKey(), - ModelType: svc.modelType, - Id: id.Hex(), - }) - if err != nil { - return nil, err - } - return svc.deserializeOne(res) -} - -func (svc *ModelServiceV2[T]) GetOne(query bson.M, options *mongo.FindOptions) (model *T, err error) { - ctx, cancel := svc.c.Context() - defer cancel() - queryData, err := json.Marshal(query) - if err != nil { - return nil, err - } - findOptionsData, err := json.Marshal(options) - if err != nil { - return nil, err - } - res, err := svc.c.ModelBaseServiceV2Client.GetOne(ctx, &grpc.ModelServiceV2GetOneRequest{ - NodeKey: svc.cfg.GetNodeKey(), - ModelType: svc.modelType, - Query: queryData, - FindOptions: findOptionsData, - }) - if err != nil { - return nil, err - } - return svc.deserializeOne(res) -} - -func (svc *ModelServiceV2[T]) GetMany(query bson.M, options *mongo.FindOptions) (models []T, err error) { - ctx, cancel := svc.c.Context() - defer cancel() - queryData, err := json.Marshal(query) - if err != nil { - return nil, err - } - findOptionsData, err := json.Marshal(options) - if err != nil { - return nil, err - } - res, err := svc.c.ModelBaseServiceV2Client.GetMany(ctx, &grpc.ModelServiceV2GetManyRequest{ - NodeKey: svc.cfg.GetNodeKey(), - ModelType: svc.modelType, - Query: queryData, - FindOptions: findOptionsData, - }) - if err != nil { - return nil, err - } - return svc.deserializeMany(res) -} - -func (svc *ModelServiceV2[T]) DeleteById(id primitive.ObjectID) (err error) { - ctx, cancel := svc.c.Context() - defer cancel() - _, err = svc.c.ModelBaseServiceV2Client.DeleteById(ctx, &grpc.ModelServiceV2DeleteByIdRequest{ - NodeKey: svc.cfg.GetNodeKey(), - ModelType: svc.modelType, - Id: id.Hex(), - }) - if err != nil { - return err - } - return nil -} - -func (svc *ModelServiceV2[T]) DeleteOne(query bson.M) (err error) { - ctx, cancel := svc.c.Context() - defer cancel() - queryData, err := json.Marshal(query) - if err != nil { - return err - } - _, err = svc.c.ModelBaseServiceV2Client.DeleteOne(ctx, &grpc.ModelServiceV2DeleteOneRequest{ - NodeKey: svc.cfg.GetNodeKey(), - ModelType: svc.modelType, - Query: queryData, - }) - if err != nil { - return err - } - return nil -} - -func (svc *ModelServiceV2[T]) DeleteMany(query bson.M) (err error) { - ctx, cancel := svc.c.Context() - defer cancel() - queryData, err := json.Marshal(query) - if err != nil { - return err - } - _, err = svc.c.ModelBaseServiceV2Client.DeleteMany(ctx, &grpc.ModelServiceV2DeleteManyRequest{ - NodeKey: svc.cfg.GetNodeKey(), - ModelType: svc.modelType, - Query: queryData, - }) - if err != nil { - return err - } - return nil -} - -func (svc *ModelServiceV2[T]) UpdateById(id primitive.ObjectID, update bson.M) (err error) { - ctx, cancel := svc.c.Context() - defer cancel() - updateData, err := json.Marshal(update) - if err != nil { - return err - } - _, err = svc.c.ModelBaseServiceV2Client.UpdateById(ctx, &grpc.ModelServiceV2UpdateByIdRequest{ - NodeKey: svc.cfg.GetNodeKey(), - ModelType: svc.modelType, - Id: id.Hex(), - Update: updateData, - }) - if err != nil { - return err - } - return nil -} - -func (svc *ModelServiceV2[T]) UpdateOne(query bson.M, update bson.M) (err error) { - ctx, cancel := svc.c.Context() - defer cancel() - queryData, err := json.Marshal(query) - if err != nil { - return err - } - updateData, err := json.Marshal(update) - if err != nil { - return err - } - _, err = svc.c.ModelBaseServiceV2Client.UpdateOne(ctx, &grpc.ModelServiceV2UpdateOneRequest{ - NodeKey: svc.cfg.GetNodeKey(), - ModelType: svc.modelType, - Query: queryData, - Update: updateData, - }) - if err != nil { - return err - } - return nil -} - -func (svc *ModelServiceV2[T]) UpdateMany(query bson.M, update bson.M) (err error) { - ctx, cancel := svc.c.Context() - defer cancel() - queryData, err := json.Marshal(query) - if err != nil { - return err - } - updateData, err := json.Marshal(update) - if err != nil { - return err - } - _, err = svc.c.ModelBaseServiceV2Client.UpdateMany(ctx, &grpc.ModelServiceV2UpdateManyRequest{ - NodeKey: svc.cfg.GetNodeKey(), - ModelType: svc.modelType, - Query: queryData, - Update: updateData, - }) - return nil -} - -func (svc *ModelServiceV2[T]) ReplaceById(id primitive.ObjectID, model T) (err error) { - ctx, cancel := svc.c.Context() - defer cancel() - modelData, err := json.Marshal(model) - if err != nil { - return err - } - _, err = svc.c.ModelBaseServiceV2Client.ReplaceById(ctx, &grpc.ModelServiceV2ReplaceByIdRequest{ - NodeKey: svc.cfg.GetNodeKey(), - ModelType: svc.modelType, - Id: id.Hex(), - Model: modelData, - }) - if err != nil { - return err - } - return nil -} - -func (svc *ModelServiceV2[T]) ReplaceOne(query bson.M, model T) (err error) { - ctx, cancel := svc.c.Context() - defer cancel() - queryData, err := json.Marshal(query) - if err != nil { - return err - } - modelData, err := json.Marshal(model) - if err != nil { - return err - } - _, err = svc.c.ModelBaseServiceV2Client.ReplaceOne(ctx, &grpc.ModelServiceV2ReplaceOneRequest{ - NodeKey: svc.cfg.GetNodeKey(), - ModelType: svc.modelType, - Query: queryData, - Model: modelData, - }) - if err != nil { - return err - } - return nil -} - -func (svc *ModelServiceV2[T]) InsertOne(model T) (id primitive.ObjectID, err error) { - ctx, cancel := svc.c.Context() - defer cancel() - modelData, err := json.Marshal(model) - if err != nil { - return primitive.NilObjectID, err - } - res, err := svc.c.ModelBaseServiceV2Client.InsertOne(ctx, &grpc.ModelServiceV2InsertOneRequest{ - NodeKey: svc.cfg.GetNodeKey(), - ModelType: svc.modelType, - Model: modelData, - }) - if err != nil { - return primitive.NilObjectID, err - } - return deserialize[primitive.ObjectID](res) - //idStr, err := deserialize[string](res) - //if err != nil { - // return primitive.NilObjectID, err - //} - //return primitive.ObjectIDFromHex(idStr) -} - -func (svc *ModelServiceV2[T]) InsertMany(models []T) (ids []primitive.ObjectID, err error) { - ctx, cancel := svc.c.Context() - defer cancel() - modelsData, err := json.Marshal(models) - if err != nil { - return nil, err - } - res, err := svc.c.ModelBaseServiceV2Client.InsertMany(ctx, &grpc.ModelServiceV2InsertManyRequest{ - NodeKey: svc.cfg.GetNodeKey(), - ModelType: svc.modelType, - Models: modelsData, - }) - if err != nil { - return nil, err - } - return deserialize[[]primitive.ObjectID](res) -} - -func (svc *ModelServiceV2[T]) Count(query bson.M) (total int, err error) { - ctx, cancel := svc.c.Context() - defer cancel() - queryData, err := json.Marshal(query) - if err != nil { - return 0, err - } - res, err := svc.c.ModelBaseServiceV2Client.Count(ctx, &grpc.ModelServiceV2CountRequest{ - NodeKey: svc.cfg.GetNodeKey(), - ModelType: svc.modelType, - Query: queryData, - }) - if err != nil { - return 0, err - } - return deserialize[int](res) -} - -func (svc *ModelServiceV2[T]) GetCol() (col *mongo.Col) { - return nil -} - -func (svc *ModelServiceV2[T]) deserializeOne(res *grpc.Response) (result *T, err error) { - r, err := deserialize[T](res) - if err != nil { - return nil, err - } - return &r, err -} - -func (svc *ModelServiceV2[T]) deserializeMany(res *grpc.Response) (results []T, err error) { - return deserialize[[]T](res) -} - -func deserialize[T any](res *grpc.Response) (result T, err error) { - err = json.Unmarshal(res.Data, &result) - if err != nil { - return result, err - } - return result, nil -} - -func NewModelServiceV2[T any]() *ModelServiceV2[T] { - mu.Lock() - defer mu.Unlock() - - var v T - t := reflect.TypeOf(v) - typeName := t.Name() - - if _, exists := onceMap[typeName]; !exists { - onceMap[typeName] = new(sync.Once) - } - - var instance *ModelServiceV2[T] - - c := client.GetGrpcClientV2() - if !c.IsStarted() { - err := c.Start() - if err != nil { - panic(err) - } - } - - onceMap[typeName].Do(func() { - instance = &ModelServiceV2[T]{ - cfg: nodeconfig.GetNodeConfigService(), - c: c, - modelType: typeName, - } - instanceMap[typeName] = instance - }) - - return instanceMap[typeName].(*ModelServiceV2[T]) -} diff --git a/core/models/client/model_service_v2_test.go b/core/models/client/model_service_v2_test.go deleted file mode 100644 index c4053bb14..000000000 --- a/core/models/client/model_service_v2_test.go +++ /dev/null @@ -1,439 +0,0 @@ -package client_test - -import ( - "context" - "github.com/crawlab-team/crawlab/core/grpc/server" - "github.com/crawlab-team/crawlab/core/models/client" - "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/core/models/service" - "github.com/crawlab-team/crawlab/db/mongo" - "github.com/spf13/viper" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - "go.mongodb.org/mongo-driver/bson" - "google.golang.org/grpc" - "google.golang.org/grpc/credentials/insecure" - "testing" - "time" -) - -type TestModel models.TestModel - -func setupTestDB() { - viper.Set("mongo.db", "testdb") -} - -func teardownTestDB() { - db := mongo.GetMongoDb("testdb") - db.Drop(context.Background()) -} - -func TestModelServiceV2_GetById(t *testing.T) { - setupTestDB() - defer teardownTestDB() - svr, err := server.NewGrpcServerV2() - require.Nil(t, err) - go svr.Start() - defer svr.Stop() - - m := TestModel{ - Name: "Test Name", - } - modelSvc := service.NewModelServiceV2[TestModel]() - id, err := modelSvc.InsertOne(m) - require.Nil(t, err) - m.SetId(id) - time.Sleep(100 * time.Millisecond) - - c, err := grpc.Dial("localhost:9666", grpc.WithTransportCredentials(insecure.NewCredentials())) - require.Nil(t, err) - c.Connect() - - clientSvc := client.NewModelServiceV2[TestModel]() - res, err := clientSvc.GetById(m.Id) - require.Nil(t, err) - assert.Equal(t, res.Id, m.Id) - assert.Equal(t, res.Name, m.Name) -} - -func TestModelServiceV2_GetOne(t *testing.T) { - setupTestDB() - defer teardownTestDB() - svr, err := server.NewGrpcServerV2() - require.Nil(t, err) - go svr.Start() - defer svr.Stop() - - m := TestModel{ - Name: "Test Name", - } - modelSvc := service.NewModelServiceV2[TestModel]() - id, err := modelSvc.InsertOne(m) - require.Nil(t, err) - m.SetId(id) - time.Sleep(100 * time.Millisecond) - - c, err := grpc.Dial("localhost:9666", grpc.WithTransportCredentials(insecure.NewCredentials())) - require.Nil(t, err) - c.Connect() - - clientSvc := client.NewModelServiceV2[TestModel]() - res, err := clientSvc.GetOne(bson.M{"name": m.Name}, nil) - require.Nil(t, err) - assert.Equal(t, res.Id, m.Id) - assert.Equal(t, res.Name, m.Name) -} - -func TestModelServiceV2_GetMany(t *testing.T) { - setupTestDB() - defer teardownTestDB() - svr, err := server.NewGrpcServerV2() - require.Nil(t, err) - go svr.Start() - defer svr.Stop() - - m := TestModel{ - Name: "Test Name", - } - modelSvc := service.NewModelServiceV2[TestModel]() - id, err := modelSvc.InsertOne(m) - require.Nil(t, err) - m.SetId(id) - time.Sleep(100 * time.Millisecond) - - c, err := grpc.Dial("localhost:9666", grpc.WithTransportCredentials(insecure.NewCredentials())) - require.Nil(t, err) - c.Connect() - - clientSvc := client.NewModelServiceV2[TestModel]() - res, err := clientSvc.GetMany(bson.M{"name": m.Name}, nil) - require.Nil(t, err) - assert.Equal(t, len(res), 1) - assert.Equal(t, res[0].Id, m.Id) - assert.Equal(t, res[0].Name, m.Name) -} - -func TestModelServiceV2_DeleteById(t *testing.T) { - setupTestDB() - defer teardownTestDB() - svr, err := server.NewGrpcServerV2() - require.Nil(t, err) - go svr.Start() - defer svr.Stop() - - m := TestModel{ - Name: "Test Name", - } - modelSvc := service.NewModelServiceV2[TestModel]() - id, err := modelSvc.InsertOne(m) - require.Nil(t, err) - m.SetId(id) - time.Sleep(100 * time.Millisecond) - - c, err := grpc.Dial("localhost:9666", grpc.WithTransportCredentials(insecure.NewCredentials())) - require.Nil(t, err) - c.Connect() - - clientSvc := client.NewModelServiceV2[TestModel]() - err = clientSvc.DeleteById(m.Id) - require.Nil(t, err) - - res, err := clientSvc.GetById(m.Id) - assert.NotNil(t, err) - require.Nil(t, res) -} - -func TestModelServiceV2_DeleteOne(t *testing.T) { - setupTestDB() - defer teardownTestDB() - svr, err := server.NewGrpcServerV2() - require.Nil(t, err) - go svr.Start() - defer svr.Stop() - - m := TestModel{ - Name: "Test Name", - } - modelSvc := service.NewModelServiceV2[TestModel]() - id, err := modelSvc.InsertOne(m) - require.Nil(t, err) - m.SetId(id) - time.Sleep(100 * time.Millisecond) - - c, err := grpc.Dial("localhost:9666", grpc.WithTransportCredentials(insecure.NewCredentials())) - require.Nil(t, err) - c.Connect() - - clientSvc := client.NewModelServiceV2[TestModel]() - err = clientSvc.DeleteOne(bson.M{"name": m.Name}) - require.Nil(t, err) - - res, err := clientSvc.GetOne(bson.M{"name": m.Name}, nil) - assert.NotNil(t, err) - require.Nil(t, res) -} - -func TestModelServiceV2_DeleteMany(t *testing.T) { - setupTestDB() - defer teardownTestDB() - svr, err := server.NewGrpcServerV2() - require.Nil(t, err) - go svr.Start() - defer svr.Stop() - - m := TestModel{ - Name: "Test Name", - } - modelSvc := service.NewModelServiceV2[TestModel]() - id, err := modelSvc.InsertOne(m) - require.Nil(t, err) - m.SetId(id) - time.Sleep(100 * time.Millisecond) - - c, err := grpc.Dial("localhost:9666", grpc.WithTransportCredentials(insecure.NewCredentials())) - require.Nil(t, err) - c.Connect() - - clientSvc := client.NewModelServiceV2[TestModel]() - err = clientSvc.DeleteMany(bson.M{"name": m.Name}) - require.Nil(t, err) - - res, err := clientSvc.GetMany(bson.M{"name": m.Name}, nil) - require.Nil(t, err) - assert.Equal(t, len(res), 0) -} - -func TestModelServiceV2_UpdateById(t *testing.T) { - setupTestDB() - defer teardownTestDB() - svr, err := server.NewGrpcServerV2() - require.Nil(t, err) - go svr.Start() - defer svr.Stop() - - m := TestModel{ - Name: "Test Name", - } - modelSvc := service.NewModelServiceV2[TestModel]() - id, err := modelSvc.InsertOne(m) - require.Nil(t, err) - m.SetId(id) - time.Sleep(100 * time.Millisecond) - - c, err := grpc.Dial("localhost:9666", grpc.WithTransportCredentials(insecure.NewCredentials())) - require.Nil(t, err) - c.Connect() - - clientSvc := client.NewModelServiceV2[TestModel]() - err = clientSvc.UpdateById(m.Id, bson.M{"$set": bson.M{"name": "New Name"}}) - require.Nil(t, err) - - res, err := clientSvc.GetById(m.Id) - require.Nil(t, err) - assert.Equal(t, res.Name, "New Name") -} - -func TestModelServiceV2_UpdateOne(t *testing.T) { - setupTestDB() - defer teardownTestDB() - svr, err := server.NewGrpcServerV2() - require.Nil(t, err) - go svr.Start() - defer svr.Stop() - - m := TestModel{ - Name: "Test Name", - } - modelSvc := service.NewModelServiceV2[TestModel]() - id, err := modelSvc.InsertOne(m) - require.Nil(t, err) - m.SetId(id) - time.Sleep(100 * time.Millisecond) - - c, err := grpc.Dial("localhost:9666", grpc.WithTransportCredentials(insecure.NewCredentials())) - require.Nil(t, err) - c.Connect() - - clientSvc := client.NewModelServiceV2[TestModel]() - err = clientSvc.UpdateOne(bson.M{"name": m.Name}, bson.M{"$set": bson.M{"name": "New Name"}}) - require.Nil(t, err) - - res, err := clientSvc.GetOne(bson.M{"name": "New Name"}, nil) - require.Nil(t, err) - assert.Equal(t, res.Name, "New Name") -} - -func TestModelServiceV2_UpdateMany(t *testing.T) { - setupTestDB() - defer teardownTestDB() - svr, err := server.NewGrpcServerV2() - require.Nil(t, err) - go svr.Start() - defer svr.Stop() - - m1 := TestModel{ - Name: "Test Name", - } - m2 := TestModel{ - Name: "Test Name", - } - modelSvc := service.NewModelServiceV2[TestModel]() - _, err = modelSvc.InsertOne(m1) - require.Nil(t, err) - _, err = modelSvc.InsertOne(m2) - require.Nil(t, err) - time.Sleep(100 * time.Millisecond) - - c, err := grpc.Dial("localhost:9666", grpc.WithTransportCredentials(insecure.NewCredentials())) - require.Nil(t, err) - c.Connect() - - clientSvc := client.NewModelServiceV2[TestModel]() - err = clientSvc.UpdateMany(bson.M{"name": "Test Name"}, bson.M{"$set": bson.M{"name": "New Name"}}) - require.Nil(t, err) - - res, err := clientSvc.GetMany(bson.M{"name": "New Name"}, nil) - require.Nil(t, err) - assert.Equal(t, len(res), 2) -} - -func TestModelServiceV2_ReplaceById(t *testing.T) { - setupTestDB() - defer teardownTestDB() - svr, err := server.NewGrpcServerV2() - require.Nil(t, err) - go svr.Start() - defer svr.Stop() - - m := TestModel{ - Name: "Test Name", - } - modelSvc := service.NewModelServiceV2[TestModel]() - id, err := modelSvc.InsertOne(m) - require.Nil(t, err) - m.SetId(id) - time.Sleep(100 * time.Millisecond) - - c, err := grpc.Dial("localhost:9666", grpc.WithTransportCredentials(insecure.NewCredentials())) - require.Nil(t, err) - c.Connect() - - clientSvc := client.NewModelServiceV2[TestModel]() - m.Name = "New Name" - err = clientSvc.ReplaceById(m.Id, m) - require.Nil(t, err) - - res, err := clientSvc.GetById(m.Id) - require.Nil(t, err) - assert.Equal(t, res.Name, "New Name") -} - -func TestModelServiceV2_ReplaceOne(t *testing.T) { - setupTestDB() - defer teardownTestDB() - svr, err := server.NewGrpcServerV2() - require.Nil(t, err) - go svr.Start() - defer svr.Stop() - - m := TestModel{ - Name: "Test Name", - } - modelSvc := service.NewModelServiceV2[TestModel]() - id, err := modelSvc.InsertOne(m) - require.Nil(t, err) - m.SetId(id) - time.Sleep(100 * time.Millisecond) - - c, err := grpc.Dial("localhost:9666", grpc.WithTransportCredentials(insecure.NewCredentials())) - require.Nil(t, err) - c.Connect() - - clientSvc := client.NewModelServiceV2[TestModel]() - m.Name = "New Name" - err = clientSvc.ReplaceOne(bson.M{"name": "Test Name"}, m) - require.Nil(t, err) - - res, err := clientSvc.GetOne(bson.M{"name": "New Name"}, nil) - require.Nil(t, err) - assert.Equal(t, res.Name, "New Name") -} - -func TestModelServiceV2_InsertOne(t *testing.T) { - setupTestDB() - defer teardownTestDB() - svr, err := server.NewGrpcServerV2() - require.Nil(t, err) - go svr.Start() - defer svr.Stop() - - c, err := grpc.Dial("localhost:9666", grpc.WithTransportCredentials(insecure.NewCredentials())) - require.Nil(t, err) - c.Connect() - - clientSvc := client.NewModelServiceV2[TestModel]() - m := TestModel{ - Name: "Test Name", - } - id, err := clientSvc.InsertOne(m) - require.Nil(t, err) - - res, err := clientSvc.GetById(id) - require.Nil(t, err) - assert.Equal(t, res.Name, m.Name) -} - -func TestModelServiceV2_InsertMany(t *testing.T) { - setupTestDB() - defer teardownTestDB() - svr, err := server.NewGrpcServerV2() - require.Nil(t, err) - go svr.Start() - defer svr.Stop() - - c, err := grpc.Dial("localhost:9666", grpc.WithTransportCredentials(insecure.NewCredentials())) - require.Nil(t, err) - c.Connect() - - clientSvc := client.NewModelServiceV2[TestModel]() - models := []TestModel{ - {Name: "Test Name 1"}, - {Name: "Test Name 2"}, - } - ids, err := clientSvc.InsertMany(models) - require.Nil(t, err) - - for i, id := range ids { - res, err := clientSvc.GetById(id) - require.Nil(t, err) - assert.Equal(t, res.Name, models[i].Name) - } -} - -func TestModelServiceV2_Count(t *testing.T) { - setupTestDB() - defer teardownTestDB() - svr, err := server.NewGrpcServerV2() - require.Nil(t, err) - go svr.Start() - defer svr.Stop() - - modelSvc := service.NewModelServiceV2[TestModel]() - for i := 0; i < 5; i++ { - _, err = modelSvc.InsertOne(TestModel{ - Name: "Test Name", - }) - require.Nil(t, err) - } - time.Sleep(100 * time.Millisecond) - - c, err := grpc.Dial("localhost:9666", grpc.WithTransportCredentials(insecure.NewCredentials())) - require.Nil(t, err) - c.Connect() - - clientSvc := client.NewModelServiceV2[TestModel]() - count, err := clientSvc.Count(bson.M{}) - require.Nil(t, err) - - assert.Equal(t, count, 5) -} diff --git a/core/models/client/model_spider_service.go b/core/models/client/model_spider_service.go deleted file mode 100644 index 164baee98..000000000 --- a/core/models/client/model_spider_service.go +++ /dev/null @@ -1,70 +0,0 @@ -package client - -import ( - "github.com/crawlab-team/crawlab/core/errors" - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/db/mongo" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -type SpiderServiceDelegate struct { - interfaces.GrpcClientModelBaseService -} - -func (svc *SpiderServiceDelegate) GetSpiderById(id primitive.ObjectID) (s interfaces.Spider, err error) { - res, err := svc.GetById(id) - if err != nil { - return nil, err - } - s, ok := res.(interfaces.Spider) - if !ok { - return nil, errors.ErrorModelInvalidType - } - return s, nil -} - -func (svc *SpiderServiceDelegate) GetSpider(query bson.M, opts *mongo.FindOptions) (s interfaces.Spider, err error) { - res, err := svc.Get(query, opts) - if err != nil { - return nil, err - } - s, ok := res.(interfaces.Spider) - if !ok { - return nil, errors.ErrorModelInvalidType - } - return s, nil -} - -func (svc *SpiderServiceDelegate) GetSpiderList(query bson.M, opts *mongo.FindOptions) (res []interfaces.Spider, err error) { - list, err := svc.GetList(query, opts) - if err != nil { - return nil, err - } - for _, item := range list.GetModels() { - s, ok := item.(interfaces.Spider) - if !ok { - return nil, errors.ErrorModelInvalidType - } - res = append(res, s) - } - return res, nil -} - -func NewSpiderServiceDelegate() (svc2 interfaces.GrpcClientModelSpiderService, err error) { - var opts []ModelBaseServiceDelegateOption - - // apply options - opts = append(opts, WithBaseServiceModelId(interfaces.ModelIdSpider)) - - // base service - baseSvc, err := NewBaseServiceDelegate(opts...) - if err != nil { - return nil, err - } - - // service - svc := &SpiderServiceDelegate{baseSvc} - - return svc, nil -} diff --git a/core/models/client/model_task_service.go b/core/models/client/model_task_service.go deleted file mode 100644 index 16a9612b9..000000000 --- a/core/models/client/model_task_service.go +++ /dev/null @@ -1,70 +0,0 @@ -package client - -import ( - "github.com/crawlab-team/crawlab/core/errors" - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/db/mongo" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -type TaskServiceDelegate struct { - interfaces.GrpcClientModelBaseService -} - -func (svc *TaskServiceDelegate) GetTaskById(id primitive.ObjectID) (t interfaces.Task, err error) { - res, err := svc.GetById(id) - if err != nil { - return nil, err - } - s, ok := res.(interfaces.Task) - if !ok { - return nil, errors.ErrorModelInvalidType - } - return s, nil -} - -func (svc *TaskServiceDelegate) GetTask(query bson.M, opts *mongo.FindOptions) (t interfaces.Task, err error) { - res, err := svc.Get(query, opts) - if err != nil { - return nil, err - } - s, ok := res.(interfaces.Task) - if !ok { - return nil, errors.ErrorModelInvalidType - } - return s, nil -} - -func (svc *TaskServiceDelegate) GetTaskList(query bson.M, opts *mongo.FindOptions) (res []interfaces.Task, err error) { - list, err := svc.GetList(query, opts) - if err != nil { - return nil, err - } - for _, item := range list.GetModels() { - s, ok := item.(interfaces.Task) - if !ok { - return nil, errors.ErrorModelInvalidType - } - res = append(res, s) - } - return res, nil -} - -func NewTaskServiceDelegate() (svc2 interfaces.GrpcClientModelTaskService, err error) { - var opts []ModelBaseServiceDelegateOption - - // apply options - opts = append(opts, WithBaseServiceModelId(interfaces.ModelIdTask)) - - // base service - baseSvc, err := NewBaseServiceDelegate(opts...) - if err != nil { - return nil, err - } - - // service - svc := &TaskServiceDelegate{baseSvc} - - return svc, nil -} diff --git a/core/models/client/model_task_stat_service.go b/core/models/client/model_task_stat_service.go deleted file mode 100644 index 1714772ba..000000000 --- a/core/models/client/model_task_stat_service.go +++ /dev/null @@ -1,70 +0,0 @@ -package client - -import ( - "github.com/crawlab-team/crawlab/core/errors" - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/db/mongo" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -type TaskStatServiceDelegate struct { - interfaces.GrpcClientModelBaseService -} - -func (svc *TaskStatServiceDelegate) GetTaskStatById(id primitive.ObjectID) (t interfaces.TaskStat, err error) { - res, err := svc.GetById(id) - if err != nil { - return nil, err - } - s, ok := res.(interfaces.TaskStat) - if !ok { - return nil, errors.ErrorModelInvalidType - } - return s, nil -} - -func (svc *TaskStatServiceDelegate) GetTaskStat(query bson.M, opts *mongo.FindOptions) (t interfaces.TaskStat, err error) { - res, err := svc.Get(query, opts) - if err != nil { - return nil, err - } - s, ok := res.(interfaces.TaskStat) - if !ok { - return nil, errors.ErrorModelInvalidType - } - return s, nil -} - -func (svc *TaskStatServiceDelegate) GetTaskStatList(query bson.M, opts *mongo.FindOptions) (res []interfaces.TaskStat, err error) { - list, err := svc.GetList(query, opts) - if err != nil { - return nil, err - } - for _, item := range list.GetModels() { - s, ok := item.(interfaces.TaskStat) - if !ok { - return nil, errors.ErrorModelInvalidType - } - res = append(res, s) - } - return res, nil -} - -func NewTaskStatServiceDelegate() (svc2 interfaces.GrpcClientModelTaskStatService, err error) { - var opts []ModelBaseServiceDelegateOption - - // apply options - opts = append(opts, WithBaseServiceModelId(interfaces.ModelIdTaskStat)) - - // base service - baseSvc, err := NewBaseServiceDelegate(opts...) - if err != nil { - return nil, err - } - - // service - svc := &TaskStatServiceDelegate{baseSvc} - - return svc, nil -} diff --git a/core/models/client/options.go b/core/models/client/options.go deleted file mode 100644 index e09668023..000000000 --- a/core/models/client/options.go +++ /dev/null @@ -1,33 +0,0 @@ -package client - -import "github.com/crawlab-team/crawlab/core/interfaces" - -type ModelDelegateOption func(delegate interfaces.GrpcClientModelDelegate) - -func WithDelegateConfigPath(path string) ModelDelegateOption { - return func(d interfaces.GrpcClientModelDelegate) { - d.SetConfigPath(path) - } -} - -type ModelServiceDelegateOption func(delegate interfaces.GrpcClientModelService) - -func WithServiceConfigPath(path string) ModelServiceDelegateOption { - return func(d interfaces.GrpcClientModelService) { - d.SetConfigPath(path) - } -} - -type ModelBaseServiceDelegateOption func(delegate interfaces.GrpcClientModelBaseService) - -func WithBaseServiceModelId(id interfaces.ModelId) ModelBaseServiceDelegateOption { - return func(d interfaces.GrpcClientModelBaseService) { - d.SetModelId(id) - } -} - -func WithBaseServiceConfigPath(path string) ModelBaseServiceDelegateOption { - return func(d interfaces.GrpcClientModelBaseService) { - d.SetConfigPath(path) - } -} diff --git a/core/models/common/index_service.go b/core/models/common/index_service.go deleted file mode 100644 index ff75b92e8..000000000 --- a/core/models/common/index_service.go +++ /dev/null @@ -1,145 +0,0 @@ -package common - -import ( - "github.com/crawlab-team/crawlab/core/constants" - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/db/mongo" - "go.mongodb.org/mongo-driver/bson" - mongo2 "go.mongodb.org/mongo-driver/mongo" - "go.mongodb.org/mongo-driver/mongo/options" -) - -func CreateIndexes() { - // artifacts - mongo.GetMongoCol(interfaces.ModelColNameArtifact).MustCreateIndexes([]mongo2.IndexModel{ - {Keys: bson.M{"_col": 1}}, - {Keys: bson.M{"_del": 1}}, - {Keys: bson.M{"_tid": 1}}, - }) - - // tags - mongo.GetMongoCol(interfaces.ModelColNameTag).MustCreateIndexes([]mongo2.IndexModel{ - {Keys: bson.M{"col": 1}}, - {Keys: bson.M{"name": 1}}, - }) - - // nodes - mongo.GetMongoCol(interfaces.ModelColNameNode).MustCreateIndexes([]mongo2.IndexModel{ - {Keys: bson.M{"key": 1}}, // key - {Keys: bson.M{"name": 1}}, // name - {Keys: bson.M{"is_master": 1}}, // is_master - {Keys: bson.M{"status": 1}}, // status - {Keys: bson.M{"enabled": 1}}, // enabled - {Keys: bson.M{"active": 1}}, // active - }) - - // projects - mongo.GetMongoCol(interfaces.ModelColNameNode).MustCreateIndexes([]mongo2.IndexModel{ - {Keys: bson.M{"name": 1}}, - }) - - // spiders - mongo.GetMongoCol(interfaces.ModelColNameSpider).MustCreateIndexes([]mongo2.IndexModel{ - {Keys: bson.M{"name": 1}}, - {Keys: bson.M{"type": 1}}, - {Keys: bson.M{"col_id": 1}}, - {Keys: bson.M{"project_id": 1}}, - }) - - // tasks - mongo.GetMongoCol(interfaces.ModelColNameTask).MustCreateIndexes([]mongo2.IndexModel{ - {Keys: bson.M{"spider_id": 1}}, - {Keys: bson.M{"status": 1}}, - {Keys: bson.M{"node_id": 1}}, - {Keys: bson.M{"schedule_id": 1}}, - {Keys: bson.M{"type": 1}}, - {Keys: bson.M{"mode": 1}}, - {Keys: bson.M{"priority": 1}}, - {Keys: bson.M{"parent_id": 1}}, - {Keys: bson.M{"has_sub": 1}}, - {Keys: bson.M{"create_ts": -1}}, - }) - - // task stats - mongo.GetMongoCol(interfaces.ModelColNameTaskStat).MustCreateIndexes([]mongo2.IndexModel{ - {Keys: bson.M{"create_ts": 1}}, - }) - - // schedules - mongo.GetMongoCol(interfaces.ModelColNameSchedule).MustCreateIndexes([]mongo2.IndexModel{ - {Keys: bson.M{"name": 1}}, - {Keys: bson.M{"spider_id": 1}}, - {Keys: bson.M{"enabled": 1}}, - }) - - // users - mongo.GetMongoCol(interfaces.ModelColNameUser).MustCreateIndexes([]mongo2.IndexModel{ - {Keys: bson.M{"username": 1}}, - {Keys: bson.M{"role": 1}}, - {Keys: bson.M{"email": 1}}, - }) - - // settings - mongo.GetMongoCol(interfaces.ModelColNameSetting).MustCreateIndexes([]mongo2.IndexModel{ - {Keys: bson.M{"key": 1}}, - }) - - // tokens - mongo.GetMongoCol(interfaces.ModelColNameToken).MustCreateIndexes([]mongo2.IndexModel{ - {Keys: bson.M{"name": 1}}, - }) - - // variables - mongo.GetMongoCol(interfaces.ModelColNameVariable).MustCreateIndexes([]mongo2.IndexModel{ - {Keys: bson.M{"key": 1}}, - }) - - // data sources - mongo.GetMongoCol(interfaces.ModelColNameDataSource).MustCreateIndexes([]mongo2.IndexModel{ - {Keys: bson.M{"name": 1}}, - }) - - // data collections - mongo.GetMongoCol(interfaces.ModelColNameDataCollection).MustCreateIndexes([]mongo2.IndexModel{ - {Keys: bson.M{"name": 1}}, - }) - - // extra values - mongo.GetMongoCol(interfaces.ModelColNameExtraValues).MustCreateIndexes([]mongo2.IndexModel{ - {Keys: bson.M{"oid": 1}}, - {Keys: bson.M{"m": 1}}, - {Keys: bson.M{"t": 1}}, - {Keys: bson.M{"m": 1, "t": 1}}, - {Keys: bson.M{"oid": 1, "m": 1, "t": 1}}, - }) - - // roles - mongo.GetMongoCol(interfaces.ModelColNameRole).MustCreateIndexes([]mongo2.IndexModel{ - {Keys: bson.D{{"key", 1}}, Options: options.Index().SetUnique(true)}, - }) - - // user role relations - mongo.GetMongoCol(interfaces.ModelColNameUserRole).MustCreateIndexes([]mongo2.IndexModel{ - {Keys: bson.D{{"user_id", 1}, {"role_id", 1}}, Options: options.Index().SetUnique(true)}, - {Keys: bson.D{{"role_id", 1}, {"user_id", 1}}, Options: options.Index().SetUnique(true)}, - }) - - // permissions - mongo.GetMongoCol(interfaces.ModelColNamePermission).MustCreateIndexes([]mongo2.IndexModel{ - {Keys: bson.D{{"key", 1}}, Options: options.Index().SetUnique(true)}, - }) - - // role permission relations - mongo.GetMongoCol(interfaces.ModelColNameRolePermission).MustCreateIndexes([]mongo2.IndexModel{ - {Keys: bson.D{{"role_id", 1}, {"permission_id", 1}}, Options: options.Index().SetUnique(true)}, - {Keys: bson.D{{"permission_id", 1}, {"role_id", 1}}, Options: options.Index().SetUnique(true)}, - }) - - // cache - mongo.GetMongoCol(constants.CacheColName).MustCreateIndexes([]mongo2.IndexModel{ - { - Keys: bson.M{constants.CacheColTime: 1}, - Options: options.Index().SetExpireAfterSeconds(3600 * 24), - }, - }) -} diff --git a/core/models/common/index_service_v2.go b/core/models/common/index_service_v2.go deleted file mode 100644 index e87ec7f35..000000000 --- a/core/models/common/index_service_v2.go +++ /dev/null @@ -1,180 +0,0 @@ -package common - -import ( - "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/core/models/service" - "github.com/crawlab-team/crawlab/db/mongo" - "go.mongodb.org/mongo-driver/bson" - mongo2 "go.mongodb.org/mongo-driver/mongo" - "go.mongodb.org/mongo-driver/mongo/options" -) - -func CreateIndexesV2() { - // nodes - mongo.GetMongoCol(service.GetCollectionNameByInstance(models.NodeV2{})).MustCreateIndexes([]mongo2.IndexModel{ - {Keys: bson.M{"key": 1}}, // key - {Keys: bson.M{"name": 1}}, // name - {Keys: bson.M{"is_master": 1}}, // is_master - {Keys: bson.M{"status": 1}}, // status - {Keys: bson.M{"enabled": 1}}, // enabled - {Keys: bson.M{"active": 1}}, // active - }) - - // projects - mongo.GetMongoCol(service.GetCollectionNameByInstance(models.ProjectV2{})).MustCreateIndexes([]mongo2.IndexModel{ - {Keys: bson.M{"name": 1}}, - }) - - // spiders - mongo.GetMongoCol(service.GetCollectionNameByInstance(models.SpiderV2{})).MustCreateIndexes([]mongo2.IndexModel{ - {Keys: bson.M{"name": 1}}, - {Keys: bson.M{"type": 1}}, - {Keys: bson.M{"col_id": 1}}, - {Keys: bson.M{"project_id": 1}}, - }) - - // tasks - mongo.GetMongoCol(service.GetCollectionNameByInstance(models.TaskV2{})).MustCreateIndexes([]mongo2.IndexModel{ - {Keys: bson.M{"spider_id": 1}}, - {Keys: bson.M{"status": 1}}, - {Keys: bson.M{"node_id": 1}}, - {Keys: bson.M{"schedule_id": 1}}, - {Keys: bson.M{"type": 1}}, - {Keys: bson.M{"mode": 1}}, - {Keys: bson.M{"priority": 1}}, - {Keys: bson.M{"parent_id": 1}}, - {Keys: bson.M{"has_sub": 1}}, - {Keys: bson.M{"create_ts": -1}}, - }) - - // task stats - mongo.GetMongoCol(service.GetCollectionNameByInstance(models.TaskStatV2{})).MustCreateIndexes([]mongo2.IndexModel{ - {Keys: bson.M{"create_ts": 1}}, - }) - - // schedules - mongo.GetMongoCol(service.GetCollectionNameByInstance(models.ScheduleV2{})).MustCreateIndexes([]mongo2.IndexModel{ - {Keys: bson.M{"name": 1}}, - {Keys: bson.M{"spider_id": 1}}, - {Keys: bson.M{"enabled": 1}}, - }) - - // users - mongo.GetMongoCol(service.GetCollectionNameByInstance(models.UserV2{})).MustCreateIndexes([]mongo2.IndexModel{ - {Keys: bson.M{"username": 1}}, - {Keys: bson.M{"role": 1}}, - {Keys: bson.M{"email": 1}}, - }) - - // settings - mongo.GetMongoCol(service.GetCollectionNameByInstance(models.SettingV2{})).MustCreateIndexes([]mongo2.IndexModel{ - {Keys: bson.M{"key": 1}}, - }) - - // tokens - mongo.GetMongoCol(service.GetCollectionNameByInstance(models.TokenV2{})).MustCreateIndexes([]mongo2.IndexModel{ - {Keys: bson.M{"name": 1}}, - }) - - // variables - mongo.GetMongoCol(service.GetCollectionNameByInstance(models.VariableV2{})).MustCreateIndexes([]mongo2.IndexModel{ - {Keys: bson.M{"key": 1}}, - }) - - // data sources - mongo.GetMongoCol(service.GetCollectionNameByInstance(models.DataSourceV2{})).MustCreateIndexes([]mongo2.IndexModel{ - {Keys: bson.M{"name": 1}}, - }) - - // data collections - mongo.GetMongoCol(service.GetCollectionNameByInstance(models.DataCollectionV2{})).MustCreateIndexes([]mongo2.IndexModel{ - {Keys: bson.M{"name": 1}}, - }) - - // roles - mongo.GetMongoCol(service.GetCollectionNameByInstance(models.RoleV2{})).MustCreateIndexes([]mongo2.IndexModel{ - {Keys: bson.D{{"key", 1}}, Options: options.Index().SetUnique(true)}, - }) - - // user role relations - mongo.GetMongoCol(service.GetCollectionNameByInstance(models.UserRoleV2{})).MustCreateIndexes([]mongo2.IndexModel{ - {Keys: bson.D{{"user_id", 1}, {"role_id", 1}}, Options: options.Index().SetUnique(true)}, - {Keys: bson.D{{"role_id", 1}, {"user_id", 1}}, Options: options.Index().SetUnique(true)}, - }) - - // permissions - mongo.GetMongoCol(service.GetCollectionNameByInstance(models.PermissionV2{})).MustCreateIndexes([]mongo2.IndexModel{ - {Keys: bson.D{{"key", 1}}, Options: options.Index().SetUnique(true)}, - }) - - // role permission relations - mongo.GetMongoCol(service.GetCollectionNameByInstance(models.RolePermissionV2{})).MustCreateIndexes([]mongo2.IndexModel{ - {Keys: bson.D{{"role_id", 1}, {"permission_id", 1}}, Options: options.Index().SetUnique(true)}, - {Keys: bson.D{{"permission_id", 1}, {"role_id", 1}}, Options: options.Index().SetUnique(true)}, - }) - - // dependencies - mongo.GetMongoCol(service.GetCollectionNameByInstance(models.DependencyV2{})).MustCreateIndexes([]mongo2.IndexModel{ - { - Keys: bson.D{ - {"type", 1}, - {"node_id", 1}, - {"name", 1}, - }, - Options: (&options.IndexOptions{}).SetUnique(true), - }, - }) - - // dependency settings - mongo.GetMongoCol(service.GetCollectionNameByInstance(models.DependencySettingV2{})).MustCreateIndexes([]mongo2.IndexModel{ - { - Keys: bson.D{ - {"type", 1}, - {"node_id", 1}, - {"name", 1}, - }, - Options: (&options.IndexOptions{}).SetUnique(true), - }, - }) - - // dependency logs - mongo.GetMongoCol(service.GetCollectionNameByInstance(models.DependencyLogV2{})).MustCreateIndexes([]mongo2.IndexModel{ - { - Keys: bson.D{{"task_id", 1}}, - }, - { - Keys: bson.D{{"update_ts", 1}}, - Options: (&options.IndexOptions{}).SetExpireAfterSeconds(60 * 60 * 24), - }, - }) - - // dependency tasks - mongo.GetMongoCol(service.GetCollectionNameByInstance(models.DependencyTaskV2{})).MustCreateIndexes([]mongo2.IndexModel{ - { - Keys: bson.D{ - {"update_ts", 1}, - }, - Options: (&options.IndexOptions{}).SetExpireAfterSeconds(60 * 60 * 24), - }, - }) - - // metrics - mongo.GetMongoCol(service.GetCollectionNameByInstance(models.MetricV2{})).MustCreateIndexes([]mongo2.IndexModel{ - { - Keys: bson.D{ - {"created_ts", -1}, - }, - Options: (&options.IndexOptions{}).SetExpireAfterSeconds(60 * 60 * 24 * 30), - }, - { - Keys: bson.D{ - {"node_id", 1}, - }, - }, - { - Keys: bson.D{ - {"type", 1}, - }, - }, - }) -} diff --git a/core/models/common/index_utils.go b/core/models/common/index_utils.go new file mode 100644 index 000000000..92086552f --- /dev/null +++ b/core/models/common/index_utils.go @@ -0,0 +1,115 @@ +package common + +import ( + "encoding/json" + "fmt" + "github.com/crawlab-team/crawlab/core/mongo" + "github.com/crawlab-team/crawlab/core/utils" + "go.mongodb.org/mongo-driver/bson" + mongo2 "go.mongodb.org/mongo-driver/mongo" +) + +var indexUtilsLogger = utils.NewLogger("IndexUtils") + +// getIndexKeyString converts index keys to a consistent string representation +func getIndexKeyString(key interface{}) string { + switch v := key.(type) { + case mongo2.IndexModel: + return normalizeIndexKey(v.Keys) + default: + return normalizeIndexKey(key) + } +} + +// normalizeIndexKey converts an index key to a standardized string representation +func normalizeIndexKey(key interface{}) string { + // Convert to bson.D to maintain order + var doc bson.D + + switch v := key.(type) { + case bson.D: + doc = v + default: + // Convert to JSON bytes first + jsonBytes, err := json.Marshal(key) + if err != nil { + return fmt.Sprintf("%v", key) + } + + // Try to unmarshal as array of key-value pairs first + var keyArray []struct { + Key string `json:"Key"` + Value interface{} `json:"Value"` + } + if err := json.Unmarshal(jsonBytes, &keyArray); err == nil { + // Convert array format to bson.D + doc = make(bson.D, len(keyArray)) + for i, kv := range keyArray { + doc[i] = bson.E{Key: kv.Key, Value: kv.Value} + } + } else { + // Try to unmarshal as regular map + if err := bson.UnmarshalExtJSON(jsonBytes, true, &doc); err != nil { + return string(jsonBytes) + } + } + } + + // Convert bson.D to consistent string representation + pairs := make([]string, 0, len(doc)) + for _, elem := range doc { + pairs = append(pairs, fmt.Sprintf("%q:%v", elem.Key, elem.Value)) + } + + pairsBytes, _ := json.Marshal(pairs) + pairsStr := string(pairsBytes) + return pairsStr +} + +func CreateIndexes(col *mongo.Col, desiredIndexes []mongo2.IndexModel) { + existingIndexes, err := col.ListIndexes() + if err != nil { + indexUtilsLogger.Errorf("error listing indexes: %v", err) + return + } + + // Compare and recreate only if different + needsUpdate := false + existingKeys := make(map[string]bool) + + // Skip _id index when comparing + for _, idx := range existingIndexes { + name, ok := idx["name"].(string) + if ok && name != "_id_" { + if key, ok := idx["key"]; ok { + keyStr := getIndexKeyString(key) + existingKeys[keyStr] = true + } + } + } + + // Check if desired indexes exist + for _, idx := range desiredIndexes { + keyStr := getIndexKeyString(idx.Keys) + if !existingKeys[keyStr] { + needsUpdate = true + break + } + } + + if needsUpdate { + // Drop all existing indexes (except _id) + err := col.DeleteAllIndexes() + if err != nil { + indexUtilsLogger.Errorf("error dropping indexes: %v", err) + } + + // Create new indexes + err = col.CreateIndexes(desiredIndexes) + if err != nil { + indexUtilsLogger.Errorf("error creating indexes: %v", err) + return + } + indexUtilsLogger.Infof("created indexes for collection: %s", col.GetCollection().Name()) + } +} diff --git a/core/models/common/index_utils_test.go b/core/models/common/index_utils_test.go new file mode 100644 index 000000000..13e45ad7f --- /dev/null +++ b/core/models/common/index_utils_test.go @@ -0,0 +1,165 @@ +package common + +import ( + "fmt" + "github.com/crawlab-team/crawlab/core/mongo" + "testing" + + "github.com/stretchr/testify/assert" + "go.mongodb.org/mongo-driver/bson" + mongo2 "go.mongodb.org/mongo-driver/mongo" + "go.mongodb.org/mongo-driver/mongo/options" +) + +func TestRecreateIndexes(t *testing.T) { + // Setup test collection + testCol := mongo.GetMongoCol("test_collection") + defer func() { + _ = testCol.GetCollection().Drop(testCol.GetContext()) + }() + + // Test cases + tests := []struct { + name string + desiredIndexes []mongo2.IndexModel + expectedCount int64 + }{ + { + name: "Create new indexes", + desiredIndexes: []mongo2.IndexModel{ + {Keys: bson.D{{Key: "field1", Value: 1}}}, + {Keys: bson.D{{Key: "field2", Value: -1}}}, + }, + expectedCount: 3, // Including _id index + }, + { + name: "Update existing indexes", + desiredIndexes: []mongo2.IndexModel{ + {Keys: bson.D{{Key: "field1", Value: 1}}}, + {Keys: bson.D{{Key: "field3", Value: 1}}}, + }, + expectedCount: 3, + }, + { + name: "Compound indexes", + desiredIndexes: []mongo2.IndexModel{ + {Keys: bson.D{ + {Key: "field1", Value: 1}, + {Key: "field2", Value: -1}, + }}, + {Keys: bson.D{ + {Key: "field3", Value: 1}, + {Key: "field4", Value: 1}, + }}, + }, + expectedCount: 3, + }, + { + name: "Unique and sparse indexes", + desiredIndexes: []mongo2.IndexModel{ + { + Keys: bson.D{{Key: "email", Value: 1}}, + Options: options.Index().SetUnique(true), + }, + { + Keys: bson.D{{Key: "optional_field", Value: 1}}, + Options: options.Index().SetSparse(true), + }, + }, + expectedCount: 3, + }, + { + name: "Mixed index types", + desiredIndexes: []mongo2.IndexModel{ + {Keys: bson.D{ + {Key: "field1", Value: 1}, + {Key: "field2", Value: -1}, + }}, + { + Keys: bson.D{{Key: "unique_field", Value: 1}}, + Options: options.Index().SetUnique(true), + }, + }, + expectedCount: 3, + }, + { + name: "Complex compound index with options", + desiredIndexes: []mongo2.IndexModel{ + { + Keys: bson.D{ + {Key: "category", Value: 1}, + {Key: "timestamp", Value: -1}, + {Key: "status", Value: 1}, + }, + Options: options.Index(). + SetUnique(true). + SetPartialFilterExpression(bson.D{ + {Key: "status", Value: "active"}, + }), + }, + }, + expectedCount: 2, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + // Execute CreateIndexes + CreateIndexes(testCol, tt.desiredIndexes) + + // Verify indexes + indexes, err := testCol.ListIndexes() + assert.NoError(t, err) + + // Check total number of indexes (including _id) + assert.Equal(t, tt.expectedCount, int64(len(indexes))) + + // Verify each desired index exists + for _, desiredIdx := range tt.desiredIndexes { + found := false + // Convert bson.D to normalized string representation + desiredKeyDoc := desiredIdx.Keys.(bson.D) + desiredKeyMap := make(map[string]interface{}) + for _, elem := range desiredKeyDoc { + desiredKeyMap[elem.Key] = elem.Value + } + + for _, existingIdx := range indexes { + if existingIdx["name"].(string) != "_id_" { + existingKey := existingIdx["key"].(map[string]interface{}) + + // Compare maps by converting to strings and normalizing + if compareIndexKeys(desiredKeyMap, existingKey) { + found = true + break + } + } + } + assert.True(t, found, "Index not found: %v", desiredIdx.Keys) + } + }) + } +} + +// compareIndexKeys compares two index key specifications +func compareIndexKeys(desired, existing map[string]interface{}) bool { + if len(desired) != len(existing) { + return false + } + + for k, v1 := range desired { + v2, exists := existing[k] + if !exists { + return false + } + + // Convert values to strings for comparison + // This handles different numeric types (int, float64, etc.) + str1 := fmt.Sprintf("%v", v1) + str2 := fmt.Sprintf("%v", v2) + if str1 != str2 { + return false + } + } + return true +} diff --git a/core/models/common/init_index.go b/core/models/common/init_index.go new file mode 100644 index 000000000..ac4ea63d2 --- /dev/null +++ b/core/models/common/init_index.go @@ -0,0 +1,80 @@ +package common + +import ( + "github.com/crawlab-team/crawlab/core/models/models" + "github.com/crawlab-team/crawlab/core/models/service" + "github.com/crawlab-team/crawlab/core/mongo" + "go.mongodb.org/mongo-driver/bson" + mongo2 "go.mongodb.org/mongo-driver/mongo" + "go.mongodb.org/mongo-driver/mongo/options" +) + +func InitIndexes() { + // nodes + CreateIndexes(mongo.GetMongoCol(service.GetCollectionNameByInstance(models.Node{})), []mongo2.IndexModel{ + {Keys: bson.D{{Key: "key", Value: 1}}}, + {Keys: bson.D{{Key: "name", Value: 1}}}, + {Keys: bson.D{{Key: "is_master", Value: 1}}}, + {Keys: bson.D{{Key: "status", Value: 1}}}, + {Keys: bson.D{{Key: "enabled", Value: 1}}}, + {Keys: bson.D{{Key: "active", Value: 1}}}, + }) + + // projects + CreateIndexes(mongo.GetMongoCol(service.GetCollectionNameByInstance(models.Project{})), []mongo2.IndexModel{ + {Keys: bson.D{{Key: "name", Value: 1}}}, + }) + + // spiders + CreateIndexes(mongo.GetMongoCol(service.GetCollectionNameByInstance(models.Spider{})), []mongo2.IndexModel{ + {Keys: bson.D{{Key: "name", Value: 1}}}, + {Keys: bson.D{{Key: "type", Value: 1}}}, + {Keys: bson.D{{Key: "col_id", Value: 1}}}, + {Keys: bson.D{{Key: "project_id", Value: 1}}}, + }) + + // tasks + CreateIndexes(mongo.GetMongoCol(service.GetCollectionNameByInstance(models.Task{})), []mongo2.IndexModel{ + {Keys: bson.D{{Key: "spider_id", Value: 1}}}, + {Keys: bson.D{{Key: "status", Value: 1}}}, + {Keys: bson.D{{Key: "node_id", Value: 1}}}, + {Keys: bson.D{{Key: "schedule_id", Value: 1}}}, + {Keys: bson.D{{Key: "type", Value: 1}}}, + {Keys: bson.D{{Key: "mode", Value: 1}}}, + {Keys: bson.D{{Key: "priority", Value: 1}}}, + {Keys: bson.D{{Key: "parent_id", Value: 1}}}, + {Keys: bson.D{{Key: "has_sub", Value: 1}}}, + {Keys: bson.D{{Key: "created_ts", Value: -1}}, Options: (&options.IndexOptions{}).SetExpireAfterSeconds(60 * 60 * 24 * 30)}, + {Keys: bson.D{{Key: "node_id", Value: 1}, {Key: "status", Value: 1}}}, + }) + + // task stats + CreateIndexes(mongo.GetMongoCol(service.GetCollectionNameByInstance(models.TaskStat{})), []mongo2.IndexModel{ + {Keys: bson.D{{Key: "created_ts", Value: -1}}, Options: (&options.IndexOptions{}).SetExpireAfterSeconds(60 * 60 * 24 * 30)}, + }) + + // schedules + CreateIndexes(mongo.GetMongoCol(service.GetCollectionNameByInstance(models.Schedule{})), []mongo2.IndexModel{ + {Keys: bson.D{{Key: "name", Value: 1}}}, + {Keys: bson.D{{Key: "spider_id", Value: 1}}}, + {Keys: bson.D{{Key: "enabled", Value: 1}}}, + }) + + // users + CreateIndexes(mongo.GetMongoCol(service.GetCollectionNameByInstance(models.User{})), []mongo2.IndexModel{ + {Keys: bson.D{{Key: "username", Value: 1}}, Options: (&options.IndexOptions{}).SetUnique(true)}, + {Keys: bson.D{{Key: "role", Value: 1}}}, + {Keys: bson.D{{Key: "role_id", Value: 1}}}, + {Keys: bson.D{{Key: "email", Value: 1}}}, + }) + + // settings + CreateIndexes(mongo.GetMongoCol(service.GetCollectionNameByInstance(models.Setting{})), []mongo2.IndexModel{ + {Keys: bson.D{{Key: "key", Value: 1}}, Options: options.Index().SetUnique(true)}, + }) + + // tokens + CreateIndexes(mongo.GetMongoCol(service.GetCollectionNameByInstance(models.Token{})), []mongo2.IndexModel{ + {Keys: bson.D{{Key: "name", Value: 1}}}, + }) +} diff --git a/core/models/config_spider/common.go b/core/models/config_spider/common.go deleted file mode 100644 index 8ad3ad156..000000000 --- a/core/models/config_spider/common.go +++ /dev/null @@ -1,24 +0,0 @@ -package config_spider - -import "github.com/crawlab-team/crawlab/core/entity" - -func GetAllFields(data entity.ConfigSpiderData) []entity.Field { - var fields []entity.Field - for _, stage := range data.Stages { - fields = append(fields, stage.Fields...) - } - return fields -} - -func GetStartStageName(data entity.ConfigSpiderData) string { - // 如果 start_stage 设置了且在 stages 里,则返回 - if data.StartStage != "" { - return data.StartStage - } - - // 否则返回第一个 stage - for _, stage := range data.Stages { - return stage.Name - } - return "" -} diff --git a/core/models/config_spider/scrapy.go b/core/models/config_spider/scrapy.go deleted file mode 100644 index 8dab84616..000000000 --- a/core/models/config_spider/scrapy.go +++ /dev/null @@ -1,263 +0,0 @@ -package config_spider - -//import ( -// "errors" -// "fmt" -// "github.com/crawlab-team/crawlab/core/constants" -// "github.com/crawlab-team/crawlab/core/entity" -// "github.com/crawlab-team/crawlab/core/models" -// "github.com/crawlab-team/crawlab/core/utils" -// "path/filepath" -//) -// -//type ScrapyGenerator struct { -// Spider model.Spider -// ConfigData entity.ConfigSpiderData -//} -// -//// 生成爬虫文件 -//func (g ScrapyGenerator) Generate() error { -// // 生成 items.py -// if err := g.ProcessItems(); err != nil { -// return err -// } -// -// // 生成 spider.py -// if err := g.ProcessSpider(); err != nil { -// return err -// } -// return nil -//} -// -//// 生成 items.py -//func (g ScrapyGenerator) ProcessItems() error { -// // 待处理文件名 -// src := g.Spider.Src -// filePath := filepath.Join(src, "config_spider", "items.py") -// -// // 获取所有字段 -// fields := g.GetAllFields() -// -// // 字段名列表(包含默认字段名) -// fieldNames := []string{ -// "_id", -// "task_id", -// "ts", -// } -// -// // 加入字段 -// for _, field := range fields { -// fieldNames = append(fieldNames, field.Name) -// } -// -// // 将字段名转化为python代码 -// str := "" -// for _, fieldName := range fieldNames { -// line := g.PadCode(fmt.Sprintf("%s = scrapy.Field()", fieldName), 1) -// str += line -// } -// -// // 将占位符替换为代码 -// if err := utils.SetFileVariable(filePath, constants.AnchorItems, str); err != nil { -// return err -// } -// -// return nil -//} -// -//// 生成 spider.py -//func (g ScrapyGenerator) ProcessSpider() error { -// // 待处理文件名 -// src := g.Spider.Src -// filePath := filepath.Join(src, "config_spider", "spiders", "spider.py") -// -// // 替换 start_stage -// if err := utils.SetFileVariable(filePath, constants.AnchorStartStage, "parse_"+GetStartStageName(g.ConfigData)); err != nil { -// return err -// } -// -// // 替换 start_url -// if err := utils.SetFileVariable(filePath, constants.AnchorStartUrl, g.ConfigData.StartUrl); err != nil { -// return err -// } -// -// // 替换 parsers -// strParser := "" -// for _, stage := range g.ConfigData.Stages { -// stageName := stage.Name -// stageStr := g.GetParserString(stageName, stage) -// strParser += stageStr -// } -// if err := utils.SetFileVariable(filePath, constants.AnchorParsers, strParser); err != nil { -// return err -// } -// -// return nil -//} -// -//func (g ScrapyGenerator) GetParserString(stageName string, stage entity.Stage) string { -// // 构造函数定义行 -// strDef := g.PadCode(fmt.Sprintf("def parse_%s(self, response):", stageName), 1) -// -// strParse := "" -// if stage.IsList { -// // 列表逻辑 -// strParse = g.GetListParserString(stageName, stage) -// } else { -// // 非列表逻辑 -// strParse = g.GetNonListParserString(stageName, stage) -// } -// -// // 构造 -// str := fmt.Sprintf(`%s%s`, strDef, strParse) -// -// return str -//} -// -//func (g ScrapyGenerator) PadCode(str string, num int) string { -// res := "" -// for i := 0; i < num; i++ { -// res += " " -// } -// res += str -// res += "\n" -// return res -//} -// -//func (g ScrapyGenerator) GetNonListParserString(stageName string, stage entity.Stage) string { -// str := "" -// -// // 获取或构造item -// str += g.PadCode("item = Item() if response.meta.get('item') is None else response.meta.get('item')", 2) -// -// // 遍历字段列表 -// for _, f := range stage.Fields { -// line := fmt.Sprintf(`item['%s'] = response.%s.extract_first()`, f.Name, g.GetExtractStringFromField(f)) -// line = g.PadCode(line, 2) -// str += line -// } -// -// // next stage 字段 -// if f, err := g.GetNextStageField(stage); err == nil { -// // 如果找到 next stage 字段,进行下一个回调 -// str += g.PadCode(fmt.Sprintf(`yield scrapy.Request(url="get_real_url(response, item['%s'])", callback=self.parse_%s, meta={'item': item})`, f.Name, f.NextStage), 2) -// } else { -// // 如果没找到 next stage 字段,返回 item -// str += g.PadCode(fmt.Sprintf(`yield item`), 2) -// } -// -// // 加入末尾换行 -// str += g.PadCode("", 0) -// -// return str -//} -// -//func (g ScrapyGenerator) GetListParserString(stageName string, stage entity.Stage) string { -// str := "" -// -// // 获取前一个 stage 的 item -// str += g.PadCode(`prev_item = response.meta.get('item')`, 2) -// -// // for 循环遍历列表 -// str += g.PadCode(fmt.Sprintf(`for elem in response.%s:`, g.GetListString(stage)), 2) -// -// // 构造item -// str += g.PadCode(`item = Item()`, 3) -// -// // 遍历字段列表 -// for _, f := range stage.Fields { -// line := fmt.Sprintf(`item['%s'] = elem.%s.extract_first()`, f.Name, g.GetExtractStringFromField(f)) -// line = g.PadCode(line, 3) -// str += line -// } -// -// // 把前一个 stage 的 item 值赋给当前 item -// str += g.PadCode(`if prev_item is not None:`, 3) -// str += g.PadCode(`for key, value in prev_item.items():`, 4) -// str += g.PadCode(`item[key] = value`, 5) -// -// // next stage 字段 -// if f, err := g.GetNextStageField(stage); err == nil { -// // 如果 url 为空,则不进入下一个 stage -// str += g.PadCode(fmt.Sprintf(`if not item['%s']:`, f.Name), 3) -// str += g.PadCode(`continue`, 4) -// -// // 如果找到 next stage 字段,进行下一个回调 -// str += g.PadCode(fmt.Sprintf(`yield scrapy.Request(url=get_real_url(response, item['%s']), callback=self.parse_%s, meta={'item': item})`, f.Name, f.NextStage), 3) -// } else { -// // 如果没找到 next stage 字段,返回 item -// str += g.PadCode(fmt.Sprintf(`yield item`), 3) -// } -// -// // 分页 -// if stage.PageCss != "" || stage.PageXpath != "" { -// str += g.PadCode(fmt.Sprintf(`next_url = response.%s.extract_first()`, g.GetExtractStringFromStage(stage)), 2) -// str += g.PadCode(fmt.Sprintf(`yield scrapy.Request(url=get_real_url(response, next_url), callback=self.parse_%s, meta={'item': prev_item})`, stageName), 2) -// } -// -// // 加入末尾换行 -// str += g.PadCode("", 0) -// -// return str -//} -// -//// 获取所有字段 -//func (g ScrapyGenerator) GetAllFields() []entity.Field { -// return GetAllFields(g.ConfigData) -//} -// -//// 获取包含 next stage 的字段 -//func (g ScrapyGenerator) GetNextStageField(stage entity.Stage) (entity.Field, error) { -// for _, field := range stage.Fields { -// if field.NextStage != "" { -// return field, nil -// } -// } -// return entity.Field{}, errors.New("cannot find next stage field") -//} -// -//func (g ScrapyGenerator) GetExtractStringFromField(f entity.Field) string { -// if f.Css != "" { -// // 如果为CSS -// if f.Attr == "" { -// // 文本 -// return fmt.Sprintf(`css('%s::text')`, f.Css) -// } else { -// // 属性 -// return fmt.Sprintf(`css('%s::attr("%s")')`, f.Css, f.Attr) -// } -// } else { -// // 如果为XPath -// if f.Attr == "" { -// // 文本 -// return fmt.Sprintf(`xpath('string(%s)')`, f.Xpath) -// } else { -// // 属性 -// return fmt.Sprintf(`xpath('%s/@%s')`, f.Xpath, f.Attr) -// } -// } -//} -// -//func (g ScrapyGenerator) GetExtractStringFromStage(stage entity.Stage) string { -// // 分页元素属性,默认为 href -// pageAttr := "href" -// if stage.PageAttr != "" { -// pageAttr = stage.PageAttr -// } -// -// if stage.PageCss != "" { -// // 如果为CSS -// return fmt.Sprintf(`css('%s::attr("%s")')`, stage.PageCss, pageAttr) -// } else { -// // 如果为XPath -// return fmt.Sprintf(`xpath('%s/@%s')`, stage.PageXpath, pageAttr) -// } -//} -// -//func (g ScrapyGenerator) GetListString(stage entity.Stage) string { -// if stage.ListCss != "" { -// return fmt.Sprintf(`css('%s')`, stage.ListCss) -// } else { -// return fmt.Sprintf(`xpath('%s')`, stage.ListXpath) -// } -//} diff --git a/core/models/delegate/base_test.go b/core/models/delegate/base_test.go deleted file mode 100644 index fd84e1286..000000000 --- a/core/models/delegate/base_test.go +++ /dev/null @@ -1,25 +0,0 @@ -package delegate_test - -import ( - "context" - "github.com/crawlab-team/crawlab/db/mongo" - "go.mongodb.org/mongo-driver/bson" - "testing" - "time" -) - -func SetupTest(t *testing.T) { - CleanupTest() - t.Cleanup(CleanupTest) -} - -func CleanupTest() { - db := mongo.GetMongoDb("") - names, _ := db.ListCollectionNames(context.Background(), bson.M{}) - for _, n := range names { - _, _ = db.Collection(n).DeleteMany(context.Background(), bson.M{}) - } - - // avoid caching - time.Sleep(200 * time.Millisecond) -} diff --git a/core/models/delegate/model.go b/core/models/delegate/model.go deleted file mode 100644 index 3e9d8139e..000000000 --- a/core/models/delegate/model.go +++ /dev/null @@ -1,362 +0,0 @@ -package delegate - -import ( - "encoding/json" - errors2 "github.com/crawlab-team/crawlab/core/errors" - "github.com/crawlab-team/crawlab/core/event" - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/core/utils" - "github.com/crawlab-team/crawlab/db/errors" - "github.com/crawlab-team/crawlab/db/mongo" - "github.com/crawlab-team/crawlab/trace" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" - mongo2 "go.mongodb.org/mongo-driver/mongo" - "reflect" - "time" -) - -func NewModelDelegate(doc interfaces.Model, args ...interface{}) interfaces.ModelDelegate { - switch doc.(type) { - case *models.Artifact: - return newModelDelegate(interfaces.ModelIdArtifact, doc, args...) - case *models.Tag: - return newModelDelegate(interfaces.ModelIdTag, doc, args...) - case *models.Node: - return newModelDelegate(interfaces.ModelIdNode, doc, args...) - case *models.Project: - return newModelDelegate(interfaces.ModelIdProject, doc, args...) - case *models.Spider: - return newModelDelegate(interfaces.ModelIdSpider, doc, args...) - case *models.Task: - return newModelDelegate(interfaces.ModelIdTask, doc, args...) - case *models.Job: - return newModelDelegate(interfaces.ModelIdJob, doc, args...) - case *models.Schedule: - return newModelDelegate(interfaces.ModelIdSchedule, doc, args...) - case *models.User: - return newModelDelegate(interfaces.ModelIdUser, doc, args...) - case *models.Setting: - return newModelDelegate(interfaces.ModelIdSetting, doc, args...) - case *models.Token: - return newModelDelegate(interfaces.ModelIdToken, doc, args...) - case *models.Variable: - return newModelDelegate(interfaces.ModelIdVariable, doc, args...) - case *models.TaskQueueItem: - return newModelDelegate(interfaces.ModelIdTaskQueue, doc, args...) - case *models.TaskStat: - return newModelDelegate(interfaces.ModelIdTaskStat, doc, args...) - case *models.SpiderStat: - return newModelDelegate(interfaces.ModelIdSpiderStat, doc, args...) - case *models.DataSource: - return newModelDelegate(interfaces.ModelIdDataSource, doc, args...) - case *models.DataCollection: - return newModelDelegate(interfaces.ModelIdDataCollection, doc, args...) - case *models.Result: - return newModelDelegate(interfaces.ModelIdResult, doc, args...) - case *models.Password: - return newModelDelegate(interfaces.ModelIdPassword, doc, args...) - case *models.ExtraValue: - return newModelDelegate(interfaces.ModelIdExtraValue, doc, args...) - case *models.Git: - return newModelDelegate(interfaces.ModelIdGit, doc, args...) - case *models.Role: - return newModelDelegate(interfaces.ModelIdRole, doc, args...) - case *models.UserRole: - return newModelDelegate(interfaces.ModelIdUserRole, doc, args...) - case *models.Permission: - return newModelDelegate(interfaces.ModelIdPermission, doc, args...) - case *models.RolePermission: - return newModelDelegate(interfaces.ModelIdRolePermission, doc, args...) - case *models.Environment: - return newModelDelegate(interfaces.ModelIdEnvironment, doc, args...) - case *models.DependencySetting: - return newModelDelegate(interfaces.ModelIdDependencySetting, doc, args...) - default: - _ = trace.TraceError(errors2.ErrorModelInvalidType) - return nil - } -} - -func newModelDelegate(id interfaces.ModelId, doc interfaces.Model, args ...interface{}) interfaces.ModelDelegate { - // user - u := utils.GetUserFromArgs(args...) - - // collection name - colName := models.GetModelColName(id) - - // model delegate - d := &ModelDelegate{ - id: id, - colName: colName, - doc: doc, - a: &models.Artifact{ - Col: colName, - }, - u: u, - } - - return d -} - -type ModelDelegate struct { - id interfaces.ModelId - colName string - doc interfaces.Model // doc to delegate - cd bson.M // current doc - od bson.M // original doc - a interfaces.ModelArtifact // artifact - u interfaces.User // user -} - -// Add model -func (d *ModelDelegate) Add() (err error) { - return d.do(interfaces.ModelDelegateMethodAdd) -} - -// Save model -func (d *ModelDelegate) Save() (err error) { - return d.do(interfaces.ModelDelegateMethodSave) -} - -// Delete model -func (d *ModelDelegate) Delete() (err error) { - return d.do(interfaces.ModelDelegateMethodDelete) -} - -// GetArtifact refresh artifact and return it -func (d *ModelDelegate) GetArtifact() (res interfaces.ModelArtifact, err error) { - if err := d.do(interfaces.ModelDelegateMethodGetArtifact); err != nil { - return nil, err - } - return d.a, nil -} - -// Refresh model -func (d *ModelDelegate) Refresh() (err error) { - return d.refresh() -} - -// GetModel return model -func (d *ModelDelegate) GetModel() (res interfaces.Model) { - return d.doc -} - -func (d *ModelDelegate) ToBytes(m interface{}) (bytes []byte, err error) { - if m != nil { - return utils.JsonToBytes(m) - } - return json.Marshal(d.doc) -} - -// do action given the model delegate method -func (d *ModelDelegate) do(method interfaces.ModelDelegateMethod) (err error) { - switch method { - case interfaces.ModelDelegateMethodAdd: - err = d.add() - case interfaces.ModelDelegateMethodSave: - err = d.save() - case interfaces.ModelDelegateMethodDelete: - err = d.delete() - case interfaces.ModelDelegateMethodGetArtifact, interfaces.ModelDelegateMethodRefresh: - err = d.refresh() - default: - return trace.TraceError(errors2.ErrorModelInvalidType) - } - - if err != nil { - return err - } - - // trigger event - eventName := GetEventName(d, method) - go event.SendEvent(eventName, d.doc) - - return nil -} - -// add model -func (d *ModelDelegate) add() (err error) { - if d.doc == nil { - return trace.TraceError(errors.ErrMissingValue) - } - if d.doc.GetId().IsZero() { - d.doc.SetId(primitive.NewObjectID()) - } - col := mongo.GetMongoCol(d.colName) - if _, err = col.Insert(d.doc); err != nil { - return trace.TraceError(err) - } - if err := d.upsertArtifact(); err != nil { - return trace.TraceError(err) - } - return d.refresh() -} - -// save model -func (d *ModelDelegate) save() (err error) { - // validate - if d.doc == nil || d.doc.GetId().IsZero() { - return trace.TraceError(errors.ErrMissingValue) - } - - // collection - col := mongo.GetMongoCol(d.colName) - - // current doc - docData, err := bson.Marshal(d.doc) - if err != nil { - trace.PrintError(err) - } else { - if err := bson.Unmarshal(docData, &d.cd); err != nil { - trace.PrintError(err) - } - } - - // original doc - if err := col.FindId(d.doc.GetId()).One(&d.od); err != nil { - trace.PrintError(err) - } - - // replace - if err := col.ReplaceId(d.doc.GetId(), d.doc); err != nil { - return trace.TraceError(err) - } - - // upsert artifact - if err := d.upsertArtifact(); err != nil { - return trace.TraceError(err) - } - - return d.refresh() -} - -// delete model -func (d *ModelDelegate) delete() (err error) { - if d.doc.GetId().IsZero() { - return trace.TraceError(errors2.ErrorModelMissingId) - } - col := mongo.GetMongoCol(d.colName) - if err := col.FindId(d.doc.GetId()).One(d.doc); err != nil { - return trace.TraceError(err) - } - if err := col.DeleteId(d.doc.GetId()); err != nil { - return trace.TraceError(err) - } - return d.deleteArtifact() -} - -// refresh model and artifact -func (d *ModelDelegate) refresh() (err error) { - if d.doc.GetId().IsZero() { - return trace.TraceError(errors2.ErrorModelMissingId) - } - col := mongo.GetMongoCol(d.colName) - fr := col.FindId(d.doc.GetId()) - if err := fr.One(d.doc); err != nil { - return trace.TraceError(err) - } - return d.refreshArtifact() -} - -// refresh artifact -func (d *ModelDelegate) refreshArtifact() (err error) { - if d.doc.GetId().IsZero() { - return trace.TraceError(errors2.ErrorModelMissingId) - } - col := mongo.GetMongoCol(interfaces.ModelColNameArtifact) - if err := col.FindId(d.doc.GetId()).One(d.a); err != nil { - return trace.TraceError(err) - } - return nil -} - -// upsertArtifact -func (d *ModelDelegate) upsertArtifact() (err error) { - // skip - if d._skip() { - return nil - } - - // validate id - if d.doc.GetId().IsZero() { - return trace.TraceError(errors.ErrMissingValue) - } - - // mongo collection - col := mongo.GetMongoCol(interfaces.ModelColNameArtifact) - - // assign id to artifact - d.a.SetId(d.doc.GetId()) - - // attempt to find artifact - if err := col.FindId(d.doc.GetId()).One(d.a); err != nil { - if err == mongo2.ErrNoDocuments { - // new artifact - d.a.GetSys().SetCreateTs(time.Now()) - d.a.GetSys().SetUpdateTs(time.Now()) - if d.u != nil && !reflect.ValueOf(d.u).IsZero() { - d.a.GetSys().SetCreateUid(d.u.GetId()) - d.a.GetSys().SetUpdateUid(d.u.GetId()) - } - _, err = col.Insert(d.a) - if err != nil { - return trace.TraceError(err) - } - return nil - } else { - // error - return trace.TraceError(err) - } - } - - // existing artifact - d.a.GetSys().SetUpdateTs(time.Now()) - if d.u != nil { - d.a.GetSys().SetUpdateUid(d.u.GetId()) - } - - // save new artifact - return col.ReplaceId(d.a.GetId(), d.a) -} - -// deleteArtifact -func (d *ModelDelegate) deleteArtifact() (err error) { - // skip - if d._skip() { - return nil - } - - if d.doc.GetId().IsZero() { - return trace.TraceError(errors.ErrMissingValue) - } - col := mongo.GetMongoCol(interfaces.ModelColNameArtifact) - d.a.SetId(d.doc.GetId()) - d.a.SetObj(d.doc) - d.a.SetDel(true) - d.a.GetSys().SetDeleteTs(time.Now()) - if d.u != nil { - d.a.GetSys().SetDeleteUid(d.u.GetId()) - } - return col.ReplaceId(d.doc.GetId(), d.a) -} - -func (d *ModelDelegate) hasChange() (ok bool) { - return !utils.BsonMEqual(d.cd, d.od) -} - -func (d *ModelDelegate) _skip() (ok bool) { - switch d.id { - case - interfaces.ModelIdArtifact, - interfaces.ModelIdTaskQueue, - interfaces.ModelIdTaskStat, - interfaces.ModelIdSpiderStat, - interfaces.ModelIdResult, - interfaces.ModelIdPassword: - return true - default: - return false - } -} diff --git a/core/models/delegate/model_node.go b/core/models/delegate/model_node.go deleted file mode 100644 index 99bdd11d2..000000000 --- a/core/models/delegate/model_node.go +++ /dev/null @@ -1,37 +0,0 @@ -package delegate - -import ( - "github.com/crawlab-team/crawlab/core/constants" - "github.com/crawlab-team/crawlab/core/interfaces" - "time" -) - -type ModelNodeDelegate struct { - n interfaces.Node - interfaces.ModelDelegate -} - -func (d *ModelNodeDelegate) UpdateStatus(active bool, activeTs *time.Time, status string) (err error) { - d.n.SetActive(active) - if activeTs != nil { - d.n.SetActiveTs(*activeTs) - } - d.n.SetStatus(status) - return d.Save() -} - -func (d *ModelNodeDelegate) UpdateStatusOnline() (err error) { - now := time.Now() - return d.UpdateStatus(true, &now, constants.NodeStatusOnline) -} - -func (d *ModelNodeDelegate) UpdateStatusOffline() (err error) { - return d.UpdateStatus(false, nil, constants.NodeStatusOffline) -} - -func NewModelNodeDelegate(n interfaces.Node) interfaces.ModelNodeDelegate { - return &ModelNodeDelegate{ - n: n, - ModelDelegate: NewModelDelegate(n), - } -} diff --git a/core/models/delegate/model_node_test.go b/core/models/delegate/model_node_test.go deleted file mode 100644 index 2e0f847e4..000000000 --- a/core/models/delegate/model_node_test.go +++ /dev/null @@ -1,65 +0,0 @@ -package delegate_test - -import ( - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/models/delegate" - models2 "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/db/mongo" - "github.com/stretchr/testify/require" - "testing" -) - -func TestNode_Add(t *testing.T) { - SetupTest(t) - - n := &models2.Node{} - - err := delegate.NewModelDelegate(n).Add() - require.Nil(t, err) - require.NotNil(t, n.Id) - - // validate artifact - a, err := delegate.NewModelDelegate(n).GetArtifact() - require.Nil(t, err) - require.Equal(t, n.Id, a.GetId()) - require.NotNil(t, a.GetSys().GetCreateTs()) - require.NotNil(t, a.GetSys().GetUpdateTs()) -} - -func TestNode_Save(t *testing.T) { - SetupTest(t) - - n := &models2.Node{} - - err := delegate.NewModelDelegate(n).Add() - - name := "test_node" - n.Name = name - err = delegate.NewModelDelegate(n).Save() - require.Nil(t, err) - - err = mongo.GetMongoCol(interfaces.ModelColNameNode).FindId(n.Id).One(&n) - require.Nil(t, err) - require.Equal(t, name, n.Name) -} - -func TestNode_Delete(t *testing.T) { - SetupTest(t) - - n := &models2.Node{ - Name: "test_node", - } - - err := delegate.NewModelDelegate(n).Add() - require.Nil(t, err) - - err = delegate.NewModelDelegate(n).Delete() - require.Nil(t, err) - - var a models2.Artifact - col := mongo.GetMongoCol(interfaces.ModelColNameArtifact) - err = col.FindId(n.Id).One(&a) - require.Nil(t, err) - require.NotNil(t, a.Obj) - require.True(t, a.Del) -} diff --git a/core/models/delegate/model_role_test.go b/core/models/delegate/model_role_test.go deleted file mode 100644 index dcab9bf5c..000000000 --- a/core/models/delegate/model_role_test.go +++ /dev/null @@ -1,65 +0,0 @@ -package delegate_test - -import ( - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/models/delegate" - models2 "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/db/mongo" - "github.com/stretchr/testify/require" - "testing" -) - -func TestRole_Add(t *testing.T) { - SetupTest(t) - - p := &models2.Role{} - - err := delegate.NewModelDelegate(p).Add() - require.Nil(t, err) - require.NotNil(t, p.Id) - - a, err := delegate.NewModelDelegate(p).GetArtifact() - require.Nil(t, err) - require.Equal(t, p.Id, a.GetId()) - require.NotNil(t, a.GetSys().GetCreateTs()) - require.NotNil(t, a.GetSys().GetUpdateTs()) -} - -func TestRole_Save(t *testing.T) { - SetupTest(t) - - p := &models2.Role{} - - err := delegate.NewModelDelegate(p).Add() - require.Nil(t, err) - - name := "test_role" - p.Name = name - err = delegate.NewModelDelegate(p).Save() - require.Nil(t, err) - - err = mongo.GetMongoCol(interfaces.ModelColNameRole).FindId(p.Id).One(&p) - require.Nil(t, err) - require.Equal(t, name, p.Name) -} - -func TestRole_Delete(t *testing.T) { - SetupTest(t) - - p := &models2.Role{ - Name: "test_role", - } - - err := delegate.NewModelDelegate(p).Add() - require.Nil(t, err) - - err = delegate.NewModelDelegate(p).Delete() - require.Nil(t, err) - - var a models2.Artifact - col := mongo.GetMongoCol(interfaces.ModelColNameArtifact) - err = col.FindId(p.Id).One(&a) - require.Nil(t, err) - require.NotNil(t, a.Obj) - require.True(t, a.Del) -} diff --git a/core/models/delegate/model_test.go b/core/models/delegate/model_test.go deleted file mode 100644 index 93dc91401..000000000 --- a/core/models/delegate/model_test.go +++ /dev/null @@ -1,65 +0,0 @@ -package delegate_test - -import ( - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/models/delegate" - models2 "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/db/mongo" - "github.com/stretchr/testify/require" - "testing" -) - -func TestProject_Add(t *testing.T) { - SetupTest(t) - - p := &models2.Project{} - - err := delegate.NewModelDelegate(p).Add() - require.Nil(t, err) - require.NotNil(t, p.Id) - - a, err := delegate.NewModelDelegate(p).GetArtifact() - require.Nil(t, err) - require.Equal(t, p.Id, a.GetId()) - require.NotNil(t, a.GetSys().GetCreateTs()) - require.NotNil(t, a.GetSys().GetUpdateTs()) -} - -func TestProject_Save(t *testing.T) { - SetupTest(t) - - p := &models2.Project{} - - err := delegate.NewModelDelegate(p).Add() - require.Nil(t, err) - - name := "test_project" - p.Name = name - err = delegate.NewModelDelegate(p).Save() - require.Nil(t, err) - - err = mongo.GetMongoCol(interfaces.ModelColNameProject).FindId(p.Id).One(&p) - require.Nil(t, err) - require.Equal(t, name, p.Name) -} - -func TestProject_Delete(t *testing.T) { - SetupTest(t) - - p := &models2.Project{ - Name: "test_project", - } - - err := delegate.NewModelDelegate(p).Add() - require.Nil(t, err) - - err = delegate.NewModelDelegate(p).Delete() - require.Nil(t, err) - - var a models2.Artifact - col := mongo.GetMongoCol(interfaces.ModelColNameArtifact) - err = col.FindId(p.Id).One(&a) - require.Nil(t, err) - require.NotNil(t, a.Obj) - require.True(t, a.Del) -} diff --git a/core/models/delegate/model_user_role_test.go b/core/models/delegate/model_user_role_test.go deleted file mode 100644 index d55b90c6d..000000000 --- a/core/models/delegate/model_user_role_test.go +++ /dev/null @@ -1,97 +0,0 @@ -package delegate_test - -import ( - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/models/common" - "github.com/crawlab-team/crawlab/core/models/delegate" - models2 "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/db/mongo" - "github.com/spf13/viper" - "github.com/stretchr/testify/require" - "go.mongodb.org/mongo-driver/bson/primitive" - "testing" -) - -func init() { - viper.Set("mongo.db", "crawlab_test") - common.CreateIndexes() -} - -func TestUserRole_Add(t *testing.T) { - SetupTest(t) - - p := &models2.UserRole{} - - err := delegate.NewModelDelegate(p).Add() - require.Nil(t, err) - require.NotNil(t, p.Id) - - a, err := delegate.NewModelDelegate(p).GetArtifact() - require.Nil(t, err) - require.Equal(t, p.Id, a.GetId()) - require.NotNil(t, a.GetSys().GetCreateTs()) - require.NotNil(t, a.GetSys().GetUpdateTs()) -} - -func TestUserRole_Save(t *testing.T) { - SetupTest(t) - - p := &models2.UserRole{ - UserId: primitive.NewObjectID(), - RoleId: primitive.NewObjectID(), - } - - err := delegate.NewModelDelegate(p).Add() - require.Nil(t, err) - - uid := primitive.NewObjectID() - rid := primitive.NewObjectID() - p.UserId = uid - p.RoleId = rid - err = delegate.NewModelDelegate(p).Save() - require.Nil(t, err) - - err = mongo.GetMongoCol(interfaces.ModelColNameUserRole).FindId(p.Id).One(&p) - require.Nil(t, err) - require.Equal(t, uid, p.UserId) - require.Equal(t, rid, p.RoleId) -} - -func TestUserRole_Delete(t *testing.T) { - SetupTest(t) - - p := &models2.UserRole{} - - err := delegate.NewModelDelegate(p).Add() - require.Nil(t, err) - - err = delegate.NewModelDelegate(p).Delete() - require.Nil(t, err) - - var a models2.Artifact - col := mongo.GetMongoCol(interfaces.ModelColNameArtifact) - err = col.FindId(p.Id).One(&a) - require.Nil(t, err) - require.NotNil(t, a.Obj) - require.True(t, a.Del) -} - -func TestUserRole_AddDuplicates(t *testing.T) { - SetupTest(t) - - uid := primitive.NewObjectID() - rid := primitive.NewObjectID() - p := &models2.UserRole{ - UserId: uid, - RoleId: rid, - } - p2 := &models2.UserRole{ - UserId: uid, - RoleId: rid, - } - - err := delegate.NewModelDelegate(p).Add() - require.Nil(t, err) - err = delegate.NewModelDelegate(p2).Add() - require.NotNil(t, err) -} diff --git a/core/models/delegate/utils_event.go b/core/models/delegate/utils_event.go deleted file mode 100644 index d5cd3f89b..000000000 --- a/core/models/delegate/utils_event.go +++ /dev/null @@ -1,20 +0,0 @@ -package delegate - -import ( - "fmt" - "github.com/crawlab-team/crawlab/core/interfaces" -) - -func GetEventName(d *ModelDelegate, method interfaces.ModelDelegateMethod) (eventName string) { - return getEventName(d, method) -} - -func getEventName(d *ModelDelegate, method interfaces.ModelDelegateMethod) (eventName string) { - if method == interfaces.ModelDelegateMethodSave { - hasChange := d.hasChange() - if hasChange { - method = interfaces.ModelDelegateMethodChange - } - } - return fmt.Sprintf("model:%s:%s", d.colName, method) -} diff --git a/core/models/models/artifact.go b/core/models/models/artifact.go deleted file mode 100644 index 55e07af87..000000000 --- a/core/models/models/artifact.go +++ /dev/null @@ -1,56 +0,0 @@ -package models - -import ( - "github.com/crawlab-team/crawlab/core/interfaces" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -type Artifact struct { - Id primitive.ObjectID `bson:"_id" json:"_id"` - Col string `bson:"_col" json:"_col"` - Del bool `bson:"_del" json:"_del"` - TagIds []primitive.ObjectID `bson:"_tid" json:"_tid"` - Sys *ArtifactSys `bson:"_sys" json:"_sys"` - Obj interface{} `bson:"_obj" json:"_obj"` -} - -func (a *Artifact) GetId() (id primitive.ObjectID) { - return a.Id -} - -func (a *Artifact) SetId(id primitive.ObjectID) { - a.Id = id -} - -func (a *Artifact) GetSys() (sys interfaces.ModelArtifactSys) { - if a.Sys == nil { - a.Sys = &ArtifactSys{} - } - return a.Sys -} - -func (a *Artifact) GetTagIds() (ids []primitive.ObjectID) { - return a.TagIds -} - -func (a *Artifact) SetTagIds(ids []primitive.ObjectID) { - a.TagIds = ids -} - -func (a *Artifact) SetObj(obj interfaces.Model) { - a.Obj = obj -} - -func (a *Artifact) SetDel(del bool) { - a.Del = del -} - -type ArtifactList []Artifact - -func (l *ArtifactList) GetModels() (res []interfaces.Model) { - for i := range *l { - d := (*l)[i] - res = append(res, &d) - } - return res -} diff --git a/core/models/models/artifact_sys.go b/core/models/models/artifact_sys.go deleted file mode 100644 index 539d8fb00..000000000 --- a/core/models/models/artifact_sys.go +++ /dev/null @@ -1,63 +0,0 @@ -package models - -import ( - "go.mongodb.org/mongo-driver/bson/primitive" - "time" -) - -type ArtifactSys struct { - CreateTs time.Time `json:"create_ts" bson:"create_ts"` - CreateUid primitive.ObjectID `json:"create_uid" bson:"create_uid"` - UpdateTs time.Time `json:"update_ts" bson:"update_ts"` - UpdateUid primitive.ObjectID `json:"update_uid" bson:"update_uid"` - DeleteTs time.Time `json:"delete_ts" bson:"delete_ts"` - DeleteUid primitive.ObjectID `json:"delete_uid" bson:"delete_uid"` -} - -func (sys *ArtifactSys) GetCreateTs() time.Time { - return sys.CreateTs -} - -func (sys *ArtifactSys) SetCreateTs(ts time.Time) { - sys.CreateTs = ts -} - -func (sys *ArtifactSys) GetUpdateTs() time.Time { - return sys.UpdateTs -} - -func (sys *ArtifactSys) SetUpdateTs(ts time.Time) { - sys.UpdateTs = ts -} - -func (sys *ArtifactSys) GetDeleteTs() time.Time { - return sys.DeleteTs -} - -func (sys *ArtifactSys) SetDeleteTs(ts time.Time) { - sys.DeleteTs = ts -} - -func (sys *ArtifactSys) GetCreateUid() primitive.ObjectID { - return sys.CreateUid -} - -func (sys *ArtifactSys) SetCreateUid(id primitive.ObjectID) { - sys.CreateUid = id -} - -func (sys *ArtifactSys) GetUpdateUid() primitive.ObjectID { - return sys.UpdateUid -} - -func (sys *ArtifactSys) SetUpdateUid(id primitive.ObjectID) { - sys.UpdateUid = id -} - -func (sys *ArtifactSys) GetDeleteUid() primitive.ObjectID { - return sys.DeleteUid -} - -func (sys *ArtifactSys) SetDeleteUid(id primitive.ObjectID) { - sys.DeleteUid = id -} diff --git a/core/models/models/base.go b/core/models/models/base.go index a17bb98f3..22ba2bdaf 100644 --- a/core/models/models/base.go +++ b/core/models/models/base.go @@ -1,13 +1,129 @@ package models import ( + "reflect" + "time" + "go.mongodb.org/mongo-driver/bson/primitive" ) -type BaseModel struct { - Id primitive.ObjectID `json:"_id" bson:"_id"` +type BaseModel[T any] struct { + Id primitive.ObjectID `json:"_id" bson:"_id"` + CreatedAt time.Time `json:"created_ts,omitempty" bson:"created_ts,omitempty"` + CreatedBy primitive.ObjectID `json:"created_by,omitempty" bson:"created_by,omitempty"` + UpdatedAt time.Time `json:"updated_ts,omitempty" bson:"updated_ts,omitempty"` + UpdatedBy primitive.ObjectID `json:"updated_by,omitempty" bson:"updated_by,omitempty"` +} + +func (m *BaseModel[T]) GetId() primitive.ObjectID { + return m.Id +} + +func (m *BaseModel[T]) SetId(id primitive.ObjectID) { + m.Id = id +} + +func (m *BaseModel[T]) GetCreatedAt() time.Time { + return m.CreatedAt +} + +func (m *BaseModel[T]) SetCreatedAt(t time.Time) { + m.CreatedAt = t +} + +func (m *BaseModel[T]) GetCreatedBy() primitive.ObjectID { + return m.CreatedBy +} + +func (m *BaseModel[T]) SetCreatedBy(id primitive.ObjectID) { + m.CreatedBy = id +} + +func (m *BaseModel[T]) GetUpdatedAt() time.Time { + return m.UpdatedAt +} + +func (m *BaseModel[T]) SetUpdatedAt(t time.Time) { + m.UpdatedAt = t +} + +func (m *BaseModel[T]) GetUpdatedBy() primitive.ObjectID { + return m.UpdatedBy +} + +func (m *BaseModel[T]) SetUpdatedBy(id primitive.ObjectID) { + m.UpdatedBy = id +} + +func (m *BaseModel[T]) SetCreated(id primitive.ObjectID) { + m.SetCreatedAt(time.Now()) + m.SetCreatedBy(id) +} + +func (m *BaseModel[T]) SetUpdated(id primitive.ObjectID) { + m.SetUpdatedAt(time.Now()) + m.SetUpdatedBy(id) +} + +func GetModelInstances() []any { + return []any{ + *new(TestModel), + *new(DataCollection), + *new(Database), + *new(DatabaseMetric), + *new(Dependency), + *new(DependencyLog), + *new(DependencyConfig), + *new(DependencyConfigSetup), + *new(DependencyRepo), + *new(Environment), + *new(Git), + *new(Metric), + *new(Node), + *new(NotificationAlert), + *new(NotificationChannel), + *new(NotificationRequest), + *new(NotificationSetting), + *new(Permission), + *new(Project), + *new(RolePermission), + *new(Role), + *new(Schedule), + *new(Setting), + *new(Spider), + *new(SpiderStat), + *new(TaskStat), + *new(Task), + *new(Token), + *new(UserRole), + *new(User), + } +} + +func GetCollectionNameByInstance(v any) string { + t := reflect.TypeOf(v) + field := t.Field(0) + return field.Tag.Get("collection") +} + +func GetSystemModelColNamesMap() map[string]bool { + colNamesMap := make(map[string]bool) + for _, instance := range GetModelInstances() { + colName := GetCollectionNameByInstance(instance) + if colName != "" { + colNamesMap[colName] = true + } + } + return colNamesMap } -func (d *BaseModel) GetId() (id primitive.ObjectID) { - return d.Id +func GetSystemModelColNames() []string { + colNames := make([]string, 0) + for _, instance := range GetModelInstances() { + colName := GetCollectionNameByInstance(instance) + if colName != "" { + colNames = append(colNames, colName) + } + } + return colNames } diff --git a/core/models/models/base_v2.go b/core/models/models/base_v2.go deleted file mode 100644 index 13a33abe3..000000000 --- a/core/models/models/base_v2.go +++ /dev/null @@ -1,64 +0,0 @@ -package models - -import ( - "go.mongodb.org/mongo-driver/bson/primitive" - "time" -) - -type BaseModelV2[T any] struct { - Id primitive.ObjectID `json:"_id" bson:"_id"` - CreatedAt time.Time `json:"created_ts,omitempty" bson:"created_ts,omitempty"` - CreatedBy primitive.ObjectID `json:"created_by,omitempty" bson:"created_by,omitempty"` - UpdatedAt time.Time `json:"updated_ts,omitempty" bson:"updated_ts,omitempty"` - UpdatedBy primitive.ObjectID `json:"updated_by,omitempty" bson:"updated_by,omitempty"` -} - -func (m *BaseModelV2[T]) GetId() primitive.ObjectID { - return m.Id -} - -func (m *BaseModelV2[T]) SetId(id primitive.ObjectID) { - m.Id = id -} - -func (m *BaseModelV2[T]) GetCreatedAt() time.Time { - return m.CreatedAt -} - -func (m *BaseModelV2[T]) SetCreatedAt(t time.Time) { - m.CreatedAt = t -} - -func (m *BaseModelV2[T]) GetCreatedBy() primitive.ObjectID { - return m.CreatedBy -} - -func (m *BaseModelV2[T]) SetCreatedBy(id primitive.ObjectID) { - m.CreatedBy = id -} - -func (m *BaseModelV2[T]) GetUpdatedAt() time.Time { - return m.UpdatedAt -} - -func (m *BaseModelV2[T]) SetUpdatedAt(t time.Time) { - m.UpdatedAt = t -} - -func (m *BaseModelV2[T]) GetUpdatedBy() primitive.ObjectID { - return m.UpdatedBy -} - -func (m *BaseModelV2[T]) SetUpdatedBy(id primitive.ObjectID) { - m.UpdatedBy = id -} - -func (m *BaseModelV2[T]) SetCreated(id primitive.ObjectID) { - m.SetCreatedAt(time.Now()) - m.SetCreatedBy(id) -} - -func (m *BaseModelV2[T]) SetUpdated(id primitive.ObjectID) { - m.SetUpdatedAt(time.Now()) - m.SetUpdatedBy(id) -} diff --git a/core/models/models/data_collection.go b/core/models/models/data_collection.go index dfc6fb238..587b5db94 100644 --- a/core/models/models/data_collection.go +++ b/core/models/models/data_collection.go @@ -2,35 +2,16 @@ package models import ( "github.com/crawlab-team/crawlab/core/entity" - "github.com/crawlab-team/crawlab/core/interfaces" - "go.mongodb.org/mongo-driver/bson/primitive" ) type DataCollection struct { - Id primitive.ObjectID `json:"_id" bson:"_id"` - Name string `json:"name" bson:"name"` - Fields []entity.DataField `json:"fields" bson:"fields"` - Dedup struct { + any `collection:"data_collections"` + BaseModel[DataCollection] `bson:",inline"` + Name string `json:"name" bson:"name"` + Fields []entity.DataField `json:"fields" bson:"fields"` + Dedup struct { Enabled bool `json:"enabled" bson:"enabled"` Keys []string `json:"keys" bson:"keys"` Type string `json:"type" bson:"type"` } `json:"dedup" bson:"dedup"` } - -func (dc *DataCollection) GetId() (id primitive.ObjectID) { - return dc.Id -} - -func (dc *DataCollection) SetId(id primitive.ObjectID) { - dc.Id = id -} - -type DataCollectionList []DataCollection - -func (l *DataCollectionList) GetModels() (res []interfaces.Model) { - for i := range *l { - d := (*l)[i] - res = append(res, &d) - } - return res -} diff --git a/core/models/models/data_collection_v2.go b/core/models/models/data_collection_v2.go deleted file mode 100644 index 1a3c724e3..000000000 --- a/core/models/models/data_collection_v2.go +++ /dev/null @@ -1,17 +0,0 @@ -package models - -import ( - "github.com/crawlab-team/crawlab/core/entity" -) - -type DataCollectionV2 struct { - any `collection:"data_collections"` - BaseModelV2[DataCollection] `bson:",inline"` - Name string `json:"name" bson:"name"` - Fields []entity.DataField `json:"fields" bson:"fields"` - Dedup struct { - Enabled bool `json:"enabled" bson:"enabled"` - Keys []string `json:"keys" bson:"keys"` - Type string `json:"type" bson:"type"` - } `json:"dedup" bson:"dedup"` -} diff --git a/core/models/models/data_source.go b/core/models/models/data_source.go deleted file mode 100644 index f444266f5..000000000 --- a/core/models/models/data_source.go +++ /dev/null @@ -1,42 +0,0 @@ -package models - -import ( - "github.com/crawlab-team/crawlab/core/interfaces" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -type DataSource struct { - Id primitive.ObjectID `json:"_id" bson:"_id"` - Name string `json:"name" bson:"name"` - Type string `json:"type" bson:"type"` - Description string `json:"description" bson:"description"` - Host string `json:"host" bson:"host"` - Port string `json:"port" bson:"port"` - Url string `json:"url" bson:"url"` - Hosts []string `json:"hosts" bson:"hosts"` - Database string `json:"database" bson:"database"` - Username string `json:"username" bson:"username"` - Password string `json:"password,omitempty" bson:"-"` - ConnectType string `json:"connect_type" bson:"connect_type"` - Status string `json:"status" bson:"status"` - Error string `json:"error" bson:"error"` - Extra map[string]string `json:"extra,omitempty" bson:"extra,omitempty"` -} - -func (ds *DataSource) GetId() (id primitive.ObjectID) { - return ds.Id -} - -func (ds *DataSource) SetId(id primitive.ObjectID) { - ds.Id = id -} - -type DataSourceList []DataSource - -func (l *DataSourceList) GetModels() (res []interfaces.Model) { - for i := range *l { - d := (*l)[i] - res = append(res, &d) - } - return res -} diff --git a/core/models/models/data_source_v2.go b/core/models/models/data_source_v2.go deleted file mode 100644 index 16415510c..000000000 --- a/core/models/models/data_source_v2.go +++ /dev/null @@ -1,20 +0,0 @@ -package models - -type DataSourceV2 struct { - any `collection:"data_sources"` - BaseModelV2[DataSource] `bson:",inline"` - Name string `json:"name" bson:"name"` - Type string `json:"type" bson:"type"` - Description string `json:"description" bson:"description"` - Host string `json:"host" bson:"host"` - Port string `json:"port" bson:"port"` - Url string `json:"url" bson:"url"` - Hosts []string `json:"hosts" bson:"hosts"` - Database string `json:"database" bson:"database"` - Username string `json:"username" bson:"username"` - Password string `json:"-,omitempty" bson:"password"` - ConnectType string `json:"connect_type" bson:"connect_type"` - Status string `json:"status" bson:"status"` - Error string `json:"error" bson:"error"` - Extra map[string]string `json:"extra,omitempty" bson:"extra,omitempty"` -} diff --git a/core/models/models/database.go b/core/models/models/database.go new file mode 100644 index 000000000..c510b0f7c --- /dev/null +++ b/core/models/models/database.go @@ -0,0 +1,48 @@ +package models + +import ( + "time" +) + +type Database struct { + any `collection:"databases"` + BaseModel[Database] `bson:",inline"` + Name string `json:"name" bson:"name"` + Description string `json:"description" bson:"description"` + DataSource string `json:"data_source" bson:"data_source"` + Host string `json:"host" bson:"host"` + Port int `json:"port" bson:"port"` + URI string `json:"uri,omitempty" bson:"uri,omitempty"` + Database string `json:"database,omitempty" bson:"database,omitempty"` + Username string `json:"username,omitempty" bson:"username,omitempty"` + Password string `json:"password,omitempty" bson:"-"` + EncryptedPassword string `json:"-,omitempty" bson:"encrypted_password,omitempty"` + Status string `json:"status" bson:"status"` + Error string `json:"error" bson:"error"` + Active bool `json:"active" bson:"active"` + ActiveAt time.Time `json:"active_ts" bson:"active_ts"` + IsDefault bool `json:"is_default" bson:"-"` + + MongoParams *struct { + AuthSource string `json:"auth_source,omitempty" bson:"auth_source,omitempty"` + AuthMechanism string `json:"auth_mechanism,omitempty" bson:"auth_mechanism,omitempty"` + } `json:"mongo_params,omitempty" bson:"mongo_params,omitempty"` + PostgresParams *struct { + SSLMode string `json:"ssl_mode,omitempty" bson:"ssl_mode,omitempty"` + } `json:"postgres_params,omitempty" bson:"postgres_params,omitempty"` + SnowflakeParams *struct { + Account string `json:"account,omitempty" bson:"account,omitempty"` + Schema string `json:"schema,omitempty" bson:"schema,omitempty"` + Warehouse string `json:"warehouse,omitempty" bson:"warehouse,omitempty"` + Role string `json:"role,omitempty" bson:"role,omitempty"` + } `json:"snowflake_params,omitempty" bson:"snowflake_params,omitempty"` + CassandraParams *struct { + Keyspace string `json:"keyspace,omitempty" bson:"keyspace,omitempty"` + } `json:"cassandra_params,omitempty" bson:"cassandra_params,omitempty"` + HiveParams *struct { + Auth string `json:"auth,omitempty" bson:"auth,omitempty"` + } `json:"hive_params,omitempty" bson:"hive_params,omitempty"` + RedisParams *struct { + DB int `json:"db,omitempty" bson:"db,omitempty"` + } `json:"redis_params,omitempty" bson:"redis_params,omitempty"` +} diff --git a/core/models/models/database_metric.go b/core/models/models/database_metric.go new file mode 100644 index 000000000..195615a0a --- /dev/null +++ b/core/models/models/database_metric.go @@ -0,0 +1,24 @@ +package models + +import "go.mongodb.org/mongo-driver/bson/primitive" + +type DatabaseMetric struct { + any `collection:"database_metrics"` + BaseModel[DatabaseMetric] `bson:",inline"` + DatabaseId primitive.ObjectID `json:"database_id" bson:"database_id"` + CpuUsagePercent float32 `json:"cpu_usage_percent" bson:"cpu_usage_percent"` + TotalMemory uint64 `json:"total_memory" bson:"total_memory"` + AvailableMemory uint64 `json:"available_memory" bson:"available_memory"` + UsedMemory uint64 `json:"used_memory" bson:"used_memory"` + UsedMemoryPercent float32 `json:"used_memory_percent" bson:"used_memory_percent"` + TotalDisk uint64 `json:"total_disk" bson:"total_disk"` + AvailableDisk uint64 `json:"available_disk" bson:"available_disk"` + UsedDisk uint64 `json:"used_disk" bson:"used_disk"` + UsedDiskPercent float32 `json:"used_disk_percent" bson:"used_disk_percent"` + Connections int `json:"connections" bson:"connections"` + QueryPerSecond float64 `json:"query_per_second" bson:"query_per_second"` + TotalQuery uint64 `json:"total_query,omitempty" bson:"total_query,omitempty"` + CacheHitRatio float64 `json:"cache_hit_ratio" bson:"cache_hit_ratio"` + ReplicationLag float64 `json:"replication_lag" bson:"replication_lag"` + LockWaitTime float64 `json:"lock_wait_time" bson:"lock_wait_time"` +} diff --git a/core/models/models/dependency.go b/core/models/models/dependency.go new file mode 100644 index 000000000..4099cda67 --- /dev/null +++ b/core/models/models/dependency.go @@ -0,0 +1,19 @@ +package models + +import ( + "go.mongodb.org/mongo-driver/bson/primitive" +) + +type Dependency struct { + any `collection:"dependencies"` + BaseModel[Dependency] `bson:",inline"` + Name string `json:"name" bson:"name"` + Description string `json:"description" bson:"description"` + NodeId primitive.ObjectID `json:"node_id" bson:"node_id"` + Type string `json:"type" bson:"type"` + Version string `json:"version" bson:"version"` + Status string `json:"status" bson:"status"` + Error string `json:"error,omitempty" bson:"error,omitempty"` + NodeIds []primitive.ObjectID `json:"node_ids,omitempty" bson:"-"` + Versions []string `json:"versions,omitempty" bson:"-"` +} diff --git a/core/models/models/dependency_config.go b/core/models/models/dependency_config.go new file mode 100644 index 000000000..d05a5f347 --- /dev/null +++ b/core/models/models/dependency_config.go @@ -0,0 +1,14 @@ +package models + +type DependencyConfig struct { + any `collection:"dependency_configs"` + BaseModel[DependencyConfig] `bson:",inline"` + Key string `json:"key" bson:"key"` + Name string `json:"name" bson:"name"` + ExecCmd string `json:"exec_cmd" bson:"exec_cmd"` + PkgCmd string `json:"pkg_cmd" bson:"pkg_cmd"` + PkgSrcURL string `json:"pkg_src_url" bson:"pkg_src_url"` + Setup bool `json:"setup" bson:"-"` + TotalDependencies int `json:"total_dependencies" bson:"-"` + SearchReady bool `json:"search_ready" bson:"-"` +} diff --git a/core/models/models/dependency_config_setup.go b/core/models/models/dependency_config_setup.go new file mode 100644 index 000000000..20808a85b --- /dev/null +++ b/core/models/models/dependency_config_setup.go @@ -0,0 +1,19 @@ +package models + +import "go.mongodb.org/mongo-driver/bson/primitive" + +type DependencyConfigSetup struct { + any `collection:"dependency_config_setups"` + BaseModel[DependencyConfigSetup] `bson:",inline"` + DependencyConfigId primitive.ObjectID `json:"dependency_config_id" bson:"dependency_config_id"` + NodeId primitive.ObjectID `json:"node_id" bson:"node_id"` + Version string `json:"version" bson:"version"` + Drivers []DependencyDriver `json:"versions,omitempty" bson:"versions,omitempty"` + Status string `json:"status" bson:"status"` + Error string `json:"error,omitempty" bson:"error,omitempty"` + Node *Node `json:"node,omitempty" bson:"-"` +} +type DependencyDriver struct { + Name string `json:"name" bson:"name"` + Version string `json:"version" bson:"version"` +} diff --git a/core/models/models/dependency_log.go b/core/models/models/dependency_log.go new file mode 100644 index 000000000..415245ce9 --- /dev/null +++ b/core/models/models/dependency_log.go @@ -0,0 +1,10 @@ +package models + +import "go.mongodb.org/mongo-driver/bson/primitive" + +type DependencyLog struct { + any `collection:"dependency_logs"` + BaseModel[DependencyLog] `bson:",inline"` + TargetId primitive.ObjectID `json:"target_id" bson:"target_id"` + Content string `json:"content" bson:"content"` +} diff --git a/core/models/models/dependency_log_v2.go b/core/models/models/dependency_log_v2.go deleted file mode 100644 index f0178c2e4..000000000 --- a/core/models/models/dependency_log_v2.go +++ /dev/null @@ -1,10 +0,0 @@ -package models - -import "go.mongodb.org/mongo-driver/bson/primitive" - -type DependencyLogV2 struct { - any `collection:"dependency_logs"` - BaseModelV2[DependencyLogV2] `bson:",inline"` - TaskId primitive.ObjectID `json:"task_id" bson:"task_id"` - Content string `json:"content" bson:"content"` -} diff --git a/core/models/models/dependency_pypi_project.go b/core/models/models/dependency_pypi_project.go new file mode 100644 index 000000000..f0d20a92a --- /dev/null +++ b/core/models/models/dependency_pypi_project.go @@ -0,0 +1,9 @@ +package models + +type DependencyPypiProject struct { + any `collection:"dependency_pypi_projects"` + BaseModel[DependencyPypiProject] `bson:",inline"` + Name string `json:"name" bson:"name"` + Version string `json:"version" bson:"version"` + LastSerial int `json:"_last-serial" bson:"last_serial"` +} diff --git a/core/models/models/dependency_repo.go b/core/models/models/dependency_repo.go new file mode 100644 index 000000000..d205dce00 --- /dev/null +++ b/core/models/models/dependency_repo.go @@ -0,0 +1,10 @@ +package models + +type DependencyRepo struct { + any `collection:"dependency_repos"` + BaseModel[DependencyRepo] `bson:",inline"` + Name string `json:"name" bson:"name"` + Type string `json:"type" bson:"type"` + LatestVersion string `json:"latest_version" bson:"latest_version"` + AllVersions []string `json:"all_versions" bson:"all_versions"` +} diff --git a/core/models/models/dependency_setting.go b/core/models/models/dependency_setting.go deleted file mode 100644 index d6232ede6..000000000 --- a/core/models/models/dependency_setting.go +++ /dev/null @@ -1,36 +0,0 @@ -package models - -import ( - "github.com/crawlab-team/crawlab/core/interfaces" - "go.mongodb.org/mongo-driver/bson/primitive" - "time" -) - -type DependencySetting struct { - Id primitive.ObjectID `json:"_id" bson:"_id"` - Key string `json:"key" bson:"key"` - Name string `json:"name" bson:"name"` - Description string `json:"description" bson:"description"` - Enabled bool `json:"enabled" bson:"enabled"` - Cmd string `json:"cmd" bson:"cmd"` - Proxy string `json:"proxy" bson:"proxy"` - LastUpdateTs time.Time `json:"last_update_ts" bson:"last_update_ts"` -} - -func (j *DependencySetting) GetId() (id primitive.ObjectID) { - return j.Id -} - -func (j *DependencySetting) SetId(id primitive.ObjectID) { - j.Id = id -} - -type DependencySettingList []DependencySetting - -func (l *DependencySettingList) GetModels() (res []interfaces.Model) { - for i := range *l { - d := (*l)[i] - res = append(res, &d) - } - return res -} diff --git a/core/models/models/dependency_setting_v2.go b/core/models/models/dependency_setting_v2.go deleted file mode 100644 index d4c241e69..000000000 --- a/core/models/models/dependency_setting_v2.go +++ /dev/null @@ -1,17 +0,0 @@ -package models - -import ( - "time" -) - -type DependencySettingV2 struct { - any `collection:"dependency_settings"` - BaseModelV2[DependencySetting] `bson:",inline"` - Key string `json:"key" bson:"key"` - Name string `json:"name" bson:"name"` - Description string `json:"description" bson:"description"` - Enabled bool `json:"enabled" bson:"enabled"` - Cmd string `json:"cmd" bson:"cmd"` - Proxy string `json:"proxy" bson:"proxy"` - LastUpdateTs time.Time `json:"last_update_ts" bson:"last_update_ts"` -} diff --git a/core/models/models/dependency_task_v2.go b/core/models/models/dependency_task_v2.go deleted file mode 100644 index c9fd40d66..000000000 --- a/core/models/models/dependency_task_v2.go +++ /dev/null @@ -1,15 +0,0 @@ -package models - -import "go.mongodb.org/mongo-driver/bson/primitive" - -type DependencyTaskV2 struct { - any `collection:"dependency_tasks"` - BaseModelV2[DependencyTaskV2] `bson:",inline"` - Status string `json:"status" bson:"status"` - Error string `json:"error" bson:"error"` - SettingId primitive.ObjectID `json:"setting_id" bson:"setting_id"` - Type string `json:"type" bson:"type"` - NodeId primitive.ObjectID `json:"node_id" bson:"node_id"` - Action string `json:"action" bson:"action"` - DepNames []string `json:"dep_names" bson:"dep_names"` -} diff --git a/core/models/models/dependency_v2.go b/core/models/models/dependency_v2.go deleted file mode 100644 index 6d8d60393..000000000 --- a/core/models/models/dependency_v2.go +++ /dev/null @@ -1,18 +0,0 @@ -package models - -import ( - "github.com/crawlab-team/crawlab/core/entity" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -type DependencyV2 struct { - any `collection:"dependencies"` - BaseModelV2[DependencyV2] `bson:",inline"` - Name string `json:"name" bson:"name"` - Description string `json:"description" bson:"description"` - NodeId primitive.ObjectID `json:"node_id" bson:"node_id"` - Type string `json:"type" bson:"type"` - LatestVersion string `json:"latest_version" bson:"latest_version"` - Version string `json:"version" bson:"version"` - Result entity.DependencyResult `json:"result" bson:"-"` -} diff --git a/core/models/models/environment.go b/core/models/models/environment.go index 1598f1305..889d412c6 100644 --- a/core/models/models/environment.go +++ b/core/models/models/environment.go @@ -1,46 +1,8 @@ package models -import ( - "github.com/crawlab-team/crawlab/core/interfaces" - "go.mongodb.org/mongo-driver/bson/primitive" -) - type Environment struct { - Id primitive.ObjectID `json:"_id" bson:"_id"` - Key string `json:"key" bson:"key"` - Value string `json:"value" bson:"value"` -} - -func (e *Environment) GetId() (id primitive.ObjectID) { - return e.Id -} - -func (e *Environment) SetId(id primitive.ObjectID) { - e.Id = id -} - -func (e *Environment) GetKey() (key string) { - return e.Key -} - -func (e *Environment) SetKey(key string) { - e.Key = key -} - -func (e *Environment) GetValue() (value string) { - return e.Value -} - -func (e *Environment) SetValue(value string) { - e.Value = value -} - -type EnvironmentList []Environment - -func (l *EnvironmentList) GetModels() (res []interfaces.Model) { - for i := range *l { - d := (*l)[i] - res = append(res, &d) - } - return res + any `collection:"environments"` + BaseModel[Environment] `bson:",inline"` + Key string `json:"key" bson:"key"` + Value string `json:"value" bson:"value"` } diff --git a/core/models/models/environment_v2.go b/core/models/models/environment_v2.go deleted file mode 100644 index 776a11422..000000000 --- a/core/models/models/environment_v2.go +++ /dev/null @@ -1,8 +0,0 @@ -package models - -type EnvironmentV2 struct { - any `collection:"environments"` - BaseModelV2[EnvironmentV2] `bson:",inline"` - Key string `json:"key" bson:"key"` - Value string `json:"value" bson:"value"` -} diff --git a/core/models/models/extra_value.go b/core/models/models/extra_value.go deleted file mode 100644 index 4d65bf5fd..000000000 --- a/core/models/models/extra_value.go +++ /dev/null @@ -1,64 +0,0 @@ -package models - -import ( - "github.com/crawlab-team/crawlab/core/interfaces" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -type ExtraValue struct { - Id primitive.ObjectID `json:"_id" bson:"_id"` - ObjectId primitive.ObjectID `json:"oid" bson:"oid"` - Model string `json:"model" bson:"m"` - Type string `json:"type" bson:"t"` - Value interface{} `json:"value" bson:"v"` -} - -func (ev *ExtraValue) GetId() (id primitive.ObjectID) { - return ev.Id -} - -func (ev *ExtraValue) SetId(id primitive.ObjectID) { - ev.Id = id -} - -func (ev *ExtraValue) GetValue() (v interface{}) { - return ev.Value -} - -func (ev *ExtraValue) SetValue(v interface{}) { - ev.Value = v -} - -func (ev *ExtraValue) GetObjectId() (oid primitive.ObjectID) { - return ev.ObjectId -} - -func (ev *ExtraValue) SetObjectId(oid primitive.ObjectID) { - ev.ObjectId = oid -} - -func (ev *ExtraValue) GetModel() (m string) { - return ev.Model -} - -func (ev *ExtraValue) SetModel(m string) { - ev.Model = m -} - -func (ev *ExtraValue) GetType() (t string) { - return ev.Type -} - -func (ev *ExtraValue) SetType(t string) { - ev.Type = t -} - -type ExtraValueList []ExtraValue - -func (l *ExtraValueList) GetModels() (res []interfaces.Model) { - for i := range *l { - d := (*l)[i] - res = append(res, &d) - } - return res -} diff --git a/core/models/models/git.go b/core/models/models/git.go index 1a9a0a587..45a3365fb 100644 --- a/core/models/models/git.go +++ b/core/models/models/git.go @@ -1,82 +1,26 @@ package models import ( - "github.com/crawlab-team/crawlab/core/interfaces" - "go.mongodb.org/mongo-driver/bson/primitive" + "github.com/crawlab-team/crawlab/vcs" + "time" ) type Git struct { - Id primitive.ObjectID `json:"_id" bson:"_id"` - Url string `json:"url" bson:"url"` - AuthType string `json:"auth_type" bson:"auth_type"` - Username string `json:"username" bson:"username"` - Password string `json:"password" bson:"password"` - CurrentBranch string `json:"current_branch" bson:"current_branch"` - AutoPull bool `json:"auto_pull" bson:"auto_pull"` -} - -func (g *Git) GetId() (id primitive.ObjectID) { - return g.Id -} - -func (g *Git) SetId(id primitive.ObjectID) { - g.Id = id -} - -func (g *Git) GetUrl() (url string) { - return g.Url -} - -func (g *Git) SetUrl(url string) { - g.Url = url -} - -func (g *Git) GetAuthType() (authType string) { - return g.AuthType -} - -func (g *Git) SetAuthType(authType string) { - g.AuthType = authType -} - -func (g *Git) GetUsername() (username string) { - return g.Username -} - -func (g *Git) SetUsername(username string) { - g.Username = username -} - -func (g *Git) GetPassword() (password string) { - return g.Password -} - -func (g *Git) SetPassword(password string) { - g.Password = password -} - -func (g *Git) GetCurrentBranch() (currentBranch string) { - return g.CurrentBranch -} - -func (g *Git) SetCurrentBranch(currentBranch string) { - g.CurrentBranch = currentBranch -} - -func (g *Git) GetAutoPull() (autoPull bool) { - return g.AutoPull -} - -func (g *Git) SetAutoPull(autoPull bool) { - g.AutoPull = autoPull -} - -type GitList []Git - -func (l *GitList) GetModels() (res []interfaces.Model) { - for i := range *l { - d := (*l)[i] - res = append(res, &d) - } - return res + any `collection:"gits"` + BaseModel[Git] `bson:",inline"` + Url string `json:"url" bson:"url"` + Name string `json:"name" bson:"name"` + AuthType string `json:"auth_type" bson:"auth_type"` + Username string `json:"username" bson:"username"` + Password string `json:"password" bson:"password"` + CurrentBranch string `json:"current_branch" bson:"current_branch"` + Status string `json:"status" bson:"status"` + Error string `json:"error" bson:"error"` + Spiders []Spider `json:"spiders,omitempty" bson:"-"` + Refs []vcs.GitRef `json:"refs" bson:"refs"` + RefsUpdatedAt time.Time `json:"refs_updated_at" bson:"refs_updated_at"` + CloneLogs []string `json:"clone_logs,omitempty" bson:"clone_logs"` + + // settings + AutoPull bool `json:"auto_pull" bson:"auto_pull"` } diff --git a/core/models/models/git_v2.go b/core/models/models/git_v2.go deleted file mode 100644 index 730c2c89d..000000000 --- a/core/models/models/git_v2.go +++ /dev/null @@ -1,26 +0,0 @@ -package models - -import ( - "github.com/crawlab-team/crawlab/vcs" - "time" -) - -type GitV2 struct { - any `collection:"gits"` - BaseModelV2[GitV2] `bson:",inline"` - Url string `json:"url" bson:"url"` - Name string `json:"name" bson:"name"` - AuthType string `json:"auth_type" bson:"auth_type"` - Username string `json:"username" bson:"username"` - Password string `json:"password" bson:"password"` - CurrentBranch string `json:"current_branch" bson:"current_branch"` - Status string `json:"status" bson:"status"` - Error string `json:"error" bson:"error"` - Spiders []SpiderV2 `json:"spiders,omitempty" bson:"-"` - Refs []vcs.GitRef `json:"refs" bson:"refs"` - RefsUpdatedAt time.Time `json:"refs_updated_at" bson:"refs_updated_at"` - CloneLogs []string `json:"clone_logs,omitempty" bson:"clone_logs"` - - // settings - AutoPull bool `json:"auto_pull" bson:"auto_pull"` -} diff --git a/core/models/models/job.go b/core/models/models/job.go deleted file mode 100644 index 66c17720a..000000000 --- a/core/models/models/job.go +++ /dev/null @@ -1,29 +0,0 @@ -package models - -import ( - "github.com/crawlab-team/crawlab/core/interfaces" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -type Job struct { - Id primitive.ObjectID `bson:"_id" json:"_id"` - TaskId primitive.ObjectID `bson:"task_id" json:"task_id"` -} - -func (j *Job) GetId() (id primitive.ObjectID) { - return j.Id -} - -func (j *Job) SetId(id primitive.ObjectID) { - j.Id = id -} - -type JobList []Job - -func (l *JobList) GetModels() (res []interfaces.Model) { - for i := range *l { - d := (*l)[i] - res = append(res, &d) - } - return res -} diff --git a/core/models/models/metric.go b/core/models/models/metric.go new file mode 100644 index 000000000..8f72eb455 --- /dev/null +++ b/core/models/models/metric.go @@ -0,0 +1,25 @@ +package models + +import ( + "go.mongodb.org/mongo-driver/bson/primitive" +) + +type Metric struct { + any `collection:"metrics"` + BaseModel[Metric] `bson:",inline"` + Type string `json:"type" bson:"type"` + NodeId primitive.ObjectID `json:"node_id" bson:"node_id"` + CpuUsagePercent float32 `json:"cpu_usage_percent" bson:"cpu_usage_percent"` + TotalMemory uint64 `json:"total_memory" bson:"total_memory"` + AvailableMemory uint64 `json:"available_memory" bson:"available_memory"` + UsedMemory uint64 `json:"used_memory" bson:"used_memory"` + UsedMemoryPercent float32 `json:"used_memory_percent" bson:"used_memory_percent"` + TotalDisk uint64 `json:"total_disk" bson:"total_disk"` + AvailableDisk uint64 `json:"available_disk" bson:"available_disk"` + UsedDisk uint64 `json:"used_disk" bson:"used_disk"` + UsedDiskPercent float32 `json:"used_disk_percent" bson:"used_disk_percent"` + DiskReadBytesRate float32 `json:"disk_read_bytes_rate" bson:"disk_read_bytes_rate"` + DiskWriteBytesRate float32 `json:"disk_write_bytes_rate" bson:"disk_write_bytes_rate"` + NetworkBytesSentRate float32 `json:"network_bytes_sent_rate" bson:"network_bytes_sent_rate"` + NetworkBytesRecvRate float32 `json:"network_bytes_recv_rate" bson:"network_bytes_recv_rate"` +} diff --git a/core/models/models/metric_v2.go b/core/models/models/metric_v2.go deleted file mode 100644 index d7dbf0aac..000000000 --- a/core/models/models/metric_v2.go +++ /dev/null @@ -1,23 +0,0 @@ -package models - -import "go.mongodb.org/mongo-driver/bson/primitive" - -type MetricV2 struct { - any `collection:"metrics"` - BaseModelV2[MetricV2] `bson:",inline"` - Type string `json:"type" bson:"type"` - NodeId primitive.ObjectID `json:"node_id" bson:"node_id"` - CpuUsagePercent float32 `json:"cpu_usage_percent" bson:"cpu_usage_percent"` - TotalMemory uint64 `json:"total_memory" bson:"total_memory"` - AvailableMemory uint64 `json:"available_memory" bson:"available_memory"` - UsedMemory uint64 `json:"used_memory" bson:"used_memory"` - UsedMemoryPercent float32 `json:"used_memory_percent" bson:"used_memory_percent"` - TotalDisk uint64 `json:"total_disk" bson:"total_disk"` - AvailableDisk uint64 `json:"available_disk" bson:"available_disk"` - UsedDisk uint64 `json:"used_disk" bson:"used_disk"` - UsedDiskPercent float32 `json:"used_disk_percent" bson:"used_disk_percent"` - DiskReadBytesRate float32 `json:"disk_read_bytes_rate" bson:"disk_read_bytes_rate"` - DiskWriteBytesRate float32 `json:"disk_write_bytes_rate" bson:"disk_write_bytes_rate"` - NetworkBytesSentRate float32 `json:"network_bytes_sent_rate" bson:"network_bytes_sent_rate"` - NetworkBytesRecvRate float32 `json:"network_bytes_recv_rate" bson:"network_bytes_recv_rate"` -} diff --git a/core/models/models/node.go b/core/models/models/node.go index c9698106c..b132fa069 100644 --- a/core/models/models/node.go +++ b/core/models/models/node.go @@ -1,119 +1,23 @@ package models import ( - "github.com/crawlab-team/crawlab/core/interfaces" - "go.mongodb.org/mongo-driver/bson/primitive" "time" ) type Node struct { - Id primitive.ObjectID `json:"_id" bson:"_id"` - Key string `json:"key" bson:"key"` - Name string `json:"name" bson:"name"` - Ip string `json:"ip" bson:"ip"` - Port string `json:"port" bson:"port"` - Mac string `json:"mac" bson:"mac"` - Hostname string `json:"hostname" bson:"hostname"` - Description string `json:"description" bson:"description"` - IsMaster bool `json:"is_master" bson:"is_master"` - Status string `json:"status" bson:"status"` - Enabled bool `json:"enabled" bson:"enabled"` - Active bool `json:"active" bson:"active"` - ActiveTs time.Time `json:"active_ts" bson:"active_ts"` - AvailableRunners int `json:"available_runners" bson:"available_runners"` - MaxRunners int `json:"max_runners" bson:"max_runners"` -} - -func (n *Node) GetId() (id primitive.ObjectID) { - return n.Id -} - -func (n *Node) SetId(id primitive.ObjectID) { - n.Id = id -} - -func (n *Node) GetName() (name string) { - return n.Name -} - -func (n *Node) SetName(name string) { - n.Name = name -} - -func (n *Node) GetDescription() (description string) { - return n.Description -} - -func (n *Node) SetDescription(description string) { - n.Description = description -} - -func (n *Node) GetKey() (key string) { - return n.Key -} - -func (n *Node) GetIsMaster() (ok bool) { - return n.IsMaster -} - -func (n *Node) GetActive() (active bool) { - return n.Active -} - -func (n *Node) SetActive(active bool) { - n.Active = active -} - -func (n *Node) SetActiveTs(activeTs time.Time) { - n.ActiveTs = activeTs -} - -func (n *Node) GetStatus() (status string) { - return n.Status -} - -func (n *Node) SetStatus(status string) { - n.Status = status -} - -func (n *Node) GetEnabled() (enabled bool) { - return n.Enabled -} - -func (n *Node) SetEnabled(enabled bool) { - n.Enabled = enabled -} - -func (n *Node) GetAvailableRunners() (runners int) { - return n.AvailableRunners -} - -func (n *Node) SetAvailableRunners(runners int) { - n.AvailableRunners = runners -} - -func (n *Node) GetMaxRunners() (runners int) { - return n.MaxRunners -} - -func (n *Node) SetMaxRunners(runners int) { - n.MaxRunners = runners -} - -func (n *Node) IncrementAvailableRunners() { - n.AvailableRunners++ -} - -func (n *Node) DecrementAvailableRunners() { - n.AvailableRunners-- -} - -type NodeList []Node - -func (l *NodeList) GetModels() (res []interfaces.Model) { - for i := range *l { - d := (*l)[i] - res = append(res, &d) - } - return res + any `collection:"nodes"` + BaseModel[Node] `bson:",inline"` + Key string `json:"key" bson:"key"` + Name string `json:"name" bson:"name"` + Ip string `json:"ip" bson:"ip"` + Mac string `json:"mac" bson:"mac"` + Hostname string `json:"hostname" bson:"hostname"` + Description string `json:"description" bson:"description"` + IsMaster bool `json:"is_master" bson:"is_master"` + Status string `json:"status" bson:"status"` + Enabled bool `json:"enabled" bson:"enabled"` + Active bool `json:"active" bson:"active"` + ActiveAt time.Time `json:"active_at" bson:"active_ts"` + CurrentRunners int `json:"current_runners" bson:"current_runners"` + MaxRunners int `json:"max_runners" bson:"max_runners"` } diff --git a/core/models/models/node_v2.go b/core/models/models/node_v2.go deleted file mode 100644 index 6d5a84421..000000000 --- a/core/models/models/node_v2.go +++ /dev/null @@ -1,24 +0,0 @@ -package models - -import ( - "time" -) - -type NodeV2 struct { - any `collection:"nodes"` - BaseModelV2[NodeV2] `bson:",inline"` - Key string `json:"key" bson:"key"` - Name string `json:"name" bson:"name"` - Ip string `json:"ip" bson:"ip"` - Port string `json:"port" bson:"port"` - Mac string `json:"mac" bson:"mac"` - Hostname string `json:"hostname" bson:"hostname"` - Description string `json:"description" bson:"description"` - IsMaster bool `json:"is_master" bson:"is_master"` - Status string `json:"status" bson:"status"` - Enabled bool `json:"enabled" bson:"enabled"` - Active bool `json:"active" bson:"active"` - ActiveAt time.Time `json:"active_at" bson:"active_ts"` - AvailableRunners int `json:"available_runners" bson:"available_runners"` - MaxRunners int `json:"max_runners" bson:"max_runners"` -} diff --git a/core/models/models/notification_alert.go b/core/models/models/notification_alert.go new file mode 100644 index 000000000..65004964e --- /dev/null +++ b/core/models/models/notification_alert.go @@ -0,0 +1,19 @@ +package models + +import "go.mongodb.org/mongo-driver/bson/primitive" + +type NotificationAlert struct { + any `collection:"notification_alerts"` + BaseModel[NotificationAlert] `bson:",inline"` + Name string `json:"name" bson:"name"` + Description string `json:"description" bson:"description"` + Enabled bool `json:"enabled" bson:"enabled"` + HasMetricTarget bool `json:"has_metric_target" bson:"has_metric_target"` + MetricTargetId primitive.ObjectID `json:"metric_target_id,omitempty" bson:"metric_target_id,omitempty"` + MetricName string `json:"metric_name" bson:"metric_name"` + Operator string `json:"operator" bson:"operator"` + LastingSeconds int `json:"lasting_seconds" bson:"lasting_seconds"` + TargetValue float32 `json:"target_value" bson:"target_value"` + Level string `json:"level" bson:"level"` + TemplateKey string `json:"template_key,omitempty" bson:"template_key,omitempty"` +} diff --git a/core/models/models/notification_channel.go b/core/models/models/notification_channel.go new file mode 100644 index 000000000..d8ad1cbc4 --- /dev/null +++ b/core/models/models/notification_channel.go @@ -0,0 +1,18 @@ +package models + +type NotificationChannel struct { + any `collection:"notification_channels"` + BaseModel[NotificationChannel] `bson:",inline"` + Type string `json:"type" bson:"type"` + Name string `json:"name" bson:"name"` + Description string `json:"description" bson:"description"` + Provider string `json:"provider" bson:"provider"` + SMTPServer string `json:"smtp_server,omitempty" bson:"smtp_server,omitempty"` + SMTPPort int `json:"smtp_port,omitempty" bson:"smtp_port,omitempty"` + SMTPUsername string `json:"smtp_username,omitempty" bson:"smtp_username,omitempty"` + SMTPPassword string `json:"smtp_password,omitempty" bson:"smtp_password,omitempty"` + WebhookUrl string `json:"webhook_url,omitempty" bson:"webhook_url,omitempty"` + TelegramBotToken string `json:"telegram_bot_token,omitempty" bson:"telegram_bot_token,omitempty"` + TelegramChatId string `json:"telegram_chat_id,omitempty" bson:"telegram_chat_id,omitempty"` + GoogleOAuth2Json string `json:"google_oauth2_json,omitempty" bson:"google_oauth2_json,omitempty"` +} diff --git a/core/models/models/notification_request.go b/core/models/models/notification_request.go new file mode 100644 index 000000000..480cef854 --- /dev/null +++ b/core/models/models/notification_request.go @@ -0,0 +1,22 @@ +package models + +import "go.mongodb.org/mongo-driver/bson/primitive" + +type NotificationRequest struct { + any `collection:"notification_requests"` + BaseModel[NotificationRequest] `bson:",inline"` + Status string `json:"status" bson:"status"` + Error string `json:"error,omitempty" bson:"error,omitempty"` + Title string `json:"title" bson:"title"` + Content string `json:"content" bson:"content"` + SenderEmail string `json:"sender_email,omitempty" bson:"sender_email,omitempty"` + SenderName string `json:"sender_name,omitempty" bson:"sender_name,omitempty"` + MailTo []string `json:"mail_to,omitempty" bson:"mail_to,omitempty"` + MailCc []string `json:"mail_cc,omitempty" bson:"mail_cc,omitempty"` + MailBcc []string `json:"mail_bcc,omitempty" bson:"mail_bcc,omitempty"` + SettingId primitive.ObjectID `json:"setting_id" bson:"setting_id"` + ChannelId primitive.ObjectID `json:"channel_id" bson:"channel_id"` + Setting *NotificationSetting `json:"setting,omitempty" bson:"-"` + Channel *NotificationChannel `json:"channel,omitempty" bson:"-"` + Test bool `json:"test,omitempty" bson:"test,omitempty"` +} diff --git a/core/models/models/notification_setting.go b/core/models/models/notification_setting.go new file mode 100644 index 000000000..80826bec2 --- /dev/null +++ b/core/models/models/notification_setting.go @@ -0,0 +1,34 @@ +package models + +import "go.mongodb.org/mongo-driver/bson/primitive" + +type NotificationSetting struct { + any `collection:"notification_settings"` + BaseModel[NotificationSetting] `bson:",inline"` + Name string `json:"name" bson:"name"` + Description string `json:"description" bson:"description"` + Enabled bool `json:"enabled" bson:"enabled"` + + Title string `json:"title,omitempty" bson:"title,omitempty"` + Template string `json:"template" bson:"template"` + TemplateMode string `json:"template_mode" bson:"template_mode"` + TemplateMarkdown string `json:"template_markdown,omitempty" bson:"template_markdown,omitempty"` + TemplateRichText string `json:"template_rich_text,omitempty" bson:"template_rich_text,omitempty"` + TemplateRichTextJson string `json:"template_rich_text_json,omitempty" bson:"template_rich_text_json,omitempty"` + TemplateTheme string `json:"template_theme,omitempty" bson:"template_theme,omitempty"` + + TaskTrigger string `json:"task_trigger" bson:"task_trigger"` + Trigger string `json:"trigger" bson:"trigger"` + + SenderEmail string `json:"sender_email,omitempty" bson:"sender_email,omitempty"` + UseCustomSenderEmail bool `json:"use_custom_sender_email,omitempty" bson:"use_custom_sender_email,omitempty"` + SenderName string `json:"sender_name,omitempty" bson:"sender_name,omitempty"` + MailTo []string `json:"mail_to,omitempty" bson:"mail_to,omitempty"` + MailCc []string `json:"mail_cc,omitempty" bson:"mail_cc,omitempty"` + MailBcc []string `json:"mail_bcc,omitempty" bson:"mail_bcc,omitempty"` + + ChannelIds []primitive.ObjectID `json:"channel_ids,omitempty" bson:"channel_ids,omitempty"` + Channels []NotificationChannel `json:"channels,omitempty" bson:"-"` + + AlertId primitive.ObjectID `json:"alert_id,omitempty" bson:"alert_id,omitempty"` +} diff --git a/core/models/models/notification_setting_v2.go b/core/models/models/notification_setting_v2.go deleted file mode 100644 index b07a01970..000000000 --- a/core/models/models/notification_setting_v2.go +++ /dev/null @@ -1,31 +0,0 @@ -package models - -type NotificationSettingV2 struct { - any `collection:"notification_settings"` - BaseModelV2[NotificationSettingV2] `bson:",inline"` - Type string `json:"type" bson:"type"` - Name string `json:"name" bson:"name"` - Description string `json:"description" bson:"description"` - Enabled bool `json:"enabled" bson:"enabled"` - Global bool `json:"global" bson:"global"` - Title string `json:"title,omitempty" bson:"title,omitempty"` - Template string `json:"template,omitempty" bson:"template,omitempty"` - TaskTrigger string `json:"task_trigger" bson:"task_trigger"` - Mail NotificationSettingMail `json:"mail,omitempty" bson:"mail,omitempty"` - Mobile NotificationSettingMobile `json:"mobile,omitempty" bson:"mobile,omitempty"` -} - -type NotificationSettingMail struct { - Server string `json:"server" bson:"server"` - Port string `json:"port,omitempty" bson:"port,omitempty"` - User string `json:"user,omitempty" bson:"user,omitempty"` - Password string `json:"password,omitempty" bson:"password,omitempty"` - SenderEmail string `json:"sender_email,omitempty" bson:"sender_email,omitempty"` - SenderIdentity string `json:"sender_identity,omitempty" bson:"sender_identity,omitempty"` - To string `json:"to,omitempty" bson:"to,omitempty"` - Cc string `json:"cc,omitempty" bson:"cc,omitempty"` -} - -type NotificationSettingMobile struct { - Webhook string `json:"webhook" bson:"webhook"` -} diff --git a/core/models/models/password.go b/core/models/models/password.go deleted file mode 100644 index 4be613ef1..000000000 --- a/core/models/models/password.go +++ /dev/null @@ -1,29 +0,0 @@ -package models - -import ( - "github.com/crawlab-team/crawlab/core/interfaces" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -type Password struct { - Id primitive.ObjectID `json:"_id" bson:"_id"` - Password string `json:"password" bson:"p"` -} - -func (p *Password) GetId() (id primitive.ObjectID) { - return p.Id -} - -func (p *Password) SetId(id primitive.ObjectID) { - p.Id = id -} - -type PasswordList []Password - -func (l *PasswordList) GetModels() (res []interfaces.Model) { - for i := range *l { - d := (*l)[i] - res = append(res, &d) - } - return res -} diff --git a/core/models/models/permission.go b/core/models/models/permission.go index 51c42d370..90882835c 100644 --- a/core/models/models/permission.go +++ b/core/models/models/permission.go @@ -1,91 +1,14 @@ package models -import ( - "github.com/crawlab-team/crawlab/core/interfaces" - "go.mongodb.org/mongo-driver/bson/primitive" -) +import "go.mongodb.org/mongo-driver/bson/primitive" type Permission struct { - Id primitive.ObjectID `json:"_id" bson:"_id"` - Key string `json:"key" bson:"key"` - Name string `json:"name" bson:"name"` - Description string `json:"description" bson:"description"` - Type string `json:"type" bson:"type"` - Target []string `json:"target" bson:"target"` - Allow []string `json:"allow" bson:"allow"` - Deny []string `json:"deny" bson:"deny"` -} - -func (p *Permission) GetId() (id primitive.ObjectID) { - return p.Id -} - -func (p *Permission) SetId(id primitive.ObjectID) { - p.Id = id -} - -func (p *Permission) GetKey() (key string) { - return p.Key -} - -func (p *Permission) SetKey(key string) { - p.Key = key -} - -func (p *Permission) GetName() (name string) { - return p.Name -} - -func (p *Permission) SetName(name string) { - p.Name = name -} - -func (p *Permission) GetDescription() (description string) { - return p.Description -} - -func (p *Permission) SetDescription(description string) { - p.Description = description -} - -func (p *Permission) GetType() (t string) { - return p.Type -} - -func (p *Permission) SetType(t string) { - p.Type = t -} - -func (p *Permission) GetTarget() (target []string) { - return p.Target -} - -func (p *Permission) SetTarget(target []string) { - p.Target = target -} - -func (p *Permission) GetAllow() (include []string) { - return p.Allow -} - -func (p *Permission) SetAllow(include []string) { - p.Allow = include -} - -func (p *Permission) GetDeny() (exclude []string) { - return p.Deny -} - -func (p *Permission) SetDeny(exclude []string) { - p.Deny = exclude -} - -type PermissionList []Permission - -func (l *PermissionList) GetModels() (res []interfaces.Model) { - for i := range *l { - d := (*l)[i] - res = append(res, &d) - } - return res + any `collection:"permissions"` + BaseModel[Permission] `bson:",inline"` + Key string `json:"key" bson:"key"` + Name string `json:"name" bson:"name"` + Description string `json:"description" bson:"description"` + RoleId primitive.ObjectID `json:"role_id" bson:"role_id"` + Type string `json:"type" bson:"type"` + Routes []string `json:"routes" bson:"routes"` } diff --git a/core/models/models/permission_v2.go b/core/models/models/permission_v2.go deleted file mode 100644 index 77c830a38..000000000 --- a/core/models/models/permission_v2.go +++ /dev/null @@ -1,13 +0,0 @@ -package models - -type PermissionV2 struct { - any `collection:"permissions"` - BaseModelV2[PermissionV2] `bson:",inline"` - Key string `json:"key" bson:"key"` - Name string `json:"name" bson:"name"` - Description string `json:"description" bson:"description"` - Type string `json:"type" bson:"type"` - Target []string `json:"target" bson:"target"` - Allow []string `json:"allow" bson:"allow"` - Deny []string `json:"deny" bson:"deny"` -} diff --git a/core/models/models/project.go b/core/models/models/project.go index 59b01212f..e487ef7be 100644 --- a/core/models/models/project.go +++ b/core/models/models/project.go @@ -1,47 +1,9 @@ package models -import ( - "github.com/crawlab-team/crawlab/core/interfaces" - "go.mongodb.org/mongo-driver/bson/primitive" -) - type Project struct { - Id primitive.ObjectID `json:"_id" bson:"_id"` - Name string `json:"name" bson:"name"` - Description string `json:"description" bson:"description"` - Spiders int `json:"spiders" bson:"-"` -} - -func (p *Project) GetId() (id primitive.ObjectID) { - return p.Id -} - -func (p *Project) SetId(id primitive.ObjectID) { - p.Id = id -} - -func (p *Project) GetName() (name string) { - return p.Name -} - -func (p *Project) SetName(name string) { - p.Name = name -} - -func (p *Project) GetDescription() (description string) { - return p.Description -} - -func (p *Project) SetDescription(description string) { - p.Description = description -} - -type ProjectList []Project - -func (l *ProjectList) GetModels() (res []interfaces.Model) { - for i := range *l { - d := (*l)[i] - res = append(res, &d) - } - return res + any `collection:"projects"` + BaseModel[Project] `bson:",inline"` + Name string `json:"name" bson:"name"` + Description string `json:"description" bson:"description"` + Spiders int `json:"spiders" bson:"-"` } diff --git a/core/models/models/project_v2.go b/core/models/models/project_v2.go deleted file mode 100644 index ee07e705a..000000000 --- a/core/models/models/project_v2.go +++ /dev/null @@ -1,9 +0,0 @@ -package models - -type ProjectV2 struct { - any `collection:"projects"` - BaseModelV2[ProjectV2] `bson:",inline"` - Name string `json:"name" bson:"name"` - Description string `json:"description" bson:"description"` - Spiders int `json:"spiders" bson:"-"` -} diff --git a/core/models/models/result.go b/core/models/models/result.go deleted file mode 100644 index 9c2957b04..000000000 --- a/core/models/models/result.go +++ /dev/null @@ -1,60 +0,0 @@ -package models - -import ( - "github.com/crawlab-team/crawlab/core/constants" - "github.com/crawlab-team/crawlab/core/interfaces" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -type Result bson.M - -func (r *Result) GetId() (id primitive.ObjectID) { - res, ok := r.Value()["_id"] - if ok { - id, ok = res.(primitive.ObjectID) - if ok { - return id - } - } - return id -} - -func (r *Result) SetId(id primitive.ObjectID) { - (*r)["_id"] = id -} - -func (r *Result) Value() map[string]interface{} { - return *r -} - -func (r *Result) SetValue(key string, value interface{}) { - (*r)[key] = value -} - -func (r *Result) GetValue(key string) (value interface{}) { - return (*r)[key] -} - -func (r *Result) GetTaskId() (id primitive.ObjectID) { - res := r.GetValue(constants.TaskKey) - if res == nil { - return id - } - id, _ = res.(primitive.ObjectID) - return id -} - -func (r *Result) SetTaskId(id primitive.ObjectID) { - r.SetValue(constants.TaskKey, id) -} - -type ResultList []Result - -func (l *ResultList) GetModels() (res []interfaces.Model) { - for i := range *l { - d := (*l)[i] - res = append(res, &d) - } - return res -} diff --git a/core/models/models/role.go b/core/models/models/role.go index 3a73d8f67..2a132f69f 100644 --- a/core/models/models/role.go +++ b/core/models/models/role.go @@ -1,55 +1,12 @@ package models -import ( - "github.com/crawlab-team/crawlab/core/interfaces" - "go.mongodb.org/mongo-driver/bson/primitive" -) - type Role struct { - Id primitive.ObjectID `json:"_id" bson:"_id"` - Key string `json:"key" bson:"key"` - Name string `json:"name" bson:"name"` - Description string `json:"description" bson:"description"` -} - -func (r *Role) GetId() (id primitive.ObjectID) { - return r.Id -} - -func (r *Role) SetId(id primitive.ObjectID) { - r.Id = id -} - -func (r *Role) GetKey() (key string) { - return r.Key -} - -func (r *Role) SetKey(key string) { - r.Key = key -} - -func (r *Role) GetName() (name string) { - return r.Name -} - -func (r *Role) SetName(name string) { - r.Name = name -} - -func (r *Role) GetDescription() (description string) { - return r.Description -} - -func (r *Role) SetDescription(description string) { - r.Description = description -} - -type RoleList []Role - -func (l *RoleList) GetModels() (res []interfaces.Model) { - for i := range *l { - d := (*l)[i] - res = append(res, &d) - } - return res + any `collection:"roles"` + BaseModel[Role] `bson:",inline"` + Name string `json:"name" bson:"name"` + Description string `json:"description" bson:"description"` + Routes []string `json:"routes" bson:"routes"` + RootAdmin bool `json:"-" bson:"root_admin,omitempty"` + IsRootAdmin bool `json:"root_admin" bson:"-"` + Users int `json:"users" bson:"-"` } diff --git a/core/models/models/role_permission.go b/core/models/models/role_permission.go index d603c1437..bab01418f 100644 --- a/core/models/models/role_permission.go +++ b/core/models/models/role_permission.go @@ -1,30 +1,12 @@ package models import ( - "github.com/crawlab-team/crawlab/core/interfaces" "go.mongodb.org/mongo-driver/bson/primitive" ) type RolePermission struct { - Id primitive.ObjectID `json:"_id" bson:"_id"` - RoleId primitive.ObjectID `json:"role_id" bson:"role_id"` - PermissionId primitive.ObjectID `json:"permission_id" bson:"permission_id"` -} - -func (ur *RolePermission) GetId() (id primitive.ObjectID) { - return ur.Id -} - -func (ur *RolePermission) SetId(id primitive.ObjectID) { - ur.Id = id -} - -type RolePermissionList []RolePermission - -func (l *RolePermissionList) GetModels() (res []interfaces.Model) { - for i := range *l { - d := (*l)[i] - res = append(res, &d) - } - return res + any `collection:"role_permissions"` + BaseModel[RolePermission] `bson:",inline"` + RoleId primitive.ObjectID `json:"role_id" bson:"role_id"` + PermissionId primitive.ObjectID `json:"permission_id" bson:"permission_id"` } diff --git a/core/models/models/role_permission_v2.go b/core/models/models/role_permission_v2.go deleted file mode 100644 index 386fa0529..000000000 --- a/core/models/models/role_permission_v2.go +++ /dev/null @@ -1,12 +0,0 @@ -package models - -import ( - "go.mongodb.org/mongo-driver/bson/primitive" -) - -type RolePermissionV2 struct { - any `collection:"role_permissions"` - BaseModelV2[RolePermissionV2] `bson:",inline"` - RoleId primitive.ObjectID `json:"role_id" bson:"role_id"` - PermissionId primitive.ObjectID `json:"permission_id" bson:"permission_id"` -} diff --git a/core/models/models/role_v2.go b/core/models/models/role_v2.go deleted file mode 100644 index de287a61f..000000000 --- a/core/models/models/role_v2.go +++ /dev/null @@ -1,9 +0,0 @@ -package models - -type RoleV2 struct { - any `collection:"roles"` - BaseModelV2[RoleV2] `bson:",inline"` - Key string `json:"key" bson:"key"` - Name string `json:"name" bson:"name"` - Description string `json:"description" bson:"description"` -} diff --git a/core/models/models/schedule.go b/core/models/models/schedule.go index 96c455b35..22df35dad 100644 --- a/core/models/models/schedule.go +++ b/core/models/models/schedule.go @@ -1,113 +1,22 @@ package models import ( - "github.com/crawlab-team/crawlab/core/interfaces" "github.com/robfig/cron/v3" "go.mongodb.org/mongo-driver/bson/primitive" ) type Schedule struct { - Id primitive.ObjectID `json:"_id" bson:"_id"` - Name string `json:"name" bson:"name"` - Description string `json:"description" bson:"description"` - SpiderId primitive.ObjectID `json:"spider_id" bson:"spider_id"` - Cron string `json:"cron" bson:"cron"` - EntryId cron.EntryID `json:"entry_id" bson:"entry_id"` - Cmd string `json:"cmd" bson:"cmd"` - Param string `json:"param" bson:"param"` - Mode string `json:"mode" bson:"mode"` - NodeIds []primitive.ObjectID `json:"node_ids" bson:"node_ids"` - Priority int `json:"priority" bson:"priority"` - Enabled bool `json:"enabled" bson:"enabled"` - UserId primitive.ObjectID `json:"user_id" bson:"user_id"` -} - -func (s *Schedule) GetId() (id primitive.ObjectID) { - return s.Id -} - -func (s *Schedule) SetId(id primitive.ObjectID) { - s.Id = id -} - -func (s *Schedule) GetEnabled() (enabled bool) { - return s.Enabled -} - -func (s *Schedule) SetEnabled(enabled bool) { - s.Enabled = enabled -} - -func (s *Schedule) GetEntryId() (id cron.EntryID) { - return s.EntryId -} - -func (s *Schedule) SetEntryId(id cron.EntryID) { - s.EntryId = id -} - -func (s *Schedule) GetCron() (c string) { - return s.Cron -} - -func (s *Schedule) SetCron(c string) { - s.Cron = c -} - -func (s *Schedule) GetSpiderId() (id primitive.ObjectID) { - return s.SpiderId -} - -func (s *Schedule) SetSpiderId(id primitive.ObjectID) { - s.SpiderId = id -} - -func (s *Schedule) GetMode() (mode string) { - return s.Mode -} - -func (s *Schedule) SetMode(mode string) { - s.Mode = mode -} - -func (s *Schedule) GetNodeIds() (ids []primitive.ObjectID) { - return s.NodeIds -} - -func (s *Schedule) SetNodeIds(ids []primitive.ObjectID) { - s.NodeIds = ids -} - -func (s *Schedule) GetCmd() (cmd string) { - return s.Cmd -} - -func (s *Schedule) SetCmd(cmd string) { - s.Cmd = cmd -} - -func (s *Schedule) GetParam() (param string) { - return s.Param -} - -func (s *Schedule) SetParam(param string) { - s.Param = param -} - -func (s *Schedule) GetPriority() (p int) { - return s.Priority -} - -func (s *Schedule) SetPriority(p int) { - s.Priority = p -} - -type ScheduleList []Schedule - -func (l *ScheduleList) GetModels() (res []interfaces.Model) { - for i := range *l { - d := (*l)[i] - res = append(res, &d) - } - return res + any `collection:"schedules"` + BaseModel[Schedule] `bson:",inline"` + Name string `json:"name" bson:"name"` + Description string `json:"description" bson:"description"` + SpiderId primitive.ObjectID `json:"spider_id" bson:"spider_id"` + Cron string `json:"cron" bson:"cron"` + EntryId cron.EntryID `json:"entry_id" bson:"entry_id"` + Cmd string `json:"cmd" bson:"cmd"` + Param string `json:"param" bson:"param"` + Mode string `json:"mode" bson:"mode"` + NodeIds []primitive.ObjectID `json:"node_ids" bson:"node_ids"` + Priority int `json:"priority" bson:"priority"` + Enabled bool `json:"enabled" bson:"enabled"` } diff --git a/core/models/models/schedule_v2.go b/core/models/models/schedule_v2.go deleted file mode 100644 index a52f1b920..000000000 --- a/core/models/models/schedule_v2.go +++ /dev/null @@ -1,23 +0,0 @@ -package models - -import ( - "github.com/robfig/cron/v3" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -type ScheduleV2 struct { - any `collection:"schedules"` - BaseModelV2[ScheduleV2] `bson:",inline"` - Name string `json:"name" bson:"name"` - Description string `json:"description" bson:"description"` - SpiderId primitive.ObjectID `json:"spider_id" bson:"spider_id"` - Cron string `json:"cron" bson:"cron"` - EntryId cron.EntryID `json:"entry_id" bson:"entry_id"` - Cmd string `json:"cmd" bson:"cmd"` - Param string `json:"param" bson:"param"` - Mode string `json:"mode" bson:"mode"` - NodeIds []primitive.ObjectID `json:"node_ids" bson:"node_ids"` - Priority int `json:"priority" bson:"priority"` - Enabled bool `json:"enabled" bson:"enabled"` - UserId primitive.ObjectID `json:"user_id" bson:"user_id"` -} diff --git a/core/models/models/setting.go b/core/models/models/setting.go index b0fc9d88f..6f61f1c33 100644 --- a/core/models/models/setting.go +++ b/core/models/models/setting.go @@ -1,31 +1,12 @@ package models import ( - "github.com/crawlab-team/crawlab/core/interfaces" "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" ) type Setting struct { - Id primitive.ObjectID `json:"_id" bson:"_id"` - Key string `json:"key" bson:"key"` - Value bson.M `json:"value" bson:"value"` -} - -func (s *Setting) GetId() (id primitive.ObjectID) { - return s.Id -} - -func (s *Setting) SetId(id primitive.ObjectID) { - s.Id = id -} - -type SettingList []Setting - -func (l *SettingList) GetModels() (res []interfaces.Model) { - for i := range *l { - d := (*l)[i] - res = append(res, &d) - } - return res + any `collection:"settings"` + BaseModel[Setting] `bson:",inline"` + Key string `json:"key" bson:"key"` + Value bson.M `json:"value" bson:"value"` } diff --git a/core/models/models/setting_v2.go b/core/models/models/setting_v2.go deleted file mode 100644 index 86481607e..000000000 --- a/core/models/models/setting_v2.go +++ /dev/null @@ -1,12 +0,0 @@ -package models - -import ( - "go.mongodb.org/mongo-driver/bson" -) - -type SettingV2 struct { - any `collection:"settings"` - BaseModelV2[SettingV2] `bson:",inline"` - Key string `json:"key" bson:"key"` - Value bson.M `json:"value" bson:"value"` -} diff --git a/core/models/models/spider.go b/core/models/models/spider.go index 49b89418f..ddc0be162 100644 --- a/core/models/models/spider.go +++ b/core/models/models/spider.go @@ -1,137 +1,41 @@ package models import ( - "github.com/crawlab-team/crawlab/core/interfaces" "go.mongodb.org/mongo-driver/bson/primitive" ) -type Env struct { - Name string `json:"name" bson:"name"` - Value string `json:"value" bson:"value"` -} - type Spider struct { - Id primitive.ObjectID `json:"_id" bson:"_id"` // spider id - Name string `json:"name" bson:"name"` // spider name - Type string `json:"type" bson:"type"` // spider type - ColId primitive.ObjectID `json:"col_id" bson:"col_id"` // data collection id - ColName string `json:"col_name,omitempty" bson:"-"` // data collection name - DataSourceId primitive.ObjectID `json:"data_source_id" bson:"data_source_id"` // data source id - DataSource *DataSource `json:"data_source,omitempty" bson:"-"` // data source - Description string `json:"description" bson:"description"` // description - ProjectId primitive.ObjectID `json:"project_id" bson:"project_id"` // Project.Id - Mode string `json:"mode" bson:"mode"` // default Task.Mode - NodeIds []primitive.ObjectID `json:"node_ids" bson:"node_ids"` // default Task.NodeIds - Stat *SpiderStat `json:"stat,omitempty" bson:"-"` + any `collection:"spiders"` + BaseModel[Spider] `bson:",inline"` + Name string `json:"name" bson:"name"` // spider name + ColId primitive.ObjectID `json:"col_id" bson:"col_id"` // data collection id (deprecated) # TODO: remove this field in the future + ColName string `json:"col_name,omitempty" bson:"col_name"` // data collection name + DbName string `json:"db_name,omitempty" bson:"db_name"` // database name + DataSourceId primitive.ObjectID `json:"data_source_id" bson:"data_source_id"` // data source id + DataSource *Database `json:"data_source,omitempty" bson:"-"` // data source + Description string `json:"description" bson:"description"` // description + ProjectId primitive.ObjectID `json:"project_id" bson:"project_id"` // Project.Id + Mode string `json:"mode" bson:"mode"` // default Task.Mode + NodeIds []primitive.ObjectID `json:"node_ids" bson:"node_ids"` // default Task.NodeIds + GitId primitive.ObjectID `json:"git_id" bson:"git_id"` // related Git.Id + GitRootPath string `json:"git_root_path" bson:"git_root_path"` + Git *Git `json:"git,omitempty" bson:"-"` + Template string `json:"template,omitempty" bson:"template,omitempty"` // spider template + TemplateParams *SpiderTemplateParams `json:"template_params,omitempty" bson:"template_params,omitempty"` + + // stats + Stat *SpiderStat `json:"stat,omitempty" bson:"-"` // execution Cmd string `json:"cmd" bson:"cmd"` // execute command Param string `json:"param" bson:"param"` // default task param Priority int `json:"priority" bson:"priority"` AutoInstall bool `json:"auto_install" bson:"auto_install"` - - // settings - IncrementalSync bool `json:"incremental_sync" bson:"incremental_sync"` // whether to incrementally sync files -} - -func (s *Spider) GetId() (id primitive.ObjectID) { - return s.Id -} - -func (s *Spider) SetId(id primitive.ObjectID) { - s.Id = id -} - -func (s *Spider) GetName() (name string) { - return s.Name -} - -func (s *Spider) SetName(name string) { - s.Name = name -} - -func (s *Spider) GetDescription() (description string) { - return s.Description -} - -func (s *Spider) SetDescription(description string) { - s.Description = description -} - -func (s *Spider) GetType() (ty string) { - return s.Type -} - -func (s *Spider) GetMode() (mode string) { - return s.Mode -} - -func (s *Spider) SetMode(mode string) { - s.Mode = mode -} - -func (s *Spider) GetNodeIds() (ids []primitive.ObjectID) { - return s.NodeIds -} - -func (s *Spider) SetNodeIds(ids []primitive.ObjectID) { - s.NodeIds = ids } -func (s *Spider) GetCmd() (cmd string) { - return s.Cmd -} - -func (s *Spider) SetCmd(cmd string) { - s.Cmd = cmd -} - -func (s *Spider) GetParam() (param string) { - return s.Param -} - -func (s *Spider) SetParam(param string) { - s.Param = param -} - -func (s *Spider) GetPriority() (p int) { - return s.Priority -} - -func (s *Spider) SetPriority(p int) { - s.Priority = p -} - -func (s *Spider) GetColId() (id primitive.ObjectID) { - return s.ColId -} - -func (s *Spider) SetColId(id primitive.ObjectID) { - s.ColId = id -} - -func (s *Spider) GetIncrementalSync() (incrementalSync bool) { - return s.IncrementalSync -} - -func (s *Spider) SetIncrementalSync(incrementalSync bool) { - s.IncrementalSync = incrementalSync -} - -func (s *Spider) GetAutoInstall() (autoInstall bool) { - return s.AutoInstall -} - -func (s *Spider) SetAutoInstall(autoInstall bool) { - s.AutoInstall = autoInstall -} - -type SpiderList []Spider - -func (l *SpiderList) GetModels() (res []interfaces.Model) { - for i := range *l { - d := (*l)[i] - res = append(res, &d) - } - return res +type SpiderTemplateParams struct { + ProjectName string `json:"project_name,omitempty" bson:"project_name,omitempty"` + SpiderName string `json:"spider_name,omitempty" bson:"spider_name,omitempty"` + StartUrls string `json:"start_urls,omitempty" bson:"start_urls,omitempty"` + AllowedDomains string `json:"allowed_domains,omitempty" bson:"allowed_domains,omitempty"` } diff --git a/core/models/models/spider_stat.go b/core/models/models/spider_stat.go index 09047b90f..a3c9f6311 100644 --- a/core/models/models/spider_stat.go +++ b/core/models/models/spider_stat.go @@ -1,12 +1,12 @@ package models import ( - "github.com/crawlab-team/crawlab/core/interfaces" "go.mongodb.org/mongo-driver/bson/primitive" ) type SpiderStat struct { - Id primitive.ObjectID `json:"_id" bson:"_id"` + any `collection:"spider_stats"` + BaseModel[SpiderStat] `bson:",inline"` LastTaskId primitive.ObjectID `json:"last_task_id" bson:"last_task_id,omitempty"` LastTask *Task `json:"last_task,omitempty" bson:"-"` Tasks int `json:"tasks" bson:"tasks"` @@ -18,21 +18,3 @@ type SpiderStat struct { AverageRuntimeDuration int64 `json:"average_runtime_duration" bson:"-"` // in second AverageTotalDuration int64 `json:"average_total_duration" bson:"-"` // in second } - -func (s *SpiderStat) GetId() (id primitive.ObjectID) { - return s.Id -} - -func (s *SpiderStat) SetId(id primitive.ObjectID) { - s.Id = id -} - -type SpiderStatList []SpiderStat - -func (l *SpiderStatList) GetModels() (res []interfaces.Model) { - for i := range *l { - d := (*l)[i] - res = append(res, &d) - } - return res -} diff --git a/core/models/models/spider_stat_v2.go b/core/models/models/spider_stat_v2.go deleted file mode 100644 index ea01c0cc6..000000000 --- a/core/models/models/spider_stat_v2.go +++ /dev/null @@ -1,20 +0,0 @@ -package models - -import ( - "go.mongodb.org/mongo-driver/bson/primitive" -) - -type SpiderStatV2 struct { - any `collection:"spider_stats"` - BaseModelV2[SpiderStatV2] `bson:",inline"` - LastTaskId primitive.ObjectID `json:"last_task_id" bson:"last_task_id,omitempty"` - LastTask *TaskV2 `json:"last_task,omitempty" bson:"-"` - Tasks int `json:"tasks" bson:"tasks"` - Results int `json:"results" bson:"results"` - WaitDuration int64 `json:"wait_duration" bson:"wait_duration,omitempty"` // in second - RuntimeDuration int64 `json:"runtime_duration" bson:"runtime_duration,omitempty"` // in second - TotalDuration int64 `json:"total_duration" bson:"total_duration,omitempty"` // in second - AverageWaitDuration int64 `json:"average_wait_duration" bson:"-"` // in second - AverageRuntimeDuration int64 `json:"average_runtime_duration" bson:"-"` // in second - AverageTotalDuration int64 `json:"average_total_duration" bson:"-"` // in second -} diff --git a/core/models/models/spider_v2.go b/core/models/models/spider_v2.go deleted file mode 100644 index ac3bf3007..000000000 --- a/core/models/models/spider_v2.go +++ /dev/null @@ -1,32 +0,0 @@ -package models - -import ( - "go.mongodb.org/mongo-driver/bson/primitive" -) - -type SpiderV2 struct { - any `collection:"spiders"` - BaseModelV2[SpiderV2] `bson:",inline"` - Name string `json:"name" bson:"name"` // spider name - Type string `json:"type" bson:"type"` // spider type - ColId primitive.ObjectID `json:"col_id" bson:"col_id"` // data collection id - ColName string `json:"col_name,omitempty" bson:"-"` // data collection name - DataSourceId primitive.ObjectID `json:"data_source_id" bson:"data_source_id"` // data source id - DataSource *DataSourceV2 `json:"data_source,omitempty" bson:"-"` // data source - Description string `json:"description" bson:"description"` // description - ProjectId primitive.ObjectID `json:"project_id" bson:"project_id"` // Project.Id - Mode string `json:"mode" bson:"mode"` // default Task.Mode - NodeIds []primitive.ObjectID `json:"node_ids" bson:"node_ids"` // default Task.NodeIds - GitId primitive.ObjectID `json:"git_id" bson:"git_id"` // related Git.Id - GitRootPath string `json:"git_root_path" bson:"git_root_path"` - Git *GitV2 `json:"git,omitempty" bson:"-"` - - // stats - Stat *SpiderStatV2 `json:"stat,omitempty" bson:"-"` - - // execution - Cmd string `json:"cmd" bson:"cmd"` // execute command - Param string `json:"param" bson:"param"` // default task param - Priority int `json:"priority" bson:"priority"` - AutoInstall bool `json:"auto_install" bson:"auto_install"` -} diff --git a/core/models/models/tag.go b/core/models/models/tag.go deleted file mode 100644 index 86708240c..000000000 --- a/core/models/models/tag.go +++ /dev/null @@ -1,44 +0,0 @@ -package models - -import ( - "github.com/crawlab-team/crawlab/core/interfaces" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -type Tag struct { - Id primitive.ObjectID `json:"_id" bson:"_id"` - Name string `json:"name" bson:"name"` - Color string `json:"color" bson:"color"` - Description string `json:"description" bson:"description"` - Col string `json:"col" bson:"col"` -} - -func (t *Tag) GetId() (id primitive.ObjectID) { - return t.Id -} - -func (t *Tag) SetId(id primitive.ObjectID) { - t.Id = id -} - -func (t *Tag) GetName() (res string) { - return t.Name -} - -func (t *Tag) GetColor() (res string) { - return t.Color -} - -func (t *Tag) SetCol(col string) { - t.Col = col -} - -type TagList []Tag - -func (l *TagList) GetModels() (res []interfaces.Model) { - for i := range *l { - d := (*l)[i] - res = append(res, &d) - } - return res -} diff --git a/core/models/models/task.go b/core/models/models/task.go index 6dcc926af..69b9c78b3 100644 --- a/core/models/models/task.go +++ b/core/models/models/task.go @@ -1,118 +1,27 @@ package models import ( - "github.com/crawlab-team/crawlab/core/interfaces" "go.mongodb.org/mongo-driver/bson/primitive" - "time" ) type Task struct { - Id primitive.ObjectID `json:"_id" bson:"_id"` - SpiderId primitive.ObjectID `json:"spider_id" bson:"spider_id"` - Status string `json:"status" bson:"status"` - NodeId primitive.ObjectID `json:"node_id" bson:"node_id"` - Cmd string `json:"cmd" bson:"cmd"` - Param string `json:"param" bson:"param"` - Error string `json:"error" bson:"error"` - Pid int `json:"pid" bson:"pid"` - ScheduleId primitive.ObjectID `json:"schedule_id" bson:"schedule_id"` // Schedule.Id - Type string `json:"type" bson:"type"` - Mode string `json:"mode" bson:"mode"` // running mode of Task - NodeIds []primitive.ObjectID `json:"node_ids" bson:"node_ids"` // list of Node.Id - ParentId primitive.ObjectID `json:"parent_id" bson:"parent_id"` // parent Task.Id if it'Spider a sub-task - Priority int `json:"priority" bson:"priority"` - Stat *TaskStat `json:"stat,omitempty" bson:"-"` - HasSub bool `json:"has_sub" json:"has_sub"` // whether to have sub-tasks - SubTasks []Task `json:"sub_tasks,omitempty" bson:"-"` - Spider *Spider `json:"spider,omitempty" bson:"-"` - UserId primitive.ObjectID `json:"-" bson:"-"` - CreateTs time.Time `json:"create_ts" bson:"create_ts"` -} - -func (t *Task) GetId() (id primitive.ObjectID) { - return t.Id -} - -func (t *Task) SetId(id primitive.ObjectID) { - t.Id = id -} - -func (t *Task) GetNodeId() (id primitive.ObjectID) { - return t.NodeId -} - -func (t *Task) SetNodeId(id primitive.ObjectID) { - t.NodeId = id -} - -func (t *Task) GetNodeIds() (ids []primitive.ObjectID) { - return t.NodeIds -} - -func (t *Task) GetStatus() (status string) { - return t.Status -} - -func (t *Task) SetStatus(status string) { - t.Status = status -} - -func (t *Task) GetError() (error string) { - return t.Error -} - -func (t *Task) SetError(error string) { - t.Error = error -} - -func (t *Task) GetPid() (pid int) { - return t.Pid -} - -func (t *Task) SetPid(pid int) { - t.Pid = pid -} - -func (t *Task) GetSpiderId() (id primitive.ObjectID) { - return t.SpiderId -} - -func (t *Task) GetType() (ty string) { - return t.Type -} - -func (t *Task) GetCmd() (cmd string) { - return t.Cmd -} - -func (t *Task) GetParam() (param string) { - return t.Param -} - -func (t *Task) GetPriority() (p int) { - return t.Priority -} - -func (t *Task) GetUserId() (id primitive.ObjectID) { - return t.UserId -} - -func (t *Task) SetUserId(id primitive.ObjectID) { - t.UserId = id -} - -type TaskList []Task - -func (l *TaskList) GetModels() (res []interfaces.Model) { - for i := range *l { - d := (*l)[i] - res = append(res, &d) - } - return res -} - -type TaskDailyItem struct { - Date string `json:"date" bson:"_id"` - TaskCount int `json:"task_count" bson:"task_count"` - AvgRuntimeDuration float64 `json:"avg_runtime_duration" bson:"avg_runtime_duration"` + any `collection:"tasks"` + BaseModel[Task] `bson:",inline"` + SpiderId primitive.ObjectID `json:"spider_id" bson:"spider_id"` + Status string `json:"status" bson:"status"` + NodeId primitive.ObjectID `json:"node_id" bson:"node_id"` + Cmd string `json:"cmd" bson:"cmd"` + Param string `json:"param" bson:"param"` + Error string `json:"error" bson:"error"` + Pid int `json:"pid" bson:"pid"` + ScheduleId primitive.ObjectID `json:"schedule_id" bson:"schedule_id"` + Type string `json:"type" bson:"type"` + Mode string `json:"mode" bson:"mode"` + Priority int `json:"priority" bson:"priority"` + NodeIds []primitive.ObjectID `json:"node_ids,omitempty" bson:"-"` + Stat *TaskStat `json:"stat,omitempty" bson:"-"` + Spider *Spider `json:"spider,omitempty" bson:"-"` + Schedule *Schedule `json:"schedule,omitempty" bson:"-"` + Node *Node `json:"node,omitempty" bson:"-"` + UserId primitive.ObjectID `json:"-" bson:"-"` } diff --git a/core/models/models/task_queue_item.go b/core/models/models/task_queue_item.go deleted file mode 100644 index f2f08d49c..000000000 --- a/core/models/models/task_queue_item.go +++ /dev/null @@ -1,30 +0,0 @@ -package models - -import ( - "github.com/crawlab-team/crawlab/core/interfaces" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -type TaskQueueItem struct { - Id primitive.ObjectID `json:"_id" bson:"_id"` - Priority int `json:"p" bson:"p"` - NodeId primitive.ObjectID `json:"nid,omitempty" bson:"nid,omitempty"` -} - -func (t *TaskQueueItem) GetId() (id primitive.ObjectID) { - return t.Id -} - -func (t *TaskQueueItem) SetId(id primitive.ObjectID) { - t.Id = id -} - -type TaskQueueItemList []TaskQueueItem - -func (l *TaskQueueItemList) GetModels() (res []interfaces.Model) { - for i := range *l { - d := (*l)[i] - res = append(res, &d) - } - return res -} diff --git a/core/models/models/task_queue_item_v2.go b/core/models/models/task_queue_item_v2.go deleted file mode 100644 index f222aef3e..000000000 --- a/core/models/models/task_queue_item_v2.go +++ /dev/null @@ -1,12 +0,0 @@ -package models - -import ( - "go.mongodb.org/mongo-driver/bson/primitive" -) - -type TaskQueueItemV2 struct { - any `collection:"task_queue"` - BaseModelV2[TaskQueueItemV2] `bson:",inline"` - Priority int `json:"p" bson:"p"` - NodeId primitive.ObjectID `json:"nid,omitempty" bson:"nid,omitempty"` -} diff --git a/core/models/models/task_stat.go b/core/models/models/task_stat.go index d8f509058..900e8c24b 100644 --- a/core/models/models/task_stat.go +++ b/core/models/models/task_stat.go @@ -1,101 +1,16 @@ package models import ( - "github.com/crawlab-team/crawlab/core/interfaces" - "go.mongodb.org/mongo-driver/bson/primitive" "time" ) type TaskStat struct { - Id primitive.ObjectID `json:"_id" bson:"_id"` - CreateTs time.Time `json:"create_ts" bson:"create_ts,omitempty"` - StartTs time.Time `json:"start_ts" bson:"start_ts,omitempty"` - EndTs time.Time `json:"end_ts" bson:"end_ts,omitempty"` - WaitDuration int64 `json:"wait_duration" bson:"wait_duration,omitempty"` // in millisecond - RuntimeDuration int64 `json:"runtime_duration" bson:"runtime_duration,omitempty"` // in millisecond - TotalDuration int64 `json:"total_duration" bson:"total_duration,omitempty"` // in millisecond - ResultCount int64 `json:"result_count" bson:"result_count"` - ErrorLogCount int64 `json:"error_log_count" bson:"error_log_count"` -} - -func (s *TaskStat) GetId() (id primitive.ObjectID) { - return s.Id -} - -func (s *TaskStat) SetId(id primitive.ObjectID) { - s.Id = id -} - -func (s *TaskStat) GetCreateTs() (ts time.Time) { - return s.CreateTs -} - -func (s *TaskStat) SetCreateTs(ts time.Time) { - s.CreateTs = ts -} - -func (s *TaskStat) GetStartTs() (ts time.Time) { - return s.StartTs -} - -func (s *TaskStat) SetStartTs(ts time.Time) { - s.StartTs = ts -} - -func (s *TaskStat) GetEndTs() (ts time.Time) { - return s.EndTs -} - -func (s *TaskStat) SetEndTs(ts time.Time) { - s.EndTs = ts -} - -func (s *TaskStat) GetWaitDuration() (d int64) { - return s.WaitDuration -} - -func (s *TaskStat) SetWaitDuration(d int64) { - s.WaitDuration = d -} - -func (s *TaskStat) GetRuntimeDuration() (d int64) { - return s.RuntimeDuration -} - -func (s *TaskStat) SetRuntimeDuration(d int64) { - s.RuntimeDuration = d -} - -func (s *TaskStat) GetTotalDuration() (d int64) { - return s.WaitDuration + s.RuntimeDuration -} - -func (s *TaskStat) SetTotalDuration(d int64) { - s.TotalDuration = d -} - -func (s *TaskStat) GetResultCount() (c int64) { - return s.ResultCount -} - -func (s *TaskStat) SetResultCount(c int64) { - s.ResultCount = c -} - -func (s *TaskStat) GetErrorLogCount() (c int64) { - return s.ErrorLogCount -} - -func (s *TaskStat) SetErrorLogCount(c int64) { - s.ErrorLogCount = c -} - -type TaskStatList []TaskStat - -func (l *TaskStatList) GetModels() (res []interfaces.Model) { - for i := range *l { - d := (*l)[i] - res = append(res, &d) - } - return res + any `collection:"task_stats"` + BaseModel[TaskStat] `bson:",inline"` + StartTs time.Time `json:"start_ts" bson:"start_ts,omitempty"` + EndTs time.Time `json:"end_ts" bson:"end_ts,omitempty"` + WaitDuration int64 `json:"wait_duration" bson:"wait_duration,omitempty"` // in millisecond + RuntimeDuration int64 `json:"runtime_duration" bson:"runtime_duration,omitempty"` // in millisecond + TotalDuration int64 `json:"total_duration" bson:"total_duration,omitempty"` // in millisecond + ResultCount int64 `json:"result_count" bson:"result_count"` } diff --git a/core/models/models/task_stat_v2.go b/core/models/models/task_stat_v2.go deleted file mode 100644 index 5456946d4..000000000 --- a/core/models/models/task_stat_v2.go +++ /dev/null @@ -1,18 +0,0 @@ -package models - -import ( - "time" -) - -type TaskStatV2 struct { - any `collection:"task_stats"` - BaseModelV2[TaskStatV2] `bson:",inline"` - CreateTs time.Time `json:"create_ts" bson:"create_ts,omitempty"` - StartTs time.Time `json:"start_ts" bson:"start_ts,omitempty"` - EndTs time.Time `json:"end_ts" bson:"end_ts,omitempty"` - WaitDuration int64 `json:"wait_duration" bson:"wait_duration,omitempty"` // in millisecond - RuntimeDuration int64 `json:"runtime_duration" bson:"runtime_duration,omitempty"` // in millisecond - TotalDuration int64 `json:"total_duration" bson:"total_duration,omitempty"` // in millisecond - ResultCount int64 `json:"result_count" bson:"result_count"` - ErrorLogCount int64 `json:"error_log_count" bson:"error_log_count"` -} diff --git a/core/models/models/task_v2.go b/core/models/models/task_v2.go deleted file mode 100644 index 3473b6dba..000000000 --- a/core/models/models/task_v2.go +++ /dev/null @@ -1,30 +0,0 @@ -package models - -import ( - "go.mongodb.org/mongo-driver/bson/primitive" - "time" -) - -type TaskV2 struct { - any `collection:"tasks"` - BaseModelV2[TaskV2] `bson:",inline"` - SpiderId primitive.ObjectID `json:"spider_id" bson:"spider_id"` - Status string `json:"status" bson:"status"` - NodeId primitive.ObjectID `json:"node_id" bson:"node_id"` - Cmd string `json:"cmd" bson:"cmd"` - Param string `json:"param" bson:"param"` - Error string `json:"error" bson:"error"` - Pid int `json:"pid" bson:"pid"` - ScheduleId primitive.ObjectID `json:"schedule_id" bson:"schedule_id"` - Type string `json:"type" bson:"type"` - Mode string `json:"mode" bson:"mode"` - NodeIds []primitive.ObjectID `json:"node_ids" bson:"node_ids"` - ParentId primitive.ObjectID `json:"parent_id" bson:"parent_id"` - Priority int `json:"priority" bson:"priority"` - Stat *TaskStatV2 `json:"stat,omitempty" bson:"-"` - HasSub bool `json:"has_sub" json:"has_sub"` - SubTasks []TaskV2 `json:"sub_tasks,omitempty" bson:"-"` - Spider *SpiderV2 `json:"spider,omitempty" bson:"-"` - UserId primitive.ObjectID `json:"-" bson:"-"` - CreateTs time.Time `json:"create_ts" bson:"create_ts"` -} diff --git a/core/models/models/test.go b/core/models/models/test.go index 67027d19c..bd31b8334 100644 --- a/core/models/models/test.go +++ b/core/models/models/test.go @@ -1,7 +1,7 @@ package models type TestModel struct { - any `collection:"testmodels"` - BaseModelV2[TestModel] `bson:",inline"` - Name string `json:"name" bson:"name"` + any `collection:"testmodels"` + BaseModel[TestModel] `bson:",inline"` + Name string `json:"name" bson:"name"` } diff --git a/core/models/models/token.go b/core/models/models/token.go index 7a957e3e9..5657777c0 100644 --- a/core/models/models/token.go +++ b/core/models/models/token.go @@ -1,30 +1,8 @@ package models -import ( - "github.com/crawlab-team/crawlab/core/interfaces" - "go.mongodb.org/mongo-driver/bson/primitive" -) - type Token struct { - Id primitive.ObjectID `json:"_id" bson:"_id"` - Name string `json:"name" bson:"name"` - Token string `json:"token" bson:"token"` -} - -func (t *Token) GetId() (id primitive.ObjectID) { - return t.Id -} - -func (t *Token) SetId(id primitive.ObjectID) { - t.Id = id -} - -type TokenList []Token - -func (l *TokenList) GetModels() (res []interfaces.Model) { - for i := range *l { - d := (*l)[i] - res = append(res, &d) - } - return res + any `collection:"tokens"` + BaseModel[Token] `bson:",inline"` + Name string `json:"name" bson:"name"` + Token string `json:"token" bson:"token"` } diff --git a/core/models/models/token_v2.go b/core/models/models/token_v2.go deleted file mode 100644 index c792c9ee4..000000000 --- a/core/models/models/token_v2.go +++ /dev/null @@ -1,8 +0,0 @@ -package models - -type TokenV2 struct { - any `collection:"tokens"` - BaseModelV2[TokenV2] `bson:",inline"` - Name string `json:"name" bson:"name"` - Token string `json:"token" bson:"token"` -} diff --git a/core/models/models/user.go b/core/models/models/user.go index c03bf388c..c96bcf6e9 100644 --- a/core/models/models/user.go +++ b/core/models/models/user.go @@ -1,59 +1,18 @@ package models -import ( - "github.com/crawlab-team/crawlab/core/interfaces" - "go.mongodb.org/mongo-driver/bson/primitive" -) +import "go.mongodb.org/mongo-driver/bson/primitive" type User struct { - Id primitive.ObjectID `json:"_id" bson:"_id"` - Username string `json:"username" bson:"username"` - Password string `json:"password,omitempty" bson:"-"` - Role string `json:"role" bson:"role"` - Email string `json:"email" bson:"email"` - //Setting UserSetting `json:"setting" bson:"setting"` -} - -func (u *User) GetId() (id primitive.ObjectID) { - return u.Id -} - -func (u *User) SetId(id primitive.ObjectID) { - u.Id = id -} - -func (u *User) GetUsername() (name string) { - return u.Username -} - -func (u *User) GetPassword() (p string) { - return u.Password -} - -func (u *User) GetRole() (r string) { - return u.Role -} - -func (u *User) GetEmail() (email string) { - return u.Email -} - -//type UserSetting struct { -// NotificationTrigger string `json:"notification_trigger" bson:"notification_trigger"` -// DingTalkRobotWebhook string `json:"ding_talk_robot_webhook" bson:"ding_talk_robot_webhook"` -// WechatRobotWebhook string `json:"wechat_robot_webhook" bson:"wechat_robot_webhook"` -// EnabledNotifications []string `json:"enabled_notifications" bson:"enabled_notifications"` -// ErrorRegexPattern string `json:"error_regex_pattern" bson:"error_regex_pattern"` -// MaxErrorLog int `json:"max_error_log" bson:"max_error_log"` -// LogExpireDuration int64 `json:"log_expire_duration" bson:"log_expire_duration"` -//} - -type UserList []User - -func (l *UserList) GetModels() (res []interfaces.Model) { - for i := range *l { - d := (*l)[i] - res = append(res, &d) - } - return res + any `collection:"users"` + BaseModel[User] `bson:",inline"` + Username string `json:"username" bson:"username"` + Password string `json:"-" bson:"password"` + Role string `json:"role" bson:"role"` + RoleId primitive.ObjectID `json:"role_id" bson:"role_id"` + FirstName string `json:"first_name" bson:"first_name"` + LastName string `json:"last_name" bson:"last_name"` + Email string `json:"email" bson:"email"` + RootAdmin bool `json:"root_admin,omitempty" bson:"root_admin"` + RootAdminRole bool `json:"root_admin_role,omitempty" bson:"-"` + Routes []string `json:"routes,omitempty" bson:"-"` } diff --git a/core/models/models/user_role.go b/core/models/models/user_role.go index a706bec62..ca54f5201 100644 --- a/core/models/models/user_role.go +++ b/core/models/models/user_role.go @@ -1,30 +1,12 @@ package models import ( - "github.com/crawlab-team/crawlab/core/interfaces" "go.mongodb.org/mongo-driver/bson/primitive" ) type UserRole struct { - Id primitive.ObjectID `json:"_id" bson:"_id"` - RoleId primitive.ObjectID `json:"role_id" bson:"role_id"` - UserId primitive.ObjectID `json:"user_id" bson:"user_id"` -} - -func (ur *UserRole) GetId() (id primitive.ObjectID) { - return ur.Id -} - -func (ur *UserRole) SetId(id primitive.ObjectID) { - ur.Id = id -} - -type UserRoleList []UserRole - -func (l *UserRoleList) GetModels() (res []interfaces.Model) { - for i := range *l { - d := (*l)[i] - res = append(res, &d) - } - return res + any `collection:"user_roles"` + BaseModel[UserRole] `bson:",inline"` + RoleId primitive.ObjectID `json:"role_id" bson:"role_id"` + UserId primitive.ObjectID `json:"user_id" bson:"user_id"` } diff --git a/core/models/models/user_role_v2.go b/core/models/models/user_role_v2.go deleted file mode 100644 index aa0ac34a0..000000000 --- a/core/models/models/user_role_v2.go +++ /dev/null @@ -1,12 +0,0 @@ -package models - -import ( - "go.mongodb.org/mongo-driver/bson/primitive" -) - -type UserRoleV2 struct { - any `collection:"user_roles"` - BaseModelV2[UserRoleV2] `bson:",inline"` - RoleId primitive.ObjectID `json:"role_id" bson:"role_id"` - UserId primitive.ObjectID `json:"user_id" bson:"user_id"` -} diff --git a/core/models/models/user_v2.go b/core/models/models/user_v2.go deleted file mode 100644 index acfbe2b64..000000000 --- a/core/models/models/user_v2.go +++ /dev/null @@ -1,10 +0,0 @@ -package models - -type UserV2 struct { - any `collection:"users"` - BaseModelV2[UserV2] `bson:",inline"` - Username string `json:"username" bson:"username"` - Password string `json:"-,omitempty" bson:"password"` - Role string `json:"role" bson:"role"` - Email string `json:"email" bson:"email"` -} diff --git a/core/models/models/utils_binder_legacy.go b/core/models/models/utils_binder_legacy.go deleted file mode 100644 index 0c46d791b..000000000 --- a/core/models/models/utils_binder_legacy.go +++ /dev/null @@ -1,96 +0,0 @@ -package models - -//func AssignFields(d interface{}, fieldIds ...interfaces.ModelId) (res interface{}, err error) { -// return assignFields(d, fieldIds...) -//} -// -//func AssignListFields(list interface{}, fieldIds ...interfaces.ModelId) (res arraylist.List, err error) { -// return assignListFields(list, fieldIds...) -//} -// -//func AssignListFieldsAsPtr(list interface{}, fieldIds ...interfaces.ModelId) (res arraylist.List, err error) { -// return assignListFieldsAsPtr(list, fieldIds...) -//} -// -//func assignFields(d interface{}, fieldIds ...interfaces.ModelId) (res interface{}, err error) { -// doc, ok := d.(interfaces.Model) -// if !ok { -// return nil, errors.ErrorModelInvalidType -// } -// if len(fieldIds) == 0 { -// return doc, nil -// } -// for _, fid := range fieldIds { -// switch fid { -// case interfaces.ModelIdTag: -// // convert interface -// d, ok := doc.(interfaces.ModelWithTags) -// if !ok { -// return nil, errors.ErrorModelInvalidType -// } -// -// // attempt to get artifact -// a, err := doc.GetArtifact() -// if err != nil { -// return nil, err -// } -// -// // skip if no artifact found -// if a == nil { -// return d, nil -// } -// -// // assign tags -// tags, err := a.GetTags() -// if err != nil { -// return nil, err -// } -// d.SetTags(tags) -// -// return d, nil -// } -// } -// return doc, nil -//} -// -//func _assignListFields(asPtr bool, list interface{}, fieldIds ...interfaces.ModelId) (res arraylist.List, err error) { -// vList := reflect.ValueOf(list) -// if vList.Kind() != reflect.Array && -// vList.Kind() != reflect.Slice { -// return res, errors.ErrorModelInvalidType -// } -// for i := 0; i < vList.Len(); i++ { -// vItem := vList.Index(i) -// var item interface{} -// if vItem.CanAddr() { -// item = vItem.Addr().Interface() -// } else { -// item = vItem.Interface() -// } -// doc, ok := item.(interfaces.Model) -// if !ok { -// return res, errors.ErrorModelInvalidType -// } -// ptr, err := assignFields(doc, fieldIds...) -// if err != nil { -// return res, err -// } -// v := reflect.ValueOf(ptr) -// if !asPtr { -// // non-pointer item -// res.Add(v.Elem().Interface()) -// } else { -// // pointer item -// res.Add(v.Interface()) -// } -// } -// return res, nil -//} -// -//func assignListFields(list interface{}, fieldIds ...interfaces.ModelId) (res arraylist.List, err error) { -// return _assignListFields(false, list, fieldIds...) -//} -// -//func assignListFieldsAsPtr(list interface{}, fieldIds ...interfaces.ModelId) (res arraylist.List, err error) { -// return _assignListFields(true, list, fieldIds...) -//} diff --git a/core/models/models/utils_col.go b/core/models/models/utils_col.go deleted file mode 100644 index b59717963..000000000 --- a/core/models/models/utils_col.go +++ /dev/null @@ -1,10 +0,0 @@ -package models - -import ( - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/utils/binders" -) - -func GetModelColName(id interfaces.ModelId) (colName string) { - return binders.NewColNameBinder(id).MustBindString() -} diff --git a/core/models/models/utils_model_map.go b/core/models/models/utils_model_map.go deleted file mode 100644 index f03ce11e7..000000000 --- a/core/models/models/utils_model_map.go +++ /dev/null @@ -1,95 +0,0 @@ -package models - -type ModelMap struct { - Artifact Artifact - Tag Tag - Node Node - Project Project - Spider Spider - Task Task - Job Job - Schedule Schedule - User User - Setting Setting - Token Token - Variable Variable - TaskQueueItem TaskQueueItem - TaskStat TaskStat - SpiderStat SpiderStat - DataSource DataSource - DataCollection DataCollection - Result Result - Password Password - ExtraValue ExtraValue - Git Git - Role Role - UserRole UserRole - Permission Permission - RolePermission RolePermission - Environment Environment - DependencySetting DependencySetting -} - -type ModelListMap struct { - Artifacts ArtifactList - Tags TagList - Nodes NodeList - Projects ProjectList - Spiders SpiderList - Tasks TaskList - Jobs JobList - Schedules ScheduleList - Users UserList - Settings SettingList - Tokens TokenList - Variables VariableList - TaskQueueItems TaskQueueItemList - TaskStats TaskStatList - SpiderStats SpiderStatList - DataSources DataSourceList - DataCollections DataCollectionList - Results ResultList - Passwords PasswordList - ExtraValues ExtraValueList - Gits GitList - Roles RoleList - UserRoles UserRoleList - PermissionList PermissionList - RolePermissionList RolePermissionList - Environments EnvironmentList - DependencySettings DependencySettingList -} - -func NewModelMap() (m *ModelMap) { - return &ModelMap{} -} - -func NewModelListMap() (m *ModelListMap) { - return &ModelListMap{ - Artifacts: ArtifactList{}, - Tags: TagList{}, - Nodes: NodeList{}, - Projects: ProjectList{}, - Spiders: SpiderList{}, - Tasks: TaskList{}, - Jobs: JobList{}, - Schedules: ScheduleList{}, - Users: UserList{}, - Settings: SettingList{}, - Tokens: TokenList{}, - Variables: VariableList{}, - TaskQueueItems: TaskQueueItemList{}, - TaskStats: TaskStatList{}, - SpiderStats: SpiderStatList{}, - DataSources: DataSourceList{}, - DataCollections: DataCollectionList{}, - Results: ResultList{}, - Passwords: PasswordList{}, - ExtraValues: ExtraValueList{}, - Gits: GitList{}, - Roles: RoleList{}, - PermissionList: PermissionList{}, - RolePermissionList: RolePermissionList{}, - Environments: EnvironmentList{}, - } -} diff --git a/core/models/models/utils_tag.go b/core/models/models/utils_tag.go deleted file mode 100644 index c5c070c3e..000000000 --- a/core/models/models/utils_tag.go +++ /dev/null @@ -1,34 +0,0 @@ -package models - -import ( - "github.com/apex/log" - "github.com/crawlab-team/crawlab/core/errors" - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/trace" -) - -func convertInterfacesToTags(tags []interfaces.Tag) (res []Tag) { - if tags == nil { - return nil - } - for _, t := range tags { - tag, ok := t.(*Tag) - if !ok { - log.Warnf("%v: cannot convert tag", trace.TraceError(errors.ErrorModelInvalidType)) - return nil - } - if tag == nil { - log.Warnf("%v: cannot convert tag", trace.TraceError(errors.ErrorModelInvalidType)) - return nil - } - res = append(res, *tag) - } - return res -} - -func convertTagsToInterfaces(tags []Tag) (res []interfaces.Tag) { - for _, t := range tags { - res = append(res, &t) - } - return res -} diff --git a/core/models/models/variable.go b/core/models/models/variable.go deleted file mode 100644 index 08e0d15d0..000000000 --- a/core/models/models/variable.go +++ /dev/null @@ -1,31 +0,0 @@ -package models - -import ( - "github.com/crawlab-team/crawlab/core/interfaces" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -type Variable struct { - Id primitive.ObjectID `json:"_id" bson:"_id"` - Key string `json:"key" bson:"key"` - Value string `json:"value" bson:"value"` - Remark string `json:"remark" bson:"remark"` -} - -func (v *Variable) GetId() (id primitive.ObjectID) { - return v.Id -} - -func (v *Variable) SetId(id primitive.ObjectID) { - v.Id = id -} - -type VariableList []Variable - -func (l *VariableList) GetModels() (res []interfaces.Model) { - for i := range *l { - d := (*l)[i] - res = append(res, &d) - } - return res -} diff --git a/core/models/models/variable_v2.go b/core/models/models/variable_v2.go deleted file mode 100644 index 497888322..000000000 --- a/core/models/models/variable_v2.go +++ /dev/null @@ -1,9 +0,0 @@ -package models - -type VariableV2 struct { - any `collection:"variables"` - BaseModelV2[VariableV2] `bson:",inline"` - Key string `json:"key" bson:"key"` - Value string `json:"value" bson:"value"` - Remark string `json:"remark" bson:"remark"` -} diff --git a/core/models/service/artifact_service.go b/core/models/service/artifact_service.go deleted file mode 100644 index 8155942af..000000000 --- a/core/models/service/artifact_service.go +++ /dev/null @@ -1,40 +0,0 @@ -package service - -import ( - "github.com/crawlab-team/crawlab/core/errors" - "github.com/crawlab-team/crawlab/core/interfaces" - models2 "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/db/mongo" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -func convertTypeArtifact(d interface{}, err error) (res *models2.Artifact, err2 error) { - if err != nil { - return nil, err - } - res, ok := d.(*models2.Artifact) - if !ok { - return nil, errors.ErrorModelInvalidType - } - return res, nil -} - -func (svc *Service) GetArtifactById(id primitive.ObjectID) (res *models2.Artifact, err error) { - d, err := svc.GetBaseService(interfaces.ModelIdArtifact).GetById(id) - return convertTypeArtifact(d, err) -} - -func (svc *Service) GetArtifact(query bson.M, opts *mongo.FindOptions) (res *models2.Artifact, err error) { - d, err := svc.GetBaseService(interfaces.ModelIdArtifact).Get(query, opts) - return convertTypeArtifact(d, err) -} - -func (svc *Service) GetArtifactList(query bson.M, opts *mongo.FindOptions) (res []models2.Artifact, err error) { - l, err := svc.GetBaseService(interfaces.ModelIdArtifact).GetList(query, opts) - for _, doc := range l.GetModels() { - d := doc.(*models2.Artifact) - res = append(res, *d) - } - return res, nil -} diff --git a/core/models/service/base_service.go b/core/models/service/base_service.go index 20d2362a0..dee6e5e2a 100644 --- a/core/models/service/base_service.go +++ b/core/models/service/base_service.go @@ -1,420 +1,353 @@ package service import ( - "encoding/json" - "github.com/apex/log" - "github.com/crawlab-team/crawlab/core/constants" - "github.com/crawlab-team/crawlab/core/errors" + "context" + "fmt" + "github.com/crawlab-team/crawlab/core/mongo" + "reflect" + "sync" + + "go.mongodb.org/mongo-driver/mongo/options" + "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/models/delegate" - models2 "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/core/utils" - "github.com/crawlab-team/crawlab/db/mongo" - "github.com/crawlab-team/crawlab/trace" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" - "reflect" - "strings" - "sync" - "time" ) -type BaseService struct { - id interfaces.ModelId +var ( + instanceMap = make(map[string]any) + onceMap = make(map[string]*sync.Once) + onceColNameMap = make(map[string]*sync.Once) + mu sync.Mutex +) + +type ModelService[T any] struct { col *mongo.Col } -func (svc *BaseService) GetModelId() (id interfaces.ModelId) { - return svc.id +func (svc *ModelService[T]) GetById(id primitive.ObjectID) (model *T, err error) { + var result T + err = svc.col.FindId(id).One(&result) + if err != nil { + return nil, err + } + return &result, nil } -func (svc *BaseService) SetModelId(id interfaces.ModelId) { - svc.id = id +func (svc *ModelService[T]) GetByIdContext(ctx context.Context, id primitive.ObjectID) (model *T, err error) { + var result T + err = svc.col.GetCollection().FindOne(ctx, bson.M{"_id": id}).Decode(&result) + if err != nil { + return nil, err + } + return &result, nil } -func (svc *BaseService) GetCol() (col *mongo.Col) { - return svc.col +func (svc *ModelService[T]) GetOne(query bson.M, options *mongo.FindOptions) (model *T, err error) { + var result T + err = svc.col.Find(query, options).One(&result) + if err != nil { + return nil, err + } + return &result, nil } -func (svc *BaseService) SetCol(col *mongo.Col) { - svc.col = col +func (svc *ModelService[T]) GetOneContext(ctx context.Context, query bson.M, opts *mongo.FindOptions) (model *T, err error) { + var result T + _opts := &options.FindOneOptions{} + if opts != nil { + if opts.Skip != 0 { + skipInt64 := int64(opts.Skip) + _opts.Skip = &skipInt64 + } + if opts.Sort != nil { + _opts.Sort = opts.Sort + } + } + err = svc.col.GetCollection().FindOne(ctx, query, _opts).Decode(&result) + if err != nil { + return nil, err + } + return &result, nil } -func (svc *BaseService) GetById(id primitive.ObjectID) (res interfaces.Model, err error) { - // find result - fr := svc.findId(id) - - // bind - return NewBasicBinder(svc.id, fr).Bind() +func (svc *ModelService[T]) GetMany(query bson.M, options *mongo.FindOptions) (models []T, err error) { + var result []T + err = svc.col.Find(query, options).All(&result) + if err != nil { + return nil, err + } + return result, nil } -func (svc *BaseService) Get(query bson.M, opts *mongo.FindOptions) (res interfaces.Model, err error) { - // find result - fr := svc.find(query, opts) +func (svc *ModelService[T]) GetManyContext(ctx context.Context, query bson.M, opts *mongo.FindOptions) (models []T, err error) { + var result []T + _opts := &options.FindOptions{} + if opts != nil { + if opts.Skip != 0 { + skipInt64 := int64(opts.Skip) + _opts.Skip = &skipInt64 + } + if opts.Limit != 0 { + limitInt64 := int64(opts.Limit) + _opts.Limit = &limitInt64 + } + if opts.Sort != nil { + _opts.Sort = opts.Sort + } + } + cur, err := svc.col.GetCollection().Find(ctx, query, _opts) + if err != nil { + return nil, err + } + defer cur.Close(ctx) + for cur.Next(ctx) { + var model T + if err := cur.Decode(&model); err != nil { + return nil, err + } + result = append(result, model) + } + return result, nil +} - // bind - return NewBasicBinder(svc.id, fr).Bind() +func (svc *ModelService[T]) DeleteById(id primitive.ObjectID) (err error) { + return svc.col.DeleteId(id) } -func (svc *BaseService) GetList(query bson.M, opts *mongo.FindOptions) (l interfaces.List, err error) { - // find result - tic := time.Now() - log.Debugf("baseService.GetMany -> svc.find:start") - log.Debugf("baseService.GetMany -> svc.id: %v", svc.id) - log.Debugf("baseService.GetMany -> svc.col.GetName(): %v", svc.col.GetName()) - log.Debugf("baseService.GetMany -> query: %v", query) - log.Debugf("baseService.GetMany -> opts: %v", opts) - fr := svc.find(query, opts) - log.Debugf("baseService.GetMany -> svc.find:end. elapsed: %d ms", time.Now().Sub(tic).Milliseconds()) +func (svc *ModelService[T]) DeleteByIdContext(ctx context.Context, id primitive.ObjectID) (err error) { + _, err = svc.col.GetCollection().DeleteOne(ctx, bson.M{"_id": id}) + return err +} - // bind - return NewListBinder(svc.id, fr).Bind() +func (svc *ModelService[T]) DeleteOne(query bson.M) (err error) { + _, err = svc.col.GetCollection().DeleteOne(svc.col.GetContext(), query) + return err } -func (svc *BaseService) DeleteById(id primitive.ObjectID, args ...interface{}) (err error) { - return svc.deleteId(id, args...) +func (svc *ModelService[T]) DeleteOneContext(ctx context.Context, query bson.M) (err error) { + _, err = svc.col.GetCollection().DeleteOne(ctx, query) + return err } -func (svc *BaseService) Delete(query bson.M, args ...interface{}) (err error) { - return svc.delete(query) +func (svc *ModelService[T]) DeleteMany(query bson.M) (err error) { + _, err = svc.col.GetCollection().DeleteMany(svc.col.GetContext(), query, nil) + return err } -func (svc *BaseService) DeleteList(query bson.M, args ...interface{}) (err error) { - return svc.deleteList(query) +func (svc *ModelService[T]) DeleteManyContext(ctx context.Context, query bson.M) (err error) { + _, err = svc.col.GetCollection().DeleteMany(ctx, query, nil) + return err } -func (svc *BaseService) ForceDeleteList(query bson.M, args ...interface{}) (err error) { - return svc.forceDeleteList(query) +func (svc *ModelService[T]) UpdateById(id primitive.ObjectID, update bson.M) (err error) { + return svc.col.UpdateId(id, update) } -func (svc *BaseService) UpdateById(id primitive.ObjectID, update bson.M, args ...interface{}) (err error) { - return svc.updateId(id, update) +func (svc *ModelService[T]) UpdateByIdContext(ctx context.Context, id primitive.ObjectID, update bson.M) (err error) { + _, err = svc.col.GetCollection().UpdateOne(ctx, bson.M{"_id": id}, update) + return err } -func (svc *BaseService) Update(query bson.M, update bson.M, fields []string, args ...interface{}) (err error) { - return svc.update(query, update, fields) +func (svc *ModelService[T]) UpdateOne(query bson.M, update bson.M) (err error) { + _, err = svc.col.GetCollection().UpdateOne(svc.col.GetContext(), query, update) + return err } -func (svc *BaseService) UpdateDoc(query bson.M, doc interfaces.Model, fields []string, args ...interface{}) (err error) { - return svc.update(query, doc, fields) +func (svc *ModelService[T]) UpdateOneContext(ctx context.Context, query bson.M, update bson.M) (err error) { + _, err = svc.col.GetCollection().UpdateOne(ctx, query, update) + return err } -func (svc *BaseService) Insert(u interfaces.User, docs ...interface{}) (err error) { - log.Debugf("baseService.Insert -> svc.col.GetName(): %v", svc.col.GetName()) - log.Debugf("baseService.Insert -> docs: %v", docs) - return svc.insert(u, docs...) +func (svc *ModelService[T]) UpdateMany(query bson.M, update bson.M) (err error) { + _, err = svc.col.GetCollection().UpdateMany(svc.col.GetContext(), query, update) + return err } -func (svc *BaseService) Count(query bson.M) (total int, err error) { - return svc.count(query) +func (svc *ModelService[T]) UpdateManyContext(ctx context.Context, query bson.M, update bson.M) (err error) { + _, err = svc.col.GetCollection().UpdateMany(ctx, query, update) + return err } -func (svc *BaseService) findId(id primitive.ObjectID) (fr *mongo.FindResult) { - if svc.col == nil { - return mongo.NewFindResultWithError(constants.ErrMissingCol) - } - return svc.col.FindId(id) +func (svc *ModelService[T]) ReplaceById(id primitive.ObjectID, model T) (err error) { + _, err = svc.col.GetCollection().ReplaceOne(svc.col.GetContext(), bson.M{"_id": id}, model) + return err } -func (svc *BaseService) find(query bson.M, opts *mongo.FindOptions) (fr *mongo.FindResult) { - if svc.col == nil { - return mongo.NewFindResultWithError(constants.ErrMissingCol) - } - return svc.col.Find(query, opts) +func (svc *ModelService[T]) ReplaceByIdContext(ctx context.Context, id primitive.ObjectID, model T) (err error) { + _, err = svc.col.GetCollection().ReplaceOne(ctx, bson.M{"_id": id}, model) + return err } -func (svc *BaseService) deleteId(id primitive.ObjectID, args ...interface{}) (err error) { - if svc.col == nil { - return trace.TraceError(constants.ErrMissingCol) - } - fr := svc.findId(id) - doc, err := NewBasicBinder(svc.id, fr).Bind() - if err != nil { - return err - } - return delegate.NewModelDelegate(doc, svc._getUserFromArgs(args...)).Delete() +func (svc *ModelService[T]) ReplaceOne(query bson.M, model T) (err error) { + _, err = svc.col.GetCollection().ReplaceOne(svc.col.GetContext(), query, model) + return err } -func (svc *BaseService) delete(query bson.M, args ...interface{}) (err error) { - if svc.col == nil { - return trace.TraceError(constants.ErrMissingCol) - } - var doc models2.BaseModel - if err := svc.find(query, nil).One(&doc); err != nil { - return err - } - return svc.deleteId(doc.Id, svc._getUserFromArgs(args...)) +func (svc *ModelService[T]) ReplaceOneContext(ctx context.Context, query bson.M, model T) (err error) { + _, err = svc.col.GetCollection().ReplaceOne(ctx, query, model) + return err } -func (svc *BaseService) deleteList(query bson.M, args ...interface{}) (err error) { - if svc.col == nil { - return trace.TraceError(constants.ErrMissingCol) +func (svc *ModelService[T]) InsertOne(model T) (id primitive.ObjectID, err error) { + m := any(&model).(interfaces.Model) + if m.GetId().IsZero() { + m.SetId(primitive.NewObjectID()) } - fr := svc.find(query, nil) - list, err := NewListBinder(svc.id, fr).Bind() + res, err := svc.col.GetCollection().InsertOne(svc.col.GetContext(), m) if err != nil { - return err - } - for _, doc := range list.GetModels() { - if err := delegate.NewModelDelegate(doc, svc._getUserFromArgs(args...)).Delete(); err != nil { - return err - } + return primitive.NilObjectID, err } - return nil -} - -func (svc *BaseService) forceDeleteList(query bson.M, args ...interface{}) (err error) { - return svc.col.Delete(query) + return res.InsertedID.(primitive.ObjectID), nil } -func (svc *BaseService) count(query bson.M) (total int, err error) { - if svc.col == nil { - return total, trace.TraceError(constants.ErrMissingCol) +func (svc *ModelService[T]) InsertOneContext(ctx context.Context, model T) (id primitive.ObjectID, err error) { + m := any(&model).(interfaces.Model) + if m.GetId().IsZero() { + m.SetId(primitive.NewObjectID()) } - return svc.col.Count(query) -} - -func (svc *BaseService) update(query bson.M, update interface{}, fields []string, args ...interface{}) (err error) { - update, err = svc._getUpdateBsonM(update, fields) + res, err := svc.col.GetCollection().InsertOne(ctx, m) if err != nil { - return err + return primitive.NilObjectID, err } - return svc._update(query, update, svc._getUserFromArgs(args...)) + return res.InsertedID.(primitive.ObjectID), nil } -func (svc *BaseService) updateId(id primitive.ObjectID, update interface{}, args ...interface{}) (err error) { - update, err = svc._getUpdateBsonM(update, nil) +func (svc *ModelService[T]) InsertMany(models []T) (ids []primitive.ObjectID, err error) { + var _models []any + for _, model := range models { + m := any(&model).(interfaces.Model) + if m.GetId().IsZero() { + m.SetId(primitive.NewObjectID()) + } + _models = append(_models, m) + } + res, err := svc.col.GetCollection().InsertMany(svc.col.GetContext(), _models) if err != nil { - return err + return nil, err } - return svc._updateById(id, update, svc._getUserFromArgs(args...)) -} - -func (svc *BaseService) insert(u interfaces.User, docs ...interface{}) (err error) { - // validate col - if svc.col == nil { - return trace.TraceError(constants.ErrMissingCol) + for _, v := range res.InsertedIDs { + ids = append(ids, v.(primitive.ObjectID)) } + return ids, nil +} - // iterate docs - for i, doc := range docs { - switch doc.(type) { - case map[string]interface{}: - // doc type: map[string]interface{}, need to handle _id - d := doc.(map[string]interface{}) - vId, ok := d["_id"] - if !ok { - // _id not exists - d["_id"] = primitive.NewObjectID() - } else { - // _id exists - switch vId.(type) { - case string: - // _id type: string - sId, ok := vId.(string) - if ok { - d["_id"], err = primitive.ObjectIDFromHex(sId) - if err != nil { - return trace.TraceError(err) - } - } - case primitive.ObjectID: - // _id type: primitive.ObjectID - // do nothing - default: - return trace.TraceError(errors.ErrorModelInvalidType) - } - } +func (svc *ModelService[T]) InsertManyContext(ctx context.Context, models []T) (ids []primitive.ObjectID, err error) { + var _models []any + for _, model := range models { + m := any(&model).(interfaces.Model) + if m.GetId().IsZero() { + m.SetId(primitive.NewObjectID()) } - docs[i] = doc + _models = append(_models, m) } - - // perform insert - ids, err := svc.col.InsertMany(docs) + res, err := svc.col.GetCollection().InsertMany(ctx, _models) if err != nil { - return err + return nil, err } - - // upsert artifacts - query := bson.M{ - "_id": bson.M{ - "$in": ids, - }, - } - fr := svc.col.Find(query, nil) - list, err := NewListBinder(svc.id, fr).Bind() - for _, doc := range list.GetModels() { - // upsert artifact when performing model delegate save - if err := delegate.NewModelDelegate(doc, u).Save(); err != nil { - return err - } + for _, v := range res.InsertedIDs { + ids = append(ids, v.(primitive.ObjectID)) } - - return nil + return ids, nil } - -func (svc *BaseService) _update(query bson.M, update interface{}, args ...interface{}) (err error) { - // ids of query - var ids []primitive.ObjectID - list, err := NewListBinder(svc.id, svc.find(query, nil)).Bind() +func (svc *ModelService[T]) UpsertOne(query bson.M, model T) (id primitive.ObjectID, err error) { + opts := options.ReplaceOptions{} + opts.SetUpsert(true) + result, err := svc.col.GetCollection().ReplaceOne(svc.col.GetContext(), query, model, &opts) if err != nil { - return err - } - for _, doc := range list.GetModels() { - ids = append(ids, doc.GetId()) + return primitive.NilObjectID, err } - // update model objects - if err := svc.col.Update(query, update); err != nil { - return err + if result.UpsertedID != nil { + // If document was inserted + return result.UpsertedID.(primitive.ObjectID), nil } - // update artifacts - u := svc._getUserFromArgs(args...) - return mongo.GetMongoCol(interfaces.ModelColNameArtifact).Update(query, svc._getUpdateArtifactUpdate(u)) + // If document was updated, get its ID from the model + m := any(&model).(interfaces.Model) + return m.GetId(), nil } -func (svc *BaseService) _updateById(id primitive.ObjectID, update interface{}, args ...interface{}) (err error) { - // update model object - if err := svc.col.UpdateId(id, update); err != nil { - return err +func (svc *ModelService[T]) UpsertOneContext(ctx context.Context, query bson.M, model T) (id primitive.ObjectID, err error) { + opts := options.ReplaceOptions{} + opts.SetUpsert(true) + result, err := svc.col.GetCollection().ReplaceOne(ctx, query, model, &opts) + if err != nil { + return primitive.NilObjectID, err } - // update artifact - u := svc._getUserFromArgs(args...) - return mongo.GetMongoCol(interfaces.ModelColNameArtifact).UpdateId(id, svc._getUpdateArtifactUpdate(u)) -} - -func (svc *BaseService) _getUpdateBsonM(update interface{}, fields []string) (res bson.M, err error) { - switch update.(type) { - case interfaces.Model: - // convert to bson.M - var updateBsonM bson.M - bytes, err := json.Marshal(&update) - if err != nil { - return nil, err - } - if err := json.Unmarshal(bytes, &updateBsonM); err != nil { - return nil, err - } - return svc._getUpdateBsonM(updateBsonM, fields) - - case bson.M: - // convert to bson.M - updateBsonM := update.(bson.M) - - // filter fields if not nil - if fields != nil { - // fields map - fieldsMap := map[string]bool{} - for _, f := range fields { - fieldsMap[f] = true - } - - // remove unselected fields - for k := range updateBsonM { - if _, ok := fieldsMap[k]; !ok { - delete(updateBsonM, k) - } - } - } - - // normalize update bson.M - if !svc._containsDollar(updateBsonM) { - if _, ok := updateBsonM["$set"]; !ok { - updateBsonM = bson.M{ - "$set": updateBsonM, - } - } - } - - return updateBsonM, nil + if result.UpsertedID != nil { + // If document was inserted + return result.UpsertedID.(primitive.ObjectID), nil } - v := reflect.ValueOf(update) - switch v.Kind() { - case reflect.Struct: - if v.CanAddr() { - update = v.Addr().Interface() - return svc._getUpdateBsonM(update, fields) - } - return nil, errors.ErrorModelInvalidType - default: - return nil, errors.ErrorModelInvalidType + // If document was updated, get its ID from the query or model + if id, ok := query["_id"].(primitive.ObjectID); ok { + return id, nil } + m := any(&model).(interfaces.Model) + return m.GetId(), nil } -func (svc *BaseService) _getUpdateArtifactUpdate(u interfaces.User) (res bson.M) { - var uid primitive.ObjectID - if u != nil { - uid = u.GetId() - } - return bson.M{ - "$set": bson.M{ - "_sys.update_ts": time.Now(), - "_sys.update_uid": uid, - }, - } +func (svc *ModelService[T]) Count(query bson.M) (total int, err error) { + return svc.col.Count(query) } -func (svc *BaseService) _getUserFromArgs(args ...interface{}) (u interfaces.User) { - return utils.GetUserFromArgs(args...) +func (svc *ModelService[T]) GetCol() (col *mongo.Col) { + return svc.col } -func (svc *BaseService) _containsDollar(updateBsonM bson.M) (ok bool) { - for k := range updateBsonM { - if strings.HasPrefix(k, "$") { - return true - } - } - return false +func GetCollectionNameByInstance(v any) string { + t := reflect.TypeOf(v) + field := t.Field(0) + return field.Tag.Get("collection") } -func NewBaseService(id interfaces.ModelId, opts ...BaseServiceOption) (svc2 interfaces.ModelBaseService) { - // service - svc := &BaseService{ - id: id, - } +func getCollectionName[T any]() string { + var instance T + t := reflect.TypeOf(instance) + field := t.Field(0) + return field.Tag.Get("collection") +} - // apply options - for _, opt := range opts { - opt(svc) - } +// NewModelService return singleton instance of ModelService +func NewModelService[T any]() *ModelService[T] { + typeName := fmt.Sprintf("%T", *new(T)) + + mu.Lock() + defer mu.Unlock() - // get collection name if not set - if svc.GetCol() == nil { - colName := models2.GetModelColName(id) - svc.SetCol(mongo.GetMongoCol(colName)) + if _, exists := onceMap[typeName]; !exists { + onceMap[typeName] = &sync.Once{} } - return svc -} + var instance *ModelService[T] -var store = sync.Map{} + onceMap[typeName].Do(func() { + collectionName := getCollectionName[T]() + collection := mongo.GetMongoCol(collectionName) + instance = &ModelService[T]{col: collection} + instanceMap[typeName] = instance + }) -func GetBaseService(id interfaces.ModelId) (svc interfaces.ModelBaseService) { - res, ok := store.Load(id) - if ok { - svc, ok = res.(interfaces.ModelBaseService) - if ok { - return svc - } - } - svc = NewBaseService(id) - store.Store(id, svc) - return svc + return instanceMap[typeName].(*ModelService[T]) } -func GetBaseServiceByColName(id interfaces.ModelId, colName string) (svc interfaces.ModelBaseService) { - res, ok := store.Load(colName) - if ok { - svc, ok = res.(interfaces.ModelBaseService) - if ok { - return svc - } +func NewModelServiceWithColName[T any](colName string) *ModelService[T] { + mu.Lock() + defer mu.Unlock() + + if _, exists := onceColNameMap[colName]; !exists { + onceColNameMap[colName] = new(sync.Once) } - col := mongo.GetMongoCol(colName) - svc = NewBaseService(id, WithBaseServiceCol(col)) - store.Store(colName, svc) - return svc + + var instance *ModelService[T] + + onceColNameMap[colName].Do(func() { + collection := mongo.GetMongoCol(colName) + instance = &ModelService[T]{col: collection} + instanceMap[colName] = instance + }) + + return instanceMap[colName].(*ModelService[T]) } diff --git a/core/models/service/base_service_test.go b/core/models/service/base_service_test.go new file mode 100644 index 000000000..b97433700 --- /dev/null +++ b/core/models/service/base_service_test.go @@ -0,0 +1,232 @@ +package service_test + +import ( + "context" + "github.com/apex/log" + "github.com/crawlab-team/crawlab/core/models/models" + "github.com/crawlab-team/crawlab/core/mongo" + "testing" + "time" + + "github.com/crawlab-team/crawlab/core/models/service" + "github.com/spf13/viper" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "go.mongodb.org/mongo-driver/bson" + "go.mongodb.org/mongo-driver/bson/primitive" +) + +type TestModel struct { + Id primitive.ObjectID `bson:"_id,omitempty" collection:"testmodels"` + models.BaseModel[TestModel] `bson:",inline"` + Name string `bson:"name"` +} + +func setupTestDB() { + viper.Set("mongo.db", "testdb") +} + +func teardownTestDB() { + db := mongo.GetMongoDb("testdb") + err := db.Drop(context.Background()) + if err != nil { + log.Errorf("dropping test db error: %v", err) + return + } + log.Infof("dropped test db") +} + +func TestModelService(t *testing.T) { + setupTestDB() + defer teardownTestDB() + + t.Run("GetById", func(t *testing.T) { + svc := service.NewModelService[TestModel]() + testModel := TestModel{Name: "GetById Test"} + + id, err := svc.InsertOne(testModel) + require.Nil(t, err) + time.Sleep(100 * time.Millisecond) + + result, err := svc.GetById(id) + require.Nil(t, err) + assert.Equal(t, testModel.Name, result.Name) + }) + + t.Run("GetOne", func(t *testing.T) { + svc := service.NewModelService[TestModel]() + testModel := TestModel{Name: "GetOne Test"} + + _, err := svc.InsertOne(testModel) + require.Nil(t, err) + time.Sleep(100 * time.Millisecond) + + result, err := svc.GetOne(bson.M{"name": "GetOne Test"}, nil) + require.Nil(t, err) + assert.Equal(t, testModel.Name, result.Name) + }) + + t.Run("GetMany", func(t *testing.T) { + svc := service.NewModelService[TestModel]() + testModels := []TestModel{ + {Name: "GetMany Test 1"}, + {Name: "GetMany Test 2"}, + } + + _, err := svc.InsertMany(testModels) + require.Nil(t, err) + time.Sleep(100 * time.Millisecond) + + results, err := svc.GetMany(bson.M{"name": bson.M{"$regex": "^GetMany Test"}}, nil) + require.Nil(t, err) + assert.Equal(t, 2, len(results)) + }) + + t.Run("InsertOne", func(t *testing.T) { + svc := service.NewModelService[TestModel]() + testModel := TestModel{Name: "InsertOne Test"} + + id, err := svc.InsertOne(testModel) + require.Nil(t, err) + assert.NotEqual(t, primitive.NilObjectID, id) + }) + + t.Run("InsertMany", func(t *testing.T) { + svc := service.NewModelService[TestModel]() + testModels := []TestModel{ + {Name: "InsertMany Test 1"}, + {Name: "InsertMany Test 2"}, + } + + ids, err := svc.InsertMany(testModels) + require.Nil(t, err) + assert.Equal(t, 2, len(ids)) + }) + + t.Run("UpdateById", func(t *testing.T) { + svc := service.NewModelService[TestModel]() + testModel := TestModel{Name: "UpdateById Test"} + + id, err := svc.InsertOne(testModel) + require.Nil(t, err) + time.Sleep(100 * time.Millisecond) + + update := bson.M{"$set": bson.M{"name": "UpdateById Test New Name"}} + err = svc.UpdateById(id, update) + require.Nil(t, err) + time.Sleep(100 * time.Millisecond) + + result, err := svc.GetById(id) + require.Nil(t, err) + assert.Equal(t, "UpdateById Test New Name", result.Name) + }) + + t.Run("UpdateOne", func(t *testing.T) { + svc := service.NewModelService[TestModel]() + testModel := TestModel{Name: "UpdateOne Test"} + + _, err := svc.InsertOne(testModel) + require.Nil(t, err) + time.Sleep(100 * time.Millisecond) + + update := bson.M{"$set": bson.M{"name": "UpdateOne Test New Name"}} + err = svc.UpdateOne(bson.M{"name": "UpdateOne Test"}, update) + require.Nil(t, err) + time.Sleep(100 * time.Millisecond) + + result, err := svc.GetOne(bson.M{"name": "UpdateOne Test New Name"}, nil) + require.Nil(t, err) + assert.Equal(t, "UpdateOne Test New Name", result.Name) + }) + + t.Run("UpdateMany", func(t *testing.T) { + svc := service.NewModelService[TestModel]() + testModels := []TestModel{ + {Name: "UpdateMany Test 1"}, + {Name: "UpdateMany Test 2"}, + } + + _, err := svc.InsertMany(testModels) + require.Nil(t, err) + time.Sleep(100 * time.Millisecond) + + update := bson.M{"$set": bson.M{"name": "UpdateMany Test New Name"}} + err = svc.UpdateMany(bson.M{"name": bson.M{"$regex": "^UpdateMany Test"}}, update) + require.Nil(t, err) + time.Sleep(100 * time.Millisecond) + + results, err := svc.GetMany(bson.M{"name": "UpdateMany Test New Name"}, nil) + require.Nil(t, err) + assert.Equal(t, 2, len(results)) + }) + + t.Run("DeleteById", func(t *testing.T) { + svc := service.NewModelService[TestModel]() + testModel := TestModel{Name: "DeleteById Test"} + + id, err := svc.InsertOne(testModel) + require.Nil(t, err) + time.Sleep(100 * time.Millisecond) + + err = svc.DeleteById(id) + require.Nil(t, err) + time.Sleep(100 * time.Millisecond) + + result, err := svc.GetById(id) + assert.NotNil(t, err) + assert.Nil(t, result) + }) + + t.Run("DeleteOne", func(t *testing.T) { + svc := service.NewModelService[TestModel]() + testModel := TestModel{Name: "DeleteOne Test"} + + _, err := svc.InsertOne(testModel) + require.Nil(t, err) + time.Sleep(100 * time.Millisecond) + + err = svc.DeleteOne(bson.M{"name": "DeleteOne Test"}) + require.Nil(t, err) + time.Sleep(100 * time.Millisecond) + + result, err := svc.GetOne(bson.M{"name": "DeleteOne Test"}, nil) + assert.NotNil(t, err) + assert.Nil(t, result) + }) + + t.Run("DeleteMany", func(t *testing.T) { + svc := service.NewModelService[TestModel]() + testModels := []TestModel{ + {Name: "DeleteMany Test 1"}, + {Name: "DeleteMany Test 2"}, + } + + _, err := svc.InsertMany(testModels) + require.Nil(t, err) + time.Sleep(100 * time.Millisecond) + + err = svc.DeleteMany(bson.M{"name": bson.M{"$regex": "^DeleteMany Test"}}) + require.Nil(t, err) + time.Sleep(100 * time.Millisecond) + + results, err := svc.GetMany(bson.M{"name": bson.M{"$regex": "^DeleteMany Test"}}, nil) + require.Nil(t, err) + assert.Equal(t, 0, len(results)) + }) + + t.Run("Count", func(t *testing.T) { + svc := service.NewModelService[TestModel]() + testModels := []TestModel{ + {Name: "Count Test 1"}, + {Name: "Count Test 2"}, + } + + _, err := svc.InsertMany(testModels) + require.Nil(t, err) + time.Sleep(100 * time.Millisecond) + + total, err := svc.Count(bson.M{"name": bson.M{"$regex": "^Count Test"}}) + require.Nil(t, err) + assert.Equal(t, 2, total) + }) +} diff --git a/core/models/service/base_service_v2.go b/core/models/service/base_service_v2.go deleted file mode 100644 index 9ebe4c91c..000000000 --- a/core/models/service/base_service_v2.go +++ /dev/null @@ -1,181 +0,0 @@ -package service - -import ( - "fmt" - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/db/mongo" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" - "reflect" - "sync" -) - -var ( - instanceMap = make(map[string]any) - onceMap = make(map[string]*sync.Once) - onceColNameMap = make(map[string]*sync.Once) - mu sync.Mutex -) - -type ModelServiceV2[T any] struct { - col *mongo.Col -} - -func (svc *ModelServiceV2[T]) GetById(id primitive.ObjectID) (model *T, err error) { - var result T - err = svc.col.FindId(id).One(&result) - if err != nil { - return nil, err - } - return &result, nil -} - -func (svc *ModelServiceV2[T]) GetOne(query bson.M, options *mongo.FindOptions) (model *T, err error) { - var result T - err = svc.col.Find(query, options).One(&result) - if err != nil { - return nil, err - } - return &result, nil -} - -func (svc *ModelServiceV2[T]) GetMany(query bson.M, options *mongo.FindOptions) (models []T, err error) { - var result []T - err = svc.col.Find(query, options).All(&result) - if err != nil { - return nil, err - } - return result, nil -} - -func (svc *ModelServiceV2[T]) DeleteById(id primitive.ObjectID) (err error) { - return svc.col.DeleteId(id) -} - -func (svc *ModelServiceV2[T]) DeleteOne(query bson.M) (err error) { - _, err = svc.col.GetCollection().DeleteOne(svc.col.GetContext(), query) - return err -} - -func (svc *ModelServiceV2[T]) DeleteMany(query bson.M) (err error) { - _, err = svc.col.GetCollection().DeleteMany(svc.col.GetContext(), query, nil) - return err -} - -func (svc *ModelServiceV2[T]) UpdateById(id primitive.ObjectID, update bson.M) (err error) { - return svc.col.UpdateId(id, update) -} - -func (svc *ModelServiceV2[T]) UpdateOne(query bson.M, update bson.M) (err error) { - _, err = svc.col.GetCollection().UpdateOne(svc.col.GetContext(), query, update) - return err -} - -func (svc *ModelServiceV2[T]) UpdateMany(query bson.M, update bson.M) (err error) { - _, err = svc.col.GetCollection().UpdateMany(svc.col.GetContext(), query, update) - return err -} - -func (svc *ModelServiceV2[T]) ReplaceById(id primitive.ObjectID, model T) (err error) { - _, err = svc.col.GetCollection().ReplaceOne(svc.col.GetContext(), bson.M{"_id": id}, model) - return err -} - -func (svc *ModelServiceV2[T]) ReplaceOne(query bson.M, model T) (err error) { - _, err = svc.col.GetCollection().ReplaceOne(svc.col.GetContext(), query, model) - return err -} - -func (svc *ModelServiceV2[T]) InsertOne(model T) (id primitive.ObjectID, err error) { - m := any(&model).(interfaces.Model) - if m.GetId().IsZero() { - m.SetId(primitive.NewObjectID()) - } - res, err := svc.col.GetCollection().InsertOne(svc.col.GetContext(), m) - if err != nil { - return primitive.NilObjectID, err - } - return res.InsertedID.(primitive.ObjectID), nil -} - -func (svc *ModelServiceV2[T]) InsertMany(models []T) (ids []primitive.ObjectID, err error) { - var _models []any - for _, model := range models { - m := any(&model).(interfaces.Model) - if m.GetId().IsZero() { - m.SetId(primitive.NewObjectID()) - } - _models = append(_models, m) - } - res, err := svc.col.GetCollection().InsertMany(svc.col.GetContext(), _models) - if err != nil { - return nil, err - } - for _, v := range res.InsertedIDs { - ids = append(ids, v.(primitive.ObjectID)) - } - return ids, nil -} - -func (svc *ModelServiceV2[T]) Count(query bson.M) (total int, err error) { - return svc.col.Count(query) -} - -func (svc *ModelServiceV2[T]) GetCol() (col *mongo.Col) { - return svc.col -} - -func GetCollectionNameByInstance(v any) string { - t := reflect.TypeOf(v) - field := t.Field(0) - return field.Tag.Get("collection") -} - -func getCollectionName[T any]() string { - var instance T - t := reflect.TypeOf(instance) - field := t.Field(0) - return field.Tag.Get("collection") -} - -// NewModelServiceV2 return singleton instance of ModelServiceV2 -func NewModelServiceV2[T any]() *ModelServiceV2[T] { - typeName := fmt.Sprintf("%T", *new(T)) - - mu.Lock() - defer mu.Unlock() - - if _, exists := onceMap[typeName]; !exists { - onceMap[typeName] = new(sync.Once) - } - - var instance *ModelServiceV2[T] - - onceMap[typeName].Do(func() { - collectionName := getCollectionName[T]() - collection := mongo.GetMongoCol(collectionName) - instance = &ModelServiceV2[T]{col: collection} - instanceMap[typeName] = instance - }) - - return instanceMap[typeName].(*ModelServiceV2[T]) -} - -func NewModelServiceV2WithColName[T any](colName string) *ModelServiceV2[T] { - mu.Lock() - defer mu.Unlock() - - if _, exists := onceColNameMap[colName]; !exists { - onceColNameMap[colName] = new(sync.Once) - } - - var instance *ModelServiceV2[T] - - onceColNameMap[colName].Do(func() { - collection := mongo.GetMongoCol(colName) - instance = &ModelServiceV2[T]{col: collection} - instanceMap[colName] = instance - }) - - return instanceMap[colName].(*ModelServiceV2[T]) -} diff --git a/core/models/service/base_service_v2_test.go b/core/models/service/base_service_v2_test.go deleted file mode 100644 index 18eec6975..000000000 --- a/core/models/service/base_service_v2_test.go +++ /dev/null @@ -1,259 +0,0 @@ -package service_test - -import ( - "context" - "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/core/models/service" - "github.com/crawlab-team/crawlab/db/mongo" - "github.com/spf13/viper" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" - "testing" - "time" -) - -type TestModel struct { - Id primitive.ObjectID `bson:"_id,omitempty" collection:"testmodels"` - models.BaseModelV2[TestModel] `bson:",inline"` - Name string `bson:"name"` -} - -func setupTestDB() { - viper.Set("mongo.db", "testdb") -} - -func teardownTestDB() { - db := mongo.GetMongoDb("testdb") - err := db.Drop(context.Background()) - if err != nil { - return - } -} - -func TestModelServiceV2_GetById(t *testing.T) { - setupTestDB() - defer teardownTestDB() - - svc := service.NewModelServiceV2[TestModel]() - testModel := TestModel{Name: "Test Name"} - - id, err := svc.InsertOne(testModel) - require.Nil(t, err) - time.Sleep(100 * time.Millisecond) - - result, err := svc.GetById(id) - require.Nil(t, err) - assert.Equal(t, testModel.Name, result.Name) -} - -func TestModelServiceV2_GetOne(t *testing.T) { - setupTestDB() - defer teardownTestDB() - - svc := service.NewModelServiceV2[TestModel]() - testModel := TestModel{Name: "Test Name"} - - _, err := svc.InsertOne(testModel) - require.Nil(t, err) - time.Sleep(100 * time.Millisecond) - - result, err := svc.GetOne(bson.M{"name": "Test Name"}, nil) - require.Nil(t, err) - assert.Equal(t, testModel.Name, result.Name) -} - -func TestModelServiceV2_GetMany(t *testing.T) { - setupTestDB() - defer teardownTestDB() - - svc := service.NewModelServiceV2[TestModel]() - testModels := []TestModel{ - {Name: "Name1"}, - {Name: "Name2"}, - } - - _, err := svc.InsertMany(testModels) - require.Nil(t, err) - time.Sleep(100 * time.Millisecond) - - results, err := svc.GetMany(bson.M{}, nil) - require.Nil(t, err) - assert.Equal(t, 2, len(results)) -} - -func TestModelServiceV2_InsertOne(t *testing.T) { - setupTestDB() - defer teardownTestDB() - - svc := service.NewModelServiceV2[TestModel]() - testModel := TestModel{Name: "Test Name"} - - id, err := svc.InsertOne(testModel) - require.Nil(t, err) - assert.NotEqual(t, primitive.NilObjectID, id) -} - -func TestModelServiceV2_InsertMany(t *testing.T) { - setupTestDB() - defer teardownTestDB() - - svc := service.NewModelServiceV2[TestModel]() - testModels := []TestModel{ - {Name: "Name1"}, - {Name: "Name2"}, - } - - ids, err := svc.InsertMany(testModels) - require.Nil(t, err) - assert.Equal(t, 2, len(ids)) -} - -func TestModelServiceV2_UpdateById(t *testing.T) { - setupTestDB() - defer teardownTestDB() - - svc := service.NewModelServiceV2[TestModel]() - testModel := TestModel{Name: "Old Name"} - - id, err := svc.InsertOne(testModel) - require.Nil(t, err) - time.Sleep(100 * time.Millisecond) - - update := bson.M{"$set": bson.M{"name": "New Name"}} - err = svc.UpdateById(id, update) - require.Nil(t, err) - time.Sleep(100 * time.Millisecond) - - result, err := svc.GetById(id) - require.Nil(t, err) - assert.Equal(t, "New Name", result.Name) -} - -func TestModelServiceV2_UpdateOne(t *testing.T) { - setupTestDB() - defer teardownTestDB() - - svc := service.NewModelServiceV2[TestModel]() - testModel := TestModel{Name: "Old Name"} - - _, err := svc.InsertOne(testModel) - require.Nil(t, err) - time.Sleep(100 * time.Millisecond) - - update := bson.M{"$set": bson.M{"name": "New Name"}} - err = svc.UpdateOne(bson.M{"name": "Old Name"}, update) - require.Nil(t, err) - time.Sleep(100 * time.Millisecond) - - result, err := svc.GetOne(bson.M{"name": "New Name"}, nil) - require.Nil(t, err) - assert.Equal(t, "New Name", result.Name) -} - -func TestModelServiceV2_UpdateMany(t *testing.T) { - setupTestDB() - defer teardownTestDB() - - svc := service.NewModelServiceV2[TestModel]() - testModels := []TestModel{ - {Name: "Old Name1"}, - {Name: "Old Name2"}, - } - - _, err := svc.InsertMany(testModels) - require.Nil(t, err) - time.Sleep(100 * time.Millisecond) - - update := bson.M{"$set": bson.M{"name": "New Name"}} - err = svc.UpdateMany(bson.M{"name": bson.M{"$regex": "^Old"}}, update) - require.Nil(t, err) - time.Sleep(100 * time.Millisecond) - - results, err := svc.GetMany(bson.M{"name": "New Name"}, nil) - require.Nil(t, err) - assert.Equal(t, 2, len(results)) -} - -func TestModelServiceV2_DeleteById(t *testing.T) { - setupTestDB() - defer teardownTestDB() - - svc := service.NewModelServiceV2[TestModel]() - testModel := TestModel{Name: "Test Name"} - - id, err := svc.InsertOne(testModel) - require.Nil(t, err) - time.Sleep(100 * time.Millisecond) - - err = svc.DeleteById(id) - require.Nil(t, err) - time.Sleep(100 * time.Millisecond) - - result, err := svc.GetById(id) - assert.NotNil(t, err) - assert.Nil(t, result) -} - -func TestModelServiceV2_DeleteOne(t *testing.T) { - setupTestDB() - defer teardownTestDB() - - svc := service.NewModelServiceV2[TestModel]() - testModel := TestModel{Name: "Test Name"} - - _, err := svc.InsertOne(testModel) - require.Nil(t, err) - time.Sleep(100 * time.Millisecond) - - err = svc.DeleteOne(bson.M{"name": "Test Name"}) - require.Nil(t, err) - time.Sleep(100 * time.Millisecond) - - result, err := svc.GetOne(bson.M{"name": "Test Name"}, nil) - assert.NotNil(t, err) - assert.Nil(t, result) -} - -func TestModelServiceV2_DeleteMany(t *testing.T) { - setupTestDB() - defer teardownTestDB() - - svc := service.NewModelServiceV2[TestModel]() - testModels := []TestModel{ - {Name: "Test Name1"}, - {Name: "Test Name2"}, - } - - _, err := svc.InsertMany(testModels) - require.Nil(t, err) - time.Sleep(100 * time.Millisecond) - - err = svc.DeleteMany(bson.M{"name": bson.M{"$regex": "^Test Name"}}) - require.Nil(t, err) - time.Sleep(100 * time.Millisecond) - - results, err := svc.GetMany(bson.M{"name": bson.M{"$regex": "^Test Name"}}, nil) - require.Nil(t, err) - assert.Equal(t, 0, len(results)) -} - -func TestModelServiceV2_Count(t *testing.T) { - setupTestDB() - defer teardownTestDB() - - svc := service.NewModelServiceV2[TestModel]() - testModels := []TestModel{ - {Name: "Name1"}, - {Name: "Name2"}, - } - - _, err := svc.InsertMany(testModels) - require.Nil(t, err) - time.Sleep(100 * time.Millisecond) - - total, err := svc.Count(bson.M{}) - require.Nil(t, err) - assert.Equal(t, 2, total) -} diff --git a/core/models/service/binder_basic.go b/core/models/service/binder_basic.go deleted file mode 100644 index df0fb6435..000000000 --- a/core/models/service/binder_basic.go +++ /dev/null @@ -1,92 +0,0 @@ -package service - -import ( - "github.com/crawlab-team/crawlab/core/errors" - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/db/mongo" -) - -func NewBasicBinder(id interfaces.ModelId, fr *mongo.FindResult) (b interfaces.ModelBinder) { - return &BasicBinder{ - id: id, - fr: fr, - m: models.NewModelMap(), - } -} - -type BasicBinder struct { - id interfaces.ModelId - fr *mongo.FindResult - m *models.ModelMap -} - -func (b *BasicBinder) Bind() (res interfaces.Model, err error) { - m := b.m - - switch b.id { - case interfaces.ModelIdArtifact: - return b.Process(&m.Artifact) - case interfaces.ModelIdTag: - return b.Process(&m.Tag) - case interfaces.ModelIdNode: - return b.Process(&m.Node) - case interfaces.ModelIdProject: - return b.Process(&m.Project) - case interfaces.ModelIdSpider: - return b.Process(&m.Spider) - case interfaces.ModelIdTask: - return b.Process(&m.Task) - case interfaces.ModelIdJob: - return b.Process(&m.Job) - case interfaces.ModelIdSchedule: - return b.Process(&m.Schedule) - case interfaces.ModelIdUser: - return b.Process(&m.User) - case interfaces.ModelIdSetting: - return b.Process(&m.Setting) - case interfaces.ModelIdToken: - return b.Process(&m.Token) - case interfaces.ModelIdVariable: - return b.Process(&m.Variable) - case interfaces.ModelIdTaskQueue: - return b.Process(&m.TaskQueueItem) - case interfaces.ModelIdTaskStat: - return b.Process(&m.TaskStat) - case interfaces.ModelIdSpiderStat: - return b.Process(&m.SpiderStat) - case interfaces.ModelIdDataSource: - return b.Process(&m.DataSource) - case interfaces.ModelIdDataCollection: - return b.Process(&m.DataCollection) - case interfaces.ModelIdResult: - return b.Process(&m.Result) - case interfaces.ModelIdPassword: - return b.Process(&m.Password) - case interfaces.ModelIdExtraValue: - return b.Process(&m.ExtraValue) - case interfaces.ModelIdGit: - return b.Process(&m.Git) - case interfaces.ModelIdRole: - return b.Process(&m.Role) - case interfaces.ModelIdUserRole: - return b.Process(&m.UserRole) - case interfaces.ModelIdPermission: - return b.Process(&m.Permission) - case interfaces.ModelIdRolePermission: - return b.Process(&m.RolePermission) - case interfaces.ModelIdEnvironment: - return b.Process(&m.Environment) - case interfaces.ModelIdDependencySetting: - return b.Process(&m.DependencySetting) - default: - return nil, errors.ErrorModelInvalidModelId - } -} - -func (b *BasicBinder) Process(d interfaces.Model) (res interfaces.Model, err error) { - if err := b.fr.One(d); err != nil { - return nil, err - } - return d, nil -} diff --git a/core/models/service/binder_list.go b/core/models/service/binder_list.go deleted file mode 100644 index a7a8f50d5..000000000 --- a/core/models/service/binder_list.go +++ /dev/null @@ -1,93 +0,0 @@ -package service - -import ( - "github.com/crawlab-team/crawlab/core/errors" - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/db/mongo" - "github.com/crawlab-team/crawlab/trace" -) - -func NewListBinder(id interfaces.ModelId, fr *mongo.FindResult) (b interfaces.ModelListBinder) { - return &ListBinder{ - id: id, - m: models.NewModelListMap(), - fr: fr, - b: NewBasicBinder(id, fr), - } -} - -type ListBinder struct { - id interfaces.ModelId - m *models.ModelListMap - fr *mongo.FindResult - b interfaces.ModelBinder -} - -func (b *ListBinder) Bind() (l interfaces.List, err error) { - m := b.m - - switch b.id { - case interfaces.ModelIdArtifact: - return b.Process(&m.Artifacts) - case interfaces.ModelIdTag: - return b.Process(&m.Tags) - case interfaces.ModelIdNode: - return b.Process(&m.Nodes) - case interfaces.ModelIdProject: - return b.Process(&m.Projects) - case interfaces.ModelIdSpider: - return b.Process(&m.Spiders) - case interfaces.ModelIdTask: - return b.Process(&m.Tasks) - case interfaces.ModelIdSchedule: - return b.Process(&m.Schedules) - case interfaces.ModelIdUser: - return b.Process(&m.Users) - case interfaces.ModelIdSetting: - return b.Process(&m.Settings) - case interfaces.ModelIdToken: - return b.Process(&m.Tokens) - case interfaces.ModelIdVariable: - return b.Process(&m.Variables) - case interfaces.ModelIdTaskQueue: - return b.Process(&m.TaskQueueItems) - case interfaces.ModelIdTaskStat: - return b.Process(&m.TaskStats) - case interfaces.ModelIdSpiderStat: - return b.Process(&m.SpiderStats) - case interfaces.ModelIdDataSource: - return b.Process(&m.DataSources) - case interfaces.ModelIdDataCollection: - return b.Process(&m.DataCollections) - case interfaces.ModelIdResult: - return b.Process(&m.Results) - case interfaces.ModelIdPassword: - return b.Process(&m.Passwords) - case interfaces.ModelIdExtraValue: - return b.Process(&m.ExtraValues) - case interfaces.ModelIdGit: - return b.Process(&m.Gits) - case interfaces.ModelIdRole: - return b.Process(&m.Roles) - case interfaces.ModelIdUserRole: - return b.Process(&m.UserRoles) - case interfaces.ModelIdPermission: - return b.Process(&m.PermissionList) - case interfaces.ModelIdRolePermission: - return b.Process(&m.RolePermissionList) - case interfaces.ModelIdEnvironment: - return b.Process(&m.Environments) - case interfaces.ModelIdDependencySetting: - return b.Process(&m.DependencySettings) - default: - return l, errors.ErrorModelInvalidModelId - } -} - -func (b *ListBinder) Process(d interface{}) (l interfaces.List, err error) { - if err := b.fr.All(d); err != nil { - return l, trace.TraceError(err) - } - return d.(interfaces.List), nil -} diff --git a/core/models/service/data_collection_service.go b/core/models/service/data_collection_service.go deleted file mode 100644 index 6b2fd284e..000000000 --- a/core/models/service/data_collection_service.go +++ /dev/null @@ -1,45 +0,0 @@ -package service - -import ( - "github.com/crawlab-team/crawlab/core/errors" - "github.com/crawlab-team/crawlab/core/interfaces" - models2 "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/db/mongo" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -func convertTypeDataCollection(d interface{}, err error) (res *models2.DataCollection, err2 error) { - if err != nil { - return nil, err - } - res, ok := d.(*models2.DataCollection) - if !ok { - return nil, errors.ErrorModelInvalidType - } - return res, nil -} - -func (svc *Service) GetDataCollectionById(id primitive.ObjectID) (res *models2.DataCollection, err error) { - d, err := svc.GetBaseService(interfaces.ModelIdDataCollection).GetById(id) - return convertTypeDataCollection(d, err) -} - -func (svc *Service) GetDataCollection(query bson.M, opts *mongo.FindOptions) (res *models2.DataCollection, err error) { - d, err := svc.GetBaseService(interfaces.ModelIdDataCollection).Get(query, opts) - return convertTypeDataCollection(d, err) -} - -func (svc *Service) GetDataCollectionList(query bson.M, opts *mongo.FindOptions) (res []models2.DataCollection, err error) { - l, err := svc.GetBaseService(interfaces.ModelIdDataCollection).GetList(query, opts) - for _, doc := range l.GetModels() { - d := doc.(*models2.DataCollection) - res = append(res, *d) - } - return res, nil -} - -func (svc *Service) GetDataCollectionByName(name string, opts *mongo.FindOptions) (res *models2.DataCollection, err error) { - query := bson.M{"name": name} - return svc.GetDataCollection(query, opts) -} diff --git a/core/models/service/data_source_service.go b/core/models/service/data_source_service.go deleted file mode 100644 index 44ecb3871..000000000 --- a/core/models/service/data_source_service.go +++ /dev/null @@ -1,40 +0,0 @@ -package service - -import ( - "github.com/crawlab-team/crawlab/core/errors" - "github.com/crawlab-team/crawlab/core/interfaces" - models2 "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/db/mongo" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -func convertTypeDataSource(d interface{}, err error) (res *models2.DataSource, err2 error) { - if err != nil { - return nil, err - } - res, ok := d.(*models2.DataSource) - if !ok { - return nil, errors.ErrorModelInvalidType - } - return res, nil -} - -func (svc *Service) GetDataSourceById(id primitive.ObjectID) (res *models2.DataSource, err error) { - d, err := svc.GetBaseService(interfaces.ModelIdDataSource).GetById(id) - return convertTypeDataSource(d, err) -} - -func (svc *Service) GetDataSource(query bson.M, opts *mongo.FindOptions) (res *models2.DataSource, err error) { - d, err := svc.GetBaseService(interfaces.ModelIdDataSource).Get(query, opts) - return convertTypeDataSource(d, err) -} - -func (svc *Service) GetDataSourceList(query bson.M, opts *mongo.FindOptions) (res []models2.DataSource, err error) { - l, err := svc.GetBaseService(interfaces.ModelIdDataSource).GetList(query, opts) - for _, doc := range l.GetModels() { - d := doc.(*models2.DataSource) - res = append(res, *d) - } - return res, nil -} diff --git a/core/models/service/dependency_setting_service.go b/core/models/service/dependency_setting_service.go deleted file mode 100644 index 416002856..000000000 --- a/core/models/service/dependency_setting_service.go +++ /dev/null @@ -1,40 +0,0 @@ -package service - -import ( - "github.com/crawlab-team/crawlab/core/errors" - "github.com/crawlab-team/crawlab/core/interfaces" - models2 "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/db/mongo" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -func convertTypeDependencySetting(d interface{}, err error) (res *models2.DependencySetting, err2 error) { - if err != nil { - return nil, err - } - res, ok := d.(*models2.DependencySetting) - if !ok { - return nil, errors.ErrorModelInvalidType - } - return res, nil -} - -func (svc *Service) GetDependencySettingById(id primitive.ObjectID) (res *models2.DependencySetting, err error) { - d, err := svc.GetBaseService(interfaces.ModelIdDependencySetting).GetById(id) - return convertTypeDependencySetting(d, err) -} - -func (svc *Service) GetDependencySetting(query bson.M, opts *mongo.FindOptions) (res *models2.DependencySetting, err error) { - d, err := svc.GetBaseService(interfaces.ModelIdDependencySetting).Get(query, opts) - return convertTypeDependencySetting(d, err) -} - -func (svc *Service) GetDependencySettingList(query bson.M, opts *mongo.FindOptions) (res []models2.DependencySetting, err error) { - l, err := svc.GetBaseService(interfaces.ModelIdDependencySetting).GetList(query, opts) - for _, doc := range l.GetModels() { - d := doc.(*models2.DependencySetting) - res = append(res, *d) - } - return res, nil -} diff --git a/core/models/service/environment_service.go b/core/models/service/environment_service.go deleted file mode 100644 index 5b82aa39b..000000000 --- a/core/models/service/environment_service.go +++ /dev/null @@ -1,40 +0,0 @@ -package service - -import ( - "github.com/crawlab-team/crawlab/core/errors" - "github.com/crawlab-team/crawlab/core/interfaces" - models2 "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/db/mongo" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -func convertTypeEnvironment(d interface{}, err error) (res *models2.Environment, err2 error) { - if err != nil { - return nil, err - } - res, ok := d.(*models2.Environment) - if !ok { - return nil, errors.ErrorModelInvalidType - } - return res, nil -} - -func (svc *Service) GetEnvironmentById(id primitive.ObjectID) (res *models2.Environment, err error) { - d, err := svc.GetBaseService(interfaces.ModelIdEnvironment).GetById(id) - return convertTypeEnvironment(d, err) -} - -func (svc *Service) GetEnvironment(query bson.M, opts *mongo.FindOptions) (res *models2.Environment, err error) { - d, err := svc.GetBaseService(interfaces.ModelIdEnvironment).Get(query, opts) - return convertTypeEnvironment(d, err) -} - -func (svc *Service) GetEnvironmentList(query bson.M, opts *mongo.FindOptions) (res []models2.Environment, err error) { - l, err := svc.GetBaseService(interfaces.ModelIdEnvironment).GetList(query, opts) - for _, doc := range l.GetModels() { - d := doc.(*models2.Environment) - res = append(res, *d) - } - return res, nil -} diff --git a/core/models/service/extra_value_service.go b/core/models/service/extra_value_service.go deleted file mode 100644 index 5fa1bb6ea..000000000 --- a/core/models/service/extra_value_service.go +++ /dev/null @@ -1,45 +0,0 @@ -package service - -import ( - "github.com/crawlab-team/crawlab/core/errors" - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/db/mongo" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -func convertTypeExtraValue(d interface{}, err error) (res *models.ExtraValue, err2 error) { - if err != nil { - return nil, err - } - res, ok := d.(*models.ExtraValue) - if !ok { - return nil, errors.ErrorModelInvalidType - } - return res, nil -} - -func (svc *Service) GetExtraValueById(id primitive.ObjectID) (res *models.ExtraValue, err error) { - d, err := svc.GetBaseService(interfaces.ModelIdExtraValue).GetById(id) - return convertTypeExtraValue(d, err) -} - -func (svc *Service) GetExtraValue(query bson.M, opts *mongo.FindOptions) (res *models.ExtraValue, err error) { - d, err := svc.GetBaseService(interfaces.ModelIdExtraValue).Get(query, opts) - return convertTypeExtraValue(d, err) -} - -func (svc *Service) GetExtraValueList(query bson.M, opts *mongo.FindOptions) (res []models.ExtraValue, err error) { - l, err := svc.GetBaseService(interfaces.ModelIdExtraValue).GetList(query, opts) - for _, doc := range l.GetModels() { - d := doc.(*models.ExtraValue) - res = append(res, *d) - } - return res, nil -} - -func (svc *Service) GetExtraValueByObjectIdModel(oid primitive.ObjectID, m string, opts *mongo.FindOptions) (res *models.ExtraValue, err error) { - d, err := svc.GetBaseService(interfaces.ModelIdExtraValue).Get(bson.M{"oid": oid, "m": m}, opts) - return convertTypeExtraValue(d, err) -} diff --git a/core/models/service/git_service.go b/core/models/service/git_service.go deleted file mode 100644 index 41ad09971..000000000 --- a/core/models/service/git_service.go +++ /dev/null @@ -1,43 +0,0 @@ -package service - -import ( - "github.com/crawlab-team/crawlab/core/errors" - "github.com/crawlab-team/crawlab/core/interfaces" - models2 "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/db/mongo" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -func convertTypeGit(d interface{}, err error) (res *models2.Git, err2 error) { - if err != nil { - return nil, err - } - res, ok := d.(*models2.Git) - if !ok { - return nil, errors.ErrorModelInvalidType - } - return res, nil -} - -func (svc *Service) GetGitById(id primitive.ObjectID) (res *models2.Git, err error) { - d, err := svc.GetBaseService(interfaces.ModelIdGit).GetById(id) - return convertTypeGit(d, err) -} - -func (svc *Service) GetGit(query bson.M, opts *mongo.FindOptions) (res *models2.Git, err error) { - d, err := svc.GetBaseService(interfaces.ModelIdGit).Get(query, opts) - return convertTypeGit(d, err) -} - -func (svc *Service) GetGitList(query bson.M, opts *mongo.FindOptions) (res []models2.Git, err error) { - l, err := svc.GetBaseService(interfaces.ModelIdGit).GetList(query, opts) - if l == nil { - return nil, nil - } - for _, doc := range l.GetModels() { - d := doc.(*models2.Git) - res = append(res, *d) - } - return res, nil -} diff --git a/core/models/service/interface.go b/core/models/service/interface.go deleted file mode 100644 index c03ff3912..000000000 --- a/core/models/service/interface.go +++ /dev/null @@ -1,105 +0,0 @@ -package service - -import ( - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/db/mongo" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -type ModelService interface { - interfaces.ModelService - DropAll() (err error) - GetNodeById(id primitive.ObjectID) (res *models.Node, err error) - GetNode(query bson.M, opts *mongo.FindOptions) (res *models.Node, err error) - GetNodeList(query bson.M, opts *mongo.FindOptions) (res []models.Node, err error) - GetNodeByKey(key string, opts *mongo.FindOptions) (res *models.Node, err error) - GetProjectById(id primitive.ObjectID) (res *models.Project, err error) - GetProject(query bson.M, opts *mongo.FindOptions) (res *models.Project, err error) - GetProjectList(query bson.M, opts *mongo.FindOptions) (res []models.Project, err error) - GetArtifactById(id primitive.ObjectID) (res *models.Artifact, err error) - GetArtifact(query bson.M, opts *mongo.FindOptions) (res *models.Artifact, err error) - GetArtifactList(query bson.M, opts *mongo.FindOptions) (res []models.Artifact, err error) - GetTagById(id primitive.ObjectID) (res *models.Tag, err error) - GetTag(query bson.M, opts *mongo.FindOptions) (res *models.Tag, err error) - GetTagList(query bson.M, opts *mongo.FindOptions) (res []models.Tag, err error) - GetTagIds(colName string, tags []interfaces.Tag) (tagIds []primitive.ObjectID, err error) - UpdateTagsById(colName string, id primitive.ObjectID, tags []interfaces.Tag) (tagIds []primitive.ObjectID, err error) - UpdateTags(colName string, query bson.M, tags []interfaces.Tag) (tagIds []primitive.ObjectID, err error) - GetJobById(id primitive.ObjectID) (res *models.Job, err error) - GetJob(query bson.M, opts *mongo.FindOptions) (res *models.Job, err error) - GetJobList(query bson.M, opts *mongo.FindOptions) (res []models.Job, err error) - GetScheduleById(id primitive.ObjectID) (res *models.Schedule, err error) - GetSchedule(query bson.M, opts *mongo.FindOptions) (res *models.Schedule, err error) - GetScheduleList(query bson.M, opts *mongo.FindOptions) (res []models.Schedule, err error) - GetUserById(id primitive.ObjectID) (res *models.User, err error) - GetUser(query bson.M, opts *mongo.FindOptions) (res *models.User, err error) - GetUserList(query bson.M, opts *mongo.FindOptions) (res []models.User, err error) - GetUserByUsername(username string, opts *mongo.FindOptions) (res *models.User, err error) - GetUserByUsernameWithPassword(username string, opts *mongo.FindOptions) (res *models.User, err error) - GetSettingById(id primitive.ObjectID) (res *models.Setting, err error) - GetSetting(query bson.M, opts *mongo.FindOptions) (res *models.Setting, err error) - GetSettingList(query bson.M, opts *mongo.FindOptions) (res []models.Setting, err error) - GetSettingByKey(key string, opts *mongo.FindOptions) (res *models.Setting, err error) - GetSpiderById(id primitive.ObjectID) (res *models.Spider, err error) - GetSpider(query bson.M, opts *mongo.FindOptions) (res *models.Spider, err error) - GetSpiderList(query bson.M, opts *mongo.FindOptions) (res []models.Spider, err error) - GetTaskById(id primitive.ObjectID) (res *models.Task, err error) - GetTask(query bson.M, opts *mongo.FindOptions) (res *models.Task, err error) - GetTaskList(query bson.M, opts *mongo.FindOptions) (res []models.Task, err error) - GetTokenById(id primitive.ObjectID) (res *models.Token, err error) - GetToken(query bson.M, opts *mongo.FindOptions) (res *models.Token, err error) - GetTokenList(query bson.M, opts *mongo.FindOptions) (res []models.Token, err error) - GetVariableById(id primitive.ObjectID) (res *models.Variable, err error) - GetVariable(query bson.M, opts *mongo.FindOptions) (res *models.Variable, err error) - GetVariableList(query bson.M, opts *mongo.FindOptions) (res []models.Variable, err error) - GetVariableByKey(key string, opts *mongo.FindOptions) (res *models.Variable, err error) - GetTaskQueueItemById(id primitive.ObjectID) (res *models.TaskQueueItem, err error) - GetTaskQueueItem(query bson.M, opts *mongo.FindOptions) (res *models.TaskQueueItem, err error) - GetTaskQueueItemList(query bson.M, opts *mongo.FindOptions) (res []models.TaskQueueItem, err error) - GetTaskStatById(id primitive.ObjectID) (res *models.TaskStat, err error) - GetTaskStat(query bson.M, opts *mongo.FindOptions) (res *models.TaskStat, err error) - GetTaskStatList(query bson.M, opts *mongo.FindOptions) (res []models.TaskStat, err error) - GetSpiderStatById(id primitive.ObjectID) (res *models.SpiderStat, err error) - GetSpiderStat(query bson.M, opts *mongo.FindOptions) (res *models.SpiderStat, err error) - GetSpiderStatList(query bson.M, opts *mongo.FindOptions) (res []models.SpiderStat, err error) - GetDataSourceById(id primitive.ObjectID) (res *models.DataSource, err error) - GetDataSource(query bson.M, opts *mongo.FindOptions) (res *models.DataSource, err error) - GetDataSourceList(query bson.M, opts *mongo.FindOptions) (res []models.DataSource, err error) - GetDataCollectionById(id primitive.ObjectID) (res *models.DataCollection, err error) - GetDataCollection(query bson.M, opts *mongo.FindOptions) (res *models.DataCollection, err error) - GetDataCollectionList(query bson.M, opts *mongo.FindOptions) (res []models.DataCollection, err error) - GetDataCollectionByName(name string, opts *mongo.FindOptions) (res *models.DataCollection, err error) - GetPasswordById(id primitive.ObjectID) (res *models.Password, err error) - GetPassword(query bson.M, opts *mongo.FindOptions) (res *models.Password, err error) - GetPasswordList(query bson.M, opts *mongo.FindOptions) (res []models.Password, err error) - GetExtraValueById(id primitive.ObjectID) (res *models.ExtraValue, err error) - GetExtraValue(query bson.M, opts *mongo.FindOptions) (res *models.ExtraValue, err error) - GetExtraValueList(query bson.M, opts *mongo.FindOptions) (res []models.ExtraValue, err error) - GetExtraValueByObjectIdModel(oid primitive.ObjectID, m string, opts *mongo.FindOptions) (res *models.ExtraValue, err error) - GetGitById(id primitive.ObjectID) (res *models.Git, err error) - GetGit(query bson.M, opts *mongo.FindOptions) (res *models.Git, err error) - GetGitList(query bson.M, opts *mongo.FindOptions) (res []models.Git, err error) - GetRoleById(id primitive.ObjectID) (res *models.Role, err error) - GetRole(query bson.M, opts *mongo.FindOptions) (res *models.Role, err error) - GetRoleList(query bson.M, opts *mongo.FindOptions) (res []models.Role, err error) - GetRoleByName(name string, opts *mongo.FindOptions) (res *models.Role, err error) - GetRoleByKey(key string, opts *mongo.FindOptions) (res *models.Role, err error) - GetUserRoleById(id primitive.ObjectID) (res *models.UserRole, err error) - GetUserRole(query bson.M, opts *mongo.FindOptions) (res *models.UserRole, err error) - GetUserRoleList(query bson.M, opts *mongo.FindOptions) (res []models.UserRole, err error) - GetUserRoleListByUserId(id primitive.ObjectID, opts *mongo.FindOptions) (res []models.UserRole, err error) - GetUserRoleListByRoleId(id primitive.ObjectID, opts *mongo.FindOptions) (res []models.UserRole, err error) - GetPermissionById(id primitive.ObjectID) (res *models.Permission, err error) - GetPermission(query bson.M, opts *mongo.FindOptions) (res *models.Permission, err error) - GetPermissionList(query bson.M, opts *mongo.FindOptions) (res []models.Permission, err error) - GetPermissionByKey(key string, opts *mongo.FindOptions) (res *models.Permission, err error) - GetRolePermission(query bson.M, opts *mongo.FindOptions) (res *models.RolePermission, err error) - GetRolePermissionList(query bson.M, opts *mongo.FindOptions) (res []models.RolePermission, err error) - GetRolePermissionListByRoleId(id primitive.ObjectID, opts *mongo.FindOptions) (res []models.RolePermission, err error) - GetRolePermissionListByPermissionId(id primitive.ObjectID, opts *mongo.FindOptions) (res []models.RolePermission, err error) - GetEnvironmentById(id primitive.ObjectID) (res *models.Environment, err error) - GetEnvironment(query bson.M, opts *mongo.FindOptions) (res *models.Environment, err error) - GetEnvironmentList(query bson.M, opts *mongo.FindOptions) (res []models.Environment, err error) -} diff --git a/core/models/service/job_service.go b/core/models/service/job_service.go deleted file mode 100644 index 2ec74964d..000000000 --- a/core/models/service/job_service.go +++ /dev/null @@ -1,40 +0,0 @@ -package service - -import ( - "github.com/crawlab-team/crawlab/core/errors" - "github.com/crawlab-team/crawlab/core/interfaces" - models2 "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/db/mongo" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -func convertTypeJob(d interface{}, err error) (res *models2.Job, err2 error) { - if err != nil { - return nil, err - } - res, ok := d.(*models2.Job) - if !ok { - return nil, errors.ErrorModelInvalidType - } - return res, nil -} - -func (svc *Service) GetJobById(id primitive.ObjectID) (res *models2.Job, err error) { - d, err := svc.GetBaseService(interfaces.ModelIdJob).GetById(id) - return convertTypeJob(d, err) -} - -func (svc *Service) GetJob(query bson.M, opts *mongo.FindOptions) (res *models2.Job, err error) { - d, err := svc.GetBaseService(interfaces.ModelIdJob).Get(query, opts) - return convertTypeJob(d, err) -} - -func (svc *Service) GetJobList(query bson.M, opts *mongo.FindOptions) (res []models2.Job, err error) { - l, err := svc.GetBaseService(interfaces.ModelIdJob).GetList(query, opts) - for _, doc := range l.GetModels() { - d := doc.(*models2.Job) - res = append(res, *d) - } - return res, nil -} diff --git a/core/models/service/node_service.go b/core/models/service/node_service.go deleted file mode 100644 index f99d6d844..000000000 --- a/core/models/service/node_service.go +++ /dev/null @@ -1,45 +0,0 @@ -package service - -import ( - "github.com/crawlab-team/crawlab/core/errors" - "github.com/crawlab-team/crawlab/core/interfaces" - models2 "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/db/mongo" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -func convertTypeNode(d interface{}, err error) (res *models2.Node, err2 error) { - if err != nil { - return nil, err - } - res, ok := d.(*models2.Node) - if !ok { - return nil, errors.ErrorModelInvalidType - } - return res, nil -} - -func (svc *Service) GetNodeById(id primitive.ObjectID) (res *models2.Node, err error) { - d, err := svc.GetBaseService(interfaces.ModelIdNode).GetById(id) - return convertTypeNode(d, err) -} - -func (svc *Service) GetNode(query bson.M, opts *mongo.FindOptions) (res *models2.Node, err error) { - d, err := svc.GetBaseService(interfaces.ModelIdNode).Get(query, opts) - return convertTypeNode(d, err) -} - -func (svc *Service) GetNodeList(query bson.M, opts *mongo.FindOptions) (res []models2.Node, err error) { - l, err := svc.GetBaseService(interfaces.ModelIdNode).GetList(query, opts) - for _, doc := range l.GetModels() { - d := doc.(*models2.Node) - res = append(res, *d) - } - return res, nil -} - -func (svc *Service) GetNodeByKey(key string, opts *mongo.FindOptions) (res *models2.Node, err error) { - query := bson.M{"key": key} - return svc.GetNode(query, opts) -} diff --git a/core/models/service/options.go b/core/models/service/options.go deleted file mode 100644 index 8677d0c15..000000000 --- a/core/models/service/options.go +++ /dev/null @@ -1,25 +0,0 @@ -package service - -import ( - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/db/mongo" -) - -type Option func(ModelService) - -type BaseServiceOption func(svc interfaces.ModelBaseService) - -func WithBaseServiceModelId(id interfaces.ModelId) BaseServiceOption { - return func(svc interfaces.ModelBaseService) { - svc.SetModelId(id) - } -} - -func WithBaseServiceCol(col *mongo.Col) BaseServiceOption { - return func(svc interfaces.ModelBaseService) { - _svc, ok := svc.(*BaseService) - if ok { - _svc.SetCol(col) - } - } -} diff --git a/core/models/service/password_service.go b/core/models/service/password_service.go deleted file mode 100644 index 47101522c..000000000 --- a/core/models/service/password_service.go +++ /dev/null @@ -1,40 +0,0 @@ -package service - -import ( - "github.com/crawlab-team/crawlab/core/errors" - "github.com/crawlab-team/crawlab/core/interfaces" - models2 "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/db/mongo" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -func convertTypePassword(d interface{}, err error) (res *models2.Password, err2 error) { - if err != nil { - return nil, err - } - res, ok := d.(*models2.Password) - if !ok { - return nil, errors.ErrorModelInvalidType - } - return res, nil -} - -func (svc *Service) GetPasswordById(id primitive.ObjectID) (res *models2.Password, err error) { - d, err := svc.GetBaseService(interfaces.ModelIdPassword).GetById(id) - return convertTypePassword(d, err) -} - -func (svc *Service) GetPassword(query bson.M, opts *mongo.FindOptions) (res *models2.Password, err error) { - d, err := svc.GetBaseService(interfaces.ModelIdPassword).Get(query, opts) - return convertTypePassword(d, err) -} - -func (svc *Service) GetPasswordList(query bson.M, opts *mongo.FindOptions) (res []models2.Password, err error) { - l, err := svc.GetBaseService(interfaces.ModelIdPassword).GetList(query, opts) - for _, doc := range l.GetModels() { - d := doc.(*models2.Password) - res = append(res, *d) - } - return res, nil -} diff --git a/core/models/service/permission_service.go b/core/models/service/permission_service.go deleted file mode 100644 index e35d63d63..000000000 --- a/core/models/service/permission_service.go +++ /dev/null @@ -1,48 +0,0 @@ -package service - -import ( - "github.com/crawlab-team/crawlab/core/errors" - "github.com/crawlab-team/crawlab/core/interfaces" - models2 "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/db/mongo" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -func convertTypePermission(d interface{}, err error) (res *models2.Permission, err2 error) { - if err != nil { - return nil, err - } - res, ok := d.(*models2.Permission) - if !ok { - return nil, errors.ErrorModelInvalidType - } - return res, nil -} - -func (svc *Service) GetPermissionById(id primitive.ObjectID) (res *models2.Permission, err error) { - d, err := svc.GetBaseService(interfaces.ModelIdPermission).GetById(id) - return convertTypePermission(d, err) -} - -func (svc *Service) GetPermission(query bson.M, opts *mongo.FindOptions) (res *models2.Permission, err error) { - d, err := svc.GetBaseService(interfaces.ModelIdPermission).Get(query, opts) - return convertTypePermission(d, err) -} - -func (svc *Service) GetPermissionList(query bson.M, opts *mongo.FindOptions) (res []models2.Permission, err error) { - l, err := svc.GetBaseService(interfaces.ModelIdPermission).GetList(query, opts) - if err != nil { - return nil, err - } - for _, doc := range l.GetModels() { - d := doc.(*models2.Permission) - res = append(res, *d) - } - return res, nil -} - -func (svc *Service) GetPermissionByKey(key string, opts *mongo.FindOptions) (res *models2.Permission, err error) { - query := bson.M{"key": key} - return svc.GetPermission(query, opts) -} diff --git a/core/models/service/project_service.go b/core/models/service/project_service.go deleted file mode 100644 index 6dd3e10e9..000000000 --- a/core/models/service/project_service.go +++ /dev/null @@ -1,40 +0,0 @@ -package service - -import ( - "github.com/crawlab-team/crawlab/core/errors" - "github.com/crawlab-team/crawlab/core/interfaces" - models2 "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/db/mongo" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -func convertTypeProject(d interface{}, err error) (res *models2.Project, err2 error) { - if err != nil { - return nil, err - } - res, ok := d.(*models2.Project) - if !ok { - return nil, errors.ErrorModelInvalidType - } - return res, nil -} - -func (svc *Service) GetProjectById(id primitive.ObjectID) (res *models2.Project, err error) { - d, err := svc.GetBaseService(interfaces.ModelIdProject).GetById(id) - return convertTypeProject(d, err) -} - -func (svc *Service) GetProject(query bson.M, opts *mongo.FindOptions) (res *models2.Project, err error) { - d, err := svc.GetBaseService(interfaces.ModelIdProject).Get(query, opts) - return convertTypeProject(d, err) -} - -func (svc *Service) GetProjectList(query bson.M, opts *mongo.FindOptions) (res []models2.Project, err error) { - l, err := svc.GetBaseService(interfaces.ModelIdProject).GetList(query, opts) - for _, doc := range l.GetModels() { - d := doc.(*models2.Project) - res = append(res, *d) - } - return res, nil -} diff --git a/core/models/service/role_permission_service.go b/core/models/service/role_permission_service.go deleted file mode 100644 index 5d980d41f..000000000 --- a/core/models/service/role_permission_service.go +++ /dev/null @@ -1,51 +0,0 @@ -package service - -import ( - "github.com/crawlab-team/crawlab/core/errors" - "github.com/crawlab-team/crawlab/core/interfaces" - models2 "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/db/mongo" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -func convertTypeRolePermission(d interface{}, err error) (res *models2.RolePermission, err2 error) { - if err != nil { - return nil, err - } - res, ok := d.(*models2.RolePermission) - if !ok { - return nil, errors.ErrorModelInvalidType - } - return res, nil -} - -func (svc *Service) GetRolePermissionById(id primitive.ObjectID) (res *models2.RolePermission, err error) { - d, err := svc.GetBaseService(interfaces.ModelIdRolePermission).GetById(id) - return convertTypeRolePermission(d, err) -} - -func (svc *Service) GetRolePermission(query bson.M, opts *mongo.FindOptions) (res *models2.RolePermission, err error) { - d, err := svc.GetBaseService(interfaces.ModelIdRolePermission).Get(query, opts) - return convertTypeRolePermission(d, err) -} - -func (svc *Service) GetRolePermissionList(query bson.M, opts *mongo.FindOptions) (res []models2.RolePermission, err error) { - l, err := svc.GetBaseService(interfaces.ModelIdRolePermission).GetList(query, opts) - if err != nil { - return nil, err - } - for _, doc := range l.GetModels() { - d := doc.(*models2.RolePermission) - res = append(res, *d) - } - return res, nil -} - -func (svc *Service) GetRolePermissionListByRoleId(id primitive.ObjectID, opts *mongo.FindOptions) (res []models2.RolePermission, err error) { - return svc.GetRolePermissionList(bson.M{"role_id": id}, opts) -} - -func (svc *Service) GetRolePermissionListByPermissionId(id primitive.ObjectID, opts *mongo.FindOptions) (res []models2.RolePermission, err error) { - return svc.GetRolePermissionList(bson.M{"permission_id": id}, opts) -} diff --git a/core/models/service/role_service.go b/core/models/service/role_service.go deleted file mode 100644 index c456dbde9..000000000 --- a/core/models/service/role_service.go +++ /dev/null @@ -1,53 +0,0 @@ -package service - -import ( - "github.com/crawlab-team/crawlab/core/errors" - "github.com/crawlab-team/crawlab/core/interfaces" - models2 "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/db/mongo" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -func convertTypeRole(d interface{}, err error) (res *models2.Role, err2 error) { - if err != nil { - return nil, err - } - res, ok := d.(*models2.Role) - if !ok { - return nil, errors.ErrorModelInvalidType - } - return res, nil -} - -func (svc *Service) GetRoleById(id primitive.ObjectID) (res *models2.Role, err error) { - d, err := svc.GetBaseService(interfaces.ModelIdRole).GetById(id) - return convertTypeRole(d, err) -} - -func (svc *Service) GetRole(query bson.M, opts *mongo.FindOptions) (res *models2.Role, err error) { - d, err := svc.GetBaseService(interfaces.ModelIdRole).Get(query, opts) - return convertTypeRole(d, err) -} - -func (svc *Service) GetRoleList(query bson.M, opts *mongo.FindOptions) (res []models2.Role, err error) { - l, err := svc.GetBaseService(interfaces.ModelIdRole).GetList(query, opts) - if err != nil { - return nil, err - } - for _, doc := range l.GetModels() { - d := doc.(*models2.Role) - res = append(res, *d) - } - return res, nil -} - -func (svc *Service) GetRoleByName(name string, opts *mongo.FindOptions) (res *models2.Role, err error) { - query := bson.M{"name": name} - return svc.GetRole(query, opts) -} - -func (svc *Service) GetRoleByKey(key string, opts *mongo.FindOptions) (res *models2.Role, err error) { - query := bson.M{"key": key} - return svc.GetRole(query, opts) -} diff --git a/core/models/service/schedule_service.go b/core/models/service/schedule_service.go deleted file mode 100644 index 9d04cbf22..000000000 --- a/core/models/service/schedule_service.go +++ /dev/null @@ -1,40 +0,0 @@ -package service - -import ( - "github.com/crawlab-team/crawlab/core/errors" - "github.com/crawlab-team/crawlab/core/interfaces" - models2 "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/db/mongo" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -func convertTypeSchedule(d interface{}, err error) (res *models2.Schedule, err2 error) { - if err != nil { - return nil, err - } - res, ok := d.(*models2.Schedule) - if !ok { - return nil, errors.ErrorModelInvalidType - } - return res, nil -} - -func (svc *Service) GetScheduleById(id primitive.ObjectID) (res *models2.Schedule, err error) { - d, err := svc.GetBaseService(interfaces.ModelIdSchedule).GetById(id) - return convertTypeSchedule(d, err) -} - -func (svc *Service) GetSchedule(query bson.M, opts *mongo.FindOptions) (res *models2.Schedule, err error) { - d, err := svc.GetBaseService(interfaces.ModelIdSchedule).Get(query, opts) - return convertTypeSchedule(d, err) -} - -func (svc *Service) GetScheduleList(query bson.M, opts *mongo.FindOptions) (res []models2.Schedule, err error) { - l, err := svc.GetBaseService(interfaces.ModelIdSchedule).GetList(query, opts) - for _, doc := range l.GetModels() { - d := doc.(*models2.Schedule) - res = append(res, *d) - } - return res, nil -} diff --git a/core/models/service/service.go b/core/models/service/service.go deleted file mode 100644 index bb62246bb..000000000 --- a/core/models/service/service.go +++ /dev/null @@ -1,62 +0,0 @@ -package service - -import ( - "context" - "github.com/crawlab-team/crawlab/core/color" - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/db/mongo" - "go.mongodb.org/mongo-driver/bson" - mongo2 "go.mongodb.org/mongo-driver/mongo" -) - -type Service struct { - env string - colorSvc interfaces.ColorService -} - -func (svc *Service) DropAll() (err error) { - db := mongo.GetMongoDb("") - colNames, err := db.ListCollectionNames(context.Background(), bson.M{}) - if err != nil { - if err == mongo2.ErrNoDocuments { - return nil - } - return err - } - for _, colName := range colNames { - col := db.Collection(colName) - if err := col.Drop(context.Background()); err != nil { - return err - } - } - return nil -} - -func (svc *Service) GetBaseService(id interfaces.ModelId) (svc2 interfaces.ModelBaseService) { - return GetBaseService(id) -} - -func NewService() (svc2 ModelService, err error) { - // service - svc := &Service{} - - svc.colorSvc, err = color.NewService() - if err != nil { - return nil, err - } - - return svc, nil -} - -var modelSvc ModelService - -func GetService() (svc ModelService, err error) { - if modelSvc != nil { - return modelSvc, nil - } - modelSvc, err = NewService() - if err != nil { - return nil, err - } - return modelSvc, nil -} diff --git a/core/models/service/setting_service.go b/core/models/service/setting_service.go deleted file mode 100644 index 41dd5c451..000000000 --- a/core/models/service/setting_service.go +++ /dev/null @@ -1,45 +0,0 @@ -package service - -import ( - "github.com/crawlab-team/crawlab/core/errors" - "github.com/crawlab-team/crawlab/core/interfaces" - models2 "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/db/mongo" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -func convertTypeSetting(d interface{}, err error) (res *models2.Setting, err2 error) { - if err != nil { - return nil, err - } - res, ok := d.(*models2.Setting) - if !ok { - return nil, errors.ErrorModelInvalidType - } - return res, nil -} - -func (svc *Service) GetSettingById(id primitive.ObjectID) (res *models2.Setting, err error) { - d, err := svc.GetBaseService(interfaces.ModelIdSetting).GetById(id) - return convertTypeSetting(d, err) -} - -func (svc *Service) GetSetting(query bson.M, opts *mongo.FindOptions) (res *models2.Setting, err error) { - d, err := svc.GetBaseService(interfaces.ModelIdSetting).Get(query, opts) - return convertTypeSetting(d, err) -} - -func (svc *Service) GetSettingList(query bson.M, opts *mongo.FindOptions) (res []models2.Setting, err error) { - l, err := svc.GetBaseService(interfaces.ModelIdSetting).GetList(query, opts) - for _, doc := range l.GetModels() { - d := doc.(*models2.Setting) - res = append(res, *d) - } - return res, nil -} - -func (svc *Service) GetSettingByKey(key string, opts *mongo.FindOptions) (res *models2.Setting, err error) { - query := bson.M{"key": key} - return svc.GetSetting(query, opts) -} diff --git a/core/models/service/spider_service.go b/core/models/service/spider_service.go deleted file mode 100644 index cdd9fbadb..000000000 --- a/core/models/service/spider_service.go +++ /dev/null @@ -1,40 +0,0 @@ -package service - -import ( - "github.com/crawlab-team/crawlab/core/errors" - "github.com/crawlab-team/crawlab/core/interfaces" - models2 "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/db/mongo" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -func convertTypeSpider(d interface{}, err error) (res *models2.Spider, err2 error) { - if err != nil { - return nil, err - } - res, ok := d.(*models2.Spider) - if !ok { - return nil, errors.ErrorModelInvalidType - } - return res, nil -} - -func (svc *Service) GetSpiderById(id primitive.ObjectID) (res *models2.Spider, err error) { - d, err := svc.GetBaseService(interfaces.ModelIdSpider).GetById(id) - return convertTypeSpider(d, err) -} - -func (svc *Service) GetSpider(query bson.M, opts *mongo.FindOptions) (res *models2.Spider, err error) { - d, err := svc.GetBaseService(interfaces.ModelIdSpider).Get(query, opts) - return convertTypeSpider(d, err) -} - -func (svc *Service) GetSpiderList(query bson.M, opts *mongo.FindOptions) (res []models2.Spider, err error) { - l, err := svc.GetBaseService(interfaces.ModelIdSpider).GetList(query, opts) - for _, doc := range l.GetModels() { - d := doc.(*models2.Spider) - res = append(res, *d) - } - return res, nil -} diff --git a/core/models/service/spider_stat_service.go b/core/models/service/spider_stat_service.go deleted file mode 100644 index 569d2fc99..000000000 --- a/core/models/service/spider_stat_service.go +++ /dev/null @@ -1,40 +0,0 @@ -package service - -import ( - "github.com/crawlab-team/crawlab/core/errors" - "github.com/crawlab-team/crawlab/core/interfaces" - models2 "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/db/mongo" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -func convertTypeSpiderStat(d interface{}, err error) (res *models2.SpiderStat, err2 error) { - if err != nil { - return nil, err - } - res, ok := d.(*models2.SpiderStat) - if !ok { - return nil, errors.ErrorModelInvalidType - } - return res, nil -} - -func (svc *Service) GetSpiderStatById(id primitive.ObjectID) (res *models2.SpiderStat, err error) { - d, err := svc.GetBaseService(interfaces.ModelIdSpiderStat).GetById(id) - return convertTypeSpiderStat(d, err) -} - -func (svc *Service) GetSpiderStat(query bson.M, opts *mongo.FindOptions) (res *models2.SpiderStat, err error) { - d, err := svc.GetBaseService(interfaces.ModelIdSpiderStat).Get(query, opts) - return convertTypeSpiderStat(d, err) -} - -func (svc *Service) GetSpiderStatList(query bson.M, opts *mongo.FindOptions) (res []models2.SpiderStat, err error) { - l, err := svc.GetBaseService(interfaces.ModelIdSpiderStat).GetList(query, opts) - for _, doc := range l.GetModels() { - d := doc.(*models2.SpiderStat) - res = append(res, *d) - } - return res, nil -} diff --git a/core/models/service/tag_service.go b/core/models/service/tag_service.go deleted file mode 100644 index 9013b0221..000000000 --- a/core/models/service/tag_service.go +++ /dev/null @@ -1,118 +0,0 @@ -package service - -import ( - "github.com/crawlab-team/crawlab/core/errors" - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/models/delegate" - models2 "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/db/mongo" - "github.com/crawlab-team/crawlab/trace" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" - mongo2 "go.mongodb.org/mongo-driver/mongo" -) - -func convertTypeTag(d interface{}, err error) (res *models2.Tag, err2 error) { - if err != nil { - return nil, err - } - res, ok := d.(*models2.Tag) - if !ok { - return nil, trace.TraceError(errors.ErrorModelInvalidType) - } - return res, nil -} - -func (svc *Service) GetTagById(id primitive.ObjectID) (res *models2.Tag, err error) { - d, err := svc.GetBaseService(interfaces.ModelIdTag).GetById(id) - return convertTypeTag(d, err) -} - -func (svc *Service) GetTag(query bson.M, opts *mongo.FindOptions) (res *models2.Tag, err error) { - d, err := svc.GetBaseService(interfaces.ModelIdTag).Get(query, opts) - return convertTypeTag(d, err) -} - -func (svc *Service) GetTagList(query bson.M, opts *mongo.FindOptions) (res []models2.Tag, err error) { - l, err := svc.GetBaseService(interfaces.ModelIdTag).GetList(query, opts) - for _, doc := range l.GetModels() { - d := doc.(*models2.Tag) - res = append(res, *d) - } - return res, nil -} - -func (svc *Service) GetTagIds(colName string, tags []interfaces.Tag) (tagIds []primitive.ObjectID, err error) { - // iterate tag names - for _, tag := range tags { - // count of tags with the name - tagDb, err := svc.GetTag(bson.M{"name": tag.GetName(), "col": colName}, nil) - if err == nil { - // tag exists - tag = tagDb - } else if err == mongo2.ErrNoDocuments { - // add new tag if not exists - colorHex := tag.GetColor() - if colorHex == "" { - color, _ := svc.colorSvc.GetRandom() - colorHex = color.GetHex() - } - tag = &models2.Tag{ - Id: primitive.NewObjectID(), - Name: tag.GetName(), - Color: colorHex, - Col: colName, - } - if err := delegate.NewModelDelegate(tag).Add(); err != nil { - return tagIds, trace.TraceError(err) - } - } - - // add to tag ids - tagIds = append(tagIds, tag.GetId()) - } - - return tagIds, nil -} - -func (svc *Service) UpdateTagsById(colName string, id primitive.ObjectID, tags []interfaces.Tag) (tagIds []primitive.ObjectID, err error) { - // get tag ids to update - tagIds, err = svc.GetTagIds(colName, tags) - if err != nil { - return tagIds, trace.TraceError(err) - } - - // update in db - a, err := svc.GetArtifactById(id) - if err != nil { - return tagIds, trace.TraceError(err) - } - a.TagIds = tagIds - if err := mongo.GetMongoCol(interfaces.ModelColNameArtifact).ReplaceId(id, a); err != nil { - return tagIds, err - } - return tagIds, nil -} - -func (svc *Service) UpdateTags(colName string, query bson.M, tags []interfaces.Tag) (tagIds []primitive.ObjectID, err error) { - // tag ids to update - tagIds, err = svc.GetTagIds(colName, tags) - if err != nil { - return tagIds, trace.TraceError(err) - } - - // update - update := bson.M{ - "_tid": tagIds, - } - - // fields - fields := []string{"_tid"} - - // update in db - if err := svc.GetBaseService(interfaces.ModelIdTag).Update(query, update, fields); err != nil { - return tagIds, trace.TraceError(err) - } - - return tagIds, nil -} diff --git a/core/models/service/tag_service_legacy.go b/core/models/service/tag_service_legacy.go deleted file mode 100644 index a78cf0675..000000000 --- a/core/models/service/tag_service_legacy.go +++ /dev/null @@ -1,118 +0,0 @@ -package service - -// -//import ( -// "github.com/crawlab-team/crawlab/core/interfaces" -// "github.com/crawlab-team/crawlab/db/mongo" -// "go.mongodb.org/mongo-driver/bson" -// "go.mongodb.org/mongo-driver/bson/primitive" -// mongo2 "go.mongodb.org/mongo-driver/mongo" -//) -// -//type TagServiceInterface interface { -// getTagIds(colName string, tags []Tag) (tagIds []primitive.ObjectID, err error) -// GetModelById(id primitive.ObjectID) (res Tag, err error) -// GetModel(query bson.M, opts *mongo.FindOptions) (res Tag, err error) -// GetModelList(query bson.M, opts *mongo.FindOptions) (res []Tag, err error) -// UpdateTagsById(colName string, id primitive.ObjectID, tags []Tag) (tagIds []primitive.ObjectID, err error) -// UpdateTags(colName string, query bson.M, tags []Tag) (tagIds []primitive.ObjectID, err error) -//} -// -//type tagService struct { -// *baseService -//} -// -//func (svc *tagService) getTagIds(colName string, tags []Tag) (tagIds []primitive.ObjectID, err error) { -// // iterate tag names -// for _, tag := range tags { -// // count of tags with the name -// tagDb, err := MustGetRootService().GetTag(bson.M{"name": tag.Name, "col": colName}, nil) -// if err == nil { -// // tag exists -// tag = tagDb -// } else if err == mongo2.ErrNoDocuments { -// // add new tag if not exists -// colorHex := tag.Color -// if colorHex == "" { -// color, _ := ColorService.GetRandom() -// colorHex = color.Hex -// } -// tag = Tag{ -// Name: tag.Name, -// Color: colorHex, -// Col: colName, -// } -// if err := tag.Add(); err != nil { -// return tagIds, err -// } -// } -// -// // add to tag ids -// tagIds = append(tagIds, tag.Id) -// } -// -// return tagIds, nil -//} -// -//func (svc *tagService) GetModelById(id primitive.ObjectID) (res Tag, err error) { -// err = svc.findId(id).One(&res) -// return res, err -//} -// -//func (svc *tagService) GetModel(query bson.M, opts *mongo.FindOptions) (res Tag, err error) { -// err = svc.find(query, opts).One(&res) -// return res, err -//} -// -//func (svc *tagService) GetModelList(query bson.M, opts *mongo.FindOptions) (res []Tag, err error) { -// err = svc.find(query, opts).All(&res) -// return res, err -//} -// -//func (svc *tagService) UpdateTagsById(colName string, id primitive.ObjectID, tags []Tag) (tagIds []primitive.ObjectID, err error) { -// // get tag ids to update -// tagIds, err = svc.getTagIds(colName, tags) -// if err != nil { -// return tagIds, err -// } -// -// // update in db -// a, err := MustGetRootService().GetArtifactById(id) -// if err != nil { -// return tagIds, err -// } -// a.TagIds = tagIds -// if err := mongo.GetMongoCol(interfaces.ModelColNameArtifact).ReplaceId(id, a); err != nil { -// return tagIds, err -// } -// return tagIds, nil -//} -// -//func (svc *tagService) UpdateTags(colName string, query bson.M, tags []Tag) (tagIds []primitive.ObjectID, err error) { -// // tag ids to update -// tagIds, err = svc.getTagIds(colName, tags) -// if err != nil { -// return tagIds, err -// } -// -// // update -// update := bson.M{ -// "_tid": tagIds, -// } -// -// // fields -// fields := []string{"_tid"} -// -// // update in db -// if err := ArtifactService.Update(query, update, fields); err != nil { -// return tagIds, err -// } -// -// return tagIds, nil -//} -// -//func NewTagService() (svc *tagService) { -// return &tagService{svc.GetBaseService(interfaces.ModelIdTag)} -//} -// -//var TagService *tagService diff --git a/core/models/service/task_queue_service.go b/core/models/service/task_queue_service.go deleted file mode 100644 index 7ade03269..000000000 --- a/core/models/service/task_queue_service.go +++ /dev/null @@ -1,40 +0,0 @@ -package service - -import ( - "github.com/crawlab-team/crawlab/core/errors" - "github.com/crawlab-team/crawlab/core/interfaces" - models2 "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/db/mongo" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -func convertTypeTaskQueueItem(d interface{}, err error) (res *models2.TaskQueueItem, err2 error) { - if err != nil { - return nil, err - } - res, ok := d.(*models2.TaskQueueItem) - if !ok { - return nil, errors.ErrorModelInvalidType - } - return res, nil -} - -func (svc *Service) GetTaskQueueItemById(id primitive.ObjectID) (res *models2.TaskQueueItem, err error) { - d, err := svc.GetBaseService(interfaces.ModelIdTaskQueue).GetById(id) - return convertTypeTaskQueueItem(d, err) -} - -func (svc *Service) GetTaskQueueItem(query bson.M, opts *mongo.FindOptions) (res *models2.TaskQueueItem, err error) { - d, err := svc.GetBaseService(interfaces.ModelIdTaskQueue).Get(query, opts) - return convertTypeTaskQueueItem(d, err) -} - -func (svc *Service) GetTaskQueueItemList(query bson.M, opts *mongo.FindOptions) (res []models2.TaskQueueItem, err error) { - l, err := svc.GetBaseService(interfaces.ModelIdTaskQueue).GetList(query, opts) - for _, doc := range l.GetModels() { - d := doc.(*models2.TaskQueueItem) - res = append(res, *d) - } - return res, nil -} diff --git a/core/models/service/task_service.go b/core/models/service/task_service.go deleted file mode 100644 index 3e5e64a51..000000000 --- a/core/models/service/task_service.go +++ /dev/null @@ -1,40 +0,0 @@ -package service - -import ( - "github.com/crawlab-team/crawlab/core/errors" - "github.com/crawlab-team/crawlab/core/interfaces" - models2 "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/db/mongo" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -func convertTypeTask(d interface{}, err error) (res *models2.Task, err2 error) { - if err != nil { - return nil, err - } - res, ok := d.(*models2.Task) - if !ok { - return nil, errors.ErrorModelInvalidType - } - return res, nil -} - -func (svc *Service) GetTaskById(id primitive.ObjectID) (res *models2.Task, err error) { - d, err := svc.GetBaseService(interfaces.ModelIdTask).GetById(id) - return convertTypeTask(d, err) -} - -func (svc *Service) GetTask(query bson.M, opts *mongo.FindOptions) (res *models2.Task, err error) { - d, err := svc.GetBaseService(interfaces.ModelIdTask).Get(query, opts) - return convertTypeTask(d, err) -} - -func (svc *Service) GetTaskList(query bson.M, opts *mongo.FindOptions) (res []models2.Task, err error) { - l, err := svc.GetBaseService(interfaces.ModelIdTask).GetList(query, opts) - for _, doc := range l.GetModels() { - d := doc.(*models2.Task) - res = append(res, *d) - } - return res, nil -} diff --git a/core/models/service/task_stat_service.go b/core/models/service/task_stat_service.go deleted file mode 100644 index 3d335104e..000000000 --- a/core/models/service/task_stat_service.go +++ /dev/null @@ -1,40 +0,0 @@ -package service - -import ( - "github.com/crawlab-team/crawlab/core/errors" - "github.com/crawlab-team/crawlab/core/interfaces" - models2 "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/db/mongo" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -func convertTypeTaskStat(d interface{}, err error) (res *models2.TaskStat, err2 error) { - if err != nil { - return nil, err - } - res, ok := d.(*models2.TaskStat) - if !ok { - return nil, errors.ErrorModelInvalidType - } - return res, nil -} - -func (svc *Service) GetTaskStatById(id primitive.ObjectID) (res *models2.TaskStat, err error) { - d, err := svc.GetBaseService(interfaces.ModelIdTaskStat).GetById(id) - return convertTypeTaskStat(d, err) -} - -func (svc *Service) GetTaskStat(query bson.M, opts *mongo.FindOptions) (res *models2.TaskStat, err error) { - d, err := svc.GetBaseService(interfaces.ModelIdTaskStat).Get(query, opts) - return convertTypeTaskStat(d, err) -} - -func (svc *Service) GetTaskStatList(query bson.M, opts *mongo.FindOptions) (res []models2.TaskStat, err error) { - l, err := svc.GetBaseService(interfaces.ModelIdTaskStat).GetList(query, opts) - for _, doc := range l.GetModels() { - d := doc.(*models2.TaskStat) - res = append(res, *d) - } - return res, nil -} diff --git a/core/models/service/token_service.go b/core/models/service/token_service.go deleted file mode 100644 index 026893531..000000000 --- a/core/models/service/token_service.go +++ /dev/null @@ -1,40 +0,0 @@ -package service - -import ( - "github.com/crawlab-team/crawlab/core/errors" - "github.com/crawlab-team/crawlab/core/interfaces" - models2 "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/db/mongo" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -func convertTypeToken(d interface{}, err error) (res *models2.Token, err2 error) { - if err != nil { - return nil, err - } - res, ok := d.(*models2.Token) - if !ok { - return nil, errors.ErrorModelInvalidType - } - return res, nil -} - -func (svc *Service) GetTokenById(id primitive.ObjectID) (res *models2.Token, err error) { - d, err := svc.GetBaseService(interfaces.ModelIdToken).GetById(id) - return convertTypeToken(d, err) -} - -func (svc *Service) GetToken(query bson.M, opts *mongo.FindOptions) (res *models2.Token, err error) { - d, err := svc.GetBaseService(interfaces.ModelIdToken).Get(query, opts) - return convertTypeToken(d, err) -} - -func (svc *Service) GetTokenList(query bson.M, opts *mongo.FindOptions) (res []models2.Token, err error) { - l, err := svc.GetBaseService(interfaces.ModelIdToken).GetList(query, opts) - for _, doc := range l.GetModels() { - d := doc.(*models2.Token) - res = append(res, *d) - } - return res, nil -} diff --git a/core/models/service/user_role_service.go b/core/models/service/user_role_service.go deleted file mode 100644 index fe610919b..000000000 --- a/core/models/service/user_role_service.go +++ /dev/null @@ -1,51 +0,0 @@ -package service - -import ( - "github.com/crawlab-team/crawlab/core/errors" - "github.com/crawlab-team/crawlab/core/interfaces" - models2 "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/db/mongo" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -func convertTypeUserRole(d interface{}, err error) (res *models2.UserRole, err2 error) { - if err != nil { - return nil, err - } - res, ok := d.(*models2.UserRole) - if !ok { - return nil, errors.ErrorModelInvalidType - } - return res, nil -} - -func (svc *Service) GetUserRoleById(id primitive.ObjectID) (res *models2.UserRole, err error) { - d, err := svc.GetBaseService(interfaces.ModelIdUserRole).GetById(id) - return convertTypeUserRole(d, err) -} - -func (svc *Service) GetUserRole(query bson.M, opts *mongo.FindOptions) (res *models2.UserRole, err error) { - d, err := svc.GetBaseService(interfaces.ModelIdUserRole).Get(query, opts) - return convertTypeUserRole(d, err) -} - -func (svc *Service) GetUserRoleList(query bson.M, opts *mongo.FindOptions) (res []models2.UserRole, err error) { - l, err := svc.GetBaseService(interfaces.ModelIdUserRole).GetList(query, opts) - if err != nil { - return nil, err - } - for _, doc := range l.GetModels() { - d := doc.(*models2.UserRole) - res = append(res, *d) - } - return res, nil -} - -func (svc *Service) GetUserRoleListByUserId(id primitive.ObjectID, opts *mongo.FindOptions) (res []models2.UserRole, err error) { - return svc.GetUserRoleList(bson.M{"user_id": id}, opts) -} - -func (svc *Service) GetUserRoleListByRoleId(id primitive.ObjectID, opts *mongo.FindOptions) (res []models2.UserRole, err error) { - return svc.GetUserRoleList(bson.M{"role_id": id}, opts) -} diff --git a/core/models/service/user_service.go b/core/models/service/user_service.go deleted file mode 100644 index ab9c29b1e..000000000 --- a/core/models/service/user_service.go +++ /dev/null @@ -1,58 +0,0 @@ -package service - -import ( - "github.com/crawlab-team/crawlab/core/errors" - "github.com/crawlab-team/crawlab/core/interfaces" - models2 "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/db/mongo" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -func convertTypeUser(d interface{}, err error) (res *models2.User, err2 error) { - if err != nil { - return nil, err - } - res, ok := d.(*models2.User) - if !ok { - return nil, errors.ErrorModelInvalidType - } - return res, nil -} - -func (svc *Service) GetUserById(id primitive.ObjectID) (res *models2.User, err error) { - d, err := svc.GetBaseService(interfaces.ModelIdUser).GetById(id) - return convertTypeUser(d, err) -} - -func (svc *Service) GetUser(query bson.M, opts *mongo.FindOptions) (res *models2.User, err error) { - d, err := svc.GetBaseService(interfaces.ModelIdUser).Get(query, opts) - return convertTypeUser(d, err) -} - -func (svc *Service) GetUserList(query bson.M, opts *mongo.FindOptions) (res []models2.User, err error) { - l, err := svc.GetBaseService(interfaces.ModelIdUser).GetList(query, opts) - for _, doc := range l.GetModels() { - d := doc.(*models2.User) - res = append(res, *d) - } - return res, nil -} - -func (svc *Service) GetUserByUsername(username string, opts *mongo.FindOptions) (res *models2.User, err error) { - query := bson.M{"username": username} - return svc.GetUser(query, opts) -} - -func (svc *Service) GetUserByUsernameWithPassword(username string, opts *mongo.FindOptions) (res *models2.User, err error) { - u, err := svc.GetUserByUsername(username, opts) - if err != nil { - return nil, err - } - p, err := svc.GetPasswordById(u.Id) - if err != nil { - return nil, err - } - u.Password = p.Password - return u, nil -} diff --git a/core/models/service/variable_service.go b/core/models/service/variable_service.go deleted file mode 100644 index 8b72371db..000000000 --- a/core/models/service/variable_service.go +++ /dev/null @@ -1,45 +0,0 @@ -package service - -import ( - "github.com/crawlab-team/crawlab/core/errors" - "github.com/crawlab-team/crawlab/core/interfaces" - models2 "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/db/mongo" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -func convertTypeVariable(d interface{}, err error) (res *models2.Variable, err2 error) { - if err != nil { - return nil, err - } - res, ok := d.(*models2.Variable) - if !ok { - return nil, errors.ErrorModelInvalidType - } - return res, nil -} - -func (svc *Service) GetVariableById(id primitive.ObjectID) (res *models2.Variable, err error) { - d, err := svc.GetBaseService(interfaces.ModelIdVariable).GetById(id) - return convertTypeVariable(d, err) -} - -func (svc *Service) GetVariable(query bson.M, opts *mongo.FindOptions) (res *models2.Variable, err error) { - d, err := svc.GetBaseService(interfaces.ModelIdVariable).Get(query, opts) - return convertTypeVariable(d, err) -} - -func (svc *Service) GetVariableList(query bson.M, opts *mongo.FindOptions) (res []models2.Variable, err error) { - l, err := svc.GetBaseService(interfaces.ModelIdVariable).GetList(query, opts) - for _, doc := range l.GetModels() { - d := doc.(*models2.Variable) - res = append(res, *d) - } - return res, nil -} - -func (svc *Service) GetVariableByKey(key string, opts *mongo.FindOptions) (res *models2.Variable, err error) { - query := bson.M{"key": key} - return svc.GetVariable(query, opts) -} diff --git a/db/mongo/client.go b/core/mongo/client.go similarity index 74% rename from db/mongo/client.go rename to core/mongo/client.go index e5c03f90d..07fbc3021 100644 --- a/db/mongo/client.go +++ b/core/mongo/client.go @@ -4,13 +4,12 @@ import ( "context" "encoding/json" "fmt" - "github.com/apex/log" "github.com/cenkalti/backoff/v4" - "github.com/crawlab-team/crawlab/trace" "github.com/spf13/viper" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" "sync" + "time" ) var AppName = "crawlab-db" @@ -33,10 +32,10 @@ func GetMongoClient(opts ...ClientOption) (c *mongo.Client, err error) { _opts.Host = "localhost" } } - if _opts.Port == "" { - _opts.Port = viper.GetString("mongo.port") - if _opts.Port == "" { - _opts.Port = "27017" + if _opts.Port == 0 { + _opts.Port = viper.GetInt("mongo.port") + if _opts.Port == 0 { + _opts.Port = 27017 } } if _opts.Db == "" { @@ -70,7 +69,7 @@ func GetMongoClient(opts ...ClientOption) (c *mongo.Client, err error) { // client options key json string _optsKeyBytes, err := json.Marshal(_opts) if err != nil { - return nil, trace.TraceError(err) + return nil, err } _optsKey := string(_optsKeyBytes) @@ -81,8 +80,9 @@ func GetMongoClient(opts ...ClientOption) (c *mongo.Client, err error) { } // create new mongo client - c, err = newMongoClient(_opts.Context, _opts) + c, err = newMongoClient(_opts) if err != nil { + logger.Errorf("create mongo client error: %v", err) return nil, err } @@ -94,7 +94,7 @@ func GetMongoClient(opts ...ClientOption) (c *mongo.Client, err error) { return c, nil } -func newMongoClient(ctx context.Context, _opts *ClientOptions) (c *mongo.Client, err error) { +func newMongoClient(_opts *ClientOptions) (c *mongo.Client, err error) { // mongo client options mongoOpts := &options.ClientOptions{ AppName: &AppName, @@ -105,9 +105,8 @@ func newMongoClient(ctx context.Context, _opts *ClientOptions) (c *mongo.Client, mongoOpts.ApplyURI(_opts.Uri) } else { // uri is unset - - // username and password are set if _opts.Username != "" && _opts.Password != "" { + // username and password are set mongoOpts.SetAuth(options.Credential{ AuthMechanism: _opts.AuthMechanism, AuthMechanismProperties: _opts.AuthMechanismProperties, @@ -123,25 +122,32 @@ func newMongoClient(ctx context.Context, _opts *ClientOptions) (c *mongo.Client, mongoOpts.SetHosts(_opts.Hosts) } else { // hosts are unset - mongoOpts.ApplyURI(fmt.Sprintf("mongodb://%s:%s/%s", _opts.Host, _opts.Port, _opts.Db)) + mongoOpts.ApplyURI(fmt.Sprintf("mongodb://%s:%d/%s", _opts.Host, _opts.Port, _opts.Db)) } } // attempt to connect with retry - bp := backoff.NewExponentialBackOff() - err = backoff.Retry(func() error { - errMsg := fmt.Sprintf("waiting for connect mongo database, after %f seconds try again.", bp.NextBackOff().Seconds()) - c, err = mongo.NewClient(mongoOpts) + op := func() error { + ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second) + defer cancel() + + logger.Infof("connecting to mongo") + c, err = mongo.Connect(ctx, mongoOpts) if err != nil { - log.WithError(err).Warnf(errMsg) - return err - } - if err := c.Connect(ctx); err != nil { - log.WithError(err).Warnf(errMsg) return err } + logger.Infof("connected to mongo") return nil - }, bp) + } + b := backoff.NewExponentialBackOff() + n := func(err error, duration time.Duration) { + logger.Errorf("connect to mongo error: %v. retrying in %s", err, duration) + } + err = backoff.RetryNotify(op, b, n) + if err != nil { + logger.Errorf("connect to mongo error: %v", err) + return nil, err + } return c, nil } diff --git a/core/mongo/client_options.go b/core/mongo/client_options.go new file mode 100644 index 000000000..821a6e23b --- /dev/null +++ b/core/mongo/client_options.go @@ -0,0 +1,19 @@ +package mongo + +import "context" + +type ClientOption func(options *ClientOptions) + +type ClientOptions struct { + Context context.Context + Uri string + Host string + Port int + Db string + Hosts []string + Username string + Password string + AuthSource string + AuthMechanism string + AuthMechanismProperties map[string]string +} diff --git a/db/mongo/col.go b/core/mongo/col.go similarity index 84% rename from db/mongo/col.go rename to core/mongo/col.go index 67f3b3479..4d3cddb96 100644 --- a/db/mongo/col.go +++ b/core/mongo/col.go @@ -2,8 +2,7 @@ package mongo import ( "context" - "github.com/crawlab-team/crawlab/db/errors" - "github.com/crawlab-team/crawlab/trace" + "errors" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" "go.mongodb.org/mongo-driver/mongo" @@ -53,18 +52,21 @@ type Col struct { func (col *Col) Insert(doc interface{}) (id primitive.ObjectID, err error) { res, err := col.c.InsertOne(col.ctx, doc) if err != nil { - return primitive.NilObjectID, trace.TraceError(err) + logger.Errorf("error inserting document: %v", err) + return primitive.NilObjectID, err } if id, ok := res.InsertedID.(primitive.ObjectID); ok { return id, nil } - return primitive.NilObjectID, trace.TraceError(errors.ErrInvalidType) + err = errors.New("InsertedID is not ObjectID") + logger.Errorf("error inserting document: %v", err) + return primitive.NilObjectID, err } func (col *Col) InsertMany(docs []interface{}) (ids []primitive.ObjectID, err error) { res, err := col.c.InsertMany(col.ctx, docs) if err != nil { - return nil, trace.TraceError(err) + return nil, err } for _, v := range res.InsertedIDs { switch v.(type) { @@ -72,7 +74,9 @@ func (col *Col) InsertMany(docs []interface{}) (ids []primitive.ObjectID, err er id := v.(primitive.ObjectID) ids = append(ids, id) default: - return nil, trace.TraceError(errors.ErrInvalidType) + err = errors.New("InsertedID is not ObjectID") + logger.Errorf("error inserting document: %v", err) + return nil, err } } return ids, nil @@ -81,7 +85,8 @@ func (col *Col) InsertMany(docs []interface{}) (ids []primitive.ObjectID, err er func (col *Col) UpdateId(id primitive.ObjectID, update interface{}) (err error) { _, err = col.c.UpdateOne(col.ctx, bson.M{"_id": id}, update) if err != nil { - return trace.TraceError(err) + logger.Errorf("error updating document: %v", err) + return err } return nil } @@ -97,7 +102,8 @@ func (col *Col) UpdateWithOptions(query bson.M, update interface{}, opts *option _, err = col.c.UpdateMany(col.ctx, query, update, opts) } if err != nil { - return trace.TraceError(err) + logger.Errorf("error updating document: %v", err) + return err } return nil } @@ -117,7 +123,8 @@ func (col *Col) ReplaceWithOptions(query bson.M, doc interface{}, opts *options. _, err = col.c.ReplaceOne(col.ctx, query, doc, opts) } if err != nil { - return trace.TraceError(err) + logger.Errorf("error replacing document: %v", err) + return err } return nil } @@ -125,7 +132,8 @@ func (col *Col) ReplaceWithOptions(query bson.M, doc interface{}, opts *options. func (col *Col) DeleteId(id primitive.ObjectID) (err error) { _, err = col.c.DeleteOne(col.ctx, bson.M{"_id": id}) if err != nil { - return trace.TraceError(err) + logger.Errorf("error deleting document: %v", err) + return err } return nil } @@ -141,7 +149,8 @@ func (col *Col) DeleteWithOptions(query bson.M, opts *options.DeleteOptions) (er _, err = col.c.DeleteMany(col.ctx, query, opts) } if err != nil { - return trace.TraceError(err) + logger.Errorf("error deleting document: %v", err) + return err } return nil } @@ -223,7 +232,8 @@ func (col *Col) Aggregate(pipeline mongo.Pipeline, opts *options.AggregateOption func (col *Col) CreateIndex(indexModel mongo.IndexModel) (err error) { _, err = col.c.Indexes().CreateOne(col.ctx, indexModel) if err != nil { - return trace.TraceError(err) + logger.Errorf("error creating index: %v", err) + return err } return nil } @@ -231,7 +241,8 @@ func (col *Col) CreateIndex(indexModel mongo.IndexModel) (err error) { func (col *Col) CreateIndexes(indexModels []mongo.IndexModel) (err error) { _, err = col.c.Indexes().CreateMany(col.ctx, indexModels) if err != nil { - return trace.TraceError(err) + logger.Errorf("error creating indexes: %v", err) + return err } return nil } @@ -247,7 +258,12 @@ func (col *Col) MustCreateIndexes(indexModels []mongo.IndexModel) { func (col *Col) DeleteIndex(name string) (err error) { _, err = col.c.Indexes().DropOne(col.ctx, name) if err != nil { - return trace.TraceError(err) + var e mongo.CommandError + if errors.As(err, &e) && e.HasErrorCode(26) { + return nil + } + logger.Errorf("error deleting index: %v", err) + return err } return nil } @@ -255,7 +271,12 @@ func (col *Col) DeleteIndex(name string) (err error) { func (col *Col) DeleteAllIndexes() (err error) { _, err = col.c.Indexes().DropAll(col.ctx) if err != nil { - return trace.TraceError(err) + var e mongo.CommandError + if errors.As(err, &e) && e.HasErrorCode(26) { + return nil + } + logger.Errorf("error deleting all indexes: %v", err) + return err } return nil } @@ -263,9 +284,11 @@ func (col *Col) DeleteAllIndexes() (err error) { func (col *Col) ListIndexes() (indexes []map[string]interface{}, err error) { cur, err := col.c.Indexes().List(col.ctx) if err != nil { + logger.Errorf("error listing indexes: %v", err) return nil, err } if err := cur.All(col.ctx, &indexes); err != nil { + logger.Errorf("error listing indexes: %v", err) return nil, err } return indexes, nil diff --git a/db/mongo/col_test.go b/core/mongo/col_test.go similarity index 77% rename from db/mongo/col_test.go rename to core/mongo/col_test.go index 4d8533d31..467ed6729 100644 --- a/db/mongo/col_test.go +++ b/core/mongo/col_test.go @@ -2,13 +2,15 @@ package mongo import ( "fmt" + "strconv" + "testing" + "github.com/spf13/viper" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" "go.mongodb.org/mongo-driver/mongo" - "strconv" - "testing" ) type ColTestObject struct { @@ -49,29 +51,38 @@ func cleanupColTest(to *ColTestObject) { } func TestGetMongoCol(t *testing.T) { + // Test getting a MongoDB collection with default database colName := "test_col" + // Get collection and verify the name matches col := GetMongoCol(colName) require.Equal(t, colName, col.c.Name()) } func TestGetMongoColWithDb(t *testing.T) { + // Test getting a MongoDB collection with specified database dbName := "test_db" colName := "test_col" - col := GetMongoColWithDb(colName, dbName) + // Get database instance first + db := GetMongoDb(dbName) + // Get collection with specific database and verify both names + col := GetMongoColWithDb(colName, db) require.Equal(t, colName, col.c.Name()) require.Equal(t, dbName, col.db.Name()) } func TestCol_Insert(t *testing.T) { + // Setup test environment to, err := setupColTest() require.Nil(t, err) + // Insert a single document id, err := to.col.Insert(bson.M{"key": "value"}) require.Nil(t, err) require.IsType(t, primitive.ObjectID{}, id) + // Verify the inserted document var doc map[string]string err = to.col.FindId(id).One(&doc) require.Nil(t, err) @@ -81,36 +92,48 @@ func TestCol_Insert(t *testing.T) { } func TestCol_InsertMany(t *testing.T) { + // Setup test environment to, err := setupColTest() require.Nil(t, err) + // Create test data: 10 documents with incrementing values n := 10 var docs []interface{} for i := 0; i < n; i++ { docs = append(docs, bson.M{"key": fmt.Sprintf("value-%d", i)}) } + + // Insert multiple documents at once ids, err := to.col.InsertMany(docs) require.Nil(t, err) require.Equal(t, n, len(ids)) + // Verify all documents were inserted correctly + // Retrieve all documents sorted by _id var resDocs []map[string]string err = to.col.Find(nil, &FindOptions{Sort: bson.D{{"_id", 1}}}).All(&resDocs) require.Nil(t, err) require.Equal(t, n, len(resDocs)) + + // Verify each document has correct value for i, doc := range resDocs { require.Equal(t, fmt.Sprintf("value-%d", i), doc["key"]) } + // Cleanup test environment cleanupColTest(to) } func TestCol_UpdateId(t *testing.T) { + // Setup test environment to, err := setupColTest() require.Nil(t, err) + // Insert initial document id, err := to.col.Insert(bson.M{"key": "old-value"}) require.Nil(t, err) + // Update document by ID using $set operator err = to.col.UpdateId(id, bson.M{ "$set": bson.M{ "key": "new-value", @@ -118,6 +141,7 @@ func TestCol_UpdateId(t *testing.T) { }) require.Nil(t, err) + // Verify the update var doc map[string]string err = to.col.FindId(id).One(&doc) require.Nil(t, err) @@ -127,15 +151,18 @@ func TestCol_UpdateId(t *testing.T) { } func TestCol_Update(t *testing.T) { + // Setup test environment to, err := setupColTest() require.Nil(t, err) + // Prepare test documents n := 10 var docs []interface{} for i := 0; i < n; i++ { docs = append(docs, bson.M{"key": fmt.Sprintf("old-value-%d", i)}) } + // Update all documents (nil query means update all) err = to.col.Update(nil, bson.M{ "$set": bson.M{ "key": "new-value", @@ -143,6 +170,7 @@ func TestCol_Update(t *testing.T) { }) require.Nil(t, err) + // Verify all documents were updated var resDocs []map[string]string err = to.col.Find(nil, &FindOptions{Sort: bson.D{{"_id", 1}}}).All(&resDocs) require.Nil(t, err) @@ -154,20 +182,25 @@ func TestCol_Update(t *testing.T) { } func TestCol_ReplaceId(t *testing.T) { + // Setup test environment to, err := setupColTest() require.Nil(t, err) + // Insert initial document id, err := to.col.Insert(bson.M{"key": "old-value"}) require.Nil(t, err) + // Get the document and modify it var doc map[string]interface{} err = to.col.FindId(id).One(&doc) require.Nil(t, err) doc["key"] = "new-value" + // Replace the entire document err = to.col.ReplaceId(id, doc) require.Nil(t, err) + // Verify the replacement err = to.col.FindId(id).One(doc) require.Nil(t, err) require.Equal(t, "new-value", doc["key"]) @@ -198,15 +231,19 @@ func TestCol_Replace(t *testing.T) { } func TestCol_DeleteId(t *testing.T) { + // Setup test environment to, err := setupColTest() require.Nil(t, err) + // Insert a document to be deleted id, err := to.col.Insert(bson.M{"key": "value"}) require.Nil(t, err) + // Delete the document by ID err = to.col.DeleteId(id) require.Nil(t, err) + // Verify deletion by checking collection count total, err := to.col.Count(nil) require.Nil(t, err) require.Equal(t, 0, total) @@ -260,9 +297,11 @@ func TestCol_FindId(t *testing.T) { } func TestCol_Find(t *testing.T) { + // Setup test environment to, err := setupColTest() require.Nil(t, err) + // Insert test documents n := 10 var docs []interface{} for i := 0; i < n; i++ { @@ -275,26 +314,31 @@ func TestCol_Find(t *testing.T) { require.Nil(t, err) require.Equal(t, n, len(ids)) + // Test 1: Find all documents err = to.col.Find(nil, nil).All(&docs) require.Nil(t, err) require.Equal(t, n, len(docs)) + // Test 2: Find documents with conditional query ($gte) err = to.col.Find(bson.M{"key": bson.M{"$gte": fmt.Sprintf("value-%d", 5)}}, nil).All(&docs) require.Nil(t, err) require.Equal(t, n-5, len(docs)) + // Test 3: Test skip functionality err = to.col.Find(nil, &FindOptions{ Skip: 5, }).All(&docs) require.Nil(t, err) require.Equal(t, n-5, len(docs)) + // Test 4: Test limit functionality err = to.col.Find(nil, &FindOptions{ Limit: 5, }).All(&docs) require.Nil(t, err) require.Equal(t, 5, len(docs)) + // Test 5: Test ascending sort var resDocs []TestDocument err = to.col.Find(nil, &FindOptions{ Sort: bson.D{{"key", 1}}, @@ -303,6 +347,7 @@ func TestCol_Find(t *testing.T) { require.Greater(t, len(resDocs), 0) require.Equal(t, "value-0", resDocs[0].Key) + // Test 6: Test descending sort err = to.col.Find(nil, &FindOptions{ Sort: bson.D{{"key", -1}}, }).All(&resDocs) @@ -310,23 +355,29 @@ func TestCol_Find(t *testing.T) { require.Greater(t, len(resDocs), 0) require.Equal(t, fmt.Sprintf("value-%d", n-1), resDocs[0].Key) + // Test 7: Test array query with $in operator var resDocs2 []TestDocument err = to.col.Find(bson.M{"tags": bson.M{"$in": []string{"test tag"}}}, nil).All(&resDocs2) require.Nil(t, err) require.Greater(t, len(resDocs2), 0) + // Cleanup test environment cleanupColTest(to) } func TestCol_CreateIndex(t *testing.T) { + // Setup test environment to, err := setupColTest() require.Nil(t, err) + // Create a single index on the 'key' field err = to.col.CreateIndex(mongo.IndexModel{ Keys: bson.D{{"key", 1}}, }) require.Nil(t, err) + // Verify index creation + // Should have 2 indexes: default _id index and our new index indexes, err := to.col.ListIndexes() require.Nil(t, err) require.Equal(t, 2, len(indexes)) @@ -335,22 +386,12 @@ func TestCol_CreateIndex(t *testing.T) { } func TestCol_Aggregate(t *testing.T) { + // Setup test environment to, err := setupColTest() require.Nil(t, err) - n := 10 - v := 2 - var docs []interface{} - for i := 0; i < n; i++ { - docs = append(docs, TestDocument{ - Key: fmt.Sprintf("%d", i%2), - Value: v, - }) - } - ids, err := to.col.InsertMany(docs) - require.Nil(t, err) - require.Equal(t, n, len(ids)) - + // Define aggregation pipeline + var results []TestAggregateResult pipeline := mongo.Pipeline{ { { @@ -375,7 +416,26 @@ func TestCol_Aggregate(t *testing.T) { }, }, } - var results []TestAggregateResult + + // Test empty collection aggregation + err = to.col.Aggregate(pipeline, nil).All(&results) + assert.Nil(t, err) + + // Insert test documents + n := 10 // total documents + v := 2 // value for each document + var docs []interface{} + for i := 0; i < n; i++ { + docs = append(docs, TestDocument{ + Key: fmt.Sprintf("%d", i%2), // alternates between "0" and "1" + Value: v, + }) + } + ids, err := to.col.InsertMany(docs) + require.Nil(t, err) + require.Equal(t, n, len(ids)) + + // Run aggregation on populate err = to.col.Aggregate(pipeline, nil).All(&results) require.Nil(t, err) require.Equal(t, 2, len(results)) @@ -391,6 +451,9 @@ func TestCol_CreateIndexes(t *testing.T) { to, err := setupColTest() require.Nil(t, err) + indexes, err := to.col.ListIndexes() + assert.Nil(t, err) + err = to.col.CreateIndexes([]mongo.IndexModel{ { Keys: bson.D{{"key", 1}}, @@ -401,7 +464,7 @@ func TestCol_CreateIndexes(t *testing.T) { }) require.Nil(t, err) - indexes, err := to.col.ListIndexes() + indexes, err = to.col.ListIndexes() require.Nil(t, err) require.Equal(t, 3, len(indexes)) @@ -412,6 +475,9 @@ func TestCol_DeleteIndex(t *testing.T) { to, err := setupColTest() require.Nil(t, err) + err = to.col.DeleteIndex("non-existent-index") + assert.Nil(t, err) + err = to.col.CreateIndex(mongo.IndexModel{ Keys: bson.D{{"key", 1}}, }) @@ -419,29 +485,35 @@ func TestCol_DeleteIndex(t *testing.T) { indexes, err := to.col.ListIndexes() require.Nil(t, err) - require.Equal(t, 2, len(indexes)) + assert.Equal(t, 2, len(indexes)) for _, index := range indexes { name, ok := index["name"].(string) - require.True(t, ok) + assert.True(t, ok) if name != "_id_" { err = to.col.DeleteIndex(name) - require.Nil(t, err) + assert.Nil(t, err) break } } indexes, err = to.col.ListIndexes() require.Nil(t, err) - require.Equal(t, 1, len(indexes)) + assert.Equal(t, 1, len(indexes)) cleanupColTest(to) } func TestCol_DeleteIndexes(t *testing.T) { + // Setup test environment to, err := setupColTest() require.Nil(t, err) + // Delete all existing indexes + err = to.col.DeleteAllIndexes() + assert.Nil(t, err) + + // Create multiple test indexes err = to.col.CreateIndexes([]mongo.IndexModel{ { Keys: bson.D{{"key", 1}}, @@ -452,9 +524,11 @@ func TestCol_DeleteIndexes(t *testing.T) { }) require.Nil(t, err) + // Delete all indexes except the default _id index err = to.col.DeleteAllIndexes() require.Nil(t, err) + // Verify only default _id index remains indexes, err := to.col.ListIndexes() require.Nil(t, err) require.Equal(t, 1, len(indexes)) diff --git a/core/mongo/db.go b/core/mongo/db.go new file mode 100644 index 000000000..79da5e36d --- /dev/null +++ b/core/mongo/db.go @@ -0,0 +1,28 @@ +package mongo + +import ( + "github.com/crawlab-team/crawlab/core/config" + "github.com/spf13/viper" + "go.mongodb.org/mongo-driver/mongo" +) + +func init() { + config.InitConfig() +} + +func GetMongoDb(dbName string) *mongo.Database { + // Use default database name if not provided + if dbName == "" { + if dbName = viper.GetString("mongo.db"); dbName == "" { + dbName = "test" + } + } + + c, err := GetMongoClient() + if err != nil { + logger.Errorf("error getting mongo client: %v", err) + return nil + } + + return c.Database(dbName) +} diff --git a/db/generic/list.go b/core/mongo/list.go similarity index 92% rename from db/generic/list.go rename to core/mongo/list.go index 99e30fea5..09b45da1c 100644 --- a/db/generic/list.go +++ b/core/mongo/list.go @@ -1,4 +1,4 @@ -package generic +package mongo type ListQueryCondition struct { Key string diff --git a/core/mongo/logger.go b/core/mongo/logger.go new file mode 100644 index 000000000..1b8c9b3c5 --- /dev/null +++ b/core/mongo/logger.go @@ -0,0 +1,5 @@ +package mongo + +import "github.com/crawlab-team/crawlab/core/utils" + +var logger = utils.NewLogger("Mongo") diff --git a/db/generic/op.go b/core/mongo/op.go similarity index 72% rename from db/generic/op.go rename to core/mongo/op.go index 0051d39b3..42d2a8905 100644 --- a/db/generic/op.go +++ b/core/mongo/op.go @@ -1,4 +1,4 @@ -package generic +package mongo type Op string diff --git a/db/mongo/result.go b/core/mongo/result.go similarity index 76% rename from db/mongo/result.go rename to core/mongo/result.go index add5f3561..a34e9bd3c 100644 --- a/db/mongo/result.go +++ b/core/mongo/result.go @@ -2,7 +2,7 @@ package mongo import ( "context" - "github.com/crawlab-team/crawlab/db/errors" + "errors" "go.mongodb.org/mongo-driver/mongo" ) @@ -12,17 +12,6 @@ type FindResultInterface interface { GetCol() (col *Col) GetSingleResult() (res *mongo.SingleResult) GetCursor() (cur *mongo.Cursor) - GetError() (err error) -} - -func NewFindResult() (fr *FindResult) { - return &FindResult{} -} - -func NewFindResultWithError(err error) (fr *FindResult) { - return &FindResult{ - err: err, - } } type FindResult struct { @@ -32,11 +21,6 @@ type FindResult struct { err error } -func (fr *FindResult) GetError() (err error) { - //TODO implement me - panic("implement me") -} - func (fr *FindResult) One(val interface{}) (err error) { if fr.err != nil { return fr.err @@ -61,7 +45,7 @@ func (fr *FindResult) All(val interface{}) (err error) { ctx = fr.col.ctx } if fr.cur == nil { - return errors.ErrNoCursor + return errors.New("no cursor") } if !fr.cur.TryNext(ctx) { return ctx.Err() diff --git a/db/generic/sort.go b/core/mongo/sort.go similarity index 92% rename from db/generic/sort.go rename to core/mongo/sort.go index 388909c27..46db82f70 100644 --- a/db/generic/sort.go +++ b/core/mongo/sort.go @@ -1,4 +1,4 @@ -package generic +package mongo type SortDirection string diff --git a/db/mongo/transaction.go b/core/mongo/transaction.go similarity index 100% rename from db/mongo/transaction.go rename to core/mongo/transaction.go diff --git a/core/mongo/utils.go b/core/mongo/utils.go new file mode 100644 index 000000000..2932c0078 --- /dev/null +++ b/core/mongo/utils.go @@ -0,0 +1,36 @@ +package mongo + +import "go.mongodb.org/mongo-driver/bson" + +func GetMongoQuery(query ListQuery) (res bson.M) { + res = bson.M{} + for _, c := range query { + switch c.Op { + case OpEqual: + res[c.Key] = c.Value + default: + res[c.Key] = bson.M{ + c.Op: c.Value, + } + } + } + return res +} + +func GetMongoOpts(opts *ListOptions) (res *FindOptions) { + var sort bson.D + for _, s := range opts.Sort { + direction := 1 + if s.Direction == SortDirectionAsc { + direction = 1 + } else if s.Direction == SortDirectionDesc { + direction = -1 + } + sort = append(sort, bson.E{Key: s.Key, Value: direction}) + } + return &FindOptions{ + Skip: opts.Skip, + Limit: opts.Limit, + Sort: sort, + } +} diff --git a/core/node/config/config.go b/core/node/config/config.go index a869e7e6f..67901d1c1 100644 --- a/core/node/config/config.go +++ b/core/node/config/config.go @@ -1,68 +1,15 @@ package config import ( - "github.com/crawlab-team/crawlab/core/constants" "github.com/crawlab-team/crawlab/core/entity" "github.com/crawlab-team/crawlab/core/utils" - "github.com/spf13/viper" ) -type Config entity.NodeInfo - -type Options struct { - Key string - Name string - IsMaster bool - AuthKey string - MaxRunners int -} - -var DefaultMaxRunner = 8 - -var DefaultConfigOptions = &Options{ - Key: utils.NewUUIDString(), - IsMaster: utils.IsMaster(), - AuthKey: constants.DefaultGrpcAuthKey, - MaxRunners: 0, -} - -func NewConfig(opts *Options) (cfg *Config) { - if opts == nil { - opts = DefaultConfigOptions - } - if opts.Key == "" { - if viper.GetString("node.key") != "" { - opts.Key = viper.GetString("node.key") - } else { - opts.Key = utils.NewUUIDString() - } - } - if opts.Name == "" { - if viper.GetString("node.name") != "" { - opts.Name = viper.GetString("node.name") - } else { - opts.Name = opts.Key - } - } - if opts.AuthKey == "" { - if viper.GetString("grpc.authKey") != "" { - opts.AuthKey = viper.GetString("grpc.authKey") - } else { - opts.AuthKey = constants.DefaultGrpcAuthKey - } - } - if opts.MaxRunners == 0 { - if viper.GetInt("task.handler.maxRunners") != 0 { - opts.MaxRunners = viper.GetInt("task.handler.maxRunners") - } else { - opts.MaxRunners = DefaultMaxRunner - } - } - return &Config{ - Key: opts.Key, - Name: opts.Name, - IsMaster: opts.IsMaster, - AuthKey: opts.AuthKey, - MaxRunners: opts.MaxRunners, +func newConfig() (cfg *entity.NodeInfo) { + return &entity.NodeInfo{ + Key: utils.GetNodeKey(), + Name: utils.GetNodeName(), + IsMaster: utils.IsMaster(), + MaxRunners: utils.GetNodeMaxRunners(), } } diff --git a/core/node/config/config_service.go b/core/node/config/config_service.go index 9a4cee4fc..93e037242 100644 --- a/core/node/config/config_service.go +++ b/core/node/config/config_service.go @@ -2,49 +2,53 @@ package config import ( "encoding/json" - "github.com/crawlab-team/crawlab/core/config" "github.com/crawlab-team/crawlab/core/entity" "github.com/crawlab-team/crawlab/core/interfaces" "github.com/crawlab-team/crawlab/core/utils" - "github.com/crawlab-team/crawlab/trace" "os" "path/filepath" "sync" ) type Service struct { - cfg *Config - path string + cfg *entity.NodeInfo + interfaces.Logger } func (svc *Service) Init() (err error) { + metadataConfigPath := utils.GetMetadataConfigPath() + // check config directory path - configDirPath := filepath.Dir(svc.path) + configDirPath := filepath.Dir(metadataConfigPath) if !utils.Exists(configDirPath) { if err := os.MkdirAll(configDirPath, os.FileMode(0766)); err != nil { - return trace.TraceError(err) + svc.Errorf("create config directory error: %v", err) + return err } } - if !utils.Exists(svc.path) { - // not exists, set to default config - // and create a config file for persistence - svc.cfg = NewConfig(nil) + if !utils.Exists(metadataConfigPath) { + // not exists, set to default config, and create a config file for persistence + svc.cfg = newConfig() data, err := json.Marshal(svc.cfg) if err != nil { - return trace.TraceError(err) + svc.Errorf("marshal config error: %v", err) + return err } - if err := os.WriteFile(svc.path, data, os.FileMode(0766)); err != nil { - return trace.TraceError(err) + if err := os.WriteFile(metadataConfigPath, data, os.FileMode(0766)); err != nil { + svc.Errorf("write config file error: %v", err) + return err } } else { // exists, read and set to config - data, err := os.ReadFile(svc.path) + data, err := os.ReadFile(metadataConfigPath) if err != nil { - return trace.TraceError(err) + svc.Errorf("read config file error: %v", err) + return err } if err := json.Unmarshal(data, svc.cfg); err != nil { - return trace.TraceError(err) + svc.Errorf("unmarshal config error: %v", err) + return err } } @@ -86,27 +90,13 @@ func (svc *Service) GetMaxRunners() (res int) { return svc.cfg.MaxRunners } -func (svc *Service) GetConfigPath() (path string) { - return svc.path -} - -func (svc *Service) SetConfigPath(path string) { - svc.path = path -} - func newNodeConfigService() (svc2 interfaces.NodeConfigService, err error) { - // cfg - cfg := NewConfig(nil) - // config service svc := &Service{ - cfg: cfg, + cfg: newConfig(), + Logger: utils.NewLogger("NodeConfigService"), } - // normalize config path - cfgPath := config.GetConfigPath() - svc.SetConfigPath(cfgPath) - // init if err := svc.Init(); err != nil { return nil, err @@ -116,7 +106,7 @@ func newNodeConfigService() (svc2 interfaces.NodeConfigService, err error) { } var _service interfaces.NodeConfigService -var _serviceOnce = new(sync.Once) +var _serviceOnce sync.Once func GetNodeConfigService() interfaces.NodeConfigService { _serviceOnce.Do(func() { diff --git a/core/node/config/options.go b/core/node/config/options.go deleted file mode 100644 index 3bc297191..000000000 --- a/core/node/config/options.go +++ /dev/null @@ -1,13 +0,0 @@ -package config - -import ( - "github.com/crawlab-team/crawlab/core/interfaces" -) - -type Option func(svc interfaces.NodeConfigService) - -func WithConfigPath(path string) Option { - return func(svc interfaces.NodeConfigService) { - svc.SetConfigPath(path) - } -} diff --git a/core/node/service/master_service.go b/core/node/service/master_service.go index 3ade5da19..6dc7fc79e 100644 --- a/core/node/service/master_service.go +++ b/core/node/service/master_service.go @@ -1,58 +1,47 @@ package service import ( + "errors" "github.com/apex/log" - config2 "github.com/crawlab-team/crawlab/core/config" + "github.com/cenkalti/backoff/v4" "github.com/crawlab-team/crawlab/core/constants" - "github.com/crawlab-team/crawlab/core/container" - "github.com/crawlab-team/crawlab/core/errors" "github.com/crawlab-team/crawlab/core/grpc/server" "github.com/crawlab-team/crawlab/core/interfaces" "github.com/crawlab-team/crawlab/core/models/common" - "github.com/crawlab-team/crawlab/core/models/delegate" "github.com/crawlab-team/crawlab/core/models/models" "github.com/crawlab-team/crawlab/core/models/service" "github.com/crawlab-team/crawlab/core/node/config" "github.com/crawlab-team/crawlab/core/notification" + "github.com/crawlab-team/crawlab/core/schedule" "github.com/crawlab-team/crawlab/core/system" + "github.com/crawlab-team/crawlab/core/task/handler" + "github.com/crawlab-team/crawlab/core/task/scheduler" "github.com/crawlab-team/crawlab/core/utils" - "github.com/crawlab-team/crawlab/db/mongo" - grpc "github.com/crawlab-team/crawlab/grpc" - "github.com/crawlab-team/crawlab/trace" - "github.com/spf13/viper" + "github.com/crawlab-team/crawlab/grpc" "go.mongodb.org/mongo-driver/bson" + "go.mongodb.org/mongo-driver/bson/primitive" mongo2 "go.mongodb.org/mongo-driver/mongo" + "sync" "time" ) type MasterService struct { // dependencies - modelSvc service.ModelService - cfgSvc interfaces.NodeConfigService - server interfaces.GrpcServer - schedulerSvc interfaces.TaskSchedulerService - handlerSvc interfaces.TaskHandlerService - scheduleSvc interfaces.ScheduleService - notificationSvc *notification.Service - spiderAdminSvc interfaces.SpiderAdminService - systemSvc *system.Service + cfgSvc interfaces.NodeConfigService + server *server.GrpcServer + taskSchedulerSvc *scheduler.Service + taskHandlerSvc *handler.Service + scheduleSvc *schedule.Service + systemSvc *system.Service // settings - cfgPath string - address interfaces.Address monitorInterval time.Duration - stopOnError bool -} -func (svc *MasterService) Init() (err error) { - // do nothing - return nil + // internals + interfaces.Logger } func (svc *MasterService) Start() { - // create indexes - common.CreateIndexes() - // start grpc server if err := svc.server.Start(); err != nil { panic(err) @@ -63,24 +52,21 @@ func (svc *MasterService) Start() { panic(err) } + // create indexes + go common.InitIndexes() + // start monitoring worker nodes - go svc.Monitor() + go svc.startMonitoring() // start task handler - go svc.handlerSvc.Start() + go svc.taskHandlerSvc.Start() // start task scheduler - go svc.schedulerSvc.Start() + go svc.taskSchedulerSvc.Start() // start schedule service go svc.scheduleSvc.Start() - // start notification service - go svc.notificationSvc.Start() - - // start spider admin service - go svc.spiderAdminSvc.Start() - // wait for quit signal svc.Wait() @@ -94,83 +80,67 @@ func (svc *MasterService) Wait() { func (svc *MasterService) Stop() { _ = svc.server.Stop() - log.Infof("master[%s] service has stopped", svc.GetConfigService().GetNodeKey()) + svc.taskHandlerSvc.Stop() + svc.Infof("master[%s] service has stopped", svc.cfgSvc.GetNodeKey()) } -func (svc *MasterService) Monitor() { - log.Infof("master[%s] monitoring started", svc.GetConfigService().GetNodeKey()) +func (svc *MasterService) startMonitoring() { + svc.Infof("master[%s] monitoring started", svc.cfgSvc.GetNodeKey()) + + // ticker + ticker := time.NewTicker(svc.monitorInterval) + for { - if err := svc.monitor(); err != nil { - trace.PrintError(err) - if svc.stopOnError { - log.Errorf("master[%s] monitor error, now stopping...", svc.GetConfigService().GetNodeKey()) - svc.Stop() - return - } + // monitor + err := svc.monitor() + if err != nil { + svc.Errorf("master[%s] monitor error: %v", svc.cfgSvc.GetNodeKey(), err) } - time.Sleep(svc.monitorInterval) + // wait + <-ticker.C } } -func (svc *MasterService) GetConfigService() (cfgSvc interfaces.NodeConfigService) { - return svc.cfgSvc -} - -func (svc *MasterService) GetConfigPath() (path string) { - return svc.cfgPath -} - -func (svc *MasterService) SetConfigPath(path string) { - svc.cfgPath = path -} - -func (svc *MasterService) GetAddress() (address interfaces.Address) { - return svc.address -} - -func (svc *MasterService) SetAddress(address interfaces.Address) { - svc.address = address -} - -func (svc *MasterService) SetMonitorInterval(duration time.Duration) { - svc.monitorInterval = duration -} - func (svc *MasterService) Register() (err error) { - nodeKey := svc.GetConfigService().GetNodeKey() - nodeName := svc.GetConfigService().GetNodeName() - node, err := svc.modelSvc.GetNodeByKey(nodeKey, nil) + nodeKey := svc.cfgSvc.GetNodeKey() + nodeName := svc.cfgSvc.GetNodeName() + nodeMaxRunners := svc.cfgSvc.GetMaxRunners() + node, err := service.NewModelService[models.Node]().GetOne(bson.M{"key": nodeKey}, nil) if err != nil && err.Error() == mongo2.ErrNoDocuments.Error() { // not exists - log.Infof("master[%s] does not exist in db", nodeKey) - node := &models.Node{ + svc.Infof("master[%s] does not exist in db", nodeKey) + node := models.Node{ Key: nodeKey, Name: nodeName, - MaxRunners: config.DefaultConfigOptions.MaxRunners, + MaxRunners: nodeMaxRunners, IsMaster: true, Status: constants.NodeStatusOnline, Enabled: true, Active: true, - ActiveTs: time.Now(), - } - if viper.GetInt("task.handler.maxRunners") > 0 { - node.MaxRunners = viper.GetInt("task.handler.maxRunners") + ActiveAt: time.Now(), } - nodeD := delegate.NewModelNodeDelegate(node) - if err := nodeD.Add(); err != nil { + node.SetCreated(primitive.NilObjectID) + node.SetUpdated(primitive.NilObjectID) + _, err := service.NewModelService[models.Node]().InsertOne(node) + if err != nil { + svc.Errorf("save master[%s] to db error: %v", nodeKey, err) return err } - log.Infof("added master[%s] in db. id: %s", nodeKey, nodeD.GetModel().GetId().Hex()) + svc.Infof("added master[%s] to db", nodeKey) return nil } else if err == nil { // exists - log.Infof("master[%s] exists in db", nodeKey) - nodeD := delegate.NewModelNodeDelegate(node) - if err := nodeD.UpdateStatusOnline(); err != nil { + svc.Infof("master[%s] exists in db", nodeKey) + node.Status = constants.NodeStatusOnline + node.Active = true + node.ActiveAt = time.Now() + err = service.NewModelService[models.Node]().ReplaceById(node.Id, *node) + if err != nil { + svc.Errorf("update master[%s] in db error: %v", nodeKey, err) return err } - log.Infof("updated master[%s] in db. id: %s", nodeKey, nodeD.GetModel().GetId().Hex()) + svc.Infof("updated master[%s] in db", nodeKey) return nil } else { // error @@ -178,56 +148,48 @@ func (svc *MasterService) Register() (err error) { } } -func (svc *MasterService) StopOnError() { - svc.stopOnError = true -} - -func (svc *MasterService) GetServer() (svr interfaces.GrpcServer) { - return svc.server -} - func (svc *MasterService) monitor() (err error) { // update master node status in db if err := svc.updateMasterNodeStatus(); err != nil { - if err.Error() == mongo2.ErrNoDocuments.Error() { + if errors.Is(err, mongo2.ErrNoDocuments) { return nil } return err } // all worker nodes - nodes, err := svc.getAllWorkerNodes() + workerNodes, err := svc.getAllWorkerNodes() if err != nil { return err } - // error flag - isErr := false - - // iterate all nodes - for _, n := range nodes { - // subscribe - if err := svc.subscribeNode(&n); err != nil { - isErr = true - continue - } + // iterate all worker nodes + wg := sync.WaitGroup{} + wg.Add(len(workerNodes)) + for _, n := range workerNodes { + go func(n *models.Node) { + defer wg.Done() + + // subscribe + ok := svc.subscribeNode(n) + if !ok { + go svc.setWorkerNodeOffline(n) + return + } - // ping client - if err := svc.pingNodeClient(&n); err != nil { - isErr = true - continue - } + // ping client + ok = svc.pingNodeClient(n) + if !ok { + go svc.setWorkerNodeOffline(n) + return + } - // update node available runners - if err := svc.updateNodeAvailableRunners(&n); err != nil { - isErr = true - continue - } + // update node available runners + _ = svc.updateNodeRunners(n) + }(&n) } - if isErr { - return trace.TraceError(errors.ErrorNodeMonitorError) - } + wg.Wait() return nil } @@ -237,132 +199,122 @@ func (svc *MasterService) getAllWorkerNodes() (nodes []models.Node, err error) { "key": bson.M{"$ne": svc.cfgSvc.GetNodeKey()}, // not self "active": true, // active } - nodes, err = svc.modelSvc.GetNodeList(query, nil) + nodes, err = service.NewModelService[models.Node]().GetMany(query, nil) if err != nil { - if err == mongo2.ErrNoDocuments { + if errors.Is(err, mongo2.ErrNoDocuments) { return nil, nil } - return nil, trace.TraceError(err) + svc.Errorf("get all worker nodes error: %v", err) + return nil, err } return nodes, nil } func (svc *MasterService) updateMasterNodeStatus() (err error) { - nodeKey := svc.GetConfigService().GetNodeKey() - node, err := svc.modelSvc.GetNodeByKey(nodeKey, nil) + nodeKey := svc.cfgSvc.GetNodeKey() + node, err := service.NewModelService[models.Node]().GetOne(bson.M{"key": nodeKey}, nil) if err != nil { return err } - nodeD := delegate.NewModelNodeDelegate(node) - return nodeD.UpdateStatusOnline() -} + oldStatus := node.Status -func (svc *MasterService) setWorkerNodeOffline(n interfaces.Node) (err error) { - return delegate.NewModelNodeDelegate(n).UpdateStatusOffline() -} + node.Status = constants.NodeStatusOnline + node.Active = true + node.ActiveAt = time.Now() + newStatus := node.Status -func (svc *MasterService) subscribeNode(n interfaces.Node) (err error) { - _, err = svc.server.GetSubscribe("node:" + n.GetKey()) + err = service.NewModelService[models.Node]().ReplaceById(node.Id, *node) if err != nil { - log.Errorf("cannot subscribe worker node[%s]: %v", n.GetKey(), err) - if err := svc.setWorkerNodeOffline(n); err != nil { - return trace.TraceError(err) + return err + } + + if utils.IsPro() { + if oldStatus != newStatus { + go svc.sendNotification(node) } - return trace.TraceError(err) } + return nil } -func (svc *MasterService) pingNodeClient(n interfaces.Node) (err error) { - if err := svc.server.SendStreamMessage("node:"+n.GetKey(), grpc.StreamMessageCode_PING); err != nil { - log.Errorf("cannot ping worker node client[%s]: %v", n.GetKey(), err) - if err := svc.setWorkerNodeOffline(n); err != nil { - return trace.TraceError(err) - } - return trace.TraceError(err) +func (svc *MasterService) setWorkerNodeOffline(node *models.Node) { + node.Status = constants.NodeStatusOffline + node.Active = false + err := backoff.Retry(func() error { + return service.NewModelService[models.Node]().ReplaceById(node.Id, *node) + }, backoff.WithMaxRetries(backoff.NewConstantBackOff(1*time.Second), 3)) + if err != nil { + log.Errorf("failed to set worker node[%s] offline: %v", node.Key, err) } - return nil + svc.sendNotification(node) } -func (svc *MasterService) updateNodeAvailableRunners(n interfaces.Node) (err error) { - query := bson.M{ - "node_id": n.GetId(), - "status": constants.TaskStatusRunning, +func (svc *MasterService) subscribeNode(n *models.Node) (ok bool) { + _, ok = svc.server.NodeSvr.GetSubscribeStream(n.Id) + return ok +} + +func (svc *MasterService) pingNodeClient(n *models.Node) (ok bool) { + stream, ok := svc.server.NodeSvr.GetSubscribeStream(n.Id) + if !ok { + svc.Errorf("cannot get worker node client[%s]", n.Key) + return false } - runningTasksCount, err := mongo.GetMongoCol(interfaces.ModelColNameTask).Count(query) + err := stream.Send(&grpc.NodeServiceSubscribeResponse{ + Code: grpc.NodeServiceSubscribeCode_PING, + }) if err != nil { - return trace.TraceError(err) + svc.Errorf("failed to ping worker node client[%s]: %v", n.Key, err) + return false } - n.SetAvailableRunners(n.GetMaxRunners() - runningTasksCount) - return delegate.NewModelDelegate(n).Save() + return true } -func NewMasterService(opts ...Option) (res interfaces.NodeMasterService, err error) { - // master service - svc := &MasterService{ - cfgPath: config2.GetConfigPath(), - monitorInterval: 15 * time.Second, - stopOnError: false, +func (svc *MasterService) updateNodeRunners(node *models.Node) (err error) { + query := bson.M{ + "node_id": node.Id, + "status": constants.TaskStatusRunning, } - - // apply options - for _, opt := range opts { - opt(svc) + runningTasksCount, err := service.NewModelService[models.Task]().Count(query) + if err != nil { + svc.Errorf("failed to count running tasks for node[%s]: %v", node.Key, err) + return err } - - // server options - var serverOpts []server.Option - if svc.address != nil { - serverOpts = append(serverOpts, server.WithAddress(svc.address)) + node.CurrentRunners = runningTasksCount + err = service.NewModelService[models.Node]().ReplaceById(node.Id, *node) + if err != nil { + svc.Errorf("failed to update node runners for node[%s]: %v", node.Key, err) + return err } + return nil +} - // dependency injection - if err := container.GetContainer().Invoke(func( - cfgSvc interfaces.NodeConfigService, - modelSvc service.ModelService, - server interfaces.GrpcServer, - schedulerSvc interfaces.TaskSchedulerService, - handlerSvc interfaces.TaskHandlerService, - scheduleSvc interfaces.ScheduleService, - spiderAdminSvc interfaces.SpiderAdminService, - ) { - svc.cfgSvc = cfgSvc - svc.modelSvc = modelSvc - svc.server = server - svc.schedulerSvc = schedulerSvc - svc.handlerSvc = handlerSvc - svc.scheduleSvc = scheduleSvc - svc.spiderAdminSvc = spiderAdminSvc - }); err != nil { - return nil, err +func (svc *MasterService) sendNotification(node *models.Node) { + if !utils.IsPro() { + return } + go notification.GetNotificationService().SendNodeNotification(node) +} - // notification service - svc.notificationSvc = notification.GetService() - - // system service - svc.systemSvc = system.GetService() - - // init - if err := svc.Init(); err != nil { - return nil, err +func newMasterService() *MasterService { + return &MasterService{ + cfgSvc: config.GetNodeConfigService(), + monitorInterval: 15 * time.Second, + server: server.GetGrpcServer(), + taskSchedulerSvc: scheduler.GetTaskSchedulerService(), + taskHandlerSvc: handler.GetTaskHandlerService(), + scheduleSvc: schedule.GetScheduleService(), + systemSvc: system.GetSystemService(), + Logger: utils.NewLogger("MasterService"), } - - return svc, nil } -func ProvideMasterService(path string, opts ...Option) func() (interfaces.NodeMasterService, error) { - // path - if path == "" || path == config2.GetConfigPath() { - if viper.GetString("config.path") != "" { - path = viper.GetString("config.path") - } else { - path = config2.GetConfigPath() - } - } - opts = append(opts, WithConfigPath(path)) +var masterService *MasterService +var masterServiceOnce sync.Once - return func() (interfaces.NodeMasterService, error) { - return NewMasterService(opts...) - } +func GetMasterService() *MasterService { + masterServiceOnce.Do(func() { + masterService = newMasterService() + }) + return masterService } diff --git a/core/node/service/master_service_v2.go b/core/node/service/master_service_v2.go deleted file mode 100644 index cbf2249d6..000000000 --- a/core/node/service/master_service_v2.go +++ /dev/null @@ -1,395 +0,0 @@ -package service - -import ( - "errors" - "github.com/apex/log" - "github.com/cenkalti/backoff/v4" - config2 "github.com/crawlab-team/crawlab/core/config" - "github.com/crawlab-team/crawlab/core/constants" - "github.com/crawlab-team/crawlab/core/grpc/server" - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/models/common" - "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/core/models/service" - "github.com/crawlab-team/crawlab/core/node/config" - "github.com/crawlab-team/crawlab/core/notification" - "github.com/crawlab-team/crawlab/core/schedule" - "github.com/crawlab-team/crawlab/core/spider/admin" - "github.com/crawlab-team/crawlab/core/system" - "github.com/crawlab-team/crawlab/core/task/handler" - "github.com/crawlab-team/crawlab/core/task/scheduler" - "github.com/crawlab-team/crawlab/core/utils" - "github.com/crawlab-team/crawlab/grpc" - "github.com/crawlab-team/crawlab/trace" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" - mongo2 "go.mongodb.org/mongo-driver/mongo" - "sync" - "time" -) - -type MasterServiceV2 struct { - // dependencies - cfgSvc interfaces.NodeConfigService - server *server.GrpcServerV2 - schedulerSvc *scheduler.ServiceV2 - handlerSvc *handler.ServiceV2 - scheduleSvc *schedule.ServiceV2 - notificationSvc *notification.ServiceV2 - spiderAdminSvc *admin.ServiceV2 - systemSvc *system.ServiceV2 - - // settings - cfgPath string - address interfaces.Address - monitorInterval time.Duration - stopOnError bool -} - -func (svc *MasterServiceV2) Init() (err error) { - // do nothing - return nil -} - -func (svc *MasterServiceV2) Start() { - // create indexes - common.CreateIndexesV2() - - // start grpc server - if err := svc.server.Start(); err != nil { - panic(err) - } - - // register to db - if err := svc.Register(); err != nil { - panic(err) - } - - // start monitoring worker nodes - go svc.Monitor() - - // start task handler - go svc.handlerSvc.Start() - - // start task scheduler - go svc.schedulerSvc.Start() - - // start schedule service - go svc.scheduleSvc.Start() - - // start notification service - go svc.notificationSvc.Start() - - // start spider admin service - go svc.spiderAdminSvc.Start() - - // wait for quit signal - svc.Wait() - - // stop - svc.Stop() -} - -func (svc *MasterServiceV2) Wait() { - utils.DefaultWait() -} - -func (svc *MasterServiceV2) Stop() { - _ = svc.server.Stop() - log.Infof("master[%s] service has stopped", svc.GetConfigService().GetNodeKey()) -} - -func (svc *MasterServiceV2) Monitor() { - log.Infof("master[%s] monitoring started", svc.GetConfigService().GetNodeKey()) - for { - if err := svc.monitor(); err != nil { - trace.PrintError(err) - if svc.stopOnError { - log.Errorf("master[%s] monitor error, now stopping...", svc.GetConfigService().GetNodeKey()) - svc.Stop() - return - } - } - - time.Sleep(svc.monitorInterval) - } -} - -func (svc *MasterServiceV2) GetConfigService() (cfgSvc interfaces.NodeConfigService) { - return svc.cfgSvc -} - -func (svc *MasterServiceV2) GetConfigPath() (path string) { - return svc.cfgPath -} - -func (svc *MasterServiceV2) SetConfigPath(path string) { - svc.cfgPath = path -} - -func (svc *MasterServiceV2) GetAddress() (address interfaces.Address) { - return svc.address -} - -func (svc *MasterServiceV2) SetAddress(address interfaces.Address) { - svc.address = address -} - -func (svc *MasterServiceV2) SetMonitorInterval(duration time.Duration) { - svc.monitorInterval = duration -} - -func (svc *MasterServiceV2) Register() (err error) { - nodeKey := svc.GetConfigService().GetNodeKey() - nodeName := svc.GetConfigService().GetNodeName() - node, err := service.NewModelServiceV2[models.NodeV2]().GetOne(bson.M{"key": nodeKey}, nil) - if err != nil && err.Error() == mongo2.ErrNoDocuments.Error() { - // not exists - log.Infof("master[%s] does not exist in db", nodeKey) - node := models.NodeV2{ - Key: nodeKey, - Name: nodeName, - MaxRunners: config.DefaultConfigOptions.MaxRunners, - IsMaster: true, - Status: constants.NodeStatusOnline, - Enabled: true, - Active: true, - ActiveAt: time.Now(), - } - node.SetCreated(primitive.NilObjectID) - node.SetUpdated(primitive.NilObjectID) - id, err := service.NewModelServiceV2[models.NodeV2]().InsertOne(node) - if err != nil { - return err - } - log.Infof("added master[%s] in db. id: %s", nodeKey, id.Hex()) - return nil - } else if err == nil { - // exists - log.Infof("master[%s] exists in db", nodeKey) - node.Status = constants.NodeStatusOnline - node.Active = true - node.ActiveAt = time.Now() - err = service.NewModelServiceV2[models.NodeV2]().ReplaceById(node.Id, *node) - if err != nil { - return err - } - log.Infof("updated master[%s] in db. id: %s", nodeKey, node.Id.Hex()) - return nil - } else { - // error - return err - } -} - -func (svc *MasterServiceV2) StopOnError() { - svc.stopOnError = true -} - -func (svc *MasterServiceV2) GetServer() (svr interfaces.GrpcServer) { - return svc.server -} - -func (svc *MasterServiceV2) monitor() (err error) { - // update master node status in db - if err := svc.updateMasterNodeStatus(); err != nil { - if err.Error() == mongo2.ErrNoDocuments.Error() { - return nil - } - return err - } - - // all worker nodes - workerNodes, err := svc.getAllWorkerNodes() - if err != nil { - return err - } - - // iterate all worker nodes - wg := sync.WaitGroup{} - wg.Add(len(workerNodes)) - for _, n := range workerNodes { - go func(n *models.NodeV2) { - // subscribe - ok := svc.subscribeNode(n) - if !ok { - go svc.setWorkerNodeOffline(n) - wg.Done() - return - } - - // ping client - ok = svc.pingNodeClient(n) - if !ok { - go svc.setWorkerNodeOffline(n) - wg.Done() - return - } - - // update node available runners - if err := svc.updateNodeAvailableRunners(n); err != nil { - trace.PrintError(err) - wg.Done() - return - } - - // done - wg.Done() - }(&n) - } - - wg.Wait() - - return nil -} - -func (svc *MasterServiceV2) getAllWorkerNodes() (nodes []models.NodeV2, err error) { - query := bson.M{ - "key": bson.M{"$ne": svc.cfgSvc.GetNodeKey()}, // not self - "active": true, // active - } - nodes, err = service.NewModelServiceV2[models.NodeV2]().GetMany(query, nil) - if err != nil { - if errors.Is(err, mongo2.ErrNoDocuments) { - return nil, nil - } - return nil, trace.TraceError(err) - } - return nodes, nil -} - -func (svc *MasterServiceV2) updateMasterNodeStatus() (err error) { - nodeKey := svc.GetConfigService().GetNodeKey() - node, err := service.NewModelServiceV2[models.NodeV2]().GetOne(bson.M{"key": nodeKey}, nil) - if err != nil { - return err - } - node.Status = constants.NodeStatusOnline - node.Active = true - node.ActiveAt = time.Now() - err = service.NewModelServiceV2[models.NodeV2]().ReplaceById(node.Id, *node) - if err != nil { - return err - } - return nil -} - -func (svc *MasterServiceV2) setWorkerNodeOffline(node *models.NodeV2) { - node.Status = constants.NodeStatusOffline - node.Active = false - err := backoff.Retry(func() error { - return service.NewModelServiceV2[models.NodeV2]().ReplaceById(node.Id, *node) - }, backoff.WithMaxRetries(backoff.NewConstantBackOff(1*time.Second), 3)) - if err != nil { - trace.PrintError(err) - } -} - -func (svc *MasterServiceV2) subscribeNode(n *models.NodeV2) (ok bool) { - _, err := svc.server.GetSubscribe("node:" + n.Key) - if err != nil { - log.Errorf("cannot subscribe worker node[%s]: %v", n.Key, err) - return false - } - return true -} - -func (svc *MasterServiceV2) pingNodeClient(n *models.NodeV2) (ok bool) { - if err := svc.server.SendStreamMessage("node:"+n.Key, grpc.StreamMessageCode_PING); err != nil { - log.Errorf("cannot ping worker node client[%s]: %v", n.Key, err) - return false - } - return true -} - -func (svc *MasterServiceV2) updateNodeAvailableRunners(node *models.NodeV2) (err error) { - query := bson.M{ - "node_id": node.Id, - "status": constants.TaskStatusRunning, - } - runningTasksCount, err := service.NewModelServiceV2[models.TaskV2]().Count(query) - if err != nil { - return trace.TraceError(err) - } - node.AvailableRunners = node.MaxRunners - runningTasksCount - err = service.NewModelServiceV2[models.NodeV2]().ReplaceById(node.Id, *node) - if err != nil { - return err - } - return nil -} - -func newMasterServiceV2() (res *MasterServiceV2, err error) { - // master service - svc := &MasterServiceV2{ - cfgPath: config2.GetConfigPath(), - monitorInterval: 15 * time.Second, - stopOnError: false, - } - - // server options - var serverOpts []server.Option - if svc.address != nil { - serverOpts = append(serverOpts, server.WithAddress(svc.address)) - } - - // node config service - svc.cfgSvc = config.GetNodeConfigService() - - // grpc server - svc.server, err = server.GetGrpcServerV2() - if err != nil { - return nil, err - } - - // scheduler service - svc.schedulerSvc, err = scheduler.GetTaskSchedulerServiceV2() - if err != nil { - return nil, err - } - - // handler service - svc.handlerSvc, err = handler.GetTaskHandlerServiceV2() - if err != nil { - return nil, err - } - - // schedule service - svc.scheduleSvc, err = schedule.GetScheduleServiceV2() - if err != nil { - return nil, err - } - - // notification service - svc.notificationSvc = notification.GetNotificationServiceV2() - - // spider admin service - svc.spiderAdminSvc, err = admin.GetSpiderAdminServiceV2() - if err != nil { - return nil, err - } - - // system service - svc.systemSvc = system.GetSystemServiceV2() - - // init - if err := svc.Init(); err != nil { - return nil, err - } - - return svc, nil -} - -var masterServiceV2 *MasterServiceV2 -var masterServiceV2Once = new(sync.Once) - -func GetMasterServiceV2() (res *MasterServiceV2, err error) { - masterServiceV2Once.Do(func() { - masterServiceV2, err = newMasterServiceV2() - if err != nil { - log.Errorf("failed to get master service: %v", err) - } - }) - return masterServiceV2, err - -} diff --git a/core/node/service/options.go b/core/node/service/options.go deleted file mode 100644 index 941879f51..000000000 --- a/core/node/service/options.go +++ /dev/null @@ -1,47 +0,0 @@ -package service - -import ( - "github.com/crawlab-team/crawlab/core/interfaces" - "time" -) - -type Option func(svc interfaces.NodeService) - -func WithConfigPath(path string) Option { - return func(svc interfaces.NodeService) { - svc.SetConfigPath(path) - } -} - -func WithAddress(address interfaces.Address) Option { - return func(svc interfaces.NodeService) { - svc.SetAddress(address) - } -} - -func WithMonitorInterval(duration time.Duration) Option { - return func(svc interfaces.NodeService) { - svc2, ok := svc.(interfaces.NodeMasterService) - if ok { - svc2.SetMonitorInterval(duration) - } - } -} - -func WithStopOnError() Option { - return func(svc interfaces.NodeService) { - svc2, ok := svc.(interfaces.NodeMasterService) - if ok { - svc2.StopOnError() - } - } -} - -func WithHeartbeatInterval(duration time.Duration) Option { - return func(svc interfaces.NodeService) { - svc2, ok := svc.(interfaces.NodeWorkerService) - if ok { - svc2.SetHeartbeatInterval(duration) - } - } -} diff --git a/core/node/service/worker_service.go b/core/node/service/worker_service.go new file mode 100644 index 000000000..e40781180 --- /dev/null +++ b/core/node/service/worker_service.go @@ -0,0 +1,251 @@ +package service + +import ( + "context" + "errors" + "fmt" + "github.com/crawlab-team/crawlab/core/controllers" + "github.com/gin-gonic/gin" + "net" + "net/http" + "sync" + "time" + + "github.com/crawlab-team/crawlab/core/models/models" + + "github.com/cenkalti/backoff/v4" + "github.com/crawlab-team/crawlab/core/grpc/client" + "github.com/crawlab-team/crawlab/core/interfaces" + client2 "github.com/crawlab-team/crawlab/core/models/client" + nodeconfig "github.com/crawlab-team/crawlab/core/node/config" + "github.com/crawlab-team/crawlab/core/task/handler" + "github.com/crawlab-team/crawlab/core/utils" + "github.com/crawlab-team/crawlab/grpc" + "go.mongodb.org/mongo-driver/bson" +) + +type WorkerService struct { + // dependencies + cfgSvc interfaces.NodeConfigService + handlerSvc *handler.Service + + // settings + address interfaces.Address + heartbeatInterval time.Duration + + // internals + stopped bool + n *models.Node + s grpc.NodeService_SubscribeClient + isReady bool + interfaces.Logger +} + +func (svc *WorkerService) Start() { + // wait for grpc client ready + client.GetGrpcClient().WaitForReady() + + // register to master + svc.register() + + // mark as ready after registration + svc.isReady = true + + // start health check server + go svc.startHealthServer() + + // subscribe + go svc.subscribe() + + // start sending heartbeat to master + go svc.reportStatus() + + // start task handler + go svc.handlerSvc.Start() + + // wait for quit signal + svc.Wait() + + // stop + svc.Stop() +} + +func (svc *WorkerService) Wait() { + utils.DefaultWait() +} + +func (svc *WorkerService) Stop() { + svc.stopped = true + _ = client.GetGrpcClient().Stop() + svc.handlerSvc.Stop() + svc.Infof("worker[%s] service has stopped", svc.cfgSvc.GetNodeKey()) +} + +func (svc *WorkerService) register() { + op := func() (err error) { + ctx, cancel := client.GetGrpcClient().Context() + defer cancel() + _, err = client.GetGrpcClient().NodeClient.Register(ctx, &grpc.NodeServiceRegisterRequest{ + NodeKey: svc.cfgSvc.GetNodeKey(), + NodeName: svc.cfgSvc.GetNodeName(), + MaxRunners: int32(svc.cfgSvc.GetMaxRunners()), + }) + if err != nil { + err = fmt.Errorf("failed to register worker[%s]: %v", svc.cfgSvc.GetNodeKey(), err) + return err + } + svc.n, err = client2.NewModelService[models.Node]().GetOne(bson.M{"key": svc.GetConfigService().GetNodeKey()}, nil) + if err != nil { + err = fmt.Errorf("failed to get node: %v", err) + return err + } + svc.Infof("worker[%s] registered to master. id: %s", svc.GetConfigService().GetNodeKey(), svc.n.Id.Hex()) + return nil + } + b := backoff.NewExponentialBackOff() + n := func(err error, duration time.Duration) { + svc.Errorf("register worker[%s] error: %v", svc.cfgSvc.GetNodeKey(), err) + svc.Infof("retry in %.1f seconds", duration.Seconds()) + } + err := backoff.RetryNotify(op, b, n) + if err != nil { + svc.Fatalf("failed to register worker[%s]: %v", svc.cfgSvc.GetNodeKey(), err) + panic(err) + } +} + +func (svc *WorkerService) reportStatus() { + ticker := time.NewTicker(svc.heartbeatInterval) + for { + // return if client is closed + if client.GetGrpcClient().IsClosed() { + ticker.Stop() + return + } + + // send heartbeat + svc.sendHeartbeat() + + // sleep + <-ticker.C + } +} + +func (svc *WorkerService) GetConfigService() (cfgSvc interfaces.NodeConfigService) { + return svc.cfgSvc +} + +func (svc *WorkerService) subscribe() { + // Configure exponential backoff + b := backoff.NewExponentialBackOff() + b.InitialInterval = 1 * time.Second + b.MaxInterval = 1 * time.Minute + b.MaxElapsedTime = 10 * time.Minute + b.Multiplier = 2.0 + + for { + if svc.stopped { + svc.Infof("subscription stopped. exiting...") + return + } + + // Use backoff for connection attempts + operation := func() error { + svc.Debugf("attempting to subscribe to master") + stream, err := client.GetGrpcClient().NodeClient.Subscribe(context.Background(), &grpc.NodeServiceSubscribeRequest{ + NodeKey: svc.cfgSvc.GetNodeKey(), + }) + if err != nil { + svc.Errorf("failed to subscribe to master: %v", err) + return err + } + svc.Debugf("subscribed to master") + + // Handle messages + for { + if svc.stopped { + return nil + } + + msg, err := stream.Recv() + if err != nil { + if client.GetGrpcClient().IsClosed() { + svc.Errorf("connection to master is closed: %v", err) + return err + } + svc.Errorf("failed to receive message from master: %v", err) + return err + } + + switch msg.Code { + case grpc.NodeServiceSubscribeCode_PING: + // do nothing + } + } + } + + // Execute with backoff + err := backoff.Retry(operation, b) + if err != nil { + svc.Errorf("subscription failed after max retries: %v", err) + return + } + + // Wait before attempting to reconnect + time.Sleep(time.Second) + } +} + +func (svc *WorkerService) sendHeartbeat() { + ctx, cancel := context.WithTimeout(context.Background(), svc.heartbeatInterval) + defer cancel() + _, err := client.GetGrpcClient().NodeClient.SendHeartbeat(ctx, &grpc.NodeServiceSendHeartbeatRequest{ + NodeKey: svc.cfgSvc.GetNodeKey(), + }) + if err != nil { + svc.Errorf("failed to send heartbeat to master: %v", err) + } +} + +func (svc *WorkerService) startHealthServer() { + // handlers + app := gin.New() + app.GET("/health", controllers.GetHealthFn(func() bool { + return svc.isReady && !svc.stopped && client.GetGrpcClient() != nil && !client.GetGrpcClient().IsClosed() + })) + + // listen + ln, err := net.Listen("tcp", utils.GetServerAddress()) + if err != nil { + panic(err) + } + + // serve + if err := http.Serve(ln, app); err != nil { + if !errors.Is(err, http.ErrServerClosed) { + svc.Errorf("run server error: %v", err) + } else { + svc.Info("server graceful down") + } + } +} + +func newWorkerService() *WorkerService { + return &WorkerService{ + heartbeatInterval: 15 * time.Second, + cfgSvc: nodeconfig.GetNodeConfigService(), + handlerSvc: handler.GetTaskHandlerService(), + isReady: false, + Logger: utils.NewLogger("WorkerService"), + } +} + +var workerService *WorkerService +var workerServiceOnce sync.Once + +func GetWorkerService() *WorkerService { + workerServiceOnce.Do(func() { + workerService = newWorkerService() + }) + return workerService +} diff --git a/core/node/service/worker_service_v2.go b/core/node/service/worker_service_v2.go deleted file mode 100644 index da4047581..000000000 --- a/core/node/service/worker_service_v2.go +++ /dev/null @@ -1,243 +0,0 @@ -package service - -import ( - "context" - "encoding/json" - "github.com/apex/log" - config2 "github.com/crawlab-team/crawlab/core/config" - "github.com/crawlab-team/crawlab/core/grpc/client" - "github.com/crawlab-team/crawlab/core/interfaces" - client2 "github.com/crawlab-team/crawlab/core/models/client" - "github.com/crawlab-team/crawlab/core/models/models" - nodeconfig "github.com/crawlab-team/crawlab/core/node/config" - "github.com/crawlab-team/crawlab/core/task/handler" - "github.com/crawlab-team/crawlab/core/utils" - grpc "github.com/crawlab-team/crawlab/grpc" - "github.com/crawlab-team/crawlab/trace" - "go.mongodb.org/mongo-driver/bson" - "sync" - "time" -) - -type WorkerServiceV2 struct { - // dependencies - cfgSvc interfaces.NodeConfigService - client *client.GrpcClientV2 - handlerSvc *handler.ServiceV2 - - // settings - cfgPath string - address interfaces.Address - heartbeatInterval time.Duration - - // internals - n *models.NodeV2 - s grpc.NodeService_SubscribeClient -} - -func (svc *WorkerServiceV2) Init() (err error) { - // do nothing - return nil -} - -func (svc *WorkerServiceV2) Start() { - // start grpc client - if err := svc.client.Start(); err != nil { - panic(err) - } - - // register to master - svc.Register() - - // start receiving stream messages - go svc.Recv() - - // start sending heartbeat to master - go svc.ReportStatus() - - // start handler - go svc.handlerSvc.Start() - - // wait for quit signal - svc.Wait() - - // stop - svc.Stop() -} - -func (svc *WorkerServiceV2) Wait() { - utils.DefaultWait() -} - -func (svc *WorkerServiceV2) Stop() { - _ = svc.client.Stop() - log.Infof("worker[%s] service has stopped", svc.cfgSvc.GetNodeKey()) -} - -func (svc *WorkerServiceV2) Register() { - ctx, cancel := svc.client.Context() - defer cancel() - _, err := svc.client.NodeClient.Register(ctx, &grpc.NodeServiceRegisterRequest{ - Key: svc.cfgSvc.GetNodeKey(), - Name: svc.cfgSvc.GetNodeName(), - IsMaster: svc.cfgSvc.IsMaster(), - AuthKey: svc.cfgSvc.GetAuthKey(), - MaxRunners: int32(svc.cfgSvc.GetMaxRunners()), - }) - if err != nil { - panic(err) - } - svc.n, err = client2.NewModelServiceV2[models.NodeV2]().GetOne(bson.M{"key": svc.GetConfigService().GetNodeKey()}, nil) - if err != nil { - panic(err) - } - log.Infof("worker[%s] registered to master. id: %s", svc.GetConfigService().GetNodeKey(), svc.n.Id.Hex()) - return -} - -func (svc *WorkerServiceV2) Recv() { - msgCh := svc.client.GetMessageChannel() - for { - // return if client is closed - if svc.client.IsClosed() { - return - } - - // receive message from channel - msg := <-msgCh - - // handle message - if err := svc.handleStreamMessage(msg); err != nil { - continue - } - } -} - -func (svc *WorkerServiceV2) handleStreamMessage(msg *grpc.StreamMessage) (err error) { - log.Debugf("[WorkerServiceV2] handle msg: %v", msg) - switch msg.Code { - case grpc.StreamMessageCode_PING: - _, err := svc.client.NodeClient.SendHeartbeat(context.Background(), &grpc.NodeServiceSendHeartbeatRequest{ - Key: svc.cfgSvc.GetNodeKey(), - }) - if err != nil { - return trace.TraceError(err) - } - case grpc.StreamMessageCode_RUN_TASK: - var t models.Task - if err := json.Unmarshal(msg.Data, &t); err != nil { - return trace.TraceError(err) - } - if err := svc.handlerSvc.Run(t.Id); err != nil { - return trace.TraceError(err) - } - case grpc.StreamMessageCode_CANCEL_TASK: - var t models.Task - if err := json.Unmarshal(msg.Data, &t); err != nil { - return trace.TraceError(err) - } - if err := svc.handlerSvc.Cancel(t.Id); err != nil { - return trace.TraceError(err) - } - } - - return nil -} - -func (svc *WorkerServiceV2) ReportStatus() { - ticker := time.NewTicker(svc.heartbeatInterval) - for { - // return if client is closed - if svc.client.IsClosed() { - ticker.Stop() - return - } - - // report status - svc.reportStatus() - - // sleep - <-ticker.C - } -} - -func (svc *WorkerServiceV2) GetConfigService() (cfgSvc interfaces.NodeConfigService) { - return svc.cfgSvc -} - -func (svc *WorkerServiceV2) GetConfigPath() (path string) { - return svc.cfgPath -} - -func (svc *WorkerServiceV2) SetConfigPath(path string) { - svc.cfgPath = path -} - -func (svc *WorkerServiceV2) GetAddress() (address interfaces.Address) { - return svc.address -} - -func (svc *WorkerServiceV2) SetAddress(address interfaces.Address) { - svc.address = address -} - -func (svc *WorkerServiceV2) SetHeartbeatInterval(duration time.Duration) { - svc.heartbeatInterval = duration -} - -func (svc *WorkerServiceV2) reportStatus() { - ctx, cancel := context.WithTimeout(context.Background(), svc.heartbeatInterval) - defer cancel() - _, err := svc.client.NodeClient.SendHeartbeat(ctx, &grpc.NodeServiceSendHeartbeatRequest{ - Key: svc.cfgSvc.GetNodeKey(), - }) - if err != nil { - trace.PrintError(err) - } -} - -var workerServiceV2 *WorkerServiceV2 -var workerServiceV2Once = new(sync.Once) - -func newWorkerServiceV2() (res *WorkerServiceV2, err error) { - svc := &WorkerServiceV2{ - cfgPath: config2.GetConfigPath(), - heartbeatInterval: 15 * time.Second, - } - - // dependency options - var clientOpts []client.Option - if svc.address != nil { - clientOpts = append(clientOpts, client.WithAddress(svc.address)) - } - - // node config service - svc.cfgSvc = nodeconfig.GetNodeConfigService() - - // grpc client - svc.client = client.GetGrpcClientV2() - - // handler service - svc.handlerSvc, err = handler.GetTaskHandlerServiceV2() - if err != nil { - return nil, err - } - - // init - err = svc.Init() - if err != nil { - return nil, err - } - - return svc, nil -} - -func GetWorkerServiceV2() (res *WorkerServiceV2, err error) { - workerServiceV2Once.Do(func() { - workerServiceV2, err = newWorkerServiceV2() - if err != nil { - log.Errorf("failed to get worker service: %v", err) - } - }) - return workerServiceV2, err -} diff --git a/core/notification/base_test.go b/core/notification/base_test.go deleted file mode 100644 index 5b29810d3..000000000 --- a/core/notification/base_test.go +++ /dev/null @@ -1,73 +0,0 @@ -package notification - -import ( - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/models/delegate" - "github.com/crawlab-team/crawlab/core/models/models" - "github.com/gavv/httpexpect/v2" - "github.com/spf13/viper" - "go.mongodb.org/mongo-driver/bson/primitive" - "net/http/httptest" - "testing" -) - -func init() { - viper.Set("mongo.db", "crawlab_test") - var err error - T, err = NewTest() - if err != nil { - panic(err) - } -} - -type Test struct { - svc *Service - svr *httptest.Server - - // test data - TestNode interfaces.Node - TestSpider interfaces.Spider - TestTask interfaces.Task - TestTaskStat interfaces.TaskStat -} - -func (t *Test) Setup(t2 *testing.T) { - _ = t.svc.Start() - t2.Cleanup(t.Cleanup) -} - -func (t *Test) Cleanup() { - _ = t.svc.Stop() -} - -func (t *Test) NewExpect(t2 *testing.T) (e *httpexpect.Expect) { - e = httpexpect.New(t2, t.svr.URL) - return e -} - -var T *Test - -func NewTest() (res *Test, err error) { - // test - t := &Test{ - svc: NewService(), - } - - // test node - t.TestNode = &models.Node{Id: primitive.NewObjectID(), Name: "test-node"} - _ = delegate.NewModelDelegate(t.TestNode).Add() - - // test spider - t.TestSpider = &models.Spider{Id: primitive.NewObjectID(), Name: "test-spider"} - _ = delegate.NewModelDelegate(t.TestSpider).Add() - - // test task - t.TestTask = &models.Task{Id: primitive.NewObjectID(), SpiderId: t.TestSpider.GetId(), NodeId: t.TestNode.GetId()} - _ = delegate.NewModelDelegate(t.TestTask).Add() - - // test task stat - t.TestTaskStat = &models.TaskStat{Id: t.TestTask.GetId()} - _ = delegate.NewModelDelegate(t.TestTaskStat).Add() - - return t, nil -} diff --git a/core/notification/constants.go b/core/notification/constants.go index d3f56b721..817f476f0 100644 --- a/core/notification/constants.go +++ b/core/notification/constants.go @@ -1,10 +1,32 @@ package notification const ( - TypeMail = "mail" - TypeMobile = "mobile" + TypeMail = "mail" + TypeIM = "im" ) const ( - SettingsColName = "notification_settings" + ChannelMailProviderGmail = "gmail" + ChannelMailProviderOutlook = "outlook" + ChannelMailProviderYahoo = "yahoo" + ChannelMailProviderICloud = "icloud" + ChannelMailProviderAol = "aol" + ChannelMailProviderZoho = "zoho" + ChannelMailProviderQQ = "qq" + ChannelMailProvider163 = "163" + ChannelMailProviderExmail = "exmail" + + ChannelIMProviderSlack = "slack" // https://api.slack.com/messaging/webhooks + ChannelIMProviderTelegram = "telegram" // https://core.telegram.org/bots/api + ChannelIMProviderDiscord = "discord" // https://support.discord.com/hc/en-us/articles/228383668-Intro-to-Webhooks + ChannelIMProviderMSTeams = "ms_teams" // https://learn.microsoft.com/en-us/microsoftteams/platform/webhooks-and-connectors/how-to/add-incoming-webhook?tabs=newteams%2Cjavascript + ChannelIMProviderWechatWork = "wechat_work" // https://developer.work.weixin.qq.com/document/path/91770 + ChannelIMProviderDingtalk = "dingtalk" // https://open.dingtalk.com/document/orgapp/custom-robot-access + ChannelIMProviderLark = "lark" // https://www.larksuite.com/hc/en-US/articles/099698615114-use-webhook-triggers +) + +const ( + StatusSending = "sending" + StatusSuccess = "success" + StatusError = "error" ) diff --git a/core/notification/entity.go b/core/notification/entity.go new file mode 100644 index 000000000..6ae0fed0a --- /dev/null +++ b/core/notification/entity.go @@ -0,0 +1,15 @@ +package notification + +import ( + "github.com/crawlab-team/crawlab/core/models/models" +) + +type VariableData struct { + Task *models.Task `json:"task"` + TaskStat *models.TaskStat `json:"task_stat"` + Spider *models.Spider `json:"spider"` + Node *models.Node `json:"node"` + Schedule *models.Schedule `json:"schedule"` + Alert *models.NotificationAlert `json:"alert"` + Metric *models.Metric `json:"metric"` +} diff --git a/core/notification/im.go b/core/notification/im.go new file mode 100644 index 000000000..48020a9ac --- /dev/null +++ b/core/notification/im.go @@ -0,0 +1,380 @@ +package notification + +import ( + "bytes" + "encoding/json" + "errors" + "fmt" + "github.com/apex/log" + "github.com/crawlab-team/crawlab/core/entity" + "github.com/crawlab-team/crawlab/core/utils" + "io" + "net/http" + "regexp" + "strings" + "time" + + "github.com/crawlab-team/crawlab/core/models/models" +) + +type ResBody struct { + ErrCode int `json:"errcode"` + ErrMsg string `json:"errmsg"` +} + +// RequestParam represents parameters for HTTP requests +type RequestParam entity.RequestParam + +// performRequest performs an HTTP request with JSON body +func performRequest(method, url string, data interface{}) (*http.Response, []byte, error) { + var reqBody io.Reader + if data != nil { + jsonData, err := json.Marshal(data) + if err != nil { + return nil, nil, fmt.Errorf("failed to marshal request body: %v", err) + } + reqBody = bytes.NewBuffer(jsonData) + } + + req, err := http.NewRequest(method, url, reqBody) + if err != nil { + return nil, nil, fmt.Errorf("failed to create request: %v", err) + } + + req.Header.Set("Content-Type", "application/json; charset=utf-8") + + resp, err := utils.NewHttpClient(15 * time.Second).Do(req) + if err != nil { + return nil, nil, fmt.Errorf("failed to perform request: %v", err) + } + defer resp.Body.Close() + + body, err := io.ReadAll(resp.Body) + if err != nil { + return nil, nil, fmt.Errorf("failed to read response body: %v", err) + } + + return resp, body, nil +} + +func SendIMNotification(ch *models.NotificationChannel, title, content string) error { + switch ch.Provider { + case ChannelIMProviderLark: + return sendIMLark(ch, title, content) + case ChannelIMProviderDingtalk: + return sendIMDingTalk(ch, title, content) + case ChannelIMProviderWechatWork: + return sendIMWechatWork(ch, title, content) + case ChannelIMProviderSlack: + return sendIMSlack(ch, title, content) + case ChannelIMProviderTelegram: + return sendIMTelegram(ch, title, content) + case ChannelIMProviderDiscord: + return sendIMDiscord(ch, title, content) + case ChannelIMProviderMSTeams: + return sendIMMSTeams(ch, title, content) + } + + // request data + data := RequestParam{ + "msgtype": "markdown", + "markdown": RequestParam{ + "title": title, + "text": content, + "content": content, + }, + "at": RequestParam{ + "atMobiles": []string{}, + "isAtAll": false, + }, + "text": content, + } + if strings.Contains(strings.ToLower(ch.WebhookUrl), "feishu") { + data = RequestParam{ + "msg_type": "text", + "content": RequestParam{ + "text": content, + }, + } + } + + // perform request + resp, body, err := performRequest("POST", ch.WebhookUrl, data) + if err != nil { + log.Errorf("IM request error: %v", err) + return err + } + + if resp.StatusCode != http.StatusOK { + return fmt.Errorf("request failed with status code: %d", resp.StatusCode) + } + + // parse response + var resBody ResBody + if err := json.Unmarshal(body, &resBody); err != nil { + log.Errorf("Parsing IM response error: %v", err) + return err + } + + // validate response code + if resBody.ErrCode != 0 { + log.Errorf("IM response error: %s", resBody.ErrMsg) + return errors.New(resBody.ErrMsg) + } + + return nil +} + +func performIMRequest(webhookUrl string, data RequestParam) ([]byte, error) { + resp, body, err := performRequest("POST", webhookUrl, data) + if err != nil { + logger.Errorf("IM request error: %v", err) + return nil, err + } + + if resp.StatusCode >= 400 { + logger.Errorf("IM response status code: %d", resp.StatusCode) + return nil, fmt.Errorf("IM error response %d: %s", resp.StatusCode, string(body)) + } + + return body, nil +} + +func performIMRequestWithJson[T any](webhookUrl string, data RequestParam) (resBody T, err error) { + body, err := performIMRequest(webhookUrl, data) + if err != nil { + return resBody, err + } + + // parse response + if err := json.Unmarshal(body, &resBody); err != nil { + logger.Warnf("Parsing IM response error: %v", err) + logger.Infof("IM response: %s", string(body)) + return resBody, nil + } + + return resBody, nil +} + +func convertMarkdownToSlack(markdown string) string { + // Convert bold text + reBold := regexp.MustCompile(`\*\*(.*?)\*\*`) + slack := reBold.ReplaceAllString(markdown, `*$1*`) + + // Convert italic text + reItalic := regexp.MustCompile(`\*(.*?)\*`) + slack = reItalic.ReplaceAllString(slack, `_$1_`) + + // Convert links + reLink := regexp.MustCompile(`\[(.*?)\]\((.*?)\)`) + slack = reLink.ReplaceAllString(slack, `<$2|$1>`) + + // Convert inline code + reInlineCode := regexp.MustCompile("`(.*?)`") + slack = reInlineCode.ReplaceAllString(slack, "`$1`") + + // Convert unordered list + slack = strings.ReplaceAll(slack, "- ", "• ") + + // Convert ordered list + reOrderedList := regexp.MustCompile(`^\d+\. `) + slack = reOrderedList.ReplaceAllStringFunc(slack, func(s string) string { + return strings.Replace(s, ". ", ". ", 1) + }) + + // Convert blockquote + reBlockquote := regexp.MustCompile(`^> (.*)`) + slack = reBlockquote.ReplaceAllString(slack, `> $1`) + + return slack +} + +func convertMarkdownToTelegram(markdownText string) string { + // Combined regex to handle bold and italic + re := regexp.MustCompile(`(?m)(\*\*)(.*)(\*\*)|(__)(.*)(__)|(\*)(.*)(\*)|(_)(.*)(_)`) + markdownText = re.ReplaceAllStringFunc(markdownText, func(match string) string { + groups := re.FindStringSubmatch(match) + if groups[1] != "" || groups[4] != "" { + // Handle bold + return "*" + match[2:len(match)-2] + "*" + } else if groups[6] != "" || groups[9] != "" { + // Handle italic + return "_" + match[1:len(match)-1] + "_" + } else { + // No match + return match + } + }) + + // Convert unordered list + re = regexp.MustCompile(`(?m)^- (.*)`) + markdownText = re.ReplaceAllString(markdownText, "• $1") + + // Escape characters + escapeChars := []string{"#", "-", "."} + for _, c := range escapeChars { + markdownText = strings.ReplaceAll(markdownText, c, "\\"+c) + } + + return markdownText +} + +func sendIMLark(ch *models.NotificationChannel, title, content string) error { + data := RequestParam{ + "msg_type": "interactive", + "card": RequestParam{ + "header": RequestParam{ + "title": RequestParam{ + "tag": "plain_text", + "content": title, + }, + }, + "elements": []RequestParam{ + { + "tag": "markdown", + "content": content, + }, + }, + }, + } + resBody, err := performIMRequestWithJson[ResBody](ch.WebhookUrl, data) + if err != nil { + return err + } + if resBody.ErrCode != 0 { + return errors.New(resBody.ErrMsg) + } + return nil +} + +func sendIMDingTalk(ch *models.NotificationChannel, title string, content string) error { + data := RequestParam{ + "msgtype": "markdown", + "markdown": RequestParam{ + "title": title, + "text": fmt.Sprintf("# %s\n\n%s", title, content), + }, + } + resBody, err := performIMRequestWithJson[ResBody](ch.WebhookUrl, data) + if err != nil { + return err + } + if resBody.ErrCode != 0 { + return errors.New(resBody.ErrMsg) + } + return nil +} + +func sendIMWechatWork(ch *models.NotificationChannel, title string, content string) error { + data := RequestParam{ + "msgtype": "markdown", + "markdown": RequestParam{ + "content": fmt.Sprintf("# %s\n\n%s", title, content), + }, + } + resBody, err := performIMRequestWithJson[ResBody](ch.WebhookUrl, data) + if err != nil { + return err + } + if resBody.ErrCode != 0 { + return errors.New(resBody.ErrMsg) + } + return nil +} + +func sendIMSlack(ch *models.NotificationChannel, title, content string) error { + data := RequestParam{ + "blocks": []RequestParam{ + {"type": "header", "text": RequestParam{"type": "plain_text", "text": title}}, + {"type": "section", "text": RequestParam{"type": "mrkdwn", "text": convertMarkdownToSlack(content)}}, + }, + } + _, err := performIMRequest(ch.WebhookUrl, data) + if err != nil { + return err + } + return nil +} + +func sendIMTelegram(ch *models.NotificationChannel, title string, content string) error { + type ResBody struct { + Ok bool `json:"ok"` + Description string `json:"description"` + } + + // chat id + chatId := ch.TelegramChatId + if !strings.HasPrefix("@", ch.TelegramChatId) { + chatId = fmt.Sprintf("@%s", ch.TelegramChatId) + } + + // webhook url + webhookUrl := fmt.Sprintf("https://api.telegram.org/bot%s/sendMessage", ch.TelegramBotToken) + + // original Markdown text + text := fmt.Sprintf("**%s**\n\n%s", title, content) + + // convert to Telegram MarkdownV2 + text = convertMarkdownToTelegram(text) + + // request data + data := RequestParam{ + "chat_id": chatId, + "text": text, + "parse_mode": "MarkdownV2", + } + + // perform request + _, err := performIMRequest(webhookUrl, data) + if err != nil { + return err + } + return nil +} + +func sendIMDiscord(ch *models.NotificationChannel, title string, content string) error { + data := RequestParam{ + "embeds": []RequestParam{ + { + "title": title, + "description": content, + }, + }, + } + _, err := performIMRequest(ch.WebhookUrl, data) + if err != nil { + return err + } + return nil +} + +func sendIMMSTeams(ch *models.NotificationChannel, title string, content string) error { + data := RequestParam{ + "type": "message", + "attachments": []RequestParam{{ + "contentType": "application/vnd.microsoft.card.adaptive", + "contentUrl": nil, + "content": RequestParam{ + "$schema": "https://adaptivecards.io/schemas/adaptive-card.json", + "type": "AdaptiveCard", + "version": "1.2", + "body": []RequestParam{ + { + "type": "TextBlock", + "text": fmt.Sprintf("**%s**", title), + "size": "Large", + }, + { + "type": "TextBlock", + "text": content, + }, + }, + }, + }}, + } + _, err := performIMRequest(ch.WebhookUrl, data) + if err != nil { + return err + } + return nil +} diff --git a/core/notification/logger.go b/core/notification/logger.go new file mode 100644 index 000000000..476da1b5d --- /dev/null +++ b/core/notification/logger.go @@ -0,0 +1,5 @@ +package notification + +import "github.com/crawlab-team/crawlab/core/utils" + +var logger = utils.NewLogger("NotificationUtils") diff --git a/core/notification/mail.go b/core/notification/mail.go index 905a5446a..38b73f978 100644 --- a/core/notification/mail.go +++ b/core/notification/mail.go @@ -2,86 +2,75 @@ package notification import ( "errors" - "github.com/apex/log" + "github.com/PuerkitoBio/goquery" "github.com/crawlab-team/crawlab/core/models/models" - "github.com/matcornic/hermes/v2" "gopkg.in/gomail.v2" "net/mail" - "runtime/debug" - "strconv" + "regexp" "strings" ) -func SendMail(m *models.NotificationSettingMail, to, cc, title, content string) error { - // theme - theme := new(MailThemeFlat) - - // hermes instance - h := hermes.Hermes{ - Theme: theme, - Product: hermes.Product{ - Logo: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzAwIiBoZWlnaHQ9IjMwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGZpbGw9Im5vbmUiPgogICAgICAgIDxjaXJjbGUgY3g9IjE1MCIgY3k9IjE1MCIgcj0iMTMwIiBmaWxsPSJub25lIiBzdHJva2Utd2lkdGg9IjQwIiBzdHJva2U9IiM0MDllZmYiPgogICAgICAgIDwvY2lyY2xlPgogICAgICAgIDxjaXJjbGUgY3g9IjE1MCIgY3k9IjE1MCIgcj0iMTEwIiBmaWxsPSJ3aGl0ZSI+CiAgICAgICAgPC9jaXJjbGU+CiAgICAgICAgPGNpcmNsZSBjeD0iMTUwIiBjeT0iMTUwIiByPSI3MCIgZmlsbD0iIzQwOWVmZiI+CiAgICAgICAgPC9jaXJjbGU+CiAgICAgICAgPHBhdGggZD0iCiAgICAgICAgICAgIE0gMTUwLDE1MAogICAgICAgICAgICBMIDI4MCwyMjUKICAgICAgICAgICAgQSAxNTAsMTUwIDkwIDAgMCAyODAsNzUKICAgICAgICAgICAgIiBmaWxsPSIjNDA5ZWZmIj4KICAgICAgICA8L3BhdGg+CiAgICA8L2c+Cjwvc3ZnPgo=", - Name: "Crawlab", - Copyright: "© 2024 Crawlab-Team", - }, +func SendMail(s *models.NotificationSetting, ch *models.NotificationChannel, to, cc, bcc []string, title, content string) error { + // sender identity + senderIdentity := ch.SMTPUsername + + // sender email + senderEmail := ch.SMTPUsername + if s != nil && s.UseCustomSenderEmail { + if s.SenderName != "" { + senderIdentity = s.SenderName + } + senderEmail = s.SenderEmail } // config - port, _ := strconv.Atoi(m.Port) - password := m.Password // test password: ALWVDPRHBEXOENXD - SMTPUser := m.User smtpConfig := smtpAuthentication{ - Server: m.Server, - Port: port, - SenderEmail: m.SenderEmail, - SenderIdentity: m.SenderIdentity, - SMTPPassword: password, - SMTPUser: SMTPUser, + Server: ch.SMTPServer, + Port: ch.SMTPPort, + SenderIdentity: senderIdentity, + SenderEmail: senderEmail, + SMTPUser: ch.SMTPUsername, + SMTPPassword: ch.SMTPPassword, } + options := sendOptions{ + Subject: title, To: to, Cc: cc, - Subject: title, + Bcc: bcc, } - // add style - content += theme.GetStyle() - - // markdown - markdown := hermes.Markdown(content + GetFooter()) - - // email instance - email := hermes.Email{ - Body: hermes.Body{ - Signature: "Happy Crawling ☺", - FreeMarkdown: markdown, - }, + // convert html to text + text := content + if isHtml(text) { + text = convertHtmlToText(text) } - // generate html - html, err := h.GenerateHTML(email) - if err != nil { - log.Errorf(err.Error()) - debug.PrintStack() - return err + // apply theme + if isHtml(content) { + content = GetTheme() + content } - // generate text - text, err := h.GeneratePlainText(email) - if err != nil { - log.Errorf(err.Error()) - debug.PrintStack() - return err + switch ch.Provider { + case ChannelMailProviderGmail: + return sendMailGmail(ch, smtpConfig, options, content, text) + default: + return sendMail(smtpConfig, options, content, text) } +} - // send the email - if err := send(smtpConfig, options, html, text); err != nil { - log.Errorf(err.Error()) - debug.PrintStack() - return err - } +func isHtml(content string) bool { + regex := regexp.MustCompile(`(?i)<\s*(html|head|body|div|span|p|a|img|table|tr|td|th|tbody|thead|tfoot|ul|ol|li|dl|dt|dd|form|input|textarea|button|select|option|optgroup|fieldset|legend|label|iframe|embed|object|param|video|audio|source|canvas|svg|math|style|link|script|meta|base|title|br|hr|b|strong|i|em|u|s|strike|del|ins|mark|small|sub|sup|big|pre|code|q|blockquote|abbr|address|bdo|cite|dfn|kbd|var|samp|ruby|rt|rp|time|progress|meter|output|area|map)`) + return regex.MatchString(content) +} - return nil +func convertHtmlToText(content string) string { + doc, err := goquery.NewDocumentFromReader(strings.NewReader(content)) + if err != nil { + logger.Errorf("failed to convert html to text: %v", err) + return "" + } + return doc.Text() } type smtpAuthentication struct { @@ -95,84 +84,61 @@ type smtpAuthentication struct { // sendOptions are options for sending an email type sendOptions struct { - To string Subject string - Cc string + To []string + Cc []string + Bcc []string } -// send email -func send(smtpConfig smtpAuthentication, options sendOptions, htmlBody string, txtBody string) error { - if smtpConfig.Server == "" { - return errors.New("SMTP server config is empty") +func getMailMessage(smtpConfig smtpAuthentication, options sendOptions, htmlBody string, txtBody string) (m *gomail.Message, err error) { + if len(options.To) == 0 { + return nil, errors.New("no receiver emails configured") } - if smtpConfig.Port == 0 { - return errors.New("SMTP port config is empty") + // from + from := mail.Address{ + Name: smtpConfig.SenderIdentity, + Address: smtpConfig.SenderEmail, } - if smtpConfig.SMTPUser == "" { - return errors.New("SMTP user is empty") + // message + m = gomail.NewMessage() + m.SetHeader("From", from.String()) + m.SetHeader("To", options.To...) + m.SetHeader("Subject", options.Subject) + if len(options.Cc) > 0 { + m.SetHeader("Cc", options.Cc...) } - - if smtpConfig.SenderIdentity == "" { - return errors.New("SMTP sender identity is empty") + if len(options.Bcc) > 0 { + m.SetHeader("Bcc", options.Bcc...) } + m.SetBody("text/plain", txtBody) + m.AddAlternative("text/html", htmlBody) - if smtpConfig.SenderEmail == "" { - return errors.New("SMTP sender email is empty") - } + return m, nil +} - if options.To == "" { - return errors.New("no receiver emails configured") +// send email +func sendMail(smtpConfig smtpAuthentication, options sendOptions, htmlBody string, txtBody string) error { + if smtpConfig.Server == "" { + return errors.New("SMTP server config is empty") } - from := mail.Address{ - Name: smtpConfig.SenderIdentity, - Address: smtpConfig.SenderEmail, + if smtpConfig.Port == 0 { + return errors.New("SMTP port config is empty") } - var toList []string - if strings.Contains(options.To, ";") { - toList = strings.Split(options.To, ";") - // trim space - for i, to := range toList { - toList[i] = strings.TrimSpace(to) - } - } else { - toList = []string{options.To} + if smtpConfig.SMTPUser == "" { + return errors.New("SMTP user is empty") } - m := gomail.NewMessage() - m.SetHeader("From", from.String()) - m.SetHeader("To", getRecipientList(options.To)...) - m.SetHeader("Subject", options.Subject) - if options.Cc != "" { - m.SetHeader("Cc", getRecipientList(options.Cc)...) + m, err := getMailMessage(smtpConfig, options, htmlBody, txtBody) + if err != nil { + return err } - m.SetBody("text/plain", txtBody) - m.AddAlternative("text/html", htmlBody) - + // dialer d := gomail.NewDialer(smtpConfig.Server, smtpConfig.Port, smtpConfig.SMTPUser, smtpConfig.SMTPPassword) return d.DialAndSend(m) } - -func getRecipientList(value string) (values []string) { - if strings.Contains(value, ";") { - values = strings.Split(value, ";") - // trim space - for i, v := range values { - values[i] = strings.TrimSpace(v) - } - } else { - values = []string{value} - } - return values -} - -func GetFooter() string { - return ` -[Github](https://github.com/crawlab-team/crawlab) | [Documentation](http://docs.crawlab.cn) | [Docker](https://hub.docker.com/r/tikazyq/crawlab) -` -} diff --git a/core/notification/mail_gmail.go b/core/notification/mail_gmail.go new file mode 100644 index 000000000..8592744ea --- /dev/null +++ b/core/notification/mail_gmail.go @@ -0,0 +1,60 @@ +package notification + +import ( + "context" + "encoding/base64" + "github.com/crawlab-team/crawlab/core/models/models" + "github.com/crawlab-team/crawlab/trace" + "golang.org/x/oauth2/google" + "google.golang.org/api/gmail/v1" + "strings" +) + +func sendMailGmail(ch *models.NotificationChannel, smtpConfig smtpAuthentication, options sendOptions, htmlBody, txtBody string) error { + // 读取服务账户 JSON 密钥 + b := []byte(ch.GoogleOAuth2Json) + + // 使用服务账户 JSON 密钥文件创建 JWT 配置 + config, err := google.JWTConfigFromJSON(b, gmail.GmailSendScope) + if err != nil { + logger.Errorf("Unable to parse service account key file to config: %v", err) + return trace.TraceError(err) + } + + // 使用服务账户的电子邮件地址来模拟用户 + config.Subject = ch.SMTPUsername + + // 创建 Gmail 服务 + client := config.Client(context.Background()) + srv, err := gmail.New(client) + if err != nil { + logger.Errorf("Unable to create Gmail client: %v", err) + return err + } + + // 创建 MIME 邮件 + m, err := getMailMessage(smtpConfig, options, htmlBody, txtBody) + if err != nil { + return err + } + + var buf strings.Builder + if _, err := m.WriteTo(&buf); err != nil { + logger.Errorf("Unable to write message: %v", err) + return err + } + + // 将邮件内容进行 base64 编码 + gmsg := &gmail.Message{ + Raw: base64.URLEncoding.EncodeToString([]byte(buf.String())), + } + + // 发送邮件 + _, err = srv.Users.Messages.Send("me", gmsg).Do() + if err != nil { + logger.Errorf("Unable to send email: %v", err) + return err + } + + return nil +} diff --git a/core/notification/mail_theme.go b/core/notification/mail_theme.go deleted file mode 100644 index 9266ddd8c..000000000 --- a/core/notification/mail_theme.go +++ /dev/null @@ -1,8 +0,0 @@ -package notification - -import "github.com/matcornic/hermes/v2" - -type MailTheme interface { - hermes.Theme - GetStyle() string -} diff --git a/core/notification/mail_theme_flat.go b/core/notification/mail_theme_flat.go deleted file mode 100644 index 6edb480f2..000000000 --- a/core/notification/mail_theme_flat.go +++ /dev/null @@ -1,287 +0,0 @@ -package notification - -// MailThemeFlat is a theme -type MailThemeFlat struct{} - -// Name returns the name of the flat theme -func (dt *MailThemeFlat) Name() string { - return "flat" -} - -// HTMLTemplate returns a Golang template that will generate an HTML email. -func (dt *MailThemeFlat) HTMLTemplate() string { - return ` - - - - - - - - - - - - - - - -` -} - -// PlainTextTemplate returns a Golang template that will generate an plain text email. -func (dt *MailThemeFlat) PlainTextTemplate() string { - return `{{ with .Email.Body.Intros }} - {{ range $line := . }} -

{{ $line }}

- {{ end }} -{{ end }} -{{ if (ne .Email.Body.FreeMarkdown "") }} - {{ .Email.Body.FreeMarkdown.ToHTML }} -{{ else }} - {{ with .Email.Body.Dictionary }} -
    - {{ range $entry := . }} -
  • {{ $entry.Key }}: {{ $entry.Value }}
  • - {{ end }} -
- {{ end }} - {{ with .Email.Body.Table }} - {{ $data := .Data }} - {{ $columns := .Columns }} - {{ if gt (len $data) 0 }} - - - {{ $col := index $data 0 }} - {{ range $entry := $col }} - - {{ end }} - - {{ range $row := $data }} - - {{ range $cell := $row }} - - {{ end }} - - {{ end }} -
{{ $entry.Key }}
- {{ $cell.Value }} -
- {{ end }} - {{ end }} - {{ with .Email.Body.Actions }} - {{ range $action := . }} -

{{ $action.Instructions }} {{ $action.Button.Link }}

- {{ end }} - {{ end }} -{{ end }} -{{ with .Email.Body.Outros }} - {{ range $line := . }} -

{{ $line }}

- {{ end }} -{{ end }} -

{{.Email.Body.Signature}},
{{.Hermes.Product.Name}} - {{.Hermes.Product.Link}}

- -

{{.Hermes.Product.Copyright}}

-` -} - -func (dt *MailThemeFlat) GetStyle() string { - return ` - -` -} diff --git a/core/notification/mobile.go b/core/notification/mobile.go deleted file mode 100644 index 90a238705..000000000 --- a/core/notification/mobile.go +++ /dev/null @@ -1,62 +0,0 @@ -package notification - -import ( - "errors" - "github.com/crawlab-team/crawlab/trace" - "github.com/imroc/req" - "strings" -) - -type ResBody struct { - ErrCode int `json:"errcode"` - ErrMsg string `json:"errmsg"` -} - -func SendMobileNotification(webhook string, title string, content string) error { - // request header - header := req.Header{ - "Content-Type": "application/json; charset=utf-8", - } - - // request data - data := req.Param{ - "msgtype": "markdown", - "markdown": req.Param{ - "title": title, - "text": content, - "content": content, - }, - "at": req.Param{ - "atMobiles": []string{}, - "isAtAll": false, - }, - "text": content, - } - if strings.Contains(strings.ToLower(webhook), "feishu") { - data = req.Param{ - "msg_type": "text", - "content": req.Param{ - "text": content, - }, - } - } - - // perform request - res, err := req.Post(webhook, header, req.BodyJSON(&data)) - if err != nil { - return trace.TraceError(err) - } - - // parse response - var resBody ResBody - if err := res.ToJSON(&resBody); err != nil { - return trace.TraceError(err) - } - - // validate response code - if resBody.ErrCode != 0 { - return errors.New(resBody.ErrMsg) - } - - return nil -} diff --git a/core/notification/models.go b/core/notification/models.go deleted file mode 100644 index efb554486..000000000 --- a/core/notification/models.go +++ /dev/null @@ -1,32 +0,0 @@ -package notification - -import "go.mongodb.org/mongo-driver/bson/primitive" - -type NotificationSetting struct { - Id primitive.ObjectID `json:"_id" bson:"_id"` - Type string `json:"type" bson:"type"` - Name string `json:"name" bson:"name"` - Description string `json:"description" bson:"description"` - Enabled bool `json:"enabled" bson:"enabled"` - Global bool `json:"global" bson:"global"` - Title string `json:"title,omitempty" bson:"title,omitempty"` - Template string `json:"template,omitempty" bson:"template,omitempty"` - TaskTrigger string `json:"task_trigger" bson:"task_trigger"` - Mail NotificationSettingMail `json:"mail,omitempty" bson:"mail,omitempty"` - Mobile NotificationSettingMobile `json:"mobile,omitempty" bson:"mobile,omitempty"` -} - -type NotificationSettingMail struct { - Server string `json:"server" bson:"server"` - Port string `json:"port,omitempty" bson:"port,omitempty"` - User string `json:"user,omitempty" bson:"user,omitempty"` - Password string `json:"password,omitempty" bson:"password,omitempty"` - SenderEmail string `json:"sender_email,omitempty" bson:"sender_email,omitempty"` - SenderIdentity string `json:"sender_identity,omitempty" bson:"sender_identity,omitempty"` - To string `json:"to,omitempty" bson:"to,omitempty"` - Cc string `json:"cc,omitempty" bson:"cc,omitempty"` -} - -type NotificationSettingMobile struct { - Webhook string `json:"webhook" bson:"webhook"` -} diff --git a/core/notification/oauth2_gmail.go b/core/notification/oauth2_gmail.go new file mode 100644 index 000000000..a8bf07815 --- /dev/null +++ b/core/notification/oauth2_gmail.go @@ -0,0 +1,46 @@ +package notification + +import ( + "context" + "golang.org/x/oauth2" + "golang.org/x/oauth2/google" + "net/smtp" + "time" +) + +// 获取服务账户的OAuth2配置 +func getGmailOAuth2Token(oauth2Json string) (token *oauth2.Token, err error) { + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + + // 读取服务账户 JSON 密钥 + b := []byte(oauth2Json) + + // 使用服务账户 JSON 密钥文件创建 JWT 配置 + config, err := google.JWTConfigFromJSON(b, "https://mail.google.com/") + if err != nil { + logger.Errorf("Unable to parse service account key file to config: %v", err) + return nil, err + } + + // 使用服务账户的电子邮件和访问令牌 + token, err = config.TokenSource(ctx).Token() + if err != nil { + logger.Errorf("Unable to generate token: %v", err) + return nil, err + } + return token, nil +} + +// GmailOAuth2Auth 自定义OAuth2认证 +type GmailOAuth2Auth struct { + username, accessToken string +} + +func (a *GmailOAuth2Auth) Start(_ *smtp.ServerInfo) (string, []byte, error) { + return "XOAUTH2", []byte("user=" + a.username + "\x01auth=Bearer " + a.accessToken + "\x01\x01"), nil +} + +func (a *GmailOAuth2Auth) Next(_ []byte, _ bool) ([]byte, error) { + return nil, nil +} diff --git a/core/notification/payload.go b/core/notification/payload.go deleted file mode 100644 index 7337ebe0f..000000000 --- a/core/notification/payload.go +++ /dev/null @@ -1,8 +0,0 @@ -package notification - -import "go.mongodb.org/mongo-driver/bson/primitive" - -type SendPayload struct { - TaskId primitive.ObjectID `json:"task_id"` - Data string `json:"data"` -} diff --git a/core/notification/service.go b/core/notification/service.go index 37a7f93d0..31eb7c0f9 100644 --- a/core/notification/service.go +++ b/core/notification/service.go @@ -1,395 +1,622 @@ package notification import ( - "github.com/apex/log" + "fmt" + "github.com/crawlab-team/crawlab/core/interfaces" + "github.com/crawlab-team/crawlab/core/utils" + "regexp" + "strings" + "sync" + "time" + "github.com/crawlab-team/crawlab/core/constants" "github.com/crawlab-team/crawlab/core/entity" "github.com/crawlab-team/crawlab/core/models/models" "github.com/crawlab-team/crawlab/core/models/service" - "github.com/crawlab-team/crawlab/core/utils" - mongo2 "github.com/crawlab-team/crawlab/db/mongo" - parser "github.com/crawlab-team/crawlab/template-parser" + "github.com/gomarkdown/markdown" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" - "go.mongodb.org/mongo-driver/mongo" ) type Service struct { - col *mongo2.Col // notification settings - modelSvc service.ModelService + interfaces.Logger } -func (svc *Service) Init() (err error) { - if !utils.IsPro() { - return nil +func (svc *Service) Send(s *models.NotificationSetting, args ...any) { + title := s.Title + + wg := sync.WaitGroup{} + wg.Add(len(s.ChannelIds)) + for _, chId := range s.ChannelIds { + go func(chId primitive.ObjectID) { + defer wg.Done() + ch, err := service.NewModelService[models.NotificationChannel]().GetById(chId) + if err != nil { + svc.Errorf("[NotificationService] get channel error: %v", err) + return + } + content := svc.getContent(s, ch, args...) + switch ch.Type { + case TypeMail: + svc.SendMail(s, ch, title, content) + case TypeIM: + svc.SendIM(ch, title, content) + } + }(chId) } - - return nil + wg.Wait() } -func (svc *Service) Start() (err error) { - // initialize data - if err := svc.initData(); err != nil { - return err +func (svc *Service) SendMail(s *models.NotificationSetting, ch *models.NotificationChannel, title, content string) { + mailTo := s.MailTo + mailCc := s.MailCc + mailBcc := s.MailBcc + + // request + r, _ := svc.createRequestMail(s, ch, title, content) + + // send mail + err := SendMail(s, ch, mailTo, mailCc, mailBcc, title, content) + if err != nil { + svc.Errorf("[NotificationService] send mail error: %v", err) } - return nil + // save request + go svc.saveRequest(r, err) } -func (svc *Service) Stop() (err error) { - return nil -} +func (svc *Service) SendIM(ch *models.NotificationChannel, title, content string) { + // request + r, _ := svc.createRequestIM(ch, title, content, false) -func (svc *Service) initData() (err error) { - total, err := svc.col.Count(nil) + // send mobile notification + err := SendIMNotification(ch, title, content) if err != nil { - return err - } - if total > 0 { - return nil + svc.Errorf("[NotificationService] send mobile notification error: %v", err) } - // data to initialize - settings := []NotificationSetting{ - { - Id: primitive.NewObjectID(), - Type: TypeMail, - Enabled: true, - Name: "任务通知(邮件)", - Description: "这是默认的邮件通知。您可以使用您自己的设置进行编辑。", - TaskTrigger: constants.NotificationTriggerTaskFinish, - Title: "[Crawlab] 爬虫任务更新: {{$.status}}", - Template: `尊敬的 {{$.user.username}}, - -请查看下面的任务数据。 - -|键|值| -|:-:|:--| -|任务状态|{{$.status}}| -|任务优先级|{{$.priority}}| -|任务模式|{{$.mode}}| -|执行命令|{{$.cmd}}| -|执行参数|{{$.param}}| -|错误信息|{{$.error}}| -|节点|{{$.node.name}}| -|爬虫|{{$.spider.name}}| -|项目|{{$.spider.project.name}}| -|定时任务|{{$.schedule.name}}| -|结果数|{{$.:task_stat.result_count}}| -|等待时间(秒)|{#{{$.:task_stat.wait_duration}}/1000#}| -|运行时间(秒)|{#{{$.:task_stat.runtime_duration}}/1000#}| -|总时间(秒)|{#{{$.:task_stat.total_duration}}/1000#}| -|平均结果数/秒|{#{{$.:task_stat.result_count}}/({{$.:task_stat.total_duration}}/1000)#}| -`, - Mail: NotificationSettingMail{ - Server: "smtp.163.com", - Port: "465", - To: "{{$.user[create].email}}", - }, - }, - { - Id: primitive.NewObjectID(), - Type: TypeMail, - Enabled: true, - Name: "Task Change (Mail)", - Description: "This is the default mail notification. You can edit it with your own settings", - TaskTrigger: constants.NotificationTriggerTaskFinish, - Title: "[Crawlab] Task Update: {{$.status}}", - Template: `Dear {{$.user.username}}, - -Please find the task data as below. - -|Key|Value| -|:-:|:--| -|Task Status|{{$.status}}| -|Task Priority|{{$.priority}}| -|Task Mode|{{$.mode}}| -|Task Command|{{$.cmd}}| -|Task Params|{{$.param}}| -|Error Message|{{$.error}}| -|Node|{{$.node.name}}| -|Spider|{{$.spider.name}}| -|Project|{{$.spider.project.name}}| -|Schedule|{{$.schedule.name}}| -|Result Count|{{$.:task_stat.result_count}}| -|Wait Duration (sec)|{#{{$.:task_stat.wait_duration}}/1000#}| -|Runtime Duration (sec)|{#{{$.:task_stat.runtime_duration}}/1000#}| -|Total Duration (sec)|{#{{$.:task_stat.total_duration}}/1000#}| -|Avg Results / Sec|{#{{$.:task_stat.result_count}}/({{$.:task_stat.total_duration}}/1000)#}| -`, - Mail: NotificationSettingMail{ - Server: "smtp.163.com", - Port: "465", - To: "{{$.user[create].email}}", - }, - }, - { - Id: primitive.NewObjectID(), - Type: TypeMobile, - Enabled: true, - Name: "任务通知(移动端)", - Description: "这是默认的手机通知。您可以使用您自己的设置进行编辑。", - TaskTrigger: constants.NotificationTriggerTaskFinish, - Title: "[Crawlab] 任务更新: {{$.status}}", - Template: `尊敬的 {{$.user.username}}, - -请查看下面的任务数据。 - -- **任务状态**: {{$.status}} -- **任务优先级**: {{$.priority}} -- **任务模式**: {{$.mode}} -- **执行命令**: {{$.cmd}} -- **执行参数**: {{$.param}} -- **错误信息**: {{$.error}} -- **节点**: {{$.node.name}} -- **爬虫**: {{$.spider.name}} -- **项目**: {{$.spider.project.name}} -- **定时任务**: {{$.schedule.name}} -- **结果数**: {{$.:task_stat.result_count}} -- **等待时间(秒)**: {#{{$.:task_stat.wait_duration}}/1000#} -- **运行时间(秒)**: {#{{$.:task_stat.runtime_duration}}/1000#} -- **总时间(秒)**: {#{{$.:task_stat.total_duration}}/1000#} -- **平均结果数/秒**: {#{{$.:task_stat.result_count}}/({{$.:task_stat.total_duration}}/1000)#}`, - Mobile: NotificationSettingMobile{}, - }, - { - Id: primitive.NewObjectID(), - Type: TypeMobile, - Enabled: true, - Name: "Task Change (Mobile)", - Description: "This is the default mobile notification. You can edit it with your own settings", - TaskTrigger: constants.NotificationTriggerTaskError, - Title: "[Crawlab] Task Update: {{$.status}}", - Template: `Dear {{$.user.username}}, - -Please find the task data as below. - -- **Task Status**: {{$.status}} -- **Task Priority**: {{$.priority}} -- **Task Mode**: {{$.mode}} -- **Task Command**: {{$.cmd}} -- **Task Params**: {{$.param}} -- **Error Message**: {{$.error}} -- **Node**: {{$.node.name}} -- **Spider**: {{$.spider.name}} -- **Project**: {{$.spider.project.name}} -- **Schedule**: {{$.schedule.name}} -- **Result Count**: {{$.:task_stat.result_count}} -- **Wait Duration (sec)**: {#{{$.:task_stat.wait_duration}}/1000#} -- **Runtime Duration (sec)**: {#{{$.:task_stat.runtime_duration}}/1000#} -- **Total Duration (sec)**: {#{{$.:task_stat.total_duration}}/1000#} -- **Avg Results / Sec**: {#{{$.:task_stat.result_count}}/({{$.:task_stat.total_duration}}/1000)#}`, - Mobile: NotificationSettingMobile{}, - }, - } - var data []interface{} - for _, s := range settings { - data = append(data, s) - } - _, err = svc.col.InsertMany(data) - if err != nil { - return err - } - return nil + // save request + go svc.saveRequest(r, err) } -func (svc *Service) Send(s NotificationSetting, entity bson.M) (err error) { - switch s.Type { - case TypeMail: - return svc.SendMail(s, entity) - case TypeMobile: - return svc.SendMobile(s, entity) +func (svc *Service) SendTestMessage(locale string, ch *models.NotificationChannel, toMail []string) (err error) { + // Test message content + var title, content string + switch locale { + case "zh": + title = "测试通知" + content = "这是来自 Crawlab 的测试通知。如果您收到此消息,说明您的通知渠道配置正确。" + default: + title = "Test Notification" + content = "This is a test notification from Crawlab. If you receive this message, your notification channel is configured correctly." } - return nil -} -func (svc *Service) SendMail(s NotificationSetting, entity bson.M) (err error) { - // to - to, err := parser.Parse(s.Mail.To, entity) - if err != nil { - log.Warnf("parsing 'to' error: %v", err) - } - if to == "" { - return nil - } + // Notification request + var r *models.NotificationRequest - // cc - cc, err := parser.Parse(s.Mail.Cc, entity) - if err != nil { - log.Warnf("parsing 'cc' error: %v", err) - } + // Send test message based on channel type + switch ch.Type { + case TypeMail: + // If toMail is nil, use the default email address + if toMail == nil { + toMail = []string{ch.SMTPUsername} + } - // title - title, err := parser.Parse(s.Title, entity) - if err != nil { - log.Warnf("parsing 'title' error: %v", err) - } + // Create request + r, _ = svc.createRequestMailTest(ch, title, content, toMail) - // content - content, err := parser.Parse(s.Template, entity) - if err != nil { - log.Warnf("parsing 'content' error: %v", err) - } + // For email + err = SendMail(nil, ch, toMail, nil, nil, title, content) + if err != nil { + svc.Errorf("failed to send test email: %v", err) + } - // send mail - if err := SendMail(&models.NotificationSettingMail{ - Server: s.Mail.Server, - Port: s.Mail.Port, - User: s.Mail.User, - Password: s.Mail.Password, - SenderEmail: s.Mail.SenderEmail, - SenderIdentity: s.Mail.SenderIdentity, - To: s.Mail.To, - Cc: s.Mail.Cc, - }, to, cc, title, content); err != nil { - return err + case TypeIM: + // Create request + r, _ = svc.createRequestIM(ch, title, content, true) + + // For instant messaging + err = SendIMNotification(ch, title, content) + if err != nil { + svc.Errorf("failed to send test IM notification: %v", err) + } + + default: + return fmt.Errorf("unsupported notification channel type: %s", ch.Type) } - return nil + // Save request + go svc.saveRequest(r, err) + + return err } -func (svc *Service) SendMobile(s NotificationSetting, entity bson.M) (err error) { - // webhook - webhook, err := parser.Parse(s.Mobile.Webhook, entity) - if err != nil { - log.Warnf("parsing 'webhook' error: %v", err) - } - if webhook == "" { - return nil +func (svc *Service) getContent(s *models.NotificationSetting, ch *models.NotificationChannel, args ...any) (content string) { + vd := svc.getVariableData(args...) + switch s.TemplateMode { + case constants.NotificationTemplateModeMarkdown: + variables := svc.parseTemplateVariables(s.TemplateMarkdown) + content = svc.geContentWithVariables(s.TemplateMarkdown, variables, vd) + if ch.Type == TypeMail { + content = svc.convertMarkdownToHtml(content) + } + return content + case constants.NotificationTemplateModeRichText: + template := s.TemplateRichText + if ch.Type == TypeIM { + template = s.TemplateMarkdown + } + variables := svc.parseTemplateVariables(template) + return svc.geContentWithVariables(template, variables, vd) } - // title - title, err := parser.Parse(s.Title, entity) - if err != nil { - log.Warnf("parsing 'title' error: %v", err) - } + return content +} - // content - content, err := parser.Parse(s.Template, entity) - if err != nil { - log.Warnf("parsing 'content' error: %v", err) - } +func (svc *Service) geContentWithVariables(template string, variables []entity.NotificationVariable, vd VariableData) (content string) { + content = template + for _, v := range variables { + switch v.Category { + case "task": + if vd.Task == nil { + content = strings.ReplaceAll(content, v.GetKey(), "N/A") + continue + } + switch v.Name { + case "id": + content = strings.ReplaceAll(content, v.GetKey(), vd.Task.Id.Hex()) + case "status": + content = strings.ReplaceAll(content, v.GetKey(), vd.Task.Status) + case "cmd": + content = strings.ReplaceAll(content, v.GetKey(), vd.Task.Cmd) + case "param": + content = strings.ReplaceAll(content, v.GetKey(), vd.Task.Param) + case "error": + content = strings.ReplaceAll(content, v.GetKey(), vd.Task.Error) + case "pid": + content = strings.ReplaceAll(content, v.GetKey(), fmt.Sprintf("%d", vd.Task.Pid)) + case "type": + content = strings.ReplaceAll(content, v.GetKey(), vd.Task.Type) + case "mode": + content = strings.ReplaceAll(content, v.GetKey(), vd.Task.Mode) + case "priority": + content = strings.ReplaceAll(content, v.GetKey(), fmt.Sprintf("%d", vd.Task.Priority)) + case "created_ts": + content = strings.ReplaceAll(content, v.GetKey(), svc.getFormattedTime(vd.Task.CreatedAt)) + case "created_by": + content = strings.ReplaceAll(content, v.GetKey(), svc.getUsernameById(vd.Task.CreatedBy)) + case "updated_ts": + content = strings.ReplaceAll(content, v.GetKey(), svc.getFormattedTime(vd.Task.UpdatedAt)) + case "updated_by": + content = strings.ReplaceAll(content, v.GetKey(), svc.getUsernameById(vd.Task.UpdatedBy)) + } + + case "task_stat": + if vd.TaskStat == nil { + content = strings.ReplaceAll(content, v.GetKey(), "N/A") + continue + } + switch v.Name { + case "start_ts": + content = strings.ReplaceAll(content, v.GetKey(), svc.getFormattedTime(vd.TaskStat.StartTs)) + case "end_ts": + content = strings.ReplaceAll(content, v.GetKey(), svc.getFormattedTime(vd.TaskStat.EndTs)) + case "wait_duration": + content = strings.ReplaceAll(content, v.GetKey(), fmt.Sprintf("%ds", vd.TaskStat.WaitDuration/1000)) + case "runtime_duration": + content = strings.ReplaceAll(content, v.GetKey(), fmt.Sprintf("%ds", vd.TaskStat.RuntimeDuration/1000)) + case "total_duration": + content = strings.ReplaceAll(content, v.GetKey(), fmt.Sprintf("%ds", vd.TaskStat.TotalDuration/1000)) + case "result_count": + content = strings.ReplaceAll(content, v.GetKey(), fmt.Sprintf("%d", vd.TaskStat.ResultCount)) + } + + case "spider": + if vd.Spider == nil { + content = strings.ReplaceAll(content, v.GetKey(), "N/A") + continue + } + switch v.Name { + case "id": + content = strings.ReplaceAll(content, v.GetKey(), vd.Spider.Id.Hex()) + case "name": + content = strings.ReplaceAll(content, v.GetKey(), vd.Spider.Name) + case "description": + content = strings.ReplaceAll(content, v.GetKey(), vd.Spider.Description) + case "mode": + content = strings.ReplaceAll(content, v.GetKey(), vd.Spider.Mode) + case "cmd": + content = strings.ReplaceAll(content, v.GetKey(), vd.Spider.Cmd) + case "param": + content = strings.ReplaceAll(content, v.GetKey(), vd.Spider.Param) + case "priority": + content = strings.ReplaceAll(content, v.GetKey(), fmt.Sprintf("%d", vd.Spider.Priority)) + case "created_ts": + content = strings.ReplaceAll(content, v.GetKey(), svc.getFormattedTime(vd.Spider.CreatedAt)) + case "created_by": + content = strings.ReplaceAll(content, v.GetKey(), svc.getUsernameById(vd.Spider.CreatedBy)) + case "updated_ts": + content = strings.ReplaceAll(content, v.GetKey(), svc.getFormattedTime(vd.Spider.UpdatedAt)) + case "updated_by": + content = strings.ReplaceAll(content, v.GetKey(), svc.getUsernameById(vd.Spider.UpdatedBy)) + } + + case "node": + if vd.Node == nil { + content = strings.ReplaceAll(content, v.GetKey(), "N/A") + continue + } + switch v.Name { + case "id": + content = strings.ReplaceAll(content, v.GetKey(), vd.Node.Id.Hex()) + case "key": + content = strings.ReplaceAll(content, v.GetKey(), vd.Node.Key) + case "name": + content = strings.ReplaceAll(content, v.GetKey(), vd.Node.Name) + case "is_master": + content = strings.ReplaceAll(content, v.GetKey(), fmt.Sprintf("%t", vd.Node.IsMaster)) + case "ip": + content = strings.ReplaceAll(content, v.GetKey(), vd.Node.Ip) + case "mac": + content = strings.ReplaceAll(content, v.GetKey(), vd.Node.Mac) + case "hostname": + content = strings.ReplaceAll(content, v.GetKey(), vd.Node.Hostname) + case "description": + content = strings.ReplaceAll(content, v.GetKey(), vd.Node.Description) + case "status": + content = strings.ReplaceAll(content, v.GetKey(), vd.Node.Status) + case "enabled": + content = strings.ReplaceAll(content, v.GetKey(), fmt.Sprintf("%t", vd.Node.Enabled)) + case "active": + content = strings.ReplaceAll(content, v.GetKey(), fmt.Sprintf("%t", vd.Node.Active)) + case "active_at": + content = strings.ReplaceAll(content, v.GetKey(), svc.getFormattedTime(vd.Node.ActiveAt)) + case "current_runners": + content = strings.ReplaceAll(content, v.GetKey(), fmt.Sprintf("%d", vd.Node.CurrentRunners)) + case "max_runners": + content = strings.ReplaceAll(content, v.GetKey(), fmt.Sprintf("%d", vd.Node.MaxRunners)) + case "created_ts": + content = strings.ReplaceAll(content, v.GetKey(), svc.getFormattedTime(vd.Node.CreatedAt)) + case "created_by": + content = strings.ReplaceAll(content, v.GetKey(), svc.getUsernameById(vd.Node.CreatedBy)) + case "updated_ts": + content = strings.ReplaceAll(content, v.GetKey(), svc.getFormattedTime(vd.Node.UpdatedAt)) + case "updated_by": + content = strings.ReplaceAll(content, v.GetKey(), svc.getUsernameById(vd.Node.UpdatedBy)) + } + + case "schedule": + if vd.Schedule == nil { + content = strings.ReplaceAll(content, v.GetKey(), "N/A") + continue + } + switch v.Name { + case "id": + content = strings.ReplaceAll(content, v.GetKey(), vd.Schedule.Id.Hex()) + case "name": + content = strings.ReplaceAll(content, v.GetKey(), vd.Schedule.Name) + case "description": + content = strings.ReplaceAll(content, v.GetKey(), vd.Schedule.Description) + case "cron": + content = strings.ReplaceAll(content, v.GetKey(), vd.Schedule.Cron) + case "cmd": + content = strings.ReplaceAll(content, v.GetKey(), vd.Schedule.Cmd) + case "param": + content = strings.ReplaceAll(content, v.GetKey(), vd.Schedule.Param) + case "mode": + content = strings.ReplaceAll(content, v.GetKey(), vd.Schedule.Mode) + case "priority": + content = strings.ReplaceAll(content, v.GetKey(), fmt.Sprintf("%d", vd.Schedule.Priority)) + case "enabled": + content = strings.ReplaceAll(content, v.GetKey(), fmt.Sprintf("%t", vd.Schedule.Enabled)) + case "created_ts": + content = strings.ReplaceAll(content, v.GetKey(), svc.getFormattedTime(vd.Schedule.CreatedAt)) + case "created_by": + content = strings.ReplaceAll(content, v.GetKey(), svc.getUsernameById(vd.Schedule.CreatedBy)) + case "updated_ts": + content = strings.ReplaceAll(content, v.GetKey(), svc.getFormattedTime(vd.Schedule.UpdatedAt)) + case "updated_by": + content = strings.ReplaceAll(content, v.GetKey(), svc.getUsernameById(vd.Schedule.UpdatedBy)) + } + + case "alert": + switch v.Name { + case "id": + content = strings.ReplaceAll(content, v.GetKey(), vd.Alert.Id.Hex()) + case "name": + content = strings.ReplaceAll(content, v.GetKey(), vd.Alert.Name) + case "description": + content = strings.ReplaceAll(content, v.GetKey(), vd.Alert.Description) + case "enabled": + content = strings.ReplaceAll(content, v.GetKey(), fmt.Sprintf("%t", vd.Alert.Enabled)) + case "metric_name": + content = strings.ReplaceAll(content, v.GetKey(), vd.Alert.MetricName) + case "operator": + content = strings.ReplaceAll(content, v.GetKey(), vd.Alert.Operator) + case "lasting_seconds": + content = strings.ReplaceAll(content, v.GetKey(), fmt.Sprintf("%d", vd.Alert.LastingSeconds)) + case "target_value": + content = strings.ReplaceAll(content, v.GetKey(), svc.getFormattedTargetValue(vd.Alert)) + case "level": + content = strings.ReplaceAll(content, v.GetKey(), vd.Alert.Level) + } + + case "metric": + if vd.Metric == nil { + content = strings.ReplaceAll(content, v.GetKey(), "N/A") + continue + } + switch v.Name { + case "type": + content = strings.ReplaceAll(content, v.GetKey(), vd.Metric.Type) + case "node_id": + content = strings.ReplaceAll(content, v.GetKey(), vd.Metric.NodeId.Hex()) + default: + content = strings.ReplaceAll(content, v.GetKey(), svc.getFormattedMetricValue(v.Name, vd.Metric)) + } - // send - if err := SendMobileNotification(webhook, title, content); err != nil { - return err + } } + return content +} - return nil +func (svc *Service) getVariableData(args ...any) (vd VariableData) { + for _, arg := range args { + switch arg.(type) { + case *models.Task: + vd.Task = arg.(*models.Task) + case *models.TaskStat: + vd.TaskStat = arg.(*models.TaskStat) + case *models.Spider: + vd.Spider = arg.(*models.Spider) + case *models.Node: + vd.Node = arg.(*models.Node) + case *models.Schedule: + vd.Schedule = arg.(*models.Schedule) + case *models.NotificationAlert: + vd.Alert = arg.(*models.NotificationAlert) + case *models.Metric: + vd.Metric = arg.(*models.Metric) + } + } + return vd } -func (svc *Service) GetSettingList(query bson.M, pagination *entity.Pagination, sort bson.D) (res []NotificationSetting, total int, err error) { - // options - var options *mongo2.FindOptions - if pagination != nil || sort != nil { - options = new(mongo2.FindOptions) - if pagination != nil { - options.Skip = pagination.Size * (pagination.Page - 1) - options.Limit = pagination.Size +func (svc *Service) parseTemplateVariables(template string) (variables []entity.NotificationVariable) { + // regex pattern + regex := regexp.MustCompile("\\$\\{(\\w+):(\\w+)}") + + // find all matches + matches := regex.FindAllStringSubmatch(template, -1) + + // variables map + variablesMap := make(map[string]entity.NotificationVariable) + + // iterate over matches + for _, match := range matches { + variable := entity.NotificationVariable{ + Category: match[1], + Name: match[2], } - if sort != nil { - options.Sort = sort + key := fmt.Sprintf("%s:%s", variable.Category, variable.Name) + if _, ok := variablesMap[key]; !ok { + variablesMap[key] = variable } } - // get list - var list []NotificationSetting - if err := svc.col.Find(query, options).All(&list); err != nil { - if err.Error() == mongo.ErrNoDocuments.Error() { - return nil, 0, nil - } else { - return nil, 0, err - } + // convert map to slice + for _, variable := range variablesMap { + variables = append(variables, variable) } - // total count - total, err = svc.col.Count(query) + return variables +} + +func (svc *Service) getUsernameById(id primitive.ObjectID) (username string) { + if id.IsZero() { + return "" + } + u, err := service.NewModelService[models.User]().GetById(id) if err != nil { - return nil, 0, err + svc.Errorf("[NotificationService] get user error: %v", err) + return "" } - - return list, total, nil + return u.Username } -func (svc *Service) GetSetting(id primitive.ObjectID) (res *NotificationSetting, err error) { - var s NotificationSetting - if err := svc.col.FindId(id).One(&s); err != nil { - return nil, err +func (svc *Service) getFormattedTime(t time.Time) (res string) { + if t.IsZero() { + return "N/A" } - return &s, nil + return t.Local().Format(time.DateTime) } -func (svc *Service) PosSetting(s *NotificationSetting) (err error) { - s.Id = primitive.NewObjectID() - if _, err := svc.col.Insert(s); err != nil { - return err +func (svc *Service) getFormattedTargetValue(a *models.NotificationAlert) (res string) { + if strings.HasSuffix(a.MetricName, "_percent") { + return fmt.Sprintf("%.2f%%", a.TargetValue) + } else if strings.HasSuffix(a.MetricName, "_memory") { + return fmt.Sprintf("%dMB", int(a.TargetValue/(1024*1024))) + } else if strings.HasSuffix(a.MetricName, "_disk") { + return fmt.Sprintf("%dGB", int(a.TargetValue/(1024*1024*1024))) + } else if strings.HasSuffix(a.MetricName, "_rate") { + return fmt.Sprintf("%.2fMB/s", a.TargetValue/(1024*1024)) + } else { + return fmt.Sprintf("%f", a.TargetValue) } - return nil } -func (svc *Service) PutSetting(id primitive.ObjectID, s NotificationSetting) (err error) { - if err := svc.col.ReplaceId(id, s); err != nil { - return err +func (svc *Service) getFormattedMetricValue(metricName string, m *models.Metric) (res string) { + switch metricName { + case "cpu_usage_percent": + return fmt.Sprintf("%.2f%%", m.CpuUsagePercent) + case "total_memory": + return fmt.Sprintf("%dMB", m.TotalMemory/(1024*1024)) + case "available_memory": + return fmt.Sprintf("%dMB", m.AvailableMemory/(1024*1024)) + case "used_memory": + return fmt.Sprintf("%dMB", m.UsedMemory/(1024*1024)) + case "used_memory_percent": + return fmt.Sprintf("%.2f%%", m.UsedMemoryPercent) + case "total_disk": + return fmt.Sprintf("%dGB", m.TotalDisk/(1024*1024*1024)) + case "available_disk": + return fmt.Sprintf("%dGB", m.AvailableDisk/(1024*1024*1024)) + case "used_disk": + return fmt.Sprintf("%dGB", m.UsedDisk/(1024*1024*1024)) + case "used_disk_percent": + return fmt.Sprintf("%.2f%%", m.UsedDiskPercent) + case "disk_read_bytes_rate": + return fmt.Sprintf("%.2fMB/s", m.DiskReadBytesRate/(1024*1024)) + case "disk_write_bytes_rate": + return fmt.Sprintf("%.2fMB/s", m.DiskWriteBytesRate/(1024*1024)) + case "network_bytes_sent_rate": + return fmt.Sprintf("%.2fMB/s", m.NetworkBytesSentRate/(1024*1024)) + case "network_bytes_recv_rate": + return fmt.Sprintf("%.2fMB/s", m.NetworkBytesRecvRate/(1024*1024)) + default: + return "N/A" } +} - return nil +func (svc *Service) convertMarkdownToHtml(content string) (html string) { + return string(markdown.ToHTML([]byte(content), nil, nil)) } -func (svc *Service) DeleteSetting(id primitive.ObjectID) (err error) { - if err := svc.col.DeleteId(id); err != nil { - return err +func (svc *Service) SendNodeNotification(node *models.Node) { + // arguments + var args []any + args = append(args, node) + + // settings + settings, err := service.NewModelService[models.NotificationSetting]().GetMany(bson.M{ + "enabled": true, + "trigger": bson.M{ + "$regex": constants.NotificationTriggerPatternNode, + }, + }, nil) + if err != nil { + svc.Errorf("get notification settings error: %v", err) + return } - return nil + for _, s := range settings { + // send notification + switch s.Trigger { + case constants.NotificationTriggerNodeStatusChange: + go svc.Send(&s, args...) + case constants.NotificationTriggerNodeOnline: + if node.Status == constants.NodeStatusOnline { + go svc.Send(&s, args...) + } + case constants.NotificationTriggerNodeOffline: + if node.Status == constants.NodeStatusOffline { + go svc.Send(&s, args...) + } + } + } } -func (svc *Service) EnableSetting(id primitive.ObjectID) (err error) { - return svc._toggleSettingFunc(true)(id) +func (svc *Service) createRequestMail(s *models.NotificationSetting, ch *models.NotificationChannel, title, content string) (res *models.NotificationRequest, err error) { + senderEmail := ch.SMTPUsername + if s.UseCustomSenderEmail { + senderEmail = s.SenderEmail + } + r := models.NotificationRequest{ + Status: StatusSending, + SettingId: s.Id, + ChannelId: ch.Id, + Title: title, + Content: content, + SenderEmail: senderEmail, + SenderName: s.SenderName, + MailTo: s.MailTo, + MailCc: s.MailCc, + MailBcc: s.MailBcc, + } + r.SetCreatedAt(time.Now()) + r.SetUpdatedAt(time.Now()) + r.Id, err = service.NewModelService[models.NotificationRequest]().InsertOne(r) + if err != nil { + svc.Errorf("[NotificationService] save request error: %v", err) + return nil, err + } + return &r, nil } -func (svc *Service) DisableSetting(id primitive.ObjectID) (err error) { - return svc._toggleSettingFunc(false)(id) +func (svc *Service) createRequestMailTest(ch *models.NotificationChannel, title, content string, mailTo []string) (res *models.NotificationRequest, err error) { + if mailTo == nil { + mailTo = []string{ch.SMTPUsername} + } + + r := models.NotificationRequest{ + Status: StatusSending, + ChannelId: ch.Id, + Title: title, + Content: content, + SenderEmail: ch.SMTPUsername, + SenderName: ch.SMTPUsername, + MailTo: mailTo, + Test: true, + } + + r.SetCreatedAt(time.Now()) + r.SetUpdatedAt(time.Now()) + r.Id, err = service.NewModelService[models.NotificationRequest]().InsertOne(r) + if err != nil { + svc.Errorf("[NotificationService] save request error: %v", err) + return nil, err + } + return &r, nil } -func (svc *Service) _toggleSettingFunc(value bool) func(id primitive.ObjectID) error { - return func(id primitive.ObjectID) (err error) { - var s NotificationSetting - if err := svc.col.FindId(id).One(&s); err != nil { - return err - } - s.Enabled = value - if err := svc.col.ReplaceId(id, s); err != nil { - return err - } - return nil +func (svc *Service) createRequestIM(ch *models.NotificationChannel, title, content string, test bool) (res *models.NotificationRequest, err error) { + r := models.NotificationRequest{ + Status: StatusSending, + ChannelId: ch.Id, + Title: title, + Content: content, + Test: test, + } + r.SetCreatedAt(time.Now()) + r.SetUpdatedAt(time.Now()) + r.Id, err = service.NewModelService[models.NotificationRequest]().InsertOne(r) + if err != nil { + svc.Errorf("[NotificationService] save request error: %v", err) + return nil, err } + return &r, nil } -func NewService() *Service { - // service - svc := &Service{ - col: mongo2.GetMongoCol(SettingsColName), +func (svc *Service) saveRequest(r *models.NotificationRequest, err error) { + if r == nil { + return } - // model service - modelSvc, err := service.GetService() if err != nil { - panic(err) + r.Status = StatusError + r.Error = err.Error() + } else { + r.Status = StatusSuccess } - svc.modelSvc = modelSvc - - if err := svc.Init(); err != nil { - panic(err) + r.SetUpdatedAt(time.Now()) + err = service.NewModelService[models.NotificationRequest]().ReplaceById(r.Id, *r) + if err != nil { + svc.Errorf("[NotificationService] save request error: %v", err) } +} - return svc +func newNotificationService() *Service { + return &Service{ + Logger: utils.NewLogger("NotificationService"), + } } var _service *Service +var _serviceOnce sync.Once -func GetService() *Service { - if _service == nil { - _service = NewService() - } +func GetNotificationService() *Service { + _serviceOnce.Do(func() { + _service = newNotificationService() + }) return _service } diff --git a/core/notification/service_test.go b/core/notification/service_test.go index 20e094784..139c29912 100644 --- a/core/notification/service_test.go +++ b/core/notification/service_test.go @@ -1,19 +1,38 @@ package notification import ( - "net/http" + "github.com/crawlab-team/crawlab/core/entity" "testing" - "time" + + "github.com/stretchr/testify/assert" ) -func TestService_sendMobile(t *testing.T) { - T.Setup(t) - e := T.NewExpect(t) - time.Sleep(1 * time.Second) +func TestParseTemplateVariables_WithValidTemplate_ReturnsVariables(t *testing.T) { + svc := Service{} + template := "Dear ${user:name}, your task ${task:id} is ${task:status}." + expected := []entity.NotificationVariable{ + {Category: "user", Name: "name"}, + {Category: "task", Name: "id"}, + {Category: "task", Name: "status"}, + } + + variables := svc.parseTemplateVariables(template) - data := map[string]interface{}{ - "task_id": T.TestTask.GetId().Hex(), + // contains all expected variables + assert.ElementsMatch(t, expected, variables) +} + +func TestParseTemplateVariables_WithRepeatedVariables_ReturnsUniqueVariables(t *testing.T) { + svc := Service{} + template := "Dear ${user:name}, your task ${task:id} is ${task:status}. Again, ${user:name} and ${task:id}." + expected := []entity.NotificationVariable{ + {Category: "user", Name: "name"}, + {Category: "task", Name: "id"}, + {Category: "task", Name: "status"}, } - e.POST("/send/mobile").WithJSON(data). - Expect().Status(http.StatusOK) + + variables := svc.parseTemplateVariables(template) + + // contains all expected variables + assert.ElementsMatch(t, expected, variables) } diff --git a/core/notification/service_v2.go b/core/notification/service_v2.go deleted file mode 100644 index 0d8a4c889..000000000 --- a/core/notification/service_v2.go +++ /dev/null @@ -1,363 +0,0 @@ -package notification - -import ( - "github.com/apex/log" - "github.com/crawlab-team/crawlab/core/constants" - "github.com/crawlab-team/crawlab/core/entity" - "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/core/models/service" - mongo2 "github.com/crawlab-team/crawlab/db/mongo" - parser "github.com/crawlab-team/crawlab/template-parser" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" - "go.mongodb.org/mongo-driver/mongo" - "sync" -) - -type ServiceV2 struct { -} - -func (svc *ServiceV2) Start() (err error) { - // initialize data - if err := svc.initData(); err != nil { - return err - } - - return nil -} - -func (svc *ServiceV2) Stop() (err error) { - return nil -} - -func (svc *ServiceV2) initData() (err error) { - total, err := service.NewModelServiceV2[models.NotificationSettingV2]().Count(nil) - if err != nil { - return err - } - if total > 0 { - return nil - } - - // data to initialize - settings := []models.NotificationSettingV2{ - { - Type: TypeMail, - Enabled: true, - Name: "任务通知(邮件)", - Description: "这是默认的邮件通知。您可以使用您自己的设置进行编辑。", - TaskTrigger: constants.NotificationTriggerTaskFinish, - Title: "[Crawlab] 爬虫任务更新: {{$.status}}", - Template: `尊敬的 {{$.user.username}}, - -请查看下面的任务数据。 - -|键|值| -|:-:|:--| -|任务状态|{{$.status}}| -|任务优先级|{{$.priority}}| -|任务模式|{{$.mode}}| -|执行命令|{{$.cmd}}| -|执行参数|{{$.param}}| -|错误信息|{{$.error}}| -|节点|{{$.node.name}}| -|爬虫|{{$.spider.name}}| -|项目|{{$.spider.project.name}}| -|定时任务|{{$.schedule.name}}| -|结果数|{{$.:task_stat.result_count}}| -|等待时间(秒)|{#{{$.:task_stat.wait_duration}}/1000#}| -|运行时间(秒)|{#{{$.:task_stat.runtime_duration}}/1000#}| -|总时间(秒)|{#{{$.:task_stat.total_duration}}/1000#}| -|平均结果数/秒|{#{{$.:task_stat.result_count}}/({{$.:task_stat.total_duration}}/1000)#}| -`, - Mail: models.NotificationSettingMail{ - Server: "smtp.163.com", - Port: "465", - To: "{{$.user[create].email}}", - }, - }, - { - Type: TypeMail, - Enabled: true, - Name: "Task Change (Mail)", - Description: "This is the default mail notification. You can edit it with your own settings", - TaskTrigger: constants.NotificationTriggerTaskFinish, - Title: "[Crawlab] Task Update: {{$.status}}", - Template: `Dear {{$.user.username}}, - -Please find the task data as below. - -|Key|Value| -|:-:|:--| -|Task Status|{{$.status}}| -|Task Priority|{{$.priority}}| -|Task Mode|{{$.mode}}| -|Task Command|{{$.cmd}}| -|Task Params|{{$.param}}| -|Error Message|{{$.error}}| -|Node|{{$.node.name}}| -|Spider|{{$.spider.name}}| -|Project|{{$.spider.project.name}}| -|Schedule|{{$.schedule.name}}| -|Result Count|{{$.:task_stat.result_count}}| -|Wait Duration (sec)|{#{{$.:task_stat.wait_duration}}/1000#}| -|Runtime Duration (sec)|{#{{$.:task_stat.runtime_duration}}/1000#}| -|Total Duration (sec)|{#{{$.:task_stat.total_duration}}/1000#}| -|Avg Results / Sec|{#{{$.:task_stat.result_count}}/({{$.:task_stat.total_duration}}/1000)#}| -`, - Mail: models.NotificationSettingMail{ - Server: "smtp.163.com", - Port: "465", - To: "{{$.user[create].email}}", - }, - }, - { - Type: TypeMobile, - Enabled: true, - Name: "任务通知(移动端)", - Description: "这是默认的手机通知。您可以使用您自己的设置进行编辑。", - TaskTrigger: constants.NotificationTriggerTaskFinish, - Title: "[Crawlab] 任务更新: {{$.status}}", - Template: `尊敬的 {{$.user.username}}, - -请查看下面的任务数据。 - -- **任务状态**: {{$.status}} -- **任务优先级**: {{$.priority}} -- **任务模式**: {{$.mode}} -- **执行命令**: {{$.cmd}} -- **执行参数**: {{$.param}} -- **错误信息**: {{$.error}} -- **节点**: {{$.node.name}} -- **爬虫**: {{$.spider.name}} -- **项目**: {{$.spider.project.name}} -- **定时任务**: {{$.schedule.name}} -- **结果数**: {{$.:task_stat.result_count}} -- **等待时间(秒)**: {#{{$.:task_stat.wait_duration}}/1000#} -- **运行时间(秒)**: {#{{$.:task_stat.runtime_duration}}/1000#} -- **总时间(秒)**: {#{{$.:task_stat.total_duration}}/1000#} -- **平均结果数/秒**: {#{{$.:task_stat.result_count}}/({{$.:task_stat.total_duration}}/1000)#}`, - Mobile: models.NotificationSettingMobile{}, - }, - { - Type: TypeMobile, - Enabled: true, - Name: "Task Change (Mobile)", - Description: "This is the default mobile notification. You can edit it with your own settings", - TaskTrigger: constants.NotificationTriggerTaskFinish, - Title: "[Crawlab] Task Update: {{$.status}}", - Template: `Dear {{$.user.username}}, - -Please find the task data as below. - -- **Task Status**: {{$.status}} -- **Task Priority**: {{$.priority}} -- **Task Mode**: {{$.mode}} -- **Task Command**: {{$.cmd}} -- **Task Params**: {{$.param}} -- **Error Message**: {{$.error}} -- **Node**: {{$.node.name}} -- **Spider**: {{$.spider.name}} -- **Project**: {{$.spider.project.name}} -- **Schedule**: {{$.schedule.name}} -- **Result Count**: {{$.:task_stat.result_count}} -- **Wait Duration (sec)**: {#{{$.:task_stat.wait_duration}}/1000#} -- **Runtime Duration (sec)**: {#{{$.:task_stat.runtime_duration}}/1000#} -- **Total Duration (sec)**: {#{{$.:task_stat.total_duration}}/1000#} -- **Avg Results / Sec**: {#{{$.:task_stat.result_count}}/({{$.:task_stat.total_duration}}/1000)#}`, - Mobile: models.NotificationSettingMobile{}, - }, - } - _, err = service.NewModelServiceV2[models.NotificationSettingV2]().InsertMany(settings) - if err != nil { - return err - } - return nil -} - -func (svc *ServiceV2) Send(s *models.NotificationSettingV2, entity bson.M) (err error) { - switch s.Type { - case TypeMail: - return svc.SendMail(s, entity) - case TypeMobile: - return svc.SendMobile(s, entity) - } - return nil -} - -func (svc *ServiceV2) SendMail(s *models.NotificationSettingV2, entity bson.M) (err error) { - // to - to, err := parser.Parse(s.Mail.To, entity) - if err != nil { - log.Warnf("parsing 'to' error: %v", err) - } - if to == "" { - return nil - } - - // cc - cc, err := parser.Parse(s.Mail.Cc, entity) - if err != nil { - log.Warnf("parsing 'cc' error: %v", err) - } - - // title - title, err := parser.Parse(s.Title, entity) - if err != nil { - log.Warnf("parsing 'title' error: %v", err) - } - - // content - content, err := parser.Parse(s.Template, entity) - if err != nil { - log.Warnf("parsing 'content' error: %v", err) - } - - // send mail - if err := SendMail(&s.Mail, to, cc, title, content); err != nil { - return err - } - - return nil -} - -func (svc *ServiceV2) SendMobile(s *models.NotificationSettingV2, entity bson.M) (err error) { - // webhook - webhook, err := parser.Parse(s.Mobile.Webhook, entity) - if err != nil { - log.Warnf("parsing 'webhook' error: %v", err) - } - if webhook == "" { - return nil - } - - // title - title, err := parser.Parse(s.Title, entity) - if err != nil { - log.Warnf("parsing 'title' error: %v", err) - } - - // content - content, err := parser.Parse(s.Template, entity) - if err != nil { - log.Warnf("parsing 'content' error: %v", err) - } - - // send - if err := SendMobileNotification(webhook, title, content); err != nil { - return err - } - - return nil -} - -func (svc *ServiceV2) GetSettingList(query bson.M, pagination *entity.Pagination, sort bson.D) (res []models.NotificationSettingV2, total int, err error) { - // options - var options *mongo2.FindOptions - if pagination != nil || sort != nil { - options = new(mongo2.FindOptions) - if pagination != nil { - options.Skip = pagination.Size * (pagination.Page - 1) - options.Limit = pagination.Size - } - if sort != nil { - options.Sort = sort - } - } - - // get list - list, err := service.NewModelServiceV2[models.NotificationSettingV2]().GetMany(query, options) - if err != nil { - if err.Error() == mongo.ErrNoDocuments.Error() { - return nil, 0, nil - } else { - return nil, 0, err - } - } - - // total count - total, err = service.NewModelServiceV2[models.NotificationSettingV2]().Count(query) - if err != nil { - return nil, 0, err - } - - return list, total, nil -} - -func (svc *ServiceV2) GetSetting(id primitive.ObjectID) (res *models.NotificationSettingV2, err error) { - s, err := service.NewModelServiceV2[models.NotificationSettingV2]().GetById(id) - if err != nil { - return nil, err - } - return s, nil -} - -func (svc *ServiceV2) PosSetting(s *models.NotificationSettingV2) (err error) { - s.Id = primitive.NewObjectID() - _, err = service.NewModelServiceV2[models.NotificationSettingV2]().InsertOne(*s) - if err != nil { - return err - } - return nil -} - -func (svc *ServiceV2) PutSetting(id primitive.ObjectID, s models.NotificationSettingV2) (err error) { - err = service.NewModelServiceV2[models.NotificationSettingV2]().ReplaceById(id, s) - if err != nil { - return err - } - - return nil -} - -func (svc *ServiceV2) DeleteSetting(id primitive.ObjectID) (err error) { - err = service.NewModelServiceV2[models.NotificationSettingV2]().DeleteById(id) - if err != nil { - return err - } - - return nil -} - -func (svc *ServiceV2) EnableSetting(id primitive.ObjectID) (err error) { - return svc._toggleSettingFunc(true)(id) -} - -func (svc *ServiceV2) DisableSetting(id primitive.ObjectID) (err error) { - return svc._toggleSettingFunc(false)(id) -} - -func (svc *ServiceV2) _toggleSettingFunc(value bool) func(id primitive.ObjectID) error { - return func(id primitive.ObjectID) (err error) { - s, err := service.NewModelServiceV2[models.NotificationSettingV2]().GetById(id) - if err != nil { - return err - } - s.Enabled = value - err = service.NewModelServiceV2[models.NotificationSettingV2]().ReplaceById(id, *s) - if err != nil { - return err - } - return nil - } -} - -func newNotificationServiceV2() *ServiceV2 { - // service - svc := &ServiceV2{} - - return svc -} - -var _serviceV2 *ServiceV2 -var _serviceV2Once = new(sync.Once) - -func GetNotificationServiceV2() *ServiceV2 { - if _serviceV2 != nil { - return _serviceV2 - } - _serviceV2Once.Do(func() { - _serviceV2 = newNotificationServiceV2() - }) - return _serviceV2 -} diff --git a/core/notification/theme.go b/core/notification/theme.go new file mode 100644 index 000000000..f93fb5105 --- /dev/null +++ b/core/notification/theme.go @@ -0,0 +1,265 @@ +package notification + +const defaultTheme = `` + +func GetTheme() string { + return defaultTheme +} diff --git a/core/process/daemon.go b/core/process/daemon.go deleted file mode 100644 index 058880dd2..000000000 --- a/core/process/daemon.go +++ /dev/null @@ -1,170 +0,0 @@ -package process - -import ( - "github.com/apex/log" - "github.com/crawlab-team/crawlab/core/errors" - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/sys_exec" - "github.com/crawlab-team/crawlab/trace" - "math/rand" - "os/exec" - "time" -) - -const ( - SignalCreate = iota - SignalStart - SignalStopped - SignalError - SignalExited - SignalReachedMaxErrors -) - -type Daemon struct { - // settings - maxErrors int - exitTimeout time.Duration - - // internals - errors int - errMsg string - exitCode int - newCmdFn func() *exec.Cmd - cmd *exec.Cmd - stopped bool - ch chan int -} - -func (d *Daemon) Start() (err error) { - go d.handleSignal() - - for { - // command - d.cmd = d.newCmdFn() - d.ch <- SignalCreate - - // attempt to run - _ = d.cmd.Start() - d.ch <- SignalStart - - if err := d.cmd.Wait(); err != nil { - // stopped - d.ch <- SignalStopped - if d.stopped { - log.Infof("daemon stopped") - return nil - } - - // error - d.ch <- SignalError - d.errMsg = err.Error() - trace.PrintError(err) - } - - // exited - d.ch <- SignalExited - - // exit code - d.exitCode = d.cmd.ProcessState.ExitCode() - - // check exit code - if d.exitCode == 0 { - log.Infof("process exited with code 0") - return - } - - // error message - d.errMsg = errors.ErrorProcessDaemonProcessExited.Error() - - // increment errors - d.errors++ - - // validate if error count exceeds max errors - if d.errors >= d.maxErrors { - log.Infof("reached max errors: %d", d.maxErrors) - d.ch <- SignalReachedMaxErrors - return errors.ErrorProcessReachedMaxErrors - } - - // re-attempt - waitSec := rand.Intn(5) - log.Infof("re-attempt to start process in %d seconds...", waitSec) - time.Sleep(time.Duration(waitSec) * time.Second) - } -} - -func (d *Daemon) Stop() { - d.stopped = true - opts := &sys_exec.KillProcessOptions{ - Timeout: d.exitTimeout, - Force: false, - } - _ = sys_exec.KillProcess(d.cmd, opts) -} - -func (d *Daemon) GetMaxErrors() (maxErrors int) { - return d.maxErrors -} - -func (d *Daemon) SetMaxErrors(maxErrors int) { - d.maxErrors = maxErrors -} - -func (d *Daemon) GetExitTimeout() (timeout time.Duration) { - return d.exitTimeout -} - -func (d *Daemon) SetExitTimeout(timeout time.Duration) { - d.exitTimeout = timeout -} - -func (d *Daemon) GetCmd() (cmd *exec.Cmd) { - return d.cmd -} - -func (d *Daemon) GetCh() (ch chan int) { - return d.ch -} - -func (d *Daemon) handleSignal() { - for { - select { - case signal := <-d.ch: - switch signal { - case SignalCreate: - log.Infof("process created") - case SignalStart: - log.Infof("process started") - case SignalStopped: - log.Infof("process stopped") - case SignalError: - trace.PrintError(errors.NewProcessError(d.errMsg)) - case SignalExited: - log.Infof("process exited") - case SignalReachedMaxErrors: - log.Infof("reached max errors") - return - } - } - } -} - -func NewProcessDaemon(newCmdFn func() *exec.Cmd, opts ...DaemonOption) (d interfaces.ProcessDaemon) { - // daemon - d = &Daemon{ - maxErrors: 5, - exitTimeout: 15 * time.Second, - errors: 0, - errMsg: "", - newCmdFn: newCmdFn, - stopped: false, - ch: make(chan int), - } - - // apply options - for _, opt := range opts { - opt(d) - } - - return d -} diff --git a/core/process/daemon_test.go b/core/process/daemon_test.go deleted file mode 100644 index 7734eb598..000000000 --- a/core/process/daemon_test.go +++ /dev/null @@ -1,21 +0,0 @@ -package process - -import ( - "github.com/stretchr/testify/require" - "os/exec" - "testing" -) - -func TestDaemon(t *testing.T) { - d := NewProcessDaemon(func() *exec.Cmd { - return exec.Command("echo", "hello") - }) - err := d.Start() - require.Nil(t, err) - - d = NewProcessDaemon(func() *exec.Cmd { - return exec.Command("return", "1") - }) - err = d.Start() - require.NotNil(t, err) -} diff --git a/core/process/manage.go b/core/process/manage.go deleted file mode 100644 index 0869ac33e..000000000 --- a/core/process/manage.go +++ /dev/null @@ -1,60 +0,0 @@ -package process - -import ( - "github.com/crawlab-team/crawlab/trace" - "os/exec" - "regexp" - "runtime" - "strings" -) - -var pidRegexp, _ = regexp.Compile("(?:^|\\s+)\\d+(?:$|\\s+)") - -func ProcessIdExists(id int) (ok bool) { - lines, err := ListProcess(string(rune(id))) - if err != nil { - return false - } - for _, line := range lines { - matched := pidRegexp.MatchString(line) - if matched { - return true - } - } - return false -} - -func ListProcess(text string) (lines []string, err error) { - if runtime.GOOS == "windows" { - return listProcessWindow(text) - } else { - return listProcessLinuxMac(text) - } -} - -func listProcessWindow(text string) (lines []string, err error) { - cmd := exec.Command("tasklist", "/fi", text) - out, err := cmd.CombinedOutput() - _, ok := err.(*exec.ExitError) - if !ok { - return nil, trace.TraceError(err) - } - lines = strings.Split(string(out), "\n") - return lines, nil -} - -func listProcessLinuxMac(text string) (lines []string, err error) { - cmd := exec.Command("ps", "aux") - out, err := cmd.CombinedOutput() - _, ok := err.(*exec.ExitError) - if !ok { - return nil, trace.TraceError(err) - } - _lines := strings.Split(string(out), "\n") - for _, l := range _lines { - if strings.Contains(l, text) { - lines = append(lines, l) - } - } - return lines, nil -} diff --git a/core/process/options.go b/core/process/options.go deleted file mode 100644 index f0e046c91..000000000 --- a/core/process/options.go +++ /dev/null @@ -1,20 +0,0 @@ -package process - -import ( - "github.com/crawlab-team/crawlab/core/interfaces" - "time" -) - -type DaemonOption func(d interfaces.ProcessDaemon) - -func WithDaemonMaxErrors(maxErrors int) DaemonOption { - return func(d interfaces.ProcessDaemon) { - d.SetMaxErrors(maxErrors) - } -} - -func WithExitTimeout(timeout time.Duration) DaemonOption { - return func(d interfaces.ProcessDaemon) { - - } -} diff --git a/core/result/options.go b/core/result/options.go deleted file mode 100644 index 59c633015..000000000 --- a/core/result/options.go +++ /dev/null @@ -1,16 +0,0 @@ -package result - -import "go.mongodb.org/mongo-driver/bson/primitive" - -type Option func(opts *Options) - -type Options struct { - registryKey string // registry key - SpiderId primitive.ObjectID // data source id -} - -func WithRegistryKey(key string) Option { - return func(opts *Options) { - opts.registryKey = key - } -} diff --git a/core/result/service.go b/core/result/service.go deleted file mode 100644 index d1e946851..000000000 --- a/core/result/service.go +++ /dev/null @@ -1,89 +0,0 @@ -package result - -import ( - "fmt" - "github.com/crawlab-team/crawlab/core/errors" - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/core/models/service" - "github.com/crawlab-team/crawlab/trace" - "go.mongodb.org/mongo-driver/bson/primitive" - "sync" -) - -func NewResultService(registryKey string, s *models.Spider) (svc2 interfaces.ResultService, err error) { - // result service function - var fn interfaces.ResultServiceRegistryFn - - if registryKey == "" { - // default - fn = NewResultServiceMongo - } else { - // from registry - reg := GetResultServiceRegistry() - fn = reg.Get(registryKey) - if fn == nil { - return nil, errors.NewResultError(fmt.Sprintf("%s is not implemented", registryKey)) - } - } - - // generate result service - svc, err := fn(s.ColId, s.DataSourceId) - if err != nil { - return nil, trace.TraceError(err) - } - - return svc, nil -} - -var store = sync.Map{} - -func GetResultService(spiderId primitive.ObjectID, opts ...Option) (svc2 interfaces.ResultService, err error) { - // model service - modelSvc, err := service.GetService() - if err != nil { - return nil, trace.TraceError(err) - } - - // spider - s, err := modelSvc.GetSpiderById(spiderId) - if err != nil { - return nil, trace.TraceError(err) - } - - // apply options - _opts := &Options{} - for _, opt := range opts { - opt(_opts) - } - - // store key - storeKey := s.ColId.Hex() + ":" + s.DataSourceId.Hex() - - // attempt to load result service from store - res, _ := store.Load(storeKey) - if res != nil { - svc, ok := res.(interfaces.ResultService) - if ok { - return svc, nil - } - } - - // registry key - var registryKey string - ds, _ := modelSvc.GetDataSourceById(s.DataSourceId) - if ds != nil { - registryKey = ds.Type - } - - // create a new result service if not exists - svc, err := NewResultService(registryKey, s) - if err != nil { - return nil, err - } - - // save into store - store.Store(storeKey, svc) - - return svc, nil -} diff --git a/core/result/service_mongo.go b/core/result/service_mongo.go deleted file mode 100644 index 504e28270..000000000 --- a/core/result/service_mongo.go +++ /dev/null @@ -1,146 +0,0 @@ -package result - -import ( - "github.com/crawlab-team/crawlab/trace" - "time" - - "github.com/crawlab-team/crawlab/core/constants" - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/core/models/service" - "github.com/crawlab-team/crawlab/core/utils" - "github.com/crawlab-team/crawlab/db/generic" - "github.com/crawlab-team/crawlab/db/mongo" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" - mongo2 "go.mongodb.org/mongo-driver/mongo" - "go.mongodb.org/mongo-driver/mongo/options" -) - -type ServiceMongo struct { - // dependencies - modelSvc service.ModelService - modelColSvc interfaces.ModelBaseService - - // internals - colId primitive.ObjectID // _id of models.DataCollection - dc *models.DataCollection // models.DataCollection - t time.Time -} - -func (svc *ServiceMongo) List(query generic.ListQuery, opts *generic.ListOptions) (results []interface{}, err error) { - _query := svc.getQuery(query) - _opts := svc.getOpts(opts) - return svc.getList(_query, _opts) -} - -func (svc *ServiceMongo) Count(query generic.ListQuery) (n int, err error) { - _query := svc.getQuery(query) - return svc.modelColSvc.Count(_query) -} - -func (svc *ServiceMongo) Insert(docs ...interface{}) (err error) { - if svc.dc.Dedup.Enabled && len(svc.dc.Dedup.Keys) > 0 { - for _, doc := range docs { - hash, err := utils.GetResultHash(doc, svc.dc.Dedup.Keys) - if err != nil { - return err - } - doc.(interfaces.Result).SetValue(constants.HashKey, hash) - query := bson.M{constants.HashKey: hash} - switch svc.dc.Dedup.Type { - case constants.DedupTypeOverwrite: - err = mongo.GetMongoCol(svc.dc.Name).ReplaceWithOptions(query, doc, &options.ReplaceOptions{Upsert: &[]bool{true}[0]}) - if err != nil { - return trace.TraceError(err) - } - default: - var o bson.M - err := mongo.GetMongoCol(svc.dc.Name).Find(query, &mongo.FindOptions{Limit: 1}).One(&o) - if err == nil { - // exists, ignore - continue - } - if err != mongo2.ErrNoDocuments { - // error - return trace.TraceError(err) - } - // not exists, insert - _, err = mongo.GetMongoCol(svc.dc.Name).Insert(doc) - if err != nil { - return trace.TraceError(err) - } - } - } - } else { - _, err = mongo.GetMongoCol(svc.dc.Name).InsertMany(docs) - if err != nil { - return trace.TraceError(err) - } - } - return nil -} - -func (svc *ServiceMongo) Index(fields []string) { - for _, field := range fields { - _ = mongo.GetMongoCol(svc.dc.Name).CreateIndex(mongo2.IndexModel{Keys: bson.M{field: 1}}) - } -} - -func (svc *ServiceMongo) SetTime(t time.Time) { - svc.t = t -} - -func (svc *ServiceMongo) GetTime() (t time.Time) { - return svc.t -} - -func (svc *ServiceMongo) getList(query bson.M, opts *mongo.FindOptions) (results []interface{}, err error) { - list, err := svc.modelColSvc.GetList(query, opts) - if err != nil { - return nil, err - } - for _, d := range list.GetModels() { - r, ok := d.(interfaces.Result) - if ok { - results = append(results, r) - } - } - return results, nil -} - -func (svc *ServiceMongo) getQuery(query generic.ListQuery) (res bson.M) { - return utils.GetMongoQuery(query) -} - -func (svc *ServiceMongo) getOpts(opts *generic.ListOptions) (res *mongo.FindOptions) { - return utils.GetMongoOpts(opts) -} - -func NewResultServiceMongo(colId primitive.ObjectID, _ primitive.ObjectID) (svc2 interfaces.ResultService, err error) { - // service - svc := &ServiceMongo{ - colId: colId, - t: time.Now(), - } - - // dependency injection - svc.modelSvc, err = service.GetService() - if err != nil { - return nil, err - } - - // data collection - svc.dc, _ = svc.modelSvc.GetDataCollectionById(colId) - go func() { - for { - time.Sleep(1 * time.Second) - svc.dc, _ = svc.modelSvc.GetDataCollectionById(colId) - } - }() - - // data collection model service - svc.modelColSvc = service.GetBaseServiceByColName(interfaces.ModelIdResult, svc.dc.Name) - - return svc, nil -} diff --git a/core/result/service_registry.go b/core/result/service_registry.go deleted file mode 100644 index 2c635397a..000000000 --- a/core/result/service_registry.go +++ /dev/null @@ -1,48 +0,0 @@ -package result - -import ( - "github.com/crawlab-team/crawlab/core/interfaces" - "sync" -) - -type ServiceRegistry struct { - // internals - services sync.Map -} - -func (r *ServiceRegistry) Register(key string, fn interfaces.ResultServiceRegistryFn) { - r.services.Store(key, fn) -} - -func (r *ServiceRegistry) Unregister(key string) { - r.services.Delete(key) -} - -func (r *ServiceRegistry) Get(key string) (fn interfaces.ResultServiceRegistryFn) { - res, ok := r.services.Load(key) - if ok { - fn, ok = res.(interfaces.ResultServiceRegistryFn) - if !ok { - return nil - } - return fn - } - return nil -} - -func NewResultServiceRegistry() (r interfaces.ResultServiceRegistry) { - r = &ServiceRegistry{ - services: sync.Map{}, - } - return r -} - -var _svc interfaces.ResultServiceRegistry - -func GetResultServiceRegistry() (r interfaces.ResultServiceRegistry) { - if _svc != nil { - return _svc - } - _svc = NewResultServiceRegistry() - return _svc -} diff --git a/core/result/test/base.go b/core/result/test/base.go deleted file mode 100644 index a224fa299..000000000 --- a/core/result/test/base.go +++ /dev/null @@ -1,76 +0,0 @@ -package test - -import ( - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/models/delegate" - "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/core/models/service" - "github.com/crawlab-team/crawlab/core/result" - "github.com/crawlab-team/crawlab/db/mongo" - "go.uber.org/dig" - "testing" -) - -func init() { - T = NewTest() -} - -var T *Test - -type Test struct { - // dependencies - modelSvc service.ModelService - resultSvc interfaces.ResultService - - // test data - TestColName string - TestCol *mongo.Col - TestDc *models.DataCollection -} - -func (t *Test) Setup(t2 *testing.T) { - t2.Cleanup(t.Cleanup) -} - -func (t *Test) Cleanup() { - _ = t.modelSvc.DropAll() -} - -func NewTest() *Test { - var err error - - // test - t := &Test{ - TestColName: "test_results", - } - - // dependency injection - c := dig.New() - if err := c.Provide(service.NewService); err != nil { - panic(err) - } - if err := c.Invoke(func( - modelSvc service.ModelService, - ) { - t.modelSvc = modelSvc - }); err != nil { - panic(err) - } - - // data collection - t.TestDc = &models.DataCollection{ - Name: t.TestColName, - } - if err := delegate.NewModelDelegate(t.TestDc).Add(); err != nil { - panic(err) - } - t.TestCol = mongo.GetMongoCol(t.TestColName) - - // result service - t.resultSvc, err = result.GetResultService(t.TestDc.GetId()) - if err != nil { - panic(err) - } - - return t -} diff --git a/core/result/test/service_test.go b/core/result/test/service_test.go deleted file mode 100644 index b44faf4e8..000000000 --- a/core/result/test/service_test.go +++ /dev/null @@ -1,67 +0,0 @@ -package test - -import ( - "github.com/crawlab-team/crawlab/core/models/models" - "github.com/stretchr/testify/require" - "testing" -) - -func TestResultService_GetList(t *testing.T) { - var err error - T.Setup(t) - - n := 1000 - var docs []interface{} - for i := 0; i < n; i++ { - d := &models.Result{ - "i": i, - } - docs = append(docs, d) - } - _, err = T.TestCol.InsertMany(docs) - require.Nil(t, err) - - // get all - results, err := T.resultSvc.List(nil, nil) - require.Nil(t, err) - require.Equal(t, n, len(results)) - - //query := bson.M{ - // "i": bson.M{ - // "$lt": n / 2, - // }, - //} - //results, err = T.resultSvc.List(query, nil) - //require.Nil(t, err) - //require.Equal(t, n/2, len(results)) -} - -func TestResultService_Count(t *testing.T) { - var err error - T.Setup(t) - - n := 1000 - var docs []interface{} - for i := 0; i < n; i++ { - d := &models.Result{ - "i": i, - } - docs = append(docs, d) - } - _, err = T.TestCol.InsertMany(docs) - require.Nil(t, err) - - // get all - total, err := T.resultSvc.Count(nil) - require.Nil(t, err) - require.Equal(t, n, total) - - //query := bson.M{ - // "i": bson.M{ - // "$lt": n / 2, - // }, - //} - //total, err = T.resultSvc.Count(query) - //require.Nil(t, err) - //require.Equal(t, n/2, total) -} diff --git a/core/schedule/logger.go b/core/schedule/logger.go index f1e18156d..0eabb42d5 100644 --- a/core/schedule/logger.go +++ b/core/schedule/logger.go @@ -1,28 +1,27 @@ package schedule import ( - "fmt" - "github.com/apex/log" - "github.com/crawlab-team/crawlab/trace" + "github.com/crawlab-team/crawlab/core/interfaces" + "github.com/crawlab-team/crawlab/core/utils" "github.com/robfig/cron/v3" "strings" ) -type Logger struct { +type CronLogger struct { + interfaces.Logger } -func (l *Logger) Info(msg string, keysAndValues ...interface{}) { +func (l *CronLogger) Info(msg string, keysAndValues ...interface{}) { p := l.getPlaceholder(len(keysAndValues)) - log.Infof(fmt.Sprintf("cron: %s %s", msg, p), keysAndValues...) + l.Infof("cron: %s %s", msg, p) } -func (l *Logger) Error(err error, msg string, keysAndValues ...interface{}) { +func (l *CronLogger) Error(err error, msg string, keysAndValues ...interface{}) { p := l.getPlaceholder(len(keysAndValues)) - log.Errorf(fmt.Sprintf("cron: %s %s", msg, p), keysAndValues...) - trace.PrintError(err) + l.Errorf("cron: %s %v %s", msg, err, p) } -func (l *Logger) getPlaceholder(n int) (s string) { +func (l *CronLogger) getPlaceholder(n int) (s string) { var arr []string for i := 0; i < n; i++ { arr = append(arr, "%v") @@ -30,6 +29,8 @@ func (l *Logger) getPlaceholder(n int) (s string) { return strings.Join(arr, " ") } -func NewLogger() cron.Logger { - return &Logger{} +func NewCronLogger() cron.Logger { + return &CronLogger{ + Logger: utils.NewLogger("Cron"), + } } diff --git a/core/schedule/options.go b/core/schedule/options.go deleted file mode 100644 index 6ad22f99c..000000000 --- a/core/schedule/options.go +++ /dev/null @@ -1,37 +0,0 @@ -package schedule - -import ( - "github.com/crawlab-team/crawlab/core/interfaces" - "time" -) - -type Option func(svc interfaces.ScheduleService) - -func WithConfigPath(path string) Option { - return func(svc interfaces.ScheduleService) { - svc.SetConfigPath(path) - } -} - -func WithLocation(loc *time.Location) Option { - return func(svc interfaces.ScheduleService) { - svc.SetLocation(loc) - } -} - -func WithDelayIfStillRunning() Option { - return func(svc interfaces.ScheduleService) { - svc.SetDelay(true) - } -} - -func WithSkipIfStillRunning() Option { - return func(svc interfaces.ScheduleService) { - svc.SetSkip(true) - } -} - -func WithUpdateInterval(interval time.Duration) Option { - return func(svc interfaces.ScheduleService) { - } -} diff --git a/core/schedule/service.go b/core/schedule/service.go index 1238700bf..b93d832e9 100644 --- a/core/schedule/service.go +++ b/core/schedule/service.go @@ -1,14 +1,11 @@ package schedule import ( - "github.com/crawlab-team/crawlab/core/config" - "github.com/crawlab-team/crawlab/core/container" "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/models/delegate" "github.com/crawlab-team/crawlab/core/models/models" "github.com/crawlab-team/crawlab/core/models/service" + "github.com/crawlab-team/crawlab/core/spider/admin" "github.com/crawlab-team/crawlab/core/utils" - "github.com/crawlab-team/crawlab/trace" "github.com/robfig/cron/v3" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" @@ -18,9 +15,8 @@ import ( type Service struct { // dependencies - interfaces.WithConfigPath - modelSvc service.ModelService - adminSvc interfaces.SpiderAdminService + modelSvc *service.ModelService[models.Schedule] + adminSvc *admin.Service // settings variables loc *time.Location @@ -34,6 +30,7 @@ type Service struct { schedules []models.Schedule stopped bool mu sync.Mutex + interfaces.Logger } func (svc *Service) GetLocation() (loc *time.Location) { @@ -69,7 +66,12 @@ func (svc *Service) SetUpdateInterval(interval time.Duration) { } func (svc *Service) Init() (err error) { - return svc.fetch() + err = svc.fetch() + if err != nil { + svc.Fatalf("failed to initialize schedule service: %v", err) + return err + } + return nil } func (svc *Service) Start() { @@ -87,29 +89,30 @@ func (svc *Service) Stop() { svc.cron.Stop() } -func (svc *Service) Enable(s interfaces.Schedule, args ...interface{}) (err error) { +func (svc *Service) Enable(s models.Schedule, by primitive.ObjectID) (err error) { svc.mu.Lock() defer svc.mu.Unlock() - id, err := svc.cron.AddFunc(s.GetCron(), svc.schedule(s.GetId())) + id, err := svc.cron.AddFunc(s.Cron, svc.schedule(s.Id)) if err != nil { - return trace.TraceError(err) + svc.Errorf("failed to add cron job: %v", err) + return err } - s.SetEnabled(true) - s.SetEntryId(id) - u := utils.GetUserFromArgs(args...) - return delegate.NewModelDelegate(s, u).Save() + s.Enabled = true + s.EntryId = id + s.SetUpdated(by) + return svc.modelSvc.ReplaceById(s.Id, s) } -func (svc *Service) Disable(s interfaces.Schedule, args ...interface{}) (err error) { +func (svc *Service) Disable(s models.Schedule, by primitive.ObjectID) (err error) { svc.mu.Lock() defer svc.mu.Unlock() - svc.cron.Remove(s.GetEntryId()) - s.SetEnabled(false) - s.SetEntryId(-1) - u := utils.GetUserFromArgs(args...) - return delegate.NewModelDelegate(s, u).Save() + svc.cron.Remove(s.EntryId) + s.Enabled = false + s.EntryId = -1 + s.SetUpdated(by) + return svc.modelSvc.ReplaceById(s.Id, s) } func (svc *Service) Update() { @@ -131,7 +134,7 @@ func (svc *Service) GetCron() (c *cron.Cron) { func (svc *Service) update() { // fetch enabled schedules if err := svc.fetch(); err != nil { - trace.PrintError(err) + svc.Errorf("failed to fetch schedules: %v", err) return } @@ -144,9 +147,12 @@ func (svc *Service) update() { if ok { entryIdsMap[s.EntryId] = true } else { - if err := svc.Enable(&s); err != nil { - trace.PrintError(err) - continue + if !s.Enabled { + err := svc.Enable(s, s.GetCreatedBy()) + if err != nil { + svc.Errorf("failed to enable schedule: %v", err) + continue + } } } } @@ -171,7 +177,7 @@ func (svc *Service) fetch() (err error) { query := bson.M{ "enabled": true, } - svc.schedules, err = svc.modelSvc.GetScheduleList(query, nil) + svc.schedules, err = svc.modelSvc.GetMany(query, nil) if err != nil { return err } @@ -181,28 +187,28 @@ func (svc *Service) fetch() (err error) { func (svc *Service) schedule(id primitive.ObjectID) (fn func()) { return func() { // schedule - s, err := svc.modelSvc.GetScheduleById(id) + s, err := svc.modelSvc.GetById(id) if err != nil { - trace.PrintError(err) + svc.Errorf("failed to get schedule: %v", err) return } // spider - spider, err := svc.modelSvc.GetSpiderById(s.GetSpiderId()) + spider, err := service.NewModelService[models.Spider]().GetById(s.SpiderId) if err != nil { - trace.PrintError(err) + svc.Errorf("failed to get spider: %v", err) return } // options opts := &interfaces.SpiderRunOptions{ - Mode: s.GetMode(), - NodeIds: s.GetNodeIds(), - Cmd: s.GetCmd(), - Param: s.GetParam(), - Priority: s.GetPriority(), - ScheduleId: s.GetId(), - UserId: s.UserId, + Mode: s.Mode, + NodeIds: s.NodeIds, + Cmd: s.Cmd, + Param: s.Param, + Priority: s.Priority, + ScheduleId: s.Id, + UserId: s.GetCreatedBy(), } // normalize options @@ -227,36 +233,28 @@ func (svc *Service) schedule(id primitive.ObjectID) (fn func()) { } // schedule or assign a task in the task queue - if _, err := svc.adminSvc.Schedule(s.GetSpiderId(), opts); err != nil { - trace.PrintError(err) + if _, err := svc.adminSvc.Schedule(s.SpiderId, opts); err != nil { + svc.Errorf("failed to schedule spider: %v", err) + return } } } -func NewScheduleService() (svc2 interfaces.ScheduleService, err error) { +func newScheduleService() *Service { // service svc := &Service{ - WithConfigPath: config.NewConfigPathService(), - loc: time.Local, + loc: time.Local, // TODO: implement delay and skip delay: false, skip: false, updateInterval: 1 * time.Minute, - } - - // dependency injection - if err := container.GetContainer().Invoke(func( - modelSvc service.ModelService, - adminSvc interfaces.SpiderAdminService, - ) { - svc.modelSvc = modelSvc - svc.adminSvc = adminSvc - }); err != nil { - return nil, trace.TraceError(err) + adminSvc: admin.GetSpiderAdminService(), + modelSvc: service.NewModelService[models.Schedule](), + Logger: utils.NewLogger("ScheduleService"), } // logger - svc.logger = NewLogger() + svc.logger = NewCronLogger() // cron svc.cron = cron.New( @@ -267,21 +265,18 @@ func NewScheduleService() (svc2 interfaces.ScheduleService, err error) { // initialize if err := svc.Init(); err != nil { - return nil, err + panic(err) } - return svc, nil + return svc } -var svc interfaces.ScheduleService +var _service *Service +var _serviceOnce sync.Once -func GetScheduleService() (res interfaces.ScheduleService, err error) { - if svc != nil { - return svc, nil - } - svc, err = NewScheduleService() - if err != nil { - return nil, err - } - return svc, nil +func GetScheduleService() *Service { + _serviceOnce.Do(func() { + _service = newScheduleService() + }) + return _service } diff --git a/core/schedule/service_v2.go b/core/schedule/service_v2.go deleted file mode 100644 index 1d2d09da1..000000000 --- a/core/schedule/service_v2.go +++ /dev/null @@ -1,290 +0,0 @@ -package schedule - -import ( - "github.com/apex/log" - "github.com/crawlab-team/crawlab/core/config" - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/core/models/service" - "github.com/crawlab-team/crawlab/core/spider/admin" - "github.com/crawlab-team/crawlab/core/utils" - "github.com/crawlab-team/crawlab/trace" - "github.com/robfig/cron/v3" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" - "sync" - "time" -) - -type ServiceV2 struct { - // dependencies - interfaces.WithConfigPath - modelSvc *service.ModelServiceV2[models.ScheduleV2] - adminSvc *admin.ServiceV2 - - // settings variables - loc *time.Location - delay bool - skip bool - updateInterval time.Duration - - // internals - cron *cron.Cron - logger cron.Logger - schedules []models.ScheduleV2 - stopped bool - mu sync.Mutex -} - -func (svc *ServiceV2) GetLocation() (loc *time.Location) { - return svc.loc -} - -func (svc *ServiceV2) SetLocation(loc *time.Location) { - svc.loc = loc -} - -func (svc *ServiceV2) GetDelay() (delay bool) { - return svc.delay -} - -func (svc *ServiceV2) SetDelay(delay bool) { - svc.delay = delay -} - -func (svc *ServiceV2) GetSkip() (skip bool) { - return svc.skip -} - -func (svc *ServiceV2) SetSkip(skip bool) { - svc.skip = skip -} - -func (svc *ServiceV2) GetUpdateInterval() (interval time.Duration) { - return svc.updateInterval -} - -func (svc *ServiceV2) SetUpdateInterval(interval time.Duration) { - svc.updateInterval = interval -} - -func (svc *ServiceV2) Init() (err error) { - return svc.fetch() -} - -func (svc *ServiceV2) Start() { - svc.cron.Start() - go svc.Update() -} - -func (svc *ServiceV2) Wait() { - utils.DefaultWait() - svc.Stop() -} - -func (svc *ServiceV2) Stop() { - svc.stopped = true - svc.cron.Stop() -} - -func (svc *ServiceV2) Enable(s models.ScheduleV2, by primitive.ObjectID) (err error) { - svc.mu.Lock() - defer svc.mu.Unlock() - - id, err := svc.cron.AddFunc(s.Cron, svc.schedule(s.Id)) - if err != nil { - return trace.TraceError(err) - } - s.Enabled = true - s.EntryId = id - s.SetUpdated(by) - return svc.modelSvc.ReplaceById(s.Id, s) -} - -func (svc *ServiceV2) Disable(s models.ScheduleV2, by primitive.ObjectID) (err error) { - svc.mu.Lock() - defer svc.mu.Unlock() - - svc.cron.Remove(s.EntryId) - s.Enabled = false - s.EntryId = -1 - s.SetUpdated(by) - return svc.modelSvc.ReplaceById(s.Id, s) -} - -func (svc *ServiceV2) Update() { - for { - if svc.stopped { - return - } - - svc.update() - - time.Sleep(svc.updateInterval) - } -} - -func (svc *ServiceV2) GetCron() (c *cron.Cron) { - return svc.cron -} - -func (svc *ServiceV2) update() { - // fetch enabled schedules - if err := svc.fetch(); err != nil { - trace.PrintError(err) - return - } - - // entry id map - entryIdsMap := svc.getEntryIdsMap() - - // iterate enabled schedules - for _, s := range svc.schedules { - _, ok := entryIdsMap[s.EntryId] - if ok { - entryIdsMap[s.EntryId] = true - } else { - if !s.Enabled { - err := svc.Enable(s, s.GetCreatedBy()) - if err != nil { - trace.PrintError(err) - continue - } - } - } - } - - // remove non-existent entries - for id, ok := range entryIdsMap { - if !ok { - svc.cron.Remove(id) - } - } -} - -func (svc *ServiceV2) getEntryIdsMap() (res map[cron.EntryID]bool) { - res = map[cron.EntryID]bool{} - for _, e := range svc.cron.Entries() { - res[e.ID] = false - } - return res -} - -func (svc *ServiceV2) fetch() (err error) { - query := bson.M{ - "enabled": true, - } - svc.schedules, err = svc.modelSvc.GetMany(query, nil) - if err != nil { - return err - } - return nil -} - -func (svc *ServiceV2) schedule(id primitive.ObjectID) (fn func()) { - return func() { - // schedule - s, err := svc.modelSvc.GetById(id) - if err != nil { - trace.PrintError(err) - return - } - - // spider - spider, err := service.NewModelServiceV2[models.SpiderV2]().GetById(s.SpiderId) - if err != nil { - trace.PrintError(err) - return - } - - // options - opts := &interfaces.SpiderRunOptions{ - Mode: s.Mode, - NodeIds: s.NodeIds, - Cmd: s.Cmd, - Param: s.Param, - Priority: s.Priority, - ScheduleId: s.Id, - UserId: s.GetCreatedBy(), - } - - // normalize options - if opts.Mode == "" { - opts.Mode = spider.Mode - } - if len(opts.NodeIds) == 0 { - opts.NodeIds = spider.NodeIds - } - if opts.Cmd == "" { - opts.Cmd = spider.Cmd - } - if opts.Param == "" { - opts.Param = spider.Param - } - if opts.Priority == 0 { - if spider.Priority > 0 { - opts.Priority = spider.Priority - } else { - opts.Priority = 5 - } - } - - // schedule or assign a task in the task queue - if _, err := svc.adminSvc.Schedule(s.SpiderId, opts); err != nil { - trace.PrintError(err) - } - } -} - -func NewScheduleServiceV2() (svc2 *ServiceV2, err error) { - // service - svc := &ServiceV2{ - WithConfigPath: config.NewConfigPathService(), - loc: time.Local, - // TODO: implement delay and skip - delay: false, - skip: false, - updateInterval: 1 * time.Minute, - } - svc.adminSvc, err = admin.GetSpiderAdminServiceV2() - if err != nil { - return nil, err - } - svc.modelSvc = service.NewModelServiceV2[models.ScheduleV2]() - - // logger - svc.logger = NewLogger() - - // cron - svc.cron = cron.New( - cron.WithLogger(svc.logger), - cron.WithLocation(svc.loc), - cron.WithChain(cron.Recover(svc.logger)), - ) - - // initialize - if err := svc.Init(); err != nil { - return nil, err - } - - return svc, nil -} - -var svcV2 *ServiceV2 -var svcV2Once = new(sync.Once) - -func GetScheduleServiceV2() (res *ServiceV2, err error) { - if svcV2 != nil { - return svcV2, nil - } - svcV2Once.Do(func() { - svcV2, err = NewScheduleServiceV2() - if err != nil { - log.Errorf("failed to get schedule service: %v", err) - } - }) - if err != nil { - return nil, err - } - return svcV2, nil -} diff --git a/core/schedule/test/base.go b/core/schedule/test/base.go deleted file mode 100644 index cd7c885ed..000000000 --- a/core/schedule/test/base.go +++ /dev/null @@ -1,91 +0,0 @@ -package test - -import ( - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/models/delegate" - "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/core/models/service" - "github.com/crawlab-team/crawlab/core/schedule" - "go.uber.org/dig" - "testing" -) - -func init() { - var err error - T, err = NewTest() - if err != nil { - panic(err) - } -} - -var T *Test - -type Test struct { - // dependencies - modelSvc service.ModelService - scheduleSvc interfaces.ScheduleService - - // test data - TestSchedule interfaces.Schedule - TestSpider interfaces.Spider - ScriptName string - Script string -} - -func (t *Test) Setup(t2 *testing.T) { - t.scheduleSvc.Start() - t2.Cleanup(t.Cleanup) -} - -func (t *Test) Cleanup() { - t.scheduleSvc.Stop() - _ = t.modelSvc.GetBaseService(interfaces.ModelIdTask).Delete(nil) -} - -func NewTest() (t *Test, err error) { - // test - t = &Test{ - TestSpider: &models.Spider{ - Name: "test_spider", - Cmd: "go run main.go", - }, - ScriptName: "main.go", - Script: `package main -import "fmt" -func main() { - fmt.Println("it works") -}`, - } - - // dependency injection - c := dig.New() - if err := c.Provide(service.GetService); err != nil { - return nil, err - } - if err := c.Provide(schedule.NewScheduleService); err != nil { - return nil, err - } - if err := c.Invoke(func(modelSvc service.ModelService, scheduleSvc interfaces.ScheduleService) { - t.modelSvc = modelSvc - t.scheduleSvc = scheduleSvc - }); err != nil { - return nil, err - } - - // add spider to db - if err := delegate.NewModelDelegate(t.TestSpider).Add(); err != nil { - return nil, err - } - - // test schedule - t.TestSchedule = &models.Schedule{ - Name: "test_schedule", - SpiderId: t.TestSpider.GetId(), - Cron: "* * * * *", - } - if err := delegate.NewModelDelegate(t.TestSchedule).Add(); err != nil { - return nil, err - } - - return t, nil -} diff --git a/core/schedule/test/schedule_service_test.go b/core/schedule/test/schedule_service_test.go deleted file mode 100644 index 7a815da1b..000000000 --- a/core/schedule/test/schedule_service_test.go +++ /dev/null @@ -1,44 +0,0 @@ -package test - -import ( - "github.com/stretchr/testify/require" - "testing" - "time" -) - -func TestScheduleService_Enable_Disable(t *testing.T) { - var err error - T.Setup(t) - - time.Sleep(1 * time.Second) - err = T.scheduleSvc.Enable(T.TestSchedule) - require.Nil(t, err) - time.Sleep(1 * time.Second) - - require.True(t, T.TestSchedule.GetEnabled()) - require.Greater(t, int(T.TestSchedule.GetEntryId()), -1) - e := T.scheduleSvc.GetCron().Entry(T.TestSchedule.GetEntryId()) - require.Equal(t, T.TestSchedule.GetEntryId(), e.ID) - time.Sleep(1 * time.Second) - - err = T.scheduleSvc.Disable(T.TestSchedule) - require.False(t, T.TestSchedule.GetEnabled()) - require.Equal(t, 0, len(T.scheduleSvc.GetCron().Entries())) -} - -func TestScheduleService_Run(t *testing.T) { - var err error - T.Setup(t) - - time.Sleep(1 * time.Second) - err = T.scheduleSvc.Enable(T.TestSchedule) - require.Nil(t, err) - time.Sleep(1 * time.Minute) - - tasks, err := T.modelSvc.GetTaskList(nil, nil) - require.Nil(t, err) - require.Greater(t, len(tasks), 0) - for _, task := range tasks { - require.False(t, task.ScheduleId.IsZero()) - } -} diff --git a/core/spider/admin/options.go b/core/spider/admin/options.go deleted file mode 100644 index 32e08e76e..000000000 --- a/core/spider/admin/options.go +++ /dev/null @@ -1,11 +0,0 @@ -package admin - -import "github.com/crawlab-team/crawlab/core/interfaces" - -type Option func(svc interfaces.SpiderAdminService) - -func WithConfigPath(path string) Option { - return func(svc interfaces.SpiderAdminService) { - svc.SetConfigPath(path) - } -} diff --git a/core/spider/admin/service.go b/core/spider/admin/service.go index b4d13480b..34c2a7c3f 100644 --- a/core/spider/admin/service.go +++ b/core/spider/admin/service.go @@ -1,57 +1,27 @@ package admin import ( - "context" - "github.com/apex/log" - config2 "github.com/crawlab-team/crawlab/core/config" + "errors" "github.com/crawlab-team/crawlab/core/constants" - "github.com/crawlab-team/crawlab/core/container" - "github.com/crawlab-team/crawlab/core/errors" "github.com/crawlab-team/crawlab/core/interfaces" "github.com/crawlab-team/crawlab/core/models/models" "github.com/crawlab-team/crawlab/core/models/service" - "github.com/crawlab-team/crawlab/core/utils" + "github.com/crawlab-team/crawlab/core/node/config" + "github.com/crawlab-team/crawlab/core/task/scheduler" "github.com/crawlab-team/crawlab/trace" - "github.com/crawlab-team/crawlab/vcs" - "github.com/google/uuid" - "github.com/robfig/cron/v3" - "github.com/spf13/viper" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" - "os" - "path" - "path/filepath" "sync" - "time" ) type Service struct { // dependencies - nodeCfgSvc interfaces.NodeConfigService - modelSvc service.ModelService - schedulerSvc interfaces.TaskSchedulerService - cron *cron.Cron - syncLock bool - - // settings - cfgPath string -} - -func (svc *Service) GetConfigPath() (path string) { - return svc.cfgPath -} - -func (svc *Service) SetConfigPath(path string) { - svc.cfgPath = path -} - -func (svc *Service) Start() (err error) { - return svc.SyncGit() + schedulerSvc *scheduler.Service } func (svc *Service) Schedule(id primitive.ObjectID, opts *interfaces.SpiderRunOptions) (taskIds []primitive.ObjectID, err error) { // spider - s, err := svc.modelSvc.GetSpiderById(id) + s, err := service.NewModelService[models.Spider]().GetById(id) if err != nil { return nil, err } @@ -60,112 +30,52 @@ func (svc *Service) Schedule(id primitive.ObjectID, opts *interfaces.SpiderRunOp return svc.scheduleTasks(s, opts) } -func (svc *Service) Clone(id primitive.ObjectID, opts *interfaces.SpiderCloneOptions) (err error) { - // TODO: implement - return nil -} - -func (svc *Service) Delete(id primitive.ObjectID) (err error) { - panic("implement me") -} - -func (svc *Service) SyncGit() (err error) { - if _, err = svc.cron.AddFunc("* * * * *", svc.syncGit); err != nil { - return trace.TraceError(err) - } - svc.cron.Start() - return nil -} - -func (svc *Service) SyncGitOne(g interfaces.Git) (err error) { - svc.syncGitOne(g) - return nil -} - -func (svc *Service) Export(id primitive.ObjectID) (filePath string, err error) { - // spider fs - workspacePath := viper.GetString("workspace") - spiderFolderPath := filepath.Join(workspacePath, id.Hex()) - - // zip files in workspace - dirPath := spiderFolderPath - zipFilePath := path.Join(os.TempDir(), uuid.New().String()+".zip") - if err := utils.ZipDirectory(dirPath, zipFilePath); err != nil { - return "", trace.TraceError(err) - } - - return zipFilePath, nil -} - func (svc *Service) scheduleTasks(s *models.Spider, opts *interfaces.SpiderRunOptions) (taskIds []primitive.ObjectID, err error) { - // main task - mainTask := &models.Task{ - SpiderId: s.Id, - Mode: opts.Mode, - NodeIds: opts.NodeIds, - Cmd: opts.Cmd, - Param: opts.Param, - ScheduleId: opts.ScheduleId, - Priority: opts.Priority, - UserId: opts.UserId, - CreateTs: time.Now(), + // get node ids + nodeIds, err := svc.getNodeIds(opts) + if err != nil { + return nil, err } - // normalize - if mainTask.Mode == "" { - mainTask.Mode = s.Mode - } - if mainTask.NodeIds == nil { - mainTask.NodeIds = s.NodeIds - } - if mainTask.Cmd == "" { - mainTask.Cmd = s.Cmd - } - if mainTask.Param == "" { - mainTask.Param = s.Param - } - if mainTask.Priority == 0 { - mainTask.Priority = s.Priority - } + // iterate node ids + for _, nodeId := range nodeIds { + // task + t := &models.Task{ + SpiderId: s.Id, + NodeId: nodeId, + NodeIds: opts.NodeIds, + Mode: opts.Mode, + Cmd: opts.Cmd, + Param: opts.Param, + ScheduleId: opts.ScheduleId, + Priority: opts.Priority, + } - if svc.isMultiTask(opts) { - // multi tasks - nodeIds, err := svc.getNodeIds(opts) - if err != nil { - return nil, err + // normalize + if t.Mode == "" { + t.Mode = s.Mode } - for _, nodeId := range nodeIds { - t := &models.Task{ - SpiderId: s.Id, - Mode: opts.Mode, - Cmd: opts.Cmd, - Param: opts.Param, - NodeId: nodeId, - ScheduleId: opts.ScheduleId, - Priority: opts.Priority, - UserId: opts.UserId, - CreateTs: time.Now(), - } - t2, err := svc.schedulerSvc.Enqueue(t) - if err != nil { - return nil, err - } - taskIds = append(taskIds, t2.GetId()) + if t.NodeIds == nil { + t.NodeIds = s.NodeIds } - } else { - // single task - nodeIds, err := svc.getNodeIds(opts) - if err != nil { - return nil, err + if t.Cmd == "" { + t.Cmd = s.Cmd + } + if t.Param == "" { + t.Param = s.Param } - if len(nodeIds) > 0 { - mainTask.NodeId = nodeIds[0] + if t.Priority == 0 { + t.Priority = s.Priority } - t2, err := svc.schedulerSvc.Enqueue(mainTask) + + // enqueue task + t, err = svc.schedulerSvc.Enqueue(t, opts.UserId) if err != nil { return nil, err } - taskIds = append(taskIds, t2.GetId()) + + // append task id + taskIds = append(taskIds, t.Id) } return taskIds, nil @@ -178,15 +88,19 @@ func (svc *Service) getNodeIds(opts *interfaces.SpiderRunOptions) (nodeIds []pri "enabled": true, "status": constants.NodeStatusOnline, } - nodes, err := svc.modelSvc.GetNodeList(query, nil) + nodes, err := service.NewModelService[models.Node]().GetMany(query, nil) if err != nil { return nil, err } for _, node := range nodes { - nodeIds = append(nodeIds, node.GetId()) + nodeIds = append(nodeIds, node.Id) } } else if opts.Mode == constants.RunTypeSelectedNodes { nodeIds = opts.NodeIds + } else if opts.Mode == constants.RunTypeRandom { + nodeIds = []primitive.ObjectID{primitive.NilObjectID} + } else { + return nil, errors.New("invalid run mode") } return nodeIds, nil } @@ -198,7 +112,7 @@ func (svc *Service) isMultiTask(opts *interfaces.SpiderRunOptions) (res bool) { "enabled": true, "status": constants.NodeStatusOnline, } - nodes, err := svc.modelSvc.GetNodeList(query, nil) + nodes, err := service.NewModelService[models.Node]().GetMany(query, nil) if err != nil { trace.PrintError(err) return false @@ -213,140 +127,23 @@ func (svc *Service) isMultiTask(opts *interfaces.SpiderRunOptions) (res bool) { } } -func (svc *Service) syncGit() { - if svc.syncLock { - log.Infof("[SpiderAdminService] sync git is locked, skip") - return - } - log.Infof("[SpiderAdminService] start to sync git") - - svc.syncLock = true - defer func() { - svc.syncLock = false - }() - - // spiders - spiders, err := svc.modelSvc.GetSpiderList(nil, nil) - if err != nil { - trace.PrintError(err) - return - } - - // spider ids - var spiderIds []primitive.ObjectID - for _, s := range spiders { - spiderIds = append(spiderIds, s.Id) - } - - if len(spiderIds) > 0 { - // gits - gits, err := svc.modelSvc.GetGitList(bson.M{ - "_id": bson.M{ - "$in": spiderIds, - }, - "auto_pull": true, - }, nil) - if err != nil { - trace.PrintError(err) - return - } - - wg := sync.WaitGroup{} - wg.Add(len(gits)) - for _, g := range gits { - go func(g models.Git) { - svc.syncGitOne(&g) - wg.Done() - }(g) - } - wg.Wait() - } - - log.Infof("[SpiderAdminService] finished sync git") -} - -func (svc *Service) syncGitOne(g interfaces.Git) { - log.Infof("[SpiderAdminService] sync git %s", g.GetId()) - - ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second) - defer cancel() - - // git client - workspacePath := viper.GetString("workspace") - gitClient, err := vcs.NewGitClient(vcs.WithPath(filepath.Join(workspacePath, g.GetId().Hex()))) - if err != nil { - return - } - - // set auth - utils.InitGitClientAuth(g, gitClient) - - // check if remote has changes - ok, err := gitClient.IsRemoteChanged() - if err != nil { - trace.PrintError(err) - return - } - if !ok { - // no change - return - } - - // pull and sync to workspace - if err := gitClient.Reset(); err != nil { - trace.PrintError(err) - return - } - if err := gitClient.Pull(); err != nil { - trace.PrintError(err) - return - } - - // wait for context to end - <-ctx.Done() -} - -func NewSpiderAdminService(opts ...Option) (svc2 interfaces.SpiderAdminService, err error) { - svc := &Service{ - cfgPath: config2.GetConfigPath(), - } - - // apply options - for _, opt := range opts { - opt(svc) - } - - // dependency injection - if err := container.GetContainer().Invoke(func(nodeCfgSvc interfaces.NodeConfigService, modelSvc service.ModelService, schedulerSvc interfaces.TaskSchedulerService) { - svc.nodeCfgSvc = nodeCfgSvc - svc.modelSvc = modelSvc - svc.schedulerSvc = schedulerSvc - }); err != nil { - return nil, trace.TraceError(err) - } - - // cron - svc.cron = cron.New() - +func newSpiderAdminService() *Service { + nodeCfgSvc := config.GetNodeConfigService() // validate node type - if !svc.nodeCfgSvc.IsMaster() { - return nil, trace.TraceError(errors.ErrorSpiderForbidden) + if !nodeCfgSvc.IsMaster() { + panic("only master node can run spider admin service") } - - return svc, nil -} - -var _service interfaces.SpiderAdminService - -func GetSpiderAdminService() (svc2 interfaces.SpiderAdminService, err error) { - if _service != nil { - return _service, nil + return &Service{ + schedulerSvc: scheduler.GetTaskSchedulerService(), } +} - _service, err = NewSpiderAdminService() - if err != nil { - return nil, err - } +var _service *Service +var _serviceOnce sync.Once - return _service, nil +func GetSpiderAdminService() *Service { + _serviceOnce.Do(func() { + _service = newSpiderAdminService() + }) + return _service } diff --git a/core/spider/admin/service_v2.go b/core/spider/admin/service_v2.go deleted file mode 100644 index 4ead1ec84..000000000 --- a/core/spider/admin/service_v2.go +++ /dev/null @@ -1,203 +0,0 @@ -package admin - -import ( - log2 "github.com/apex/log" - config2 "github.com/crawlab-team/crawlab/core/config" - "github.com/crawlab-team/crawlab/core/constants" - "github.com/crawlab-team/crawlab/core/errors" - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/core/models/service" - "github.com/crawlab-team/crawlab/core/node/config" - "github.com/crawlab-team/crawlab/core/task/scheduler" - "github.com/crawlab-team/crawlab/trace" - "github.com/robfig/cron/v3" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" - "sync" - "time" -) - -type ServiceV2 struct { - // dependencies - nodeCfgSvc interfaces.NodeConfigService - schedulerSvc *scheduler.ServiceV2 - cron *cron.Cron - syncLock bool - - // settings - cfgPath string -} - -func (svc *ServiceV2) Start() (err error) { - return nil -} - -func (svc *ServiceV2) Schedule(id primitive.ObjectID, opts *interfaces.SpiderRunOptions) (taskIds []primitive.ObjectID, err error) { - // spider - s, err := service.NewModelServiceV2[models.SpiderV2]().GetById(id) - if err != nil { - return nil, err - } - - // assign tasks - return svc.scheduleTasks(s, opts) -} - -func (svc *ServiceV2) scheduleTasks(s *models.SpiderV2, opts *interfaces.SpiderRunOptions) (taskIds []primitive.ObjectID, err error) { - // main task - mainTask := &models.TaskV2{ - SpiderId: s.Id, - Mode: opts.Mode, - NodeIds: opts.NodeIds, - Cmd: opts.Cmd, - Param: opts.Param, - ScheduleId: opts.ScheduleId, - Priority: opts.Priority, - UserId: opts.UserId, - CreateTs: time.Now(), - } - mainTask.SetId(primitive.NewObjectID()) - - // normalize - if mainTask.Mode == "" { - mainTask.Mode = s.Mode - } - if mainTask.NodeIds == nil { - mainTask.NodeIds = s.NodeIds - } - if mainTask.Cmd == "" { - mainTask.Cmd = s.Cmd - } - if mainTask.Param == "" { - mainTask.Param = s.Param - } - if mainTask.Priority == 0 { - mainTask.Priority = s.Priority - } - - if svc.isMultiTask(opts) { - // multi tasks - nodeIds, err := svc.getNodeIds(opts) - if err != nil { - return nil, err - } - for _, nodeId := range nodeIds { - t := &models.TaskV2{ - SpiderId: s.Id, - Mode: opts.Mode, - Cmd: opts.Cmd, - Param: opts.Param, - NodeId: nodeId, - ScheduleId: opts.ScheduleId, - Priority: opts.Priority, - UserId: opts.UserId, - CreateTs: time.Now(), - } - t.SetId(primitive.NewObjectID()) - t2, err := svc.schedulerSvc.Enqueue(t, opts.UserId) - if err != nil { - return nil, err - } - taskIds = append(taskIds, t2.Id) - } - } else { - // single task - nodeIds, err := svc.getNodeIds(opts) - if err != nil { - return nil, err - } - if len(nodeIds) > 0 { - mainTask.NodeId = nodeIds[0] - } - t2, err := svc.schedulerSvc.Enqueue(mainTask, opts.UserId) - if err != nil { - return nil, err - } - taskIds = append(taskIds, t2.Id) - } - - return taskIds, nil -} - -func (svc *ServiceV2) getNodeIds(opts *interfaces.SpiderRunOptions) (nodeIds []primitive.ObjectID, err error) { - if opts.Mode == constants.RunTypeAllNodes { - query := bson.M{ - "active": true, - "enabled": true, - "status": constants.NodeStatusOnline, - } - nodes, err := service.NewModelServiceV2[models.NodeV2]().GetMany(query, nil) - if err != nil { - return nil, err - } - for _, node := range nodes { - nodeIds = append(nodeIds, node.Id) - } - } else if opts.Mode == constants.RunTypeSelectedNodes { - nodeIds = opts.NodeIds - } - return nodeIds, nil -} - -func (svc *ServiceV2) isMultiTask(opts *interfaces.SpiderRunOptions) (res bool) { - if opts.Mode == constants.RunTypeAllNodes { - query := bson.M{ - "active": true, - "enabled": true, - "status": constants.NodeStatusOnline, - } - nodes, err := service.NewModelServiceV2[models.NodeV2]().GetMany(query, nil) - if err != nil { - trace.PrintError(err) - return false - } - return len(nodes) > 1 - } else if opts.Mode == constants.RunTypeRandom { - return false - } else if opts.Mode == constants.RunTypeSelectedNodes { - return len(opts.NodeIds) > 1 - } else { - return false - } -} - -func newSpiderAdminServiceV2() (svc2 *ServiceV2, err error) { - svc := &ServiceV2{ - nodeCfgSvc: config.GetNodeConfigService(), - cfgPath: config2.GetConfigPath(), - } - svc.schedulerSvc, err = scheduler.GetTaskSchedulerServiceV2() - if err != nil { - return nil, err - } - - // cron - svc.cron = cron.New() - - // validate node type - if !svc.nodeCfgSvc.IsMaster() { - return nil, trace.TraceError(errors.ErrorSpiderForbidden) - } - - return svc, nil -} - -var svcV2 *ServiceV2 -var svcV2Once = new(sync.Once) - -func GetSpiderAdminServiceV2() (svc2 *ServiceV2, err error) { - if svcV2 != nil { - return svcV2, nil - } - svcV2Once.Do(func() { - svcV2, err = newSpiderAdminServiceV2() - if err != nil { - log2.Errorf("[GetSpiderAdminServiceV2] error: %v", err) - } - }) - if err != nil { - return nil, err - } - return svcV2, nil -} diff --git a/core/spider/registry_service.go b/core/spider/registry_service.go new file mode 100644 index 000000000..6e9122260 --- /dev/null +++ b/core/spider/registry_service.go @@ -0,0 +1,13 @@ +package spider + +import "github.com/crawlab-team/crawlab/core/interfaces" + +var templateSvcInstance interfaces.SpiderTemplateService + +func SetSpiderTemplateRegistryService(svc interfaces.SpiderTemplateService) { + templateSvcInstance = svc +} + +func GetSpiderTemplateRegistryService() interfaces.SpiderTemplateService { + return templateSvcInstance +} diff --git a/core/stats/options.go b/core/stats/options.go deleted file mode 100644 index b40e16c30..000000000 --- a/core/stats/options.go +++ /dev/null @@ -1,5 +0,0 @@ -package stats - -import "github.com/crawlab-team/crawlab/core/interfaces" - -type Option func(svc interfaces.StatsService) diff --git a/core/stats/service.go b/core/stats/service.go index 75c803c88..6f1d26ea4 100644 --- a/core/stats/service.go +++ b/core/stats/service.go @@ -4,7 +4,8 @@ import ( "github.com/crawlab-team/crawlab/core/constants" "github.com/crawlab-team/crawlab/core/entity" "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/db/mongo" + "github.com/crawlab-team/crawlab/core/models/models" + "github.com/crawlab-team/crawlab/core/mongo" "go.mongodb.org/mongo-driver/bson" mongo2 "go.mongodb.org/mongo-driver/mongo" ) @@ -16,7 +17,7 @@ func (svc *Service) GetOverviewStats(query bson.M) (data interface{}, err error) stats := bson.M{} // nodes - stats["nodes"], err = mongo.GetMongoCol(interfaces.ModelColNameNode).Count(bson.M{"active": true}) + stats["nodes"], err = mongo.GetMongoCol(models.GetCollectionNameByInstance(models.Node{})).Count(bson.M{"active": true}) if err != nil { if err.Error() != mongo2.ErrNoDocuments.Error() { return nil, err @@ -25,7 +26,7 @@ func (svc *Service) GetOverviewStats(query bson.M) (data interface{}, err error) } // projects - stats["projects"], err = mongo.GetMongoCol(interfaces.ModelColNameProject).Count(nil) + stats["projects"], err = mongo.GetMongoCol(models.GetCollectionNameByInstance(models.Project{})).Count(nil) if err != nil { if err.Error() != mongo2.ErrNoDocuments.Error() { return nil, err @@ -34,7 +35,7 @@ func (svc *Service) GetOverviewStats(query bson.M) (data interface{}, err error) } // spiders - stats["spiders"], err = mongo.GetMongoCol(interfaces.ModelColNameSpider).Count(nil) + stats["spiders"], err = mongo.GetMongoCol(models.GetCollectionNameByInstance(models.Spider{})).Count(nil) if err != nil { if err.Error() != mongo2.ErrNoDocuments.Error() { return nil, err @@ -43,7 +44,7 @@ func (svc *Service) GetOverviewStats(query bson.M) (data interface{}, err error) } // schedules - stats["schedules"], err = mongo.GetMongoCol(interfaces.ModelColNameSchedule).Count(nil) + stats["schedules"], err = mongo.GetMongoCol(models.GetCollectionNameByInstance(models.Schedule{})).Count(nil) if err != nil { if err.Error() != mongo2.ErrNoDocuments.Error() { return nil, err @@ -52,7 +53,7 @@ func (svc *Service) GetOverviewStats(query bson.M) (data interface{}, err error) } // tasks - stats["tasks"], err = mongo.GetMongoCol(interfaces.ModelColNameTask).Count(nil) + stats["tasks"], err = mongo.GetMongoCol(models.GetCollectionNameByInstance(models.Task{})).Count(nil) if err != nil { if err.Error() != mongo2.ErrNoDocuments.Error() { return nil, err @@ -61,7 +62,7 @@ func (svc *Service) GetOverviewStats(query bson.M) (data interface{}, err error) } // error tasks - stats["error_tasks"], err = mongo.GetMongoCol(interfaces.ModelColNameTask).Count(bson.M{"status": constants.TaskStatusError}) + stats["error_tasks"], err = mongo.GetMongoCol(models.GetCollectionNameByInstance(models.Task{})).Count(bson.M{"status": constants.TaskStatusError}) if err != nil { if err.Error() != mongo2.ErrNoDocuments.Error() { return nil, err @@ -79,7 +80,7 @@ func (svc *Service) GetOverviewStats(query bson.M) (data interface{}, err error) } // users - stats["users"], err = mongo.GetMongoCol(interfaces.ModelColNameUser).Count(nil) + stats["users"], err = mongo.GetMongoCol(models.GetCollectionNameByInstance(models.User{})).Count(nil) if err != nil { if err.Error() != mongo2.ErrNoDocuments.Error() { return nil, err @@ -153,7 +154,7 @@ func (svc *Service) getDailyTasksStats(query bson.M) (data interface{}, err erro }}, } var results []entity.StatsDailyItem - if err := mongo.GetMongoCol(interfaces.ModelColNameTaskStat).Aggregate(pipeline, nil).All(&results); err != nil { + if err := mongo.GetMongoCol(models.GetCollectionNameByInstance(models.TaskStat{})).Aggregate(pipeline, nil).All(&results); err != nil { return nil, err } return results, nil @@ -171,7 +172,7 @@ func (svc *Service) getOverviewResults(query bson.M) (data interface{}, err erro }}, } var res bson.M - if err := mongo.GetMongoCol(interfaces.ModelColNameTaskStat).Aggregate(pipeline, nil).One(&res); err != nil { + if err := mongo.GetMongoCol(models.GetCollectionNameByInstance(models.TaskStat{})).Aggregate(pipeline, nil).One(&res); err != nil { return nil, err } return res["results"], nil @@ -196,7 +197,7 @@ func (svc *Service) getTaskStatsByStatus(query bson.M) (data interface{}, err er }}, } var results []bson.M - if err := mongo.GetMongoCol(interfaces.ModelColNameTask).Aggregate(pipeline, nil).All(&results); err != nil { + if err := mongo.GetMongoCol(models.GetCollectionNameByInstance(models.Task{})).Aggregate(pipeline, nil).All(&results); err != nil { return nil, err } return results, nil @@ -215,7 +216,7 @@ func (svc *Service) getTaskStatsByNode(query bson.M) (data interface{}, err erro {{ "$lookup", bson.M{ - "from": interfaces.ModelColNameNode, + "from": models.GetCollectionNameByInstance(models.Node{}), "localField": "_id", "foreignField": "_id", "as": "_n", @@ -232,7 +233,7 @@ func (svc *Service) getTaskStatsByNode(query bson.M) (data interface{}, err erro }}, } var results []bson.M - if err := mongo.GetMongoCol(interfaces.ModelColNameTask).Aggregate(pipeline, nil).All(&results); err != nil { + if err := mongo.GetMongoCol(models.GetCollectionNameByInstance(models.Task{})).Aggregate(pipeline, nil).All(&results); err != nil { return nil, err } return results, nil @@ -251,7 +252,7 @@ func (svc *Service) getTaskStatsBySpider(query bson.M) (data interface{}, err er {{ "$lookup", bson.M{ - "from": interfaces.ModelColNameSpider, + "from": models.GetCollectionNameByInstance(models.Spider{}), "localField": "_id", "foreignField": "_id", "as": "_s", @@ -269,7 +270,7 @@ func (svc *Service) getTaskStatsBySpider(query bson.M) (data interface{}, err er {{"$limit", 10}}, } var results []bson.M - if err := mongo.GetMongoCol(interfaces.ModelColNameTask).Aggregate(pipeline, nil).All(&results); err != nil { + if err := mongo.GetMongoCol(models.GetCollectionNameByInstance(models.Task{})).Aggregate(pipeline, nil).All(&results); err != nil { return nil, err } return results, nil @@ -281,7 +282,7 @@ func (svc *Service) getTaskStatsHistogram(query bson.M) (data interface{}, err e {{ "$lookup", bson.M{ - "from": interfaces.ModelColNameTaskStat, + "from": models.GetCollectionNameByInstance(models.TaskStat{}), "localField": "_id", "foreignField": "_id", "as": "_ts", @@ -303,7 +304,7 @@ func (svc *Service) getTaskStatsHistogram(query bson.M) (data interface{}, err e }}, } var res bson.M - if err := mongo.GetMongoCol(interfaces.ModelColNameTask).Aggregate(pipeline, nil).One(&res); err != nil { + if err := mongo.GetMongoCol(models.GetCollectionNameByInstance(models.Task{})).Aggregate(pipeline, nil).One(&res); err != nil { return nil, err } return res, nil diff --git a/core/sys_exec/sys_exec.go b/core/sys_exec/sys_exec.go deleted file mode 100644 index 010270848..000000000 --- a/core/sys_exec/sys_exec.go +++ /dev/null @@ -1,89 +0,0 @@ -package sys_exec - -import ( - "bufio" - "github.com/crawlab-team/crawlab/trace" - "github.com/shirou/gopsutil/process" - "os/exec" - "time" -) - -type KillProcessOptions struct { - Timeout time.Duration - Force bool -} - -func KillProcess(cmd *exec.Cmd, opts *KillProcessOptions) error { - // process - p, err := process.NewProcess(int32(cmd.Process.Pid)) - if err != nil { - return err - } - - // kill function - killFunc := func(p *process.Process) error { - return killProcessRecursive(p, opts.Force) - } - - if opts.Timeout != 0 { - // with timeout - return killProcessWithTimeout(p, opts.Timeout, killFunc) - } else { - // without timeout - return killFunc(p) - } -} - -func killProcessWithTimeout(p *process.Process, timeout time.Duration, killFunc func(*process.Process) error) error { - go func() { - if err := killFunc(p); err != nil { - trace.PrintError(err) - } - }() - for i := 0; i < int(timeout.Seconds()); i++ { - ok, err := process.PidExists(p.Pid) - if err == nil && !ok { - return nil - } - time.Sleep(1 * time.Second) - } - return killProcess(p, true) -} - -func killProcessRecursive(p *process.Process, force bool) (err error) { - // children processes - cps, err := p.Children() - if err != nil { - return killProcess(p, force) - } - - // iterate children processes - for _, cp := range cps { - if err := killProcessRecursive(cp, force); err != nil { - return err - } - } - - return nil -} - -func killProcess(p *process.Process, force bool) (err error) { - if force { - err = p.Kill() - } else { - err = p.Terminate() - } - if err != nil { - return trace.TraceError(err) - } - return nil -} - -func ConfigureCmdLogging(cmd *exec.Cmd, fn func(scanner *bufio.Scanner)) { - stdout, _ := (*cmd).StdoutPipe() - stderr, _ := (*cmd).StderrPipe() - scannerStdout := bufio.NewScanner(stdout) - scannerStderr := bufio.NewScanner(stderr) - go fn(scannerStdout) - go fn(scannerStderr) -} diff --git a/core/sys_exec/sys_exec_darwin.go b/core/sys_exec/sys_exec_darwin.go deleted file mode 100644 index b6db18c21..000000000 --- a/core/sys_exec/sys_exec_darwin.go +++ /dev/null @@ -1,30 +0,0 @@ -//go:build darwin -// +build darwin - -package sys_exec - -import ( - "errors" - "os/exec" - "strings" - "syscall" -) - -func BuildCmd(cmdStr string) (cmd *exec.Cmd, err error) { - if cmdStr == "" { - return nil, errors.New("command string is empty") - } - args := strings.Split(cmdStr, " ") - return exec.Command(args[0], args[1:]...), nil -} - -func SetPgid(cmd *exec.Cmd) { - if cmd == nil { - return - } - if cmd.SysProcAttr == nil { - cmd.SysProcAttr = &syscall.SysProcAttr{Setpgid: true} - } else { - cmd.SysProcAttr.Setpgid = true - } -} diff --git a/core/sys_exec/sys_exec_linux.go b/core/sys_exec/sys_exec_linux.go deleted file mode 100644 index 33af73e32..000000000 --- a/core/sys_exec/sys_exec_linux.go +++ /dev/null @@ -1,30 +0,0 @@ -//go:build linux -// +build linux - -package sys_exec - -import ( - "errors" - "os/exec" - "strings" - "syscall" -) - -func BuildCmd(cmdStr string) (cmd *exec.Cmd, err error) { - if cmdStr == "" { - return nil, errors.New("command string is empty") - } - args := strings.Split(cmdStr, " ") - return exec.Command(args[0], args[1:]...), nil -} - -func SetPgid(cmd *exec.Cmd) { - if cmd == nil { - return - } - if cmd.SysProcAttr == nil { - cmd.SysProcAttr = &syscall.SysProcAttr{Setpgid: true} - } else { - cmd.SysProcAttr.Setpgid = true - } -} diff --git a/core/sys_exec/sys_exec_windows.go b/core/sys_exec/sys_exec_windows.go deleted file mode 100644 index 1f1afd5a3..000000000 --- a/core/sys_exec/sys_exec_windows.go +++ /dev/null @@ -1,18 +0,0 @@ -//go:build windows -// +build windows - -package sys_exec - -import ( - "errors" - "os/exec" - "strings" -) - -func BuildCmd(cmdStr string) (cmd *exec.Cmd, err error) { - if cmdStr == "" { - return nil, errors.New("command string is empty") - } - args := strings.Split(cmdStr, " ") - return exec.Command(args[0], args[1:]...), nil -} diff --git a/core/system/service.go b/core/system/service.go index 891657bb5..5d9edf759 100644 --- a/core/system/service.go +++ b/core/system/service.go @@ -1,17 +1,18 @@ package system import ( + "errors" "github.com/crawlab-team/crawlab/core/interfaces" "github.com/crawlab-team/crawlab/core/models/models" "github.com/crawlab-team/crawlab/core/models/service" - mongo2 "github.com/crawlab-team/crawlab/db/mongo" + "github.com/crawlab-team/crawlab/core/utils" "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" + "go.mongodb.org/mongo-driver/mongo" + "sync" ) type Service struct { - col *mongo2.Col - modelSvc service.ModelService + interfaces.Logger } func (svc *Service) Init() (err error) { @@ -24,51 +25,42 @@ func (svc *Service) Init() (err error) { } func (svc *Service) initData() (err error) { - total, err := svc.col.Count(bson.M{ - "key": "site_title", - }) - if err != nil { - return err - } - if total > 0 { - return nil - } - - // data to initialize - settings := []models.Setting{ + // initial settings data + initData := []models.Setting{ { - Id: primitive.NewObjectID(), - Key: "site_title", + Key: "dependency", Value: bson.M{ - "customize_site_title": false, - "site_title": "", + "auto_install": true, }, }, } - var data []interface{} - for _, s := range settings { - data = append(data, s) - } - _, err = svc.col.InsertMany(data) - if err != nil { - return err + + for _, setting := range initData { + _, err := service.NewModelService[models.Setting]().GetOne(bson.M{"key": setting.Key}, nil) + if err != nil { + if !errors.Is(err, mongo.ErrNoDocuments) { + svc.Errorf("error getting setting: %v", err) + continue + } + + // not found, insert + _, err := service.NewModelService[models.Setting]().InsertOne(setting) + if err != nil { + svc.Errorf("error inserting setting: %v", err) + continue + } + } } + return nil } -func NewService() *Service { +func newSystemService() *Service { // service svc := &Service{ - col: mongo2.GetMongoCol(interfaces.ModelColNameSetting), + Logger: utils.NewLogger("SystemService"), } - // model service - modelSvc, err := service.GetService() - if err != nil { - panic(err) - } - svc.modelSvc = modelSvc - if err := svc.Init(); err != nil { panic(err) } @@ -77,10 +69,14 @@ func NewService() *Service { } var _service *Service +var _serviceOnce sync.Once -func GetService() *Service { +func GetSystemService() *Service { if _service == nil { - _service = NewService() + _service = newSystemService() } + _serviceOnce.Do(func() { + _service = newSystemService() + }) return _service } diff --git a/core/system/service_v2.go b/core/system/service_v2.go deleted file mode 100644 index a893c9d97..000000000 --- a/core/system/service_v2.go +++ /dev/null @@ -1,72 +0,0 @@ -package system - -import ( - "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/core/models/service" - "go.mongodb.org/mongo-driver/bson" - "sync" -) - -type ServiceV2 struct { -} - -func (svc *ServiceV2) Init() (err error) { - // initialize data - if err := svc.initData(); err != nil { - return err - } - - return nil -} - -func (svc *ServiceV2) initData() (err error) { - total, err := service.NewModelServiceV2[models.SettingV2]().Count(bson.M{ - "key": "site_title", - }) - if err != nil { - return err - } - if total > 0 { - return nil - } - - // data to initialize - settings := []models.SettingV2{ - { - Key: "site_title", - Value: bson.M{ - "customize_site_title": false, - "site_title": "", - }, - }, - } - _, err = service.NewModelServiceV2[models.SettingV2]().InsertMany(settings) - if err != nil { - return err - } - return nil -} - -func newSystemServiceV2() *ServiceV2 { - // service - svc := &ServiceV2{} - - if err := svc.Init(); err != nil { - panic(err) - } - - return svc -} - -var _serviceV2 *ServiceV2 -var _serviceV2Once = new(sync.Once) - -func GetSystemServiceV2() *ServiceV2 { - if _serviceV2 == nil { - _serviceV2 = newSystemServiceV2() - } - _serviceV2Once.Do(func() { - _serviceV2 = newSystemServiceV2() - }) - return _serviceV2 -} diff --git a/core/task/base.go b/core/task/base.go deleted file mode 100644 index 90de0ac22..000000000 --- a/core/task/base.go +++ /dev/null @@ -1,97 +0,0 @@ -package task - -import ( - "fmt" - "github.com/crawlab-team/crawlab/core/constants" - "github.com/crawlab-team/crawlab/core/container" - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/models/delegate" - "github.com/crawlab-team/crawlab/core/models/service" - "github.com/crawlab-team/crawlab/core/utils" - "github.com/crawlab-team/crawlab/trace" - "go.mongodb.org/mongo-driver/bson/primitive" - "go.mongodb.org/mongo-driver/mongo" -) - -type BaseService struct { - // dependencies - interfaces.WithConfigPath - modelSvc service.ModelService - - // internals - stopped bool -} - -func (svc *BaseService) Init() error { - // implement me - return nil -} - -func (svc *BaseService) Start() { - // implement me -} - -func (svc *BaseService) Wait() { - utils.DefaultWait() -} - -func (svc *BaseService) Stop() { - svc.stopped = true -} - -// SaveTask deprecated -func (svc *BaseService) SaveTask(t interfaces.Task, status string) (err error) { - // normalize status - if status == "" { - status = constants.TaskStatusPending - } - - // set task status - t.SetStatus(status) - - // attempt to get task from database - _, err = svc.modelSvc.GetTaskById(t.GetId()) - if err != nil { - // if task does not exist, add to database - if err == mongo.ErrNoDocuments { - if err := delegate.NewModelDelegate(t).Add(); err != nil { - return err - } - return nil - } else { - return err - } - } else { - // otherwise, update - if err := delegate.NewModelDelegate(t).Save(); err != nil { - return err - } - return nil - } -} - -func (svc *BaseService) IsStopped() (res bool) { - return svc.stopped -} - -func (svc *BaseService) GetQueue(nodeId primitive.ObjectID) (queue string) { - if nodeId.IsZero() { - return fmt.Sprintf("%s", constants.TaskListQueuePrefixPublic) - } else { - return fmt.Sprintf("%s:%s", constants.TaskListQueuePrefixNodes, nodeId.Hex()) - } -} - -func NewBaseService() (svc2 interfaces.TaskBaseService, err error) { - svc := &BaseService{} - - // dependency injection - if err := container.GetContainer().Invoke(func(cfgPath interfaces.WithConfigPath, modelSvc service.ModelService) { - svc.WithConfigPath = cfgPath - svc.modelSvc = modelSvc - }); err != nil { - return nil, trace.TraceError(err) - } - - return svc, nil -} diff --git a/core/task/handler/options.go b/core/task/handler/options.go deleted file mode 100644 index c2c035581..000000000 --- a/core/task/handler/options.go +++ /dev/null @@ -1,40 +0,0 @@ -package handler - -import ( - "github.com/crawlab-team/crawlab/core/interfaces" - "time" -) - -type Option func(svc interfaces.TaskHandlerService) - -func WithConfigPath(path string) Option { - return func(svc interfaces.TaskHandlerService) { - svc.SetConfigPath(path) - } -} - -func WithExitWatchDuration(duration time.Duration) Option { - return func(svc interfaces.TaskHandlerService) { - svc.SetExitWatchDuration(duration) - } -} - -func WithReportInterval(interval time.Duration) Option { - return func(svc interfaces.TaskHandlerService) { - svc.SetReportInterval(interval) - } -} - -func WithCancelTimeout(timeout time.Duration) Option { - return func(svc interfaces.TaskHandlerService) { - svc.SetCancelTimeout(timeout) - } -} - -type RunnerOption func(r interfaces.TaskRunner) - -func WithSubscribeTimeout(timeout time.Duration) RunnerOption { - return func(r interfaces.TaskRunner) { - r.SetSubscribeTimeout(timeout) - } -} diff --git a/core/task/handler/runner.go b/core/task/handler/runner.go index 32c7e5bff..ef61a2e0b 100644 --- a/core/task/handler/runner.go +++ b/core/task/handler/runner.go @@ -4,28 +4,8 @@ import ( "bufio" "context" "encoding/json" + "errors" "fmt" - "github.com/apex/log" - "github.com/cenkalti/backoff/v4" - "github.com/crawlab-team/crawlab/core/constants" - "github.com/crawlab-team/crawlab/core/container" - "github.com/crawlab-team/crawlab/core/entity" - "github.com/crawlab-team/crawlab/core/errors" - fs2 "github.com/crawlab-team/crawlab/core/fs" - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/models/client" - "github.com/crawlab-team/crawlab/core/models/delegate" - "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/core/sys_exec" - "github.com/crawlab-team/crawlab/core/utils" - "github.com/crawlab-team/crawlab/db/mongo" - grpc "github.com/crawlab-team/crawlab/grpc" - "github.com/crawlab-team/crawlab/trace" - "github.com/shirou/gopsutil/process" - "github.com/sirupsen/logrus" - "github.com/spf13/viper" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" "io" "net/http" "os" @@ -34,181 +14,235 @@ import ( "strings" "sync" "time" + + "github.com/crawlab-team/crawlab/core/dependency" + "github.com/crawlab-team/crawlab/core/fs" + "github.com/hashicorp/go-multierror" + + "github.com/crawlab-team/crawlab/core/models/models" + + "github.com/crawlab-team/crawlab/core/constants" + "github.com/crawlab-team/crawlab/core/entity" + client2 "github.com/crawlab-team/crawlab/core/grpc/client" + "github.com/crawlab-team/crawlab/core/interfaces" + "github.com/crawlab-team/crawlab/core/models/client" + "github.com/crawlab-team/crawlab/core/models/service" + "github.com/crawlab-team/crawlab/core/utils" + "github.com/crawlab-team/crawlab/grpc" + "go.mongodb.org/mongo-driver/bson" + "go.mongodb.org/mongo-driver/bson/primitive" ) +// newTaskRunner creates a new task runner instance with the specified task ID +// It initializes all necessary components and establishes required connections +func newTaskRunner(id primitive.ObjectID, svc *Service) (r *Runner, err error) { + // validate options + if id.IsZero() { + err = fmt.Errorf("invalid task id: %s", id.Hex()) + return nil, err + } + + // runner + r = &Runner{ + subscribeTimeout: 30 * time.Second, + bufferSize: 1024 * 1024, + svc: svc, + tid: id, + ch: make(chan constants.TaskSignal), + logBatchSize: 20, + Logger: utils.NewLogger("TaskRunner"), + } + + // multi error + var errs multierror.Error + + // task + r.t, err = svc.GetTaskById(id) + if err != nil { + errs.Errors = append(errs.Errors, err) + } else { + // spider + r.s, err = svc.GetSpiderById(r.t.SpiderId) + if err != nil { + errs.Errors = append(errs.Errors, err) + } else { + // task fs service + r.fsSvc = fs.NewFsService(filepath.Join(utils.GetWorkspace(), r.s.Id.Hex())) + } + } + + // Initialize context and done channel + r.ctx, r.cancel = context.WithCancel(context.Background()) + r.done = make(chan struct{}) + + // initialize task runner + if err := r.Init(); err != nil { + r.Errorf("error initializing task runner: %v", err) + errs.Errors = append(errs.Errors, err) + } + + return r, errs.ErrorOrNil() +} + +// Runner represents a task execution handler that manages the lifecycle of a running task type Runner struct { // dependencies - svc interfaces.TaskHandlerService // task handler service - fsSvc interfaces.FsServiceV2 // task fs service - hookSvc interfaces.TaskHookService // task hook service + svc *Service // task handler service + fsSvc interfaces.FsService // task fs service // settings - subscribeTimeout time.Duration - bufferSize int + subscribeTimeout time.Duration // maximum time to wait for task subscription + bufferSize int // buffer size for reading process output // internals - cmd *exec.Cmd // process command instance - pid int // process id - tid primitive.ObjectID // task id - t interfaces.Task // task model.Task - s interfaces.Spider // spider model.Spider - ch chan constants.TaskSignal // channel to communicate between Service and Runner - err error // standard process error - envs []models.Env // environment variables - cwd string // working directory - c interfaces.GrpcClient // grpc client - sub grpc.TaskService_SubscribeClient // grpc task service stream client - - // log internals - scannerStdout *bufio.Reader - scannerStderr *bufio.Reader - logBatchSize int + cmd *exec.Cmd // process command instance + pid int // process id + tid primitive.ObjectID // task id + t *models.Task // task model instance + s *models.Spider // spider model instance + ch chan constants.TaskSignal // channel for task status communication + err error // captures any process execution errors + cwd string // current working directory for task + conn grpc.TaskService_ConnectClient // gRPC stream connection for task service + interfaces.Logger + + // log handling + readerStdout *bufio.Reader // reader for process stdout + readerStderr *bufio.Reader // reader for process stderr + logBatchSize int // number of log lines to batch before sending + + // IPC (Inter-Process Communication) + stdinPipe io.WriteCloser // pipe for writing to child process + stdoutPipe io.ReadCloser // pipe for reading from child process + ipcChan chan entity.IPCMessage // channel for sending IPC messages + ipcHandler func(entity.IPCMessage) // callback for handling received IPC messages + + // goroutine management + ctx context.Context // context for controlling goroutine lifecycle + cancel context.CancelFunc // function to cancel the context + done chan struct{} // channel to signal completion + wg sync.WaitGroup // wait group for goroutine synchronization } +// Init initializes the task runner by updating the task status and establishing gRPC connections func (r *Runner) Init() (err error) { + // wait for grpc client ready + client2.GetGrpcClient().WaitForReady() + // update task if err := r.updateTask("", nil); err != nil { return err } - // start grpc client - if !r.c.IsStarted() { - r.c.Start() + // grpc task service stream client + if err := r.initConnection(); err != nil { + return err } - // working directory - workspacePath := viper.GetString("workspace") - r.cwd = filepath.Join(workspacePath, r.s.GetId().Hex()) + return nil +} - // sync files from master - if !utils.IsMaster() { - if err := r.syncFiles(); err != nil { - return err - } - } +// Run executes the task and manages its lifecycle, including file synchronization, process execution, +// and status monitoring. Returns an error if the task execution fails. +func (r *Runner) Run() (err error) { + // log task started + r.Infof("task[%s] started", r.tid.Hex()) - // grpc task service stream client - if err := r.initSub(); err != nil { + // update task status (processing) + if err := r.updateTask(constants.TaskStatusRunning, nil); err != nil { return err } - // pre actions - if r.hookSvc != nil { - if err := r.hookSvc.PreActions(r.t, r.s, r.fsSvc, r.svc); err != nil { - return err + // configure working directory + r.configureCwd() + + // sync files worker nodes + if !utils.IsMaster() { + if err := r.syncFiles(); err != nil { + return r.updateTask(constants.TaskStatusError, err) } } - return nil -} - -func (r *Runner) Run() (err error) { - // log task started - log.Infof("task[%s] started", r.tid.Hex()) + // install dependencies + if err := r.installDependenciesIfAvailable(); err != nil { + r.Warnf("error installing dependencies: %v", err) + } // configure cmd - r.configureCmd() + err = r.configureCmd() + if err != nil { + return r.updateTask(constants.TaskStatusError, err) + } // configure environment variables r.configureEnv() - // configure logging - r.configureLogging() - // start process if err := r.cmd.Start(); err != nil { return r.updateTask(constants.TaskStatusError, err) } - // start logging - go r.startLogging() - // process id if r.cmd.Process == nil { return r.updateTask(constants.TaskStatusError, constants.ErrNotExists) } r.pid = r.cmd.Process.Pid - r.t.SetPid(r.pid) - - // update task status (processing) - if err := r.updateTask(constants.TaskStatusRunning, nil); err != nil { - return err - } - - // wait for process to finish - go r.wait() + r.t.Pid = r.pid // start health check go r.startHealthCheck() - // declare task status - status := "" + // Start IPC reader + go r.startIPCReader() - // wait for signal - signal := <-r.ch - switch signal { - case constants.TaskSignalFinish: - err = nil - status = constants.TaskStatusFinished - case constants.TaskSignalCancel: - err = constants.ErrTaskCancelled - status = constants.TaskStatusCancelled - case constants.TaskSignalError: - err = r.err - status = constants.TaskStatusError - case constants.TaskSignalLost: - err = constants.ErrTaskLost - status = constants.TaskStatusError - default: - err = constants.ErrInvalidSignal - status = constants.TaskStatusError - } + // Start IPC handler + go r.handleIPC() - // update task status - if err := r.updateTask(status, err); err != nil { - return err - } + // Ensure cleanup when Run() exits + defer func() { + _ = r.conn.CloseSend() // Close gRPC connection + r.cancel() // Cancel context to stop all goroutines + r.wg.Wait() // Wait for all goroutines to finish + close(r.done) // Signal that everything is done + close(r.ipcChan) // Close IPC channel + }() - // post actions - if r.hookSvc != nil { - if err := r.hookSvc.PostActions(r.t, r.s, r.fsSvc, r.svc); err != nil { - return err - } - } - - return err + // wait for process to finish + return r.wait() } -func (r *Runner) Cancel() (err error) { - // kill process - opts := &sys_exec.KillProcessOptions{ - Timeout: r.svc.GetCancelTimeout(), - Force: true, - } - if err := sys_exec.KillProcess(r.cmd, opts); err != nil { +// Cancel terminates the running task. If force is true, the process will be killed immediately +// without waiting for graceful shutdown. +func (r *Runner) Cancel(force bool) (err error) { + // Signal goroutines to stop + r.cancel() + + // Kill process + err = utils.KillProcess(r.cmd, force) + if err != nil { + r.Errorf("kill process error: %v", err) return err } + r.Debugf("attempt to kill process[%d]", r.pid) - // make sure the process does not exist - op := func() error { - if exists, _ := process.PidExists(int32(r.pid)); exists { - return errors.ErrorTaskProcessStillExists - } - return nil - } - ctx, cancel := context.WithTimeout(context.Background(), r.svc.GetExitWatchDuration()) + // Create a context with timeout + ctx, cancel := context.WithTimeout(context.Background(), r.svc.GetCancelTimeout()) defer cancel() - b := backoff.WithContext(backoff.NewConstantBackOff(1*time.Second), ctx) - if err := backoff.Retry(op, b); err != nil { - return trace.TraceError(errors.ErrorTaskUnableToCancel) - } - return nil -} + // Wait for process to be killed with context + ticker := time.NewTicker(100 * time.Millisecond) + defer ticker.Stop() -// CleanUp clean up task runner -func (r *Runner) CleanUp() (err error) { - return nil + for { + select { + case <-ctx.Done(): + return fmt.Errorf("timeout waiting for task to stop") + case <-ticker.C: + if !utils.ProcessIdExists(r.pid) { + return nil + } + } + } } func (r *Runner) SetSubscribeTimeout(timeout time.Duration) { @@ -219,141 +253,220 @@ func (r *Runner) GetTaskId() (id primitive.ObjectID) { return r.tid } -func (r *Runner) configureCmd() { +// configureCmd builds and configures the command to be executed, including setting up IPC pipes +// and processing command parameters +func (r *Runner) configureCmd() (err error) { var cmdStr string - // customized spider - if r.t.GetCmd() == "" { - cmdStr = r.s.GetCmd() + // command + if r.t.Cmd == "" { + cmdStr = r.s.Cmd } else { - cmdStr = r.t.GetCmd() + cmdStr = r.t.Cmd } // parameters - if r.t.GetParam() != "" { - cmdStr += " " + r.t.GetParam() - } else if r.s.GetParam() != "" { - cmdStr += " " + r.s.GetParam() + if r.t.Param != "" { + cmdStr += " " + r.t.Param + } else if r.s.Param != "" { + cmdStr += " " + r.s.Param } // get cmd instance - r.cmd, _ = sys_exec.BuildCmd(cmdStr) + r.cmd, err = utils.BuildCmd(cmdStr) + if err != nil { + r.Errorf("error building command: %v", err) + return err + } // set working directory r.cmd.Dir = r.cwd - // configure pgid to allow killing sub processes - //sys_exec.SetPgid(r.cmd) -} - -func (r *Runner) configureLogging() { - // set stdout reader - stdout, _ := r.cmd.StdoutPipe() - r.scannerStdout = bufio.NewReaderSize(stdout, r.bufferSize) + // Configure pipes for IPC and logs + r.stdinPipe, err = r.cmd.StdinPipe() + if err != nil { + r.Errorf("error creating stdin pipe: %v", err) + return err + } - // set stderr reader - stderr, _ := r.cmd.StderrPipe() - r.scannerStderr = bufio.NewReaderSize(stderr, r.bufferSize) -} + // Add stdout pipe for IPC and logs + r.stdoutPipe, err = r.cmd.StdoutPipe() + if err != nil { + r.Errorf("error creating stdout pipe: %v", err) + return err + } -func (r *Runner) startLogging() { - // start reading stdout - go r.startLoggingReaderStdout() + // Add stderr pipe for error logs + stderrPipe, err := r.cmd.StderrPipe() + if err != nil { + r.Errorf("error creating stderr pipe: %v", err) + return err + } - // start reading stderr - go r.startLoggingReaderStderr() -} + // Create buffered readers + r.readerStdout = bufio.NewReader(r.stdoutPipe) + r.readerStderr = bufio.NewReader(stderrPipe) -func (r *Runner) startLoggingReaderStdout() { - for { - line, err := r.scannerStdout.ReadString(byte('\n')) - if err != nil { - break - } - line = strings.TrimSuffix(line, "\n") - r.writeLogLines([]string{line}) - } -} + // Initialize IPC channel + r.ipcChan = make(chan entity.IPCMessage) -func (r *Runner) startLoggingReaderStderr() { - for { - line, err := r.scannerStderr.ReadString(byte('\n')) - if err != nil { - break - } - line = strings.TrimSuffix(line, "\n") - r.writeLogLines([]string{line}) - } + return nil } +// startHealthCheck periodically verifies that the process is still running +// If the process disappears unexpectedly, it signals a task lost condition func (r *Runner) startHealthCheck() { + r.wg.Add(1) + defer r.wg.Done() + if r.cmd.ProcessState == nil || r.cmd.ProcessState.Exited() { return } + + ticker := time.NewTicker(1 * time.Second) + defer ticker.Stop() + for { - exists, _ := process.PidExists(int32(r.pid)) - if !exists { - // process lost - r.ch <- constants.TaskSignalLost + select { + case <-r.ctx.Done(): return + case <-ticker.C: + if !utils.ProcessIdExists(r.pid) { + // process lost + r.ch <- constants.TaskSignalLost + return + } } - time.Sleep(1 * time.Second) } } -func (r *Runner) configureEnv() { - // 默认把Node.js的全局node_modules加入环境变量 +// configurePythonPath sets up the Python environment paths, handling both pyenv and default installations +func (r *Runner) configurePythonPath() { + // Configure global node_modules path + pyenvRoot := utils.GetPyenvPath() + pyenvShimsPath := pyenvRoot + "/shims" + pyenvBinPath := pyenvRoot + "/bin" + + // Configure global pyenv path + _ = os.Setenv("PYENV_ROOT", pyenvRoot) + _ = os.Setenv("PATH", pyenvShimsPath+":"+os.Getenv("PATH")) + _ = os.Setenv("PATH", pyenvBinPath+":"+os.Getenv("PATH")) +} + +// configureNodePath sets up the Node.js environment paths, handling both nvm and default installations +func (r *Runner) configureNodePath() { + // Configure nvm-based Node.js paths envPath := os.Getenv("PATH") - nodePath := "/usr/lib/node_modules" + + // Configure global node_modules path + nodePath := utils.GetNodeModulesPath() if !strings.Contains(envPath, nodePath) { _ = os.Setenv("PATH", nodePath+":"+envPath) } _ = os.Setenv("NODE_PATH", nodePath) +} - // default envs - r.cmd.Env = append(os.Environ(), "CRAWLAB_TASK_ID="+r.tid.Hex()) - if viper.GetString("grpc.address") != "" { - r.cmd.Env = append(r.cmd.Env, "CRAWLAB_GRPC_ADDRESS="+viper.GetString("grpc.address")) - } - if viper.GetString("grpc.authKey") != "" { - r.cmd.Env = append(r.cmd.Env, "CRAWLAB_GRPC_AUTH_KEY="+viper.GetString("grpc.authKey")) - } else { - r.cmd.Env = append(r.cmd.Env, "CRAWLAB_GRPC_AUTH_KEY="+constants.DefaultGrpcAuthKey) +func (r *Runner) configureGoPath() { + // Configure global go path + goPath := utils.GetGoPath() + if goPath != "" { + _ = os.Setenv("GOPATH", goPath) } +} - // global environment variables - envs, err := r.svc.GetModelEnvironmentService().GetEnvironmentList(nil, nil) +// configureEnv sets up the environment variables for the task process, including: +// - Node.js paths +// - Crawlab-specific variables +// - Global environment variables from the system +func (r *Runner) configureEnv() { + // Configure Python path + r.configurePythonPath() + + // Configure Node.js path + r.configureNodePath() + + // Configure Go path + r.configureGoPath() + + // Default envs + r.cmd.Env = os.Environ() + r.cmd.Env = append(r.cmd.Env, "CRAWLAB_TASK_ID="+r.tid.Hex()) + + // Global environment variables + envs, err := client.NewModelService[models.Environment]().GetMany(nil, nil) if err != nil { - trace.PrintError(err) + r.Errorf("error getting environment variables: %v", err) return } for _, env := range envs { - r.cmd.Env = append(r.cmd.Env, env.GetKey()+"="+env.GetValue()) + r.cmd.Env = append(r.cmd.Env, env.Key+"="+env.Value) + } + + // Add environment variable for child processes to identify they're running under Crawlab + r.cmd.Env = append(r.cmd.Env, "CRAWLAB_PARENT_PID="+fmt.Sprint(os.Getpid())) +} + +func (r *Runner) createHttpRequest(method, path string) (*http.Response, error) { + // Normalize path + if strings.HasPrefix(path, "/") { + path = path[1:] } + + // Construct master URL + var id string + if r.s.GitId.IsZero() { + id = r.s.Id.Hex() + } else { + id = r.s.GitId.Hex() + } + url := fmt.Sprintf("%s/sync/%s/%s", utils.GetApiEndpoint(), id, path) + + // Create and execute request + req, err := http.NewRequest(method, url, nil) + if err != nil { + return nil, fmt.Errorf("error creating request: %v", err) + } + + for k, v := range r.getHttpRequestHeaders() { + req.Header.Set(k, v) + } + + return http.DefaultClient.Do(req) } +// syncFiles synchronizes files between master and worker nodes: +// 1. Gets file list from master +// 2. Compares with local files +// 3. Downloads new/modified files +// 4. Deletes files that no longer exist on master func (r *Runner) syncFiles() (err error) { - masterURL := fmt.Sprintf("%s/sync/%s", viper.GetString("api.endpoint"), r.s.GetId().Hex()) - workspacePath := viper.GetString("workspace") - workerDir := filepath.Join(workspacePath, r.s.GetId().Hex()) + r.Infof("starting file synchronization for spider: %s", r.s.Id.Hex()) + + workingDir := "" + if !r.s.GitId.IsZero() { + workingDir = r.s.GitRootPath + r.Debugf("using git root path: %s", workingDir) + } // get file list from master - resp, err := http.Get(masterURL + "/scan") + r.Infof("fetching file list from master node") + resp, err := r.createHttpRequest("GET", "/scan?path="+workingDir) if err != nil { - fmt.Println("Error getting file list from master:", err) - return trace.TraceError(err) + r.Errorf("error getting file list from master: %v", err) + return err } defer resp.Body.Close() body, err := io.ReadAll(resp.Body) if err != nil { - fmt.Println("Error reading response body:", err) - return trace.TraceError(err) + r.Errorf("error reading response body: %v", err) + return err } var masterFiles map[string]entity.FsFileInfo err = json.Unmarshal(body, &masterFiles) if err != nil { - fmt.Println("Error unmarshaling JSON:", err) - return trace.TraceError(err) + r.Errorf("error unmarshaling JSON for URL: %s", resp.Request.URL.String()) + r.Errorf("error details: %v", err) + return err } // create a map for master files @@ -362,225 +475,349 @@ func (r *Runner) syncFiles() (err error) { masterFilesMap[file.Path] = file } - // create worker directory if not exists - if _, err := os.Stat(workerDir); os.IsNotExist(err) { - if err := os.MkdirAll(workerDir, os.ModePerm); err != nil { - fmt.Println("Error creating worker directory:", err) - return trace.TraceError(err) + // create working directory if not exists + if _, err := os.Stat(r.cwd); os.IsNotExist(err) { + if err := os.MkdirAll(r.cwd, os.ModePerm); err != nil { + r.Errorf("error creating worker directory: %v", err) + return err } } // get file list from worker - workerFiles, err := utils.ScanDirectory(workerDir) + workerFiles, err := utils.ScanDirectory(r.cwd) if err != nil { - fmt.Println("Error scanning worker directory:", err) - return trace.TraceError(err) + r.Errorf("error scanning worker directory: %v", err) + return err } - // set up wait group and error channel - var wg sync.WaitGroup - errCh := make(chan error, 1) - // delete files that are deleted on master node for path, workerFile := range workerFiles { if _, exists := masterFilesMap[path]; !exists { - fmt.Println("Deleting file:", path) + r.Infof("deleting file: %s", path) err := os.Remove(workerFile.FullPath) if err != nil { - fmt.Println("Error deleting file:", err) + r.Errorf("error deleting file: %v", err) } } } + // set up wait group and error channel + var wg sync.WaitGroup + pool := make(chan struct{}, 10) + // download files that are new or modified on master node for path, masterFile := range masterFilesMap { workerFile, exists := workerFiles[path] if !exists || masterFile.Hash != workerFile.Hash { wg.Add(1) - go func(path string, masterFile entity.FsFileInfo) { + + // acquire token + pool <- struct{}{} + + // start goroutine to synchronize file or directory + go func(path string, masterFile *entity.FsFileInfo) { defer wg.Done() - logrus.Infof("File needs to be synchronized: %s", path) - err := r.downloadFile(masterURL+"/download?path="+path, filepath.Join(workerDir, path)) - if err != nil { - logrus.Errorf("Error downloading file: %v", err) - select { - case errCh <- err: - default: + + if masterFile.IsDir { + r.Infof("directory needs to be synchronized: %s", path) + _err := os.MkdirAll(filepath.Join(r.cwd, path), masterFile.Mode) + if _err != nil { + r.Errorf("error creating directory: %v", _err) + err = errors.Join(err, _err) + } + } else { + r.Infof("file needs to be synchronized: %s", path) + _err := r.downloadFile(path, filepath.Join(r.cwd, path), masterFile) + if _err != nil { + r.Errorf("error downloading file: %v", _err) + err = errors.Join(err, _err) } } - }(path, masterFile) + + // release token + <-pool + + }(path, &masterFile) } } + // wait for all files and directories to be synchronized wg.Wait() - close(errCh) - if err := <-errCh; err != nil { - return err - } - return nil + r.Infof("file synchronization completed successfully") + return err } -func (r *Runner) downloadFile(url string, filePath string) error { - resp, err := http.Get(url) +// downloadFile downloads a file from the master node and saves it to the local file system +func (r *Runner) downloadFile(path string, filePath string, fileInfo *entity.FsFileInfo) error { + r.Debugf("downloading file: %s -> %s", path, filePath) + + resp, err := r.createHttpRequest("GET", "/download?path="+path) if err != nil { + r.Errorf("error getting file response: %v", err) return err } + if resp.StatusCode != http.StatusOK { + r.Errorf("error downloading file: %s", resp.Status) + return errors.New(resp.Status) + } defer resp.Body.Close() - out, err := os.Create(filePath) + // create directory if not exists + dirPath := filepath.Dir(filePath) + utils.Exists(dirPath) + err = os.MkdirAll(dirPath, os.ModePerm) + if err != nil { + r.Errorf("error creating directory: %v", err) + return err + } + + // create local file + out, err := os.OpenFile(filePath, os.O_RDWR|os.O_CREATE|os.O_TRUNC, fileInfo.Mode) if err != nil { + r.Errorf("error creating file: %v", err) return err } defer out.Close() + // copy file content to local file _, err = io.Copy(out, resp.Body) - return err + if err != nil { + r.Errorf("error copying file: %v", err) + return err + } + + r.Debugf("successfully downloaded file: %s (size: %d bytes)", path, fileInfo.FileSize) + return nil } -// wait for process to finish and send task signal (constants.TaskSignal) -// to task runner's channel (Runner.ch) according to exit code -func (r *Runner) wait() { - // wait for process to finish - if err := r.cmd.Wait(); err != nil { - exitError, ok := err.(*exec.ExitError) - if !ok { +// getHttpRequestHeaders returns the headers for HTTP requests to the master node +func (r *Runner) getHttpRequestHeaders() (headers map[string]string) { + headers = make(map[string]string) + headers["Authorization"] = utils.GetAuthKey() + return headers +} + +// wait monitors the process execution and sends appropriate signals based on the exit status: +// - TaskSignalFinish for successful completion +// - TaskSignalCancel for cancellation +// - TaskSignalError for execution errors +func (r *Runner) wait() (err error) { + // start a goroutine to wait for process to finish + go func() { + r.Debugf("waiting for process[%d] to finish", r.pid) + err = r.cmd.Wait() + if err != nil { + var exitError *exec.ExitError + if !errors.As(err, &exitError) { + r.ch <- constants.TaskSignalError + r.Debugf("process[%d] exited with error: %v", r.pid, err) + return + } + exitCode := exitError.ExitCode() + if exitCode == -1 { + // cancel error + r.ch <- constants.TaskSignalCancel + r.Debugf("process[%d] cancelled", r.pid) + return + } + + // standard error + r.err = err r.ch <- constants.TaskSignalError - return - } - exitCode := exitError.ExitCode() - if exitCode == -1 { - // cancel error - r.ch <- constants.TaskSignalCancel + r.Debugf("process[%d] exited with error: %v", r.pid, err) return } - // standard error - r.err = err - r.ch <- constants.TaskSignalError - return + // success + r.ch <- constants.TaskSignalFinish + r.Debugf("process[%d] exited successfully", r.pid) + }() + + // declare task status + status := "" + + // wait for signal + signal := <-r.ch + switch signal { + case constants.TaskSignalFinish: + err = nil + status = constants.TaskStatusFinished + case constants.TaskSignalCancel: + err = constants.ErrTaskCancelled + status = constants.TaskStatusCancelled + case constants.TaskSignalError: + err = r.err + status = constants.TaskStatusError + case constants.TaskSignalLost: + err = constants.ErrTaskLost + status = constants.TaskStatusError + default: + err = constants.ErrInvalidSignal + status = constants.TaskStatusError } - // success - r.ch <- constants.TaskSignalFinish + // update task status + if err := r.updateTask(status, err); err != nil { + r.Errorf("error updating task status: %v", err) + return err + } + + // log according to status + switch status { + case constants.TaskStatusFinished: + r.Infof("task[%s] finished", r.tid.Hex()) + case constants.TaskStatusCancelled: + r.Infof("task[%s] cancelled", r.tid.Hex()) + case constants.TaskStatusError: + r.Errorf("task[%s] error: %v", r.tid.Hex(), err) + default: + r.Errorf("invalid task status: %s", status) + } + + return nil } -// updateTask update and get updated info of task (Runner.t) +// updateTask updates the task status and related statistics in the database +// If running on a worker node, updates are sent to the master func (r *Runner) updateTask(status string, e error) (err error) { + if status != "" { + r.Debugf("updating task status to: %s", status) + } + if r.t != nil && status != "" { // update task status - r.t.SetStatus(status) + r.t.Status = status if e != nil { - r.t.SetError(e.Error()) + r.t.Error = e.Error() } - if r.svc.GetNodeConfigService().IsMaster() { - if err := delegate.NewModelDelegate(r.t).Save(); err != nil { + if utils.IsMaster() { + err = service.NewModelService[models.Task]().ReplaceById(r.t.Id, *r.t) + if err != nil { return err } } else { - if err := client.NewModelDelegate(r.t, client.WithDelegateConfigPath(r.svc.GetConfigPath())).Save(); err != nil { + err = client.NewModelService[models.Task]().ReplaceById(r.t.Id, *r.t) + if err != nil { return err } } + // update stats + r._updateTaskStat(status) + r._updateSpiderStat(status) + // send notification go r.sendNotification() - - // update stats - go func() { - r._updateTaskStat(status) - r._updateSpiderStat(status) - }() } // get task + r.Debugf("fetching updated task from database") r.t, err = r.svc.GetTaskById(r.tid) if err != nil { + r.Errorf("failed to get updated task: %v", err) return err } return nil } -func (r *Runner) initSub() (err error) { - r.sub, err = r.c.GetTaskClient().Subscribe(context.Background()) +// initConnection establishes a gRPC connection to the task service +func (r *Runner) initConnection() (err error) { + r.conn, err = client2.GetGrpcClient().TaskClient.Connect(context.Background()) if err != nil { - return trace.TraceError(err) + r.Errorf("error connecting to task service: %v", err) + return err } return nil } +// writeLogLines marshals log lines to JSON and sends them to the task service func (r *Runner) writeLogLines(lines []string) { - data, err := json.Marshal(&entity.StreamMessageTaskData{ - TaskId: r.tid, - Logs: lines, - }) + linesBytes, err := json.Marshal(lines) if err != nil { - trace.PrintError(err) + r.Errorf("error marshaling log lines: %v", err) return } - msg := &grpc.StreamMessage{ - Code: grpc.StreamMessageCode_INSERT_LOGS, - Data: data, + msg := &grpc.TaskServiceConnectRequest{ + Code: grpc.TaskServiceConnectCode_INSERT_LOGS, + TaskId: r.tid.Hex(), + Data: linesBytes, } - if err := r.sub.Send(msg); err != nil { - trace.PrintError(err) + if err := r.conn.Send(msg); err != nil { + r.Errorf("error sending log lines: %v", err) return } } +// _updateTaskStat updates task statistics based on the current status: +// - For running tasks: sets start time and wait duration +// - For completed tasks: sets end time and calculates durations func (r *Runner) _updateTaskStat(status string) { - ts, err := r.svc.GetModelTaskStatService().GetTaskStatById(r.tid) + if status != "" { + r.Debugf("updating task statistics for status: %s", status) + } + + ts, err := client.NewModelService[models.TaskStat]().GetById(r.tid) if err != nil { - trace.PrintError(err) + r.Errorf("error getting task stat: %v", err) return } + + r.Debugf("current task statistics - wait_duration: %dms, runtime_duration: %dms", ts.WaitDuration, ts.RuntimeDuration) + switch status { case constants.TaskStatusPending: // do nothing case constants.TaskStatusRunning: - ts.SetStartTs(time.Now()) - ts.SetWaitDuration(ts.GetStartTs().Sub(ts.GetCreateTs()).Milliseconds()) + ts.StartTs = time.Now() + ts.WaitDuration = ts.StartTs.Sub(ts.CreatedAt).Milliseconds() case constants.TaskStatusFinished, constants.TaskStatusError, constants.TaskStatusCancelled: - ts.SetEndTs(time.Now()) - ts.SetRuntimeDuration(ts.GetEndTs().Sub(ts.GetStartTs()).Milliseconds()) - ts.SetTotalDuration(ts.GetEndTs().Sub(ts.GetCreateTs()).Milliseconds()) + if ts.StartTs.IsZero() { + ts.StartTs = time.Now() + ts.WaitDuration = ts.StartTs.Sub(ts.CreatedAt).Milliseconds() + } + ts.EndTs = time.Now() + ts.RuntimeDuration = ts.EndTs.Sub(ts.StartTs).Milliseconds() + ts.TotalDuration = ts.EndTs.Sub(ts.CreatedAt).Milliseconds() } - if r.svc.GetNodeConfigService().IsMaster() { - if err := delegate.NewModelDelegate(ts).Save(); err != nil { - trace.PrintError(err) + if utils.IsMaster() { + err = service.NewModelService[models.TaskStat]().ReplaceById(ts.Id, *ts) + if err != nil { + r.Errorf("error updating task stat: %v", err) return } } else { - if err := client.NewModelDelegate(ts, client.WithDelegateConfigPath(r.svc.GetConfigPath())).Save(); err != nil { - trace.PrintError(err) + err = client.NewModelService[models.TaskStat]().ReplaceById(ts.Id, *ts) + if err != nil { + r.Errorf("error updating task stat: %v", err) return } } } +// sendNotification sends a notification to the task service func (r *Runner) sendNotification() { - data, err := json.Marshal(r.t) - if err != nil { - trace.PrintError(err) - return - } - req := &grpc.Request{ + req := &grpc.TaskServiceSendNotificationRequest{ NodeKey: r.svc.GetNodeConfigService().GetNodeKey(), - Data: data, + TaskId: r.tid.Hex(), } - _, err = r.c.GetTaskClient().SendNotification(context.Background(), req) + _, err := client2.GetGrpcClient().TaskClient.SendNotification(context.Background(), req) if err != nil { - trace.PrintError(err) + r.Errorf("error sending notification: %v", err) return } } +// _updateSpiderStat updates spider statistics based on task completion: +// - Updates last task ID +// - Increments task counts +// - Updates duration metrics func (r *Runner) _updateSpiderStat(status string) { // task stat - ts, err := r.svc.GetModelTaskStatService().GetTaskStatById(r.tid) + ts, err := client.NewModelService[models.TaskStat]().GetById(r.tid) if err != nil { - trace.PrintError(err) + r.Errorf("error getting task stat: %v", err) return } @@ -593,99 +830,367 @@ func (r *Runner) _updateSpiderStat(status string) { "last_task_id": r.tid, // last task id }, "$inc": bson.M{ - "tasks": 1, // task count - "wait_duration": ts.GetWaitDuration(), // wait duration + "tasks": 1, // task count + "wait_duration": ts.WaitDuration, // wait duration }, } case constants.TaskStatusFinished, constants.TaskStatusError, constants.TaskStatusCancelled: update = bson.M{ + "$set": bson.M{ + "last_task_id": r.tid, // last task id + }, "$inc": bson.M{ - "results": ts.GetResultCount(), // results - "runtime_duration": ts.GetRuntimeDuration() / 1000, // runtime duration - "total_duration": ts.GetTotalDuration() / 1000, // total duration + "results": ts.ResultCount, // results + "runtime_duration": ts.RuntimeDuration / 1000, // runtime duration + "total_duration": ts.TotalDuration / 1000, // total duration }, } default: - trace.PrintError(errors.ErrorTaskInvalidType) + r.Errorf("Invalid task status: %s", status) return } // perform update - if r.svc.GetNodeConfigService().IsMaster() { - if err := mongo.GetMongoCol(interfaces.ModelColNameSpiderStat).UpdateId(r.s.GetId(), update); err != nil { - trace.PrintError(err) + if utils.IsMaster() { + err = service.NewModelService[models.SpiderStat]().UpdateById(r.s.Id, update) + if err != nil { + r.Errorf("error updating spider stat: %v", err) return } } else { - modelSvc, err := client.NewBaseServiceDelegate( - client.WithBaseServiceModelId(interfaces.ModelIdSpiderStat), - client.WithBaseServiceConfigPath(r.svc.GetConfigPath()), - ) + err = client.NewModelService[models.SpiderStat]().UpdateById(r.s.Id, update) if err != nil { - trace.PrintError(err) + r.Errorf("error updating spider stat: %v", err) return } - if err := modelSvc.UpdateById(r.s.GetId(), update); err != nil { - trace.PrintError(err) + } +} + +// configureCwd sets the working directory for the task based on the spider's configuration +func (r *Runner) configureCwd() { + workspacePath := utils.GetWorkspace() + if r.s.GitId.IsZero() { + // not git + r.cwd = filepath.Join(workspacePath, r.s.Id.Hex()) + } else { + // git + r.cwd = filepath.Join(workspacePath, r.s.GitId.Hex(), r.s.GitRootPath) + } +} + +// handleIPC processes incoming IPC messages from the child process +// Messages are converted to JSON and written to the child process's stdin +func (r *Runner) handleIPC() { + for msg := range r.ipcChan { + // Convert message to JSON + jsonData, err := json.Marshal(msg) + if err != nil { + r.Errorf("error marshaling IPC message: %v", err) + continue + } + + // Write to child process's stdin + _, err = fmt.Fprintln(r.stdinPipe, string(jsonData)) + if err != nil { + r.Errorf("error writing to child process: %v", err) + } + } +} + +// SetIPCHandler sets the handler for incoming IPC messages +func (r *Runner) SetIPCHandler(handler func(entity.IPCMessage)) { + r.ipcHandler = handler +} + +// startIPCReader continuously reads IPC messages from the child process's stdout +// Messages are parsed and either handled by the IPC handler or written to logs +func (r *Runner) startIPCReader() { + r.wg.Add(2) // Add 2 to wait group for both stdout and stderr readers + + // Start stdout reader + go func() { + defer r.wg.Done() + r.readOutput(r.readerStdout, true) // true for stdout + }() + + // Start stderr reader + go func() { + defer r.wg.Done() + r.readOutput(r.readerStderr, false) // false for stderr + }() +} + +func (r *Runner) readOutput(reader *bufio.Reader, isStdout bool) { + scanner := bufio.NewScanner(reader) + for { + select { + case <-r.ctx.Done(): + // Context cancelled, stop reading return + default: + // Scan the next line + if !scanner.Scan() { + return + } + + // Get the line + line := scanner.Text() + + // Trim the line + line = strings.TrimRight(line, "\n\r") + + // For stdout, try to parse as IPC message first + if isStdout { + var ipcMsg entity.IPCMessage + if err := json.Unmarshal([]byte(line), &ipcMsg); err == nil && ipcMsg.IPC { + if r.ipcHandler != nil { + r.ipcHandler(ipcMsg) + } else { + // Default handler (insert data) + if ipcMsg.Type == "" || ipcMsg.Type == constants.IPCMessageData { + r.handleIPCInsertDataMessage(ipcMsg) + } else { + r.Warnf("no IPC handler set for message: %v", ipcMsg) + } + } + continue + } + } + + // If not an IPC message or from stderr, treat as log + r.writeLogLines([]string{line}) } } +} + +// handleIPCInsertDataMessage converts the IPC message payload to JSON and sends it to the master node +func (r *Runner) handleIPCInsertDataMessage(ipcMsg entity.IPCMessage) { + if ipcMsg.Payload == nil { + r.Errorf("empty payload in IPC message") + return + } + + // Convert payload to data to be inserted + var records []map[string]interface{} + + switch payload := ipcMsg.Payload.(type) { + case []interface{}: // Handle array of objects + records = make([]map[string]interface{}, 0, len(payload)) + for i, item := range payload { + if itemMap, ok := item.(map[string]interface{}); ok { + records = append(records, itemMap) + } else { + r.Errorf("invalid record at index %d: %v", i, item) + continue + } + } + case []map[string]interface{}: // Handle direct array of maps + records = payload + case map[string]interface{}: // Handle single object + records = []map[string]interface{}{payload} + case interface{}: // Handle generic interface + if itemMap, ok := payload.(map[string]interface{}); ok { + records = []map[string]interface{}{itemMap} + } else { + r.Errorf("invalid payload type: %T", payload) + return + } + default: + r.Errorf("unsupported payload type: %T, value: %v", payload, ipcMsg.Payload) + return + } + // Validate records + if len(records) == 0 { + r.Warnf("no valid records to insert") + return + } + + // Marshal data with error handling + data, err := json.Marshal(records) + if err != nil { + r.Errorf("error marshaling records: %v", err) + return + } + + // Validate connection + if r.conn == nil { + r.Errorf("gRPC connection not initialized") + return + } + + // Send IPC message to master with context and timeout + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + + // Create gRPC message + grpcMsg := &grpc.TaskServiceConnectRequest{ + Code: grpc.TaskServiceConnectCode_INSERT_DATA, + TaskId: r.tid.Hex(), + Data: data, + } + + // Use context for sending + select { + case <-ctx.Done(): + r.Errorf("timeout sending IPC message") + return + default: + if err := r.conn.Send(grpcMsg); err != nil { + r.Errorf("error sending IPC message: %v", err) + return + } + } } -func NewTaskRunner(id primitive.ObjectID, svc interfaces.TaskHandlerService, opts ...RunnerOption) (r2 interfaces.TaskRunner, err error) { - // validate options - if id.IsZero() { - return nil, constants.ErrInvalidOptions +func (r *Runner) installDependenciesIfAvailable() (err error) { + if !utils.IsPro() { + return nil } - // runner - r := &Runner{ - subscribeTimeout: 30 * time.Second, - bufferSize: 1024 * 1024, - svc: svc, - tid: id, - ch: make(chan constants.TaskSignal), - logBatchSize: 20, + // Get dependency installer service + depSvc := dependency.GetDependencyInstallerRegistryService() + if depSvc == nil { + r.Warnf("dependency installer service not available") + return nil } - // apply options - for _, opt := range opts { - opt(r) + // Check if auto install is enabled + if !depSvc.IsAutoInstallEnabled() { + r.Debug("auto dependency installation is disabled") + return nil } - // task - r.t, err = svc.GetTaskById(id) + // Get install command + cmd, err := depSvc.GetInstallDependencyRequirementsCmdBySpiderId(r.s.Id) if err != nil { - return nil, err + return err + } + if cmd == nil { + return nil } - // spider - r.s, err = svc.GetSpiderById(r.t.GetSpiderId()) + // Set up pipes for stdout and stderr + stdout, err := cmd.StdoutPipe() if err != nil { - return nil, err + r.Errorf("error creating stdout pipe for dependency installation: %v", err) + return err + } + stderr, err := cmd.StderrPipe() + if err != nil { + r.Errorf("error creating stderr pipe for dependency installation: %v", err) + return err + } + + // Start the command + r.Infof("installing dependencies for spider: %s", r.s.Id.Hex()) + r.Infof("command for dependencies installation: %s", cmd.String()) + if err := cmd.Start(); err != nil { + r.Errorf("error starting dependency installation command: %v", err) + return err } - // task fs service - r.fsSvc = fs2.NewFsServiceV2(filepath.Join(viper.GetString("workspace"), r.s.GetId().Hex())) + // Create wait group for log readers + var wg sync.WaitGroup + wg.Add(2) + + // Read stdout + go func() { + defer wg.Done() + scanner := bufio.NewScanner(stdout) + for scanner.Scan() { + line := scanner.Text() + r.Info(line) + } + }() + + // Read stderr + go func() { + defer wg.Done() + scanner := bufio.NewScanner(stderr) + for scanner.Scan() { + line := scanner.Text() + r.Error(line) + } + }() - // dependency injection - if err := container.GetContainer().Invoke(func( - c interfaces.GrpcClient, - ) { - r.c = c - }); err != nil { - return nil, trace.TraceError(err) + // Wait for command to complete + if err := cmd.Wait(); err != nil { + r.Errorf("dependency installation failed: %v", err) + return err } - _ = container.GetContainer().Invoke(func(hookSvc interfaces.TaskHookService) { - r.hookSvc = hookSvc - }) + // Wait for log readers to finish + wg.Wait() + + return nil +} - // initialize task runner - if err := r.Init(); err != nil { - return r, err +// logInternally sends internal runner logs to the same logging system as the task +func (r *Runner) logInternally(level string, message string) { + // Format the internal log with a prefix + timestamp := time.Now().Local().Format("2006-01-02 15:04:05") + + // Pad level + level = fmt.Sprintf("%-5s", level) + + // Format the log message + internalLog := fmt.Sprintf("%s [%s] [%s] %s", level, timestamp, "Crawlab", message) + + // Send to the same log system as task logs + if r.conn != nil { + r.writeLogLines([]string{internalLog}) + } + + // Also log through the standard logger + switch level { + case "ERROR": + r.Logger.Error(message) + case "WARN": + r.Logger.Warn(message) + case "INFO": + r.Logger.Info(message) + case "DEBUG": + r.Logger.Debug(message) } +} + +func (r *Runner) Error(message string) { + msg := fmt.Sprintf(message) + r.logInternally("ERROR", msg) +} + +func (r *Runner) Warn(message string) { + msg := fmt.Sprintf(message) + r.logInternally("WARN", msg) +} + +func (r *Runner) Info(message string) { + msg := fmt.Sprintf(message) + r.logInternally("INFO", msg) +} + +func (r *Runner) Debug(message string) { + msg := fmt.Sprintf(message) + r.logInternally("DEBUG", msg) +} + +func (r *Runner) Errorf(format string, args ...interface{}) { + msg := fmt.Sprintf(format, args...) + r.logInternally("ERROR", msg) +} + +func (r *Runner) Warnf(format string, args ...interface{}) { + msg := fmt.Sprintf(format, args...) + r.logInternally("WARN", msg) +} + +func (r *Runner) Infof(format string, args ...interface{}) { + msg := fmt.Sprintf(format, args...) + r.logInternally("INFO", msg) +} - return r, nil +func (r *Runner) Debugf(format string, args ...interface{}) { + msg := fmt.Sprintf(format, args...) + r.logInternally("DEBUG", msg) } diff --git a/core/task/handler/runner_test.go b/core/task/handler/runner_test.go index 175117a3a..4c342863a 100644 --- a/core/task/handler/runner_test.go +++ b/core/task/handler/runner_test.go @@ -1,103 +1,441 @@ package handler import ( - "github.com/crawlab-team/crawlab/core/models/models" - "github.com/google/uuid" - "github.com/spf13/viper" - "net/http" - "net/http/httptest" - "os" - "path/filepath" - "strings" + "bufio" + "context" + "encoding/json" + "fmt" + "io" + "reflect" + "runtime" + "sync" "testing" + "time" + "github.com/crawlab-team/crawlab/core/entity" + "github.com/crawlab-team/crawlab/core/grpc/client" + "github.com/crawlab-team/crawlab/core/grpc/server" + "github.com/crawlab-team/crawlab/core/utils" + + "github.com/apex/log" + "github.com/crawlab-team/crawlab/core/constants" + "github.com/crawlab-team/crawlab/core/models/models" + "github.com/crawlab-team/crawlab/core/models/service" + "github.com/spf13/viper" "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/require" + "go.mongodb.org/mongo-driver/bson/primitive" ) -type MockRunner struct { - mock.Mock - Runner +func setupGrpc(t *testing.T) { + // Mock IsMaster function by setting viper config + viper.Set("node.master", true) + defer viper.Set("node.master", nil) // cleanup after test + + // Start a gRPC server + svr := server.GetGrpcServer() + err := svr.Start() + require.Nil(t, err) + + // Start a gRPC client + client.GetGrpcClient().Start() + require.Nil(t, err) + + // Cleanup + t.Cleanup(func() { + err = svr.Stop() + if err != nil { + log.Warnf("failed to stop gRPC server: %v", err) + } + }) } -func (m *MockRunner) downloadFile(url string, filePath string) error { - args := m.Called(url, filePath) - return args.Error(0) +func setupRunner(t *testing.T) *Runner { + // Create a test spider + spider := &models.Spider{ + Name: "Test Spider", + } + spiderId, err := service.NewModelService[models.Spider]().InsertOne(*spider) + require.NoError(t, err) + spider.Id = spiderId + + // Create a test task + task := &models.Task{ + SpiderId: spiderId, + Status: constants.TaskStatusPending, + Type: "test", + Mode: "test", + NodeId: primitive.NewObjectID(), + } + switch runtime.GOOS { + case "windows": + task.Cmd = "ping -n 10 127.0.0.1" + default: // linux and darwin (macOS) + task.Cmd = "ping -c 10 127.0.0.1" + } + taskId, err := service.NewModelService[models.Task]().InsertOne(*task) + require.NoError(t, err) + task.Id = taskId + + // Create a task handler service + svc := newTaskHandlerService() + + // Create a task runner + runner, _ := newTaskRunner(task.Id, svc) + require.NotNil(t, runner) + + // Set task and spider + runner.t = task + runner.s = spider + + // Initialize runner + err = runner.configureCmd() + require.Nil(t, err) + + return runner } -func newMockRunner() *MockRunner { - r := &MockRunner{} - r.s = &models.Spider{} - return r +func setupPipe(runner *Runner) (pr *io.PipeReader, pw *io.PipeWriter) { + // Create a pipe for testing + pr, pw = io.Pipe() + runner.stdoutPipe = pr + runner.cmd.Stdout = pw + runner.cmd.Stderr = pw + return pr, pw } -func TestSyncFiles_SuccessWithDummyFiles(t *testing.T) { - // Create a test server that responds with a list of files - ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - if strings.HasSuffix(r.URL.Path, "/scan") { - w.Write([]byte(`{"file1.txt":{"path": "file1.txt", "hash": "hash1"}, "file2.txt":{"path": "file2.txt", "hash": "hash2"}}`)) - return +func initRunner(runner *Runner) chan struct{} { + // Initialize context and other required fields + runner.ctx, runner.cancel = context.WithCancel(context.Background()) + runner.wg = sync.WaitGroup{} + runner.done = make(chan struct{}) + runner.ipcChan = make(chan entity.IPCMessage) + + // Create a channel to signal that the reader is ready + readerReady := make(chan struct{}) + + // Start IPC reader with ready signal + go func() { + defer runner.wg.Done() + runner.wg.Add(1) + close(readerReady) // Signal that reader is ready + + // Read directly from the pipe for debugging + scanner := bufio.NewScanner(runner.stdoutPipe) + for scanner.Scan() { + line := scanner.Text() + log.Infof("Read from pipe: %s", line) + + // Try to parse as IPC message + var ipcMsg entity.IPCMessage + if err := json.Unmarshal([]byte(line), &ipcMsg); err != nil { + log.Errorf("Failed to unmarshal IPC message: %v", err) + continue + } + + if ipcMsg.IPC { + log.Infof("Valid IPC message received: %+v", ipcMsg) + if runner.ipcHandler != nil { + runner.ipcHandler(ipcMsg) + } + } } - if strings.HasSuffix(r.URL.Path, "/download") { - w.Write([]byte("file content")) - return + if err := scanner.Err(); err != nil { + log.Errorf("Scanner error: %v", err) } - })) - defer ts.Close() + }() - // Create a mock runner - r := newMockRunner() - r.On("downloadFile", mock.Anything, mock.Anything).Return(nil) + return readerReady +} - // Set the master URL to the test server URL - viper.Set("api.endpoint", ts.URL) +func TestRunner(t *testing.T) { + // Setup test data + setupGrpc(t) - localPath := filepath.Join(os.TempDir(), uuid.New().String()) - os.MkdirAll(filepath.Join(localPath, r.s.GetId().Hex()), os.ModePerm) - defer os.RemoveAll(localPath) - viper.Set("workspace", localPath) + t.Run("HandleIPC", func(t *testing.T) { + // Create a runner + runner := setupRunner(t) - // Call the method under test - err := r.syncFiles() - assert.NoError(t, err) + // Create a pipe for testing + _, pw := setupPipe(runner) - // Assert that the files were downloaded - assert.FileExists(t, filepath.Join(localPath, r.s.GetId().Hex(), "file1.txt")) - assert.FileExists(t, filepath.Join(localPath, r.s.GetId().Hex(), "file2.txt")) -} + readerReady := initRunner(runner) + + // Wait for reader to be ready + <-readerReady + + // Create test message + testMsg := entity.IPCMessage{ + Type: "test_type", + Payload: map[string]interface{}{"key": "value"}, + IPC: true, + } + + // Create channels for synchronization + processed := make(chan bool) + messageError := make(chan error, 1) + + // Set up message handler + runner.SetIPCHandler(func(msg entity.IPCMessage) { + log.Infof("Handler received IPC message: %+v", msg) + if msg.Type != testMsg.Type { + messageError <- fmt.Errorf("expected message type %s, got %s", testMsg.Type, msg.Type) + return + } + if !reflect.DeepEqual(msg.Payload, testMsg.Payload) { + messageError <- fmt.Errorf("expected payload %v, got %v", testMsg.Payload, msg.Payload) + return + } + processed <- true + }) -func TestSyncFiles_DeletesFilesNotOnMaster(t *testing.T) { - // Create a test server that responds with an empty list of files - ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - if strings.HasSuffix(r.URL.Path, "/scan") { - w.Write([]byte(`{}`)) - return + // Convert message to JSON + jsonData, err := json.Marshal(testMsg) + if err != nil { + t.Fatalf("failed to marshal test message: %v", err) } - })) - defer ts.Close() - // Create a mock runner - r := newMockRunner() - r.On("downloadFile", mock.Anything, mock.Anything).Return(nil) + // Write message to pipe + log.Infof("Writing message to pipe: %s", string(jsonData)) + _, err = fmt.Fprintln(pw, string(jsonData)) + if err != nil { + t.Fatalf("failed to write to pipe: %v", err) + } + log.Info("Message written to pipe") + + // Wait for message handling with timeout + select { + case <-processed: + log.Info("IPC message was processed successfully") + case err := <-messageError: + t.Fatalf("error handling message: %v", err) + case <-time.After(5 * time.Second): + t.Fatal("timeout waiting for IPC message to be handled") + } + + // Clean up + runner.cancel() // Cancel context to stop readers + }) + + t.Run("Cancel", func(t *testing.T) { + // Create a runner + runner := setupRunner(t) + + // Create pipes for stdout + pr, _ := setupPipe(runner) + + // Start the command + err := runner.cmd.Start() + assert.NoError(t, err) + log.Infof("started process with PID: %d", runner.cmd.Process.Pid) + runner.pid = runner.cmd.Process.Pid - // Set the master URL to the test server URL - viper.Set("api.endpoint", ts.URL) + // Read and print command output + go func() { + scanner := bufio.NewScanner(pr) + for scanner.Scan() { + log.Info(scanner.Text()) + } + }() + + // Wait for process to finish + go func() { + err = runner.cmd.Wait() + if err != nil { + log.Errorf("process[%d] exited with error: %v", runner.pid, err) + return + } + log.Infof("process[%d] exited successfully", runner.pid) + }() + + // Wait for a certain period for the process to start properly + time.Sleep(1 * time.Second) + + // Verify process exists before attempting to cancel + if !utils.ProcessIdExists(runner.pid) { + require.Fail(t, fmt.Sprintf("Process with PID %d was not started successfully", runner.pid)) + } + + // Test cancel + go func() { + err = runner.Cancel(true) + assert.NoError(t, err) + log.Infof("process[%d] cancelled", runner.pid) + }() + + // Wait for process to be killed, with shorter timeout + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + ticker := time.NewTicker(100 * time.Millisecond) + defer ticker.Stop() + for { + select { + case <-ctx.Done(): + require.Fail(t, fmt.Sprintf("Process with PID %d was not killed within timeout", runner.pid)) + case <-ticker.C: + exists := utils.ProcessIdExists(runner.pid) + if !exists { + return // Exit the test when process is killed + } + } + } + }) - localPath := filepath.Join(os.TempDir(), uuid.New().String()) - os.MkdirAll(filepath.Join(localPath, r.s.GetId().Hex()), os.ModePerm) - defer os.RemoveAll(localPath) - viper.Set("workspace", localPath) + t.Run("HandleIPCData", func(t *testing.T) { + // Create a runner + runner := setupRunner(t) - // Create a dummy file that should be deleted - dummyFilePath := filepath.Join(localPath, r.s.GetId().Hex(), "dummy.txt") - dummyFile, _ := os.Create(dummyFilePath) - dummyFile.Close() + // Create a pipe for testing + _, pw := setupPipe(runner) - // Call the method under test - err := r.syncFiles() - assert.NoError(t, err) + readerReady := initRunner(runner) + + // Wait for reader to be ready + <-readerReady + + // Test cases + testCases := []struct { + name string + message entity.IPCMessage + expectError bool + errorTimeout bool + }{ + { + name: "valid single object", + message: entity.IPCMessage{ + Type: constants.IPCMessageData, + Payload: map[string]interface{}{ + "field1": "value1", + "field2": 123, + }, + IPC: true, + }, + expectError: false, + }, + { + name: "valid array of objects", + message: entity.IPCMessage{ + Type: constants.IPCMessageData, + Payload: []map[string]interface{}{ + { + "field1": "value1", + "field2": 123, + }, + { + "field1": "value2", + "field2": 456, + }, + }, + IPC: true, + }, + expectError: false, + }, + { + name: "invalid payload type", + message: entity.IPCMessage{ + Type: constants.IPCMessageData, + Payload: "invalid", + IPC: true, + }, + expectError: true, + errorTimeout: true, + }, + { + name: "non-ipc message", + message: entity.IPCMessage{ + Type: constants.IPCMessageData, + Payload: map[string]interface{}{"field": "value"}, + IPC: false, + }, + expectError: true, + errorTimeout: true, + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + // Create channels for synchronization + processed := make(chan bool) + messageError := make(chan error, 1) + + // Set up message handler + runner.SetIPCHandler(func(msg entity.IPCMessage) { + log.Infof("Handler received IPC message: %+v", msg) + + // Verify message type matches + if msg.Type != tc.message.Type { + messageError <- fmt.Errorf("expected message type %s, got %s", tc.message.Type, msg.Type) + return + } + + // Verify IPC flag + if msg.IPC != tc.message.IPC { + messageError <- fmt.Errorf("expected IPC flag %v, got %v", tc.message.IPC, msg.IPC) + return + } + + // For data messages, just verify the structure + if msg.Type == constants.IPCMessageData { + switch msg.Payload.(type) { + case map[string]interface{}, []map[string]interface{}, []interface{}: + processed <- true + default: + messageError <- fmt.Errorf("unexpected payload type: %T", msg.Payload) + } + return + } + + processed <- true + }) + + // Convert message to JSON + jsonData, err := json.Marshal(tc.message) + if err != nil { + t.Fatalf("failed to marshal test message: %v", err) + } + + // Write message to pipe + log.Infof("Writing message to pipe: %s", string(jsonData)) + _, err = fmt.Fprintln(pw, string(jsonData)) + if err != nil { + t.Fatalf("failed to write to pipe: %v", err) + } + log.Info("Message written to pipe") + + if tc.expectError { + if tc.errorTimeout { + // For invalid messages, expect a timeout + select { + case <-processed: + t.Error("invalid message was unexpectedly processed") + case <-time.After(1 * time.Second): + // Success - no processing occurred + } + } else { + // For other error cases, expect an error message + select { + case err := <-messageError: + log.Infof("received expected error: %v", err) + case <-time.After(5 * time.Second): + t.Fatal("timeout waiting for error message") + } + } + } else { + // For valid messages, expect successful processing + select { + case <-processed: + log.Info("IPC message was processed successfully") + case err := <-messageError: + t.Fatalf("error handling message: %v", err) + case <-time.After(5 * time.Second): + t.Fatal("timeout waiting for IPC message to be handled") + } + } + }) + } - // Assert that the dummy file was deleted - assert.NoFileExists(t, dummyFilePath) + // Clean up + runner.cancel() // Cancel context to stop readers + }) } diff --git a/core/task/handler/runner_v2.go b/core/task/handler/runner_v2.go deleted file mode 100644 index 885b1c018..000000000 --- a/core/task/handler/runner_v2.go +++ /dev/null @@ -1,728 +0,0 @@ -package handler - -import ( - "bufio" - "context" - "encoding/json" - "errors" - "fmt" - "github.com/apex/log" - "github.com/cenkalti/backoff/v4" - "github.com/crawlab-team/crawlab/core/constants" - "github.com/crawlab-team/crawlab/core/entity" - fs2 "github.com/crawlab-team/crawlab/core/fs" - client2 "github.com/crawlab-team/crawlab/core/grpc/client" - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/models/client" - "github.com/crawlab-team/crawlab/core/models/models" - service2 "github.com/crawlab-team/crawlab/core/models/service" - "github.com/crawlab-team/crawlab/core/sys_exec" - "github.com/crawlab-team/crawlab/core/utils" - "github.com/crawlab-team/crawlab/grpc" - "github.com/crawlab-team/crawlab/trace" - "github.com/shirou/gopsutil/process" - "github.com/spf13/viper" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" - "io" - "net/http" - "os" - "os/exec" - "path/filepath" - "strings" - "sync" - "time" -) - -type RunnerV2 struct { - // dependencies - svc *ServiceV2 // task handler service - fsSvc interfaces.FsServiceV2 // task fs service - - // settings - subscribeTimeout time.Duration - bufferSize int - - // internals - cmd *exec.Cmd // process command instance - pid int // process id - tid primitive.ObjectID // task id - t *models.TaskV2 // task model.Task - s *models.SpiderV2 // spider model.Spider - ch chan constants.TaskSignal // channel to communicate between Service and RunnerV2 - err error // standard process error - envs []models.Env // environment variables - cwd string // working directory - c *client2.GrpcClientV2 // grpc client - sub grpc.TaskService_SubscribeClient // grpc task service stream client - - // log internals - scannerStdout *bufio.Reader - scannerStderr *bufio.Reader - logBatchSize int -} - -func (r *RunnerV2) Init() (err error) { - // update task - if err := r.updateTask("", nil); err != nil { - return err - } - - // start grpc client - if !r.c.IsStarted() { - err := r.c.Start() - if err != nil { - return err - } - } - - // grpc task service stream client - if err := r.initSub(); err != nil { - return err - } - - return nil -} - -func (r *RunnerV2) Run() (err error) { - // log task started - log.Infof("task[%s] started", r.tid.Hex()) - - // configure working directory - r.configureCwd() - - // sync files worker nodes - if !utils.IsMaster() { - if err := r.syncFiles(); err != nil { - return r.updateTask(constants.TaskStatusError, err) - } - } - - // configure cmd - err = r.configureCmd() - if err != nil { - return r.updateTask(constants.TaskStatusError, err) - } - - // configure environment variables - r.configureEnv() - - // configure logging - r.configureLogging() - - // start process - if err := r.cmd.Start(); err != nil { - return r.updateTask(constants.TaskStatusError, err) - } - - // start logging - go r.startLogging() - - // process id - if r.cmd.Process == nil { - return r.updateTask(constants.TaskStatusError, constants.ErrNotExists) - } - r.pid = r.cmd.Process.Pid - r.t.Pid = r.pid - - // update task status (processing) - if err := r.updateTask(constants.TaskStatusRunning, nil); err != nil { - return err - } - - // wait for process to finish - go r.wait() - - // start health check - go r.startHealthCheck() - - // declare task status - status := "" - - // wait for signal - signal := <-r.ch - switch signal { - case constants.TaskSignalFinish: - err = nil - status = constants.TaskStatusFinished - case constants.TaskSignalCancel: - err = constants.ErrTaskCancelled - status = constants.TaskStatusCancelled - case constants.TaskSignalError: - err = r.err - status = constants.TaskStatusError - case constants.TaskSignalLost: - err = constants.ErrTaskLost - status = constants.TaskStatusError - default: - err = constants.ErrInvalidSignal - status = constants.TaskStatusError - } - - // update task status - if err := r.updateTask(status, err); err != nil { - return err - } - - return err -} - -func (r *RunnerV2) Cancel() (err error) { - // kill process - opts := &sys_exec.KillProcessOptions{ - Timeout: r.svc.GetCancelTimeout(), - Force: true, - } - if err := sys_exec.KillProcess(r.cmd, opts); err != nil { - return err - } - - // make sure the process does not exist - op := func() error { - if exists, _ := process.PidExists(int32(r.pid)); exists { - return errors.New(fmt.Sprintf("task process %d still exists", r.pid)) - } - return nil - } - ctx, cancel := context.WithTimeout(context.Background(), r.svc.GetExitWatchDuration()) - defer cancel() - b := backoff.WithContext(backoff.NewConstantBackOff(1*time.Second), ctx) - if err := backoff.Retry(op, b); err != nil { - log.Errorf("Error canceling task %s: %v", r.tid, err) - return trace.TraceError(err) - } - - return nil -} - -// CleanUp clean up task runner -func (r *RunnerV2) CleanUp() (err error) { - return nil -} - -func (r *RunnerV2) SetSubscribeTimeout(timeout time.Duration) { - r.subscribeTimeout = timeout -} - -func (r *RunnerV2) GetTaskId() (id primitive.ObjectID) { - return r.tid -} - -func (r *RunnerV2) configureCmd() (err error) { - var cmdStr string - - // customized spider - if r.t.Cmd == "" { - cmdStr = r.s.Cmd - } else { - cmdStr = r.t.Cmd - } - - // parameters - if r.t.Param != "" { - cmdStr += " " + r.t.Param - } else if r.s.Param != "" { - cmdStr += " " + r.s.Param - } - - // get cmd instance - r.cmd, err = sys_exec.BuildCmd(cmdStr) - if err != nil { - log.Errorf("Error building command: %v", err) - trace.PrintError(err) - return err - } - - // set working directory - r.cmd.Dir = r.cwd - - return nil -} - -func (r *RunnerV2) configureLogging() { - // set stdout reader - stdout, _ := r.cmd.StdoutPipe() - r.scannerStdout = bufio.NewReaderSize(stdout, r.bufferSize) - - // set stderr reader - stderr, _ := r.cmd.StderrPipe() - r.scannerStderr = bufio.NewReaderSize(stderr, r.bufferSize) -} - -func (r *RunnerV2) startLogging() { - // start reading stdout - go r.startLoggingReaderStdout() - - // start reading stderr - go r.startLoggingReaderStderr() -} - -func (r *RunnerV2) startLoggingReaderStdout() { - for { - line, err := r.scannerStdout.ReadString(byte('\n')) - if err != nil { - break - } - line = strings.TrimSuffix(line, "\n") - r.writeLogLines([]string{line}) - } -} - -func (r *RunnerV2) startLoggingReaderStderr() { - for { - line, err := r.scannerStderr.ReadString(byte('\n')) - if err != nil { - break - } - line = strings.TrimSuffix(line, "\n") - r.writeLogLines([]string{line}) - } -} - -func (r *RunnerV2) startHealthCheck() { - if r.cmd.ProcessState == nil || r.cmd.ProcessState.Exited() { - return - } - for { - exists, _ := process.PidExists(int32(r.pid)) - if !exists { - // process lost - r.ch <- constants.TaskSignalLost - return - } - time.Sleep(1 * time.Second) - } -} - -func (r *RunnerV2) configureEnv() { - // 默认把Node.js的全局node_modules加入环境变量 - envPath := os.Getenv("PATH") - nodePath := "/usr/lib/node_modules" - if !strings.Contains(envPath, nodePath) { - _ = os.Setenv("PATH", nodePath+":"+envPath) - } - _ = os.Setenv("NODE_PATH", nodePath) - - // default envs - r.cmd.Env = append(os.Environ(), "CRAWLAB_TASK_ID="+r.tid.Hex()) - if viper.GetString("grpc.address") != "" { - r.cmd.Env = append(r.cmd.Env, "CRAWLAB_GRPC_ADDRESS="+viper.GetString("grpc.address")) - } - if viper.GetString("grpc.authKey") != "" { - r.cmd.Env = append(r.cmd.Env, "CRAWLAB_GRPC_AUTH_KEY="+viper.GetString("grpc.authKey")) - } else { - r.cmd.Env = append(r.cmd.Env, "CRAWLAB_GRPC_AUTH_KEY="+constants.DefaultGrpcAuthKey) - } - - // global environment variables - envs, err := client.NewModelServiceV2[models.EnvironmentV2]().GetMany(nil, nil) - if err != nil { - trace.PrintError(err) - return - } - for _, env := range envs { - r.cmd.Env = append(r.cmd.Env, env.Key+"="+env.Value) - } -} - -func (r *RunnerV2) syncFiles() (err error) { - var id string - var workingDir string - if r.s.GitId.IsZero() { - id = r.s.Id.Hex() - workingDir = "" - } else { - id = r.s.GitId.Hex() - workingDir = r.s.GitRootPath - } - masterURL := fmt.Sprintf("%s/sync/%s", viper.GetString("api.endpoint"), id) - - // get file list from master - resp, err := http.Get(masterURL + "/scan?path=" + workingDir) - if err != nil { - log.Errorf("Error getting file list from master: %v", err) - return trace.TraceError(err) - } - defer resp.Body.Close() - body, err := io.ReadAll(resp.Body) - if err != nil { - log.Errorf("Error reading response body: %v", err) - return trace.TraceError(err) - } - var masterFiles map[string]entity.FsFileInfo - err = json.Unmarshal(body, &masterFiles) - if err != nil { - log.Errorf("Error unmarshaling JSON: %v", err) - return trace.TraceError(err) - } - - // create a map for master files - masterFilesMap := make(map[string]entity.FsFileInfo) - for _, file := range masterFiles { - masterFilesMap[file.Path] = file - } - - // create working directory if not exists - if _, err := os.Stat(r.cwd); os.IsNotExist(err) { - if err := os.MkdirAll(r.cwd, os.ModePerm); err != nil { - log.Errorf("Error creating worker directory: %v", err) - return trace.TraceError(err) - } - } - - // get file list from worker - workerFiles, err := utils.ScanDirectory(r.cwd) - if err != nil { - log.Errorf("Error scanning worker directory: %v", err) - return trace.TraceError(err) - } - - // delete files that are deleted on master node - for path, workerFile := range workerFiles { - if _, exists := masterFilesMap[path]; !exists { - log.Infof("Deleting file: %s", path) - err := os.Remove(workerFile.FullPath) - if err != nil { - log.Errorf("Error deleting file: %v", err) - } - } - } - - // set up wait group and error channel - var wg sync.WaitGroup - pool := make(chan struct{}, 10) - - // download files that are new or modified on master node - for path, masterFile := range masterFilesMap { - workerFile, exists := workerFiles[path] - if !exists || masterFile.Hash != workerFile.Hash { - wg.Add(1) - - // acquire token - pool <- struct{}{} - - // start goroutine to synchronize file or directory - go func(path string, masterFile *entity.FsFileInfo) { - defer wg.Done() - - if masterFile.IsDir { - log.Infof("Directory needs to be synchronized: %s", path) - _err := os.MkdirAll(filepath.Join(r.cwd, path), masterFile.Mode) - if _err != nil { - log.Errorf("Error creating directory: %v", _err) - err = errors.Join(err, _err) - } - } else { - log.Infof("File needs to be synchronized: %s", path) - _err := r.downloadFile(masterURL+"/download?path="+filepath.Join(workingDir, path), filepath.Join(r.cwd, path), masterFile) - if _err != nil { - log.Errorf("Error downloading file: %v", _err) - err = errors.Join(err, _err) - } - } - - // release token - <-pool - - }(path, &masterFile) - } - } - - // wait for all files and directories to be synchronized - wg.Wait() - - return err -} - -func (r *RunnerV2) downloadFile(url string, filePath string, fileInfo *entity.FsFileInfo) error { - // get file response - resp, err := http.Get(url) - if err != nil { - log.Errorf("Error getting file response: %v", err) - return err - } - if resp.StatusCode != http.StatusOK { - log.Errorf("Error downloading file: %s", resp.Status) - return errors.New(resp.Status) - } - defer resp.Body.Close() - - // create directory if not exists - dirPath := filepath.Dir(filePath) - utils.Exists(dirPath) - err = os.MkdirAll(dirPath, os.ModePerm) - if err != nil { - log.Errorf("Error creating directory: %v", err) - return err - } - - // create local file - out, err := os.OpenFile(filePath, os.O_RDWR|os.O_CREATE|os.O_TRUNC, fileInfo.Mode) - if err != nil { - log.Errorf("Error creating file: %v", err) - return err - } - defer out.Close() - - // copy file content to local file - _, err = io.Copy(out, resp.Body) - if err != nil { - log.Errorf("Error copying file: %v", err) - return err - } - return nil -} - -// wait for process to finish and send task signal (constants.TaskSignal) -// to task runner's channel (RunnerV2.ch) according to exit code -func (r *RunnerV2) wait() { - // wait for process to finish - if err := r.cmd.Wait(); err != nil { - var exitError *exec.ExitError - ok := errors.As(err, &exitError) - if !ok { - r.ch <- constants.TaskSignalError - return - } - exitCode := exitError.ExitCode() - if exitCode == -1 { - // cancel error - r.ch <- constants.TaskSignalCancel - return - } - - // standard error - r.err = err - r.ch <- constants.TaskSignalError - return - } - - // success - r.ch <- constants.TaskSignalFinish -} - -// updateTask update and get updated info of task (RunnerV2.t) -func (r *RunnerV2) updateTask(status string, e error) (err error) { - if r.t != nil && status != "" { - // update task status - r.t.Status = status - if e != nil { - r.t.Error = e.Error() - } - if r.svc.GetNodeConfigService().IsMaster() { - err = service2.NewModelServiceV2[models.TaskV2]().ReplaceById(r.t.Id, *r.t) - if err != nil { - return err - } - } else { - err = client.NewModelServiceV2[models.TaskV2]().ReplaceById(r.t.Id, *r.t) - if err != nil { - return err - } - } - - // send notification - go r.sendNotification() - - // update stats - go func() { - r._updateTaskStat(status) - r._updateSpiderStat(status) - }() - } - - // get task - r.t, err = r.svc.GetTaskById(r.tid) - if err != nil { - return err - } - - return nil -} - -func (r *RunnerV2) initSub() (err error) { - r.sub, err = r.c.TaskClient.Subscribe(context.Background()) - if err != nil { - return trace.TraceError(err) - } - return nil -} - -func (r *RunnerV2) writeLogLines(lines []string) { - data, err := json.Marshal(&entity.StreamMessageTaskData{ - TaskId: r.tid, - Logs: lines, - }) - if err != nil { - trace.PrintError(err) - return - } - msg := &grpc.StreamMessage{ - Code: grpc.StreamMessageCode_INSERT_LOGS, - Data: data, - } - if err := r.sub.Send(msg); err != nil { - trace.PrintError(err) - return - } -} - -func (r *RunnerV2) _updateTaskStat(status string) { - ts, err := client.NewModelServiceV2[models.TaskStatV2]().GetById(r.tid) - if err != nil { - trace.PrintError(err) - return - } - switch status { - case constants.TaskStatusPending: - // do nothing - case constants.TaskStatusRunning: - ts.StartTs = time.Now() - ts.WaitDuration = ts.StartTs.Sub(ts.CreateTs).Milliseconds() - case constants.TaskStatusFinished, constants.TaskStatusError, constants.TaskStatusCancelled: - if ts.StartTs.IsZero() { - ts.StartTs = time.Now() - ts.WaitDuration = ts.StartTs.Sub(ts.CreateTs).Milliseconds() - } - ts.EndTs = time.Now() - ts.RuntimeDuration = ts.EndTs.Sub(ts.StartTs).Milliseconds() - ts.TotalDuration = ts.EndTs.Sub(ts.CreateTs).Milliseconds() - } - if r.svc.GetNodeConfigService().IsMaster() { - err = service2.NewModelServiceV2[models.TaskStatV2]().ReplaceById(ts.Id, *ts) - if err != nil { - trace.PrintError(err) - return - } - } else { - err = client.NewModelServiceV2[models.TaskStatV2]().ReplaceById(ts.Id, *ts) - if err != nil { - trace.PrintError(err) - return - } - } -} - -func (r *RunnerV2) sendNotification() { - data, err := json.Marshal(r.t) - if err != nil { - trace.PrintError(err) - return - } - req := &grpc.Request{ - NodeKey: r.svc.GetNodeConfigService().GetNodeKey(), - Data: data, - } - _, err = r.c.TaskClient.SendNotification(context.Background(), req) - if err != nil { - trace.PrintError(err) - return - } -} - -func (r *RunnerV2) _updateSpiderStat(status string) { - // task stat - ts, err := client.NewModelServiceV2[models.TaskStatV2]().GetById(r.tid) - if err != nil { - trace.PrintError(err) - return - } - - // update - var update bson.M - switch status { - case constants.TaskStatusPending, constants.TaskStatusRunning: - update = bson.M{ - "$set": bson.M{ - "last_task_id": r.tid, // last task id - }, - "$inc": bson.M{ - "tasks": 1, // task count - "wait_duration": ts.WaitDuration, // wait duration - }, - } - case constants.TaskStatusFinished, constants.TaskStatusError, constants.TaskStatusCancelled: - update = bson.M{ - "$set": bson.M{ - "last_task_id": r.tid, // last task id - }, - "$inc": bson.M{ - "results": ts.ResultCount, // results - "runtime_duration": ts.RuntimeDuration / 1000, // runtime duration - "total_duration": ts.TotalDuration / 1000, // total duration - }, - } - default: - log.Errorf("Invalid task status: %s", status) - trace.PrintError(errors.New("invalid task status")) - return - } - - // perform update - if r.svc.GetNodeConfigService().IsMaster() { - err = service2.NewModelServiceV2[models.SpiderStatV2]().UpdateById(r.s.Id, update) - if err != nil { - trace.PrintError(err) - return - } - } else { - err = client.NewModelServiceV2[models.SpiderStatV2]().UpdateById(r.s.Id, update) - if err != nil { - trace.PrintError(err) - return - } - } -} - -func (r *RunnerV2) configureCwd() { - workspacePath := viper.GetString("workspace") - if r.s.GitId.IsZero() { - // not git - r.cwd = filepath.Join(workspacePath, r.s.Id.Hex()) - } else { - // git - r.cwd = filepath.Join(workspacePath, r.s.GitId.Hex(), r.s.GitRootPath) - } -} - -func NewTaskRunnerV2(id primitive.ObjectID, svc *ServiceV2) (r2 *RunnerV2, err error) { - // validate options - if id.IsZero() { - return nil, constants.ErrInvalidOptions - } - - // runner - r := &RunnerV2{ - subscribeTimeout: 30 * time.Second, - bufferSize: 1024 * 1024, - svc: svc, - tid: id, - ch: make(chan constants.TaskSignal), - logBatchSize: 20, - } - - // task - r.t, err = svc.GetTaskById(id) - if err != nil { - return nil, err - } - - // spider - r.s, err = svc.GetSpiderById(r.t.SpiderId) - if err != nil { - return nil, err - } - - // task fs service - r.fsSvc = fs2.NewFsServiceV2(filepath.Join(viper.GetString("workspace"), r.s.Id.Hex())) - - // grpc client - r.c = client2.GetGrpcClientV2() - - // initialize task runner - if err := r.Init(); err != nil { - return r, err - } - - return r, nil -} diff --git a/core/task/handler/service.go b/core/task/handler/service.go index 69a99884a..0230ff592 100644 --- a/core/task/handler/service.go +++ b/core/task/handler/service.go @@ -2,237 +2,149 @@ package handler import ( "context" - "encoding/json" "errors" - "github.com/apex/log" + "fmt" "github.com/crawlab-team/crawlab/core/constants" - "github.com/crawlab-team/crawlab/core/container" - errors2 "github.com/crawlab-team/crawlab/core/errors" + grpcclient "github.com/crawlab-team/crawlab/core/grpc/client" "github.com/crawlab-team/crawlab/core/interfaces" "github.com/crawlab-team/crawlab/core/models/client" - "github.com/crawlab-team/crawlab/core/models/delegate" + "github.com/crawlab-team/crawlab/core/models/models" "github.com/crawlab-team/crawlab/core/models/service" - "github.com/crawlab-team/crawlab/core/task" - "github.com/crawlab-team/crawlab/trace" + nodeconfig "github.com/crawlab-team/crawlab/core/node/config" + "github.com/crawlab-team/crawlab/core/utils" + "github.com/crawlab-team/crawlab/grpc" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" - "go.mongodb.org/mongo-driver/mongo" + "io" "sync" "time" ) type Service struct { // dependencies - interfaces.TaskBaseService - cfgSvc interfaces.NodeConfigService - modelSvc service.ModelService - clientModelSvc interfaces.GrpcClientModelService - clientModelNodeSvc interfaces.GrpcClientModelNodeService - clientModelSpiderSvc interfaces.GrpcClientModelSpiderService - clientModelTaskSvc interfaces.GrpcClientModelTaskService - clientModelTaskStatSvc interfaces.GrpcClientModelTaskStatService - clientModelEnvironmentSvc interfaces.GrpcClientModelEnvironmentService - c interfaces.GrpcClient // grpc client + cfgSvc interfaces.NodeConfigService + c *grpcclient.GrpcClient // grpc client // settings - //maxRunners int - exitWatchDuration time.Duration - reportInterval time.Duration - fetchInterval time.Duration - fetchTimeout time.Duration - cancelTimeout time.Duration + reportInterval time.Duration + fetchInterval time.Duration + fetchTimeout time.Duration + cancelTimeout time.Duration // internals variables stopped bool mu sync.Mutex runners sync.Map // pool of task runners started syncLocks sync.Map // files sync locks map of task runners + interfaces.Logger } func (svc *Service) Start() { - // Initialize gRPC if not started - if !svc.c.IsStarted() { - svc.c.Start() - } + // wait for grpc client ready + grpcclient.GetGrpcClient().WaitForReady() - go svc.ReportStatus() - go svc.Fetch() + go svc.reportStatus() + go svc.fetchAndRunTasks() } -func (svc *Service) Run(taskId primitive.ObjectID) (err error) { - return svc.run(taskId) +func (svc *Service) Stop() { + svc.stopped = true } -func (svc *Service) Reset() { - svc.mu.Lock() - defer svc.mu.Unlock() +func (svc *Service) Run(taskId primitive.ObjectID) (err error) { + return svc.runTask(taskId) } -func (svc *Service) Cancel(taskId primitive.ObjectID) (err error) { - r, err := svc.getRunner(taskId) - if err != nil { - return err - } - if err := r.Cancel(); err != nil { - return err - } - return nil +func (svc *Service) Cancel(taskId primitive.ObjectID, force bool) (err error) { + return svc.cancelTask(taskId, force) } -func (svc *Service) Fetch() { +func (svc *Service) fetchAndRunTasks() { + ticker := time.NewTicker(svc.fetchInterval) for { - // wait - time.Sleep(svc.fetchInterval) - - // current node - n, err := svc.GetCurrentNode() - if err != nil { - continue + if svc.stopped { + return } - // skip if node is not active or enabled - if !n.GetActive() || !n.GetEnabled() { - continue - } + select { + case <-ticker.C: + // current node + n, err := svc.GetCurrentNode() + if err != nil { + continue + } - // validate if there are available runners - if svc.getRunnerCount() >= n.GetMaxRunners() { - continue - } + // skip if node is not active or enabled + if !n.Active || !n.Enabled { + continue + } - // stop - if svc.stopped { - return - } + // validate if max runners is reached (max runners = 0 means no limit) + if n.MaxRunners > 0 && svc.getRunnerCount() >= n.MaxRunners { + continue + } - // fetch task - tid, err := svc.fetch() - if err != nil { - trace.PrintError(err) - continue - } + // fetch task id + tid, err := svc.fetchTask() + if err != nil { + continue + } - // skip if no task id - if tid.IsZero() { - continue - } + // skip if no task id + if tid.IsZero() { + continue + } - // run task - if err := svc.run(tid); err != nil { - trace.PrintError(err) - t, err := svc.GetTaskById(tid) - if err == nil && t.GetStatus() != constants.TaskStatusCancelled { - t.SetError(err.Error()) - _ = svc.SaveTask(t, constants.TaskStatusError) + // run task + if err := svc.runTask(tid); err != nil { + t, err := svc.GetTaskById(tid) + if err != nil && t.Status != constants.TaskStatusCancelled { + t.Error = err.Error() + t.Status = constants.TaskStatusError + t.SetUpdated(t.CreatedBy) + _ = client.NewModelService[models.Task]().ReplaceById(t.Id, *t) + continue + } continue } - continue } } } -func (svc *Service) ReportStatus() { +func (svc *Service) reportStatus() { + ticker := time.NewTicker(svc.reportInterval) for { if svc.stopped { return } - // report handler status - if err := svc.reportStatus(); err != nil { - trace.PrintError(err) + select { + case <-ticker.C: + // update node status + if err := svc.updateNodeStatus(); err != nil { + svc.Errorf("failed to report status: %v", err) + } } - - // wait - time.Sleep(svc.reportInterval) } } -func (svc *Service) IsSyncLocked(path string) (ok bool) { - _, ok = svc.syncLocks.Load(path) - return ok -} - -func (svc *Service) LockSync(path string) { - svc.syncLocks.Store(path, true) -} - -func (svc *Service) UnlockSync(path string) { - svc.syncLocks.Delete(path) -} - -//func (svc *Service) GetMaxRunners() (maxRunners int) { -// return svc.maxRunners -//} -// -//func (svc *Service) SetMaxRunners(maxRunners int) { -// svc.maxRunners = maxRunners -//} - -func (svc *Service) GetExitWatchDuration() (duration time.Duration) { - return svc.exitWatchDuration -} - -func (svc *Service) SetExitWatchDuration(duration time.Duration) { - svc.exitWatchDuration = duration -} - -func (svc *Service) GetFetchInterval() (interval time.Duration) { - return svc.fetchInterval -} - -func (svc *Service) SetFetchInterval(interval time.Duration) { - svc.fetchInterval = interval -} - -func (svc *Service) GetReportInterval() (interval time.Duration) { - return svc.reportInterval -} - -func (svc *Service) SetReportInterval(interval time.Duration) { - svc.reportInterval = interval -} - func (svc *Service) GetCancelTimeout() (timeout time.Duration) { return svc.cancelTimeout } -func (svc *Service) SetCancelTimeout(timeout time.Duration) { - svc.cancelTimeout = timeout -} - -func (svc *Service) GetModelService() (modelSvc interfaces.GrpcClientModelService) { - return svc.clientModelSvc -} - -func (svc *Service) GetModelSpiderService() (modelSpiderSvc interfaces.GrpcClientModelSpiderService) { - return svc.clientModelSpiderSvc -} - -func (svc *Service) GetModelTaskService() (modelTaskSvc interfaces.GrpcClientModelTaskService) { - return svc.clientModelTaskSvc -} - -func (svc *Service) GetModelTaskStatService() (modelTaskSvc interfaces.GrpcClientModelTaskStatService) { - return svc.clientModelTaskStatSvc -} - -func (svc *Service) GetModelEnvironmentService() (modelTaskSvc interfaces.GrpcClientModelEnvironmentService) { - return svc.clientModelEnvironmentSvc -} - func (svc *Service) GetNodeConfigService() (cfgSvc interfaces.NodeConfigService) { return svc.cfgSvc } -func (svc *Service) GetCurrentNode() (n interfaces.Node, err error) { +func (svc *Service) GetCurrentNode() (n *models.Node, err error) { // node key nodeKey := svc.cfgSvc.GetNodeKey() // current node if svc.cfgSvc.IsMaster() { - n, err = svc.modelSvc.GetNodeByKey(nodeKey, nil) + n, err = service.NewModelService[models.Node]().GetOne(bson.M{"key": nodeKey}, nil) } else { - n, err = svc.clientModelNodeSvc.GetNodeByKey(nodeKey) + n, err = client.NewModelService[models.Node]().GetOne(bson.M{"key": nodeKey}, nil) } if err != nil { return nil, err @@ -241,63 +153,69 @@ func (svc *Service) GetCurrentNode() (n interfaces.Node, err error) { return n, nil } -func (svc *Service) GetTaskById(id primitive.ObjectID) (t interfaces.Task, err error) { +func (svc *Service) GetTaskById(id primitive.ObjectID) (t *models.Task, err error) { if svc.cfgSvc.IsMaster() { - t, err = svc.modelSvc.GetTaskById(id) + t, err = service.NewModelService[models.Task]().GetById(id) } else { - t, err = svc.clientModelTaskSvc.GetTaskById(id) + t, err = client.NewModelService[models.Task]().GetById(id) } if err != nil { + svc.Errorf("failed to get task by id: %v", err) return nil, err } return t, nil } -func (svc *Service) GetSpiderById(id primitive.ObjectID) (s interfaces.Spider, err error) { +func (svc *Service) UpdateTask(t *models.Task) (err error) { + t.SetUpdated(t.CreatedBy) if svc.cfgSvc.IsMaster() { - s, err = svc.modelSvc.GetSpiderById(id) + err = service.NewModelService[models.Task]().ReplaceById(t.Id, *t) } else { - s, err = svc.clientModelSpiderSvc.GetSpiderById(id) + err = client.NewModelService[models.Task]().ReplaceById(t.Id, *t) } if err != nil { + return err + } + return nil +} + +func (svc *Service) GetSpiderById(id primitive.ObjectID) (s *models.Spider, err error) { + if svc.cfgSvc.IsMaster() { + s, err = service.NewModelService[models.Spider]().GetById(id) + } else { + s, err = client.NewModelService[models.Spider]().GetById(id) + } + if err != nil { + svc.Errorf("failed to get spider by id: %v", err) return nil, err } return s, nil } -func (svc *Service) getRunners() (runners []*Runner) { - svc.mu.Lock() - defer svc.mu.Unlock() - svc.runners.Range(func(key, value interface{}) bool { - r := value.(Runner) - runners = append(runners, &r) - return true - }) - return runners -} - func (svc *Service) getRunnerCount() (count int) { n, err := svc.GetCurrentNode() if err != nil { - trace.PrintError(err) + svc.Errorf("failed to get current node: %v", err) return } query := bson.M{ - "node_id": n.GetId(), - "status": constants.TaskStatusRunning, + "node_id": n.Id, + "status": bson.M{ + "$in": []string{constants.TaskStatusAssigned, constants.TaskStatusRunning}, + }, } if svc.cfgSvc.IsMaster() { - count, err = svc.modelSvc.GetBaseService(interfaces.ModelIdTask).Count(query) + count, err = service.NewModelService[models.Task]().Count(query) if err != nil { - trace.PrintError(err) + svc.Errorf("failed to count tasks: %v", err) return } } else { - count, err = svc.clientModelTaskSvc.Count(query) + count, err = client.NewModelService[models.Task]().Count(query) if err != nil { - trace.PrintError(err) + svc.Errorf("failed to count tasks: %v", err) return } } @@ -305,78 +223,50 @@ func (svc *Service) getRunnerCount() (count int) { } func (svc *Service) getRunner(taskId primitive.ObjectID) (r interfaces.TaskRunner, err error) { - log.Debugf("[TaskHandlerService] getRunner: taskId[%v]", taskId) + svc.Debugf("get runner: taskId[%v]", taskId) v, ok := svc.runners.Load(taskId) if !ok { - return nil, trace.TraceError(errors2.ErrorTaskNotExists) + err = fmt.Errorf("task[%s] not exists", taskId.Hex()) + svc.Errorf("get runner error: %v", err) + return nil, err } switch v.(type) { case interfaces.TaskRunner: r = v.(interfaces.TaskRunner) default: - return nil, trace.TraceError(errors2.ErrorModelInvalidType) + err = fmt.Errorf("invalid type: %T", v) + svc.Errorf("get runner error: %v", err) + return nil, err } return r, nil } func (svc *Service) addRunner(taskId primitive.ObjectID, r interfaces.TaskRunner) { - log.Debugf("[TaskHandlerService] addRunner: taskId[%v]", taskId) + svc.Debugf("add runner: taskId[%s]", taskId.Hex()) svc.runners.Store(taskId, r) } func (svc *Service) deleteRunner(taskId primitive.ObjectID) { - log.Debugf("[TaskHandlerService] deleteRunner: taskId[%v]", taskId) + svc.Debugf("delete runner: taskId[%v]", taskId) svc.runners.Delete(taskId) } -func (svc *Service) saveTask(t interfaces.Task, status string) (err error) { - // normalize status - if status == "" { - status = constants.TaskStatusPending - } - - // set task status - t.SetStatus(status) - - // attempt to get task from database - _, err = svc.clientModelTaskSvc.GetTaskById(t.GetId()) - if err != nil { - // if task does not exist, add to database - if err == mongo.ErrNoDocuments { - if err := client.NewModelDelegate(t, client.WithDelegateConfigPath(svc.GetConfigPath())).Add(); err != nil { - return err - } - return nil - } else { - return err - } - } else { - // otherwise, update - if err := client.NewModelDelegate(t, client.WithDelegateConfigPath(svc.GetConfigPath())).Save(); err != nil { - return err - } - return nil - } -} - -func (svc *Service) reportStatus() (err error) { +func (svc *Service) updateNodeStatus() (err error) { // current node n, err := svc.GetCurrentNode() if err != nil { return err } - // available runners of handler - ar := n.GetMaxRunners() - svc.getRunnerCount() - // set available runners - n.SetAvailableRunners(ar) + n.CurrentRunners = svc.getRunnerCount() // save node + n.SetUpdated(n.CreatedBy) if svc.cfgSvc.IsMaster() { - err = delegate.NewModelDelegate(n).Save() + err = service.NewModelService[models.Node]().ReplaceById(n.Id, *n) } else { - err = client.NewModelDelegate(n, client.WithDelegateConfigPath(svc.GetConfigPath())).Save() + err = client.NewModelService[models.Node]().ReplaceById(n.Id, *n) } if err != nil { return err @@ -385,30 +275,38 @@ func (svc *Service) reportStatus() (err error) { return nil } -func (svc *Service) fetch() (tid primitive.ObjectID, err error) { +func (svc *Service) fetchTask() (tid primitive.ObjectID, err error) { ctx, cancel := context.WithTimeout(context.Background(), svc.fetchTimeout) defer cancel() - res, err := svc.c.GetTaskClient().Fetch(ctx, svc.c.NewRequest(nil)) + res, err := svc.c.TaskClient.FetchTask(ctx, &grpc.TaskServiceFetchTaskRequest{ + NodeKey: svc.cfgSvc.GetNodeKey(), + }) if err != nil { - return tid, trace.TraceError(err) + return primitive.NilObjectID, fmt.Errorf("fetchTask task error: %v", err) } - if err := json.Unmarshal(res.Data, &tid); err != nil { - return tid, trace.TraceError(err) + // validate task id + tid, err = primitive.ObjectIDFromHex(res.GetTaskId()) + if err != nil { + return primitive.NilObjectID, fmt.Errorf("invalid task id: %s", res.GetTaskId()) } return tid, nil } -func (svc *Service) run(taskId primitive.ObjectID) (err error) { +func (svc *Service) runTask(taskId primitive.ObjectID) (err error) { // attempt to get runner from pool _, ok := svc.runners.Load(taskId) if ok { - return trace.TraceError(errors2.ErrorTaskAlreadyExists) + err = fmt.Errorf("task[%s] already exists", taskId.Hex()) + svc.Errorf("run task error: %v", err) + return err } // create a new task runner - r, err := NewTaskRunner(taskId, svc) + r, err := newTaskRunner(taskId, svc) if err != nil { - return trace.TraceError(err) + err = fmt.Errorf("failed to create task runner: %v", err) + svc.Errorf("run task error: %v", err) + return err } // add runner to pool @@ -416,91 +314,149 @@ func (svc *Service) run(taskId primitive.ObjectID) (err error) { // create a goroutine to run task go func() { - // delete runner from pool - defer svc.deleteRunner(r.GetTaskId()) - defer func(r interfaces.TaskRunner) { - err := r.CleanUp() - if err != nil { - log.Errorf("task[%s] clean up error: %v", r.GetTaskId().Hex(), err) - } - }(r) - // run task process (blocking) - // error or finish after task runner ends + // get subscription stream + stopCh := make(chan struct{}) + stream, err := svc.subscribeTask(r.GetTaskId()) + if err == nil { + // create a goroutine to handle stream messages + go svc.handleStreamMessages(r.GetTaskId(), stream, stopCh) + } else { + svc.Errorf("failed to subscribe task[%s]: %v", r.GetTaskId().Hex(), err) + svc.Warnf("task[%s] will not be able to receive stream messages", r.GetTaskId().Hex()) + } + + // run task process (blocking) error or finish after task runner ends if err := r.Run(); err != nil { switch { case errors.Is(err, constants.ErrTaskError): - log.Errorf("task[%s] finished with error: %v", r.GetTaskId().Hex(), err) + svc.Errorf("task[%s] finished with error: %v", r.GetTaskId().Hex(), err) case errors.Is(err, constants.ErrTaskCancelled): - log.Errorf("task[%s] cancelled", r.GetTaskId().Hex()) + svc.Errorf("task[%s] cancelled", r.GetTaskId().Hex()) default: - log.Errorf("task[%s] finished with unknown error: %v", r.GetTaskId().Hex(), err) + svc.Errorf("task[%s] finished with unknown error: %v", r.GetTaskId().Hex(), err) } } - log.Infof("task[%s] finished", r.GetTaskId().Hex()) + svc.Infof("task[%s] finished", r.GetTaskId().Hex()) + + // send stopCh signal to stream message handler + stopCh <- struct{}{} + + // delete runner from pool + svc.deleteRunner(r.GetTaskId()) }() return nil } -func NewTaskHandlerService() (svc2 interfaces.TaskHandlerService, err error) { - // base service - baseSvc, err := task.NewBaseService() +func (svc *Service) subscribeTask(taskId primitive.ObjectID) (stream grpc.TaskService_SubscribeClient, err error) { + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + req := &grpc.TaskServiceSubscribeRequest{ + TaskId: taskId.Hex(), + } + stream, err = svc.c.TaskClient.Subscribe(ctx, req) + if err != nil { + svc.Errorf("failed to subscribe task[%s]: %v", taskId.Hex(), err) + return nil, err + } + return stream, nil +} + +func (svc *Service) handleStreamMessages(taskId primitive.ObjectID, stream grpc.TaskService_SubscribeClient, stopCh chan struct{}) { + for { + select { + case <-stopCh: + err := stream.CloseSend() + if err != nil { + svc.Errorf("task[%s] failed to close stream: %v", taskId.Hex(), err) + return + } + return + default: + msg, err := stream.Recv() + if err != nil { + if errors.Is(err, io.EOF) { + svc.Infof("task[%s] received EOF, stream closed", taskId.Hex()) + return + } + svc.Errorf("task[%s] stream error: %v", taskId.Hex(), err) + continue + } + switch msg.Code { + case grpc.TaskServiceSubscribeCode_CANCEL: + svc.Infof("task[%s] received cancel signal", taskId.Hex()) + go svc.handleCancel(msg, taskId) + } + } + } +} + +func (svc *Service) handleCancel(msg *grpc.TaskServiceSubscribeResponse, taskId primitive.ObjectID) { + // validate task id + if msg.TaskId != taskId.Hex() { + svc.Errorf("task[%s] received cancel signal for another task[%s]", taskId.Hex(), msg.TaskId) + return + } + + // cancel task + err := svc.cancelTask(taskId, msg.Force) + if err != nil { + svc.Errorf("task[%s] failed to cancel: %v", taskId.Hex(), err) + return + } + svc.Infof("task[%s] cancelled", taskId.Hex()) + + // set task status as "cancelled" + t, err := svc.GetTaskById(taskId) + if err != nil { + svc.Errorf("task[%s] failed to get task: %v", taskId.Hex(), err) + return + } + t.Status = constants.TaskStatusCancelled + err = svc.UpdateTask(t) + if err != nil { + svc.Errorf("task[%s] failed to update task: %v", taskId.Hex(), err) + } +} + +func (svc *Service) cancelTask(taskId primitive.ObjectID, force bool) (err error) { + r, err := svc.getRunner(taskId) if err != nil { - return nil, trace.TraceError(err) + return err + } + if err := r.Cancel(force); err != nil { + return err } + return nil +} +func newTaskHandlerService() *Service { // service svc := &Service{ - TaskBaseService: baseSvc, - exitWatchDuration: 60 * time.Second, - fetchInterval: 1 * time.Second, - fetchTimeout: 15 * time.Second, - reportInterval: 5 * time.Second, - cancelTimeout: 5 * time.Second, - mu: sync.Mutex{}, - runners: sync.Map{}, - syncLocks: sync.Map{}, + fetchInterval: 1 * time.Second, + fetchTimeout: 15 * time.Second, + reportInterval: 5 * time.Second, + cancelTimeout: 60 * time.Second, + mu: sync.Mutex{}, + runners: sync.Map{}, + Logger: utils.NewLogger("TaskHandlerService"), } // dependency injection - if err := container.GetContainer().Invoke(func( - cfgSvc interfaces.NodeConfigService, - modelSvc service.ModelService, - clientModelSvc interfaces.GrpcClientModelService, - clientModelNodeSvc interfaces.GrpcClientModelNodeService, - clientModelSpiderSvc interfaces.GrpcClientModelSpiderService, - clientModelTaskSvc interfaces.GrpcClientModelTaskService, - clientModelTaskStatSvc interfaces.GrpcClientModelTaskStatService, - clientModelEnvironmentSvc interfaces.GrpcClientModelEnvironmentService, - c interfaces.GrpcClient, - ) { - svc.cfgSvc = cfgSvc - svc.modelSvc = modelSvc - svc.clientModelSvc = clientModelSvc - svc.clientModelNodeSvc = clientModelNodeSvc - svc.clientModelSpiderSvc = clientModelSpiderSvc - svc.clientModelTaskSvc = clientModelTaskSvc - svc.clientModelTaskStatSvc = clientModelTaskStatSvc - svc.clientModelEnvironmentSvc = clientModelEnvironmentSvc - svc.c = c - }); err != nil { - return nil, trace.TraceError(err) - } - - log.Debugf("[NewTaskHandlerService] svc[cfgPath: %s]", svc.cfgSvc.GetConfigPath()) - - return svc, nil + svc.cfgSvc = nodeconfig.GetNodeConfigService() + + // grpc client + svc.c = grpcclient.GetGrpcClient() + + return svc } -var _service interfaces.TaskHandlerService +var _service *Service +var _serviceOnce sync.Once -func GetTaskHandlerService() (svr interfaces.TaskHandlerService, err error) { - if _service != nil { - return _service, nil - } - _service, err = NewTaskHandlerService() - if err != nil { - return nil, err - } - return _service, nil +func GetTaskHandlerService() *Service { + _serviceOnce.Do(func() { + _service = newTaskHandlerService() + }) + return _service } diff --git a/core/task/handler/service_v2.go b/core/task/handler/service_v2.go deleted file mode 100644 index e6edb2b22..000000000 --- a/core/task/handler/service_v2.go +++ /dev/null @@ -1,435 +0,0 @@ -package handler - -import ( - "context" - "encoding/json" - "errors" - "github.com/apex/log" - "github.com/crawlab-team/crawlab/core/constants" - errors2 "github.com/crawlab-team/crawlab/core/errors" - grpcclient "github.com/crawlab-team/crawlab/core/grpc/client" - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/models/client" - "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/core/models/service" - nodeconfig "github.com/crawlab-team/crawlab/core/node/config" - "github.com/crawlab-team/crawlab/trace" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" - "sync" - "time" -) - -type ServiceV2 struct { - // dependencies - cfgSvc interfaces.NodeConfigService - c *grpcclient.GrpcClientV2 // grpc client - - // settings - //maxRunners int - exitWatchDuration time.Duration - reportInterval time.Duration - fetchInterval time.Duration - fetchTimeout time.Duration - cancelTimeout time.Duration - - // internals variables - stopped bool - mu sync.Mutex - runners sync.Map // pool of task runners started - syncLocks sync.Map // files sync locks map of task runners -} - -func (svc *ServiceV2) Start() { - // Initialize gRPC if not started - if !svc.c.IsStarted() { - err := svc.c.Start() - if err != nil { - return - } - } - - go svc.ReportStatus() - go svc.Fetch() -} - -func (svc *ServiceV2) Run(taskId primitive.ObjectID) (err error) { - return svc.run(taskId) -} - -func (svc *ServiceV2) Reset() { - svc.mu.Lock() - defer svc.mu.Unlock() -} - -func (svc *ServiceV2) Cancel(taskId primitive.ObjectID) (err error) { - r, err := svc.getRunner(taskId) - if err != nil { - return err - } - if err := r.Cancel(); err != nil { - return err - } - return nil -} - -func (svc *ServiceV2) Fetch() { - ticker := time.NewTicker(svc.fetchInterval) - for { - // wait - <-ticker.C - - // current node - n, err := svc.GetCurrentNode() - if err != nil { - continue - } - - // skip if node is not active or enabled - if !n.Active || !n.Enabled { - continue - } - - // validate if there are available runners - if svc.getRunnerCount() >= n.MaxRunners { - continue - } - - // stop - if svc.stopped { - ticker.Stop() - return - } - - // fetch task - tid, err := svc.fetch() - if err != nil { - trace.PrintError(err) - continue - } - - // skip if no task id - if tid.IsZero() { - continue - } - - // run task - if err := svc.run(tid); err != nil { - trace.PrintError(err) - t, err := svc.GetTaskById(tid) - if err != nil && t.Status != constants.TaskStatusCancelled { - t.Error = err.Error() - t.Status = constants.TaskStatusError - t.SetUpdated(t.CreatedBy) - _ = client.NewModelServiceV2[models.TaskV2]().ReplaceById(t.Id, *t) - continue - } - continue - } - } -} - -func (svc *ServiceV2) ReportStatus() { - for { - if svc.stopped { - return - } - - // report handler status - if err := svc.reportStatus(); err != nil { - trace.PrintError(err) - } - - // wait - time.Sleep(svc.reportInterval) - } -} - -func (svc *ServiceV2) IsSyncLocked(path string) (ok bool) { - _, ok = svc.syncLocks.Load(path) - return ok -} - -func (svc *ServiceV2) LockSync(path string) { - svc.syncLocks.Store(path, true) -} - -func (svc *ServiceV2) UnlockSync(path string) { - svc.syncLocks.Delete(path) -} - -//func (svc *ServiceV2) GetMaxRunners() (maxRunners int) { -// return svc.maxRunners -//} -// -//func (svc *ServiceV2) SetMaxRunners(maxRunners int) { -// svc.maxRunners = maxRunners -//} - -func (svc *ServiceV2) GetExitWatchDuration() (duration time.Duration) { - return svc.exitWatchDuration -} - -func (svc *ServiceV2) SetExitWatchDuration(duration time.Duration) { - svc.exitWatchDuration = duration -} - -func (svc *ServiceV2) GetFetchInterval() (interval time.Duration) { - return svc.fetchInterval -} - -func (svc *ServiceV2) SetFetchInterval(interval time.Duration) { - svc.fetchInterval = interval -} - -func (svc *ServiceV2) GetReportInterval() (interval time.Duration) { - return svc.reportInterval -} - -func (svc *ServiceV2) SetReportInterval(interval time.Duration) { - svc.reportInterval = interval -} - -func (svc *ServiceV2) GetCancelTimeout() (timeout time.Duration) { - return svc.cancelTimeout -} - -func (svc *ServiceV2) SetCancelTimeout(timeout time.Duration) { - svc.cancelTimeout = timeout -} - -func (svc *ServiceV2) GetNodeConfigService() (cfgSvc interfaces.NodeConfigService) { - return svc.cfgSvc -} - -func (svc *ServiceV2) GetCurrentNode() (n *models.NodeV2, err error) { - // node key - nodeKey := svc.cfgSvc.GetNodeKey() - - // current node - if svc.cfgSvc.IsMaster() { - n, err = service.NewModelServiceV2[models.NodeV2]().GetOne(bson.M{"key": nodeKey}, nil) - } else { - n, err = client.NewModelServiceV2[models.NodeV2]().GetOne(bson.M{"key": nodeKey}, nil) - } - if err != nil { - return nil, err - } - - return n, nil -} - -func (svc *ServiceV2) GetTaskById(id primitive.ObjectID) (t *models.TaskV2, err error) { - if svc.cfgSvc.IsMaster() { - t, err = service.NewModelServiceV2[models.TaskV2]().GetById(id) - } else { - t, err = client.NewModelServiceV2[models.TaskV2]().GetById(id) - } - if err != nil { - return nil, err - } - - return t, nil -} - -func (svc *ServiceV2) GetSpiderById(id primitive.ObjectID) (s *models.SpiderV2, err error) { - if svc.cfgSvc.IsMaster() { - s, err = service.NewModelServiceV2[models.SpiderV2]().GetById(id) - } else { - s, err = client.NewModelServiceV2[models.SpiderV2]().GetById(id) - } - if err != nil { - return nil, err - } - - return s, nil -} - -func (svc *ServiceV2) getRunners() (runners []*Runner) { - svc.mu.Lock() - defer svc.mu.Unlock() - svc.runners.Range(func(key, value interface{}) bool { - r := value.(Runner) - runners = append(runners, &r) - return true - }) - return runners -} - -func (svc *ServiceV2) getRunnerCount() (count int) { - n, err := svc.GetCurrentNode() - if err != nil { - trace.PrintError(err) - return - } - query := bson.M{ - "node_id": n.Id, - "status": constants.TaskStatusRunning, - } - if svc.cfgSvc.IsMaster() { - count, err = service.NewModelServiceV2[models.TaskV2]().Count(query) - if err != nil { - trace.PrintError(err) - return - } - } else { - count, err = client.NewModelServiceV2[models.TaskV2]().Count(query) - if err != nil { - trace.PrintError(err) - return - } - } - return count -} - -func (svc *ServiceV2) getRunner(taskId primitive.ObjectID) (r interfaces.TaskRunner, err error) { - log.Debugf("[TaskHandlerService] getRunner: taskId[%v]", taskId) - v, ok := svc.runners.Load(taskId) - if !ok { - return nil, trace.TraceError(errors2.ErrorTaskNotExists) - } - switch v.(type) { - case interfaces.TaskRunner: - r = v.(interfaces.TaskRunner) - default: - return nil, trace.TraceError(errors2.ErrorModelInvalidType) - } - return r, nil -} - -func (svc *ServiceV2) addRunner(taskId primitive.ObjectID, r interfaces.TaskRunner) { - log.Debugf("[TaskHandlerService] addRunner: taskId[%v]", taskId) - svc.runners.Store(taskId, r) -} - -func (svc *ServiceV2) deleteRunner(taskId primitive.ObjectID) { - log.Debugf("[TaskHandlerService] deleteRunner: taskId[%v]", taskId) - svc.runners.Delete(taskId) -} - -func (svc *ServiceV2) reportStatus() (err error) { - // current node - n, err := svc.GetCurrentNode() - if err != nil { - return err - } - - // available runners of handler - ar := n.MaxRunners - svc.getRunnerCount() - - // set available runners - n.AvailableRunners = ar - - // save node - n.SetUpdated(n.CreatedBy) - if svc.cfgSvc.IsMaster() { - err = service.NewModelServiceV2[models.NodeV2]().ReplaceById(n.Id, *n) - } else { - err = client.NewModelServiceV2[models.NodeV2]().ReplaceById(n.Id, *n) - } - if err != nil { - return err - } - - return nil -} - -func (svc *ServiceV2) fetch() (tid primitive.ObjectID, err error) { - ctx, cancel := context.WithTimeout(context.Background(), svc.fetchTimeout) - defer cancel() - res, err := svc.c.TaskClient.Fetch(ctx, svc.c.NewRequest(nil)) - if err != nil { - return tid, trace.TraceError(err) - } - if err := json.Unmarshal(res.Data, &tid); err != nil { - return tid, trace.TraceError(err) - } - return tid, nil -} - -func (svc *ServiceV2) run(taskId primitive.ObjectID) (err error) { - // attempt to get runner from pool - _, ok := svc.runners.Load(taskId) - if ok { - return trace.TraceError(errors2.ErrorTaskAlreadyExists) - } - - // create a new task runner - r, err := NewTaskRunnerV2(taskId, svc) - if err != nil { - return trace.TraceError(err) - } - - // add runner to pool - svc.addRunner(taskId, r) - - // create a goroutine to run task - go func() { - // delete runner from pool - defer svc.deleteRunner(r.GetTaskId()) - defer func(r interfaces.TaskRunner) { - err := r.CleanUp() - if err != nil { - log.Errorf("task[%s] clean up error: %v", r.GetTaskId().Hex(), err) - } - }(r) - // run task process (blocking) - // error or finish after task runner ends - if err := r.Run(); err != nil { - switch { - case errors.Is(err, constants.ErrTaskError): - log.Errorf("task[%s] finished with error: %v", r.GetTaskId().Hex(), err) - case errors.Is(err, constants.ErrTaskCancelled): - log.Errorf("task[%s] cancelled", r.GetTaskId().Hex()) - default: - log.Errorf("task[%s] finished with unknown error: %v", r.GetTaskId().Hex(), err) - } - } - log.Infof("task[%s] finished", r.GetTaskId().Hex()) - }() - - return nil -} - -func newTaskHandlerServiceV2() (svc2 *ServiceV2, err error) { - // service - svc := &ServiceV2{ - exitWatchDuration: 60 * time.Second, - fetchInterval: 1 * time.Second, - fetchTimeout: 15 * time.Second, - reportInterval: 5 * time.Second, - cancelTimeout: 5 * time.Second, - mu: sync.Mutex{}, - runners: sync.Map{}, - syncLocks: sync.Map{}, - } - - // dependency injection - svc.cfgSvc = nodeconfig.GetNodeConfigService() - - // grpc client - svc.c = grpcclient.GetGrpcClientV2() - - log.Debugf("[NewTaskHandlerService] svc[cfgPath: %s]", svc.cfgSvc.GetConfigPath()) - - return svc, nil -} - -var _serviceV2 *ServiceV2 -var _serviceV2Once = new(sync.Once) - -func GetTaskHandlerServiceV2() (svr *ServiceV2, err error) { - if _serviceV2 != nil { - return _serviceV2, nil - } - _serviceV2Once.Do(func() { - _serviceV2, err = newTaskHandlerServiceV2() - if err != nil { - log.Errorf("failed to create task handler service: %v", err) - } - }) - if err != nil { - return nil, err - } - return _serviceV2, nil -} diff --git a/core/task/log/constants.go b/core/task/log/constants.go index 736768511..d89ac7a68 100644 --- a/core/task/log/constants.go +++ b/core/task/log/constants.go @@ -6,7 +6,6 @@ const ( const ( DriverTypeFile = "file" // raw file - DriverTypeFs = "fs" // file system (SeaweedFS) DriverTypeMongo = "mongo" // mongodb DriverTypeEs = "es" // elastic search ) diff --git a/core/task/log/driver.go b/core/task/log/driver.go index 139ec44d4..1a81ced86 100644 --- a/core/task/log/driver.go +++ b/core/task/log/driver.go @@ -1,18 +1,16 @@ package log -func GetLogDriver(logDriverType string) (driver Driver, err error) { +import "fmt" + +func GetLogDriver(logDriverType string) Driver { switch logDriverType { case DriverTypeFile: - driver, err = GetFileLogDriver() - if err != nil { - return driver, err - } + return GetFileLogDriver() case DriverTypeMongo: - return driver, ErrNotImplemented + panic("mongo driver not implemented") case DriverTypeEs: - return driver, ErrNotImplemented + panic("es driver not implemented") default: - return driver, ErrInvalidType + panic(fmt.Sprintf("invalid log driver type: %s", logDriverType)) } - return driver, nil } diff --git a/core/task/log/file_driver.go b/core/task/log/file_driver.go index 852c0b21c..ac5367e3a 100644 --- a/core/task/log/file_driver.go +++ b/core/task/log/file_driver.go @@ -3,10 +3,9 @@ package log import ( "bufio" "bytes" - "errors" - "github.com/apex/log" + "fmt" + "github.com/crawlab-team/crawlab/core/interfaces" "github.com/crawlab-team/crawlab/core/utils" - "github.com/crawlab-team/crawlab/trace" "github.com/spf13/viper" "io" "os" @@ -24,12 +23,11 @@ type FileLogDriver struct { // internals mu sync.Mutex + interfaces.Logger } -func (d *FileLogDriver) Init() (err error) { +func (d *FileLogDriver) Init() { go d.cleanup() - - return nil } func (d *FileLogDriver) Close() (err error) { @@ -45,18 +43,21 @@ func (d *FileLogDriver) WriteLine(id string, line string) (err error) { f, err := os.OpenFile(filePath, os.O_WRONLY|os.O_APPEND|os.O_CREATE, os.FileMode(0760)) if err != nil { - return trace.TraceError(err) + d.Errorf("open file error: %v", err) + return err } defer func(f *os.File) { err := f.Close() if err != nil { - log.Errorf("close file error: %s", err.Error()) + d.Errorf("close file error: %v", err) + return } }(f) _, err = f.WriteString(line + "\n") if err != nil { - return trace.TraceError(err) + d.Errorf("write file error: %v", err) + return err } return nil @@ -65,6 +66,7 @@ func (d *FileLogDriver) WriteLine(id string, line string) (err error) { func (d *FileLogDriver) WriteLines(id string, lines []string) (err error) { linesString := strings.Join(lines, "\n") if err := d.WriteLine(id, linesString); err != nil { + d.Errorf("write line error: %v", err) return err } return nil @@ -72,7 +74,9 @@ func (d *FileLogDriver) WriteLines(id string, lines []string) (err error) { func (d *FileLogDriver) Find(id string, pattern string, skip int, limit int) (lines []string, err error) { if pattern != "" { - return lines, errors.New("not implemented") + err = fmt.Errorf("find with pattern not implemented") + d.Errorf("%v", err) + return lines, err } if !utils.Exists(d.getLogFilePath(id, d.logFileName)) { return nil, nil @@ -80,7 +84,8 @@ func (d *FileLogDriver) Find(id string, pattern string, skip int, limit int) (li f, err := os.Open(d.getLogFilePath(id, d.logFileName)) if err != nil { - return nil, trace.TraceError(err) + d.Errorf("failed to open file: %v", err) + return nil, err } defer f.Close() @@ -112,7 +117,9 @@ func (d *FileLogDriver) Find(id string, pattern string, skip int, limit int) (li func (d *FileLogDriver) Count(id string, pattern string) (n int, err error) { if pattern != "" { - return n, errors.New("not implemented") + err = fmt.Errorf("count with pattern not implemented") + d.Errorf("%v", err) + return n, err } if !utils.Exists(d.getLogFilePath(id, d.logFileName)) { return 0, nil @@ -120,7 +127,8 @@ func (d *FileLogDriver) Count(id string, pattern string) (n int, err error) { f, err := os.Open(d.getLogFilePath(id, d.logFileName)) if err != nil { - return n, trace.TraceError(err) + d.Errorf("failed to open file: %v", err) + return n, err } return d.lineCounter(f) } @@ -129,12 +137,8 @@ func (d *FileLogDriver) Flush() (err error) { return nil } -func (d *FileLogDriver) getLogPath() (logPath string) { - return viper.GetString("log.path") -} - func (d *FileLogDriver) getBasePath(id string) (filePath string) { - return filepath.Join(d.getLogPath(), id) + return filepath.Join(utils.GetTaskLogPath(), id) } func (d *FileLogDriver) getMetadataPath(id string) (filePath string) { @@ -146,10 +150,9 @@ func (d *FileLogDriver) getLogFilePath(id, fileName string) (filePath string) { } func (d *FileLogDriver) getLogFiles(id string) (files []os.FileInfo) { - // 增加了对返回异常的捕获 files, err := utils.ListDir(d.getBasePath(id)) if err != nil { - trace.PrintError(err) + d.Errorf("failed to list log files: %v", err) return nil } return @@ -158,7 +161,8 @@ func (d *FileLogDriver) getLogFiles(id string) (files []os.FileInfo) { func (d *FileLogDriver) initDir(id string) { if !utils.Exists(d.getBasePath(id)) { if err := os.MkdirAll(d.getBasePath(id), os.FileMode(0770)); err != nil { - trace.PrintError(err) + d.Errorf("failed to create log directory: %s", d.getBasePath(id)) + return } } } @@ -223,62 +227,64 @@ func (d *FileLogDriver) getTtl() time.Duration { } func (d *FileLogDriver) cleanup() { - if d.getLogPath() == "" { + // check if log path is set + if utils.GetTaskLogPath() == "" { + d.Errorf("log path is not set") return } - if !utils.Exists(d.getLogPath()) { - if err := os.MkdirAll(d.getLogPath(), os.FileMode(0770)); err != nil { - log.Errorf("failed to create log directory: %s", d.getLogPath()) - trace.PrintError(err) + + // check if log path exists + if !utils.Exists(utils.GetTaskLogPath()) { + // create log directory if not exists + if err := os.MkdirAll(utils.GetTaskLogPath(), os.FileMode(0770)); err != nil { + d.Errorf("failed to create log directory: %s. error: %v", utils.GetTaskLogPath(), err) return } } + + ticker := time.NewTicker(10 * time.Minute) + for { - // 增加对目录不存在的判断 - dirs, err := utils.ListDir(d.getLogPath()) - if err != nil { - trace.PrintError(err) - time.Sleep(10 * time.Minute) - continue - } - for _, dir := range dirs { - if time.Now().After(dir.ModTime().Add(d.getTtl())) { - if err := os.RemoveAll(d.getBasePath(dir.Name())); err != nil { - trace.PrintError(err) - continue + select { + case <-ticker.C: + dirs, err := utils.ListDir(utils.GetTaskLogPath()) + if err != nil { + d.Errorf("failed to list log directory: %s. error: %v", utils.GetTaskLogPath(), err) + continue + } + for _, dir := range dirs { + if time.Now().After(dir.ModTime().Add(d.getTtl())) { + if err := os.RemoveAll(d.getBasePath(dir.Name())); err != nil { + d.Errorf("failed to remove outdated log directory: %s. error: %s", d.getBasePath(dir.Name()), err) + continue + } + d.Infof("removed outdated log directory: %s", d.getBasePath(dir.Name())) } - log.Infof("removed outdated log directory: %s", d.getBasePath(dir.Name())) } } - - time.Sleep(10 * time.Minute) } } -var logDriver Driver - -func newFileLogDriver() (driver Driver, err error) { +func newFileLogDriver() Driver { // driver - driver = &FileLogDriver{ + driver := &FileLogDriver{ logFileName: "log.txt", mu: sync.Mutex{}, + Logger: utils.NewLogger("FileLogDriver"), } // init - if err := driver.Init(); err != nil { - return nil, err - } + driver.Init() - return driver, nil + return driver } -func GetFileLogDriver() (driver Driver, err error) { - if logDriver != nil { - return logDriver, nil - } - logDriver, err = newFileLogDriver() - if err != nil { - return nil, err - } - return logDriver, nil +var logDriver Driver +var logDriverOnce sync.Once + +func GetFileLogDriver() Driver { + logDriverOnce.Do(func() { + logDriver = newFileLogDriver() + }) + return logDriver } diff --git a/core/task/log/file_driver_test.go b/core/task/log/file_driver_test.go index 260edf717..c8e9c96d8 100644 --- a/core/task/log/file_driver_test.go +++ b/core/task/log/file_driver_test.go @@ -2,36 +2,47 @@ package log import ( "fmt" - "github.com/stretchr/testify/require" - "go.mongodb.org/mongo-driver/bson/primitive" "os" + "path/filepath" "strings" "testing" + + "github.com/spf13/viper" + "github.com/stretchr/testify/require" + "go.mongodb.org/mongo-driver/bson/primitive" ) +var testLogDir string + func setupFileDriverTest() { - cleanupFileDriverTest() - _ = os.MkdirAll("./tmp", os.ModePerm) + var err error + testLogDir, err = os.MkdirTemp("", "crawlab-test-logs") + if err != nil { + panic(err) + } + // Set the log path in viper configuration + viper.Set("log.path", testLogDir) } func cleanupFileDriverTest() { - _ = os.RemoveAll("./tmp") + _ = os.RemoveAll(testLogDir) + // Reset the log path in viper configuration + viper.Set("log.path", "") } func TestFileDriver_WriteLine(t *testing.T) { setupFileDriverTest() t.Cleanup(cleanupFileDriverTest) - d, err := newFileLogDriver(nil) - require.Nil(t, err) + d := newFileLogDriver() defer d.Close() id := primitive.NewObjectID() - err = d.WriteLine(id.Hex(), "it works") + err := d.WriteLine(id.Hex(), "it works") require.Nil(t, err) - logFilePath := fmt.Sprintf("/var/log/crawlab/%s/log.txt", id.Hex()) + logFilePath := filepath.Join(testLogDir, id.Hex(), "log.txt") require.FileExists(t, logFilePath) text, err := os.ReadFile(logFilePath) require.Nil(t, err) @@ -42,18 +53,17 @@ func TestFileDriver_WriteLines(t *testing.T) { setupFileDriverTest() t.Cleanup(cleanupFileDriverTest) - d, err := newFileLogDriver(nil) - require.Nil(t, err) + d := newFileLogDriver() defer d.Close() id := primitive.NewObjectID() for i := 0; i < 100; i++ { - err = d.WriteLine(id.Hex(), "it works") + err := d.WriteLine(id.Hex(), "it works") require.Nil(t, err) } - logFilePath := fmt.Sprintf("/var/log/crawlab/%s/log.txt", id.Hex()) + logFilePath := filepath.Join(testLogDir, id.Hex(), "log.txt") require.FileExists(t, logFilePath) text, err := os.ReadFile(logFilePath) require.Nil(t, err) @@ -66,8 +76,7 @@ func TestFileDriver_Find(t *testing.T) { setupFileDriverTest() t.Cleanup(cleanupFileDriverTest) - d, err := newFileLogDriver(nil) - require.Nil(t, err) + d := newFileLogDriver() defer d.Close() id := primitive.NewObjectID() @@ -79,14 +88,14 @@ func TestFileDriver_Find(t *testing.T) { line := fmt.Sprintf("line: %d", i*batch+j+1) lines = append(lines, line) } - err = d.WriteLines(id.Hex(), lines) + err := d.WriteLines(id.Hex(), lines) require.Nil(t, err) lines = []string{} } driver := d - lines, err = driver.Find(id.Hex(), "", 0, 10) + lines, err := driver.Find(id.Hex(), "", 0, 10) require.Nil(t, err) require.Equal(t, 10, len(lines)) require.Equal(t, "line: 1", lines[0]) diff --git a/core/task/log/interface.go b/core/task/log/interface.go index fd3745cb9..aaf0f6649 100644 --- a/core/task/log/interface.go +++ b/core/task/log/interface.go @@ -1,7 +1,7 @@ package log type Driver interface { - Init() (err error) + Init() Close() (err error) WriteLine(id string, line string) (err error) WriteLines(id string, lines []string) (err error) diff --git a/core/task/scheduler/options.go b/core/task/scheduler/options.go deleted file mode 100644 index a6600fab2..000000000 --- a/core/task/scheduler/options.go +++ /dev/null @@ -1,20 +0,0 @@ -package scheduler - -import ( - "github.com/crawlab-team/crawlab/core/interfaces" - "time" -) - -type Option func(svc interfaces.TaskSchedulerService) - -func WithConfigPath(path string) Option { - return func(svc interfaces.TaskSchedulerService) { - svc.SetConfigPath(path) - } -} - -func WithInterval(interval time.Duration) Option { - return func(svc interfaces.TaskSchedulerService) { - svc.SetInterval(interval) - } -} diff --git a/core/task/scheduler/service.go b/core/task/scheduler/service.go index 3644aa172..53c552bda 100644 --- a/core/task/scheduler/service.go +++ b/core/task/scheduler/service.go @@ -1,181 +1,202 @@ package scheduler import ( + errors2 "errors" + "fmt" "github.com/crawlab-team/crawlab/core/constants" - "github.com/crawlab-team/crawlab/core/container" - "github.com/crawlab-team/crawlab/core/errors" + "github.com/crawlab-team/crawlab/core/grpc/server" "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/models/delegate" "github.com/crawlab-team/crawlab/core/models/models" "github.com/crawlab-team/crawlab/core/models/service" - "github.com/crawlab-team/crawlab/core/task" - "github.com/crawlab-team/crawlab/db/mongo" - grpc "github.com/crawlab-team/crawlab/grpc" - "github.com/crawlab-team/crawlab/trace" + "github.com/crawlab-team/crawlab/core/task/handler" + "github.com/crawlab-team/crawlab/core/utils" + "github.com/crawlab-team/crawlab/grpc" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" mongo2 "go.mongodb.org/mongo-driver/mongo" + "sync" "time" ) type Service struct { // dependencies - interfaces.TaskBaseService - nodeCfgSvc interfaces.NodeConfigService - modelSvc service.ModelService - svr interfaces.GrpcServer - handlerSvc interfaces.TaskHandlerService + svr *server.GrpcServer + handlerSvc *handler.Service // settings interval time.Duration + + // internals + interfaces.Logger } func (svc *Service) Start() { go svc.initTaskStatus() go svc.cleanupTasks() - svc.Wait() - svc.Stop() + utils.DefaultWait() } -func (svc *Service) Enqueue(t interfaces.Task) (t2 interfaces.Task, err error) { +func (svc *Service) Enqueue(t *models.Task, by primitive.ObjectID) (t2 *models.Task, err error) { // set task status - t.SetStatus(constants.TaskStatusPending) - - // user - var u *models.User - if !t.GetUserId().IsZero() { - u, _ = svc.modelSvc.GetUserById(t.GetUserId()) - } + t.Status = constants.TaskStatusPending + t.SetCreated(by) + t.SetUpdated(by) // add task - if err = delegate.NewModelDelegate(t, u).Add(); err != nil { + taskModelSvc := service.NewModelService[models.Task]() + t.Id, err = taskModelSvc.InsertOne(*t) + if err != nil { return nil, err } - // task queue item - tq := &models.TaskQueueItem{ - Id: t.GetId(), - Priority: t.GetPriority(), - NodeId: t.GetNodeId(), - } - // task stat - ts := &models.TaskStat{ - Id: t.GetId(), - CreateTs: time.Now(), - } - - // enqueue task - _, err = mongo.GetMongoCol(interfaces.ModelColNameTaskQueue).Insert(tq) - if err != nil { - return nil, trace.TraceError(err) - } + ts := models.TaskStat{} + ts.SetId(t.Id) + ts.SetCreated(by) + ts.SetUpdated(by) // add task stat - _, err = mongo.GetMongoCol(interfaces.ModelColNameTaskStat).Insert(ts) + _, err = service.NewModelService[models.TaskStat]().InsertOne(ts) if err != nil { - return nil, trace.TraceError(err) + svc.Errorf("failed to add task stat: %s", t.Id.Hex()) + return nil, err } // success return t, nil } -func (svc *Service) Cancel(id primitive.ObjectID, args ...interface{}) (err error) { +func (svc *Service) Cancel(id, by primitive.ObjectID, force bool) (err error) { // task - t, err := svc.modelSvc.GetTaskById(id) + t, err := service.NewModelService[models.Task]().GetById(id) if err != nil { - return trace.TraceError(err) + svc.Errorf("task not found: %s", id.Hex()) + return err } // initial status initialStatus := t.Status - // set task status as "cancelled" - _ = svc.SaveTask(t, constants.TaskStatusCancelled) - - // set status of pending tasks as "cancelled" and remove from task item queue + // set status of pending tasks as "cancelled" if initialStatus == constants.TaskStatusPending { - // remove from task item queue - if err := mongo.GetMongoCol(interfaces.ModelColNameTaskQueue).DeleteId(t.GetId()); err != nil { - return trace.TraceError(err) - } - return nil + t.Status = constants.TaskStatusCancelled + return svc.SaveTask(t, by) } // whether task is running on master node isMasterTask, err := svc.isMasterNode(t) if err != nil { - // when error, force status being set as "cancelled" - return svc.SaveTask(t, constants.TaskStatusCancelled) - } - - // node - n, err := svc.modelSvc.GetNodeById(t.GetNodeId()) - if err != nil { - return trace.TraceError(err) + err := fmt.Errorf("failed to check if task is running on master node: %s", t.Id.Hex()) + t.Status = constants.TaskStatusAbnormal + t.Error = err.Error() + return svc.SaveTask(t, by) } if isMasterTask { // cancel task on master - if err := svc.handlerSvc.Cancel(id); err != nil { - return trace.TraceError(err) - } - // cancel success - return nil + return svc.cancelOnMaster(t, by, force) } else { // send to cancel task on worker nodes - if err := svc.svr.SendStreamMessageWithData("node:"+n.GetKey(), grpc.StreamMessageCode_CANCEL_TASK, t); err != nil { - return trace.TraceError(err) - } - // cancel success - return nil + return svc.cancelOnWorker(t, by, force) } } +func (svc *Service) cancelOnMaster(t *models.Task, by primitive.ObjectID, force bool) (err error) { + if err := svc.handlerSvc.Cancel(t.Id, force); err != nil { + svc.Errorf("failed to cancel task on master: %s", t.Id.Hex()) + return err + } + + // set task status as "cancelled" + t.Status = constants.TaskStatusCancelled + return svc.SaveTask(t, by) +} + +func (svc *Service) cancelOnWorker(t *models.Task, by primitive.ObjectID, force bool) (err error) { + // get subscribe stream + stream, ok := svc.svr.TaskSvr.GetSubscribeStream(t.Id) + if !ok { + err := fmt.Errorf("stream not found for task: %s", t.Id.Hex()) + svc.Errorf(err.Error()) + t.Status = constants.TaskStatusAbnormal + t.Error = err.Error() + return svc.SaveTask(t, by) + } + + // send cancel request + err = stream.Send(&grpc.TaskServiceSubscribeResponse{ + Code: grpc.TaskServiceSubscribeCode_CANCEL, + TaskId: t.Id.Hex(), + Force: force, + }) + if err != nil { + svc.Errorf("failed to send cancel request to worker: %s", t.Id.Hex()) + return err + } + + return nil +} + func (svc *Service) SetInterval(interval time.Duration) { svc.interval = interval } +func (svc *Service) SaveTask(t *models.Task, by primitive.ObjectID) (err error) { + if t.Id.IsZero() { + t.SetCreated(by) + t.SetUpdated(by) + _, err = service.NewModelService[models.Task]().InsertOne(*t) + return err + } else { + t.SetUpdated(by) + return service.NewModelService[models.Task]().ReplaceById(t.Id, *t) + } +} + // initTaskStatus initialize task status of existing tasks func (svc *Service) initTaskStatus() { // set status of running tasks as TaskStatusAbnormal - runningTasks, err := svc.modelSvc.GetTaskList(bson.M{ + runningTasks, err := service.NewModelService[models.Task]().GetMany(bson.M{ "status": bson.M{ "$in": []string{ constants.TaskStatusPending, + constants.TaskStatusAssigned, constants.TaskStatusRunning, }, }, }, nil) if err != nil { - if err == mongo2.ErrNoDocuments { + if errors2.Is(err, mongo2.ErrNoDocuments) { return } - trace.PrintError(err) + svc.Errorf("failed to get running tasks: %v", err) + return } for _, t := range runningTasks { go func(t *models.Task) { - if err := svc.SaveTask(t, constants.TaskStatusAbnormal); err != nil { - trace.PrintError(err) + t.Status = constants.TaskStatusAbnormal + if err := svc.SaveTask(t, primitive.NilObjectID); err != nil { + svc.Errorf("failed to set task status as TaskStatusAbnormal: %s", t.Id.Hex()) + return } }(&t) } - if err := svc.modelSvc.GetBaseService(interfaces.ModelIdTaskQueue).DeleteList(nil); err != nil { - return - } } func (svc *Service) isMasterNode(t *models.Task) (ok bool, err error) { - if t.GetNodeId().IsZero() { - return false, trace.TraceError(errors.ErrorTaskNoNodeId) + if t.NodeId.IsZero() { + err = fmt.Errorf("task %s has no node id", t.Id.Hex()) + svc.Errorf("%v", err) + return false, err } - n, err := svc.modelSvc.GetNodeById(t.GetNodeId()) + n, err := service.NewModelService[models.Node]().GetById(t.NodeId) if err != nil { - if err == mongo2.ErrNoDocuments { - return false, trace.TraceError(errors.ErrorTaskNodeNotFound) + if errors2.Is(err, mongo2.ErrNoDocuments) { + svc.Errorf("node not found: %s", t.NodeId.Hex()) + return false, err } - return false, trace.TraceError(err) + svc.Errorf("failed to get node: %s", t.NodeId.Hex()) + return false, err } return n.IsMaster, nil } @@ -183,8 +204,8 @@ func (svc *Service) isMasterNode(t *models.Task) (ok bool, err error) { func (svc *Service) cleanupTasks() { for { // task stats over 30 days ago - taskStats, err := svc.modelSvc.GetTaskStatList(bson.M{ - "create_ts": bson.M{ + taskStats, err := service.NewModelService[models.TaskStat]().GetMany(bson.M{ + "created_ts": bson.M{ "$lt": time.Now().Add(-30 * 24 * time.Hour), }, }, nil) @@ -201,17 +222,17 @@ func (svc *Service) cleanupTasks() { if len(ids) > 0 { // remove tasks - if err := svc.modelSvc.GetBaseService(interfaces.ModelIdTask).DeleteList(bson.M{ + if err := service.NewModelService[models.Task]().DeleteMany(bson.M{ "_id": bson.M{"$in": ids}, }); err != nil { - trace.PrintError(err) + svc.Warnf("failed to remove tasks: %v", err) } // remove task stats - if err := svc.modelSvc.GetBaseService(interfaces.ModelIdTaskStat).DeleteList(bson.M{ + if err := service.NewModelService[models.TaskStat]().DeleteMany(bson.M{ "_id": bson.M{"$in": ids}, }); err != nil { - trace.PrintError(err) + svc.Warnf("failed to remove task stats: %v", err) } } @@ -219,46 +240,20 @@ func (svc *Service) cleanupTasks() { } } -func NewTaskSchedulerService() (svc2 interfaces.TaskSchedulerService, err error) { - // base service - baseSvc, err := task.NewBaseService() - if err != nil { - return nil, trace.TraceError(err) - } - - // service - svc := &Service{ - TaskBaseService: baseSvc, - interval: 5 * time.Second, - } - - // dependency injection - if err := container.GetContainer().Invoke(func( - nodeCfgSvc interfaces.NodeConfigService, - modelSvc service.ModelService, - svr interfaces.GrpcServer, - handlerSvc interfaces.TaskHandlerService, - ) { - svc.nodeCfgSvc = nodeCfgSvc - svc.modelSvc = modelSvc - svc.svr = svr - svc.handlerSvc = handlerSvc - }); err != nil { - return nil, err +func newTaskSchedulerService() *Service { + return &Service{ + interval: 5 * time.Second, + svr: server.GetGrpcServer(), + handlerSvc: handler.GetTaskHandlerService(), } - - return svc, nil } -var svc interfaces.TaskSchedulerService +var _service *Service +var _serviceOnce sync.Once -func GetTaskSchedulerService() (svr interfaces.TaskSchedulerService, err error) { - if svc != nil { - return svc, nil - } - svc, err = NewTaskSchedulerService() - if err != nil { - return nil, err - } - return svc, nil +func GetTaskSchedulerService() *Service { + _serviceOnce.Do(func() { + _service = newTaskSchedulerService() + }) + return _service } diff --git a/core/task/scheduler/service_v2.go b/core/task/scheduler/service_v2.go deleted file mode 100644 index 740bf3e3c..000000000 --- a/core/task/scheduler/service_v2.go +++ /dev/null @@ -1,265 +0,0 @@ -package scheduler - -import ( - errors2 "errors" - "github.com/apex/log" - "github.com/crawlab-team/crawlab/core/constants" - "github.com/crawlab-team/crawlab/core/errors" - "github.com/crawlab-team/crawlab/core/grpc/server" - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/core/models/service" - nodeconfig "github.com/crawlab-team/crawlab/core/node/config" - "github.com/crawlab-team/crawlab/core/task/handler" - "github.com/crawlab-team/crawlab/core/utils" - grpc "github.com/crawlab-team/crawlab/grpc" - "github.com/crawlab-team/crawlab/trace" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" - mongo2 "go.mongodb.org/mongo-driver/mongo" - "time" -) - -type ServiceV2 struct { - // dependencies - nodeCfgSvc interfaces.NodeConfigService - svr *server.GrpcServerV2 - handlerSvc *handler.ServiceV2 - - // settings - interval time.Duration -} - -func (svc *ServiceV2) Start() { - go svc.initTaskStatus() - go svc.cleanupTasks() - utils.DefaultWait() -} - -func (svc *ServiceV2) Enqueue(t *models.TaskV2, by primitive.ObjectID) (t2 *models.TaskV2, err error) { - // set task status - t.Status = constants.TaskStatusPending - t.SetCreatedBy(by) - t.SetUpdated(by) - - // add task - taskModelSvc := service.NewModelServiceV2[models.TaskV2]() - _, err = taskModelSvc.InsertOne(*t) - if err != nil { - return nil, err - } - - // task queue item - tq := models.TaskQueueItemV2{ - Priority: t.Priority, - NodeId: t.NodeId, - } - tq.SetId(t.Id) - - // task stat - ts := models.TaskStatV2{ - CreateTs: time.Now(), - } - ts.SetId(t.Id) - - // enqueue task - _, err = service.NewModelServiceV2[models.TaskQueueItemV2]().InsertOne(tq) - if err != nil { - return nil, trace.TraceError(err) - } - - // add task stat - _, err = service.NewModelServiceV2[models.TaskStatV2]().InsertOne(ts) - if err != nil { - return nil, trace.TraceError(err) - } - - // success - return t, nil -} - -func (svc *ServiceV2) Cancel(id primitive.ObjectID, by primitive.ObjectID) (err error) { - // task - t, err := service.NewModelServiceV2[models.TaskV2]().GetById(id) - if err != nil { - return trace.TraceError(err) - } - - // initial status - initialStatus := t.Status - - // set task status as "cancelled" - t.Status = constants.TaskStatusCancelled - _ = svc.SaveTask(t, by) - - // set status of pending tasks as "cancelled" and remove from task item queue - if initialStatus == constants.TaskStatusPending { - // remove from task item queue - if err := service.NewModelServiceV2[models.TaskQueueItemV2]().DeleteById(t.Id); err != nil { - return trace.TraceError(err) - } - return nil - } - - // whether task is running on master node - isMasterTask, err := svc.isMasterNode(t) - if err != nil { - // when error, force status being set as "cancelled" - t.Status = constants.TaskStatusCancelled - return svc.SaveTask(t, by) - } - - // node - n, err := service.NewModelServiceV2[models.NodeV2]().GetById(t.NodeId) - if err != nil { - return trace.TraceError(err) - } - - if isMasterTask { - // cancel task on master - if err := svc.handlerSvc.Cancel(id); err != nil { - return trace.TraceError(err) - } - // cancel success - return nil - } else { - // send to cancel task on worker nodes - if err := svc.svr.SendStreamMessageWithData("node:"+n.Key, grpc.StreamMessageCode_CANCEL_TASK, t); err != nil { - return trace.TraceError(err) - } - // cancel success - return nil - } -} - -func (svc *ServiceV2) SetInterval(interval time.Duration) { - svc.interval = interval -} - -func (svc *ServiceV2) SaveTask(t *models.TaskV2, by primitive.ObjectID) (err error) { - if t.Id.IsZero() { - t.SetCreated(by) - t.SetUpdated(by) - _, err = service.NewModelServiceV2[models.TaskV2]().InsertOne(*t) - return err - } else { - t.SetUpdated(by) - return service.NewModelServiceV2[models.TaskV2]().ReplaceById(t.Id, *t) - } -} - -// initTaskStatus initialize task status of existing tasks -func (svc *ServiceV2) initTaskStatus() { - // set status of running tasks as TaskStatusAbnormal - runningTasks, err := service.NewModelServiceV2[models.TaskV2]().GetMany(bson.M{ - "status": bson.M{ - "$in": []string{ - constants.TaskStatusPending, - constants.TaskStatusRunning, - }, - }, - }, nil) - if err != nil { - if errors2.Is(err, mongo2.ErrNoDocuments) { - return - } - trace.PrintError(err) - } - for _, t := range runningTasks { - go func(t *models.TaskV2) { - t.Status = constants.TaskStatusAbnormal - if err := svc.SaveTask(t, primitive.NilObjectID); err != nil { - trace.PrintError(err) - } - }(&t) - } - if err := service.NewModelServiceV2[models.TaskQueueItemV2]().DeleteMany(nil); err != nil { - return - } -} - -func (svc *ServiceV2) isMasterNode(t *models.TaskV2) (ok bool, err error) { - if t.NodeId.IsZero() { - return false, trace.TraceError(errors.ErrorTaskNoNodeId) - } - n, err := service.NewModelServiceV2[models.NodeV2]().GetById(t.NodeId) - if err != nil { - if errors2.Is(err, mongo2.ErrNoDocuments) { - return false, trace.TraceError(errors.ErrorTaskNodeNotFound) - } - return false, trace.TraceError(err) - } - return n.IsMaster, nil -} - -func (svc *ServiceV2) cleanupTasks() { - for { - // task stats over 30 days ago - taskStats, err := service.NewModelServiceV2[models.TaskStatV2]().GetMany(bson.M{ - "create_ts": bson.M{ - "$lt": time.Now().Add(-30 * 24 * time.Hour), - }, - }, nil) - if err != nil { - time.Sleep(30 * time.Minute) - continue - } - - // task ids - var ids []primitive.ObjectID - for _, ts := range taskStats { - ids = append(ids, ts.Id) - } - - if len(ids) > 0 { - // remove tasks - if err := service.NewModelServiceV2[models.TaskV2]().DeleteMany(bson.M{ - "_id": bson.M{"$in": ids}, - }); err != nil { - trace.PrintError(err) - } - - // remove task stats - if err := service.NewModelServiceV2[models.TaskStatV2]().DeleteMany(bson.M{ - "_id": bson.M{"$in": ids}, - }); err != nil { - trace.PrintError(err) - } - } - - time.Sleep(30 * time.Minute) - } -} - -func NewTaskSchedulerServiceV2() (svc2 *ServiceV2, err error) { - // service - svc := &ServiceV2{ - interval: 5 * time.Second, - } - svc.nodeCfgSvc = nodeconfig.GetNodeConfigService() - svc.svr, err = server.GetGrpcServerV2() - if err != nil { - log.Errorf("failed to get grpc server: %v", err) - return nil, err - } - svc.handlerSvc, err = handler.GetTaskHandlerServiceV2() - if err != nil { - log.Errorf("failed to get task handler service: %v", err) - return nil, err - } - - return svc, nil -} - -var svcV2 *ServiceV2 - -func GetTaskSchedulerServiceV2() (svr *ServiceV2, err error) { - if svcV2 != nil { - return svcV2, nil - } - svcV2, err = NewTaskSchedulerServiceV2() - if err != nil { - return nil, err - } - return svcV2, nil -} diff --git a/core/task/stats/options.go b/core/task/stats/options.go deleted file mode 100644 index 37e7a8239..000000000 --- a/core/task/stats/options.go +++ /dev/null @@ -1,11 +0,0 @@ -package stats - -import "github.com/crawlab-team/crawlab/core/interfaces" - -type Option func(service interfaces.TaskStatsService) - -func WithConfigPath(path string) Option { - return func(svc interfaces.TaskStatsService) { - svc.SetConfigPath(path) - } -} diff --git a/core/task/stats/service.go b/core/task/stats/service.go index b6964c297..d06e1c5fc 100644 --- a/core/task/stats/service.go +++ b/core/task/stats/service.go @@ -1,31 +1,41 @@ package stats import ( - "github.com/crawlab-team/crawlab/core/container" + "github.com/crawlab-team/crawlab/core/constants" + "github.com/crawlab-team/crawlab/core/database" + interfaces2 "github.com/crawlab-team/crawlab/core/database/interfaces" "github.com/crawlab-team/crawlab/core/interfaces" + "github.com/crawlab-team/crawlab/core/models/models" "github.com/crawlab-team/crawlab/core/models/service" - "github.com/crawlab-team/crawlab/core/result" - "github.com/crawlab-team/crawlab/core/task" + "github.com/crawlab-team/crawlab/core/mongo" + nodeconfig "github.com/crawlab-team/crawlab/core/node/config" "github.com/crawlab-team/crawlab/core/task/log" - "github.com/crawlab-team/crawlab/db/mongo" - "github.com/crawlab-team/crawlab/trace" + "github.com/crawlab-team/crawlab/core/utils" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" "sync" "time" ) +type databaseServiceItem struct { + taskId primitive.ObjectID + spiderId primitive.ObjectID + dbId primitive.ObjectID + dbSvc interfaces2.DatabaseService + tableName string + time time.Time +} + type Service struct { // dependencies - interfaces.TaskBaseService nodeCfgSvc interfaces.NodeConfigService - modelSvc service.ModelService // internals - mu sync.Mutex - resultServices sync.Map - rsTtl time.Duration - logDriver log.Driver + mu sync.Mutex + databaseServiceItems map[string]*databaseServiceItem + databaseServiceTll time.Duration + logDriver log.Driver + interfaces.Logger } func (svc *Service) Init() (err error) { @@ -33,15 +43,39 @@ func (svc *Service) Init() (err error) { return nil } -func (svc *Service) InsertData(id primitive.ObjectID, records ...interface{}) (err error) { - resultSvc, err := svc.getResultService(id) +func (svc *Service) InsertData(taskId primitive.ObjectID, records ...map[string]interface{}) (err error) { + count := 0 + + item, err := svc.getDatabaseServiceItem(taskId) if err != nil { return err } - if err := resultSvc.Insert(records...); err != nil { - return err + dbId := item.dbId + dbSvc := item.dbSvc + tableName := item.tableName + if utils.IsPro() && dbSvc != nil { + for _, record := range records { + if err := dbSvc.CreateRow(dbId, "", tableName, svc.normalizeRecord(item, record)); err != nil { + svc.Errorf("failed to insert data: %v", err) + continue + } + count++ + } + } else { + var recordsToInsert []interface{} + for _, record := range records { + recordsToInsert = append(recordsToInsert, svc.normalizeRecord(item, record)) + } + _, err = mongo.GetMongoCol(tableName).InsertMany(recordsToInsert) + if err != nil { + svc.Errorf("failed to insert data: %v", err) + return err + } + count = len(records) } - go svc.updateTaskStats(id, len(records)) + + go svc.updateTaskStats(taskId, count) + return nil } @@ -49,46 +83,68 @@ func (svc *Service) InsertLogs(id primitive.ObjectID, logs ...string) (err error return svc.logDriver.WriteLines(id.Hex(), logs) } -func (svc *Service) getResultService(id primitive.ObjectID) (resultSvc interfaces.ResultService, err error) { +func (svc *Service) getDatabaseServiceItem(taskId primitive.ObjectID) (item *databaseServiceItem, err error) { // atomic operation svc.mu.Lock() defer svc.mu.Unlock() // attempt to get from cache - res, _ := svc.resultServices.Load(id.Hex()) - if res != nil { + item, ok := svc.databaseServiceItems[taskId.Hex()] + if ok { // hit in cache - resultSvc, ok := res.(interfaces.ResultService) - resultSvc.SetTime(time.Now()) - if ok { - return resultSvc, nil - } + item.time = time.Now() + return item, nil } // task - t, err := svc.modelSvc.GetTaskById(id) + t, err := service.NewModelService[models.Task]().GetById(taskId) if err != nil { return nil, err } - // result service - resultSvc, err = result.GetResultService(t.SpiderId) + // spider + s, err := service.NewModelService[models.Spider]().GetById(t.SpiderId) if err != nil { return nil, err } + // database service + var dbSvc interfaces2.DatabaseService + if utils.IsPro() { + if dbRegSvc := database.GetDatabaseRegistryService(); dbRegSvc != nil { + dbSvc, err = dbRegSvc.GetDatabaseService(s.DataSourceId) + if err != nil { + return nil, err + } + } + } + + // item + item = &databaseServiceItem{ + taskId: taskId, + spiderId: s.Id, + dbId: s.DataSourceId, + dbSvc: dbSvc, + tableName: s.ColName, + time: time.Now(), + } + // store in cache - svc.resultServices.Store(id.Hex(), resultSvc) + svc.databaseServiceItems[taskId.Hex()] = item - return resultSvc, nil + return item, nil } func (svc *Service) updateTaskStats(id primitive.ObjectID, resultCount int) { - _ = mongo.GetMongoCol(interfaces.ModelColNameTaskStat).UpdateId(id, bson.M{ + err := service.NewModelService[models.TaskStat]().UpdateById(id, bson.M{ "$inc": bson.M{ "result_count": resultCount, }, }) + if err != nil { + svc.Errorf("failed to update task stats: %v", err) + return + } } func (svc *Service) cleanup() { @@ -96,13 +152,11 @@ func (svc *Service) cleanup() { // atomic operation svc.mu.Lock() - svc.resultServices.Range(func(key, value interface{}) bool { - rs := value.(interfaces.ResultService) - if time.Now().After(rs.GetTime().Add(svc.rsTtl)) { - svc.resultServices.Delete(key) + for k, v := range svc.databaseServiceItems { + if time.Now().After(v.time.Add(svc.databaseServiceTll)) { + delete(svc.databaseServiceItems, k) } - return true - }) + } svc.mu.Unlock() @@ -110,46 +164,41 @@ func (svc *Service) cleanup() { } } -func NewTaskStatsService() (svc2 interfaces.TaskStatsService, err error) { - // base service - baseSvc, err := task.NewBaseService() - if err != nil { - return nil, trace.TraceError(err) - } +func (svc *Service) normalizeRecord(item *databaseServiceItem, record map[string]interface{}) (res map[string]interface{}) { + res = record + + // set task id + res[constants.TaskKey] = item.taskId + // set spider id + res[constants.SpiderKey] = item.spiderId + + return res +} + +func NewTaskStatsService() *Service { // service svc := &Service{ - mu: sync.Mutex{}, - TaskBaseService: baseSvc, - resultServices: sync.Map{}, + mu: sync.Mutex{}, + databaseServiceItems: map[string]*databaseServiceItem{}, + databaseServiceTll: 10 * time.Minute, + Logger: utils.NewLogger("TaskStatsService"), } - // dependency injection - if err := container.GetContainer().Invoke(func(nodeCfgSvc interfaces.NodeConfigService, modelSvc service.ModelService) { - svc.nodeCfgSvc = nodeCfgSvc - svc.modelSvc = modelSvc - }); err != nil { - return nil, trace.TraceError(err) - } + svc.nodeCfgSvc = nodeconfig.GetNodeConfigService() // log driver - svc.logDriver, err = log.GetLogDriver(log.DriverTypeFile) - if err != nil { - return nil, err - } + svc.logDriver = log.GetLogDriver(log.DriverTypeFile) - return svc, nil + return svc } -var _service interfaces.TaskStatsService +var _service *Service +var _serviceOnce sync.Once -func GetTaskStatsService() (svr interfaces.TaskStatsService, err error) { - if _service != nil { - return _service, nil - } - _service, err = NewTaskStatsService() - if err != nil { - return nil, err - } - return _service, nil +func GetTaskStatsService() *Service { + _serviceOnce.Do(func() { + _service = NewTaskStatsService() + }) + return _service } diff --git a/core/task/stats/service_v2.go b/core/task/stats/service_v2.go deleted file mode 100644 index fc39cbd50..000000000 --- a/core/task/stats/service_v2.go +++ /dev/null @@ -1,142 +0,0 @@ -package stats - -import ( - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/core/models/service" - nodeconfig "github.com/crawlab-team/crawlab/core/node/config" - "github.com/crawlab-team/crawlab/core/result" - "github.com/crawlab-team/crawlab/core/task/log" - "github.com/crawlab-team/crawlab/trace" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" - "sync" - "time" -) - -type ServiceV2 struct { - // dependencies - nodeCfgSvc interfaces.NodeConfigService - - // internals - mu sync.Mutex - resultServices sync.Map - rsTtl time.Duration - logDriver log.Driver -} - -func (svc *ServiceV2) Init() (err error) { - go svc.cleanup() - return nil -} - -func (svc *ServiceV2) InsertData(id primitive.ObjectID, records ...interface{}) (err error) { - resultSvc, err := svc.getResultService(id) - if err != nil { - return err - } - if err := resultSvc.Insert(records...); err != nil { - return err - } - go svc.updateTaskStats(id, len(records)) - return nil -} - -func (svc *ServiceV2) InsertLogs(id primitive.ObjectID, logs ...string) (err error) { - return svc.logDriver.WriteLines(id.Hex(), logs) -} - -func (svc *ServiceV2) getResultService(id primitive.ObjectID) (resultSvc interfaces.ResultService, err error) { - // atomic operation - svc.mu.Lock() - defer svc.mu.Unlock() - - // attempt to get from cache - res, _ := svc.resultServices.Load(id.Hex()) - if res != nil { - // hit in cache - resultSvc, ok := res.(interfaces.ResultService) - resultSvc.SetTime(time.Now()) - if ok { - return resultSvc, nil - } - } - - // task - t, err := service.NewModelServiceV2[models.TaskV2]().GetById(id) - if err != nil { - return nil, err - } - - // result service - resultSvc, err = result.GetResultService(t.SpiderId) - if err != nil { - return nil, err - } - - // store in cache - svc.resultServices.Store(id.Hex(), resultSvc) - - return resultSvc, nil -} - -func (svc *ServiceV2) updateTaskStats(id primitive.ObjectID, resultCount int) { - err := service.NewModelServiceV2[models.TaskStatV2]().UpdateById(id, bson.M{ - "$inc": bson.M{ - "result_count": resultCount, - }, - }) - if err != nil { - trace.PrintError(err) - } -} - -func (svc *ServiceV2) cleanup() { - for { - // atomic operation - svc.mu.Lock() - - svc.resultServices.Range(func(key, value interface{}) bool { - rs := value.(interfaces.ResultService) - if time.Now().After(rs.GetTime().Add(svc.rsTtl)) { - svc.resultServices.Delete(key) - } - return true - }) - - svc.mu.Unlock() - - time.Sleep(10 * time.Minute) - } -} - -func NewTaskStatsServiceV2() (svc2 *ServiceV2, err error) { - // service - svc := &ServiceV2{ - mu: sync.Mutex{}, - resultServices: sync.Map{}, - } - - svc.nodeCfgSvc = nodeconfig.GetNodeConfigService() - - // log driver - svc.logDriver, err = log.GetLogDriver(log.DriverTypeFile) - if err != nil { - return nil, err - } - - return svc, nil -} - -var _serviceV2 *ServiceV2 - -func GetTaskStatsServiceV2() (svr *ServiceV2, err error) { - if _serviceV2 != nil { - return _serviceV2, nil - } - _serviceV2, err = NewTaskStatsServiceV2() - if err != nil { - return nil, err - } - return _serviceV2, nil -} diff --git a/core/user/options.go b/core/user/options.go deleted file mode 100644 index 81c208d76..000000000 --- a/core/user/options.go +++ /dev/null @@ -1,11 +0,0 @@ -package user - -import "github.com/crawlab-team/crawlab/core/interfaces" - -type Option func(svc interfaces.UserService) - -func WithJwtSecret(secret string) Option { - return func(svc interfaces.UserService) { - svc.SetJwtSecret(secret) - } -} diff --git a/core/user/service.go b/core/user/service.go index 7294df4f9..6a19334c3 100644 --- a/core/user/service.go +++ b/core/user/service.go @@ -1,111 +1,153 @@ package user import ( + errors2 "errors" "github.com/crawlab-team/crawlab/core/constants" - "github.com/crawlab-team/crawlab/core/container" "github.com/crawlab-team/crawlab/core/errors" "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/models/delegate" "github.com/crawlab-team/crawlab/core/models/models" "github.com/crawlab-team/crawlab/core/models/service" "github.com/crawlab-team/crawlab/core/utils" - mongo2 "github.com/crawlab-team/crawlab/db/mongo" - "github.com/crawlab-team/crawlab/trace" - "github.com/gin-gonic/gin" "github.com/golang-jwt/jwt/v5" + "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" "go.mongodb.org/mongo-driver/mongo" + "sync" "time" ) type Service struct { - // settings variables jwtSecret string jwtSigningMethod jwt.SigningMethod - - // dependencies - modelSvc service.ModelService + interfaces.Logger } func (svc *Service) Init() (err error) { - _, err = svc.modelSvc.GetUserByUsername(constants.DefaultAdminUsername, nil) - if err == nil { - return nil - } - if err.Error() != mongo.ErrNoDocuments.Error() { - return err + if utils.IsPro() { + return svc.initPro() } - return svc.Create(&interfaces.UserCreateOptions{ - Username: constants.DefaultAdminUsername, - Password: constants.DefaultAdminPassword, - Role: constants.RoleAdmin, - }) + return svc.init() } -func (svc *Service) SetJwtSecret(secret string) { - svc.jwtSecret = secret -} +func (svc *Service) init() (err error) { + u, err := service.NewModelService[models.User]().GetOne(bson.M{"username": constants.DefaultAdminUsername}, nil) + if err != nil { + if !errors2.Is(err, mongo.ErrNoDocuments) { + return err + } + } else { + // exists + return + } -func (svc *Service) SetJwtSigningMethod(method jwt.SigningMethod) { - svc.jwtSigningMethod = method + // add user + u = &models.User{ + Username: constants.DefaultAdminUsername, + Password: utils.EncryptMd5(constants.DefaultAdminPassword), + Role: constants.RoleAdmin, + RootAdmin: true, + } + u.SetCreatedAt(time.Now()) + u.SetUpdatedAt(time.Now()) + _, err = service.NewModelService[models.User]().InsertOne(*u) + return err } -func (svc *Service) Create(opts *interfaces.UserCreateOptions, args ...interface{}) (err error) { - actor := utils.GetUserFromArgs(args...) +func (svc *Service) initPro() (err error) { + u, err := service.NewModelService[models.User]().GetOne(bson.M{ + "$or": []bson.M{ + {"username": constants.DefaultAdminUsername}, + {"root_admin": true}, + }, + }, nil) + if err != nil { + if !errors2.Is(err, mongo.ErrNoDocuments) { + return err + } + } else { + // exists, compatible with old versions + u.RootAdmin = true + u.SetUpdatedAt(time.Now()) + err = service.NewModelService[models.User]().ReplaceById(u.Id, *u) + if err != nil { + svc.Errorf("failed to update user: %v", err) + } + return + } + + // add user + u = &models.User{ + Username: constants.DefaultAdminUsername, + Password: utils.EncryptMd5(constants.DefaultAdminPassword), + RootAdmin: true, + } + u.SetCreatedAt(time.Now()) + u.SetUpdatedAt(time.Now()) + _, err = service.NewModelService[models.User]().InsertOne(*u) + return err +} +func (svc *Service) Create(username, password, role, email string, by primitive.ObjectID) (err error) { // validate options - if opts.Username == "" || opts.Password == "" { - return trace.TraceError(errors.ErrorUserMissingRequiredFields) + if username == "" || password == "" { + return errors.ErrorUserMissingRequiredFields } - if len(opts.Password) < 5 { - return trace.TraceError(errors.ErrorUserInvalidPassword) + if len(password) < 5 { + return errors.ErrorUserInvalidPassword } // normalize options - if opts.Role == "" { - opts.Role = constants.RoleNormal + if role == "" { + role = constants.RoleNormal } // check if user exists - if u, err := svc.modelSvc.GetUserByUsername(opts.Username, nil); err == nil && u != nil && !u.Id.IsZero() { - return trace.TraceError(errors.ErrorUserAlreadyExists) + if u, err := service.NewModelService[models.User]().GetOne(bson.M{"username": username}, nil); err == nil && u != nil && !u.Id.IsZero() { + return errors.ErrorUserAlreadyExists } - // transaction - return mongo2.RunTransaction(func(ctx mongo.SessionContext) error { - // add user - u := &models.User{ - Username: opts.Username, - Role: opts.Role, - Email: opts.Email, - } - if err := delegate.NewModelDelegate(u, actor).Add(); err != nil { - return err - } - - // add password - p := &models.Password{ - Id: u.Id, - Password: utils.EncryptMd5(opts.Password), - } - if err := delegate.NewModelDelegate(p, actor).Add(); err != nil { - return err - } + // add user + u := models.User{ + Username: username, + Role: role, + Password: utils.EncryptMd5(password), + Email: email, + } + u.SetCreated(by) + u.SetUpdated(by) + _, err = service.NewModelService[models.User]().InsertOne(u) - return nil - }) + return err } -func (svc *Service) Login(opts *interfaces.UserLoginOptions) (token string, u interfaces.User, err error) { - u, err = svc.modelSvc.GetUserByUsername(opts.Username, nil) - if err != nil { - return "", nil, err +func (svc *Service) CreateUser(u *models.User, by primitive.ObjectID) (err error) { + // validate options + if u.Username == "" || u.Password == "" { + return errors.ErrorUserMissingRequiredFields } - p, err := svc.modelSvc.GetPasswordById(u.GetId()) + if len(u.Password) < 5 { + return errors.ErrorUserInvalidPassword + } + + // check if user exists + if u, err := service.NewModelService[models.User]().GetOne(bson.M{"username": u.Username}, nil); err == nil && u != nil && !u.Id.IsZero() { + return errors.ErrorUserAlreadyExists + } + + // add user + u.SetCreated(by) + u.SetUpdated(by) + _, err = service.NewModelService[models.User]().InsertOne(*u) + + return err +} + +func (svc *Service) Login(username, password string) (token string, u *models.User, err error) { + u, err = service.NewModelService[models.User]().GetOne(bson.M{"username": username}, nil) if err != nil { return "", nil, err } - if p.Password != utils.EncryptMd5(opts.Password) { + if u.Password != utils.EncryptMd5(password) { return "", nil, errors.ErrorUserMismatch } token, err = svc.makeToken(u) @@ -115,84 +157,63 @@ func (svc *Service) Login(opts *interfaces.UserLoginOptions) (token string, u in return token, u, nil } -func (svc *Service) CheckToken(tokenStr string) (u interfaces.User, err error) { +func (svc *Service) CheckToken(tokenStr string) (u *models.User, err error) { return svc.checkToken(tokenStr) } -func (svc *Service) ChangePassword(id primitive.ObjectID, password string, args ...interface{}) (err error) { - actor := utils.GetUserFromArgs(args...) - - p, err := svc.modelSvc.GetPasswordById(id) +func (svc *Service) ChangePassword(id primitive.ObjectID, password string, by primitive.ObjectID) (err error) { + u, err := service.NewModelService[models.User]().GetById(id) if err != nil { return err } - p.Password = utils.EncryptMd5(password) - if err := delegate.NewModelDelegate(p, actor).Save(); err != nil { - return err - } - return nil + u.Password = utils.EncryptMd5(password) + u.SetCreatedBy(by) + return service.NewModelService[models.User]().ReplaceById(id, *u) } -func (svc *Service) MakeToken(user interfaces.User) (tokenStr string, err error) { +func (svc *Service) MakeToken(user *models.User) (tokenStr string, err error) { return svc.makeToken(user) } -func (svc *Service) GetCurrentUser(c *gin.Context) (user interfaces.User, err error) { - // token string - tokenStr := c.GetHeader("Authorization") - - // user - u, err := userSvc.CheckToken(tokenStr) - if err != nil { - return nil, err - } - - return u, nil -} - -func (svc *Service) makeToken(user interfaces.User) (tokenStr string, err error) { +func (svc *Service) makeToken(user *models.User) (tokenStr string, err error) { token := jwt.NewWithClaims(svc.jwtSigningMethod, jwt.MapClaims{ - "id": user.GetId(), - "username": user.GetUsername(), + "id": user.Id, + "username": user.Username, "nbf": time.Now().Unix(), }) return token.SignedString([]byte(svc.jwtSecret)) } -func (svc *Service) checkToken(tokenStr string) (user interfaces.User, err error) { +func (svc *Service) checkToken(tokenStr string) (user *models.User, err error) { token, err := jwt.Parse(tokenStr, svc.getSecretFunc()) if err != nil { - return + return nil, errors2.New("invalid token") } claim, ok := token.Claims.(jwt.MapClaims) if !ok { - err = errors.ErrorUserInvalidType - return + return nil, errors2.New("invalid type") } if !token.Valid { - err = errors.ErrorUserInvalidToken - return + return nil, errors2.New("invalid token") } id, err := primitive.ObjectIDFromHex(claim["id"].(string)) if err != nil { - return user, err + return nil, errors2.New("invalid token") } username := claim["username"].(string) - user, err = svc.modelSvc.GetUserById(id) + u, err := service.NewModelService[models.User]().GetById(id) if err != nil { - err = errors.ErrorUserNotExists - return + return nil, errors2.New("user not exists") } - if username != user.GetUsername() { - err = errors.ErrorUserMismatch - return + if username != u.Username { + return nil, errors2.New("username mismatch") } - return + return u, nil } func (svc *Service) getSecretFunc() jwt.Keyfunc { @@ -201,38 +222,32 @@ func (svc *Service) getSecretFunc() jwt.Keyfunc { } } -func NewUserService() (svc2 interfaces.UserService, err error) { +func newUserService() (svc *Service, err error) { // service - svc := &Service{ + svc = &Service{ jwtSecret: "crawlab", jwtSigningMethod: jwt.SigningMethodHS256, - } - - // dependency injection - if err := container.GetContainer().Invoke(func(modelSvc service.ModelService) { - svc.modelSvc = modelSvc - }); err != nil { - return nil, trace.TraceError(err) + Logger: utils.NewLogger("UserService"), } // initialize if err := svc.Init(); err != nil { - return nil, trace.TraceError(err) + svc.Errorf("failed to initialize user service: %v", err) + return nil, err } return svc, nil } -var userSvc interfaces.UserService +var userSvc *Service +var userSvcOnce sync.Once -func GetUserService() (svc interfaces.UserService, err error) { - if userSvc != nil { - return userSvc, nil - } - svc, err = NewUserService() - if err != nil { - return nil, err - } - userSvc = svc - return svc, nil +func GetUserService() (svc *Service, err error) { + userSvcOnce.Do(func() { + userSvc, err = newUserService() + if err != nil { + return + } + }) + return userSvc, nil } diff --git a/core/user/service_v2.go b/core/user/service_v2.go deleted file mode 100644 index 7784003c5..000000000 --- a/core/user/service_v2.go +++ /dev/null @@ -1,212 +0,0 @@ -package user - -import ( - "github.com/crawlab-team/crawlab/core/constants" - "github.com/crawlab-team/crawlab/core/errors" - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/core/models/service" - "github.com/crawlab-team/crawlab/core/utils" - mongo2 "github.com/crawlab-team/crawlab/db/mongo" - "github.com/crawlab-team/crawlab/trace" - "github.com/gin-gonic/gin" - "github.com/golang-jwt/jwt/v5" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" - "go.mongodb.org/mongo-driver/mongo" - "time" -) - -type ServiceV2 struct { - jwtSecret string - jwtSigningMethod jwt.SigningMethod - modelSvc *service.ModelServiceV2[models.UserV2] -} - -func (svc *ServiceV2) Init() (err error) { - _, err = svc.modelSvc.GetOne(bson.M{"username": constants.DefaultAdminUsername}, nil) - if err == nil { - return nil - } - if err.Error() != mongo.ErrNoDocuments.Error() { - return err - } - return svc.Create( - constants.DefaultAdminUsername, - constants.DefaultAdminPassword, - constants.RoleAdmin, - "", - primitive.NilObjectID, - ) -} - -func (svc *ServiceV2) SetJwtSecret(secret string) { - svc.jwtSecret = secret -} - -func (svc *ServiceV2) SetJwtSigningMethod(method jwt.SigningMethod) { - svc.jwtSigningMethod = method -} - -func (svc *ServiceV2) Create(username, password, role, email string, by primitive.ObjectID) (err error) { - // validate options - if username == "" || password == "" { - return trace.TraceError(errors.ErrorUserMissingRequiredFields) - } - if len(password) < 5 { - return trace.TraceError(errors.ErrorUserInvalidPassword) - } - - // normalize options - if role == "" { - role = constants.RoleNormal - } - - // check if user exists - if u, err := svc.modelSvc.GetOne(bson.M{"username": username}, nil); err == nil && u != nil && !u.Id.IsZero() { - return trace.TraceError(errors.ErrorUserAlreadyExists) - } - - // transaction - return mongo2.RunTransaction(func(ctx mongo.SessionContext) error { - // add user - u := models.UserV2{ - Username: username, - Role: role, - Password: utils.EncryptMd5(password), - Email: email, - } - u.SetCreated(by) - u.SetUpdated(by) - _, err = svc.modelSvc.InsertOne(u) - - return err - }) -} - -func (svc *ServiceV2) Login(username, password string) (token string, u *models.UserV2, err error) { - u, err = svc.modelSvc.GetOne(bson.M{"username": username}, nil) - if err != nil { - return "", nil, err - } - if u.Password != utils.EncryptMd5(password) { - return "", nil, errors.ErrorUserMismatch - } - token, err = svc.makeToken(u) - if err != nil { - return "", nil, err - } - return token, u, nil -} - -func (svc *ServiceV2) CheckToken(tokenStr string) (u *models.UserV2, err error) { - return svc.checkToken(tokenStr) -} - -func (svc *ServiceV2) ChangePassword(id primitive.ObjectID, password string, by primitive.ObjectID) (err error) { - u, err := svc.modelSvc.GetById(id) - if err != nil { - return err - } - u.Password = utils.EncryptMd5(password) - u.SetCreatedBy(by) - return svc.modelSvc.ReplaceById(id, *u) -} - -func (svc *ServiceV2) MakeToken(user *models.UserV2) (tokenStr string, err error) { - return svc.makeToken(user) -} - -func (svc *ServiceV2) GetCurrentUser(c *gin.Context) (user interfaces.User, err error) { - // token string - tokenStr := c.GetHeader("Authorization") - - // user - u, err := userSvc.CheckToken(tokenStr) - if err != nil { - return nil, err - } - - return u, nil -} - -func (svc *ServiceV2) makeToken(user *models.UserV2) (tokenStr string, err error) { - token := jwt.NewWithClaims(svc.jwtSigningMethod, jwt.MapClaims{ - "id": user.Id, - "username": user.Username, - "nbf": time.Now().Unix(), - }) - return token.SignedString([]byte(svc.jwtSecret)) -} - -func (svc *ServiceV2) checkToken(tokenStr string) (user *models.UserV2, err error) { - token, err := jwt.Parse(tokenStr, svc.getSecretFunc()) - if err != nil { - return - } - - claim, ok := token.Claims.(jwt.MapClaims) - if !ok { - err = errors.ErrorUserInvalidType - return - } - - if !token.Valid { - err = errors.ErrorUserInvalidToken - return - } - - id, err := primitive.ObjectIDFromHex(claim["id"].(string)) - if err != nil { - return user, err - } - username := claim["username"].(string) - user, err = svc.modelSvc.GetById(id) - if err != nil { - err = errors.ErrorUserNotExists - return - } - - if username != user.Username { - err = errors.ErrorUserMismatch - return - } - - return -} - -func (svc *ServiceV2) getSecretFunc() jwt.Keyfunc { - return func(token *jwt.Token) (interface{}, error) { - return []byte(svc.jwtSecret), nil - } -} - -func NewUserServiceV2() (svc *ServiceV2, err error) { - // service - svc = &ServiceV2{ - modelSvc: service.NewModelServiceV2[models.UserV2](), - jwtSecret: "crawlab", - jwtSigningMethod: jwt.SigningMethodHS256, - } - - // initialize - if err := svc.Init(); err != nil { - return nil, trace.TraceError(err) - } - - return svc, nil -} - -var userSvcV2 *ServiceV2 - -func GetUserServiceV2() (svc *ServiceV2, err error) { - if userSvcV2 != nil { - return userSvcV2, nil - } - svc, err = NewUserServiceV2() - if err != nil { - return nil, err - } - userSvcV2 = svc - return svc, nil -} diff --git a/core/user/test/base.go b/core/user/test/base.go deleted file mode 100644 index 392a7e066..000000000 --- a/core/user/test/base.go +++ /dev/null @@ -1,65 +0,0 @@ -package test - -import ( - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/models/service" - "github.com/crawlab-team/crawlab/core/user" - "go.uber.org/dig" - "testing" -) - -func init() { - var err error - T, err = NewTest() - if err != nil { - panic(err) - } -} - -var T *Test - -type Test struct { - // dependencies - modelSvc service.ModelService - userSvc interfaces.UserService - - // test data - TestUsername string - TestPassword string - TestNewPassword string -} - -func (t *Test) Setup(t2 *testing.T) { - var err error - t.userSvc, err = user.NewUserService() - if err != nil { - panic(err) - } - t2.Cleanup(t.Cleanup) -} - -func (t *Test) Cleanup() { - _ = t.modelSvc.GetBaseService(interfaces.ModelIdUser).DeleteList(nil) -} - -func NewTest() (t *Test, err error) { - // test - t = &Test{ - TestUsername: "test_username", - TestPassword: "test_password", - TestNewPassword: "test_new_password", - } - - // dependency injection - c := dig.New() - if err := c.Provide(service.GetService); err != nil { - return nil, err - } - if err := c.Invoke(func(modelSvc service.ModelService) { - t.modelSvc = modelSvc - }); err != nil { - return nil, err - } - - return t, nil -} diff --git a/core/user/test/user_service_test.go b/core/user/test/user_service_test.go deleted file mode 100644 index 0806c31ed..000000000 --- a/core/user/test/user_service_test.go +++ /dev/null @@ -1,61 +0,0 @@ -package test - -import ( - "github.com/crawlab-team/crawlab/core/constants" - "github.com/crawlab-team/crawlab/core/interfaces" - "github.com/crawlab-team/crawlab/core/utils" - "github.com/stretchr/testify/require" - "testing" -) - -func TestUserService_Init(t *testing.T) { - var err error - T.Setup(t) - - u, err := T.modelSvc.GetUserByUsernameWithPassword(constants.DefaultAdminUsername, nil) - require.Nil(t, err) - require.Equal(t, constants.DefaultAdminUsername, u.Username) - require.Equal(t, utils.EncryptMd5(constants.DefaultAdminPassword), u.Password) -} - -func TestUserService_Create_Login_CheckToken(t *testing.T) { - var err error - T.Setup(t) - - err = T.userSvc.Create(&interfaces.UserCreateOptions{ - Username: T.TestUsername, - Password: T.TestPassword, - }) - require.Nil(t, err) - - u, err := T.modelSvc.GetUserByUsernameWithPassword(T.TestUsername, nil) - require.Nil(t, err) - require.Equal(t, T.TestUsername, u.Username) - require.Equal(t, utils.EncryptMd5(T.TestPassword), u.Password) - - token, u2, err := T.userSvc.Login(&interfaces.UserLoginOptions{ - Username: T.TestUsername, - Password: T.TestPassword, - }) - require.Nil(t, err) - require.Greater(t, len(token), 10) - require.Equal(t, u.Username, u2.GetUsername()) - - u3, err := T.userSvc.CheckToken(token) - require.Nil(t, err) - require.Equal(t, u.Username, u3.GetUsername()) -} - -func TestUserService_ChangePassword(t *testing.T) { - var err error - T.Setup(t) - - u, err := T.modelSvc.GetUserByUsernameWithPassword(constants.DefaultAdminUsername, nil) - require.Nil(t, err) - err = T.userSvc.ChangePassword(u.Id, T.TestNewPassword) - require.Nil(t, err) - - u2, err := T.modelSvc.GetUserByUsernameWithPassword(constants.DefaultAdminUsername, nil) - require.Nil(t, err) - require.Equal(t, utils.EncryptMd5(T.TestNewPassword), u2.Password) -} diff --git a/core/utils/args.go b/core/utils/args.go deleted file mode 100644 index e83f540a9..000000000 --- a/core/utils/args.go +++ /dev/null @@ -1,17 +0,0 @@ -package utils - -import "github.com/crawlab-team/crawlab/core/interfaces" - -func GetUserFromArgs(args ...interface{}) (u interfaces.User) { - for _, arg := range args { - switch arg.(type) { - case interfaces.User: - var ok bool - u, ok = arg.(interfaces.User) - if ok { - return u - } - } - } - return nil -} diff --git a/core/utils/array.go b/core/utils/array.go deleted file mode 100644 index a5e958c69..000000000 --- a/core/utils/array.go +++ /dev/null @@ -1,46 +0,0 @@ -package utils - -import ( - "errors" - "math/rand" - "reflect" - "time" -) - -func StringArrayContains(arr []string, str string) bool { - for _, s := range arr { - if s == str { - return true - } - } - return false -} - -func GetArrayItems(array interface{}) (res []interface{}, err error) { - switch reflect.TypeOf(array).Kind() { - case reflect.Slice, reflect.Array: - s := reflect.ValueOf(array) - for i := 0; i < s.Len(); i++ { - obj, ok := s.Index(i).Interface().(interface{}) - if !ok { - return nil, errors.New("invalid type") - } - res = append(res, obj) - } - default: - return nil, errors.New("invalid type") - } - return res, nil -} - -func ShuffleArray(slice []interface{}) (err error) { - r := rand.New(rand.NewSource(time.Now().Unix())) - for len(slice) > 0 { - n := len(slice) - randIndex := r.Intn(n) - slice[n-1], slice[randIndex] = slice[randIndex], slice[n-1] - slice = slice[:n-1] - } - - return nil -} diff --git a/core/utils/backoff.go b/core/utils/backoff.go deleted file mode 100644 index 6010acfa9..000000000 --- a/core/utils/backoff.go +++ /dev/null @@ -1,15 +0,0 @@ -package utils - -import ( - "github.com/apex/log" - "github.com/cenkalti/backoff/v4" - "github.com/crawlab-team/crawlab/trace" - "time" -) - -func BackoffErrorNotify(prefix string) backoff.Notify { - return func(err error, duration time.Duration) { - log.Errorf("%s error: %v. reattempt in %.1f seconds...", prefix, err, duration.Seconds()) - trace.PrintError(err) - } -} diff --git a/core/utils/binders/binder_col_name.go b/core/utils/binders/binder_col_name.go deleted file mode 100644 index 9e76224d3..000000000 --- a/core/utils/binders/binder_col_name.go +++ /dev/null @@ -1,99 +0,0 @@ -package binders - -import ( - "github.com/crawlab-team/crawlab/core/errors" - "github.com/crawlab-team/crawlab/core/interfaces" -) - -func NewColNameBinder(id interfaces.ModelId) (b *ColNameBinder) { - return &ColNameBinder{id: id} -} - -type ColNameBinder struct { - id interfaces.ModelId -} - -func (b *ColNameBinder) Bind() (res interface{}, err error) { - switch b.id { - // system models - case interfaces.ModelIdArtifact: - return interfaces.ModelColNameArtifact, nil - case interfaces.ModelIdTag: - return interfaces.ModelColNameTag, nil - - // operation models - case interfaces.ModelIdNode: - return interfaces.ModelColNameNode, nil - case interfaces.ModelIdProject: - return interfaces.ModelColNameProject, nil - case interfaces.ModelIdSpider: - return interfaces.ModelColNameSpider, nil - case interfaces.ModelIdTask: - return interfaces.ModelColNameTask, nil - case interfaces.ModelIdJob: - return interfaces.ModelColNameJob, nil - case interfaces.ModelIdSchedule: - return interfaces.ModelColNameSchedule, nil - case interfaces.ModelIdUser: - return interfaces.ModelColNameUser, nil - case interfaces.ModelIdSetting: - return interfaces.ModelColNameSetting, nil - case interfaces.ModelIdToken: - return interfaces.ModelColNameToken, nil - case interfaces.ModelIdVariable: - return interfaces.ModelColNameVariable, nil - case interfaces.ModelIdTaskQueue: - return interfaces.ModelColNameTaskQueue, nil - case interfaces.ModelIdTaskStat: - return interfaces.ModelColNameTaskStat, nil - case interfaces.ModelIdSpiderStat: - return interfaces.ModelColNameSpiderStat, nil - case interfaces.ModelIdDataSource: - return interfaces.ModelColNameDataSource, nil - case interfaces.ModelIdDataCollection: - return interfaces.ModelColNameDataCollection, nil - case interfaces.ModelIdPassword: - return interfaces.ModelColNamePasswords, nil - case interfaces.ModelIdExtraValue: - return interfaces.ModelColNameExtraValues, nil - case interfaces.ModelIdGit: - return interfaces.ModelColNameGit, nil - case interfaces.ModelIdRole: - return interfaces.ModelColNameRole, nil - case interfaces.ModelIdUserRole: - return interfaces.ModelColNameUserRole, nil - case interfaces.ModelIdPermission: - return interfaces.ModelColNamePermission, nil - case interfaces.ModelIdRolePermission: - return interfaces.ModelColNameRolePermission, nil - case interfaces.ModelIdEnvironment: - return interfaces.ModelColNameEnvironment, nil - case interfaces.ModelIdDependencySetting: - return interfaces.ModelColNameDependencySetting, nil - - // invalid - default: - return res, errors.ErrorModelNotImplemented - } -} - -func (b *ColNameBinder) MustBind() (res interface{}) { - res, err := b.Bind() - if err != nil { - panic(err) - } - return res -} - -func (b *ColNameBinder) BindString() (res string, err error) { - res_, err := b.Bind() - if err != nil { - return "", err - } - res = res_.(string) - return res, nil -} - -func (b *ColNameBinder) MustBindString() (res string) { - return b.MustBind().(string) -} diff --git a/core/utils/bson.go b/core/utils/bson.go index e6443e888..ce743ebbe 100644 --- a/core/utils/bson.go +++ b/core/utils/bson.go @@ -1,89 +1,10 @@ package utils import ( - "github.com/emirpasic/gods/sets/hashset" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" - "reflect" ) -func BsonMEqual(v1, v2 bson.M) (ok bool) { - //ok = reflect.DeepEqual(v1, v2) - ok = bsonMEqual(v1, v2) - return ok -} - -func bsonMEqual(v1, v2 bson.M) (ok bool) { - // all keys - allKeys := hashset.New() - for key := range v1 { - allKeys.Add(key) - } - for key := range v2 { - allKeys.Add(key) - } - - for _, keyRes := range allKeys.Values() { - key := keyRes.(string) - v1Value, ok := v1[key] - if !ok { - return false - } - v2Value, ok := v2[key] - if !ok { - return false - } - - mode := 0 - - var v1ValueBsonM bson.M - var v1ValueBsonA bson.A - switch v1Value.(type) { - case bson.M: - mode = 1 - v1ValueBsonM = v1Value.(bson.M) - case bson.A: - mode = 2 - v1ValueBsonA = v1Value.(bson.A) - } - - var v2ValueBsonM bson.M - var v2ValueBsonA bson.A - switch v2Value.(type) { - case bson.M: - if mode != 1 { - return false - } - v2ValueBsonM = v2Value.(bson.M) - case bson.A: - if mode != 2 { - return false - } - v2ValueBsonA = v2Value.(bson.A) - } - - switch mode { - case 0: - if v1Value != v2Value { - return false - } - case 1: - if !bsonMEqual(v1ValueBsonM, v2ValueBsonM) { - return false - } - case 2: - if !reflect.DeepEqual(v1ValueBsonA, v2ValueBsonA) { - return false - } - default: - // not reachable - return false - } - } - - return true -} - func NormalizeBsonMObjectId(m bson.M) (res bson.M) { for k, v := range m { switch v.(type) { @@ -99,18 +20,6 @@ func NormalizeBsonMObjectId(m bson.M) (res bson.M) { return m } -func DenormalizeBsonMObjectId(m bson.M) (res bson.M) { - for k, v := range m { - switch v.(type) { - case primitive.ObjectID: - m[k] = v.(primitive.ObjectID).Hex() - case bson.M: - m[k] = NormalizeBsonMObjectId(v.(bson.M)) - } - } - return m -} - func NormalizeObjectId(v interface{}) (res interface{}) { switch v.(type) { case string: diff --git a/core/utils/cache.go b/core/utils/cache.go deleted file mode 100644 index e64e147b2..000000000 --- a/core/utils/cache.go +++ /dev/null @@ -1,57 +0,0 @@ -package utils - -import ( - "github.com/crawlab-team/crawlab/core/constants" - "github.com/crawlab-team/crawlab/db/mongo" - "go.mongodb.org/mongo-driver/bson" - mongo2 "go.mongodb.org/mongo-driver/mongo" - "time" -) - -func GetFromDbCache(key string, getFn func() (string, error)) (res string, err error) { - col := mongo.GetMongoCol(constants.CacheColName) - - var d bson.M - if err := col.Find(bson.M{ - constants.CacheColKey: key, - }, nil).One(&d); err != nil { - if err != mongo2.ErrNoDocuments { - return "", err - } - - // get cache value - res, err = getFn() - if err != nil { - return "", err - } - - // save cache - d = bson.M{ - constants.CacheColKey: key, - constants.CacheColValue: res, - constants.CacheColTime: time.Now(), - } - if _, err := col.Insert(d); err != nil { - return "", err - } - return res, nil - } - - // type conversion - r, ok := d[constants.CacheColValue] - if !ok { - if err := col.Delete(bson.M{constants.CacheColKey: key}); err != nil { - return "", err - } - return GetFromDbCache(key, getFn) - } - res, ok = r.(string) - if !ok { - if err := col.Delete(bson.M{constants.CacheColKey: key}); err != nil { - return "", err - } - return GetFromDbCache(key, getFn) - } - - return res, nil -} diff --git a/core/utils/chan.go b/core/utils/chan.go deleted file mode 100644 index c0144340d..000000000 --- a/core/utils/chan.go +++ /dev/null @@ -1,40 +0,0 @@ -package utils - -import ( - "sync" -) - -var TaskExecChanMap = NewChanMap() - -type ChanMap struct { - m sync.Map -} - -func NewChanMap() *ChanMap { - return &ChanMap{m: sync.Map{}} -} - -func (cm *ChanMap) Chan(key string) chan string { - if ch, ok := cm.m.Load(key); ok { - return ch.(interface{}).(chan string) - } - ch := make(chan string, 10) - cm.m.Store(key, ch) - return ch -} - -func (cm *ChanMap) ChanBlocked(key string) chan string { - if ch, ok := cm.m.Load(key); ok { - return ch.(interface{}).(chan string) - } - ch := make(chan string) - cm.m.Store(key, ch) - return ch -} - -func (cm *ChanMap) HasChanKey(key string) bool { - if _, ok := cm.m.Load(key); ok { - return true - } - return false -} diff --git a/core/utils/chan_test.go b/core/utils/chan_test.go deleted file mode 100644 index 4bc759179..000000000 --- a/core/utils/chan_test.go +++ /dev/null @@ -1,78 +0,0 @@ -package utils - -import ( - . "github.com/smartystreets/goconvey/convey" - "sync" - "testing" -) - -func TestNewChanMap(t *testing.T) { - mapTest := sync.Map{} - chanTest := make(chan string) - test := "test" - - Convey("Call NewChanMap to generate ChanMap", t, func() { - mapTest.Store("test", chanTest) - chanMapTest := ChanMap{mapTest} - chanMap := NewChanMap() - chanMap.m.Store("test", chanTest) - - Convey(test, func() { - v1, ok := chanMap.m.Load("test") - So(ok, ShouldBeTrue) - v2, ok := chanMapTest.m.Load("test") - So(ok, ShouldBeTrue) - So(v1, ShouldResemble, v2) - }) - }) -} - -func TestChan(t *testing.T) { - mapTest := sync.Map{} - chanTest := make(chan string) - mapTest.Store("test", chanTest) - chanMapTest := ChanMap{mapTest} - - Convey("Test Chan use exist key", t, func() { - ch1 := chanMapTest.Chan("test") - Convey("ch1 should equal chanTest", func() { - So(ch1, ShouldEqual, chanTest) - }) - }) - Convey("Test Chan use no-exist key", t, func() { - ch2 := chanMapTest.Chan("test2") - Convey("ch2 should equal chanMapTest.m[test2]", func() { - v, ok := chanMapTest.m.Load("test2") - So(ok, ShouldBeTrue) - So(v, ShouldEqual, ch2) - }) - Convey("Cap of chanMapTest.m[test2] should equal 10", func() { - So(10, ShouldEqual, cap(ch2)) - }) - }) -} - -func TestChanBlocked(t *testing.T) { - mapTest := sync.Map{} - chanTest := make(chan string) - mapTest.Store("test", chanTest) - chanMapTest := ChanMap{mapTest} - - Convey("Test Chan use exist key", t, func() { - ch1 := chanMapTest.ChanBlocked("test") - Convey("ch1 should equal chanTest", func() { - So(ch1, ShouldEqual, chanTest) - }) - }) - Convey("Test Chan use no-exist key", t, func() { - ch2 := chanMapTest.ChanBlocked("test2") - Convey("ch2 should equal chanMapTest.m[test2]", func() { - v, ok := chanMapTest.m.Load("test2") - So(ok, ShouldBeTrue) - So(v, ShouldEqual, ch2) - }) - Convey("Cap of chanMapTest.m[test2] should equal 10", func() { - So(0, ShouldEqual, cap(ch2)) - }) - }) -} diff --git a/core/utils/cockroachdb.go b/core/utils/cockroachdb.go deleted file mode 100644 index feccc5eca..000000000 --- a/core/utils/cockroachdb.go +++ /dev/null @@ -1,105 +0,0 @@ -package utils - -import ( - "context" - "fmt" - "github.com/crawlab-team/crawlab/core/constants" - "github.com/crawlab-team/crawlab/core/models/models" - "github.com/upper/db/v4" - "github.com/upper/db/v4/adapter/mssql" - "time" -) - -func GetCockroachdbSession(ds *models.DataSource) (s db.Session, err error) { - return getCockroachdbSession(context.Background(), ds) -} - -func GetCockroachdbSessionWithTimeout(ds *models.DataSource, timeout time.Duration) (s db.Session, err error) { - ctx, cancel := context.WithTimeout(context.Background(), timeout) - defer cancel() - return getCockroachdbSession(ctx, ds) -} - -func getCockroachdbSession(ctx context.Context, ds *models.DataSource) (s db.Session, err error) { - // normalize settings - host := ds.Host - port := ds.Port - if ds.Host == "" { - host = constants.DefaultHost - } - if ds.Port == "" { - port = constants.DefaultCockroachdbPort - } - - // connect settings - settings := mssql.ConnectionURL{ - User: ds.Username, - Password: ds.Password, - Database: ds.Database, - Host: fmt.Sprintf("%s:%s", host, port), - Options: nil, - } - - // session - done := make(chan struct{}) - go func() { - s, err = mssql.Open(settings) - close(done) - }() - - // wait for done - select { - case <-ctx.Done(): - if ctx.Err() != nil { - err = ctx.Err() - } - case <-done: - } - - return s, err -} - -func GetCockroachdbSessionWithTimeoutV2(ds *models.DataSourceV2, timeout time.Duration) (s db.Session, err error) { - ctx, cancel := context.WithTimeout(context.Background(), timeout) - defer cancel() - return getCockroachdbSessionV2(ctx, ds) -} - -func getCockroachdbSessionV2(ctx context.Context, ds *models.DataSourceV2) (s db.Session, err error) { - // normalize settings - host := ds.Host - port := ds.Port - if ds.Host == "" { - host = constants.DefaultHost - } - if ds.Port == "" { - port = constants.DefaultCockroachdbPort - } - - // connect settings - settings := mssql.ConnectionURL{ - User: ds.Username, - Password: ds.Password, - Database: ds.Database, - Host: fmt.Sprintf("%s:%s", host, port), - Options: nil, - } - - // session - done := make(chan struct{}) - go func() { - s, err = mssql.Open(settings) - close(done) - }() - - // wait for done - select { - case <-ctx.Done(): - if ctx.Err() != nil { - err = ctx.Err() - } - case <-done: - } - - return s, err -} diff --git a/core/utils/config.go b/core/utils/config.go new file mode 100644 index 000000000..b35ae9e06 --- /dev/null +++ b/core/utils/config.go @@ -0,0 +1,272 @@ +package utils + +import ( + "fmt" + "github.com/gin-gonic/gin" + "github.com/mitchellh/go-homedir" + "github.com/spf13/viper" + "path/filepath" + "strings" +) + +const ( + DefaultWorkspace = "crawlab_workspace" + DefaultTaskLogPath = "/var/log/crawlab/tasks" + DefaultServerHost = "0.0.0.0" + DefaultServerPort = 8000 + DefaultGrpcHost = "localhost" + DefaultGrpcPort = 9666 + DefaultGrpcServerHost = "0.0.0.0" + DefaultGrpcServerPort = 9666 + DefaultAuthKey = "Crawlab2024!" + DefaultApiEndpoint = "http://localhost:8000" + DefaultApiAllowOrigin = "*" + DefaultApiAllowCredentials = "true" + DefaultApiAllowMethods = "DELETE, POST, OPTIONS, GET, PUT" + DefaultApiAllowHeaders = "Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization, accept, origin, Cache-Control, X-Requested-With" + DefaultApiPort = 8080 + DefaultApiPath = "/api" + DefaultNodeMaxRunners = 0 // 0 means no limit + DefaultInstallRoot = "/app/install" + MetadataConfigDirName = ".crawlab" + MetadataConfigName = "config.json" + DefaultPyenvPath = "/root/.pyenv" + DefaultNodeModulesPath = "/usr/lib/node_modules" + DefaultGoPath = "/root/go" +) + +func IsDev() bool { + res := viper.GetBool("dev") + return res +} + +func IsAuthDisabled() bool { + return viper.GetBool("auth.disabled") +} + +func GetAllowOrigin() string { + if res := viper.GetString("api.allow.origin"); res != "" { + return res + } + return DefaultApiAllowOrigin +} + +func GetAllowCredentials() string { + if res := viper.GetString("api.allow.credentials"); res != "" { + return res + } + return DefaultApiAllowCredentials +} + +func GetAllowMethods() string { + if res := viper.GetString("api.allow.methods"); res != "" { + return res + } + return DefaultApiAllowMethods +} + +func GetAllowHeaders() string { + if res := viper.GetString("api.allow.headers"); res != "" { + return res + } + return DefaultApiAllowHeaders +} + +func GetGinMode() string { + if res := viper.GetString("gin.mode"); res != "" { + return res + } + return gin.ReleaseMode +} + +func IsPro() bool { + return viper.GetString("edition") == "global.edition.pro" +} + +func GetWorkspace() string { + homedirPath, err := homedir.Dir() + if err != nil { + logger.Warnf("cannot find home directory: %v", err) + return DefaultWorkspace + } + if res := viper.GetString("workspace"); res != "" { + return res + } + return filepath.Join(homedirPath, DefaultWorkspace) +} + +func GetTaskLogPath() string { + if res := viper.GetString("log.path"); res != "" { + return res + } + return DefaultTaskLogPath +} + +func GetServerAddress() string { + host := viper.GetString("server.host") + if host == "" { + host = DefaultServerHost + } + + port := viper.GetInt("server.port") + if port == 0 { + port = DefaultServerPort + } + + return fmt.Sprintf("%s:%d", host, port) +} + +func GetMasterHost() string { + return viper.GetString("master.host") +} + +func GetGrpcAddress() string { + host := viper.GetString("grpc.host") + if host == "" { + masterHost := GetMasterHost() + if masterHost != "" { + host = masterHost + } else { + host = DefaultGrpcHost + } + } + + port := viper.GetInt("grpc.port") + if port == 0 { + port = DefaultGrpcPort + } + + return fmt.Sprintf("%s:%d", host, port) +} + +func GetGrpcServerAddress() string { + host := viper.GetString("grpc.server.host") + if host == "" { + host = DefaultGrpcServerHost + } + + port := viper.GetInt("grpc.server.port") + if port == 0 { + port = DefaultGrpcServerPort + } + + return fmt.Sprintf("%s:%d", host, port) +} + +func GetAuthKey() string { + if res := viper.GetString("auth.key"); res != "" { + return res + } + return DefaultAuthKey +} + +func GetApiPort() int { + if viper.GetInt("api.port") > 0 { + return viper.GetInt("api.port") + } + return DefaultApiPort +} + +func GetApiPath() string { + if viper.GetString("api.path") != "" { + apiPath := viper.GetString("api.path") + if !strings.HasPrefix(apiPath, "/") { + apiPath = "/" + apiPath + } + return apiPath + } + return DefaultApiPath +} + +func GetApiEndpoint() string { + if res := viper.GetString("api.endpoint"); res != "" { + return res + } + masterHost := GetMasterHost() + if masterHost != "" { + scheme := "http" + apiHttps := viper.GetBool("api.https") + if apiHttps { + scheme = "https" + } + return fmt.Sprintf("%s://%s:%d%s", scheme, masterHost, GetApiPort(), GetApiPath()) + } + return DefaultApiEndpoint +} + +func IsMaster() bool { + return EnvIsTrue("node.master", false) +} + +func GetNodeType() string { + if IsMaster() { + return "master" + } else { + return "worker" + } +} + +func GetNodeKey() string { + if res := viper.GetString("node.key"); res != "" { + return res + } + return NewUUIDString() +} + +func GetNodeName() string { + if res := viper.GetString("node.name"); res != "" { + return res + } + return GetNodeKey() +} + +func GetNodeMaxRunners() int { + if res := viper.GetInt("node.maxRunners"); res != 0 { + return res + } + return DefaultNodeMaxRunners +} + +func GetMetadataConfigPath() string { + var homeDirPath, err = homedir.Dir() + if err != nil { + logger.Errorf("failed to get home directory: %v", err) + logger.Errorf("please set metadata directory path using either CRAWLAB_METADATA environment variable or the metadata path in the configuration file") + panic(err) + } + + if viper.GetString("metadata") != "" { + metadataPath := viper.GetString("metadata") + return filepath.Join(metadataPath, MetadataConfigName) + } + + return filepath.Join(homeDirPath, MetadataConfigDirName, MetadataConfigName) +} + +func GetInstallRoot() string { + if res := viper.GetString("install.root"); res != "" { + return res + } + return DefaultInstallRoot +} + +func GetPyenvPath() string { + if res := viper.GetString("install.pyenv.path"); res != "" { + return res + } + return DefaultPyenvPath +} + +func GetNodeModulesPath() string { + if res := viper.GetString("install.node.path"); res != "" { + return res + } + return DefaultNodeModulesPath +} + +func GetGoPath() string { + if res := viper.GetString("install.go.path"); res != "" { + return res + } + return DefaultGoPath +} diff --git a/core/utils/cron.go b/core/utils/cron.go deleted file mode 100644 index e8838d2f5..000000000 --- a/core/utils/cron.go +++ /dev/null @@ -1,176 +0,0 @@ -package utils - -import ( - "fmt" - "math" - "strconv" - "strings" -) - -// cronBounds provides a range of acceptable values (plus a map of name to value). -type cronBounds struct { - min, max uint - names map[string]uint -} - -type cronUtils struct { - // The cronBounds for each field. - seconds cronBounds - minutes cronBounds - hours cronBounds - dom cronBounds - months cronBounds - dow cronBounds - - // Set the top bit if a star was included in the expression. - starBit uint64 -} - -// getRange returns the bits indicated by the given expression: -// number | number "-" number [ "/" number ] -// or error parsing range. -func (u *cronUtils) getRange(expr string, r cronBounds) (uint64, error) { - var ( - start, end, step uint - rangeAndStep = strings.Split(expr, "/") - lowAndHigh = strings.Split(rangeAndStep[0], "-") - singleDigit = len(lowAndHigh) == 1 - err error - ) - - var extra uint64 - if lowAndHigh[0] == "*" || lowAndHigh[0] == "?" { - start = r.min - end = r.max - extra = CronUtils.starBit - } else { - start, err = u.parseIntOrName(lowAndHigh[0], r.names) - if err != nil { - return 0, err - } - switch len(lowAndHigh) { - case 1: - end = start - case 2: - end, err = u.parseIntOrName(lowAndHigh[1], r.names) - if err != nil { - return 0, err - } - default: - return 0, fmt.Errorf("too many hyphens: %s", expr) - } - } - - switch len(rangeAndStep) { - case 1: - step = 1 - case 2: - step, err = u.mustParseInt(rangeAndStep[1]) - if err != nil { - return 0, err - } - - // Special handling: "N/step" means "N-max/step". - if singleDigit { - end = r.max - } - if step > 1 { - extra = 0 - } - default: - return 0, fmt.Errorf("too many slashes: %s", expr) - } - - if start < r.min { - return 0, fmt.Errorf("beginning of range (%d) below minimum (%d): %s", start, r.min, expr) - } - if end > r.max { - return 0, fmt.Errorf("end of range (%d) above maximum (%d): %s", end, r.max, expr) - } - if start > end { - return 0, fmt.Errorf("beginning of range (%d) beyond end of range (%d): %s", start, end, expr) - } - if step == 0 { - return 0, fmt.Errorf("step of range should be a positive number: %s", expr) - } - - return u.getBits(start, end, step) | extra, nil -} - -// parseIntOrName returns the (possibly-named) integer contained in expr. -func (u *cronUtils) parseIntOrName(expr string, names map[string]uint) (uint, error) { - if names != nil { - if namedInt, ok := names[strings.ToLower(expr)]; ok { - return namedInt, nil - } - } - return u.mustParseInt(expr) -} - -// mustParseInt parses the given expression as an int or returns an error. -func (u *cronUtils) mustParseInt(expr string) (uint, error) { - num, err := strconv.Atoi(expr) - if err != nil { - return 0, fmt.Errorf("failed to parse int from %s: %s", expr, err) - } - if num < 0 { - return 0, fmt.Errorf("negative number (%d) not allowed: %s", num, expr) - } - - return uint(num), nil -} - -// getBits sets all bits in the range [min, max], modulo the given step size. -func (u *cronUtils) getBits(min, max, step uint) uint64 { - var bits uint64 - - // If step is 1, use shifts. - if step == 1 { - return ^(math.MaxUint64 << (max + 1)) & (math.MaxUint64 << min) - } - - // Else, use a simple loop. - for i := min; i <= max; i += step { - bits |= 1 << i - } - return bits -} - -// all returns all bits within the given cronBounds. (plus the star bit) -func (u *cronUtils) all(r cronBounds) uint64 { - return u.getBits(r.min, r.max, 1) | CronUtils.starBit -} - -var CronUtils = cronUtils{ - // The cronBounds for each field. - seconds: cronBounds{0, 59, nil}, - minutes: cronBounds{0, 59, nil}, - hours: cronBounds{0, 23, nil}, - dom: cronBounds{1, 31, nil}, - months: cronBounds{1, 12, map[string]uint{ - "jan": 1, - "feb": 2, - "mar": 3, - "apr": 4, - "may": 5, - "jun": 6, - "jul": 7, - "aug": 8, - "sep": 9, - "oct": 10, - "nov": 11, - "dec": 12, - }}, - dow: cronBounds{0, 6, map[string]uint{ - "sun": 0, - "mon": 1, - "tue": 2, - "wed": 3, - "thu": 4, - "fri": 5, - "sat": 6, - }}, - - // Set the top bit if a star was included in the expression. - starBit: 1 << 63, -} diff --git a/core/utils/debug.go b/core/utils/debug.go deleted file mode 100644 index 09ef3098e..000000000 --- a/core/utils/debug.go +++ /dev/null @@ -1,18 +0,0 @@ -package utils - -import ( - "fmt" - "github.com/spf13/viper" - "time" -) - -func IsDebug() bool { - return viper.GetBool("debug") -} - -func LogDebug(msg string) { - if !IsDebug() { - return - } - fmt.Println(fmt.Sprintf("[DEBUG] %s: %s", time.Now().Format("2006-01-02 15:04:05"), msg)) -} diff --git a/core/utils/demo.go b/core/utils/demo.go deleted file mode 100644 index 70b450444..000000000 --- a/core/utils/demo.go +++ /dev/null @@ -1,66 +0,0 @@ -package utils - -import ( - "fmt" - "github.com/crawlab-team/crawlab/core/sys_exec" - "github.com/crawlab-team/crawlab/db/mongo" - "github.com/crawlab-team/crawlab/trace" - "github.com/spf13/viper" -) - -func GetApiAddress() (res string) { - apiAddress := viper.GetString("api.address") - if apiAddress == "" { - return "http://localhost:8000" - } - return apiAddress -} - -func IsDemo() (ok bool) { - return EnvIsTrue("demo", true) -} - -func InitializedDemo() (ok bool) { - col := mongo.GetMongoCol("users") - n, err := col.Count(nil) - if err != nil { - return true - } - return n > 0 -} - -func ImportDemo() (err error) { - cmdStr := fmt.Sprintf("crawlab-cli login -a %s && crawlab-demo import", GetApiAddress()) - cmd, err := sys_exec.BuildCmd(cmdStr) - if err != nil { - return err - } - if err := cmd.Run(); err != nil { - trace.PrintError(err) - } - return nil -} - -func ReimportDemo() (err error) { - cmdStr := fmt.Sprintf("crawlab-cli login -a %s && crawlab-demo reimport", GetApiAddress()) - cmd, err := sys_exec.BuildCmd(cmdStr) - if err != nil { - return err - } - if err := cmd.Run(); err != nil { - trace.PrintError(err) - } - return nil -} - -func CleanupDemo() (err error) { - cmdStr := fmt.Sprintf("crawlab-cli login -a %s && crawlab-demo reimport", GetApiAddress()) - cmd, err := sys_exec.BuildCmd(cmdStr) - if err != nil { - return err - } - if err := cmd.Run(); err != nil { - trace.PrintError(err) - } - return nil -} diff --git a/core/utils/di.go b/core/utils/di.go deleted file mode 100644 index 8d69a733f..000000000 --- a/core/utils/di.go +++ /dev/null @@ -1,18 +0,0 @@ -package utils - -import ( - "github.com/crawlab-team/crawlab/trace" - "github.com/spf13/viper" - "go.uber.org/dig" - "os" -) - -func VisualizeContainer(c *dig.Container) (err error) { - if !viper.GetBool("debug.di.visualize") { - return nil - } - if err := dig.Visualize(c, os.Stdout); err != nil { - return trace.TraceError(err) - } - return nil -} diff --git a/core/utils/encrypt_test.go b/core/utils/encrypt_test.go index d393fa5bc..e23adb34e 100644 --- a/core/utils/encrypt_test.go +++ b/core/utils/encrypt_test.go @@ -1,7 +1,6 @@ package utils import ( - "fmt" "github.com/stretchr/testify/require" "testing" ) @@ -12,9 +11,6 @@ func TestEncryptAesPassword(t *testing.T) { require.Nil(t, err) decryptedText, err := DecryptAES(encryptedText) require.Nil(t, err) - fmt.Println(fmt.Sprintf("plainText: %s", plainText)) - fmt.Println(fmt.Sprintf("encryptedText: %s", encryptedText)) - fmt.Println(fmt.Sprintf("decryptedText: %s", decryptedText)) require.Equal(t, decryptedText, plainText) require.NotEqual(t, decryptedText, encryptedText) } diff --git a/core/utils/es.go b/core/utils/es.go deleted file mode 100644 index 7723205b0..000000000 --- a/core/utils/es.go +++ /dev/null @@ -1,200 +0,0 @@ -package utils - -import ( - "bytes" - "context" - "encoding/json" - "fmt" - "github.com/cenkalti/backoff/v4" - "github.com/crawlab-team/crawlab/core/constants" - "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/db/generic" - "github.com/crawlab-team/crawlab/trace" - "github.com/elastic/go-elasticsearch/v8" - "github.com/elastic/go-elasticsearch/v8/esapi" - "go.mongodb.org/mongo-driver/bson/primitive" - "time" -) - -func GetElasticsearchClient(ds *models.DataSource) (c *elasticsearch.Client, err error) { - return getElasticsearchClient(context.Background(), ds) -} - -func GetElasticsearchClientWithTimeout(ds *models.DataSource, timeout time.Duration) (c *elasticsearch.Client, err error) { - ctx, cancel := context.WithTimeout(context.Background(), timeout) - defer cancel() - return getElasticsearchClient(ctx, ds) -} - -func getElasticsearchClient(ctx context.Context, ds *models.DataSource) (c *elasticsearch.Client, err error) { - // normalize settings - host := ds.Host - port := ds.Port - if ds.Host == "" { - host = constants.DefaultHost - } - if ds.Port == "" { - port = constants.DefaultElasticsearchPort - } - - // es hosts - addresses := []string{ - fmt.Sprintf("http://%s:%s", host, port), - } - - // retry backoff - rb := backoff.NewExponentialBackOff() - - // es client options - cfg := elasticsearch.Config{ - Addresses: addresses, - Username: ds.Username, - Password: ds.Password, - RetryBackoff: func(i int) time.Duration { - if i == 1 { - rb.Reset() - } - return rb.NextBackOff() - }, - } - - // es client - done := make(chan struct{}) - go func() { - c, err = elasticsearch.NewClient(cfg) - if err != nil { - return - } - var res *esapi.Response - res, err = c.Info() - fmt.Println(res) - close(done) - }() - - // wait for done - select { - case <-ctx.Done(): - if ctx.Err() != nil { - err = ctx.Err() - } - case <-done: - } - - return c, err -} - -func GetElasticsearchClientWithTimeoutV2(ds *models.DataSourceV2, timeout time.Duration) (c *elasticsearch.Client, err error) { - ctx, cancel := context.WithTimeout(context.Background(), timeout) - defer cancel() - return getElasticsearchClientV2(ctx, ds) -} - -func getElasticsearchClientV2(ctx context.Context, ds *models.DataSourceV2) (c *elasticsearch.Client, err error) { - // normalize settings - host := ds.Host - port := ds.Port - if ds.Host == "" { - host = constants.DefaultHost - } - if ds.Port == "" { - port = constants.DefaultElasticsearchPort - } - - // es hosts - addresses := []string{ - fmt.Sprintf("http://%s:%s", host, port), - } - - // retry backoff - rb := backoff.NewExponentialBackOff() - - // es client options - cfg := elasticsearch.Config{ - Addresses: addresses, - Username: ds.Username, - Password: ds.Password, - RetryBackoff: func(i int) time.Duration { - if i == 1 { - rb.Reset() - } - return rb.NextBackOff() - }, - } - - // es client - done := make(chan struct{}) - go func() { - c, err = elasticsearch.NewClient(cfg) - if err != nil { - return - } - var res *esapi.Response - res, err = c.Info() - fmt.Println(res) - close(done) - }() - - // wait for done - select { - case <-ctx.Done(): - if ctx.Err() != nil { - err = ctx.Err() - } - case <-done: - } - - return c, err -} - -func GetElasticsearchQuery(query generic.ListQuery) (buf *bytes.Buffer) { - q := map[string]interface{}{} - if len(query) > 0 { - match := getElasticsearchQueryMatch(query) - q["query"] = map[string]interface{}{ - "match": match, - } - } - buf = &bytes.Buffer{} - if err := json.NewEncoder(buf).Encode(q); err != nil { - trace.PrintError(err) - } - return buf -} - -func GetElasticsearchQueryWithOptions(query generic.ListQuery, opts *generic.ListOptions) (buf *bytes.Buffer) { - q := map[string]interface{}{ - "size": opts.Limit, - "from": opts.Skip, - // TODO: sort - } - if len(query) > 0 { - match := getElasticsearchQueryMatch(query) - q["query"] = map[string]interface{}{ - "match": match, - } - } - buf = &bytes.Buffer{} - if err := json.NewEncoder(buf).Encode(q); err != nil { - trace.PrintError(err) - } - return buf -} - -func getElasticsearchQueryMatch(query generic.ListQuery) (match map[string]interface{}) { - match = map[string]interface{}{} - for _, c := range query { - switch c.Value.(type) { - case primitive.ObjectID: - c.Value = c.Value.(primitive.ObjectID).Hex() - } - switch c.Op { - case generic.OpEqual: - match[c.Key] = c.Value - default: - match[c.Key] = map[string]interface{}{ - c.Op: c.Value, - } - } - } - return match -} diff --git a/core/utils/file.go b/core/utils/file.go index 572730ec0..5a965bc02 100644 --- a/core/utils/file.go +++ b/core/utils/file.go @@ -5,22 +5,18 @@ import ( "crypto/md5" "encoding/hex" "fmt" - "github.com/apex/log" - "github.com/crawlab-team/crawlab/core/constants" "github.com/crawlab-team/crawlab/core/entity" "io" "io/fs" "os" "path" "path/filepath" - "runtime/debug" ) func OpenFile(fileName string) *os.File { file, err := os.OpenFile(fileName, os.O_CREATE|os.O_RDWR, os.ModePerm) if err != nil { - log.Errorf("create file error: %s, file_name: %s", err.Error(), fileName) - debug.PrintStack() + logger.Errorf("create file error: %s, file_name: %s", err.Error(), fileName) return nil } return file @@ -42,14 +38,11 @@ func IsDir(path string) bool { return s.IsDir() } -// ListDir Add: 增加error类型作为第二返回值 -// 在其他函数如 /task/log/file_driver.go中的 *FileLogDriver.cleanup()函数调用时 -// 可以通过判断err是否为nil来判断是否有错误发生 +// ListDir returns a list of files metadata in the directory func ListDir(path string) ([]fs.FileInfo, error) { list, err := os.ReadDir(path) if err != nil { - log.Errorf(err.Error()) - debug.PrintStack() + logger.Errorf("read dir error: %v, path: %s", err, path) return nil, err } @@ -57,8 +50,7 @@ func ListDir(path string) ([]fs.FileInfo, error) { for _, item := range list { info, err := item.Info() if err != nil { - log.Errorf(err.Error()) - debug.PrintStack() + logger.Errorf("get file info error: %v, path: %s", err, item.Name()) return nil, err } res = append(res, info) @@ -66,160 +58,8 @@ func ListDir(path string) ([]fs.FileInfo, error) { return res, nil } -func DeCompress(srcFile *os.File, dstPath string) error { - // 如果保存路径不存在,创建一个 - if !Exists(dstPath) { - if err := os.MkdirAll(dstPath, os.ModePerm); err != nil { - debug.PrintStack() - return err - } - } - - // 读取zip文件 - zipFile, err := zip.OpenReader(srcFile.Name()) - if err != nil { - log.Errorf("Unzip File Error:" + err.Error()) - debug.PrintStack() - return err - } - defer Close(zipFile) - - // 遍历zip内所有文件和目录 - for _, innerFile := range zipFile.File { - // 获取该文件数据 - info := innerFile.FileInfo() - - // 如果是目录,则创建一个 - if info.IsDir() { - err = os.MkdirAll(filepath.Join(dstPath, innerFile.Name), os.ModeDir|os.ModePerm) - if err != nil { - log.Errorf("Unzip File Error : " + err.Error()) - debug.PrintStack() - return err - } - continue - } - - // 如果文件目录不存在,则创建一个 - dirPath := filepath.Join(dstPath, filepath.Dir(innerFile.Name)) - if !Exists(dirPath) { - if err = os.MkdirAll(dirPath, os.ModeDir|os.ModePerm); err != nil { - log.Errorf("Unzip File Error : " + err.Error()) - debug.PrintStack() - return err - } - } - - // 打开该文件 - srcFile, err := innerFile.Open() - if err != nil { - log.Errorf("Unzip File Error : " + err.Error()) - debug.PrintStack() - continue - } - - // 创建新文件 - newFilePath := filepath.Join(dstPath, innerFile.Name) - newFile, err := os.OpenFile(newFilePath, os.O_RDWR|os.O_CREATE|os.O_TRUNC, info.Mode()) - if err != nil { - log.Errorf("Unzip File Error : " + err.Error()) - debug.PrintStack() - continue - } - - // 拷贝该文件到新文件中 - if _, err := io.Copy(newFile, srcFile); err != nil { - debug.PrintStack() - return err - } - - // 关闭该文件 - if err := srcFile.Close(); err != nil { - debug.PrintStack() - return err - } - - // 关闭新文件 - if err := newFile.Close(); err != nil { - debug.PrintStack() - return err - } - } - return nil -} - -// Compress 压缩文件 -// files 文件数组,可以是不同dir下的文件或者文件夹 -// dest 压缩文件存放地址 -func Compress(files []*os.File, dest string) error { - d, _ := os.Create(dest) - defer Close(d) - w := zip.NewWriter(d) - defer Close(w) - for _, file := range files { - if err := _Compress(file, "", w); err != nil { - return err - } - } - return nil -} - -func _Compress(file *os.File, prefix string, zw *zip.Writer) error { - info, err := file.Stat() - if err != nil { - debug.PrintStack() - return err - } - if info.IsDir() { - prefix = prefix + "/" + info.Name() - fileInfos, err := file.Readdir(-1) - if err != nil { - debug.PrintStack() - return err - } - for _, fi := range fileInfos { - f, err := os.Open(file.Name() + "/" + fi.Name()) - if err != nil { - debug.PrintStack() - return err - } - err = _Compress(f, prefix, zw) - if err != nil { - debug.PrintStack() - return err - } - } - } else { - header, err := zip.FileInfoHeader(info) - if err != nil { - debug.PrintStack() - return err - } - header.Name = prefix + "/" + header.Name - writer, err := zw.CreateHeader(header) - if err != nil { - debug.PrintStack() - return err - } - _, err = io.Copy(writer, file) - Close(file) - if err != nil { - debug.PrintStack() - return err - } - } - return nil -} - -func TrimFileData(data []byte) (res []byte) { - if string(data) == constants.EmptyFileData { - return res - } - return data -} - -func ZipDirectory(dir, zipfile string) error { - zipFile, err := os.Create(zipfile) +func ZipDirectory(dir, filePath string) error { + zipFile, err := os.Create(filePath) if err != nil { return err } diff --git a/core/utils/file_test.go b/core/utils/file_test.go index 4af32d0db..6e15ff02e 100644 --- a/core/utils/file_test.go +++ b/core/utils/file_test.go @@ -1,129 +1,40 @@ package utils import ( - "archive/zip" - . "github.com/smartystreets/goconvey/convey" - "io" - "log" - "os" - "runtime/debug" "testing" + + "github.com/stretchr/testify/assert" ) func TestExists(t *testing.T) { - var pathString = "../config" - var wrongPathString = "test" - - Convey("Test path or file is Exists or not", t, func() { - res := Exists(pathString) - Convey("The result should be true", func() { - So(res, ShouldEqual, true) - }) - wrongRes := Exists(wrongPathString) - Convey("The result should be false", func() { - So(wrongRes, ShouldEqual, false) - }) - }) -} - -func TestIsDir(t *testing.T) { - var pathString = "../config" - var fileString = "../config/config.go" - var wrongString = "test" - - Convey("Test path is folder or not", t, func() { - res := IsDir(pathString) - So(res, ShouldEqual, true) - fileRes := IsDir(fileString) - So(fileRes, ShouldEqual, false) - wrongRes := IsDir(wrongString) - So(wrongRes, ShouldEqual, false) - }) -} + // Test cases + pathString := "../config" + wrongPathString := "test" -func TestCompress(t *testing.T) { - err := os.Mkdir("testCompress", os.ModePerm) - if err != nil { - t.Error("create testCompress failed") - } - var pathString = "testCompress" - var files []*os.File - var disPath = "testCompress" - file, err := os.Open(pathString) - if err != nil { - t.Error("open source path failed") - } - files = append(files, file) - Convey("Verify dispath is valid path", t, func() { - er := Compress(files, disPath) - Convey("err should be nil", func() { - So(er, ShouldEqual, nil) - }) - }) - _ = os.RemoveAll("testCompress") + // Test existing path + res := Exists(pathString) + assert.True(t, res, "Expected existing path to return true") + // Test non-existing path + wrongRes := Exists(wrongPathString) + assert.False(t, wrongRes, "Expected non-existing path to return false") } -func Zip(zipFile string, fileList []string) error { - // 创建 zip 包文件 - fw, err := os.Create(zipFile) - if err != nil { - log.Fatal() - } - defer Close(fw) - - // 实例化新的 zip.Writer - zw := zip.NewWriter(fw) - defer Close(zw) - - for _, fileName := range fileList { - fr, err := os.Open(fileName) - if err != nil { - return err - } - fi, err := fr.Stat() - if err != nil { - return err - } - // 写入文件的头信息 - fh, err := zip.FileInfoHeader(fi) - if err != nil { - return err - } - w, err := zw.CreateHeader(fh) - if err != nil { - return err - } - // 写入文件内容 - _, err = io.Copy(w, fr) - if err != nil { - return err - } - } - return nil -} - -func TestDeCompress(t *testing.T) { - err := os.Mkdir("testDeCompress", os.ModePerm) - if err != nil { - t.Error(err) - - } - err = Zip("demo.zip", []string{}) - if err != nil { - t.Error("create zip file failed") - } - tmpFile, err := os.OpenFile("demo.zip", os.O_RDONLY, 0777) - if err != nil { - debug.PrintStack() - t.Error("open demo.zip failed") - } - var dstPath = "./testDeCompress" - Convey("Test DeCopmress func", t, func() { - - err := DeCompress(tmpFile, dstPath) - So(err, ShouldEqual, nil) - }) - _ = os.RemoveAll("testDeCompress") - _ = os.Remove("demo.zip") +func TestIsDir(t *testing.T) { + // Test cases + pathString := "../config" + fileString := "../config/config.go" + wrongString := "test" + + // Test directory path + res := IsDir(pathString) + assert.True(t, res, "Expected directory path to return true") + + // Test file path + fileRes := IsDir(fileString) + assert.False(t, fileRes, "Expected file path to return false") + + // Test non-existing path + wrongRes := IsDir(wrongString) + assert.False(t, wrongRes, "Expected non-existing path to return false") } diff --git a/core/utils/filter.go b/core/utils/filter.go index 13911bd32..49e331604 100644 --- a/core/utils/filter.go +++ b/core/utils/filter.go @@ -1,8 +1,8 @@ package utils import ( + errors2 "errors" "github.com/crawlab-team/crawlab/core/constants" - "github.com/crawlab-team/crawlab/core/errors" "github.com/crawlab-team/crawlab/core/interfaces" "go.mongodb.org/mongo-driver/bson" ) @@ -42,7 +42,7 @@ func FilterToQuery(f interfaces.Filter) (q bson.M, err error) { case constants.FilterOpLessThanEqual: q[key] = bson.M{"$lte": value} default: - return nil, errors.ErrorFilterInvalidOperation + return nil, errors2.New("invalid operation") } } return q, nil diff --git a/core/utils/git.go b/core/utils/git.go deleted file mode 100644 index 272d06911..000000000 --- a/core/utils/git.go +++ /dev/null @@ -1,21 +0,0 @@ -package utils - -import ( - "github.com/crawlab-team/crawlab/core/constants" - "github.com/crawlab-team/crawlab/core/interfaces" - vcs "github.com/crawlab-team/crawlab/vcs" -) - -func InitGitClientAuth(g interfaces.Git, gitClient *vcs.GitClient) { - // set auth - switch g.GetAuthType() { - case constants.GitAuthTypeHttp: - gitClient.SetAuthType(vcs.GitAuthTypeHTTP) - gitClient.SetUsername(g.GetUsername()) - gitClient.SetPassword(g.GetPassword()) - case constants.GitAuthTypeSsh: - gitClient.SetAuthType(vcs.GitAuthTypeSSH) - gitClient.SetUsername(g.GetUsername()) - gitClient.SetPrivateKey(g.GetPassword()) - } -} diff --git a/core/utils/hash.go b/core/utils/hash.go new file mode 100644 index 000000000..8fcbf0a15 --- /dev/null +++ b/core/utils/hash.go @@ -0,0 +1,12 @@ +package utils + +import "encoding/json" + +func GetObjectHash(obj any) string { + data, _ := json.Marshal(obj) + if data == nil { + // random hash + return EncryptMd5(NewUUIDString()) + } + return EncryptMd5(string(data)) +} diff --git a/core/utils/health.go b/core/utils/health.go new file mode 100644 index 000000000..600d9d405 --- /dev/null +++ b/core/utils/health.go @@ -0,0 +1,16 @@ +package utils + +import ( + "fmt" + "net/http" +) + +func HandleHealthFn(healthFn func() bool, healthPort int) { + addr := fmt.Sprintf(":%d", healthPort) + go func() { + if err := http.ListenAndServe(addr, nil); err != nil { + logger.Errorf("health check server failed: %v", err) + } + }() + logger.Infof("health check server started on port %d", healthPort) +} diff --git a/core/utils/helpers.go b/core/utils/helpers.go index 3f63f12ba..f3fcd56e1 100644 --- a/core/utils/helpers.go +++ b/core/utils/helpers.go @@ -4,13 +4,8 @@ import ( "github.com/crawlab-team/crawlab/trace" "io" "reflect" - "unsafe" ) -func BytesToString(b []byte) string { - return *(*string)(unsafe.Pointer(&b)) -} - func Close(c io.Closer) { err := c.Close() if err != nil { diff --git a/core/utils/http.go b/core/utils/http.go index b0e48ebff..2c212f15f 100644 --- a/core/utils/http.go +++ b/core/utils/http.go @@ -6,6 +6,7 @@ import ( "github.com/crawlab-team/crawlab/trace" "github.com/gin-gonic/gin" "net/http" + "time" ) func handleError(statusCode int, c *gin.Context, err error, print bool) { @@ -30,3 +31,9 @@ func HandleErrorUnauthorized(c *gin.Context, err error) { func HandleErrorInternalServerError(c *gin.Context, err error) { HandleError(http.StatusInternalServerError, c, err) } + +func NewHttpClient(timeout time.Duration) *http.Client { + return &http.Client{ + Timeout: timeout, + } +} diff --git a/core/utils/init.go b/core/utils/init.go deleted file mode 100644 index 21a12bd8c..000000000 --- a/core/utils/init.go +++ /dev/null @@ -1,30 +0,0 @@ -package utils - -import ( - "github.com/crawlab-team/crawlab/core/interfaces" - "sync" -) - -var moduleInitializedMap = sync.Map{} - -func InitModule(id interfaces.ModuleId, fn func() error) (err error) { - res, ok := moduleInitializedMap.Load(id) - if ok { - initialized, _ := res.(bool) - if initialized { - return nil - } - } - - if err := fn(); err != nil { - return err - } - - moduleInitializedMap.Store(id, true) - - return nil -} - -func ForceInitModule(fn func() error) (err error) { - return fn() -} diff --git a/core/utils/json.go b/core/utils/json.go deleted file mode 100644 index 564a67eb1..000000000 --- a/core/utils/json.go +++ /dev/null @@ -1,12 +0,0 @@ -package utils - -import "encoding/json" - -func JsonToBytes(d interface{}) (bytes []byte, err error) { - switch d.(type) { - case []byte: - return d.([]byte), nil - default: - return json.Marshal(d) - } -} diff --git a/core/utils/kafka.go b/core/utils/kafka.go deleted file mode 100644 index e33603922..000000000 --- a/core/utils/kafka.go +++ /dev/null @@ -1,68 +0,0 @@ -package utils - -import ( - "context" - "fmt" - "github.com/crawlab-team/crawlab/core/constants" - "github.com/crawlab-team/crawlab/core/models/models" - "github.com/segmentio/kafka-go" - "time" -) - -func GetKafkaConnection(ds *models.DataSource) (c *kafka.Conn, err error) { - return getKafkaConnection(context.Background(), ds) -} - -func GetKafkaConnectionWithTimeout(ds *models.DataSource, timeout time.Duration) (c *kafka.Conn, err error) { - ctx, cancel := context.WithTimeout(context.Background(), timeout) - defer cancel() - return getKafkaConnection(ctx, ds) -} - -func getKafkaConnection(ctx context.Context, ds *models.DataSource) (c *kafka.Conn, err error) { - // normalize settings - host := ds.Host - port := ds.Port - if ds.Host == "" { - host = constants.DefaultHost - } - if ds.Port == "" { - port = constants.DefaultKafkaPort - } - - // kafka connection address - network := "tcp" - address := fmt.Sprintf("%s:%s", host, port) - topic := ds.Database - partition := 0 // TODO: parameterize - - // kafka connection - return kafka.DialLeader(ctx, network, address, topic, partition) -} - -func GetKafkaConnectionWithTimeoutV2(ds *models.DataSourceV2, timeout time.Duration) (c *kafka.Conn, err error) { - ctx, cancel := context.WithTimeout(context.Background(), timeout) - defer cancel() - return getKafkaConnectionV2(ctx, ds) -} - -func getKafkaConnectionV2(ctx context.Context, ds *models.DataSourceV2) (c *kafka.Conn, err error) { - // normalize settings - host := ds.Host - port := ds.Port - if ds.Host == "" { - host = constants.DefaultHost - } - if ds.Port == "" { - port = constants.DefaultKafkaPort - } - - // kafka connection address - network := "tcp" - address := fmt.Sprintf("%s:%s", host, port) - topic := ds.Database - partition := 0 // TODO: parameterize - - // kafka connection - return kafka.DialLeader(ctx, network, address, topic, partition) -} diff --git a/core/utils/logger.go b/core/utils/logger.go new file mode 100644 index 000000000..3e62c3fe3 --- /dev/null +++ b/core/utils/logger.go @@ -0,0 +1,198 @@ +package utils + +import ( + "errors" + "fmt" + "github.com/crawlab-team/crawlab/trace" + "io" + "os" + "sync" + "time" + + "github.com/apex/log" + "github.com/apex/log/handlers/json" + "github.com/apex/log/handlers/text" +) + +var logger = NewLogger("Utils") + +// Logger represents a logger with a specific service prefix. +type Logger struct { + prefix string +} + +type ServiceLoggerOption func(logger *Logger) + +func WithHandler(handlerType string, output *os.File) ServiceLoggerOption { + return func(logger *Logger) { + SetHandler(handlerType, output) + } +} + +// NewLogger creates a new logger with the given service name as a prefix. +func NewLogger(prefix string, opts ...ServiceLoggerOption) *Logger { + logger := &Logger{ + prefix: prefix, + } + + if len(opts) == 0 { + SetConsoleHandler() + } else { + for _, opt := range opts { + opt(logger) + } + } + + return logger +} + +// Debug logs a debug message. +func (l *Logger) Debug(message string) { + log.Debug(l.getFormat(message)) +} + +// Info logs an informational message. +func (l *Logger) Info(message string) { + log.Info(l.getFormat(message)) +} + +// Warn logs a warning message. +func (l *Logger) Warn(message string) { + log.Warn(l.getFormat(message)) +} + +// Error logs an error message. +func (l *Logger) Error(message string) { + log.Error(l.getFormat(message)) + if IsDev() { + trace.PrintError(errors.New(message)) + } +} + +// Fatal logs a fatal message. +func (l *Logger) Fatal(message string) { + log.Fatal(l.getFormat(message)) + if IsDev() { + trace.PrintError(errors.New(message)) + } +} + +// Debugf logs a debug message with formatted content. +func (l *Logger) Debugf(format string, args ...interface{}) { + log.Debugf(l.getFormat(format), args...) +} + +// Infof logs an informational message with formatted content. +func (l *Logger) Infof(format string, args ...interface{}) { + log.Infof(l.getFormat(format), args...) +} + +// Warnf logs a warning message with formatted content. +func (l *Logger) Warnf(format string, args ...interface{}) { + log.Warnf(l.getFormat(format), args...) +} + +// Errorf logs an error message with formatted content. +func (l *Logger) Errorf(format string, args ...interface{}) { + log.Errorf(l.getFormat(format), args...) + if IsDev() { + trace.PrintError(errors.New(fmt.Sprintf(format, args...))) + } +} + +// Fatalf logs an error message with formatted content. +func (l *Logger) Fatalf(format string, args ...interface{}) { + log.Fatalf(l.getFormat(format), args...) + if IsDev() { + trace.PrintError(errors.New(fmt.Sprintf(format, args...))) + } +} + +func (l *Logger) getFormat(format string) string { + timestamp := time.Now().Local().Format("2006-01-02 15:04:05") + return fmt.Sprintf("[%s] [%s] %s", timestamp, l.prefix, format) +} + +type LogHandler struct { + mu sync.Mutex +} + +func handleLog(w io.Writer, e *log.Entry) error { + color := text.Colors[e.Level] + level := text.Strings[e.Level] + names := e.Fields.Names() + + fmt.Fprintf(w, "\033[%dm%6s\033[0m %-25s", color, level, e.Message) + + for _, name := range names { + fmt.Fprintf(w, " \033[%dm%s\033[0m=%v", color, name, e.Fields.Get(name)) + } + + fmt.Fprintln(w) + + return nil +} + +// MultiHandler is a handler that routes logs to stdout/stderr based on level +type MultiHandler struct { + mu sync.Mutex +} + +// NewMultiHandler creates a handler that routes logs to stdout/stderr based on level +func NewMultiHandler() *MultiHandler { + return &MultiHandler{ + mu: sync.Mutex{}, + } +} + +// HandleLog implements log.Handler interface +func (h *MultiHandler) HandleLog(e *log.Entry) error { + h.mu.Lock() + defer h.mu.Unlock() + + // Route to stderr for warn, error, and fatal + if e.Level <= log.WarnLevel { + return handleLog(os.Stdout, e) + } + // Route to stdout for debug and info + return handleLog(os.Stderr, e) +} + +type ConsoleHandler struct { + mu sync.Mutex +} + +func NewConsoleHandler() *ConsoleHandler { + return &ConsoleHandler{ + mu: sync.Mutex{}, + } +} + +func (h *ConsoleHandler) HandleLog(e *log.Entry) error { + h.mu.Lock() + defer h.mu.Unlock() + + return handleLog(os.Stdout, e) +} + +// SetHandler to include the new option +func SetHandler(handlerType string, output *os.File) { + switch handlerType { + case "json": + log.SetHandler(json.New(output)) + case "text": + log.SetHandler(text.New(output)) + case "split": + SetMultiHandler() + default: + SetConsoleHandler() + } +} + +func SetMultiHandler() { + log.SetHandler(NewMultiHandler()) +} + +func SetConsoleHandler() { + log.SetHandler(NewConsoleHandler()) +} diff --git a/core/utils/logo.go b/core/utils/logo.go new file mode 100644 index 000000000..b5c86c050 --- /dev/null +++ b/core/utils/logo.go @@ -0,0 +1,37 @@ +package utils + +import ( + "fmt" + "github.com/common-nighthawk/go-figure" +) + +func PrintLogoWithWelcomeInfo() { + printLogo() + printSystemInfo() + printWelcomeInfo() +} + +func printLogo() { + figure.NewColorFigure("Crawlab", "slant", "blue", true).Print() + fmt.Println("Welcome to use Crawlab: the ultimate distributed web crawling platform for efficient, scalable data extraction.") + fmt.Println() +} + +func printSystemInfo() { + fmt.Println("System Info:") + fmt.Printf("- Version: %s (%s)\n", GetEditionLabel(), GetVersion()) + fmt.Printf("- Node Type: %s\n", GetNodeTypeLabel()) + fmt.Println() +} + +func printWelcomeInfo() { + fmt.Println("For more information, please refer to the following resources:") + fmt.Println("- Website: https://crawlab.cn") + fmt.Println("- Documentation: https://docs.crawlab.cn") + fmt.Println("- GitHub Repo: https://github.com/crawlab-team/crawlab") + fmt.Println() + if IsMaster() { + fmt.Println("Visit the web ui at https://localhost:8080 (please be patient, it takes a while to start up)") + fmt.Println() + } +} diff --git a/core/utils/mongo.go b/core/utils/mongo.go deleted file mode 100644 index 23e92541d..000000000 --- a/core/utils/mongo.go +++ /dev/null @@ -1,139 +0,0 @@ -package utils - -import ( - "context" - "github.com/crawlab-team/crawlab/core/constants" - "github.com/crawlab-team/crawlab/core/models/models" - "github.com/crawlab-team/crawlab/db/generic" - "github.com/crawlab-team/crawlab/db/mongo" - "go.mongodb.org/mongo-driver/bson" - mongo2 "go.mongodb.org/mongo-driver/mongo" - "time" -) - -func GetMongoQuery(query generic.ListQuery) (res bson.M) { - res = bson.M{} - for _, c := range query { - switch c.Op { - case generic.OpEqual: - res[c.Key] = c.Value - default: - res[c.Key] = bson.M{ - c.Op: c.Value, - } - } - } - return res -} - -func GetMongoOpts(opts *generic.ListOptions) (res *mongo.FindOptions) { - var sort bson.D - for _, s := range opts.Sort { - direction := 1 - if s.Direction == generic.SortDirectionAsc { - direction = 1 - } else if s.Direction == generic.SortDirectionDesc { - direction = -1 - } - sort = append(sort, bson.E{Key: s.Key, Value: direction}) - } - return &mongo.FindOptions{ - Skip: opts.Skip, - Limit: opts.Limit, - Sort: sort, - } -} - -func GetMongoClient(ds *models.DataSource) (c *mongo2.Client, err error) { - return getMongoClient(context.Background(), ds) -} - -func GetMongoClientWithTimeout(ds *models.DataSource, timeout time.Duration) (c *mongo2.Client, err error) { - ctx, cancel := context.WithTimeout(context.Background(), timeout) - defer cancel() - return getMongoClient(ctx, ds) -} - -func GetMongoClientWithTimeoutV2(ds *models.DataSourceV2, timeout time.Duration) (c *mongo2.Client, err error) { - ctx, cancel := context.WithTimeout(context.Background(), timeout) - defer cancel() - return getMongoClientV2(ctx, ds) -} - -func getMongoClient(ctx context.Context, ds *models.DataSource) (c *mongo2.Client, err error) { - // normalize settings - if ds.Host == "" { - ds.Host = constants.DefaultHost - } - if ds.Port == "" { - ds.Port = constants.DefaultMongoPort - } - - // options - var opts []mongo.ClientOption - opts = append(opts, mongo.WithContext(ctx)) - opts = append(opts, mongo.WithUri(ds.Url)) - opts = append(opts, mongo.WithHost(ds.Host)) - opts = append(opts, mongo.WithPort(ds.Port)) - opts = append(opts, mongo.WithDb(ds.Database)) - opts = append(opts, mongo.WithUsername(ds.Username)) - opts = append(opts, mongo.WithPassword(ds.Password)) - opts = append(opts, mongo.WithHosts(ds.Hosts)) - - // extra - if ds.Extra != nil { - // auth source - authSource, ok := ds.Extra["auth_source"] - if ok { - opts = append(opts, mongo.WithAuthSource(authSource)) - } - - // auth mechanism - authMechanism, ok := ds.Extra["auth_mechanism"] - if ok { - opts = append(opts, mongo.WithAuthMechanism(authMechanism)) - } - } - - // client - return mongo.GetMongoClient(opts...) -} - -func getMongoClientV2(ctx context.Context, ds *models.DataSourceV2) (c *mongo2.Client, err error) { - // normalize settings - if ds.Host == "" { - ds.Host = constants.DefaultHost - } - if ds.Port == "" { - ds.Port = constants.DefaultMongoPort - } - - // options - var opts []mongo.ClientOption - opts = append(opts, mongo.WithContext(ctx)) - opts = append(opts, mongo.WithUri(ds.Url)) - opts = append(opts, mongo.WithHost(ds.Host)) - opts = append(opts, mongo.WithPort(ds.Port)) - opts = append(opts, mongo.WithDb(ds.Database)) - opts = append(opts, mongo.WithUsername(ds.Username)) - opts = append(opts, mongo.WithPassword(ds.Password)) - opts = append(opts, mongo.WithHosts(ds.Hosts)) - - // extra - if ds.Extra != nil { - // auth source - authSource, ok := ds.Extra["auth_source"] - if ok { - opts = append(opts, mongo.WithAuthSource(authSource)) - } - - // auth mechanism - authMechanism, ok := ds.Extra["auth_mechanism"] - if ok { - opts = append(opts, mongo.WithAuthMechanism(authMechanism)) - } - } - - // client - return mongo.GetMongoClient(opts...) -} diff --git a/core/utils/mssql.go b/core/utils/mssql.go deleted file mode 100644 index 03329eae5..000000000 --- a/core/utils/mssql.go +++ /dev/null @@ -1,105 +0,0 @@ -package utils - -import ( - "context" - "fmt" - "github.com/crawlab-team/crawlab/core/constants" - "github.com/crawlab-team/crawlab/core/models/models" - "github.com/upper/db/v4" - "github.com/upper/db/v4/adapter/mssql" - "time" -) - -func GetMssqlSession(ds *models.DataSource) (s db.Session, err error) { - return getMssqlSession(context.Background(), ds) -} - -func GetMssqlSessionWithTimeout(ds *models.DataSource, timeout time.Duration) (s db.Session, err error) { - ctx, cancel := context.WithTimeout(context.Background(), timeout) - defer cancel() - return getMssqlSession(ctx, ds) -} - -func getMssqlSession(ctx context.Context, ds *models.DataSource) (s db.Session, err error) { - // normalize settings - host := ds.Host - port := ds.Port - if ds.Host == "" { - host = constants.DefaultHost - } - if ds.Port == "" { - port = constants.DefaultMssqlPort - } - - // connect settings - settings := mssql.ConnectionURL{ - User: ds.Username, - Password: ds.Password, - Database: ds.Database, - Host: fmt.Sprintf("%s:%s", host, port), - Options: nil, - } - - // session - done := make(chan struct{}) - go func() { - s, err = mssql.Open(settings) - close(done) - }() - - // wait for done - select { - case <-ctx.Done(): - if ctx.Err() != nil { - err = ctx.Err() - } - case <-done: - } - - return s, err -} - -func GetMssqlSessionWithTimeoutV2(ds *models.DataSourceV2, timeout time.Duration) (s db.Session, err error) { - ctx, cancel := context.WithTimeout(context.Background(), timeout) - defer cancel() - return getMssqlSessionV2(ctx, ds) -} - -func getMssqlSessionV2(ctx context.Context, ds *models.DataSourceV2) (s db.Session, err error) { - // normalize settings - host := ds.Host - port := ds.Port - if ds.Host == "" { - host = constants.DefaultHost - } - if ds.Port == "" { - port = constants.DefaultMssqlPort - } - - // connect settings - settings := mssql.ConnectionURL{ - User: ds.Username, - Password: ds.Password, - Database: ds.Database, - Host: fmt.Sprintf("%s:%s", host, port), - Options: nil, - } - - // session - done := make(chan struct{}) - go func() { - s, err = mssql.Open(settings) - close(done) - }() - - // wait for done - select { - case <-ctx.Done(): - if ctx.Err() != nil { - err = ctx.Err() - } - case <-done: - } - - return s, err -} diff --git a/core/utils/mysql.go b/core/utils/mysql.go deleted file mode 100644 index c1e78a20c..000000000 --- a/core/utils/mysql.go +++ /dev/null @@ -1,105 +0,0 @@ -package utils - -import ( - "context" - "fmt" - "github.com/crawlab-team/crawlab/core/constants" - "github.com/crawlab-team/crawlab/core/models/models" - "github.com/upper/db/v4" - "github.com/upper/db/v4/adapter/mysql" - "time" -) - -func GetMysqlSession(ds *models.DataSource) (s db.Session, err error) { - return getMysqlSession(context.Background(), ds) -} - -func GetMysqlSessionWithTimeout(ds *models.DataSource, timeout time.Duration) (s db.Session, err error) { - ctx, cancel := context.WithTimeout(context.Background(), timeout) - defer cancel() - return getMysqlSession(ctx, ds) -} - -func getMysqlSession(ctx context.Context, ds *models.DataSource) (s db.Session, err error) { - // normalize settings - host := ds.Host - port := ds.Port - if ds.Host == "" { - host = constants.DefaultHost - } - if ds.Port == "" { - port = constants.DefaultMysqlPort - } - - // connect settings - settings := mysql.ConnectionURL{ - User: ds.Username, - Password: ds.Password, - Database: ds.Database, - Host: fmt.Sprintf("%s:%s", host, port), - Options: nil, - } - - // session - done := make(chan struct{}) - go func() { - s, err = mysql.Open(settings) - close(done) - }() - - // wait for done - select { - case <-ctx.Done(): - if ctx.Err() != nil { - err = ctx.Err() - } - case <-done: - } - - return s, err -} - -func GetMysqlSessionWithTimeoutV2(ds *models.DataSourceV2, timeout time.Duration) (s db.Session, err error) { - ctx, cancel := context.WithTimeout(context.Background(), timeout) - defer cancel() - return getMysqlSessionV2(ctx, ds) -} - -func getMysqlSessionV2(ctx context.Context, ds *models.DataSourceV2) (s db.Session, err error) { - // normalize settings - host := ds.Host - port := ds.Port - if ds.Host == "" { - host = constants.DefaultHost - } - if ds.Port == "" { - port = constants.DefaultMysqlPort - } - - // connect settings - settings := mysql.ConnectionURL{ - User: ds.Username, - Password: ds.Password, - Database: ds.Database, - Host: fmt.Sprintf("%s:%s", host, port), - Options: nil, - } - - // session - done := make(chan struct{}) - go func() { - s, err = mysql.Open(settings) - close(done) - }() - - // wait for done - select { - case <-ctx.Done(): - if ctx.Err() != nil { - err = ctx.Err() - } - case <-done: - } - - return s, err -} diff --git a/core/utils/node.go b/core/utils/node.go deleted file mode 100644 index 1f20ade16..000000000 --- a/core/utils/node.go +++ /dev/null @@ -1,13 +0,0 @@ -package utils - -func IsMaster() bool { - return EnvIsTrue("node.master", false) -} - -func GetNodeType() string { - if IsMaster() { - return "master" - } else { - return "worker" - } -} diff --git a/core/utils/postgresql.go b/core/utils/postgresql.go deleted file mode 100644 index cf3ba7dc5..000000000 --- a/core/utils/postgresql.go +++ /dev/null @@ -1,105 +0,0 @@ -package utils - -import ( - "context" - "fmt" - "github.com/crawlab-team/crawlab/core/constants" - "github.com/crawlab-team/crawlab/core/models/models" - "github.com/upper/db/v4" - "github.com/upper/db/v4/adapter/postgresql" - "time" -) - -func GetPostgresqlSession(ds *models.DataSource) (s db.Session, err error) { - return getPostgresqlSession(context.Background(), ds) -} - -func GetPostgresqlSessionWithTimeout(ds *models.DataSource, timeout time.Duration) (s db.Session, err error) { - ctx, cancel := context.WithTimeout(context.Background(), timeout) - defer cancel() - return getPostgresqlSession(ctx, ds) -} - -func getPostgresqlSession(ctx context.Context, ds *models.DataSource) (s db.Session, err error) { - // normalize settings - host := ds.Host - port := ds.Port - if ds.Host == "" { - host = constants.DefaultHost - } - if ds.Port == "" { - port = constants.DefaultPostgresqlPort - } - - // connect settings - settings := postgresql.ConnectionURL{ - User: ds.Username, - Password: ds.Password, - Database: ds.Database, - Host: fmt.Sprintf("%s:%s", host, port), - Options: nil, - } - - // session - done := make(chan struct{}) - go func() { - s, err = postgresql.Open(settings) - close(done) - }() - - // wait for done - select { - case <-ctx.Done(): - if ctx.Err() != nil { - err = ctx.Err() - } - case <-done: - } - - return s, err -} - -func GetPostgresqlSessionWithTimeoutV2(ds *models.DataSourceV2, timeout time.Duration) (s db.Session, err error) { - ctx, cancel := context.WithTimeout(context.Background(), timeout) - defer cancel() - return getPostgresqlSessionV2(ctx, ds) -} - -func getPostgresqlSessionV2(ctx context.Context, ds *models.DataSourceV2) (s db.Session, err error) { - // normalize settings - host := ds.Host - port := ds.Port - if ds.Host == "" { - host = constants.DefaultHost - } - if ds.Port == "" { - port = constants.DefaultPostgresqlPort - } - - // connect settings - settings := postgresql.ConnectionURL{ - User: ds.Username, - Password: ds.Password, - Database: ds.Database, - Host: fmt.Sprintf("%s:%s", host, port), - Options: nil, - } - - // session - done := make(chan struct{}) - go func() { - s, err = postgresql.Open(settings) - close(done) - }() - - // wait for done - select { - case <-ctx.Done(): - if ctx.Err() != nil { - err = ctx.Err() - } - case <-done: - } - - return s, err -} diff --git a/core/utils/process.go b/core/utils/process.go new file mode 100644 index 000000000..6e0dccd11 --- /dev/null +++ b/core/utils/process.go @@ -0,0 +1,104 @@ +package utils + +import ( + "errors" + "os/exec" + "runtime" + + "github.com/shirou/gopsutil/process" +) + +func BuildCmd(cmdStr string) (cmd *exec.Cmd, err error) { + if cmdStr == "" { + return nil, errors.New("command string is empty") + } + + if runtime.GOOS == "windows" { + return exec.Command("cmd", "/C", cmdStr), nil + } + return exec.Command("bash", "-c", cmdStr), nil +} + +func ProcessIdExists(pid int) (exists bool) { + if runtime.GOOS == "windows" { + return processIdExistsWindows(pid) + } else { + return processIdExistsLinuxMac(pid) + } +} + +func processIdExistsWindows(pid int) (exists bool) { + exists, err := process.PidExists(int32(pid)) + if err != nil { + logger.Errorf("error checking if process exists: %v", err) + } + return exists +} + +func processIdExistsLinuxMac(pid int) (exists bool) { + exists, err := process.PidExists(int32(pid)) + if err != nil { + logger.Errorf("error checking if process exists: %v", err) + } + return exists +} + +func GetProcesses() (processes []*process.Process, err error) { + processes, err = process.Processes() + if err != nil { + logger.Errorf("error getting processes: %v", err) + return nil, err + } + return processes, nil +} + +type KillProcessOptions struct { + Force bool +} + +func KillProcess(cmd *exec.Cmd, force bool) error { + // process + p, err := process.NewProcess(int32(cmd.Process.Pid)) + if err != nil { + logger.Errorf("failed to get process: %v", err) + return err + } + + // kill process + return killProcessRecursive(p, force) +} + +func killProcessRecursive(p *process.Process, force bool) (err error) { + // children processes + cps, err := p.Children() + if err != nil { + if !errors.Is(err, process.ErrorNoChildren) { + logger.Errorf("failed to get children processes: %v", err) + } else if errors.Is(err, process.ErrorProcessNotRunning) { + return nil + } + return killProcess(p, force) + } + + // iterate children processes + for _, cp := range cps { + if err := killProcessRecursive(cp, force); err != nil { + return err + } + } + + return killProcess(p, force) +} + +func killProcess(p *process.Process, force bool) (err error) { + if force { + err = p.Kill() + } else { + err = p.Terminate() + } + if err != nil { + logger.Errorf("failed to kill process (force: %v): %v", force, err) + return err + } + return nil +} diff --git a/core/utils/process_test.go b/core/utils/process_test.go new file mode 100644 index 000000000..f0b3cd671 --- /dev/null +++ b/core/utils/process_test.go @@ -0,0 +1,20 @@ +package utils + +import ( + "os" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestProcessIdExists(t *testing.T) { + t.Run("existing process", func(t *testing.T) { + currentPid := os.Getpid() + assert.True(t, ProcessIdExists(currentPid), "should detect current process") + }) + + t.Run("non-existent process", func(t *testing.T) { + invalidPid := 99999999 + assert.False(t, ProcessIdExists(invalidPid), "should not detect non-existent process") + }) +} diff --git a/core/utils/result.go b/core/utils/result.go deleted file mode 100644 index 624503090..000000000 --- a/core/utils/result.go +++ /dev/null @@ -1,23 +0,0 @@ -package utils - -import ( - "encoding/json" - "github.com/crawlab-team/crawlab/core/interfaces" -) - -func GetResultHash(value interface{}, keys []string) (res string, err error) { - m := make(map[string]interface{}) - for _, k := range keys { - _value, ok := value.(interfaces.Result) - if !ok { - continue - } - v := _value.GetValue(k) - m[k] = v - } - data, err := json.Marshal(m) - if err != nil { - return "", err - } - return EncryptMd5(string(data)), nil -} diff --git a/core/utils/rpc.go b/core/utils/rpc.go deleted file mode 100644 index 03414199e..000000000 --- a/core/utils/rpc.go +++ /dev/null @@ -1,14 +0,0 @@ -package utils - -import "encoding/json" - -// Object 转化为 String -func ObjectToString(params interface{}) string { - bytes, _ := json.Marshal(params) - return BytesToString(bytes) -} - -// 获取 RPC 参数 -func GetRpcParam(key string, params map[string]string) string { - return params[key] -} diff --git a/core/utils/spider.go b/core/utils/spider.go index 4484ccf0a..378b5d41b 100644 --- a/core/utils/spider.go +++ b/core/utils/spider.go @@ -1,8 +1,34 @@ package utils -func GetSpiderCol(col string, name string) string { - if col == "" { - return "results_" + name +import ( + "errors" + "github.com/crawlab-team/crawlab/core/models/models" + "path/filepath" +) + +func GetSpiderRootPath(s *models.Spider) (rootPath string, err error) { + // check git permission + if !IsPro() && !s.GitId.IsZero() { + return "", errors.New("git is not allowed in the community version") + } + + // if git id is zero, return spider id as root path + if s.GitId.IsZero() { + return s.Id.Hex(), nil } - return col + + return filepath.Join(s.GitId.Hex(), s.GitRootPath), nil +} + +func GetSpiderFullRootPath(s *models.Spider) (rootPath string, err error) { + // workspace path + workspacePath := GetWorkspace() + + // get spider root path + rootPath, err = GetSpiderRootPath(s) + if err != nil { + return "", err + } + + return filepath.Join(workspacePath, rootPath), nil } diff --git a/core/utils/sql.go b/core/utils/sql.go deleted file mode 100644 index 4eccce864..000000000 --- a/core/utils/sql.go +++ /dev/null @@ -1,27 +0,0 @@ -package utils - -import ( - "github.com/crawlab-team/crawlab/db/generic" - "github.com/upper/db/v4" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -func GetSqlQuery(query generic.ListQuery) (res db.Cond) { - res = db.Cond{} - for _, c := range query { - switch c.Value.(type) { - case primitive.ObjectID: - c.Value = c.Value.(primitive.ObjectID).Hex() - } - switch c.Op { - case generic.OpEqual: - res[c.Key] = c.Value - default: - res[c.Key] = db.Cond{ - c.Op: c.Value, - } - } - } - // TODO: sort - return res -} diff --git a/core/utils/sqlite.go b/core/utils/sqlite.go deleted file mode 100644 index 83a06cbcf..000000000 --- a/core/utils/sqlite.go +++ /dev/null @@ -1,77 +0,0 @@ -package utils - -import ( - "context" - "github.com/crawlab-team/crawlab/core/models/models" - "github.com/upper/db/v4" - "github.com/upper/db/v4/adapter/sqlite" - "time" -) - -func GetSqliteSession(ds *models.DataSource) (s db.Session, err error) { - return getSqliteSession(context.Background(), ds) -} - -func GetSqliteSessionWithTimeout(ds *models.DataSource, timeout time.Duration) (s db.Session, err error) { - ctx, cancel := context.WithTimeout(context.Background(), timeout) - defer cancel() - return getSqliteSession(ctx, ds) -} - -func getSqliteSession(ctx context.Context, ds *models.DataSource) (s db.Session, err error) { - // connect settings - settings := sqlite.ConnectionURL{ - Database: ds.Database, - Options: nil, - } - - // session - done := make(chan struct{}) - go func() { - s, err = sqlite.Open(settings) - close(done) - }() - - // wait for done - select { - case <-ctx.Done(): - if ctx.Err() != nil { - err = ctx.Err() - } - case <-done: - } - - return s, err -} - -func GetSqliteSessionWithTimeoutV2(ds *models.DataSourceV2, timeout time.Duration) (s db.Session, err error) { - ctx, cancel := context.WithTimeout(context.Background(), timeout) - defer cancel() - return getSqliteSessionV2(ctx, ds) -} - -func getSqliteSessionV2(ctx context.Context, ds *models.DataSourceV2) (s db.Session, err error) { - // connect settings - settings := sqlite.ConnectionURL{ - Database: ds.Database, - Options: nil, - } - - // session - done := make(chan struct{}) - go func() { - s, err = sqlite.Open(settings) - close(done) - }() - - // wait for done - select { - case <-ctx.Done(): - if ctx.Err() != nil { - err = ctx.Err() - } - case <-done: - } - - return s, err -} diff --git a/core/utils/stats.go b/core/utils/stats.go deleted file mode 100644 index d4b585bf7..000000000 --- a/core/utils/stats.go +++ /dev/null @@ -1 +0,0 @@ -package utils diff --git a/core/utils/string.go b/core/utils/string.go new file mode 100644 index 000000000..ed726045d --- /dev/null +++ b/core/utils/string.go @@ -0,0 +1,75 @@ +package utils + +import ( + "golang.org/x/text/cases" + "golang.org/x/text/language" + "strings" +) + +// replaceChars replaces characters in a string +// Parameters: +// - s: the string to replace characters in +// - o: the characters to replace +// - r: the replacement character +// +// Example: +// +// replaceChars("a-b-c", []string{"-"}, "_") => "a_b_c" +// +// Returns: +// - the string with characters replaced +func replaceChars(s string, o []string, r string) string { + for _, c := range o { + s = strings.ReplaceAll(s, c, r) + } + return s +} + +func ToSnakeCase(s string) string { + s = strings.TrimSpace(s) + s = strings.ToLower(s) + return replaceChars(s, []string{" ", "-", "."}, "_") +} + +func ToPascalCase(s string) string { + s = strings.TrimSpace(s) + s = strings.ReplaceAll(s, "_", " ") + s = cases.Title(language.English).String(s) + s = strings.ReplaceAll(s, " ", "") + return s +} + +func ToKebabCase(s string) string { + s = strings.TrimSpace(s) + s = strings.ToLower(s) + return replaceChars(s, []string{" ", "_", "."}, "-") +} + +// splitStringWithQuotes splits a string with quotes +// Parameters: +// - s: the string to split +// - q: the quote character +// - d: the delimiter +// - r: the replacement +// +// Example: +// +// splitStringWithQuotes("a,b,c", "'", ",", ", ") => "'a', 'b', 'c'" +// +// Returns: +// - the split string +func splitStringWithQuotes(s, q, d, r string) string { + s = strings.TrimSpace(s) + s = strings.ReplaceAll(s, " ", "") + s = strings.ReplaceAll(s, d, q+r+q) + s = q + s + q + return s +} + +func SplitStringWithSingleQuotes(s string) string { + return splitStringWithQuotes(s, "'", ",", ", ") +} + +func SplitStringWithDoubleQuotes(s string) string { + return splitStringWithQuotes(s, "\"", ",", "\", \"") +} diff --git a/core/utils/system.go b/core/utils/system.go index 9b161f112..24156a1e7 100644 --- a/core/utils/system.go +++ b/core/utils/system.go @@ -2,6 +2,27 @@ package utils import "github.com/spf13/viper" -func IsPro() bool { - return viper.GetString("info.edition") == "global.edition.pro" +func GetVersion() string { + return viper.GetString("version") + +} + +func GetEdition() string { + return viper.GetString("edition") +} + +func GetEditionLabel() string { + if IsPro() { + return "Crawlab Pro" + } else { + return "Crawlab Community" + } +} + +func GetNodeTypeLabel() string { + if IsMaster() { + return "Master" + } else { + return "Worker" + } } diff --git a/core/utils/task.go b/core/utils/task.go index 94bfbb3b2..cd06bfebd 100644 --- a/core/utils/task.go +++ b/core/utils/task.go @@ -1,6 +1,8 @@ package utils -import "github.com/crawlab-team/crawlab/core/constants" +import ( + "github.com/crawlab-team/crawlab/core/constants" +) func IsCancellable(status string) bool { switch status { diff --git a/core/utils/time.go b/core/utils/time.go index 1ddcbdcfa..afdbe20b4 100644 --- a/core/utils/time.go +++ b/core/utils/time.go @@ -2,7 +2,6 @@ package utils import ( "errors" - "github.com/apex/log" "github.com/crawlab-team/crawlab/trace" "regexp" "strconv" @@ -27,13 +26,13 @@ func GetTimeUnitParts(timeUnit string) (num int, unit string, err error) { groups := re.FindStringSubmatch(timeUnit) if len(groups) < 3 { err = errors.New("failed to parse duration text") - log.Errorf("failed to parse duration text: %v", err) + logger.Errorf("failed to parse duration text: %v", err) trace.PrintError(err) return 0, "", err } num, err = strconv.Atoi(groups[1]) if err != nil { - log.Errorf("failed to convert string to int: %v", err) + logger.Errorf("failed to convert string to int: %v", err) trace.PrintError(err) return 0, "", err } @@ -44,7 +43,7 @@ func GetTimeUnitParts(timeUnit string) (num int, unit string, err error) { func GetTimeDuration(num string, unit string) (d time.Duration, err error) { numInt, err := strconv.Atoi(num) if err != nil { - log.Errorf("failed to convert string to int: %v", err) + logger.Errorf("failed to convert string to int: %v", err) trace.PrintError(err) return d, err } @@ -65,7 +64,7 @@ func GetTimeDuration(num string, unit string) (d time.Duration, err error) { d = time.Duration(numInt) * 365 * 24 * time.Hour default: err = errors.New("invalid time unit") - log.Errorf("invalid time unit: %v", unit) + logger.Errorf("invalid time unit: %v", unit) trace.PrintError(err) return d, err } diff --git a/db/.editorconfig b/db/.editorconfig deleted file mode 100644 index ef3de0a1e..000000000 --- a/db/.editorconfig +++ /dev/null @@ -1,9 +0,0 @@ -root = true - -[*] -charset = utf-8 -end_of_line = lf -indent_size = 4 -indent_style = tab -insert_final_newline = true -trim_trailing_whitespace = true diff --git a/db/.gitignore b/db/.gitignore deleted file mode 100644 index 4089fa24f..000000000 --- a/db/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -.idea -.DS_Store -tmp/ -vendor/ -go.sum \ No newline at end of file diff --git a/db/LICENSE b/db/LICENSE deleted file mode 100644 index e41311d27..000000000 --- a/db/LICENSE +++ /dev/null @@ -1,29 +0,0 @@ -BSD 3-Clause License - -Copyright (c) 2020, Crawlab Team -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/db/README.md b/db/README.md deleted file mode 100644 index 04b2346ff..000000000 --- a/db/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# crawlab-db -Backend database module for Crawlab diff --git a/db/errors/base.go b/db/errors/base.go deleted file mode 100644 index a03100752..000000000 --- a/db/errors/base.go +++ /dev/null @@ -1,6 +0,0 @@ -package errors - -const ( - errorPrefixMongo = "mongo" - errorPrefixRedis = "redis" -) diff --git a/db/errors/errors.go b/db/errors/errors.go deleted file mode 100644 index 5e5e23a07..000000000 --- a/db/errors/errors.go +++ /dev/null @@ -1,10 +0,0 @@ -package errors - -import "errors" - -var ( - ErrInvalidType = errors.New("invalid type") - ErrMissingValue = errors.New("missing value") - ErrNoCursor = errors.New("no cursor") - ErrAlreadyLocked = errors.New("already locked") -) diff --git a/db/errors/redis.go b/db/errors/redis.go deleted file mode 100644 index 70db1e798..000000000 --- a/db/errors/redis.go +++ /dev/null @@ -1,15 +0,0 @@ -package errors - -import ( - "errors" - "fmt" -) - -var ( - ErrorRedisInvalidType = NewRedisError("invalid type") - ErrorRedisLocked = NewRedisError("locked") -) - -func NewRedisError(msg string) (err error) { - return errors.New(fmt.Sprintf("%s: %s", errorPrefixRedis, msg)) -} diff --git a/db/generic/base.go b/db/generic/base.go deleted file mode 100644 index c3cc5b29f..000000000 --- a/db/generic/base.go +++ /dev/null @@ -1,8 +0,0 @@ -package generic - -const ( - DataSourceTypeMongo = "mongo" - DataSourceTypeMysql = "mysql" - DataSourceTypePostgres = "postgres" - DataSourceTypeElasticSearch = "postgres" -) diff --git a/db/go.mod b/db/go.mod deleted file mode 100644 index c0f417aaf..000000000 --- a/db/go.mod +++ /dev/null @@ -1,57 +0,0 @@ -module github.com/crawlab-team/crawlab/db - -go 1.22 - -replace github.com/crawlab-team/crawlab/trace => ../trace - -require ( - github.com/apex/log v1.9.0 - github.com/cenkalti/backoff/v4 v4.3.0 - github.com/crawlab-team/crawlab/trace v0.0.0-20240614095218-7b4ee8399ab0 - github.com/gomodule/redigo v2.0.0+incompatible - github.com/jmoiron/sqlx v1.2.0 - github.com/spf13/viper v1.19.0 - github.com/stretchr/testify v1.9.0 - go.mongodb.org/mongo-driver v1.15.1 -) - -require ( - github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect - github.com/fsnotify/fsnotify v1.7.0 // indirect - github.com/go-sql-driver/mysql v1.6.0 // indirect - github.com/golang/snappy v0.0.4 // indirect - github.com/google/go-cmp v0.6.0 // indirect - github.com/hashicorp/hcl v1.0.0 // indirect - github.com/klauspost/compress v1.17.7 // indirect - github.com/lib/pq v1.10.4 // indirect - github.com/magiconair/properties v1.8.7 // indirect - github.com/mattn/go-sqlite3 v1.14.9 // indirect - github.com/mitchellh/mapstructure v1.5.0 // indirect - github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe // indirect - github.com/pelletier/go-toml/v2 v2.2.2 // indirect - github.com/pkg/errors v0.9.1 // indirect - github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - github.com/rogpeppe/go-internal v1.11.0 // indirect - github.com/sagikazarmark/locafero v0.4.0 // indirect - github.com/sagikazarmark/slog-shim v0.1.0 // indirect - github.com/sourcegraph/conc v0.3.0 // indirect - github.com/spf13/afero v1.11.0 // indirect - github.com/spf13/cast v1.6.0 // indirect - github.com/spf13/pflag v1.0.5 // indirect - github.com/subosito/gotenv v1.6.0 // indirect - github.com/xdg-go/pbkdf2 v1.0.0 // indirect - github.com/xdg-go/scram v1.1.2 // indirect - github.com/xdg-go/stringprep v1.0.4 // indirect - github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // indirect - github.com/ztrue/tracerr v0.4.0 // indirect - go.uber.org/atomic v1.9.0 // indirect - go.uber.org/multierr v1.9.0 // indirect - golang.org/x/crypto v0.23.0 // indirect - golang.org/x/exp v0.0.0-20240222234643-814bf88cf225 // indirect - golang.org/x/sync v0.7.0 // indirect - golang.org/x/sys v0.20.0 // indirect - golang.org/x/text v0.15.0 // indirect - gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect - gopkg.in/ini.v1 v1.67.0 // indirect - gopkg.in/yaml.v3 v3.0.1 // indirect -) diff --git a/db/interfaces.go b/db/interfaces.go deleted file mode 100644 index c6640a732..000000000 --- a/db/interfaces.go +++ /dev/null @@ -1,39 +0,0 @@ -package db - -import "time" - -type RedisClient interface { - Ping() (err error) - Keys(pattern string) (values []string, err error) - AllKeys() (values []string, err error) - Get(collection string) (value string, err error) - Set(collection string, value string) (err error) - Del(collection string) (err error) - RPush(collection string, value interface{}) (err error) - LPush(collection string, value interface{}) (err error) - LPop(collection string) (value string, err error) - RPop(collection string) (value string, err error) - LLen(collection string) (count int, err error) - BRPop(collection string, timeout int) (value string, err error) - BLPop(collection string, timeout int) (value string, err error) - HSet(collection string, key string, value string) (err error) - HGet(collection string, key string) (value string, err error) - HDel(collection string, key string) (err error) - HScan(collection string) (results map[string]string, err error) - HKeys(collection string) (results []string, err error) - ZAdd(collection string, score float32, value interface{}) (err error) - ZCount(collection string, min string, max string) (count int, err error) - ZCountAll(collection string) (count int, err error) - ZScan(collection string, pattern string, count int) (results []string, err error) - ZPopMax(collection string, count int) (results []string, err error) - ZPopMin(collection string, count int) (results []string, err error) - ZPopMaxOne(collection string) (value string, err error) - ZPopMinOne(collection string) (value string, err error) - BZPopMax(collection string, timeout int) (value string, err error) - BZPopMin(collection string, timeout int) (value string, err error) - Lock(lockKey string) (value int64, err error) - UnLock(lockKey string, value int64) - MemoryStats() (stats map[string]int64, err error) - SetBackoffMaxInterval(interval time.Duration) - SetTimeout(timeout int) -} diff --git a/db/mongo/client_options.go b/db/mongo/client_options.go deleted file mode 100644 index ef664f2a0..000000000 --- a/db/mongo/client_options.go +++ /dev/null @@ -1,79 +0,0 @@ -package mongo - -import "context" - -type ClientOption func(options *ClientOptions) - -type ClientOptions struct { - Context context.Context - Uri string - Host string - Port string - Db string - Hosts []string - Username string - Password string - AuthSource string - AuthMechanism string - AuthMechanismProperties map[string]string -} - -func WithContext(ctx context.Context) ClientOption { - return func(options *ClientOptions) { - options.Context = ctx - } -} - -func WithUri(value string) ClientOption { - return func(options *ClientOptions) { - options.Uri = value - } -} - -func WithHost(value string) ClientOption { - return func(options *ClientOptions) { - options.Host = value - } -} - -func WithPort(value string) ClientOption { - return func(options *ClientOptions) { - options.Port = value - } -} - -func WithDb(value string) ClientOption { - return func(options *ClientOptions) { - options.Db = value - } -} - -func WithHosts(value []string) ClientOption { - return func(options *ClientOptions) { - options.Hosts = value - } -} - -func WithUsername(value string) ClientOption { - return func(options *ClientOptions) { - options.Username = value - } -} - -func WithPassword(value string) ClientOption { - return func(options *ClientOptions) { - options.Password = value - } -} - -func WithAuthSource(value string) ClientOption { - return func(options *ClientOptions) { - options.AuthSource = value - } -} - -func WithAuthMechanism(value string) ClientOption { - return func(options *ClientOptions) { - options.AuthMechanism = value - } -} diff --git a/db/mongo/client_test.go b/db/mongo/client_test.go deleted file mode 100644 index 32f54531f..000000000 --- a/db/mongo/client_test.go +++ /dev/null @@ -1,23 +0,0 @@ -package mongo - -import ( - "github.com/stretchr/testify/require" - "testing" -) - -func setupMongoTest() (err error) { - return nil -} - -func cleanupMongoTest() { -} - -func TestMongoInitMongo(t *testing.T) { - err := setupMongoTest() - require.Nil(t, err) - - _, err = GetMongoClient() - require.Nil(t, err) - - cleanupMongoTest() -} diff --git a/db/mongo/db.go b/db/mongo/db.go deleted file mode 100644 index 1b29790de..000000000 --- a/db/mongo/db.go +++ /dev/null @@ -1,35 +0,0 @@ -package mongo - -import ( - "github.com/crawlab-team/crawlab/trace" - "github.com/spf13/viper" - "go.mongodb.org/mongo-driver/mongo" -) - -func GetMongoDb(dbName string, opts ...DbOption) (db *mongo.Database) { - if dbName == "" { - dbName = viper.GetString("mongo.db") - } - if dbName == "" { - dbName = "test" - } - - _opts := &DbOptions{} - for _, op := range opts { - op(_opts) - } - - var c *mongo.Client - if _opts.client == nil { - var err error - c, err = GetMongoClient() - if err != nil { - trace.PrintError(err) - return nil - } - } else { - c = _opts.client - } - - return c.Database(dbName, nil) -} diff --git a/db/mongo/db_options.go b/db/mongo/db_options.go deleted file mode 100644 index 480cc4c69..000000000 --- a/db/mongo/db_options.go +++ /dev/null @@ -1,15 +0,0 @@ -package mongo - -import "go.mongodb.org/mongo-driver/mongo" - -type DbOption func(options *DbOptions) - -type DbOptions struct { - client *mongo.Client -} - -func WithDbClient(c *mongo.Client) DbOption { - return func(options *DbOptions) { - options.client = c - } -} diff --git a/db/mongo/db_test.go b/db/mongo/db_test.go deleted file mode 100644 index a2bbbbc35..000000000 --- a/db/mongo/db_test.go +++ /dev/null @@ -1,17 +0,0 @@ -package mongo - -import ( - "github.com/spf13/viper" - "github.com/stretchr/testify/require" - "testing" -) - -func TestMongoGetDb(t *testing.T) { - dbName := "test_db" - viper.Set("mongo.db", dbName) - err := InitMongo() - require.Nil(t, err) - - db := GetMongoDb("") - require.Equal(t, dbName, db.Name()) -} diff --git a/db/redis/client.go b/db/redis/client.go deleted file mode 100644 index 97dcbef39..000000000 --- a/db/redis/client.go +++ /dev/null @@ -1,550 +0,0 @@ -package redis - -import ( - "github.com/apex/log" - "github.com/crawlab-team/crawlab/db" - "github.com/crawlab-team/crawlab/db/errors" - "github.com/crawlab-team/crawlab/db/utils" - "github.com/crawlab-team/crawlab/trace" - "github.com/gomodule/redigo/redis" - "reflect" - "strings" - "time" -) - -type Client struct { - // settings - backoffMaxInterval time.Duration - timeout int - - // internals - pool *redis.Pool -} - -func (client *Client) Ping() error { - c := client.pool.Get() - defer utils.Close(c) - if _, err := redis.String(c.Do("PING")); err != nil { - if err != redis.ErrNil { - return trace.TraceError(err) - } - return err - } - return nil -} - -func (client *Client) Keys(pattern string) (values []string, err error) { - c := client.pool.Get() - defer utils.Close(c) - - values, err = redis.Strings(c.Do("KEYS", pattern)) - if err != nil { - return nil, trace.TraceError(err) - } - return values, nil -} - -func (client *Client) AllKeys() (values []string, err error) { - return client.Keys("*") -} - -func (client *Client) Get(collection string) (value string, err error) { - c := client.pool.Get() - defer utils.Close(c) - - value, err = redis.String(c.Do("GET", collection)) - if err != nil { - return "", trace.TraceError(err) - } - return value, nil -} - -func (client *Client) Set(collection string, value string) (err error) { - c := client.pool.Get() - defer utils.Close(c) - - value, err = redis.String(c.Do("SET", collection, value)) - if err != nil { - return trace.TraceError(err) - } - return nil -} - -func (client *Client) Del(collection string) error { - c := client.pool.Get() - defer utils.Close(c) - - if _, err := c.Do("DEL", collection); err != nil { - return trace.TraceError(err) - } - return nil -} - -func (client *Client) RPush(collection string, value interface{}) error { - c := client.pool.Get() - defer utils.Close(c) - - if _, err := c.Do("RPUSH", collection, value); err != nil { - return trace.TraceError(err) - } - return nil -} - -func (client *Client) LPush(collection string, value interface{}) error { - c := client.pool.Get() - defer utils.Close(c) - - if _, err := c.Do("LPUSH", collection, value); err != nil { - if err != redis.ErrNil { - return trace.TraceError(err) - } - return err - } - return nil -} - -func (client *Client) LPop(collection string) (string, error) { - c := client.pool.Get() - defer utils.Close(c) - - value, err := redis.String(c.Do("LPOP", collection)) - if err != nil { - if err != redis.ErrNil { - return value, trace.TraceError(err) - } - return value, err - } - return value, nil -} - -func (client *Client) RPop(collection string) (string, error) { - c := client.pool.Get() - defer utils.Close(c) - - value, err := redis.String(c.Do("RPOP", collection)) - if err != nil { - if err != redis.ErrNil { - return value, trace.TraceError(err) - } - return value, err - } - return value, nil -} - -func (client *Client) LLen(collection string) (int, error) { - c := client.pool.Get() - defer utils.Close(c) - - value, err := redis.Int(c.Do("LLEN", collection)) - if err != nil { - return 0, trace.TraceError(err) - } - return value, nil -} - -func (client *Client) BRPop(collection string, timeout int) (value string, err error) { - if timeout <= 0 { - timeout = 60 - } - c := client.pool.Get() - defer utils.Close(c) - - values, err := redis.Strings(c.Do("BRPOP", collection, timeout)) - if err != nil { - if err != redis.ErrNil { - return value, trace.TraceError(err) - } - return value, err - } - return values[1], nil -} - -func (client *Client) BLPop(collection string, timeout int) (value string, err error) { - if timeout <= 0 { - timeout = 60 - } - c := client.pool.Get() - defer utils.Close(c) - - values, err := redis.Strings(c.Do("BLPOP", collection, timeout)) - if err != nil { - if err != redis.ErrNil { - return value, trace.TraceError(err) - } - return value, err - } - return values[1], nil -} - -func (client *Client) HSet(collection string, key string, value string) error { - c := client.pool.Get() - defer utils.Close(c) - - if _, err := c.Do("HSET", collection, key, value); err != nil { - if err != redis.ErrNil { - return trace.TraceError(err) - } - return err - } - return nil -} - -func (client *Client) HGet(collection string, key string) (string, error) { - c := client.pool.Get() - defer utils.Close(c) - value, err := redis.String(c.Do("HGET", collection, key)) - if err != nil && err != redis.ErrNil { - if err != redis.ErrNil { - return value, trace.TraceError(err) - } - return value, err - } - return value, nil -} - -func (client *Client) HDel(collection string, key string) error { - c := client.pool.Get() - defer utils.Close(c) - - if _, err := c.Do("HDEL", collection, key); err != nil { - return trace.TraceError(err) - } - return nil -} - -func (client *Client) HScan(collection string) (results map[string]string, err error) { - c := client.pool.Get() - defer utils.Close(c) - - var ( - cursor int64 - items []string - ) - - results = map[string]string{} - - for { - values, err := redis.Values(c.Do("HSCAN", collection, cursor)) - if err != nil { - if err != redis.ErrNil { - return nil, trace.TraceError(err) - } - return nil, err - } - - values, err = redis.Scan(values, &cursor, &items) - if err != nil { - if err != redis.ErrNil { - return nil, trace.TraceError(err) - } - return nil, err - } - for i := 0; i < len(items); i += 2 { - key := items[i] - value := items[i+1] - results[key] = value - } - if cursor == 0 { - break - } - } - return results, nil -} - -func (client *Client) HKeys(collection string) (results []string, err error) { - c := client.pool.Get() - defer utils.Close(c) - - results, err = redis.Strings(c.Do("HKEYS", collection)) - if err != nil { - if err != redis.ErrNil { - return results, trace.TraceError(err) - } - return results, err - } - return results, nil -} - -func (client *Client) ZAdd(collection string, score float32, value interface{}) (err error) { - c := client.pool.Get() - defer utils.Close(c) - - if _, err := c.Do("ZADD", collection, score, value); err != nil { - return trace.TraceError(err) - } - return nil -} - -func (client *Client) ZCount(collection string, min string, max string) (count int, err error) { - c := client.pool.Get() - defer utils.Close(c) - - count, err = redis.Int(c.Do("ZCOUNT", collection, min, max)) - if err != nil { - return 0, trace.TraceError(err) - } - return count, nil -} - -func (client *Client) ZCountAll(collection string) (count int, err error) { - return client.ZCount(collection, "-inf", "+inf") -} - -func (client *Client) ZScan(collection string, pattern string, count int) (values []string, err error) { - c := client.pool.Get() - defer utils.Close(c) - - values, err = redis.Strings(c.Do("ZSCAN", collection, 0, pattern, count)) - if err != nil { - if err != redis.ErrNil { - return nil, trace.TraceError(err) - } - return nil, err - } - return values, nil -} - -func (client *Client) ZPopMax(collection string, count int) (results []string, err error) { - c := client.pool.Get() - defer utils.Close(c) - - results = []string{} - - values, err := redis.Strings(c.Do("ZPOPMAX", collection, count)) - if err != nil { - if err != redis.ErrNil { - return nil, trace.TraceError(err) - } - return nil, err - } - - for i := 0; i < len(values); i += 2 { - v := values[i] - results = append(results, v) - } - - return results, nil -} - -func (client *Client) ZPopMin(collection string, count int) (results []string, err error) { - c := client.pool.Get() - defer utils.Close(c) - - results = []string{} - - values, err := redis.Strings(c.Do("ZPOPMIN", collection, count)) - if err != nil { - if err != redis.ErrNil { - return nil, trace.TraceError(err) - } - return nil, err - } - - for i := 0; i < len(values); i += 2 { - v := values[i] - results = append(results, v) - } - - return results, nil -} - -func (client *Client) ZPopMaxOne(collection string) (value string, err error) { - c := client.pool.Get() - defer utils.Close(c) - - values, err := client.ZPopMax(collection, 1) - if err != nil { - return "", err - } - if values == nil || len(values) == 0 { - return "", nil - } - return values[0], nil -} - -func (client *Client) ZPopMinOne(collection string) (value string, err error) { - c := client.pool.Get() - defer utils.Close(c) - - values, err := client.ZPopMin(collection, 1) - if err != nil { - return "", err - } - if values == nil || len(values) == 0 { - return "", nil - } - return values[0], nil -} - -func (client *Client) BZPopMax(collection string, timeout int) (value string, err error) { - c := client.pool.Get() - defer utils.Close(c) - - values, err := redis.Strings(c.Do("BZPOPMAX", collection, timeout)) - if err != nil { - if err != redis.ErrNil { - return "", trace.TraceError(err) - } - return "", err - } - if len(values) < 3 { - return "", trace.TraceError(errors.ErrorRedisInvalidType) - } - return values[1], nil -} - -func (client *Client) BZPopMin(collection string, timeout int) (value string, err error) { - c := client.pool.Get() - defer utils.Close(c) - - values, err := redis.Strings(c.Do("BZPOPMIN", collection, timeout)) - if err != nil { - if err != redis.ErrNil { - return "", trace.TraceError(err) - } - return "", err - } - if len(values) < 3 { - return "", trace.TraceError(errors.ErrorRedisInvalidType) - } - return values[1], nil -} - -func (client *Client) Lock(lockKey string) (value int64, err error) { - c := client.pool.Get() - defer utils.Close(c) - lockKey = client.getLockKey(lockKey) - - ts := time.Now().Unix() - ok, err := c.Do("SET", lockKey, ts, "NX", "PX", 30000) - if err != nil { - if err != redis.ErrNil { - return value, trace.TraceError(err) - } - return value, err - } - if ok == nil { - return 0, trace.TraceError(errors.ErrorRedisLocked) - } - return ts, nil -} - -func (client *Client) UnLock(lockKey string, value int64) { - c := client.pool.Get() - defer utils.Close(c) - lockKey = client.getLockKey(lockKey) - - getValue, err := redis.Int64(c.Do("GET", lockKey)) - if err != nil { - log.Errorf("get lockKey error: %s", err.Error()) - return - } - - if getValue != value { - log.Errorf("the lockKey value diff: %d, %d", value, getValue) - return - } - - v, err := redis.Int64(c.Do("DEL", lockKey)) - if err != nil { - log.Errorf("unlock failed, error: %s", err.Error()) - return - } - - if v == 0 { - log.Errorf("unlock failed: key=%s", lockKey) - return - } -} - -func (client *Client) MemoryStats() (stats map[string]int64, err error) { - stats = map[string]int64{} - c := client.pool.Get() - defer utils.Close(c) - values, err := redis.Values(c.Do("MEMORY", "STATS")) - for i, v := range values { - t := reflect.TypeOf(v) - if t.Kind() == reflect.Slice { - vc, _ := redis.String(v, err) - if utils.ContainsString(MemoryStatsMetrics, vc) { - stats[vc], _ = redis.Int64(values[i+1], err) - } - } - } - if err != nil { - if err != redis.ErrNil { - return stats, trace.TraceError(err) - } - return stats, err - } - return stats, nil -} - -func (client *Client) SetBackoffMaxInterval(interval time.Duration) { - client.backoffMaxInterval = interval -} - -func (client *Client) SetTimeout(timeout int) { - client.timeout = timeout -} - -func (client *Client) init() (err error) { - b := backoff.NewExponentialBackOff() - b.MaxInterval = client.backoffMaxInterval - if err := backoff.Retry(func() error { - err := client.Ping() - if err != nil { - log.WithError(err).Warnf("waiting for redis pool active connection. will after %f seconds try again.", b.NextBackOff().Seconds()) - } - return nil - }, b); err != nil { - return trace.TraceError(err) - } - return nil -} - -func (client *Client) getLockKey(lockKey string) string { - lockKey = strings.ReplaceAll(lockKey, ":", "-") - return "nodes:lock:" + lockKey -} - -func (client *Client) getTimeout(timeout int) (res int) { - if timeout == 0 { - return client.timeout - } - return timeout -} - -var client db.RedisClient - -func NewRedisClient(opts ...Option) (client *Client, err error) { - // client - client = &Client{ - backoffMaxInterval: 20 * time.Second, - pool: NewRedisPool(), - } - - // apply options - for _, opt := range opts { - opt(client) - } - - // init - if err := client.init(); err != nil { - return nil, err - } - - return client, nil -} - -func GetRedisClient() (c db.RedisClient, err error) { - if client != nil { - return client, nil - } - c, err = NewRedisClient() - if err != nil { - return nil, err - } - - return c, nil -} diff --git a/db/redis/constants.go b/db/redis/constants.go deleted file mode 100644 index fc7c2e56f..000000000 --- a/db/redis/constants.go +++ /dev/null @@ -1,10 +0,0 @@ -package redis - -var MemoryStatsMetrics = []string{ - "peak.allocated", - "total.allocated", - "startup.allocated", - "overhead.total", - "keys.count", - "dataset.bytes", -} diff --git a/db/redis/options.go b/db/redis/options.go deleted file mode 100644 index 299bcbf16..000000000 --- a/db/redis/options.go +++ /dev/null @@ -1,20 +0,0 @@ -package redis - -import ( - "github.com/crawlab-team/crawlab/db" - "time" -) - -type Option func(c db.RedisClient) - -func WithBackoffMaxInterval(interval time.Duration) Option { - return func(c db.RedisClient) { - c.SetBackoffMaxInterval(interval) - } -} - -func WithTimeout(timeout int) Option { - return func(c db.RedisClient) { - c.SetTimeout(timeout) - } -} diff --git a/db/redis/pool.go b/db/redis/pool.go deleted file mode 100644 index cc08388a0..000000000 --- a/db/redis/pool.go +++ /dev/null @@ -1,54 +0,0 @@ -package redis - -import ( - "github.com/crawlab-team/crawlab/trace" - "github.com/gomodule/redigo/redis" - "github.com/spf13/viper" - "time" -) - -func NewRedisPool() *redis.Pool { - var address = viper.GetString("redis.address") - var port = viper.GetString("redis.port") - var database = viper.GetString("redis.database") - var password = viper.GetString("redis.password") - - // normalize params - if address == "" { - address = "localhost" - } - if port == "" { - port = "6379" - } - if database == "" { - database = "1" - } - - var url string - if password == "" { - url = "redis://" + address + ":" + port + "/" + database - } else { - url = "redis://x:" + password + "@" + address + ":" + port + "/" + database - } - return &redis.Pool{ - Dial: func() (conn redis.Conn, e error) { - return redis.DialURL(url, - redis.DialConnectTimeout(time.Second*10), - redis.DialReadTimeout(time.Second*600), - redis.DialWriteTimeout(time.Second*10), - ) - }, - TestOnBorrow: func(c redis.Conn, t time.Time) error { - if time.Since(t) < time.Minute { - return nil - } - _, err := c.Do("PING") - return trace.TraceError(err) - }, - MaxIdle: 10, - MaxActive: 0, - IdleTimeout: 300 * time.Second, - Wait: false, - MaxConnLifetime: 0, - } -} diff --git a/db/redis/test/base.go b/db/redis/test/base.go deleted file mode 100644 index 3eaf5e2d0..000000000 --- a/db/redis/test/base.go +++ /dev/null @@ -1,91 +0,0 @@ -package test - -import ( - "github.com/crawlab-team/crawlab/db" - "github.com/crawlab-team/crawlab/db/redis" - "testing" -) - -func init() { - var err error - T, err = NewTest() - if err != nil { - panic(err) - } -} - -type Test struct { - client db.RedisClient - TestCollection string - TestMessage string - TestMessages []string - TestMessagesMap map[string]string - TestKeysAlpha []string - TestKeysBeta []string - TestLockKey string -} - -func (t *Test) Setup(t2 *testing.T) { - t2.Cleanup(t.Cleanup) -} - -func (t *Test) Cleanup() { - keys, _ := t.client.AllKeys() - for _, key := range keys { - _ = t.client.Del(key) - } -} - -var T *Test - -func NewTest() (t *Test, err error) { - // test - t = &Test{} - - // client - t.client, err = redis.GetRedisClient() - if err != nil { - return nil, err - } - - // test collection - t.TestCollection = "test_collection" - - // test message - t.TestMessage = "this is a test message" - - // test messages - t.TestMessages = []string{ - "test message 1", - "test message 2", - "test message 3", - } - - // test messages map - t.TestMessagesMap = map[string]string{ - "test key 1": "test value 1", - "test key 2": "test value 2", - "test key 3": "test value 3", - } - - // test keys alpha - t.TestKeysAlpha = []string{ - "test key alpha 1", - "test key alpha 2", - "test key alpha 3", - } - - // test keys beta - t.TestKeysBeta = []string{ - "test key beta 1", - "test key beta 2", - "test key beta 3", - "test key beta 4", - "test key beta 5", - } - - // test lock key - t.TestLockKey = "test lock key" - - return t, nil -} diff --git a/db/redis/test/client_test.go b/db/redis/test/client_test.go deleted file mode 100644 index 6fa363fa6..000000000 --- a/db/redis/test/client_test.go +++ /dev/null @@ -1,273 +0,0 @@ -package test - -import ( - "github.com/crawlab-team/crawlab/db/redis" - "github.com/stretchr/testify/require" - "testing" - "time" -) - -func TestRedisClient_Ping(t *testing.T) { - var err error - T.Setup(t) - - err = T.client.Ping() - require.Nil(t, err) -} - -func TestRedisClient_Get_Set(t *testing.T) { - var err error - T.Setup(t) - - err = T.client.Set(T.TestCollection, T.TestMessage) - require.Nil(t, err) - - value, err := T.client.Get(T.TestCollection) - require.Nil(t, err) - require.Equal(t, T.TestMessage, value) -} - -func TestRedisClient_Keys_AllKeys(t *testing.T) { - var err error - T.Setup(t) - - for _, key := range T.TestKeysAlpha { - err = T.client.Set(key, key) - require.Nil(t, err) - } - for _, key := range T.TestKeysBeta { - err = T.client.Set(key, key) - require.Nil(t, err) - } - - keys, err := T.client.Keys("*alpha*") - require.Nil(t, err) - require.Len(t, keys, len(T.TestKeysAlpha)) - - keys, err = T.client.Keys("*beta*") - require.Nil(t, err) - require.Len(t, keys, len(T.TestKeysBeta)) - - keys, err = T.client.AllKeys() - require.Nil(t, err) - require.Len(t, keys, len(T.TestKeysAlpha)+len(T.TestKeysBeta)) -} - -func TestRedisClient_RPush_LPop_LLen(t *testing.T) { - var err error - T.Setup(t) - - for _, msg := range T.TestMessages { - err = T.client.RPush(T.TestCollection, msg) - require.Nil(t, err) - } - - n, err := T.client.LLen(T.TestCollection) - require.Nil(t, err) - require.Equal(t, len(T.TestMessages), n) - - value, err := T.client.LPop(T.TestCollection) - require.Nil(t, err) - require.Equal(t, T.TestMessages[0], value) -} - -func TestRedisClient_LPush_RPop(t *testing.T) { - var err error - T.Setup(t) - - for _, msg := range T.TestMessages { - err = T.client.LPush(T.TestCollection, msg) - require.Nil(t, err) - } - - n, err := T.client.LLen(T.TestCollection) - require.Nil(t, err) - require.Equal(t, len(T.TestMessages), n) - - value, err := T.client.RPop(T.TestCollection) - require.Nil(t, err) - require.Equal(t, T.TestMessages[0], value) -} - -func TestRedisClient_BRPop(t *testing.T) { - var err error - T.Setup(t) - - isErr := true - go func(t *testing.T) { - value, err := T.client.BRPop(T.TestCollection, 0) - require.Nil(t, err) - require.Equal(t, T.TestMessage, value) - isErr = false - }(t) - - err = T.client.LPush(T.TestCollection, T.TestMessage) - require.Nil(t, err) - time.Sleep(500 * time.Millisecond) - require.False(t, isErr) -} - -func TestRedisClient_BLPop(t *testing.T) { - var err error - T.Setup(t) - - isErr := true - go func(t *testing.T) { - value, err := T.client.BLPop(T.TestCollection, 0) - require.Nil(t, err) - require.Equal(t, T.TestMessage, value) - isErr = false - }(t) - - err = T.client.RPush(T.TestCollection, T.TestMessage) - require.Nil(t, err) - time.Sleep(500 * time.Millisecond) - require.False(t, isErr) -} - -func TestRedisClient_HSet_HGet_HDel(t *testing.T) { - var err error - T.Setup(t) - - for k, v := range T.TestMessagesMap { - err = T.client.HSet(T.TestCollection, k, v) - require.Nil(t, err) - } - - for k, v := range T.TestMessagesMap { - vr, err := T.client.HGet(T.TestCollection, k) - require.Nil(t, err) - require.Equal(t, v, vr) - } - - for k := range T.TestMessagesMap { - err = T.client.HDel(T.TestCollection, k) - require.Nil(t, err) - - v, err := T.client.HGet(T.TestCollection, k) - require.Nil(t, err) - require.Empty(t, v) - } -} - -func TestRedisClient_HScan(t *testing.T) { - var err error - T.Setup(t) - - for k, v := range T.TestMessagesMap { - err = T.client.HSet(T.TestCollection, k, v) - require.Nil(t, err) - } - - results, err := T.client.HScan(T.TestCollection) - require.Nil(t, err) - - for k, vr := range results { - v, ok := T.TestMessagesMap[k] - require.True(t, ok) - require.Equal(t, v, vr) - } -} - -func TestRedisClient_HKeys(t *testing.T) { - var err error - T.Setup(t) - - for k, v := range T.TestMessagesMap { - err = T.client.HSet(T.TestCollection, k, v) - require.Nil(t, err) - } - - keys, err := T.client.HKeys(T.TestCollection) - require.Nil(t, err) - - for _, k := range keys { - _, ok := T.TestMessagesMap[k] - require.True(t, ok) - } -} - -func TestRedisClient_ZAdd_ZCount_ZCountAll_ZPopMax_ZPopMin(t *testing.T) { - var err error - T.Setup(t) - - for i, v := range T.TestMessages { - score := float32(i) - err = T.client.ZAdd(T.TestCollection, score, v) - require.Nil(t, err) - } - - count, err := T.client.ZCountAll(T.TestCollection) - require.Nil(t, err) - require.Equal(t, len(T.TestMessages), count) - - value, err := T.client.ZPopMaxOne(T.TestCollection) - require.Nil(t, err) - require.Equal(t, T.TestMessages[len(T.TestMessages)-1], value) - - value, err = T.client.ZPopMinOne(T.TestCollection) - require.Nil(t, err) - require.Equal(t, T.TestMessages[0], value) -} - -func TestRedisClient_BZPopMax_BZPopMin(t *testing.T) { - var err error - T.Setup(t) - - isErr := true - go func(t *testing.T) { - value, err := T.client.BZPopMax(T.TestCollection, 0) - require.Nil(t, err) - require.Equal(t, T.TestMessage, value) - isErr = false - }(t) - - err = T.client.ZAdd(T.TestCollection, 1, T.TestMessage) - require.Nil(t, err) - time.Sleep(500 * time.Millisecond) - require.False(t, isErr) - - isErr = true - go func(t *testing.T) { - value, err := T.client.BZPopMin(T.TestCollection, 0) - require.Nil(t, err) - require.Equal(t, T.TestMessage, value) - isErr = false - }(t) - - err = T.client.ZAdd(T.TestCollection, 1, T.TestMessage) - require.Nil(t, err) - time.Sleep(500 * time.Millisecond) - require.False(t, isErr) -} - -func TestRedisClient_Lock_Unlock(t *testing.T) { - var err error - T.Setup(t) - - ts, err := T.client.Lock(T.TestLockKey) - require.Nil(t, err) - - _, err = T.client.Lock(T.TestLockKey) - require.NotNil(t, err) - - T.client.UnLock(T.TestLockKey, ts) - - ts, err = T.client.Lock(T.TestLockKey) - require.Nil(t, err) - -} - -func TestRedisClient_MemoryStats(t *testing.T) { - var err error - T.Setup(t) - - stats, err := T.client.MemoryStats() - require.Nil(t, err) - - for _, k := range redis.MemoryStatsMetrics { - v, ok := stats[k] - require.True(t, ok) - require.Greater(t, v, int64(-1)) - } -} diff --git a/db/sql/sql.go b/db/sql/sql.go deleted file mode 100644 index 0a35ffc62..000000000 --- a/db/sql/sql.go +++ /dev/null @@ -1,36 +0,0 @@ -package sql - -import ( - "errors" - "fmt" - "github.com/crawlab-team/crawlab/trace" - "github.com/jmoiron/sqlx" -) - -func GetSqlDatabaseConnectionString(dataSourceType string, host string, port string, username string, password string, database string) (connStr string, err error) { - if dataSourceType == "mysql" { - connStr = fmt.Sprintf("%s:%s@(%s:%s)/%s?charset=utf8&parseTime=True&loc=Local", username, password, host, port, database) - } else if dataSourceType == "postgres" { - connStr = fmt.Sprintf("host=%s port=%s user=%s dbname=%s password=%s sslmode=%s", host, port, username, database, password, "disable") - } else { - err = errors.New(dataSourceType + " is not implemented") - return connStr, trace.TraceError(err) - } - return connStr, nil -} - -func GetSqlConn(dataSourceType string, host string, port string, username string, password string, database string) (db *sqlx.DB, err error) { - // get database connection string - connStr, err := GetSqlDatabaseConnectionString(dataSourceType, host, port, username, password, database) - if err != nil { - return db, trace.TraceError(err) - } - - // get database instance - db, err = sqlx.Open(dataSourceType, connStr) - if err != nil { - return db, trace.TraceError(err) - } - - return db, nil -} diff --git a/db/utils/utils.go b/db/utils/utils.go deleted file mode 100644 index f2ff48935..000000000 --- a/db/utils/utils.go +++ /dev/null @@ -1,19 +0,0 @@ -package utils - -import "io" - -func Close(c io.Closer) { - err := c.Close() - if err != nil { - //log.WithError(err).Error("关闭资源文件失败。") - } -} - -func ContainsString(list []string, item string) bool { - for _, d := range list { - if d == item { - return true - } - } - return false -} diff --git a/devops/develop/crawlab-master.yaml b/devops/develop/crawlab-master.yaml deleted file mode 100644 index b2ea07b24..000000000 --- a/devops/develop/crawlab-master.yaml +++ /dev/null @@ -1,53 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: crawlab - namespace: crawlab-develop -spec: - ports: - - port: 8080 - targetPort: 8080 - nodePort: 30108 - selector: - app: crawlab-master - type: NodePort ---- -apiVersion: apps/v1 -kind: StatefulSet -metadata: - name: crawlab-master - namespace: crawlab-develop -spec: - serviceName: crawlab-master - selector: - matchLabels: - app: crawlab-master - template: - metadata: - labels: - app: crawlab-master - spec: - containers: - - image: tikazyq/crawlab:develop - imagePullPolicy: Always - name: crawlab - env: - - name: CRAWLAB_SERVER_MASTER - value: "Y" - - name: CRAWLAB_MONGO_HOST - value: "mongo" - - name: CRAWLAB_REDIS_ADDRESS - value: "redis" - - name: CRAWLAB_SETTING_ALLOWREGISTER - value: "Y" - - name: CRAWLAB_SERVER_LANG_NODE - value: "N" - - name: CRAWLAB_SERVER_LANG_JAVA - value: "N" - - name: CRAWLAB_SERVER_LANG_DOTNET - value: "N" - - name: CRAWLAB_SERVER_REGISTER_TYPE - value: "hostname" - ports: - - containerPort: 8080 - name: crawlab \ No newline at end of file diff --git a/devops/develop/crawlab-worker.yaml b/devops/develop/crawlab-worker.yaml deleted file mode 100644 index 037aa8fc0..000000000 --- a/devops/develop/crawlab-worker.yaml +++ /dev/null @@ -1,35 +0,0 @@ -apiVersion: apps/v1 -kind: StatefulSet -metadata: - name: crawlab-worker - namespace: crawlab-develop -spec: - serviceName: crawlab-worker - replicas: 2 - selector: - matchLabels: - app: crawlab-worker - template: - metadata: - labels: - app: crawlab-worker - spec: - containers: - - image: tikazyq/crawlab:develop - imagePullPolicy: Always - name: crawlab - env: - - name: CRAWLAB_SERVER_MASTER - value: "N" - - name: CRAWLAB_MONGO_HOST - value: "mongo" - - name: CRAWLAB_REDIS_ADDRESS - value: "redis" - - name: CRAWLAB_SERVER_LANG_NODE - value: "N" - - name: CRAWLAB_SERVER_LANG_JAVA - value: "N" - - name: CRAWLAB_SERVER_LANG_DOTNET - value: "N" - - name: CRAWLAB_SERVER_REGISTER_TYPE - value: "hostname" diff --git a/devops/develop/mongo-pv.yaml b/devops/develop/mongo-pv.yaml deleted file mode 100644 index e47a0ed97..000000000 --- a/devops/develop/mongo-pv.yaml +++ /dev/null @@ -1,28 +0,0 @@ -apiVersion: v1 -kind: PersistentVolume -metadata: - name: mongo-pv-volume-develop - namespace: crawlab-develop - labels: - type: local -spec: - storageClassName: manual - capacity: - storage: 2Gi - accessModes: - - ReadWriteOnce - hostPath: - path: "/data/crawlab-develop/mongodb/data" ---- -apiVersion: v1 -kind: PersistentVolumeClaim -metadata: - name: mongo-pv-claim-develop - namespace: crawlab-develop -spec: - storageClassName: manual - accessModes: - - ReadWriteOnce - resources: - requests: - storage: 2Gi \ No newline at end of file diff --git a/devops/develop/mongo.yaml b/devops/develop/mongo.yaml deleted file mode 100644 index 21a685bb5..000000000 --- a/devops/develop/mongo.yaml +++ /dev/null @@ -1,41 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: mongo - namespace: crawlab-develop -spec: - ports: - - port: 27017 - selector: - app: mongo - clusterIP: None ---- -apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2 -kind: Deployment -metadata: - name: mongo - namespace: crawlab-develop -spec: - selector: - matchLabels: - app: mongo - strategy: - type: Recreate - template: - metadata: - labels: - app: mongo - spec: - containers: - - image: mongo:4 - name: mongo - ports: - - containerPort: 27017 - name: mongo - volumeMounts: - - name: mongo-persistent-storage - mountPath: /data/db - volumes: - - name: mongo-persistent-storage - persistentVolumeClaim: - claimName: mongo-pv-claim-develop \ No newline at end of file diff --git a/devops/develop/ns.yaml b/devops/develop/ns.yaml deleted file mode 100644 index bef4391e7..000000000 --- a/devops/develop/ns.yaml +++ /dev/null @@ -1,4 +0,0 @@ -apiVersion: v1 -kind: Namespace -metadata: - name: crawlab-develop \ No newline at end of file diff --git a/devops/develop/redis.yaml b/devops/develop/redis.yaml deleted file mode 100644 index 204e3242e..000000000 --- a/devops/develop/redis.yaml +++ /dev/null @@ -1,34 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: redis - namespace: crawlab-develop -spec: - ports: - - port: 6379 - selector: - app: redis - clusterIP: None ---- -apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2 -kind: Deployment -metadata: - name: redis - namespace: crawlab-develop -spec: - selector: - matchLabels: - app: redis - strategy: - type: Recreate - template: - metadata: - labels: - app: redis - spec: - containers: - - image: redis - name: redis - ports: - - containerPort: 6379 - name: redis \ No newline at end of file diff --git a/devops/master/crawlab-master.yaml b/devops/master/crawlab-master.yaml deleted file mode 100644 index 6d58ff20c..000000000 --- a/devops/master/crawlab-master.yaml +++ /dev/null @@ -1,57 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: crawlab - namespace: crawlab -spec: - ports: - - port: 8080 - targetPort: 8080 - nodePort: 30088 - selector: - app: crawlab-master - type: NodePort ---- -apiVersion: apps/v1 -kind: StatefulSet -metadata: - name: crawlab-master - namespace: crawlab -spec: - serviceName: crawlab-master - selector: - matchLabels: - app: crawlab-master - template: - metadata: - labels: - app: crawlab-master - spec: - containers: - - image: tikazyq/crawlab:latest - imagePullPolicy: Always - name: crawlab - env: - - name: CRAWLAB_SERVER_MASTER - value: "Y" - - name: CRAWLAB_MONGO_HOST - value: "mongo" - - name: CRAWLAB_REDIS_ADDRESS - value: "redis" - - name: CRAWLAB_SERVER_LANG_NODE - value: "N" - - name: CRAWLAB_SERVER_LANG_JAVA - value: "N" - - name: CRAWLAB_SERVER_LANG_DOTNET - value: "N" - - name: CRAWLAB_SERVER_REGISTER_TYPE - value: "hostname" - - name: CRAWLAB_SETTING_ALLOWREGISTER - value: "Y" - - name: CRAWLAB_SETTING_ENABLETUTORIAL - value: "Y" - - name: CRAWLAB_SETTING_DEMOSPIDERS - value: "Y" - ports: - - containerPort: 8080 - name: crawlab \ No newline at end of file diff --git a/devops/master/crawlab-worker.yaml b/devops/master/crawlab-worker.yaml deleted file mode 100644 index 2ee052d08..000000000 --- a/devops/master/crawlab-worker.yaml +++ /dev/null @@ -1,35 +0,0 @@ -apiVersion: apps/v1 -kind: StatefulSet -metadata: - name: crawlab-worker - namespace: crawlab -spec: - serviceName: crawlab-worker - replicas: 2 - selector: - matchLabels: - app: crawlab-worker - template: - metadata: - labels: - app: crawlab-worker - spec: - containers: - - image: tikazyq/crawlab:latest - imagePullPolicy: Always - name: crawlab - env: - - name: CRAWLAB_SERVER_MASTER - value: "N" - - name: CRAWLAB_MONGO_HOST - value: "mongo" - - name: CRAWLAB_REDIS_ADDRESS - value: "redis" - - name: CRAWLAB_SERVER_LANG_NODE - value: "Y" - - name: CRAWLAB_SERVER_LANG_JAVA - value: "Y" - - name: CRAWLAB_SERVER_LANG_DOTNET - value: "Y" - - name: CRAWLAB_SERVER_REGISTER_TYPE - value: "hostname" diff --git a/devops/master/mongo-pv.yaml b/devops/master/mongo-pv.yaml deleted file mode 100644 index 648bb8ae1..000000000 --- a/devops/master/mongo-pv.yaml +++ /dev/null @@ -1,28 +0,0 @@ -apiVersion: v1 -kind: PersistentVolume -metadata: - name: mongo-pv-volume - namespace: crawlab - labels: - type: local -spec: - storageClassName: manual - capacity: - storage: 3Gi - accessModes: - - ReadWriteOnce - hostPath: - path: "/data/k8s/mongodb/data" ---- -apiVersion: v1 -kind: PersistentVolumeClaim -metadata: - name: mongo-pv-claim - namespace: crawlab -spec: - storageClassName: manual - accessModes: - - ReadWriteOnce - resources: - requests: - storage: 3Gi \ No newline at end of file diff --git a/devops/master/mongo.yaml b/devops/master/mongo.yaml deleted file mode 100644 index 9b5bd3b6a..000000000 --- a/devops/master/mongo.yaml +++ /dev/null @@ -1,41 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: mongo - namespace: crawlab -spec: - ports: - - port: 27017 - selector: - app: mongo - clusterIP: None ---- -apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2 -kind: Deployment -metadata: - name: mongo - namespace: crawlab -spec: - selector: - matchLabels: - app: mongo - strategy: - type: Recreate - template: - metadata: - labels: - app: mongo - spec: - containers: - - image: mongo:4 - name: mongo - ports: - - containerPort: 27017 - name: mongo - volumeMounts: - - name: mongo-persistent-storage - mountPath: /data/db - volumes: - - name: mongo-persistent-storage - persistentVolumeClaim: - claimName: mongo-pv-claim \ No newline at end of file diff --git a/devops/master/ns.yaml b/devops/master/ns.yaml deleted file mode 100644 index ff3d460bc..000000000 --- a/devops/master/ns.yaml +++ /dev/null @@ -1,4 +0,0 @@ -apiVersion: v1 -kind: Namespace -metadata: - name: crawlab \ No newline at end of file diff --git a/devops/master/redis.yaml b/devops/master/redis.yaml deleted file mode 100644 index 49df8dde7..000000000 --- a/devops/master/redis.yaml +++ /dev/null @@ -1,34 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: redis - namespace: crawlab -spec: - ports: - - port: 6379 - selector: - app: redis - clusterIP: None ---- -apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2 -kind: Deployment -metadata: - name: redis - namespace: crawlab -spec: - selector: - matchLabels: - app: redis - strategy: - type: Recreate - template: - metadata: - labels: - app: redis - spec: - containers: - - image: redis - name: redis - ports: - - containerPort: 6379 - name: redis \ No newline at end of file diff --git a/devops/release/crawlab-master.yaml b/devops/release/crawlab-master.yaml deleted file mode 100644 index 229a7cdde..000000000 --- a/devops/release/crawlab-master.yaml +++ /dev/null @@ -1,53 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: crawlab - namespace: crawlab-release -spec: - ports: - - port: 8080 - targetPort: 8080 - nodePort: 30098 - selector: - app: crawlab-master - type: NodePort ---- -apiVersion: apps/v1 -kind: StatefulSet -metadata: - name: crawlab-master - namespace: crawlab-release -spec: - serviceName: crawlab-master - selector: - matchLabels: - app: crawlab-master - template: - metadata: - labels: - app: crawlab-master - spec: - containers: - - image: tikazyq/crawlab:release - imagePullPolicy: Always - name: crawlab - env: - - name: CRAWLAB_SERVER_MASTER - value: "Y" - - name: CRAWLAB_MONGO_HOST - value: "mongo" - - name: CRAWLAB_REDIS_ADDRESS - value: "redis" - - name: CRAWLAB_SETTING_ALLOWREGISTER - value: "Y" - - name: CRAWLAB_SERVER_LANG_NODE - value: "N" - - name: CRAWLAB_SERVER_LANG_JAVA - value: "N" - - name: CRAWLAB_SERVER_LANG_DOTNET - value: "N" - - name: CRAWLAB_SERVER_REGISTER_TYPE - value: "hostname" - ports: - - containerPort: 8080 - name: crawlab \ No newline at end of file diff --git a/devops/release/crawlab-worker.yaml b/devops/release/crawlab-worker.yaml deleted file mode 100644 index fd6772af3..000000000 --- a/devops/release/crawlab-worker.yaml +++ /dev/null @@ -1,35 +0,0 @@ -apiVersion: apps/v1 -kind: StatefulSet -metadata: - name: crawlab-worker - namespace: crawlab-release -spec: - serviceName: crawlab-worker - replicas: 2 - selector: - matchLabels: - app: crawlab-worker - template: - metadata: - labels: - app: crawlab-worker - spec: - containers: - - image: tikazyq/crawlab:release - imagePullPolicy: Always - name: crawlab - env: - - name: CRAWLAB_SERVER_MASTER - value: "N" - - name: CRAWLAB_MONGO_HOST - value: "mongo" - - name: CRAWLAB_REDIS_ADDRESS - value: "redis" - - name: CRAWLAB_SERVER_LANG_NODE - value: "N" - - name: CRAWLAB_SERVER_LANG_JAVA - value: "N" - - name: CRAWLAB_SERVER_LANG_DOTNET - value: "N" - - name: CRAWLAB_SERVER_REGISTER_TYPE - value: "hostname" diff --git a/devops/release/mongo-pv.yaml b/devops/release/mongo-pv.yaml deleted file mode 100644 index 44503a018..000000000 --- a/devops/release/mongo-pv.yaml +++ /dev/null @@ -1,28 +0,0 @@ -apiVersion: v1 -kind: PersistentVolume -metadata: - name: mongo-pv-volume-release - namespace: crawlab-release - labels: - type: local -spec: - storageClassName: manual - capacity: - storage: 5Gi - accessModes: - - ReadWriteOnce - hostPath: - path: "/data/crawlab-release/mongodb/data" ---- -apiVersion: v1 -kind: PersistentVolumeClaim -metadata: - name: mongo-pv-claim-release - namespace: crawlab-release -spec: - storageClassName: manual - accessModes: - - ReadWriteOnce - resources: - requests: - storage: 5Gi \ No newline at end of file diff --git a/devops/release/mongo.yaml b/devops/release/mongo.yaml deleted file mode 100644 index d169174a7..000000000 --- a/devops/release/mongo.yaml +++ /dev/null @@ -1,41 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: mongo - namespace: crawlab-release -spec: - ports: - - port: 27017 - selector: - app: mongo - clusterIP: None ---- -apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2 -kind: Deployment -metadata: - name: mongo - namespace: crawlab-release -spec: - selector: - matchLabels: - app: mongo - strategy: - type: Recreate - template: - metadata: - labels: - app: mongo - spec: - containers: - - image: mongo:4 - name: mongo - ports: - - containerPort: 27017 - name: mongo - volumeMounts: - - name: mongo-persistent-storage - mountPath: /data/db - volumes: - - name: mongo-persistent-storage - persistentVolumeClaim: - claimName: mongo-pv-claim-release \ No newline at end of file diff --git a/devops/release/ns.yaml b/devops/release/ns.yaml deleted file mode 100644 index ee77dde9d..000000000 --- a/devops/release/ns.yaml +++ /dev/null @@ -1,4 +0,0 @@ -apiVersion: v1 -kind: Namespace -metadata: - name: crawlab-release \ No newline at end of file diff --git a/devops/release/redis.yaml b/devops/release/redis.yaml deleted file mode 100644 index 459a033a9..000000000 --- a/devops/release/redis.yaml +++ /dev/null @@ -1,34 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: redis - namespace: crawlab-release -spec: - ports: - - port: 6379 - selector: - app: redis - clusterIP: None ---- -apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2 -kind: Deployment -metadata: - name: redis - namespace: crawlab-release -spec: - selector: - matchLabels: - app: redis - strategy: - type: Recreate - template: - metadata: - labels: - app: redis - spec: - containers: - - image: redis - name: redis - ports: - - containerPort: 6379 - name: redis \ No newline at end of file diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml new file mode 100644 index 000000000..956319220 --- /dev/null +++ b/docker-compose.dev.yml @@ -0,0 +1,58 @@ +version: '3.3' +services: + backend: + build: + context: ./backend + image: crawlabteam/crawlab-backend:${CRAWLAB_TAG:-develop} + env_file: + - .env.local + + frontend: + build: + context: ./frontend + image: crawlabteam/crawlab-frontend:${CRAWLAB_TAG:-develop} + env_file: + - .env.local + + base-image: + build: + context: ./docker/base-image + image: crawlabteam/crawlab-base:${CRAWLAB_TAG:-develop} + env_file: + - .env.local + + crawlab: + build: + context: . + image: crawlabteam/crawlab:${CRAWLAB_TAG:-develop} + depends_on: + - backend + - frontend + - base-image + env_file: + - .env.local + + master: + image: crawlabteam/crawlab:${CRAWLAB_TAG:-develop} + environment: + CRAWLAB_NODE_MASTER: "Y" + CRAWLAB_MONGO_HOST: "mongo" + ports: + - "${CRAWLAB_PORT:-8082}:8080" + depends_on: + - mongo + env_file: + - .env.local + + worker: + image: crawlabteam/crawlab:${CRAWLAB_TAG:-develop} + environment: + CRAWLAB_NODE_MASTER: "N" + CRAWLAB_MASTER_HOST: "master" + depends_on: + - master + env_file: + - .env.local + + mongo: + image: mongo:5 diff --git a/docker/base-image/Dockerfile b/docker/base-image/Dockerfile new file mode 100644 index 000000000..89de4d948 --- /dev/null +++ b/docker/base-image/Dockerfile @@ -0,0 +1,28 @@ +FROM ubuntu:24.04 + +# Non-interactive mode +ENV DEBIAN_FRONTEND=noninteractive + +# Install dependencies +COPY ./install /app/install +RUN bash /app/install/deps/deps.sh && \ + bash /app/install/python/python.sh install 3.12 + +# Working directory +WORKDIR /app/backend + +# Node path +ENV NODE_PATH=/usr/lib/node_modules + +# Timezone environment +ENV TZ=Asia/Shanghai + +# language environment +ENV LC_ALL=C.UTF-8 +ENV LANG=C.UTF-8 + +# frontend port +EXPOSE 8080 + +# backend port +EXPOSE 8000 diff --git a/docker/base-image/install/deps/deps.sh b/docker/base-image/install/deps/deps.sh new file mode 100644 index 000000000..1143781d6 --- /dev/null +++ b/docker/base-image/install/deps/deps.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +# Fail on error +set -e + +# Ensure directory mode of /tmp is world-writable +chmod 777 /tmp + +# Update package index +apt-get update + +# Install essential dependencies +apt-get install -y \ + curl \ + wget \ + zip \ + unzip \ + git \ + iputils-ping \ + nginx \ + jq \ + net-tools + +# Add source /etc/profile to ~/.bashrc +echo "source /etc/profile" >> ~/.bashrc \ No newline at end of file diff --git a/docker/base-image/install/python/python.sh b/docker/base-image/install/python/python.sh new file mode 100644 index 000000000..bfdf4ea1f --- /dev/null +++ b/docker/base-image/install/python/python.sh @@ -0,0 +1,150 @@ +#!/bin/bash + +# Fail on error +set -e + +# Function to print usage +print_usage() { + echo "Usage: $0 [version] [requirements]" + echo "Commands:" + echo " setup - Setup pyenv" + echo " install - Install Python version (default: latest)" + echo " uninstall - Uninstall Python version" + echo " list - List installed Python versions" +} + +# Function to install Python dependencies +install_dependencies() { + apt install -y \ + make \ + build-essential \ + libssl-dev \ + zlib1g-dev \ + libxml2-dev \ + libxslt-dev \ + libffi-dev \ + libbz2-dev \ + libreadline-dev \ + libsqlite3-dev \ + zlib1g-dev \ + xz-utils \ + liblzma-dev +} + +# Function to setup pyenv +setup_pyenv() { + # Install pyenv if not already installed + if [ ! -d "$HOME/.pyenv" ]; then + curl https://pyenv.run | bash + fi + + if [ ! -f "$HOME/.pyenv-env.sh" ]; then + # Create a file in $HOME/.pyenv-env.sh + cat > $HOME/.pyenv-env.sh << 'EOF' +export PYENV_ROOT="$HOME/.pyenv" +[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH" +eval "$(pyenv init -)" +eval "$(pyenv virtualenv-init -)" +EOF + chmod +x $HOME/.pyenv-env.sh + fi + + source $HOME/.pyenv-env.sh +} + +# Function to verify Python installation +verify_python() { + local version=$1 + python_version=$(python -V) + if [[ ! $python_version =~ "Python ${version}" ]]; then + echo "ERROR: python version does not match. expect \"Python ${version}\", but actual is \"${python_version}\"" + return 1 + fi + + if ! command -v pip &> /dev/null; then + echo "ERROR: pip is not installed" + return 1 + fi + return 0 +} + +# Function to create symlinks +create_symlinks() { + ln -sf $(pyenv which python) /usr/local/bin/python + ln -sf $(pyenv which python3) /usr/local/bin/python3 + ln -sf $(pyenv which pip) /usr/local/bin/pip +} + +# Function to cleanup +cleanup() { + pip cache purge + rm -rf ~/.cache/pip/* + apt-get remove -y make build-essential + apt-get autoremove -y +} + +# Function to handle requirements +handle_requirements() { + local requirements_content="$1" + if [ -n "$requirements_content" ]; then + REQUIREMENTS_FILE="/tmp/requirements_$(date +%s)_$RANDOM.txt" + echo "$requirements_content" > "$REQUIREMENTS_FILE" + pip install -r "$REQUIREMENTS_FILE" + rm "$REQUIREMENTS_FILE" + else + # Fallback to default requirements file if it exists + if [ -f "/app/install/python/requirements.txt" ]; then + pip install -r /app/install/python/requirements.txt + fi + fi +} + +# Main logic +command="${1:-}" +version="${2:-}" +requirements="${3:-}" + +case $command in + "setup") + setup_pyenv + ;; + "install") + if [ -z "$version" ]; then + echo "Please specify a version to install" + exit 1 + fi + setup_pyenv + # Check if version is already installed + if pyenv versions | grep -q $version; then + echo "Python $version is already installed. Switching to it..." + pyenv global $version + else + install_dependencies + pyenv install $version + pyenv global $version + fi + verify_python $version + handle_requirements "$requirements" + create_symlinks + cleanup + ;; + + "uninstall") + if [ -z "$version" ]; then + echo "Please specify a version to uninstall" + exit 1 + fi + setup_pyenv + pyenv uninstall -f $version + ;; + + "list") + setup_pyenv + pyenv install --list | awk '/^ [23]/ {print $1}' | grep -v "[a-zA-Z]" | tac + ;; + + *) + print_usage + exit 1 + ;; +esac \ No newline at end of file diff --git a/docker/base-image/install/python/requirements.txt b/docker/base-image/install/python/requirements.txt new file mode 100644 index 000000000..1c0e90aa9 --- /dev/null +++ b/docker/base-image/install/python/requirements.txt @@ -0,0 +1,5 @@ +crawlab-sdk>=0.7.0rc5 +scrapy +selenium +bs4 +requests diff --git a/docker/bin/docker-init.sh b/docker/bin/docker-init.sh new file mode 100644 index 000000000..b8532639b --- /dev/null +++ b/docker/bin/docker-init.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +if [ "${CRAWLAB_NODE_MASTER}" == "Y" ]; then + # Start nginx + service nginx start >> /dev/null 2>&1 +fi + +# Start backend +crawlab-server server diff --git a/bin/gen-ver.sh b/docker/bin/gen-ver.sh old mode 100755 new mode 100644 similarity index 100% rename from bin/gen-ver.sh rename to docker/bin/gen-ver.sh diff --git a/bin/update_docker_js_api_address.py b/docker/bin/update_docker_js_api_address.py similarity index 100% rename from bin/update_docker_js_api_address.py rename to docker/bin/update_docker_js_api_address.py diff --git a/docker/ghcr/docker-compose.yml b/docker/ghcr/docker-compose.yml new file mode 100644 index 000000000..d135a326e --- /dev/null +++ b/docker/ghcr/docker-compose.yml @@ -0,0 +1,24 @@ +version: '3.3' +services: + master: + image: ghcr.io/crawlab-team/crawlab:${CRAWLAB_TAG:-develop} + container_name: crawlab_ghcr_master + environment: + CRAWLAB_NODE_MASTER: "Y" + CRAWLAB_MONGO_HOST: "mongo" + ports: + - "8080:8080" + depends_on: + - mongo + + worker: + image: ghcr.io/crawlab-team/crawlab:${CRAWLAB_TAG:-develop} + container_name: crawlab_ghcr_worker + environment: + CRAWLAB_NODE_MASTER: "N" + CRAWLAB_MASTER_HOST: "master" + depends_on: + - master + + mongo: + image: mongo:5 diff --git a/nginx/crawlab.conf b/docker/nginx/crawlab.conf similarity index 100% rename from nginx/crawlab.conf rename to docker/nginx/crawlab.conf diff --git a/docs/config.md b/docs/config.md deleted file mode 100644 index 9ba6e056d..000000000 --- a/docs/config.md +++ /dev/null @@ -1,17 +0,0 @@ -# Config - -#### Environment Variable List - -Name | Description | Example | Default ----|--- | --- | --- -CRAWLAB_GRPC_ADDRESS| Target gRPC address the nodes are connecting to | 192.168.0.1:9666 | localhost:9666 -CRAWLAB_GRPC_SERVER_ADDRESS| Address that the gRPC server is listening to (master node only) | 0.0.0.0:9666 | 0.0.0.0:9666 -CRAWLAB_GRPC_AUTHKEY| The token that gRPC clients and server use for authentication | youcanneverguess | Crawlab2021! -CRAWLAB_NODE_MASTER | Whether the current node is a master or worker node (Y: master; N: worker) | Y | Y -CRAWLAB_SERVER_HOST | IP host that the API listens to (master node only) | 0.0.0.0 | 0.0.0.0 -CRAWLAB_SERVER_PORT | IP port that the API listens to (master node only) | 8000 | 8000 -CRAWLAB_TASK_HANDLER_MAXRUNNERS | Max number of task runners (concurrent spider tasks) that a node can run | 16 | 8 -CRAWLAB_FS_FILER_PROXY |Filer API endpoint that Crawlab's filer proxy links to |http://filer-server:8888 | http://localhost:8888 -CRAWLAB_FS_FILER_URL |Crawlab's Filer API endpoint |http://crawlab-web-api:8000/filer | http://localhost:8000/filer -CRAWLAB_FS_FILER_AUTHKEY |Crawlab's Filer API auth key token | youcanneverguess | Crawlab2021! - diff --git a/frontend/.dockerignore b/frontend/.dockerignore new file mode 100644 index 000000000..9bc955c78 --- /dev/null +++ b/frontend/.dockerignore @@ -0,0 +1,33 @@ +# Ignore the .npmrc file +.npmrc + +# Ignore node_modules +node_modules + +# local env files +.env.local +.env.*.local + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +# Log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + +# Ignore stats.html +stats.html + +# Ignore .turbo +.turbo + +# Ignore tmp directory +tmp/ diff --git a/frontend/.env b/frontend/.env index 28381cc18..f0fa7c0a8 100644 --- a/frontend/.env +++ b/frontend/.env @@ -1 +1 @@ -VUE_APP_API_BASE_URL= +VITE_APP_API_BASE_URL= diff --git a/frontend/.env.analyze b/frontend/.env.analyze deleted file mode 100644 index 65454e703..000000000 --- a/frontend/.env.analyze +++ /dev/null @@ -1,2 +0,0 @@ -NODE_ENV='analyze' -VUE_APP_API_BASE_URL=http://localhost:8000 diff --git a/frontend/.env.development b/frontend/.env.development index 3d2c6fb90..dd2e38d08 100644 --- a/frontend/.env.development +++ b/frontend/.env.development @@ -1 +1 @@ -VUE_APP_API_BASE_URL=http://localhost:8000 +VITE_APP_API_BASE_URL=http://localhost:8000 diff --git a/frontend/.env.docker b/frontend/.env.docker deleted file mode 100644 index dfa712bab..000000000 --- a/frontend/.env.docker +++ /dev/null @@ -1,3 +0,0 @@ -VUE_APP_API_BASE_URL=/api -VUE_APP_INIT_BAIDU_TONGJI= -VUE_APP_INIT_UMENG= diff --git a/frontend/.eslintignore b/frontend/.eslintignore deleted file mode 100644 index b16742a58..000000000 --- a/frontend/.eslintignore +++ /dev/null @@ -1,3 +0,0 @@ -./src/i18n/**/*.ts -*/**/*.js -*.js diff --git a/frontend/.eslintrc.js b/frontend/.eslintrc.js deleted file mode 100644 index 1b3b85b76..000000000 --- a/frontend/.eslintrc.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - root: true, - env: { - node: true - }, - 'extends': [ - 'plugin:vue/vue3-essential', - 'eslint:recommended', - '@vue/typescript/recommended' - ], - parserOptions: { - ecmaVersion: 2020 - }, - rules: { - 'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off', - 'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off', - '@typescript-eslint/no-explicit-any': process.env.NODE_ENV === 'production' ? 'warn' : 'off', - '@typescript-eslint/camelcase': process.env.NODE_ENV === 'production' ? 'warn' : 'off', - } -} diff --git a/frontend/.gitignore b/frontend/.gitignore index 77111eae7..87f50dc63 100644 --- a/frontend/.gitignore +++ b/frontend/.gitignore @@ -30,4 +30,5 @@ lib/ **/node_modules **/package-lock.json -stats.html \ No newline at end of file +stats.html +.turbo \ No newline at end of file diff --git a/frontend/Dockerfile b/frontend/Dockerfile index 1f1cb0bdc..84cefded1 100644 --- a/frontend/Dockerfile +++ b/frontend/Dockerfile @@ -1,15 +1,27 @@ -FROM node:14 AS build +# Build stage +FROM node:20-alpine AS build -ADD . /app +# Arguments and environment variables for building packages +ARG VITE_APP_API_BASE_URL=/api +ENV VITE_APP_API_BASE_URL ${VITE_APP_API_BASE_URL} + +# Set the working directory in the container WORKDIR /app -RUN rm /app/.npmrc -# install frontend -RUN npm i -g pnpm@7 +# Install pnpm +RUN npm install -g pnpm + +# Copy application code +ADD . . + +# Install project dependencies RUN pnpm install + +# Build the application RUN pnpm run build +# Production stage FROM alpine:3.14 -# copy files -COPY --from=build /app/dist /app/dist +# Copy only the built artifacts from the build stage +COPY --from=build /app/apps/crawlab/dist /app/dist diff --git a/frontend/apps/crawlab/index.html b/frontend/apps/crawlab/index.html new file mode 100644 index 000000000..8e829861e --- /dev/null +++ b/frontend/apps/crawlab/index.html @@ -0,0 +1,31 @@ + + + + + + + + Crawlab + + + + + + + +
+ +
+ + + + diff --git a/frontend/apps/crawlab/package.json b/frontend/apps/crawlab/package.json new file mode 100644 index 000000000..bf020617d --- /dev/null +++ b/frontend/apps/crawlab/package.json @@ -0,0 +1,31 @@ +{ + "name": "crawlab", + "version": "0.7.0-rc7", + "scripts": { + "dev": "pnpm run serve", + "serve": "vite", + "preview": "vite preview", + "build": "vite build", + "build:analyze": "vite build --mode analyze", + "build:serve": "serve dist", + "test": "jest" + }, + "dependencies": { + "crawlab-ui": "workspace:crawlab-ui" + }, + "devDependencies": { + "@types/node": "^20.14.8", + "@vitejs/plugin-vue": "^5.0.5", + "@vue/compiler-sfc": "^3.2.45", + "pnpm": "^9", + "rollup-plugin-external-globals": "^0.10.0", + "rollup-plugin-visualizer": "^5.12.0", + "sass": "^1.56.1", + "typescript": "^5", + "vite": "^5.4.6", + "vite-aliases": "^0.11.7", + "vite-plugin-dynamic-import": "^1.5.0", + "vite-plugin-externalize-deps": "^0.8.0", + "vue-tsc": "^2.0.22" + } +} diff --git a/frontend/apps/crawlab/pnpm-lock.yaml b/frontend/apps/crawlab/pnpm-lock.yaml new file mode 100644 index 000000000..e977a6c75 --- /dev/null +++ b/frontend/apps/crawlab/pnpm-lock.yaml @@ -0,0 +1,4511 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@element-plus/icons-vue': + specifier: ^2.3.1 + version: 2.3.1(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)) + '@fortawesome/fontawesome-common-types': + specifier: ^6.5.2 + version: 6.6.0 + '@fortawesome/fontawesome-svg-core': + specifier: ^6.5.2 + version: 6.6.0 + '@fortawesome/free-brands-svg-icons': + specifier: ^6.5.2 + version: 6.6.0 + '@fortawesome/free-regular-svg-icons': + specifier: ^6.5.2 + version: 6.6.0 + '@fortawesome/free-solid-svg-icons': + specifier: ^6.5.2 + version: 6.6.0 + '@fortawesome/vue-fontawesome': + specifier: ^3.0.8 + version: 3.0.8(@fortawesome/fontawesome-svg-core@6.6.0)(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)) + '@popperjs/core': + specifier: ^2.11.8 + version: 2.11.8 + '@types/getos': + specifier: ^3.0.4 + version: 3.0.4 + '@types/humanize-duration': + specifier: ^3.27.4 + version: 3.27.4 + '@types/javascript-time-ago': + specifier: ^2.0.8 + version: 2.0.8 + '@types/md5': + specifier: ^2.3.5 + version: 2.3.5 + '@types/pinyin': + specifier: ^2.10.2 + version: 2.10.2 + '@types/showdown': + specifier: ^2.0.6 + version: 2.0.6 + '@types/url-join': + specifier: ^4.0.3 + version: 4.0.3 + async-validator: + specifier: ^4.2.5 + version: 4.2.5 + atom-material-icons: + specifier: ^3.0.0 + version: 3.0.0 + axios: + specifier: ^1.7.2 + version: 1.7.7 + chart.js: + specifier: ^4.4.3 + version: 4.4.5 + chartjs-adapter-date-fns: + specifier: ^3.0.0 + version: 3.0.0(chart.js@4.4.5)(date-fns@4.1.0) + core-js: + specifier: ^3.37.1 + version: 3.38.1 + crawlab-ui: + specifier: 0.7.0-rc3 + version: 0.7.0-rc3(dlwfpvqjxhvrevoazxvsg7egqu) + crawlab-vue3-dropzone: + specifier: 3.0.3 + version: 3.0.3(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)) + cron-parser: + specifier: ^4.9.0 + version: 4.9.0 + cronstrue: + specifier: ^2.50.0 + version: 2.50.0 + dayjs: + specifier: ^1.11.11 + version: 1.11.13 + element-plus: + specifier: ^2.7.6 + version: 2.8.5(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)) + font-awesome: + specifier: ^4.7.0 + version: 4.7.0 + humanize-duration: + specifier: ^3.32.1 + version: 3.32.1 + javascript-time-ago: + specifier: ^2.5.10 + version: 2.5.11 + md5: + specifier: ^2.3.0 + version: 2.3.0 + monaco-editor: + specifier: ^0.50.0 + version: 0.50.0 + normalize.css: + specifier: ^8.0.1 + version: 8.0.1 + os-name: + specifier: ^5.0.1 + version: 5.0.1 + pinyin: + specifier: ^2.10.2 + version: 2.11.2 + point-cluster: + specifier: ^3.1.8 + version: 3.1.8 + showdown: + specifier: ^2.1.0 + version: 2.1.0 + three: + specifier: ^0.166.0 + version: 0.166.1 + url-join: + specifier: ^4.0.1 + version: 4.0.1 + vue: + specifier: ^3.4 + version: 3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz) + vue-clipboard3: + specifier: ^2.0.0 + version: 2.0.0 + vue-i18n: + specifier: 9.13.1 + version: 9.13.1(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)) + vue-router: + specifier: 4.4.0 + version: 4.4.0(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)) + vuex: + specifier: ^4.1.0 + version: 4.1.0(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)) + devDependencies: + '@types/node': + specifier: ^18.11.10 + version: https://registry.npmmirror.com/@types/node/-/node-18.11.10.tgz + '@vitejs/plugin-vue': + specifier: ^3.2.0 + version: https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-3.2.0.tgz(vite@https://registry.npmmirror.com/vite/-/vite-3.2.4.tgz(@types/node@https://registry.npmmirror.com/@types/node/-/node-18.11.10.tgz)(sass@1.80.1))(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)) + '@vue/compiler-sfc': + specifier: ^3.2.45 + version: https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.2.45.tgz + rollup-plugin-external-globals: + specifier: ^0.8.0 + version: 0.8.0(rollup@3.26.2) + rollup-plugin-visualizer: + specifier: ^5.9.2 + version: 5.9.2(rollup@3.26.2) + typescript: + specifier: ^4.6.4 + version: https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz + vite: + specifier: ^3.2.4 + version: https://registry.npmmirror.com/vite/-/vite-3.2.4.tgz(@types/node@https://registry.npmmirror.com/@types/node/-/node-18.11.10.tgz)(sass@1.80.1) + vite-aliases: + specifier: ^0.9.7 + version: https://registry.npmmirror.com/vite-aliases/-/vite-aliases-0.9.7.tgz(@types/node@https://registry.npmmirror.com/@types/node/-/node-18.11.10.tgz)(sass@1.80.1) + vite-plugin-dynamic-import: + specifier: ^1.2.4 + version: https://registry.npmmirror.com/vite-plugin-dynamic-import/-/vite-plugin-dynamic-import-1.2.4.tgz + vite-plugin-externalize-deps: + specifier: ^0.7.0 + version: 0.7.0(vite@https://registry.npmmirror.com/vite/-/vite-3.2.4.tgz(@types/node@https://registry.npmmirror.com/@types/node/-/node-18.11.10.tgz)(sass@1.80.1)) + vue-tsc: + specifier: ^1.0.9 + version: https://registry.npmmirror.com/vue-tsc/-/vue-tsc-1.0.11.tgz(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz) + +packages: + + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + + '@arr/every@1.0.1': + resolution: {integrity: sha512-UQFQ6SgyJ6LX42W8rHCs8KVc0JS0tzVL9ct4XYedJukskYVWTo49tNiMEK9C2HTyarbNiT/RVIRSY82vH+6sTg==} + engines: {node: '>=4'} + + '@babel/helper-string-parser@7.25.7': + resolution: {integrity: sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz': + resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==, tarball: https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz} + version: 7.19.4 + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.25.7': + resolution: {integrity: sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz': + resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==, tarball: https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz} + version: 7.19.1 + engines: {node: '>=6.9.0'} + + '@babel/parser@7.25.8': + resolution: {integrity: sha512-HcttkxzdPucv3nNFmfOOMfFf64KgdJVqm1KaCm25dPGMLElo9nsLvXeJECQg8UzPuBGLyTSA0ZzqCtDSzKTEoQ==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/parser@https://registry.npmmirror.com/@babel/parser/-/parser-7.20.5.tgz': + resolution: {integrity: sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==, tarball: https://registry.npmmirror.com/@babel/parser/-/parser-7.20.5.tgz} + version: 7.20.5 + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/types@7.25.8': + resolution: {integrity: sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg==} + engines: {node: '>=6.9.0'} + + '@babel/types@https://registry.npmmirror.com/@babel/types/-/types-7.20.5.tgz': + resolution: {integrity: sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==, tarball: https://registry.npmmirror.com/@babel/types/-/types-7.20.5.tgz} + version: 7.20.5 + engines: {node: '>=6.9.0'} + + '@codemirror/autocomplete@6.18.1': + resolution: {integrity: sha512-iWHdj/B1ethnHRTwZj+C1obmmuCzquH29EbcKr0qIjA9NfDeBDJ7vs+WOHsFeLeflE4o+dHfYndJloMKHUkWUA==} + peerDependencies: + '@codemirror/language': ^6.0.0 + '@codemirror/state': ^6.0.0 + '@codemirror/view': ^6.0.0 + '@lezer/common': ^1.0.0 + + '@codemirror/commands@6.7.0': + resolution: {integrity: sha512-+cduIZ2KbesDhbykV02K25A5xIVrquSPz4UxxYBemRlAT2aW8dhwUgLDwej7q/RJUHKk4nALYcR1puecDvbdqw==} + + '@codemirror/lang-json@6.0.1': + resolution: {integrity: sha512-+T1flHdgpqDDlJZ2Lkil/rLiRy684WMLc74xUnjJH48GQdfJo/pudlTRreZmKwzP8/tGdKf83wlbAdOCzlJOGQ==} + + '@codemirror/language@6.10.3': + resolution: {integrity: sha512-kDqEU5sCP55Oabl6E7m5N+vZRoc0iWqgDVhEKifcHzPzjqCegcO4amfrYVL9PmPZpl4G0yjkpTpUO/Ui8CzO8A==} + + '@codemirror/lint@6.8.2': + resolution: {integrity: sha512-PDFG5DjHxSEjOXk9TQYYVjZDqlZTFaDBfhQixHnQOEVDDNHUbEh/hstAjcQJaA6FQdZTD1hquXTK0rVBLADR1g==} + + '@codemirror/search@6.5.6': + resolution: {integrity: sha512-rpMgcsh7o0GuCDUXKPvww+muLA1pDJaFrpq/CCHtpQJYz8xopu4D1hPcKRoDD0YlF8gZaqTNIRa4VRBWyhyy7Q==} + + '@codemirror/state@6.4.1': + resolution: {integrity: sha512-QkEyUiLhsJoZkbumGZlswmAhA7CBU02Wrz7zvH4SrcifbsqwlXShVXg65f3v/ts57W3dqyamEriMhij1Z3Zz4A==} + + '@codemirror/view@6.34.1': + resolution: {integrity: sha512-t1zK/l9UiRqwUNPm+pdIT0qzJlzuVckbTEMVNFhfWkGiBQClstzg+78vedCvLSX0xJEZ6lwZbPpnljL7L6iwMQ==} + + '@ctrl/tinycolor@3.4.1': + resolution: {integrity: sha512-ej5oVy6lykXsvieQtqZxCOaLT+xD4+QNarq78cIYISHmZXshCvROLudpQN3lfL8G0NL7plMSSK+zlyvCaIJ4Iw==} + engines: {node: '>=10'} + + '@element-plus/icons-vue@2.3.1': + resolution: {integrity: sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg==} + version: 2.3.1 + peerDependencies: + vue: ^3.2.0 + + '@esbuild/android-arm@0.15.16': + resolution: {integrity: sha512-nyB6CH++2mSgx3GbnrJsZSxzne5K0HMyNIWafDHqYy7IwxFc4fd/CgHVZXr8Eh+Q3KbIAcAe3vGyqIPhGblvMQ==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/linux-loong64@0.15.16': + resolution: {integrity: sha512-SDLfP1uoB0HZ14CdVYgagllgrG7Mdxhkt4jDJOKl/MldKrkQ6vDJMZKl2+5XsEY/Lzz37fjgLQoJBGuAw/x8kQ==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@floating-ui/core@1.6.8': + resolution: {integrity: sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==} + + '@floating-ui/dom@1.6.11': + resolution: {integrity: sha512-qkMCxSR24v2vGkhYDo/UzxfJN3D4syqSjyuTFz6C7XcpU1pASPRieNI0Kj5VP3/503mOfYiGY891ugBX1GlABQ==} + + '@floating-ui/utils@0.2.8': + resolution: {integrity: sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==} + + '@fortawesome/fontawesome-common-types@6.6.0': + resolution: {integrity: sha512-xyX0X9mc0kyz9plIyryrRbl7ngsA9jz77mCZJsUkLl+ZKs0KWObgaEBoSgQiYWAsSmjz/yjl0F++Got0Mdp4Rw==} + engines: {node: '>=6'} + + '@fortawesome/fontawesome-svg-core@6.6.0': + resolution: {integrity: sha512-KHwPkCk6oRT4HADE7smhfsKudt9N/9lm6EJ5BVg0tD1yPA5hht837fB87F8pn15D8JfTqQOjhKTktwmLMiD7Kg==} + engines: {node: '>=6'} + + '@fortawesome/free-brands-svg-icons@6.6.0': + resolution: {integrity: sha512-1MPD8lMNW/earme4OQi1IFHtmHUwAKgghXlNwWi9GO7QkTfD+IIaYpIai4m2YJEzqfEji3jFHX1DZI5pbY/biQ==} + engines: {node: '>=6'} + + '@fortawesome/free-regular-svg-icons@6.6.0': + resolution: {integrity: sha512-Yv9hDzL4aI73BEwSEh20clrY8q/uLxawaQ98lekBx6t9dQKDHcDzzV1p2YtBGTtolYtNqcWdniOnhzB+JPnQEQ==} + engines: {node: '>=6'} + + '@fortawesome/free-solid-svg-icons@6.6.0': + resolution: {integrity: sha512-IYv/2skhEDFc2WGUcqvFJkeK39Q+HyPf5GHUrT/l2pKbtgEIv1al1TKd6qStR5OIwQdN1GZP54ci3y4mroJWjA==} + engines: {node: '>=6'} + + '@fortawesome/vue-fontawesome@3.0.8': + resolution: {integrity: sha512-yyHHAj4G8pQIDfaIsMvQpwKMboIZtcHTUvPqXjOHyldh1O1vZfH4W03VDPv5RvI9P6DLTzJQlmVgj9wCf7c2Fw==} + version: 3.0.8 + peerDependencies: + '@fortawesome/fontawesome-svg-core': ~1 || ~6 + vue: '>= 3.0.0 < 4' + + '@intlify/core-base@9.13.1': + resolution: {integrity: sha512-+bcQRkJO9pcX8d0gel9ZNfrzU22sZFSA0WVhfXrf5jdJOS24a+Bp8pozuS9sBI9Hk/tGz83pgKfmqcn/Ci7/8w==} + engines: {node: '>= 16'} + + '@intlify/message-compiler@9.13.1': + resolution: {integrity: sha512-SKsVa4ajYGBVm7sHMXd5qX70O2XXjm55zdZB3VeMFCvQyvLew/dLvq3MqnaIsTMF1VkkOb9Ttr6tHcMlyPDL9w==} + engines: {node: '>= 16'} + + '@intlify/shared@9.13.1': + resolution: {integrity: sha512-u3b6BKGhE6j/JeRU6C/RL2FgyJfy6LakbtfeVF8fJXURpZZTzfh3e05J0bu0XPw447Q6/WUp3C4ajv4TMS4YsQ==} + engines: {node: '>= 16'} + + '@jridgewell/gen-mapping@0.3.5': + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.4.15': + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@jsep-plugin/assignment@1.2.1': + resolution: {integrity: sha512-gaHqbubTi29aZpVbBlECRpmdia+L5/lh2BwtIJTmtxdbecEyyX/ejAOg7eQDGNvGOUmPY7Z2Yxdy9ioyH/VJeA==} + engines: {node: '>= 10.16.0'} + peerDependencies: + jsep: ^0.4.0||^1.0.0 + + '@jsep-plugin/regex@1.0.3': + resolution: {integrity: sha512-XfZgry4DwEZvSFtS/6Y+R48D7qJYJK6R9/yJFyUFHCIUMEEHuJ4X95TDgJp5QkmzfLYvapMPzskV5HpIDrREug==} + engines: {node: '>= 10.16.0'} + peerDependencies: + jsep: ^0.4.0||^1.0.0 + + '@jsonquerylang/jsonquery@3.1.1': + resolution: {integrity: sha512-P6Qo5egd3W8TBpqQsqaZtZ9lPO7oXBM21QdkYamCAYZHv9VCPXiI8NeIuSoXdoe5zKVZPUWmqaI14uacJLmcNw==} + hasBin: true + + '@kurkle/color@0.3.2': + resolution: {integrity: sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==} + + '@lexical/clipboard@0.16.1': + resolution: {integrity: sha512-0dWs/SwKS5KPpuf6fUVVt9vSCl6HAqcDGhSITw/okv0rrIlXTUT6WhVsMJtXfFxTyVvwMeOecJHvQH3i/jRQtA==} + + '@lexical/code@0.16.1': + resolution: {integrity: sha512-pOC28rRZ2XkmI2nIJm50DbKaCJtk5D0o7r6nORYp4i0z+lxt5Sf2m82DL9ksUHJRqKy87pwJDpoWvJ2SAI0ohw==} + + '@lexical/history@0.16.1': + resolution: {integrity: sha512-WQhScx0TJeKSQAnEkRpIaWdUXqirrNrom2MxbBUc/32zEUMm9FzV7nRGknvUabEFUo7vZq6xTZpOExQJqHInQA==} + + '@lexical/html@0.16.1': + resolution: {integrity: sha512-vbtAdCvQ3PaAqa5mFmtmrvbiAvjCu1iXBAJ0bsHqFXCF2Sba5LwHVe8dUAOTpfEZEMbiHfjul6b5fj4vNPGF2A==} + + '@lexical/link@0.16.1': + resolution: {integrity: sha512-zG36gEnEqbIe6tK/MhXi7wn/XMY/zdivnPcOY5WyC3derkEezeLSSIFsC1u5UNeK5pbpNMSy4LDpLhi1Ww4Y5w==} + + '@lexical/list@0.16.1': + resolution: {integrity: sha512-i9YhLAh5N6YO9dP+R1SIL9WEdCKeTiQQYVUzj84vDvX5DIBxMPUjTmMn3LXu9T+QO3h1s2L/vJusZASrl45eAw==} + + '@lexical/markdown@0.16.1': + resolution: {integrity: sha512-0sBLttMvfQO/hVaIqpHdvDowpgV2CoRuWo2CNwvRLZPPWvPVjL4Nkb73wmi8zAZsAOTbX2aw+g4m/+k5oJqNig==} + + '@lexical/rich-text@0.16.1': + resolution: {integrity: sha512-4uEVXJur7tdSbqbmsToCW4YVm0AMh4y9LK077Yq2O9hSuA5dqpI8UbTDnxZN2D7RfahNvwlqp8eZKFB1yeiJGQ==} + + '@lexical/selection@0.16.1': + resolution: {integrity: sha512-+nK3RvXtyQvQDq7AZ46JpphmM33pwuulwiRfeXR5T9iFQTtgWOEjsAi/KKX7vGm70BxACfiSxy5QCOgBWFwVJg==} + + '@lexical/table@0.16.1': + resolution: {integrity: sha512-GWb0/MM1sVXpi1p2HWWOBldZXASMQ4c6WRNYnRmq7J/aB5N66HqQgJGKp3m66Kz4k1JjhmZfPs7F018qIBhnFQ==} + + '@lexical/text@0.16.1': + resolution: {integrity: sha512-Os/nKQegORTrKKN6vL3/FMVszyzyqaotlisPynvTaHTUC+yY4uyjM2hlF93i5a2ixxyiPLF9bDroxUP96TMPXg==} + + '@lexical/utils@0.16.1': + resolution: {integrity: sha512-BVyJxDQi/rIxFTDjf2zE7rMDKSuEaeJ4dybHRa/hRERt85gavGByQawSLeQlTjLaYLVsy+x7wCcqh2fNhlLf0g==} + + '@lezer/common@1.2.3': + resolution: {integrity: sha512-w7ojc8ejBqr2REPsWxJjrMFsA/ysDCFICn8zEOR9mrqzOu2amhITYuLD8ag6XZf0CFXDrhKqw7+tW8cX66NaDA==} + + '@lezer/highlight@1.2.1': + resolution: {integrity: sha512-Z5duk4RN/3zuVO7Jq0pGLJ3qynpxUVsh7IbUbGj88+uV2ApSAn6kWg2au3iJb+0Zi7kKtqffIESgNcRXWZWmSA==} + + '@lezer/json@1.0.2': + resolution: {integrity: sha512-xHT2P4S5eeCYECyKNPhr4cbEL9tc8w83SPwRC373o9uEdrvGKTZoJVAGxpOsZckMlEh9W23Pc72ew918RWQOBQ==} + + '@lezer/lr@1.4.2': + resolution: {integrity: sha512-pu0K1jCIdnQ12aWNaAVU5bzi7Bd1w54J3ECgANPmYLtQKP0HBj2cE/5coBD66MT10xbtIuUr7tg0Shbsvk0mDA==} + + '@mapbox/node-pre-gyp@1.0.10': + resolution: {integrity: sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA==} + hasBin: true + + '@nodelib/fs.scandir@https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==, tarball: https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz} + version: 2.1.5 + engines: {node: '>= 8'} + + '@nodelib/fs.stat@https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==, tarball: https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz} + version: 2.0.5 + engines: {node: '>= 8'} + + '@nodelib/fs.walk@https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==, tarball: https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz} + version: 1.2.8 + engines: {node: '>= 8'} + + '@parcel/watcher-android-arm64@2.4.1': + resolution: {integrity: sha512-LOi/WTbbh3aTn2RYddrO8pnapixAziFl6SMxHM69r3tvdSm94JtCenaKgk1GRg5FJ5wpMCpHeW+7yqPlvZv7kg==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [android] + + '@parcel/watcher-darwin-arm64@2.4.1': + resolution: {integrity: sha512-ln41eihm5YXIY043vBrrHfn94SIBlqOWmoROhsMVTSXGh0QahKGy77tfEywQ7v3NywyxBBkGIfrWRHm0hsKtzA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [darwin] + + '@parcel/watcher-darwin-x64@2.4.1': + resolution: {integrity: sha512-yrw81BRLjjtHyDu7J61oPuSoeYWR3lDElcPGJyOvIXmor6DEo7/G2u1o7I38cwlcoBHQFULqF6nesIX3tsEXMg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [darwin] + + '@parcel/watcher-freebsd-x64@2.4.1': + resolution: {integrity: sha512-TJa3Pex/gX3CWIx/Co8k+ykNdDCLx+TuZj3f3h7eOjgpdKM+Mnix37RYsYU4LHhiYJz3DK5nFCCra81p6g050w==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [freebsd] + + '@parcel/watcher-linux-arm-glibc@2.4.1': + resolution: {integrity: sha512-4rVYDlsMEYfa537BRXxJ5UF4ddNwnr2/1O4MHM5PjI9cvV2qymvhwZSFgXqbS8YoTk5i/JR0L0JDs69BUn45YA==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + + '@parcel/watcher-linux-arm64-glibc@2.4.1': + resolution: {integrity: sha512-BJ7mH985OADVLpbrzCLgrJ3TOpiZggE9FMblfO65PlOCdG++xJpKUJ0Aol74ZUIYfb8WsRlUdgrZxKkz3zXWYA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + + '@parcel/watcher-linux-arm64-musl@2.4.1': + resolution: {integrity: sha512-p4Xb7JGq3MLgAfYhslU2SjoV9G0kI0Xry0kuxeG/41UfpjHGOhv7UoUDAz/jb1u2elbhazy4rRBL8PegPJFBhA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + + '@parcel/watcher-linux-x64-glibc@2.4.1': + resolution: {integrity: sha512-s9O3fByZ/2pyYDPoLM6zt92yu6P4E39a03zvO0qCHOTjxmt3GHRMLuRZEWhWLASTMSrrnVNWdVI/+pUElJBBBg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + + '@parcel/watcher-linux-x64-musl@2.4.1': + resolution: {integrity: sha512-L2nZTYR1myLNST0O632g0Dx9LyMNHrn6TOt76sYxWLdff3cB22/GZX2UPtJnaqQPdCRoszoY5rcOj4oMTtp5fQ==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + + '@parcel/watcher-win32-arm64@2.4.1': + resolution: {integrity: sha512-Uq2BPp5GWhrq/lcuItCHoqxjULU1QYEcyjSO5jqqOK8RNFDBQnenMMx4gAl3v8GiWa59E9+uDM7yZ6LxwUIfRg==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [win32] + + '@parcel/watcher-win32-ia32@2.4.1': + resolution: {integrity: sha512-maNRit5QQV2kgHFSYwftmPBxiuK5u4DXjbXx7q6eKjq5dsLXZ4FJiVvlcw35QXzk0KrUecJmuVFbj4uV9oYrcw==} + engines: {node: '>= 10.0.0'} + cpu: [ia32] + os: [win32] + + '@parcel/watcher-win32-x64@2.4.1': + resolution: {integrity: sha512-+DvS92F9ezicfswqrvIRM2njcYJbd5mb9CUgtrHCHmvn7pPPa+nMDRu1o1bYYz/l5IB2NVGNJWiH7h1E58IF2A==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [win32] + + '@parcel/watcher@2.4.1': + resolution: {integrity: sha512-HNjmfLQEVRZmHRET336f20H/8kOozUGwk7yajvsonjNxbj2wBTK1WsQuHkD5yYh9RxFGL2EyDHryOihOwUoKDA==} + engines: {node: '>= 10.0.0'} + + '@polka/url@0.5.0': + resolution: {integrity: sha512-oZLYFEAzUKyi3SKnXvj32ZCEGH6RDnao7COuCVhDydMS9NrCSVXhM79VaKyP5+Zc33m0QXEd2DN3UkU7OsHcfw==} + + '@polka/url@1.0.0-next.21': + resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==} + + '@popperjs/core@2.11.8': + resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} + + '@replit/codemirror-indentation-markers@6.5.3': + resolution: {integrity: sha512-hL5Sfvw3C1vgg7GolLe/uxX5T3tmgOA3ZzqlMv47zjU1ON51pzNWiVbS22oh6crYhtVhv8b3gdXwoYp++2ilHw==} + peerDependencies: + '@codemirror/language': ^6.0.0 + '@codemirror/state': ^6.0.0 + '@codemirror/view': ^6.0.0 + + '@rollup/pluginutils@5.0.2': + resolution: {integrity: sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@sphinxxxx/color-conversion@2.2.2': + resolution: {integrity: sha512-XExJS3cLqgrmNBIP3bBw6+1oQ1ksGjFh0+oClDKFYpCCqx/hlqwWO5KO/S63fzUo67SxI9dMrF0y5T/Ey7h8Zw==} + + '@sxzz/popperjs-es@2.11.7': + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + + '@trysound/sax@0.2.0': + resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} + engines: {node: '>=10.13.0'} + + '@tweenjs/tween.js@23.1.3': + resolution: {integrity: sha512-vJmvvwFxYuGnF2axRtPYocag6Clbb5YS7kLL+SO/TeVFzHqDIWrNKYtcsPMibjDx9O+bu+psAy9NKfWklassUA==} + + '@types/estree@1.0.0': + resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==} + + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + + '@types/getos@3.0.4': + resolution: {integrity: sha512-OsNVsuGEBd5QoeXTgjPmA89a465hjQithLMImsiJlIi0aYP8axKWtWrsmEMfm50w6EL2oRzCz+cLkZmp9/LfZw==} + + '@types/humanize-duration@3.27.4': + resolution: {integrity: sha512-yaf7kan2Sq0goxpbcwTQ+8E9RP6HutFBPv74T/IA/ojcHKhuKVlk2YFYyHhWZeLvZPzzLE3aatuQB4h0iqyyUA==} + + '@types/javascript-time-ago@2.0.8': + resolution: {integrity: sha512-X77q3xUzWVn0qohgurKE1G5NiXZjee8VbLqaukW/HXVkz7bdCFJgOPQ3JVB4IkrDhMS4CviFTmpZuNVg0i2QFA==} + + '@types/lodash-es@4.17.12': + resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==} + + '@types/lodash@4.17.10': + resolution: {integrity: sha512-YpS0zzoduEhuOWjAotS6A5AVCva7X4lVlYLF0FYHAY9sdraBfnatttHItlWeZdGhuEkf+OzMNg2ZYAx8t+52uQ==} + + '@types/md5@2.3.5': + resolution: {integrity: sha512-/i42wjYNgE6wf0j2bcTX6kuowmdL/6PE4IVitMpm2eYKBUuYCprdcWVK+xEF0gcV6ufMCRhtxmReGfc6hIK7Jw==} + + '@types/node@https://registry.npmmirror.com/@types/node/-/node-18.11.10.tgz': + resolution: {integrity: sha512-juG3RWMBOqcOuXC643OAdSA525V44cVgGV6dUDuiFtss+8Fk5x1hI93Rsld43VeJVIeqlP9I7Fn9/qaVqoEAuQ==, tarball: https://registry.npmmirror.com/@types/node/-/node-18.11.10.tgz} + version: 18.11.10 + + '@types/pinyin@2.10.2': + resolution: {integrity: sha512-jLzlRkaLRLg+lgYPjOuP3HX2cozUkhXls5GTXopsKuKJ9lDGlIAb88OoIztH6TbNUsoJnl/7e/kjaumA5IKKJg==} + + '@types/showdown@2.0.6': + resolution: {integrity: sha512-pTvD/0CIeqe4x23+YJWlX2gArHa8G0J0Oh6GKaVXV7TAeickpkkZiNOgFcFcmLQ5lB/K0qBJL1FtRYltBfbGCQ==} + + '@types/stats.js@0.17.3': + resolution: {integrity: sha512-pXNfAD3KHOdif9EQXZ9deK82HVNaXP5ZIF5RP2QG6OQFNTaY2YIetfrE9t528vEreGQvEPRDDc8muaoYeK0SxQ==} + + '@types/three@0.166.0': + resolution: {integrity: sha512-FHMnpcdhdbdOOIYbfkTkUVpYMW53odxbTRwd0/xJpYnTzEsjnVnondGAvHZb4z06UW0vo6WPVuvH0/9qrxKx7g==} + + '@types/url-join@4.0.3': + resolution: {integrity: sha512-3l1qMm3wqO0iyC5gkADzT95UVW7C/XXcdvUcShOideKF0ddgVRErEQQJXBd2kvQm+aSgqhBGHGB38TgMeT57Ww==} + + '@types/web-bluetooth@0.0.16': + resolution: {integrity: sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==} + + '@types/webxr@0.5.20': + resolution: {integrity: sha512-JGpU6qiIJQKUuVSKx1GtQnHJGxRjtfGIhzO2ilq43VZZS//f1h1Sgexbdk+Lq+7569a6EYhOWrUpIruR/1Enmg==} + + '@vitejs/plugin-vue@https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-3.2.0.tgz': + resolution: {integrity: sha512-E0tnaL4fr+qkdCNxJ+Xd0yM31UwMkQje76fsDVBBUCoGOUPexu2VDUYHL8P4CwV+zMvWw6nlRw19OnRKmYAJpw==, tarball: https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-3.2.0.tgz} + version: 3.2.0 + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^3.0.0 + vue: ^3.2.25 + + '@volar/language-core@https://registry.npmmirror.com/@volar/language-core/-/language-core-1.0.11.tgz': + resolution: {integrity: sha512-YwUYKxIyDc+Fq3kQ6BGGfkrKCG5JzE2Yr6vMxrxEXW2rg/gsq3JgMk/4sI8ybRsaTirhCB4V8+AIVYsvcRxgig==, tarball: https://registry.npmmirror.com/@volar/language-core/-/language-core-1.0.11.tgz} + version: 1.0.11 + + '@volar/source-map@https://registry.npmmirror.com/@volar/source-map/-/source-map-1.0.11.tgz': + resolution: {integrity: sha512-tkuV9MD+OuiZfHA0qZXrPdW6F7TvnpnuTan6Qe7UGUs9+sflezlMJdjaYdGgQObfP+06pcT1E3xdkOoi08ZyyQ==, tarball: https://registry.npmmirror.com/@volar/source-map/-/source-map-1.0.11.tgz} + version: 1.0.11 + + '@volar/typescript@https://registry.npmmirror.com/@volar/typescript/-/typescript-1.0.11.tgz': + resolution: {integrity: sha512-mq7wDDAs0Eb43jev2FxbowuiwWqvL3kb+tar1we8VQbdabpyQ5dmbWPwo/IglevMmW3SKo1Et+6rqAeZpXNnPQ==, tarball: https://registry.npmmirror.com/@volar/typescript/-/typescript-1.0.11.tgz} + version: 1.0.11 + + '@volar/vue-language-core@https://registry.npmmirror.com/@volar/vue-language-core/-/vue-language-core-1.0.11.tgz': + resolution: {integrity: sha512-A3ODs0/ua7BcpSSnE7KtO8bzWsYsbOJRyW2Q/2uktxlfHj8srln3JdgK/mNlIgfnWtACbE5K+EfMJOgJKv864A==, tarball: https://registry.npmmirror.com/@volar/vue-language-core/-/vue-language-core-1.0.11.tgz} + version: 1.0.11 + + '@volar/vue-typescript@https://registry.npmmirror.com/@volar/vue-typescript/-/vue-typescript-1.0.11.tgz': + resolution: {integrity: sha512-jlnFPvBcTyPiAbGlgjhKK7fp3Q+Z7Z5eU1NTbTSS0lQC8Gog3sh2UxLAFG5Voe1gHIxasoOEPXzMR0CWF4bKbA==, tarball: https://registry.npmmirror.com/@volar/vue-typescript/-/vue-typescript-1.0.11.tgz} + version: 1.0.11 + + '@vue/compiler-core@3.5.12': + resolution: {integrity: sha512-ISyBTRMmMYagUxhcpyEH0hpXRd/KqDU4ymofPgl2XAkY9ZhQ+h0ovEZJIiPop13UmR/54oA2cgMDjgroRelaEw==} + + '@vue/compiler-core@https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.2.45.tgz': + resolution: {integrity: sha512-rcMj7H+PYe5wBV3iYeUgbCglC+pbpN8hBLTJvRiK2eKQiWqu+fG9F+8sW99JdL4LQi7Re178UOxn09puSXvn4A==, tarball: https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.2.45.tgz} + version: 3.2.45 + + '@vue/compiler-dom@3.5.12': + resolution: {integrity: sha512-9G6PbJ03uwxLHKQ3P42cMTi85lDRvGLB2rSGOiQqtXELat6uI4n8cNz9yjfVHRPIu+MsK6TE418Giruvgptckg==} + + '@vue/compiler-dom@https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.45.tgz': + resolution: {integrity: sha512-tyYeUEuKqqZO137WrZkpwfPCdiiIeXYCcJ8L4gWz9vqaxzIQRccTSwSWZ/Axx5YR2z+LvpUbmPNXxuBU45lyRw==, tarball: https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.45.tgz} + version: 3.2.45 + + '@vue/compiler-sfc@3.5.12': + resolution: {integrity: sha512-2k973OGo2JuAa5+ZlekuQJtitI5CgLMOwgl94BzMCsKZCX/xiqzJYzapl4opFogKHqwJk34vfsaKpfEhd1k5nw==} + + '@vue/compiler-sfc@https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.2.45.tgz': + resolution: {integrity: sha512-1jXDuWah1ggsnSAOGsec8cFjT/K6TMZ0sPL3o3d84Ft2AYZi2jWJgRMjw4iaK0rBfA89L5gw427H4n1RZQBu6Q==, tarball: https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.2.45.tgz} + version: 3.2.45 + + '@vue/compiler-ssr@3.5.12': + resolution: {integrity: sha512-eLwc7v6bfGBSM7wZOGPmRavSWzNFF6+PdRhE+VFJhNCgHiF8AM7ccoqcv5kBXA2eWUfigD7byekvf/JsOfKvPA==} + + '@vue/compiler-ssr@https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.2.45.tgz': + resolution: {integrity: sha512-6BRaggEGqhWht3lt24CrIbQSRD5O07MTmd+LjAn5fJj568+R9eUD2F7wMQJjX859seSlrYog7sUtrZSd7feqrQ==, tarball: https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.2.45.tgz} + version: 3.2.45 + + '@vue/devtools-api@6.4.5': + resolution: {integrity: sha512-JD5fcdIuFxU4fQyXUu3w2KpAJHzTVdN+p4iOX2lMWSHMOoQdMAcpFLZzm9Z/2nmsoZ1a96QEhZ26e50xLBsgOQ==} + + '@vue/devtools-api@6.6.4': + resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==} + + '@vue/reactivity-transform@https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.2.45.tgz': + resolution: {integrity: sha512-BHVmzYAvM7vcU5WmuYqXpwaBHjsS8T63jlKGWVtHxAHIoMIlmaMyurUSEs1Zcg46M4AYT5MtB1U274/2aNzjJQ==, tarball: https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.2.45.tgz} + version: 3.2.45 + + '@vue/reactivity@3.5.12': + resolution: {integrity: sha512-UzaN3Da7xnJXdz4Okb/BGbAaomRHc3RdoWqTzlvd9+WBR5m3J39J1fGcHes7U3za0ruYn/iYy/a1euhMEHvTAg==} + + '@vue/reactivity@https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.45.tgz': + resolution: {integrity: sha512-PRvhCcQcyEVohW0P8iQ7HDcIOXRjZfAsOds3N99X/Dzewy8TVhTCT4uXpAHfoKjVTJRA0O0K+6QNkDIZAxNi3A==, tarball: https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.45.tgz} + version: 3.2.45 + + '@vue/runtime-core@3.5.12': + resolution: {integrity: sha512-hrMUYV6tpocr3TL3Ad8DqxOdpDe4zuQY4HPY3X/VRh+L2myQO8MFXPAMarIOSGNu0bFAjh1yBkMPXZBqCk62Uw==} + + '@vue/runtime-dom@3.5.12': + resolution: {integrity: sha512-q8VFxR9A2MRfBr6/55Q3umyoN7ya836FzRXajPB6/Vvuv0zOPL+qltd9rIMzG/DbRLAIlREmnLsplEF/kotXKA==} + + '@vue/server-renderer@3.5.12': + resolution: {integrity: sha512-I3QoeDDeEPZm8yR28JtY+rk880Oqmj43hreIBVTicisFTx/Dl7JpG72g/X7YF8hnQD3IFhkky5i2bPonwrTVPg==} + version: 3.5.12 + peerDependencies: + vue: 3.5.12 + + '@vue/shared@3.5.12': + resolution: {integrity: sha512-L2RPSAwUFbgZH20etwrXyVyCBu9OxRSi8T/38QsvnkJyvq2LufW2lDCOzm7t/U9C1mkhJGWYfCuFBCmIuNivrg==} + + '@vue/shared@https://registry.npmmirror.com/@vue/shared/-/shared-3.2.45.tgz': + resolution: {integrity: sha512-Ewzq5Yhimg7pSztDV+RH1UDKBzmtqieXQlpTVm2AwraoRL/Rks96mvd8Vgi7Lj+h+TH8dv7mXD3FRZR3TUvbSg==, tarball: https://registry.npmmirror.com/@vue/shared/-/shared-3.2.45.tgz} + version: 3.2.45 + + '@vueuse/core@9.13.0': + resolution: {integrity: sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==} + version: 9.13.0 + + '@vueuse/metadata@9.13.0': + resolution: {integrity: sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==} + + '@vueuse/shared@9.13.0': + resolution: {integrity: sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==} + version: 9.13.0 + + abbrev@1.1.1: + resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} + + accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + + acorn-dynamic-import@4.0.0: + resolution: {integrity: sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==} + deprecated: This is probably built in to whatever tool you're using. If you still need it... idk + peerDependencies: + acorn: ^6.0.0 + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@6.4.2: + resolution: {integrity: sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==} + engines: {node: '>=0.4.0'} + hasBin: true + + acorn@8.13.0: + resolution: {integrity: sha512-8zSiw54Oxrdym50NlZ9sUusyO1Z1ZchgRLWRaK6c86XJFClyCgFKetdowBg5bKxyp/u+CDBJG4Mpp0m3HLZl9w==} + engines: {node: '>=0.4.0'} + hasBin: true + + agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + anymatch@https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==, tarball: https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz} + version: 3.1.3 + engines: {node: '>= 8'} + + aproba@2.0.0: + resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} + + are-we-there-yet@2.0.0: + resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} + engines: {node: '>=10'} + deprecated: This package is no longer supported. + + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + + aria-query@5.3.2: + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} + engines: {node: '>= 0.4'} + + array-bounds@1.0.1: + resolution: {integrity: sha512-8wdW3ZGk6UjMPJx/glyEt0sLzzwAE1bhToPsO1W2pbpR2gULyxe3BjSiuJFheP50T/GgODVPz2fuMUmIywt8cQ==} + + array-normalize@1.1.4: + resolution: {integrity: sha512-fCp0wKFLjvSPmCn4F5Tiw4M3lpMZoHlCjfcs7nNzuj3vqQQ1/a8cgB9DXcpDSn18c+coLnaW7rqfcYCvKbyJXg==} + + array-timsort@https://registry.npmmirror.com/array-timsort/-/array-timsort-1.0.3.tgz: + resolution: {integrity: sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==, tarball: https://registry.npmmirror.com/array-timsort/-/array-timsort-1.0.3.tgz} + version: 1.0.3 + + async-validator@4.2.5: + resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + atom-material-icons@3.0.0: + resolution: {integrity: sha512-qtMR5KxQh82iLIFOdrQZViq21GTNT+/mccrVAg41hIlrhpwHAEjCeGj91Iyas9GL28ld0D0hagHv6ipGWlLZHw==} + + attr-accept@2.2.2: + resolution: {integrity: sha512-7prDjvt9HmqiZ0cl5CRjtS84sEyhsHP2coDkaZKRKVfCDo9s7iw7ChVmar78Gu9pC4SoR/28wFu/G5JJhTnqEg==} + engines: {node: '>=4'} + + axios@1.7.7: + resolution: {integrity: sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==} + + axobject-query@4.1.0: + resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} + engines: {node: '>= 0.4'} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + balanced-match@https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, tarball: https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz} + version: 1.0.2 + + binary-extensions@https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==, tarball: https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz} + version: 2.2.0 + engines: {node: '>=8'} + + binary-search-bounds@2.0.5: + resolution: {integrity: sha512-H0ea4Fd3lS1+sTEB2TgcLoK21lLhwEJzlQv3IN47pJS976Gx4zoWe0ak3q+uYh60ppQxg9F16Ri4tS1sfD4+jA==} + + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==, tarball: https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz} + version: 2.0.1 + + braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + + braces@https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==, tarball: https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz} + version: 3.0.2 + engines: {node: '>=8'} + + buble@0.19.8: + resolution: {integrity: sha512-IoGZzrUTY5fKXVkgGHw3QeXFMUNBFv+9l8a4QJKG1JhG3nCMHTdEX1DCOg8568E2Q9qvAQIiSokv6Jsgx8p2cA==} + hasBin: true + + bubleify@1.2.1: + resolution: {integrity: sha512-vp3NHmaQVoKaKWvi15FTMinPNjfp+47+/kFJ9ifezdMF/CBLArCxDVUh+FQE3qRxCRj1qyjJqilTBHHqlM8MaQ==} + engines: {node: '>=4.0.0'} + + bytes@3.0.0: + resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} + engines: {node: '>= 0.8'} + + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + + charenc@0.0.2: + resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} + + chart.js@4.4.5: + resolution: {integrity: sha512-CVVjg1RYTJV9OCC8WeJPMx8gsV8K6WIyIEQUE3ui4AR9Hfgls9URri6Ja3hyMVBbTF8Q2KFa19PE815gWcWhng==} + engines: {pnpm: '>=8'} + + chartjs-adapter-date-fns@3.0.0: + resolution: {integrity: sha512-Rs3iEB3Q5pJ973J93OBTpnP7qoGwvq3nUnoMdtxO+9aoJof7UFcRbWcIDteXuYd1fgAvct/32T9qaLyLuZVwCg==} + peerDependencies: + chart.js: '>=2.8.0' + date-fns: '>=2.0.0' + + chokidar@4.0.1: + resolution: {integrity: sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==} + engines: {node: '>= 14.16.0'} + + chokidar@https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==, tarball: https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz} + version: 3.5.3 + engines: {node: '>= 8.10.0'} + + chownr@2.0.0: + resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} + engines: {node: '>=10'} + + clamp@1.0.1: + resolution: {integrity: sha512-kgMuFyE78OC6Dyu3Dy7vcx4uy97EIbVxJB/B0eJ3bUNAkwdNcxYzgKltnyADiYwsR7SEqkkUPsEUT//OVS6XMA==} + + clipboard@2.0.11: + resolution: {integrity: sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + code-red@1.0.4: + resolution: {integrity: sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==} + + codemirror-wrapped-line-indent@1.0.8: + resolution: {integrity: sha512-5UwuHCz4oAZuvot1DbfFxSxJacTESdNGa/KpJD7HfpVpDAJdgB1vV9OG4b4pkJqPWuOfIpFLTQEKS85kTpV+XA==} + peerDependencies: + '@codemirror/language': ^6.9.0 + '@codemirror/state': ^6.2.1 + '@codemirror/view': ^6.17.1 + + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + color-support@1.1.3: + resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} + hasBin: true + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + commander@1.1.1: + resolution: {integrity: sha512-71Rod2AhcH3JhkBikVpNd0pA+fWsmAaVoti6OR38T76chA7vE3pSerS0Jor4wDw+tOueD2zLVvFOw5H0Rcj7rA==} + engines: {node: '>= 0.6.x'} + + commander@7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + + commander@9.5.0: + resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} + engines: {node: ^12.20.0 || >=14} + + comment-json@https://registry.npmmirror.com/comment-json/-/comment-json-4.2.3.tgz: + resolution: {integrity: sha512-SsxdiOf064DWoZLH799Ata6u7iV658A11PlWtZATDlXPpKGJnbJZ5Z24ybixAi+LUUqJ/GKowAejtC5GFUG7Tw==, tarball: https://registry.npmmirror.com/comment-json/-/comment-json-4.2.3.tgz} + version: 4.2.3 + engines: {node: '>= 6'} + + compressible@2.0.18: + resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} + engines: {node: '>= 0.6'} + + compression@1.7.4: + resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==} + engines: {node: '>= 0.8.0'} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + consola@https://registry.npmmirror.com/consola/-/consola-2.15.3.tgz: + resolution: {integrity: sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==, tarball: https://registry.npmmirror.com/consola/-/consola-2.15.3.tgz} + version: 2.15.3 + + console-clear@1.1.1: + resolution: {integrity: sha512-pMD+MVR538ipqkG5JXeOEbKWS5um1H4LUUccUQG68qpeqBYbzYy79Gh55jkd2TtPdRfUaLWdv6LPP//5Zt0aPQ==} + engines: {node: '>=4'} + + console-control-strings@1.1.0: + resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} + + core-js@3.38.1: + resolution: {integrity: sha512-OP35aUorbU3Zvlx7pjsFdu1rGNnD4pgw/CWoYzRY3t2EzoVT7shKHY1dlAy3f41cGIO7ZDPQimhGFTlEYkG/Hw==} + + core-util-is@https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==, tarball: https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz} + version: 1.0.3 + + crawlab-ui@0.7.0-rc3: + resolution: {integrity: sha512-WF7DLjrXa0J3uY/u7iTtZyqbhCIHZaW2K5dWHMj28GCaT69uvPRR32AfZPWag5sarqXdOmKNSOt5NidAPKqKpQ==} + peerDependencies: + '@element-plus/icons-vue': ^2.3.1 + '@fortawesome/fontawesome-common-types': ^6.5.2 + '@fortawesome/fontawesome-svg-core': ^6.5.2 + '@fortawesome/free-brands-svg-icons': ^6.5.2 + '@fortawesome/free-regular-svg-icons': ^6.5.2 + '@fortawesome/free-solid-svg-icons': ^6.5.2 + '@fortawesome/vue-fontawesome': ^3.0.8 + '@lexical/code': ^0.16.1 + '@lexical/history': ^0.16.1 + '@lexical/html': ^0.16.1 + '@lexical/link': ^0.16.1 + '@lexical/list': ^0.16.1 + '@lexical/markdown': ^0.16.1 + '@lexical/rich-text': ^0.16.1 + '@lexical/selection': ^0.16.1 + '@lexical/table': ^0.16.1 + '@lexical/text': ^0.16.1 + '@lexical/utils': ^0.16.1 + '@popperjs/core': ^2.11.8 + '@types/getos': ^3.0.4 + '@types/humanize-duration': ^3.27.4 + '@types/javascript-time-ago': ^2.0.8 + '@types/lodash': ^4.17.6 + '@types/md5': ^2.3.5 + '@types/pinyin': ^2.10.2 + '@types/showdown': ^2.0.6 + '@types/three': ^0.166.0 + '@types/url-join': ^4.0.3 + async-validator: ^4.2.5 + atom-material-icons: ^3.0.0 + axios: ^1.7.2 + chart.js: ^4.4.3 + chartjs-adapter-date-fns: ^3.0.0 + clipboard: ^2.0.11 + core-js: ^3.37.1 + crawlab-vue3-dropzone: 3.0.3 + cron-parser: ^4.9.0 + cronstrue: ^2.50.0 + dayjs: ^1.11.11 + element-plus: ^2.7.6 + font-awesome: ^4.7.0 + humanize-duration: ^3.32.1 + javascript-time-ago: ^2.5.10 + lexical: ^0.16.1 + lodash: ^4.17.21 + md5: ^2.3.0 + mitt: ^3.0.1 + monaco-editor: ^0.50.0 + normalize.css: ^8.0.1 + os-name: ^5.0.1 + pinyin: ^2.10.2 + point-cluster: ^3.1.8 + prismjs: ^1.29.0 + showdown: ^2.1.0 + three: ^0.166.1 + tiny-invariant: ^1.3.3 + url-join: ^4.0.1 + url-regex: ^5.0.0 + vite-svg-loader: ^5.1.0 + vue: ^3.4 + vue-chartjs: ^5.3.1 + vue-clipboard3: ^2.0.0 + vue-i18n: 9.13.1 + vue-router: ^4.4.0 + vuex: ^4.1.0 + + crawlab-vue3-dropzone@3.0.3: + resolution: {integrity: sha512-s/GHSTteFqJcMk14Xkp1imwEyrOCa+uwwH1eCsTAxVzaYocpiDpbDjQ3u3vrMyws9InsqqgtmAJhy2vGHEsk/Q==} + version: 3.0.3 + peerDependencies: + vue: '>=3.2.45' + + crelt@1.0.6: + resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==} + + cron-parser@4.9.0: + resolution: {integrity: sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==} + engines: {node: '>=12.0.0'} + + cronstrue@2.50.0: + resolution: {integrity: sha512-ULYhWIonJzlScCCQrPUG5uMXzXxSixty4djud9SS37DoNxDdkeRocxzHuAo4ImRBUK+mAuU5X9TSwEDccnnuPg==} + hasBin: true + + cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + + crypt@0.0.2: + resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==} + + css-select@5.1.0: + resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} + + css-tree@2.2.1: + resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + + css-tree@2.3.1: + resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + + css-what@6.1.0: + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} + + csso@5.0.5: + resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + date-fns@4.1.0: + resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==} + + dayjs@1.11.13: + resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==} + + de-indent@https://registry.npmmirror.com/de-indent/-/de-indent-1.0.2.tgz: + resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==, tarball: https://registry.npmmirror.com/de-indent/-/de-indent-1.0.2.tgz} + version: 1.0.2 + + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + define-lazy-prop@2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} + + defined@1.0.1: + resolution: {integrity: sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + delegate@3.2.0: + resolution: {integrity: sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==} + + delegates@1.0.0: + resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} + + detect-libc@1.0.3: + resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} + engines: {node: '>=0.10'} + hasBin: true + + detect-libc@2.0.1: + resolution: {integrity: sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==} + engines: {node: '>=8'} + + diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + + domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + + domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + + domutils@3.1.0: + resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} + + dtype@2.0.0: + resolution: {integrity: sha512-s2YVcLKdFGS0hpFqJaTwscsyt0E8nNFdmo73Ocd81xNPj4URI4rj6D60A+vFMIw7BXWlb4yRkEwfBqcZzPGiZg==} + engines: {node: '>= 0.8.0'} + + element-plus@2.8.5: + resolution: {integrity: sha512-Px+kPbRTVvn5oa5+9saa7QEOnUweKXm0JVI7yJHzKF/doQGixwcFMsQEF2+3Fy62EA/7dRRKVuhsNGGZYNk3cw==} + version: 2.8.5 + peerDependencies: + vue: ^3.2.0 + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + esbuild-android-64@0.15.16: + resolution: {integrity: sha512-Vwkv/sT0zMSgPSVO3Jlt1pUbnZuOgtOQJkJkyyJFAlLe7BiT8e9ESzo0zQSx4c3wW4T6kGChmKDPMbWTgtliQA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + esbuild-android-arm64@0.15.16: + resolution: {integrity: sha512-lqfKuofMExL5niNV3gnhMUYacSXfsvzTa/58sDlBET/hCOG99Zmeh+lz6kvdgvGOsImeo6J9SW21rFCogNPLxg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + esbuild-darwin-64@0.15.16: + resolution: {integrity: sha512-wo2VWk/n/9V2TmqUZ/KpzRjCEcr00n7yahEdmtzlrfQ3lfMCf3Wa+0sqHAbjk3C6CKkR3WKK/whkMq5Gj4Da9g==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + esbuild-darwin-arm64@0.15.16: + resolution: {integrity: sha512-fMXaUr5ou0M4WnewBKsspMtX++C1yIa3nJ5R2LSbLCfJT3uFdcRoU/NZjoM4kOMKyOD9Sa/2vlgN8G07K3SJnw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + esbuild-freebsd-64@0.15.16: + resolution: {integrity: sha512-UzIc0xlRx5x9kRuMr+E3+hlSOxa/aRqfuMfiYBXu2jJ8Mzej4lGL7+o6F5hzhLqWfWm1GWHNakIdlqg1ayaTNQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + esbuild-freebsd-arm64@0.15.16: + resolution: {integrity: sha512-8xyiYuGc0DLZphFQIiYaLHlfoP+hAN9RHbE+Ibh8EUcDNHAqbQgUrQg7pE7Bo00rXmQ5Ap6KFgcR0b4ALZls1g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + esbuild-linux-32@0.15.16: + resolution: {integrity: sha512-iGijUTV+0kIMyUVoynK0v+32Oi8yyp0xwMzX69GX+5+AniNy/C/AL1MjFTsozRp/3xQPl7jVux/PLe2ds10/2w==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + esbuild-linux-64@0.15.16: + resolution: {integrity: sha512-tuSOjXdLw7VzaUj89fIdAaQT7zFGbKBcz4YxbWrOiXkwscYgE7HtTxUavreBbnRkGxKwr9iT/gmeJWNm4djy/g==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + esbuild-linux-arm64@0.15.16: + resolution: {integrity: sha512-mPYksnfHnemNrvjrDhZyixL/AfbJN0Xn9S34ZOHYdh6/jJcNd8iTsv3JwJoEvTJqjMggjMhGUPJAdjnFBHoH8A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + esbuild-linux-arm@0.15.16: + resolution: {integrity: sha512-XKcrxCEXDTOuoRj5l12tJnkvuxXBMKwEC5j0JISw3ziLf0j4zIwXbKbTmUrKFWbo6ZgvNpa7Y5dnbsjVvH39bQ==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + esbuild-linux-mips64le@0.15.16: + resolution: {integrity: sha512-kSJO2PXaxfm0pWY39+YX+QtpFqyyrcp0ZeI8QPTrcFVQoWEPiPVtOfTZeS3ZKedfH+Ga38c4DSzmKMQJocQv6A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + esbuild-linux-ppc64le@0.15.16: + resolution: {integrity: sha512-NimPikwkBY0yGABw6SlhKrtT35sU4O23xkhlrTT/O6lSxv3Pm5iSc6OYaqVAHWkLdVf31bF4UDVFO+D990WpAA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + esbuild-linux-riscv64@0.15.16: + resolution: {integrity: sha512-ty2YUHZlwFOwp7pR+J87M4CVrXJIf5ZZtU/umpxgVJBXvWjhziSLEQxvl30SYfUPq0nzeWKBGw5i/DieiHeKfw==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + esbuild-linux-s390x@0.15.16: + resolution: {integrity: sha512-VkZaGssvPDQtx4fvVdZ9czezmyWyzpQhEbSNsHZZN0BHvxRLOYAQ7sjay8nMQwYswP6O2KlZluRMNPYefFRs+w==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + esbuild-netbsd-64@0.15.16: + resolution: {integrity: sha512-ElQ9rhdY51et6MJTWrCPbqOd/YuPowD7Cxx3ee8wlmXQQVW7UvQI6nSprJ9uVFQISqSF5e5EWpwWqXZsECLvXg==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + esbuild-openbsd-64@0.15.16: + resolution: {integrity: sha512-KgxMHyxMCT+NdLQE1zVJEsLSt2QQBAvJfmUGDmgEq8Fvjrf6vSKB00dVHUEDKcJwMID6CdgCpvYNt999tIYhqA==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + esbuild-sunos-64@0.15.16: + resolution: {integrity: sha512-exSAx8Phj7QylXHlMfIyEfNrmqnLxFqLxdQF6MBHPdHAjT7fsKaX6XIJn+aQEFiOcE4X8e7VvdMCJ+WDZxjSRQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + esbuild-windows-32@0.15.16: + resolution: {integrity: sha512-zQgWpY5pUCSTOwqKQ6/vOCJfRssTvxFuEkpB4f2VUGPBpdddZfdj8hbZuFRdZRPIVHvN7juGcpgCA/XCF37mAQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + esbuild-windows-64@0.15.16: + resolution: {integrity: sha512-HjW1hHRLSncnM3MBCP7iquatHVJq9l0S2xxsHHj4yzf4nm9TU4Z7k4NkeMlD/dHQ4jPlQQhwcMvwbJiOefSuZw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + esbuild-windows-arm64@0.15.16: + resolution: {integrity: sha512-oCcUKrJaMn04Vxy9Ekd8x23O8LoU01+4NOkQ2iBToKgnGj5eo1vU9i27NQZ9qC8NFZgnQQZg5oZWAejmbsppNA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + esbuild@https://registry.npmmirror.com/esbuild/-/esbuild-0.15.16.tgz: + resolution: {integrity: sha512-o6iS9zxdHrrojjlj6pNGC2NAg86ECZqIETswTM5KmJitq+R1YmahhWtMumeQp9lHqJaROGnsBi2RLawGnfo5ZQ==, tarball: https://registry.npmmirror.com/esbuild/-/esbuild-0.15.16.tgz} + version: 0.15.16 + engines: {node: '>=12'} + hasBin: true + + escalade@3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + esprima@https://registry.npmmirror.com/esprima/-/esprima-4.0.1.tgz: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==, tarball: https://registry.npmmirror.com/esprima/-/esprima-4.0.1.tgz} + version: 4.0.1 + engines: {node: '>=4'} + hasBin: true + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + + estree-walker@https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==, tarball: https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz} + version: 2.0.2 + + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@https://registry.npmmirror.com/fast-glob/-/fast-glob-3.2.12.tgz: + resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==, tarball: https://registry.npmmirror.com/fast-glob/-/fast-glob-3.2.12.tgz} + version: 3.2.12 + engines: {node: '>=8.6.0'} + + fast-uri@3.0.3: + resolution: {integrity: sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==} + + fastq@https://registry.npmmirror.com/fastq/-/fastq-1.14.0.tgz: + resolution: {integrity: sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg==, tarball: https://registry.npmmirror.com/fastq/-/fastq-1.14.0.tgz} + version: 1.14.0 + + fflate@0.8.2: + resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} + + file-selector@0.2.4: + resolution: {integrity: sha512-ZDsQNbrv6qRi1YTDOEWzf5J2KjZ9KMI1Q2SGeTkCJmNNW25Jg4TW4UMcmoqcg4WrAyKRcpBXdbWRxkfrOzVRbA==} + engines: {node: '>= 10'} + + fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + + fill-range@https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==, tarball: https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz} + version: 7.0.1 + engines: {node: '>=8'} + + flatten-vertex-data@1.0.2: + resolution: {integrity: sha512-BvCBFK2NZqerFTdMDgqfHBwxYWnxeCkwONsw6PvBMcUXqo8U/KDWwmXhqx1x2kLIg7DqIsJfOaJFOmlua3Lxuw==} + + follow-redirects@1.15.9: + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + font-awesome@4.7.0: + resolution: {integrity: sha512-U6kGnykA/6bFmg1M/oT9EkFeIYv7JlX3bozwQJWiiLz6L0w3F5vBVPxHlwyX/vtNq1ckcpRKOB9f2Qal/VtFpg==} + engines: {node: '>=0.10.3'} + + form-data@4.0.1: + resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} + engines: {node: '>= 6'} + + fs-minipass@2.1.0: + resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} + engines: {node: '>= 8'} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz: + resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==, tarball: https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz} + version: 1.1.1 + + gauge@3.0.2: + resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==} + engines: {node: '>=10'} + deprecated: This package is no longer supported. + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-port@3.2.0: + resolution: {integrity: sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==} + engines: {node: '>=4'} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + glob-parent@https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==, tarball: https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz} + version: 5.1.2 + engines: {node: '>= 6'} + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + good-listener@1.2.2: + resolution: {integrity: sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==} + + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + has-own-prop@https://registry.npmmirror.com/has-own-prop/-/has-own-prop-2.0.0.tgz: + resolution: {integrity: sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==, tarball: https://registry.npmmirror.com/has-own-prop/-/has-own-prop-2.0.0.tgz} + version: 2.0.0 + engines: {node: '>=8'} + + has-unicode@2.0.1: + resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} + + has@https://registry.npmmirror.com/has/-/has-1.0.3.tgz: + resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==, tarball: https://registry.npmmirror.com/has/-/has-1.0.3.tgz} + version: 1.0.3 + engines: {node: '>= 0.4.0'} + + he@https://registry.npmmirror.com/he/-/he-1.2.0.tgz: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==, tarball: https://registry.npmmirror.com/he/-/he-1.2.0.tgz} + version: 1.2.0 + hasBin: true + + https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + + humanize-duration@3.32.1: + resolution: {integrity: sha512-inh5wue5XdfObhu/IGEMiA1nUXigSGcaKNemcbLRKa7jXYGDZXr3LoT9pTIzq2hPEbld7w/qv9h+ikWGz8fL1g==} + + immutable-json-patch@6.0.1: + resolution: {integrity: sha512-BHL/cXMjwFZlTOffiWNdY8ZTvNyYLrutCnWxrcKPHr5FqpAb6vsO6WWSPnVSys3+DruFN6lhHJJPHi8uELQL5g==} + + immutable@4.3.7: + resolution: {integrity: sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ip-regex@4.3.0: + resolution: {integrity: sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==} + engines: {node: '>=8'} + + is-binary-path@https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==, tarball: https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz} + version: 2.1.0 + engines: {node: '>=8'} + + is-buffer@1.1.6: + resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} + + is-core-module@https://registry.npmmirror.com/is-core-module/-/is-core-module-2.11.0.tgz: + resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==, tarball: https://registry.npmmirror.com/is-core-module/-/is-core-module-2.11.0.tgz} + version: 2.11.0 + + is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-extglob@https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==, tarball: https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz} + version: 2.1.1 + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-glob@https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==, tarball: https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz} + version: 4.0.3 + engines: {node: '>=0.10.0'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-number@https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==, tarball: https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz} + version: 7.0.0 + engines: {node: '>=0.12.0'} + + is-obj@1.0.1: + resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==} + engines: {node: '>=0.10.0'} + + is-reference@3.0.1: + resolution: {integrity: sha512-baJJdQLiYaJdvFbJqXrcGv3WU3QCzBlUcI5QhbesIm6/xPsvmO+2CDoi/GMOFBQEQm+PXkwOPrp9KK5ozZsp2w==} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + javascript-time-ago@2.5.11: + resolution: {integrity: sha512-Zeyf5R7oM1fSMW9zsU3YgAYwE0bimEeF54Udn2ixGd8PUwu+z1Yc5t4Y8YScJDMHD6uCx6giLt3VJR5K4CMwbg==} + + jmespath@0.16.0: + resolution: {integrity: sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==} + engines: {node: '>= 0.6.0'} + + js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + + jsep@1.3.9: + resolution: {integrity: sha512-i1rBX5N7VPl0eYb6+mHNp52sEuaS2Wi8CDYx1X5sn9naevL78+265XJqy1qENEk7mRKwS06NHpUqiBwR7qeodw==} + engines: {node: '>= 10.16.0'} + + jsesc@0.5.0: + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} + hasBin: true + + json-editor-vue@0.17.2: + resolution: {integrity: sha512-P38IvEwQJe4IHFpZe1YG2CWOK6pCjeHmPu2tLs01IiV0kz8QBoHYC7N5ZORlGTL4tQFVOosmnI1gjXztywHtig==} + version: 0.17.2 + peerDependencies: + '@vue/composition-api': '>=1' + vue: 2||3 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + json-source-map@0.6.1: + resolution: {integrity: sha512-1QoztHPsMQqhDq0hlXY5ZqcEdUzxQEIxgFkKl4WUp2pgShObl+9ovi4kRh2TfvAfxAoHOJ9vIMEqk3k4iex7tg==} + + jsonpath-plus@10.0.1: + resolution: {integrity: sha512-30DeH2QD4nL1IpDLPIFz09G5XyLvh+oNMUI2Zxf4tbrlsVHs0e3VPnwpOnSTFb4yM0dfQK2WGKLsSaAS8V62rw==} + engines: {node: '>=18.0.0'} + hasBin: true + + jsonrepair@3.8.1: + resolution: {integrity: sha512-5wnjaO53EJOhfLFY92nvBz2B9gqF9ql/D4HKUb1WOSBaqtVcAifFfmurblnhCJn/ySqKFA8U3n7nhGMAu/hEjQ==} + hasBin: true + + keypress@0.1.0: + resolution: {integrity: sha512-x0yf9PL/nx9Nw9oLL8ZVErFAk85/lslwEP7Vz7s5SI1ODXZIgit3C5qyWjw4DxOuO/3Hb4866SQh28a1V1d+WA==} + + kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + + lexical@0.16.1: + resolution: {integrity: sha512-+R05d3+N945OY8pTUjTqQrWoApjC+ctzvjnmNETtx9WmVAaiW0tQVG+AYLt5pDGY8dQXtd4RPorvnxBTECt9SA==} + + local-access@1.1.0: + resolution: {integrity: sha512-XfegD5pyTAfb+GY6chk283Ox5z8WexG56OvM06RWLpAc/UHozO8X6xAxEkIitZOtsSMM1Yr3DkHgW5W+onLhCw==} + engines: {node: '>=6'} + + locate-character@3.0.0: + resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} + + lodash-es@4.17.21: + resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + + lodash-unified@1.0.3: + resolution: {integrity: sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==} + peerDependencies: + '@types/lodash-es': '*' + lodash: '*' + lodash-es: '*' + + lodash._reinterpolate@3.0.0: + resolution: {integrity: sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA==} + + lodash.template@4.5.0: + resolution: {integrity: sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==} + + lodash.templatesettings@4.2.0: + resolution: {integrity: sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + + luxon@3.5.0: + resolution: {integrity: sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ==} + engines: {node: '>=12'} + + macos-release@3.1.0: + resolution: {integrity: sha512-/M/R0gCDgM+Cv1IuBG1XGdfTFnMEG6PZeT+KGWHO/OG+imqmaD9CH5vHBTycEM3+Kc4uG2Il+tFAuUWLqQOeUA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + magic-string@0.25.9: + resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} + + magic-string@0.30.1: + resolution: {integrity: sha512-mbVKXPmS0z0G4XqFDCTllmDQ6coZzn94aMlb0o/A4HEHJCKcanlDZwYJgwnkmgD3jyWhUgj9VsPrfd972yPffA==} + engines: {node: '>=12'} + + magic-string@0.30.12: + resolution: {integrity: sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==} + + magic-string@https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz: + resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==, tarball: https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz} + version: 0.25.9 + + make-dir@3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} + + matchit@1.1.0: + resolution: {integrity: sha512-+nGYoOlfHmxe5BW5tE0EMJppXEwdSf8uBA1GTZC7Q77kbT35+VKLYJMzVNWCHSsga1ps1tPYFtFyvxvKzWVmMA==} + engines: {node: '>=6'} + + math-log2@1.0.1: + resolution: {integrity: sha512-9W0yGtkaMAkf74XGYVy4Dqw3YUMnTNB2eeiw9aQbUl4A3KmuCEHTt2DgAB07ENzOYAjsYSAYufkAq0Zd+jU7zA==} + engines: {node: '>=0.10.0'} + + md5@2.3.0: + resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==} + + mdn-data@2.0.28: + resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} + + mdn-data@2.0.30: + resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} + + memoize-one@6.0.0: + resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==, tarball: https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz} + version: 1.4.1 + engines: {node: '>= 8'} + + meshoptimizer@0.18.1: + resolution: {integrity: sha512-ZhoIoL7TNV4s5B6+rx5mC//fw8/POGyNxS/DZyCJeiZ12ScLfVwRE/GfsxwiTkMYYD5DmK2/JXnEVXqL4rF+Sw==} + + micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + + micromatch@https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==, tarball: https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz} + version: 4.0.5 + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@https://registry.npmmirror.com/minimatch/-/minimatch-5.1.1.tgz: + resolution: {integrity: sha512-362NP+zlprccbEt/SkxKfRMHnNY85V74mVnpUpNyr3F35covl09Kec7/sEFLt3RA4oXmewtoaanoIf67SE5Y5g==, tarball: https://registry.npmmirror.com/minimatch/-/minimatch-5.1.1.tgz} + version: 5.1.1 + engines: {node: '>=10'} + + minimist@1.2.7: + resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==} + + minipass@3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} + engines: {node: '>=8'} + + minizlib@2.1.2: + resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} + engines: {node: '>= 8'} + + mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + + mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + + monaco-editor@0.50.0: + resolution: {integrity: sha512-8CclLCmrRRh+sul7C08BmPBP3P8wVWfBHomsTcndxg5NRCEPfu/mc2AGU8k37ajjDVXcXFc12ORAMUkmk+lkFA==} + + mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + + mrmime@1.0.1: + resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==} + engines: {node: '>=10'} + + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + muggle-string@https://registry.npmmirror.com/muggle-string/-/muggle-string-0.1.0.tgz: + resolution: {integrity: sha512-Tr1knR3d2mKvvWthlk7202rywKbiOm4rVFLsfAaSIhJ6dt9o47W4S+JMtWhd/PW9Wrdew2/S2fSvhz3E2gkfEg==, tarball: https://registry.npmmirror.com/muggle-string/-/muggle-string-0.1.0.tgz} + version: 0.1.0 + + nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + nanoid@https://registry.npmmirror.com/nanoid/-/nanoid-3.3.4.tgz: + resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==, tarball: https://registry.npmmirror.com/nanoid/-/nanoid-3.3.4.tgz} + version: 3.3.4 + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + natural-compare-lite@1.4.0: + resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} + + negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + + node-addon-api@3.2.1: + resolution: {integrity: sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==} + + node-addon-api@7.1.1: + resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} + + node-fetch@2.6.7: + resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + nodejieba@2.5.2: + resolution: {integrity: sha512-ByskJvaBrQ2eV+5M0OeD80S5NKoGaHc9zi3Z/PTKl/95eac2YF8RmWduq9AknLpkQLrLAIcqurrtC6BzjpKwwg==} + engines: {node: '>= 10.20.0'} + + nopt@5.0.0: + resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} + engines: {node: '>=6'} + hasBin: true + + normalize-path@https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==, tarball: https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz} + version: 3.0.0 + engines: {node: '>=0.10.0'} + + normalize-wheel-es@1.2.0: + resolution: {integrity: sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==} + + normalize.css@8.0.1: + resolution: {integrity: sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg==} + + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + + npmlog@5.0.1: + resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} + deprecated: This package is no longer supported. + + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + on-headers@1.0.2: + resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} + engines: {node: '>= 0.8'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + open@8.4.2: + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} + + os-homedir@2.0.0: + resolution: {integrity: sha512-saRNz0DSC5C/I++gFIaJTXoFJMRwiP5zHar5vV3xQ2TkgEw6hDCcU5F272JjUylpiVgBrZNQHnfjkLabTfb92Q==} + engines: {node: '>=0.10.0'} + deprecated: This is not needed anymore. Use `require('os').homedir()` instead. + + os-name@5.0.1: + resolution: {integrity: sha512-0EQpaHUHq7olp2/YFUr+0vZi9tMpDTblHGz+Ch5RntKxiRXOAY0JOz1UlxhSjMSksHvkm13eD6elJj3M8Ht/kw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + parse-rect@1.2.0: + resolution: {integrity: sha512-4QZ6KYbnE6RTwg9E0HpLchUM9EZt6DnDxajFZZDSV4p/12ZJEvPO702DZpGvRYEPo00yKDys7jASi+/w7aO8LA==} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-parse@https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==, tarball: https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz} + version: 1.0.7 + + periscopic@3.1.0: + resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} + + pick-by-alias@1.2.0: + resolution: {integrity: sha512-ESj2+eBxhGrcA1azgHs7lARG5+5iLakc/6nlfbpjcLl00HuuUOIuORhYXN4D1HfvMSKuVtFQjAlnwi1JHEeDIw==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picocolors@https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==, tarball: https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz} + version: 1.0.0 + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + picomatch@https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==, tarball: https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz} + version: 2.3.1 + engines: {node: '>=8.6'} + + pinyin@2.11.2: + resolution: {integrity: sha512-tAWDBcowj09j/vLUjty98nVqrbTVNhutf1VcyID4p0sxTFPzRyXw7n7Ic0HQwBdWFIWrrDP8bYiT64gaT6h3gA==} + hasBin: true + + point-cluster@3.1.8: + resolution: {integrity: sha512-7klIr45dpMeZuqjIK9+qBg3m2IhyZJNJkdqjJFw0Olq75FM8ojrTMjClVUrMjNYRVqtwztxCHH71Fyjhg+YwyQ==} + + polka@0.5.2: + resolution: {integrity: sha512-FVg3vDmCqP80tOrs+OeNlgXYmFppTXdjD5E7I4ET1NjvtNmQrb1/mJibybKkb/d4NA7YWAr1ojxuhpL3FHqdlw==} + + postcss@8.4.47: + resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} + engines: {node: ^10 || ^12 || >=14} + + postcss@https://registry.npmmirror.com/postcss/-/postcss-8.4.19.tgz: + resolution: {integrity: sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==, tarball: https://registry.npmmirror.com/postcss/-/postcss-8.4.19.tgz} + version: 8.4.19 + engines: {node: ^10 || ^12 || >=14} + + prismjs@1.29.0: + resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==} + engines: {node: '>=6'} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + queue-microtask@https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==, tarball: https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz} + version: 1.2.3 + + readable-stream@3.6.0: + resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} + engines: {node: '>= 6'} + + readdirp@4.0.2: + resolution: {integrity: sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==} + engines: {node: '>= 14.16.0'} + + readdirp@https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==, tarball: https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz} + version: 3.6.0 + engines: {node: '>=8.10.0'} + + regenerate-unicode-properties@9.0.0: + resolution: {integrity: sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA==} + engines: {node: '>=4'} + + regenerate@1.4.2: + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + + regexpu-core@4.8.0: + resolution: {integrity: sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg==} + engines: {node: '>=4'} + + regjsgen@0.5.2: + resolution: {integrity: sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==} + + regjsparser@0.7.0: + resolution: {integrity: sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ==} + hasBin: true + + relative-time-format@1.1.6: + resolution: {integrity: sha512-aCv3juQw4hT1/P/OrVltKWLlp15eW1GRcwP1XdxHrPdZE9MtgqFpegjnTjLhi2m2WI9MT/hQQtE+tjEWG1hgkQ==} + + repeat-string@https://registry.npmmirror.com/repeat-string/-/repeat-string-1.6.1.tgz: + resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==, tarball: https://registry.npmmirror.com/repeat-string/-/repeat-string-1.6.1.tgz} + version: 1.6.1 + engines: {node: '>=0.10'} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + resolve@https://registry.npmmirror.com/resolve/-/resolve-1.22.1.tgz: + resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==, tarball: https://registry.npmmirror.com/resolve/-/resolve-1.22.1.tgz} + version: 1.22.1 + hasBin: true + + reusify@https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==, tarball: https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz} + version: 1.0.4 + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + + rollup-plugin-external-globals@0.8.0: + resolution: {integrity: sha512-c65c7hPMCE//cLzC4dLVE25XkuHsBqSkZp+/5pvtZ1MFwqgQLRRkIfuCvI3PnI7Yj8HoXqYtdsRN9gYF5a4tVQ==} + peerDependencies: + rollup: ^2.25.0 || ^3.3.0 + + rollup-plugin-visualizer@5.9.2: + resolution: {integrity: sha512-waHktD5mlWrYFrhOLbti4YgQCn1uR24nYsNuXxg7LkPH8KdTXVWR9DNY1WU0QqokyMixVXJS4J04HNrVTMP01A==} + engines: {node: '>=14'} + hasBin: true + peerDependencies: + rollup: 2.x || 3.x + peerDependenciesMeta: + rollup: + optional: true + + rollup@3.26.2: + resolution: {integrity: sha512-6umBIGVz93er97pMgQO08LuH3m6PUb3jlDUUGFsNJB6VgTCUaDFpupf5JfU30529m/UKOgmiX+uY6Sx8cOYpLA==} + engines: {node: '>=14.18.0', npm: '>=8.0.0'} + hasBin: true + + rollup@https://registry.npmmirror.com/rollup/-/rollup-2.79.1.tgz: + resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==, tarball: https://registry.npmmirror.com/rollup/-/rollup-2.79.1.tgz} + version: 2.79.1 + engines: {node: '>=10.0.0'} + hasBin: true + + run-parallel@https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==, tarball: https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz} + version: 1.2.0 + + sade@1.8.1: + resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} + engines: {node: '>=6'} + + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + sass@1.80.1: + resolution: {integrity: sha512-9lBwDZ7j3y/1DKj5Ec249EVGo5CVpwnzIyIj+cqlCjKkApLnzsJ/l9SnV4YnORvW9dQwQN+gQvh/mFZ8CnDs7Q==} + engines: {node: '>=14.0.0'} + hasBin: true + + select-dom@6.0.2: + resolution: {integrity: sha512-fnRexLCjOE1XtMiV0xGACx4GJFMs/eatOQM0LWL9lxWB8DJ/FeXO39ztqUh6dZCOdoFo/g6jGJIIqNWoMsNLPA==} + + select@1.1.2: + resolution: {integrity: sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==} + + semiver@1.1.0: + resolution: {integrity: sha512-QNI2ChmuioGC1/xjyYwyZYADILWyW6AmS1UH6gDj/SFUUUS4MBAWs/7mxnkRPc/F4iHezDP+O8t0dO8WHiEOdg==} + engines: {node: '>=6'} + + semver@6.3.0: + resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} + hasBin: true + + semver@7.3.8: + resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==} + engines: {node: '>=10'} + hasBin: true + + set-blocking@2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + showdown@2.1.0: + resolution: {integrity: sha512-/6NVYu4U819R2pUIk79n67SYgJHWCce0a5xTP979WbNp0FL9MN1I1QK662IDU1b6JzKTvmhgI7T7JYIxBi3kMQ==} + hasBin: true + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + sirv-cli@1.0.14: + resolution: {integrity: sha512-yyUTNr984ANKDloqepkYbBSqvx3buwYg2sQKPWjSU+IBia5loaoka2If8N9CMwt8AfP179cdEl7kYJ//iWJHjQ==} + engines: {node: '>= 10'} + hasBin: true + + sirv@1.0.19: + resolution: {integrity: sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==} + engines: {node: '>= 10'} + + source-map-js@1.0.2: + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map-js@https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz: + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==, tarball: https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz} + version: 1.0.2 + engines: {node: '>=0.10.0'} + + source-map@0.7.4: + resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} + engines: {node: '>= 8'} + + source-map@https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==, tarball: https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz} + version: 0.6.1 + engines: {node: '>=0.10.0'} + + sourcemap-codec@1.4.8: + resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + deprecated: Please use @jridgewell/sourcemap-codec instead + + sourcemap-codec@https://registry.npmmirror.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz: + resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==, tarball: https://registry.npmmirror.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz} + version: 1.4.8 + + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + style-mod@4.1.2: + resolution: {integrity: sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==} + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + + supports-preserve-symlinks-flag@https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==, tarball: https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz} + version: 1.0.0 + engines: {node: '>= 0.4'} + + svelte@4.2.19: + resolution: {integrity: sha512-IY1rnGr6izd10B0A8LqsBfmlT5OILVuZ7XsI0vdGPEvuonFV7NYEUK4dAkm9Zg2q0Um92kYjTpS1CAP3Nh/KWw==} + engines: {node: '>=16'} + + svgo@3.3.2: + resolution: {integrity: sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==} + engines: {node: '>=14.0.0'} + hasBin: true + + tar@6.1.12: + resolution: {integrity: sha512-jU4TdemS31uABHd+Lt5WEYJuzn+TJTCBLljvIAHZOz6M9Os5pJ4dD+vRFLxPa/n3T0iEFzpi+0x1UfuDZYbRMw==} + engines: {node: '>=10'} + + three@0.166.1: + resolution: {integrity: sha512-LtuafkKHHzm61AQA1be2MAYIw1IjmhOUxhBa0prrLpEMWbV7ijvxCRHjSgHPGp2493wLBzwKV46tA9nivLEgKg==} + + tiny-emitter@2.1.0: + resolution: {integrity: sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==} + + tiny-invariant@1.3.3: + resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} + + tinydate@1.3.0: + resolution: {integrity: sha512-7cR8rLy2QhYHpsBDBVYnnWXm8uRTr38RoZakFSW7Bs7PzfMPNZthuMLkwqZv7MTu8lhQ91cOFYS5a7iFj2oR3w==} + engines: {node: '>=4'} + + tlds@1.255.0: + resolution: {integrity: sha512-tcwMRIioTcF/FcxLev8MJWxCp+GUALRhFEqbDoZrnowmKSGqPrl5pqS+Sut2m8BgJ6S4FExCSSpGffZ0Tks6Aw==} + hasBin: true + + to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + + to-fast-properties@https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==, tarball: https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz} + version: 2.0.0 + engines: {node: '>=4'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + to-regex-range@https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==, tarball: https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz} + version: 5.0.1 + engines: {node: '>=8.0'} + + totalist@1.1.0: + resolution: {integrity: sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==} + engines: {node: '>=6'} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + trouter@2.0.1: + resolution: {integrity: sha512-kr8SKKw94OI+xTGOkfsvwZQ8mWoikZDd2n8XZHjJVZUARZT+4/VV6cacRS6CLsH9bNm+HFIPU1Zx4CnNnb4qlQ==} + engines: {node: '>=6'} + + tslib@2.4.1: + resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} + + typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz: + resolution: {integrity: sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==, tarball: https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz} + version: 4.9.3 + engines: {node: '>=4.2.0'} + hasBin: true + + unicode-canonical-property-names-ecmascript@2.0.0: + resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} + engines: {node: '>=4'} + + unicode-match-property-ecmascript@2.0.0: + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} + + unicode-match-property-value-ecmascript@2.1.0: + resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} + engines: {node: '>=4'} + + unicode-property-aliases-ecmascript@2.1.0: + resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} + engines: {node: '>=4'} + + url-join@4.0.1: + resolution: {integrity: sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==} + + url-regex@5.0.0: + resolution: {integrity: sha512-O08GjTiAFNsSlrUWfqF1jH0H1W3m35ZyadHrGv5krdnmPPoxP27oDTqux/579PtaroiSGm5yma6KT1mHFH6Y/g==} + engines: {node: '>=8'} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + uuid@10.0.0: + resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} + hasBin: true + + vanilla-jsoneditor@1.0.8: + resolution: {integrity: sha512-5tKODR6J3IbGoMeBv4DEEU/Dlam4bPunOarIJKfrd5xs4bUife59Lp8Psjf86Y8OAM9mvxkrwR275XsBnvtO9A==} + + vanilla-picker@2.12.3: + resolution: {integrity: sha512-qVkT1E7yMbUsB2mmJNFmaXMWE2hF8ffqzMMwe9zdAikd8u2VfnsVY2HQcOUi2F38bgbxzlJBEdS1UUhOXdF9GQ==} + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + vite-aliases@https://registry.npmmirror.com/vite-aliases/-/vite-aliases-0.9.7.tgz: + resolution: {integrity: sha512-MiqZx5NJQDn/I7gYzovop8GzlEDYCxR3i3JCCNap5OWEfBmo4b+jIfpmal22IoBREgx1TtkmwRkHJCBUhnL6jA==, tarball: https://registry.npmmirror.com/vite-aliases/-/vite-aliases-0.9.7.tgz} + version: 0.9.7 + engines: {node: '>=16.6.0', npm: '>=7.0.0'} + + vite-plugin-dynamic-import@https://registry.npmmirror.com/vite-plugin-dynamic-import/-/vite-plugin-dynamic-import-1.2.4.tgz: + resolution: {integrity: sha512-R6spqDhDm8VxaUNyEkybh9PM262ReO8WXJ6rjtyJ/H8Y4b+pq2uM9Xz5DMu7N7OxUGlqo9HSzT3VjhpbySXrng==, tarball: https://registry.npmmirror.com/vite-plugin-dynamic-import/-/vite-plugin-dynamic-import-1.2.4.tgz} + version: 1.2.4 + + vite-plugin-externalize-deps@0.7.0: + resolution: {integrity: sha512-do2gPrR79Tm8UKcqsw3RTAtN4YO8GkVRBckWdJWINZ3Qdp3KN9S1oyUZxKszTB/iyg4zdOUweLOeBI8t86QVow==} + version: 0.7.0 + peerDependencies: + vite: ^2.0.0 || ^3.0.0 || ^4.0.0 + + vite-svg-loader@5.1.0: + resolution: {integrity: sha512-M/wqwtOEjgb956/+m5ZrYT/Iq6Hax0OakWbokj8+9PXOnB7b/4AxESHieEtnNEy7ZpjsjYW1/5nK8fATQMmRxw==} + version: 5.1.0 + peerDependencies: + vue: '>=3.2.13' + + vite@https://registry.npmmirror.com/vite/-/vite-3.2.4.tgz: + resolution: {integrity: sha512-Z2X6SRAffOUYTa+sLy3NQ7nlHFU100xwanq1WDwqaiFiCe+25zdxP1TfCS5ojPV2oDDcXudHIoPnI1Z/66B7Yw==, tarball: https://registry.npmmirror.com/vite/-/vite-3.2.4.tgz} + version: 3.2.4 + engines: {node: ^14.18.0 || >=16.0.0} + hasBin: true + peerDependencies: + '@types/node': '>= 14' + less: '*' + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + + vue-chartjs@5.3.1: + resolution: {integrity: sha512-rZjqcHBxKiHrBl0CIvcOlVEBwRhpWAVf6rDU3vUfa7HuSRmGtCslc0Oc8m16oAVuk0erzc1FCtH1VCriHsrz+A==} + version: 5.3.1 + peerDependencies: + chart.js: ^4.1.1 + vue: ^3.0.0-0 || ^2.7.0 + + vue-clipboard3@2.0.0: + resolution: {integrity: sha512-Q9S7dzWGax7LN5iiSPcu/K1GGm2gcBBlYwmMsUc5/16N6w90cbKow3FnPmPs95sungns4yvd9/+JhbAznECS2A==} + + vue-demi@0.14.10: + resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==} + version: 0.14.10 + engines: {node: '>=12'} + hasBin: true + peerDependencies: + '@vue/composition-api': ^1.0.0-rc.1 + vue: ^3.0.0-0 || ^2.6.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + + vue-i18n@9.13.1: + resolution: {integrity: sha512-mh0GIxx0wPtPlcB1q4k277y0iKgo25xmDPWioVVYanjPufDBpvu5ySTjP5wOrSvlYQ2m1xI+CFhGdauv/61uQg==} + version: 9.13.1 + engines: {node: '>= 16'} + peerDependencies: + vue: ^3.0.0 + + vue-router@4.4.0: + resolution: {integrity: sha512-HB+t2p611aIZraV2aPSRNXf0Z/oLZFrlygJm+sZbdJaW6lcFqEDQwnzUBXn+DApw+/QzDU/I9TeWx9izEjTmsA==} + version: 4.4.0 + peerDependencies: + vue: ^3.2.0 + + vue-template-compiler@https://registry.npmmirror.com/vue-template-compiler/-/vue-template-compiler-2.7.14.tgz: + resolution: {integrity: sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ==, tarball: https://registry.npmmirror.com/vue-template-compiler/-/vue-template-compiler-2.7.14.tgz} + version: 2.7.14 + + vue-tsc@https://registry.npmmirror.com/vue-tsc/-/vue-tsc-1.0.11.tgz: + resolution: {integrity: sha512-lj+6dEroPsE4wmQOPtjCzAf8x363Km5/tuEvMEoQaoRnzs9myBM46FNvCGIIPStYUGuaqF1W1bORmP2KDQEORA==, tarball: https://registry.npmmirror.com/vue-tsc/-/vue-tsc-1.0.11.tgz} + version: 1.0.11 + hasBin: true + peerDependencies: + typescript: '*' + + vue@3.5.12: + resolution: {integrity: sha512-CLVZtXtn2ItBIi/zHZ0Sg1Xkb7+PU32bJJ8Bmy7ts3jxXTcbfsEfBivFYYWz1Hur+lalqGAh65Coin0r+HRUfg==} + version: 3.5.12 + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + vuex@4.1.0: + resolution: {integrity: sha512-hmV6UerDrPcgbSy9ORAtNXDr9M4wlNP4pEFKye4ujJF8oqgFFuxDCdOLS3eNoRTtq5O3hoBDh9Doj1bQMYHRbQ==} + version: 4.1.0 + peerDependencies: + vue: ^3.2.0 + + w3c-keyname@2.2.8: + resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + wide-align@1.1.5: + resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} + + windows-release@5.0.1: + resolution: {integrity: sha512-y1xFdFvdMiDXI3xiOhMbJwt1Y7dUxidha0CWPs1NgjZIjZANTcX7+7bMqNjuezhzb8s5JGEiBAbQjQQYYy7ulw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + +snapshots: + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + + '@arr/every@1.0.1': {} + + '@babel/helper-string-parser@7.25.7': {} + + '@babel/helper-string-parser@https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz': {} + + '@babel/helper-validator-identifier@7.25.7': {} + + '@babel/helper-validator-identifier@https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz': {} + + '@babel/parser@7.25.8': + dependencies: + '@babel/types': 7.25.8 + + '@babel/parser@https://registry.npmmirror.com/@babel/parser/-/parser-7.20.5.tgz': + dependencies: + '@babel/types': https://registry.npmmirror.com/@babel/types/-/types-7.20.5.tgz + + '@babel/types@7.25.8': + dependencies: + '@babel/helper-string-parser': 7.25.7 + '@babel/helper-validator-identifier': 7.25.7 + to-fast-properties: 2.0.0 + + '@babel/types@https://registry.npmmirror.com/@babel/types/-/types-7.20.5.tgz': + dependencies: + '@babel/helper-string-parser': https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz + '@babel/helper-validator-identifier': https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz + to-fast-properties: https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz + + '@codemirror/autocomplete@6.18.1(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)(@lezer/common@1.2.3)': + dependencies: + '@codemirror/language': 6.10.3 + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.34.1 + '@lezer/common': 1.2.3 + + '@codemirror/commands@6.7.0': + dependencies: + '@codemirror/language': 6.10.3 + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.34.1 + '@lezer/common': 1.2.3 + + '@codemirror/lang-json@6.0.1': + dependencies: + '@codemirror/language': 6.10.3 + '@lezer/json': 1.0.2 + + '@codemirror/language@6.10.3': + dependencies: + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.34.1 + '@lezer/common': 1.2.3 + '@lezer/highlight': 1.2.1 + '@lezer/lr': 1.4.2 + style-mod: 4.1.2 + + '@codemirror/lint@6.8.2': + dependencies: + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.34.1 + crelt: 1.0.6 + + '@codemirror/search@6.5.6': + dependencies: + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.34.1 + crelt: 1.0.6 + + '@codemirror/state@6.4.1': {} + + '@codemirror/view@6.34.1': + dependencies: + '@codemirror/state': 6.4.1 + style-mod: 4.1.2 + w3c-keyname: 2.2.8 + + '@ctrl/tinycolor@3.4.1': {} + + '@element-plus/icons-vue@2.3.1(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz))': + dependencies: + vue: 3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz) + + '@esbuild/android-arm@0.15.16': + optional: true + + '@esbuild/linux-loong64@0.15.16': + optional: true + + '@floating-ui/core@1.6.8': + dependencies: + '@floating-ui/utils': 0.2.8 + + '@floating-ui/dom@1.6.11': + dependencies: + '@floating-ui/core': 1.6.8 + '@floating-ui/utils': 0.2.8 + + '@floating-ui/utils@0.2.8': {} + + '@fortawesome/fontawesome-common-types@6.6.0': {} + + '@fortawesome/fontawesome-svg-core@6.6.0': + dependencies: + '@fortawesome/fontawesome-common-types': 6.6.0 + + '@fortawesome/free-brands-svg-icons@6.6.0': + dependencies: + '@fortawesome/fontawesome-common-types': 6.6.0 + + '@fortawesome/free-regular-svg-icons@6.6.0': + dependencies: + '@fortawesome/fontawesome-common-types': 6.6.0 + + '@fortawesome/free-solid-svg-icons@6.6.0': + dependencies: + '@fortawesome/fontawesome-common-types': 6.6.0 + + '@fortawesome/vue-fontawesome@3.0.8(@fortawesome/fontawesome-svg-core@6.6.0)(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz))': + dependencies: + '@fortawesome/fontawesome-svg-core': 6.6.0 + vue: 3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz) + + '@intlify/core-base@9.13.1': + dependencies: + '@intlify/message-compiler': 9.13.1 + '@intlify/shared': 9.13.1 + + '@intlify/message-compiler@9.13.1': + dependencies: + '@intlify/shared': 9.13.1 + source-map-js: 1.0.2 + + '@intlify/shared@9.13.1': {} + + '@jridgewell/gen-mapping@0.3.5': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/sourcemap-codec@1.4.15': {} + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@jsep-plugin/assignment@1.2.1(jsep@1.3.9)': + dependencies: + jsep: 1.3.9 + + '@jsep-plugin/regex@1.0.3(jsep@1.3.9)': + dependencies: + jsep: 1.3.9 + + '@jsonquerylang/jsonquery@3.1.1': {} + + '@kurkle/color@0.3.2': {} + + '@lexical/clipboard@0.16.1': + dependencies: + '@lexical/html': 0.16.1 + '@lexical/list': 0.16.1 + '@lexical/selection': 0.16.1 + '@lexical/utils': 0.16.1 + lexical: 0.16.1 + + '@lexical/code@0.16.1': + dependencies: + '@lexical/utils': 0.16.1 + lexical: 0.16.1 + prismjs: 1.29.0 + + '@lexical/history@0.16.1': + dependencies: + '@lexical/utils': 0.16.1 + lexical: 0.16.1 + + '@lexical/html@0.16.1': + dependencies: + '@lexical/selection': 0.16.1 + '@lexical/utils': 0.16.1 + lexical: 0.16.1 + + '@lexical/link@0.16.1': + dependencies: + '@lexical/utils': 0.16.1 + lexical: 0.16.1 + + '@lexical/list@0.16.1': + dependencies: + '@lexical/utils': 0.16.1 + lexical: 0.16.1 + + '@lexical/markdown@0.16.1': + dependencies: + '@lexical/code': 0.16.1 + '@lexical/link': 0.16.1 + '@lexical/list': 0.16.1 + '@lexical/rich-text': 0.16.1 + '@lexical/text': 0.16.1 + '@lexical/utils': 0.16.1 + lexical: 0.16.1 + + '@lexical/rich-text@0.16.1': + dependencies: + '@lexical/clipboard': 0.16.1 + '@lexical/selection': 0.16.1 + '@lexical/utils': 0.16.1 + lexical: 0.16.1 + + '@lexical/selection@0.16.1': + dependencies: + lexical: 0.16.1 + + '@lexical/table@0.16.1': + dependencies: + '@lexical/utils': 0.16.1 + lexical: 0.16.1 + + '@lexical/text@0.16.1': + dependencies: + lexical: 0.16.1 + + '@lexical/utils@0.16.1': + dependencies: + '@lexical/list': 0.16.1 + '@lexical/selection': 0.16.1 + '@lexical/table': 0.16.1 + lexical: 0.16.1 + + '@lezer/common@1.2.3': {} + + '@lezer/highlight@1.2.1': + dependencies: + '@lezer/common': 1.2.3 + + '@lezer/json@1.0.2': + dependencies: + '@lezer/common': 1.2.3 + '@lezer/highlight': 1.2.1 + '@lezer/lr': 1.4.2 + + '@lezer/lr@1.4.2': + dependencies: + '@lezer/common': 1.2.3 + + '@mapbox/node-pre-gyp@1.0.10': + dependencies: + detect-libc: 2.0.1 + https-proxy-agent: 5.0.1 + make-dir: 3.1.0 + node-fetch: 2.6.7 + nopt: 5.0.0 + npmlog: 5.0.1 + rimraf: 3.0.2 + semver: 7.3.8 + tar: 6.1.12 + transitivePeerDependencies: + - encoding + - supports-color + optional: true + + '@nodelib/fs.scandir@https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz': + dependencies: + '@nodelib/fs.stat': https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz + run-parallel: https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz + + '@nodelib/fs.stat@https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz': {} + + '@nodelib/fs.walk@https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz': + dependencies: + '@nodelib/fs.scandir': https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz + fastq: https://registry.npmmirror.com/fastq/-/fastq-1.14.0.tgz + + '@parcel/watcher-android-arm64@2.4.1': + optional: true + + '@parcel/watcher-darwin-arm64@2.4.1': + optional: true + + '@parcel/watcher-darwin-x64@2.4.1': + optional: true + + '@parcel/watcher-freebsd-x64@2.4.1': + optional: true + + '@parcel/watcher-linux-arm-glibc@2.4.1': + optional: true + + '@parcel/watcher-linux-arm64-glibc@2.4.1': + optional: true + + '@parcel/watcher-linux-arm64-musl@2.4.1': + optional: true + + '@parcel/watcher-linux-x64-glibc@2.4.1': + optional: true + + '@parcel/watcher-linux-x64-musl@2.4.1': + optional: true + + '@parcel/watcher-win32-arm64@2.4.1': + optional: true + + '@parcel/watcher-win32-ia32@2.4.1': + optional: true + + '@parcel/watcher-win32-x64@2.4.1': + optional: true + + '@parcel/watcher@2.4.1': + dependencies: + detect-libc: 1.0.3 + is-glob: 4.0.3 + micromatch: 4.0.5 + node-addon-api: 7.1.1 + optionalDependencies: + '@parcel/watcher-android-arm64': 2.4.1 + '@parcel/watcher-darwin-arm64': 2.4.1 + '@parcel/watcher-darwin-x64': 2.4.1 + '@parcel/watcher-freebsd-x64': 2.4.1 + '@parcel/watcher-linux-arm-glibc': 2.4.1 + '@parcel/watcher-linux-arm64-glibc': 2.4.1 + '@parcel/watcher-linux-arm64-musl': 2.4.1 + '@parcel/watcher-linux-x64-glibc': 2.4.1 + '@parcel/watcher-linux-x64-musl': 2.4.1 + '@parcel/watcher-win32-arm64': 2.4.1 + '@parcel/watcher-win32-ia32': 2.4.1 + '@parcel/watcher-win32-x64': 2.4.1 + + '@polka/url@0.5.0': {} + + '@polka/url@1.0.0-next.21': {} + + '@popperjs/core@2.11.8': {} + + '@replit/codemirror-indentation-markers@6.5.3(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)': + dependencies: + '@codemirror/language': 6.10.3 + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.34.1 + + '@rollup/pluginutils@5.0.2(rollup@3.26.2)': + dependencies: + '@types/estree': 1.0.0 + estree-walker: 2.0.2 + picomatch: 2.3.1 + optionalDependencies: + rollup: 3.26.2 + + '@sphinxxxx/color-conversion@2.2.2': {} + + '@sxzz/popperjs-es@2.11.7': {} + + '@trysound/sax@0.2.0': {} + + '@tweenjs/tween.js@23.1.3': {} + + '@types/estree@1.0.0': {} + + '@types/estree@1.0.6': {} + + '@types/getos@3.0.4': {} + + '@types/humanize-duration@3.27.4': {} + + '@types/javascript-time-ago@2.0.8': {} + + '@types/lodash-es@4.17.12': + dependencies: + '@types/lodash': 4.17.10 + + '@types/lodash@4.17.10': {} + + '@types/md5@2.3.5': {} + + '@types/node@https://registry.npmmirror.com/@types/node/-/node-18.11.10.tgz': {} + + '@types/pinyin@2.10.2': {} + + '@types/showdown@2.0.6': {} + + '@types/stats.js@0.17.3': {} + + '@types/three@0.166.0': + dependencies: + '@tweenjs/tween.js': 23.1.3 + '@types/stats.js': 0.17.3 + '@types/webxr': 0.5.20 + fflate: 0.8.2 + meshoptimizer: 0.18.1 + + '@types/url-join@4.0.3': {} + + '@types/web-bluetooth@0.0.16': {} + + '@types/webxr@0.5.20': {} + + '@vitejs/plugin-vue@https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-3.2.0.tgz(vite@https://registry.npmmirror.com/vite/-/vite-3.2.4.tgz(@types/node@https://registry.npmmirror.com/@types/node/-/node-18.11.10.tgz)(sass@1.80.1))(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz))': + dependencies: + vite: https://registry.npmmirror.com/vite/-/vite-3.2.4.tgz(@types/node@https://registry.npmmirror.com/@types/node/-/node-18.11.10.tgz)(sass@1.80.1) + vue: 3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz) + + '@volar/language-core@https://registry.npmmirror.com/@volar/language-core/-/language-core-1.0.11.tgz': + dependencies: + '@volar/source-map': https://registry.npmmirror.com/@volar/source-map/-/source-map-1.0.11.tgz + '@vue/reactivity': https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.45.tgz + muggle-string: https://registry.npmmirror.com/muggle-string/-/muggle-string-0.1.0.tgz + + '@volar/source-map@https://registry.npmmirror.com/@volar/source-map/-/source-map-1.0.11.tgz': + dependencies: + muggle-string: https://registry.npmmirror.com/muggle-string/-/muggle-string-0.1.0.tgz + + '@volar/typescript@https://registry.npmmirror.com/@volar/typescript/-/typescript-1.0.11.tgz': + dependencies: + '@volar/language-core': https://registry.npmmirror.com/@volar/language-core/-/language-core-1.0.11.tgz + + '@volar/vue-language-core@https://registry.npmmirror.com/@volar/vue-language-core/-/vue-language-core-1.0.11.tgz': + dependencies: + '@volar/language-core': https://registry.npmmirror.com/@volar/language-core/-/language-core-1.0.11.tgz + '@volar/source-map': https://registry.npmmirror.com/@volar/source-map/-/source-map-1.0.11.tgz + '@vue/compiler-dom': https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.45.tgz + '@vue/compiler-sfc': https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.2.45.tgz + '@vue/reactivity': https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.45.tgz + '@vue/shared': https://registry.npmmirror.com/@vue/shared/-/shared-3.2.45.tgz + minimatch: https://registry.npmmirror.com/minimatch/-/minimatch-5.1.1.tgz + vue-template-compiler: https://registry.npmmirror.com/vue-template-compiler/-/vue-template-compiler-2.7.14.tgz + + '@volar/vue-typescript@https://registry.npmmirror.com/@volar/vue-typescript/-/vue-typescript-1.0.11.tgz': + dependencies: + '@volar/typescript': https://registry.npmmirror.com/@volar/typescript/-/typescript-1.0.11.tgz + '@volar/vue-language-core': https://registry.npmmirror.com/@volar/vue-language-core/-/vue-language-core-1.0.11.tgz + + '@vue/compiler-core@3.5.12': + dependencies: + '@babel/parser': 7.25.8 + '@vue/shared': 3.5.12 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + + '@vue/compiler-core@https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.2.45.tgz': + dependencies: + '@babel/parser': https://registry.npmmirror.com/@babel/parser/-/parser-7.20.5.tgz + '@vue/shared': https://registry.npmmirror.com/@vue/shared/-/shared-3.2.45.tgz + estree-walker: https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz + source-map: https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz + + '@vue/compiler-dom@3.5.12': + dependencies: + '@vue/compiler-core': 3.5.12 + '@vue/shared': 3.5.12 + + '@vue/compiler-dom@https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.45.tgz': + dependencies: + '@vue/compiler-core': https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.2.45.tgz + '@vue/shared': https://registry.npmmirror.com/@vue/shared/-/shared-3.2.45.tgz + + '@vue/compiler-sfc@3.5.12': + dependencies: + '@babel/parser': 7.25.8 + '@vue/compiler-core': 3.5.12 + '@vue/compiler-dom': 3.5.12 + '@vue/compiler-ssr': 3.5.12 + '@vue/shared': 3.5.12 + estree-walker: 2.0.2 + magic-string: 0.30.12 + postcss: 8.4.47 + source-map-js: 1.2.1 + + '@vue/compiler-sfc@https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.2.45.tgz': + dependencies: + '@babel/parser': https://registry.npmmirror.com/@babel/parser/-/parser-7.20.5.tgz + '@vue/compiler-core': https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.2.45.tgz + '@vue/compiler-dom': https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.45.tgz + '@vue/compiler-ssr': https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.2.45.tgz + '@vue/reactivity-transform': https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.2.45.tgz + '@vue/shared': https://registry.npmmirror.com/@vue/shared/-/shared-3.2.45.tgz + estree-walker: https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz + magic-string: https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz + postcss: https://registry.npmmirror.com/postcss/-/postcss-8.4.19.tgz + source-map: https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz + + '@vue/compiler-ssr@3.5.12': + dependencies: + '@vue/compiler-dom': 3.5.12 + '@vue/shared': 3.5.12 + + '@vue/compiler-ssr@https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.2.45.tgz': + dependencies: + '@vue/compiler-dom': https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.45.tgz + '@vue/shared': https://registry.npmmirror.com/@vue/shared/-/shared-3.2.45.tgz + + '@vue/devtools-api@6.4.5': {} + + '@vue/devtools-api@6.6.4': {} + + '@vue/reactivity-transform@https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.2.45.tgz': + dependencies: + '@babel/parser': https://registry.npmmirror.com/@babel/parser/-/parser-7.20.5.tgz + '@vue/compiler-core': https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.2.45.tgz + '@vue/shared': https://registry.npmmirror.com/@vue/shared/-/shared-3.2.45.tgz + estree-walker: https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz + magic-string: https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz + + '@vue/reactivity@3.5.12': + dependencies: + '@vue/shared': 3.5.12 + + '@vue/reactivity@https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.45.tgz': + dependencies: + '@vue/shared': https://registry.npmmirror.com/@vue/shared/-/shared-3.2.45.tgz + + '@vue/runtime-core@3.5.12': + dependencies: + '@vue/reactivity': 3.5.12 + '@vue/shared': 3.5.12 + + '@vue/runtime-dom@3.5.12': + dependencies: + '@vue/reactivity': 3.5.12 + '@vue/runtime-core': 3.5.12 + '@vue/shared': 3.5.12 + csstype: 3.1.3 + + '@vue/server-renderer@3.5.12(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz))': + dependencies: + '@vue/compiler-ssr': 3.5.12 + '@vue/shared': 3.5.12 + vue: 3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz) + + '@vue/shared@3.5.12': {} + + '@vue/shared@https://registry.npmmirror.com/@vue/shared/-/shared-3.2.45.tgz': {} + + '@vueuse/core@9.13.0(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz))': + dependencies: + '@types/web-bluetooth': 0.0.16 + '@vueuse/metadata': 9.13.0 + '@vueuse/shared': 9.13.0(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)) + vue-demi: 0.14.10(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + '@vueuse/metadata@9.13.0': {} + + '@vueuse/shared@9.13.0(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz))': + dependencies: + vue-demi: 0.14.10(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + abbrev@1.1.1: + optional: true + + accepts@1.3.8: + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + + acorn-dynamic-import@4.0.0(acorn@6.4.2): + dependencies: + acorn: 6.4.2 + + acorn-jsx@5.3.2(acorn@6.4.2): + dependencies: + acorn: 6.4.2 + + acorn@6.4.2: {} + + acorn@8.13.0: {} + + agent-base@6.0.2: + dependencies: + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + optional: true + + ajv@8.17.1: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.0.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + + ansi-regex@5.0.1: {} + + ansi-styles@3.2.1: + dependencies: + color-convert: 1.9.3 + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + anymatch@https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz: + dependencies: + normalize-path: https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz + picomatch: https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz + + aproba@2.0.0: + optional: true + + are-we-there-yet@2.0.0: + dependencies: + delegates: 1.0.0 + readable-stream: 3.6.0 + optional: true + + argparse@1.0.10: + dependencies: + sprintf-js: 1.0.3 + + aria-query@5.3.2: {} + + array-bounds@1.0.1: {} + + array-normalize@1.1.4: + dependencies: + array-bounds: 1.0.1 + + array-timsort@https://registry.npmmirror.com/array-timsort/-/array-timsort-1.0.3.tgz: {} + + async-validator@4.2.5: {} + + asynckit@0.4.0: {} + + atom-material-icons@3.0.0: + dependencies: + compression: 1.7.4 + js-yaml: 3.14.1 + polka: 0.5.2 + select-dom: 6.0.2 + sirv: 1.0.19 + sirv-cli: 1.0.14 + optionalDependencies: + lodash.template: 4.5.0 + minimist: 1.2.7 + transitivePeerDependencies: + - supports-color + + attr-accept@2.2.2: {} + + axios@1.7.7: + dependencies: + follow-redirects: 1.15.9 + form-data: 4.0.1 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + axobject-query@4.1.0: {} + + balanced-match@1.0.2: + optional: true + + balanced-match@https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz: {} + + binary-extensions@https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz: {} + + binary-search-bounds@2.0.5: {} + + boolbase@1.0.0: {} + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + optional: true + + brace-expansion@https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz: + dependencies: + balanced-match: https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz + + braces@3.0.2: + dependencies: + fill-range: 7.0.1 + + braces@https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz: + dependencies: + fill-range: https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz + + buble@0.19.8: + dependencies: + acorn: 6.4.2 + acorn-dynamic-import: 4.0.0(acorn@6.4.2) + acorn-jsx: 5.3.2(acorn@6.4.2) + chalk: 2.4.2 + magic-string: 0.25.9 + minimist: 1.2.7 + os-homedir: 2.0.0 + regexpu-core: 4.8.0 + + bubleify@1.2.1: + dependencies: + buble: 0.19.8 + + bytes@3.0.0: {} + + chalk@2.4.2: + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + + charenc@0.0.2: {} + + chart.js@4.4.5: + dependencies: + '@kurkle/color': 0.3.2 + + chartjs-adapter-date-fns@3.0.0(chart.js@4.4.5)(date-fns@4.1.0): + dependencies: + chart.js: 4.4.5 + date-fns: 4.1.0 + + chokidar@4.0.1: + dependencies: + readdirp: 4.0.2 + + chokidar@https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz: + dependencies: + anymatch: https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz + braces: https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz + glob-parent: https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz + is-binary-path: https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz + is-glob: https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz + normalize-path: https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz + readdirp: https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz + optionalDependencies: + fsevents: 2.3.2 + + chownr@2.0.0: + optional: true + + clamp@1.0.1: {} + + clipboard@2.0.11: + dependencies: + good-listener: 1.2.2 + select: 1.1.2 + tiny-emitter: 2.1.0 + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + code-red@1.0.4: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + '@types/estree': 1.0.6 + acorn: 8.13.0 + estree-walker: 3.0.3 + periscopic: 3.1.0 + + codemirror-wrapped-line-indent@1.0.8(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1): + dependencies: + '@codemirror/language': 6.10.3 + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.34.1 + + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.3: {} + + color-name@1.1.4: {} + + color-support@1.1.3: + optional: true + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + commander@1.1.1: + dependencies: + keypress: 0.1.0 + + commander@7.2.0: {} + + commander@9.5.0: {} + + comment-json@https://registry.npmmirror.com/comment-json/-/comment-json-4.2.3.tgz: + dependencies: + array-timsort: https://registry.npmmirror.com/array-timsort/-/array-timsort-1.0.3.tgz + core-util-is: https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz + esprima: https://registry.npmmirror.com/esprima/-/esprima-4.0.1.tgz + has-own-prop: https://registry.npmmirror.com/has-own-prop/-/has-own-prop-2.0.0.tgz + repeat-string: https://registry.npmmirror.com/repeat-string/-/repeat-string-1.6.1.tgz + + compressible@2.0.18: + dependencies: + mime-db: 1.52.0 + + compression@1.7.4: + dependencies: + accepts: 1.3.8 + bytes: 3.0.0 + compressible: 2.0.18 + debug: 2.6.9 + on-headers: 1.0.2 + safe-buffer: 5.1.2 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + + concat-map@0.0.1: + optional: true + + consola@https://registry.npmmirror.com/consola/-/consola-2.15.3.tgz: {} + + console-clear@1.1.1: {} + + console-control-strings@1.1.0: + optional: true + + core-js@3.38.1: {} + + core-util-is@https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz: {} + + crawlab-ui@0.7.0-rc3(dlwfpvqjxhvrevoazxvsg7egqu): + dependencies: + '@element-plus/icons-vue': 2.3.1(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)) + '@fortawesome/fontawesome-common-types': 6.6.0 + '@fortawesome/fontawesome-svg-core': 6.6.0 + '@fortawesome/free-brands-svg-icons': 6.6.0 + '@fortawesome/free-regular-svg-icons': 6.6.0 + '@fortawesome/free-solid-svg-icons': 6.6.0 + '@fortawesome/vue-fontawesome': 3.0.8(@fortawesome/fontawesome-svg-core@6.6.0)(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)) + '@lexical/code': 0.16.1 + '@lexical/history': 0.16.1 + '@lexical/html': 0.16.1 + '@lexical/link': 0.16.1 + '@lexical/list': 0.16.1 + '@lexical/markdown': 0.16.1 + '@lexical/rich-text': 0.16.1 + '@lexical/selection': 0.16.1 + '@lexical/table': 0.16.1 + '@lexical/text': 0.16.1 + '@lexical/utils': 0.16.1 + '@popperjs/core': 2.11.8 + '@types/getos': 3.0.4 + '@types/humanize-duration': 3.27.4 + '@types/javascript-time-ago': 2.0.8 + '@types/lodash': 4.17.10 + '@types/md5': 2.3.5 + '@types/pinyin': 2.10.2 + '@types/showdown': 2.0.6 + '@types/three': 0.166.0 + '@types/url-join': 4.0.3 + async-validator: 4.2.5 + atom-material-icons: 3.0.0 + axios: 1.7.7 + chart.js: 4.4.5 + chartjs-adapter-date-fns: 3.0.0(chart.js@4.4.5)(date-fns@4.1.0) + clipboard: 2.0.11 + core-js: 3.38.1 + crawlab-vue3-dropzone: 3.0.3(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)) + cron-parser: 4.9.0 + cronstrue: 2.50.0 + dayjs: 1.11.13 + element-plus: 2.8.5(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)) + font-awesome: 4.7.0 + humanize-duration: 3.32.1 + javascript-time-ago: 2.5.11 + json-editor-vue: 0.17.2(@lezer/common@1.2.3)(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)) + lexical: 0.16.1 + lodash: 4.17.21 + md5: 2.3.0 + mitt: 3.0.1 + monaco-editor: 0.50.0 + normalize.css: 8.0.1 + os-name: 5.0.1 + pinyin: 2.11.2 + point-cluster: 3.1.8 + prismjs: 1.29.0 + showdown: 2.1.0 + three: 0.166.1 + tiny-invariant: 1.3.3 + url-join: 4.0.1 + url-regex: 5.0.0 + uuid: 10.0.0 + vite-svg-loader: 5.1.0(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)) + vue: 3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz) + vue-chartjs: 5.3.1(chart.js@4.4.5)(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)) + vue-clipboard3: 2.0.0 + vue-i18n: 9.13.1(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)) + vue-router: 4.4.0(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)) + vuex: 4.1.0(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)) + transitivePeerDependencies: + - '@lezer/common' + - '@vue/composition-api' + + crawlab-vue3-dropzone@3.0.3(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)): + dependencies: + attr-accept: 2.2.2 + file-selector: 0.2.4 + vue: 3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz) + + crelt@1.0.6: {} + + cron-parser@4.9.0: + dependencies: + luxon: 3.5.0 + + cronstrue@2.50.0: {} + + cross-spawn@7.0.3: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + crypt@0.0.2: {} + + css-select@5.1.0: + dependencies: + boolbase: 1.0.0 + css-what: 6.1.0 + domhandler: 5.0.3 + domutils: 3.1.0 + nth-check: 2.1.1 + + css-tree@2.2.1: + dependencies: + mdn-data: 2.0.28 + source-map-js: 1.2.1 + + css-tree@2.3.1: + dependencies: + mdn-data: 2.0.30 + source-map-js: 1.2.1 + + css-what@6.1.0: {} + + csso@5.0.5: + dependencies: + css-tree: 2.2.1 + + csstype@3.1.3: {} + + date-fns@4.1.0: {} + + dayjs@1.11.13: {} + + de-indent@https://registry.npmmirror.com/de-indent/-/de-indent-1.0.2.tgz: {} + + debug@2.6.9: + dependencies: + ms: 2.0.0 + + debug@4.3.4: + dependencies: + ms: 2.1.2 + optional: true + + define-lazy-prop@2.0.0: {} + + defined@1.0.1: {} + + delayed-stream@1.0.0: {} + + delegate@3.2.0: {} + + delegates@1.0.0: + optional: true + + detect-libc@1.0.3: {} + + detect-libc@2.0.1: + optional: true + + diff-sequences@29.6.3: {} + + dom-serializer@2.0.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + entities: 4.5.0 + + domelementtype@2.3.0: {} + + domhandler@5.0.3: + dependencies: + domelementtype: 2.3.0 + + domutils@3.1.0: + dependencies: + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + + dtype@2.0.0: {} + + element-plus@2.8.5(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)): + dependencies: + '@ctrl/tinycolor': 3.4.1 + '@element-plus/icons-vue': 2.3.1(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)) + '@floating-ui/dom': 1.6.11 + '@popperjs/core': '@sxzz/popperjs-es@2.11.7' + '@types/lodash': 4.17.10 + '@types/lodash-es': 4.17.12 + '@vueuse/core': 9.13.0(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)) + async-validator: 4.2.5 + dayjs: 1.11.13 + escape-html: 1.0.3 + lodash: 4.17.21 + lodash-es: 4.17.21 + lodash-unified: 1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.17.21)(lodash@4.17.21) + memoize-one: 6.0.0 + normalize-wheel-es: 1.2.0 + vue: 3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz) + transitivePeerDependencies: + - '@vue/composition-api' + + emoji-regex@8.0.0: {} + + entities@4.5.0: {} + + esbuild-android-64@0.15.16: + optional: true + + esbuild-android-arm64@0.15.16: + optional: true + + esbuild-darwin-64@0.15.16: + optional: true + + esbuild-darwin-arm64@0.15.16: + optional: true + + esbuild-freebsd-64@0.15.16: + optional: true + + esbuild-freebsd-arm64@0.15.16: + optional: true + + esbuild-linux-32@0.15.16: + optional: true + + esbuild-linux-64@0.15.16: + optional: true + + esbuild-linux-arm64@0.15.16: + optional: true + + esbuild-linux-arm@0.15.16: + optional: true + + esbuild-linux-mips64le@0.15.16: + optional: true + + esbuild-linux-ppc64le@0.15.16: + optional: true + + esbuild-linux-riscv64@0.15.16: + optional: true + + esbuild-linux-s390x@0.15.16: + optional: true + + esbuild-netbsd-64@0.15.16: + optional: true + + esbuild-openbsd-64@0.15.16: + optional: true + + esbuild-sunos-64@0.15.16: + optional: true + + esbuild-windows-32@0.15.16: + optional: true + + esbuild-windows-64@0.15.16: + optional: true + + esbuild-windows-arm64@0.15.16: + optional: true + + esbuild@https://registry.npmmirror.com/esbuild/-/esbuild-0.15.16.tgz: + optionalDependencies: + '@esbuild/android-arm': 0.15.16 + '@esbuild/linux-loong64': 0.15.16 + esbuild-android-64: 0.15.16 + esbuild-android-arm64: 0.15.16 + esbuild-darwin-64: 0.15.16 + esbuild-darwin-arm64: 0.15.16 + esbuild-freebsd-64: 0.15.16 + esbuild-freebsd-arm64: 0.15.16 + esbuild-linux-32: 0.15.16 + esbuild-linux-64: 0.15.16 + esbuild-linux-arm: 0.15.16 + esbuild-linux-arm64: 0.15.16 + esbuild-linux-mips64le: 0.15.16 + esbuild-linux-ppc64le: 0.15.16 + esbuild-linux-riscv64: 0.15.16 + esbuild-linux-s390x: 0.15.16 + esbuild-netbsd-64: 0.15.16 + esbuild-openbsd-64: 0.15.16 + esbuild-sunos-64: 0.15.16 + esbuild-windows-32: 0.15.16 + esbuild-windows-64: 0.15.16 + esbuild-windows-arm64: 0.15.16 + + escalade@3.1.1: {} + + escape-html@1.0.3: {} + + escape-string-regexp@1.0.5: {} + + esprima@4.0.1: {} + + esprima@https://registry.npmmirror.com/esprima/-/esprima-4.0.1.tgz: {} + + estree-walker@2.0.2: {} + + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.0 + + estree-walker@https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz: {} + + execa@5.1.1: + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + + fast-deep-equal@3.1.3: {} + + fast-glob@https://registry.npmmirror.com/fast-glob/-/fast-glob-3.2.12.tgz: + dependencies: + '@nodelib/fs.stat': https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz + '@nodelib/fs.walk': https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz + glob-parent: https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz + merge2: https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz + micromatch: https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz + + fast-uri@3.0.3: {} + + fastq@https://registry.npmmirror.com/fastq/-/fastq-1.14.0.tgz: + dependencies: + reusify: https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz + + fflate@0.8.2: {} + + file-selector@0.2.4: + dependencies: + tslib: 2.4.1 + + fill-range@7.0.1: + dependencies: + to-regex-range: 5.0.1 + + fill-range@https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz: + dependencies: + to-regex-range: https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz + + flatten-vertex-data@1.0.2: + dependencies: + dtype: 2.0.0 + + follow-redirects@1.15.9: {} + + font-awesome@4.7.0: {} + + form-data@4.0.1: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + + fs-minipass@2.1.0: + dependencies: + minipass: 3.3.6 + optional: true + + fs.realpath@1.0.0: + optional: true + + fsevents@2.3.2: + optional: true + + function-bind@https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz: {} + + gauge@3.0.2: + dependencies: + aproba: 2.0.0 + color-support: 1.1.3 + console-control-strings: 1.1.0 + has-unicode: 2.0.1 + object-assign: 4.1.1 + signal-exit: 3.0.7 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wide-align: 1.1.5 + optional: true + + get-caller-file@2.0.5: {} + + get-port@3.2.0: {} + + get-stream@6.0.1: {} + + glob-parent@https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz: + dependencies: + is-glob: https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz + + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + optional: true + + good-listener@1.2.2: + dependencies: + delegate: 3.2.0 + + has-flag@3.0.0: {} + + has-own-prop@https://registry.npmmirror.com/has-own-prop/-/has-own-prop-2.0.0.tgz: {} + + has-unicode@2.0.1: + optional: true + + has@https://registry.npmmirror.com/has/-/has-1.0.3.tgz: + dependencies: + function-bind: https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz + + he@https://registry.npmmirror.com/he/-/he-1.2.0.tgz: {} + + https-proxy-agent@5.0.1: + dependencies: + agent-base: 6.0.2 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + optional: true + + human-signals@2.1.0: {} + + humanize-duration@3.32.1: {} + + immutable-json-patch@6.0.1: {} + + immutable@4.3.7: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + optional: true + + inherits@2.0.4: + optional: true + + ip-regex@4.3.0: {} + + is-binary-path@https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz: + dependencies: + binary-extensions: https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz + + is-buffer@1.1.6: {} + + is-core-module@https://registry.npmmirror.com/is-core-module/-/is-core-module-2.11.0.tgz: + dependencies: + has: https://registry.npmmirror.com/has/-/has-1.0.3.tgz + + is-docker@2.2.1: {} + + is-extglob@2.1.1: {} + + is-extglob@https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz: {} + + is-fullwidth-code-point@3.0.0: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-glob@https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz: + dependencies: + is-extglob: https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz + + is-number@7.0.0: {} + + is-number@https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz: {} + + is-obj@1.0.1: {} + + is-reference@3.0.1: + dependencies: + '@types/estree': 1.0.0 + + is-stream@2.0.1: {} + + is-wsl@2.2.0: + dependencies: + is-docker: 2.2.1 + + isexe@2.0.0: {} + + javascript-time-ago@2.5.11: + dependencies: + relative-time-format: 1.1.6 + + jmespath@0.16.0: {} + + js-yaml@3.14.1: + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + + jsep@1.3.9: {} + + jsesc@0.5.0: {} + + json-editor-vue@0.17.2(@lezer/common@1.2.3)(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)): + dependencies: + vanilla-jsoneditor: 1.0.8(@lezer/common@1.2.3) + vue: 3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz) + vue-demi: 0.14.10(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)) + transitivePeerDependencies: + - '@lezer/common' + + json-schema-traverse@1.0.0: {} + + json-source-map@0.6.1: {} + + jsonpath-plus@10.0.1: + dependencies: + '@jsep-plugin/assignment': 1.2.1(jsep@1.3.9) + '@jsep-plugin/regex': 1.0.3(jsep@1.3.9) + jsep: 1.3.9 + + jsonrepair@3.8.1: {} + + keypress@0.1.0: {} + + kleur@3.0.3: {} + + lexical@0.16.1: {} + + local-access@1.1.0: {} + + locate-character@3.0.0: {} + + lodash-es@4.17.21: {} + + lodash-unified@1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.17.21)(lodash@4.17.21): + dependencies: + '@types/lodash-es': 4.17.12 + lodash: 4.17.21 + lodash-es: 4.17.21 + + lodash._reinterpolate@3.0.0: + optional: true + + lodash.template@4.5.0: + dependencies: + lodash._reinterpolate: 3.0.0 + lodash.templatesettings: 4.2.0 + optional: true + + lodash.templatesettings@4.2.0: + dependencies: + lodash._reinterpolate: 3.0.0 + optional: true + + lodash@4.17.21: {} + + lru-cache@6.0.0: + dependencies: + yallist: 4.0.0 + optional: true + + luxon@3.5.0: {} + + macos-release@3.1.0: {} + + magic-string@0.25.9: + dependencies: + sourcemap-codec: 1.4.8 + + magic-string@0.30.1: + dependencies: + '@jridgewell/sourcemap-codec': 1.4.15 + + magic-string@0.30.12: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + + magic-string@https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz: + dependencies: + sourcemap-codec: https://registry.npmmirror.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz + + make-dir@3.1.0: + dependencies: + semver: 6.3.0 + optional: true + + matchit@1.1.0: + dependencies: + '@arr/every': 1.0.1 + + math-log2@1.0.1: {} + + md5@2.3.0: + dependencies: + charenc: 0.0.2 + crypt: 0.0.2 + is-buffer: 1.1.6 + + mdn-data@2.0.28: {} + + mdn-data@2.0.30: {} + + memoize-one@6.0.0: {} + + merge-stream@2.0.0: {} + + merge2@https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz: {} + + meshoptimizer@0.18.1: {} + + micromatch@4.0.5: + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + + micromatch@https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz: + dependencies: + braces: https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz + picomatch: https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mimic-fn@2.1.0: {} + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + optional: true + + minimatch@https://registry.npmmirror.com/minimatch/-/minimatch-5.1.1.tgz: + dependencies: + brace-expansion: https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz + + minimist@1.2.7: {} + + minipass@3.3.6: + dependencies: + yallist: 4.0.0 + optional: true + + minizlib@2.1.2: + dependencies: + minipass: 3.3.6 + yallist: 4.0.0 + optional: true + + mitt@3.0.1: {} + + mkdirp@1.0.4: + optional: true + + monaco-editor@0.50.0: {} + + mri@1.2.0: {} + + mrmime@1.0.1: {} + + ms@2.0.0: {} + + ms@2.1.2: + optional: true + + muggle-string@https://registry.npmmirror.com/muggle-string/-/muggle-string-0.1.0.tgz: {} + + nanoid@3.3.7: {} + + nanoid@https://registry.npmmirror.com/nanoid/-/nanoid-3.3.4.tgz: {} + + natural-compare-lite@1.4.0: {} + + negotiator@0.6.3: {} + + node-addon-api@3.2.1: + optional: true + + node-addon-api@7.1.1: {} + + node-fetch@2.6.7: + dependencies: + whatwg-url: 5.0.0 + optional: true + + nodejieba@2.5.2: + dependencies: + '@mapbox/node-pre-gyp': 1.0.10 + node-addon-api: 3.2.1 + transitivePeerDependencies: + - encoding + - supports-color + optional: true + + nopt@5.0.0: + dependencies: + abbrev: 1.1.1 + optional: true + + normalize-path@https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz: {} + + normalize-wheel-es@1.2.0: {} + + normalize.css@8.0.1: {} + + npm-run-path@4.0.1: + dependencies: + path-key: 3.1.1 + + npmlog@5.0.1: + dependencies: + are-we-there-yet: 2.0.0 + console-control-strings: 1.1.0 + gauge: 3.0.2 + set-blocking: 2.0.0 + optional: true + + nth-check@2.1.1: + dependencies: + boolbase: 1.0.0 + + object-assign@4.1.1: {} + + on-headers@1.0.2: {} + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + optional: true + + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + + open@8.4.2: + dependencies: + define-lazy-prop: 2.0.0 + is-docker: 2.2.1 + is-wsl: 2.2.0 + + os-homedir@2.0.0: {} + + os-name@5.0.1: + dependencies: + macos-release: 3.1.0 + windows-release: 5.0.1 + + parse-rect@1.2.0: + dependencies: + pick-by-alias: 1.2.0 + + path-is-absolute@1.0.1: + optional: true + + path-key@3.1.1: {} + + path-parse@https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz: {} + + periscopic@3.1.0: + dependencies: + '@types/estree': 1.0.6 + estree-walker: 3.0.3 + is-reference: 3.0.1 + + pick-by-alias@1.2.0: {} + + picocolors@1.1.1: {} + + picocolors@https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz: {} + + picomatch@2.3.1: {} + + picomatch@https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz: {} + + pinyin@2.11.2: + dependencies: + commander: 1.1.1 + object-assign: 4.1.1 + optionalDependencies: + nodejieba: 2.5.2 + transitivePeerDependencies: + - encoding + - supports-color + + point-cluster@3.1.8: + dependencies: + array-bounds: 1.0.1 + array-normalize: 1.1.4 + binary-search-bounds: 2.0.5 + bubleify: 1.2.1 + clamp: 1.0.1 + defined: 1.0.1 + dtype: 2.0.0 + flatten-vertex-data: 1.0.2 + is-obj: 1.0.1 + math-log2: 1.0.1 + parse-rect: 1.2.0 + pick-by-alias: 1.2.0 + + polka@0.5.2: + dependencies: + '@polka/url': 0.5.0 + trouter: 2.0.1 + + postcss@8.4.47: + dependencies: + nanoid: 3.3.7 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + postcss@https://registry.npmmirror.com/postcss/-/postcss-8.4.19.tgz: + dependencies: + nanoid: https://registry.npmmirror.com/nanoid/-/nanoid-3.3.4.tgz + picocolors: https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz + source-map-js: https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz + + prismjs@1.29.0: {} + + proxy-from-env@1.1.0: {} + + queue-microtask@https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz: {} + + readable-stream@3.6.0: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + optional: true + + readdirp@4.0.2: {} + + readdirp@https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz: + dependencies: + picomatch: https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz + + regenerate-unicode-properties@9.0.0: + dependencies: + regenerate: 1.4.2 + + regenerate@1.4.2: {} + + regexpu-core@4.8.0: + dependencies: + regenerate: 1.4.2 + regenerate-unicode-properties: 9.0.0 + regjsgen: 0.5.2 + regjsparser: 0.7.0 + unicode-match-property-ecmascript: 2.0.0 + unicode-match-property-value-ecmascript: 2.1.0 + + regjsgen@0.5.2: {} + + regjsparser@0.7.0: + dependencies: + jsesc: 0.5.0 + + relative-time-format@1.1.6: {} + + repeat-string@https://registry.npmmirror.com/repeat-string/-/repeat-string-1.6.1.tgz: {} + + require-directory@2.1.1: {} + + require-from-string@2.0.2: {} + + resolve@https://registry.npmmirror.com/resolve/-/resolve-1.22.1.tgz: + dependencies: + is-core-module: https://registry.npmmirror.com/is-core-module/-/is-core-module-2.11.0.tgz + path-parse: https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz + supports-preserve-symlinks-flag: https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz + + reusify@https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz: {} + + rimraf@3.0.2: + dependencies: + glob: 7.2.3 + optional: true + + rollup-plugin-external-globals@0.8.0(rollup@3.26.2): + dependencies: + '@rollup/pluginutils': 5.0.2(rollup@3.26.2) + estree-walker: 3.0.3 + is-reference: 3.0.1 + magic-string: 0.30.1 + rollup: 3.26.2 + + rollup-plugin-visualizer@5.9.2(rollup@3.26.2): + dependencies: + open: 8.4.2 + picomatch: 2.3.1 + source-map: 0.7.4 + yargs: 17.7.2 + optionalDependencies: + rollup: 3.26.2 + + rollup@3.26.2: + optionalDependencies: + fsevents: 2.3.2 + + rollup@https://registry.npmmirror.com/rollup/-/rollup-2.79.1.tgz: + optionalDependencies: + fsevents: 2.3.2 + + run-parallel@https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz: + dependencies: + queue-microtask: https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz + + sade@1.8.1: + dependencies: + mri: 1.2.0 + + safe-buffer@5.1.2: {} + + safe-buffer@5.2.1: + optional: true + + sass@1.80.1: + dependencies: + '@parcel/watcher': 2.4.1 + chokidar: 4.0.1 + immutable: 4.3.7 + source-map-js: 1.2.1 + + select-dom@6.0.2: {} + + select@1.1.2: {} + + semiver@1.1.0: {} + + semver@6.3.0: + optional: true + + semver@7.3.8: + dependencies: + lru-cache: 6.0.0 + optional: true + + set-blocking@2.0.0: + optional: true + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + showdown@2.1.0: + dependencies: + commander: 9.5.0 + + signal-exit@3.0.7: {} + + sirv-cli@1.0.14: + dependencies: + console-clear: 1.1.1 + get-port: 3.2.0 + kleur: 3.0.3 + local-access: 1.1.0 + sade: 1.8.1 + semiver: 1.1.0 + sirv: 1.0.19 + tinydate: 1.3.0 + + sirv@1.0.19: + dependencies: + '@polka/url': 1.0.0-next.21 + mrmime: 1.0.1 + totalist: 1.1.0 + + source-map-js@1.0.2: {} + + source-map-js@1.2.1: {} + + source-map-js@https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz: {} + + source-map@0.7.4: {} + + source-map@https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz: {} + + sourcemap-codec@1.4.8: {} + + sourcemap-codec@https://registry.npmmirror.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz: {} + + sprintf-js@1.0.3: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + optional: true + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-final-newline@2.0.0: {} + + style-mod@4.1.2: {} + + supports-color@5.5.0: + dependencies: + has-flag: 3.0.0 + + supports-preserve-symlinks-flag@https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz: {} + + svelte@4.2.19: + dependencies: + '@ampproject/remapping': 2.3.0 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + '@types/estree': 1.0.6 + acorn: 8.13.0 + aria-query: 5.3.2 + axobject-query: 4.1.0 + code-red: 1.0.4 + css-tree: 2.3.1 + estree-walker: 3.0.3 + is-reference: 3.0.1 + locate-character: 3.0.0 + magic-string: 0.30.12 + periscopic: 3.1.0 + + svgo@3.3.2: + dependencies: + '@trysound/sax': 0.2.0 + commander: 7.2.0 + css-select: 5.1.0 + css-tree: 2.3.1 + css-what: 6.1.0 + csso: 5.0.5 + picocolors: 1.1.1 + + tar@6.1.12: + dependencies: + chownr: 2.0.0 + fs-minipass: 2.1.0 + minipass: 3.3.6 + minizlib: 2.1.2 + mkdirp: 1.0.4 + yallist: 4.0.0 + optional: true + + three@0.166.1: {} + + tiny-emitter@2.1.0: {} + + tiny-invariant@1.3.3: {} + + tinydate@1.3.0: {} + + tlds@1.255.0: {} + + to-fast-properties@2.0.0: {} + + to-fast-properties@https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + to-regex-range@https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz: + dependencies: + is-number: https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz + + totalist@1.1.0: {} + + tr46@0.0.3: + optional: true + + trouter@2.0.1: + dependencies: + matchit: 1.1.0 + + tslib@2.4.1: {} + + typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz: {} + + unicode-canonical-property-names-ecmascript@2.0.0: {} + + unicode-match-property-ecmascript@2.0.0: + dependencies: + unicode-canonical-property-names-ecmascript: 2.0.0 + unicode-property-aliases-ecmascript: 2.1.0 + + unicode-match-property-value-ecmascript@2.1.0: {} + + unicode-property-aliases-ecmascript@2.1.0: {} + + url-join@4.0.1: {} + + url-regex@5.0.0: + dependencies: + ip-regex: 4.3.0 + tlds: 1.255.0 + + util-deprecate@1.0.2: + optional: true + + uuid@10.0.0: {} + + vanilla-jsoneditor@1.0.8(@lezer/common@1.2.3): + dependencies: + '@codemirror/autocomplete': 6.18.1(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)(@lezer/common@1.2.3) + '@codemirror/commands': 6.7.0 + '@codemirror/lang-json': 6.0.1 + '@codemirror/language': 6.10.3 + '@codemirror/lint': 6.8.2 + '@codemirror/search': 6.5.6 + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.34.1 + '@fortawesome/free-regular-svg-icons': 6.6.0 + '@fortawesome/free-solid-svg-icons': 6.6.0 + '@jsonquerylang/jsonquery': 3.1.1 + '@lezer/highlight': 1.2.1 + '@replit/codemirror-indentation-markers': 6.5.3(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1) + ajv: 8.17.1 + codemirror-wrapped-line-indent: 1.0.8(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1) + diff-sequences: 29.6.3 + immutable-json-patch: 6.0.1 + jmespath: 0.16.0 + json-source-map: 0.6.1 + jsonpath-plus: 10.0.1 + jsonrepair: 3.8.1 + lodash-es: 4.17.21 + memoize-one: 6.0.0 + natural-compare-lite: 1.4.0 + sass: 1.80.1 + svelte: 4.2.19 + vanilla-picker: 2.12.3 + transitivePeerDependencies: + - '@lezer/common' + + vanilla-picker@2.12.3: + dependencies: + '@sphinxxxx/color-conversion': 2.2.2 + + vary@1.1.2: {} + + vite-aliases@https://registry.npmmirror.com/vite-aliases/-/vite-aliases-0.9.7.tgz(@types/node@https://registry.npmmirror.com/@types/node/-/node-18.11.10.tgz)(sass@1.80.1): + dependencies: + chokidar: https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz + comment-json: https://registry.npmmirror.com/comment-json/-/comment-json-4.2.3.tgz + consola: https://registry.npmmirror.com/consola/-/consola-2.15.3.tgz + fast-glob: https://registry.npmmirror.com/fast-glob/-/fast-glob-3.2.12.tgz + vite: https://registry.npmmirror.com/vite/-/vite-3.2.4.tgz(@types/node@https://registry.npmmirror.com/@types/node/-/node-18.11.10.tgz)(sass@1.80.1) + transitivePeerDependencies: + - '@types/node' + - less + - sass + - stylus + - sugarss + - terser + + vite-plugin-dynamic-import@https://registry.npmmirror.com/vite-plugin-dynamic-import/-/vite-plugin-dynamic-import-1.2.4.tgz: + dependencies: + fast-glob: https://registry.npmmirror.com/fast-glob/-/fast-glob-3.2.12.tgz + + vite-plugin-externalize-deps@0.7.0(vite@https://registry.npmmirror.com/vite/-/vite-3.2.4.tgz(@types/node@https://registry.npmmirror.com/@types/node/-/node-18.11.10.tgz)(sass@1.80.1)): + dependencies: + vite: https://registry.npmmirror.com/vite/-/vite-3.2.4.tgz(@types/node@https://registry.npmmirror.com/@types/node/-/node-18.11.10.tgz)(sass@1.80.1) + + vite-svg-loader@5.1.0(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)): + dependencies: + svgo: 3.3.2 + vue: 3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz) + + vite@https://registry.npmmirror.com/vite/-/vite-3.2.4.tgz(@types/node@https://registry.npmmirror.com/@types/node/-/node-18.11.10.tgz)(sass@1.80.1): + dependencies: + esbuild: https://registry.npmmirror.com/esbuild/-/esbuild-0.15.16.tgz + postcss: https://registry.npmmirror.com/postcss/-/postcss-8.4.19.tgz + resolve: https://registry.npmmirror.com/resolve/-/resolve-1.22.1.tgz + rollup: https://registry.npmmirror.com/rollup/-/rollup-2.79.1.tgz + optionalDependencies: + '@types/node': https://registry.npmmirror.com/@types/node/-/node-18.11.10.tgz + fsevents: 2.3.2 + sass: 1.80.1 + + vue-chartjs@5.3.1(chart.js@4.4.5)(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)): + dependencies: + chart.js: 4.4.5 + vue: 3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz) + + vue-clipboard3@2.0.0: + dependencies: + clipboard: 2.0.11 + + vue-demi@0.14.10(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)): + dependencies: + vue: 3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz) + + vue-i18n@9.13.1(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)): + dependencies: + '@intlify/core-base': 9.13.1 + '@intlify/shared': 9.13.1 + '@vue/devtools-api': 6.6.4 + vue: 3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz) + + vue-router@4.4.0(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)): + dependencies: + '@vue/devtools-api': 6.6.4 + vue: 3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz) + + vue-template-compiler@https://registry.npmmirror.com/vue-template-compiler/-/vue-template-compiler-2.7.14.tgz: + dependencies: + de-indent: https://registry.npmmirror.com/de-indent/-/de-indent-1.0.2.tgz + he: https://registry.npmmirror.com/he/-/he-1.2.0.tgz + + vue-tsc@https://registry.npmmirror.com/vue-tsc/-/vue-tsc-1.0.11.tgz(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz): + dependencies: + '@volar/vue-language-core': https://registry.npmmirror.com/@volar/vue-language-core/-/vue-language-core-1.0.11.tgz + '@volar/vue-typescript': https://registry.npmmirror.com/@volar/vue-typescript/-/vue-typescript-1.0.11.tgz + typescript: https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz + + vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz): + dependencies: + '@vue/compiler-dom': 3.5.12 + '@vue/compiler-sfc': 3.5.12 + '@vue/runtime-dom': 3.5.12 + '@vue/server-renderer': 3.5.12(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)) + '@vue/shared': 3.5.12 + optionalDependencies: + typescript: https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz + + vuex@4.1.0(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)): + dependencies: + '@vue/devtools-api': 6.4.5 + vue: 3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz) + + w3c-keyname@2.2.8: {} + + webidl-conversions@3.0.1: + optional: true + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + optional: true + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + wide-align@1.1.5: + dependencies: + string-width: 4.2.3 + optional: true + + windows-release@5.0.1: + dependencies: + execa: 5.1.1 + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrappy@1.0.2: + optional: true + + y18n@5.0.8: {} + + yallist@4.0.0: + optional: true + + yargs-parser@21.1.1: {} + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.1.1 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 diff --git a/frontend/apps/crawlab/public/three/three.min.js b/frontend/apps/crawlab/public/three/three.min.js new file mode 100644 index 000000000..b71995ee1 --- /dev/null +++ b/frontend/apps/crawlab/public/three/three.min.js @@ -0,0 +1,26564 @@ +/** + * @license + * Copyright 2010-2021 Three.js Authors + * SPDX-License-Identifier: MIT + */ +!(function (t, e) { + 'object' == typeof exports && 'undefined' != typeof module + ? e(exports) + : 'function' == typeof define && define.amd + ? define(['exports'], e) + : e( + ((t = + 'undefined' != typeof globalThis ? globalThis : t || self).THREE = + {}) + ); +})(this, function (t) { + 'use strict'; + const e = '128', + n = 100, + i = 300, + r = 301, + s = 302, + a = 303, + o = 304, + l = 306, + c = 307, + h = 1e3, + u = 1001, + d = 1002, + p = 1003, + m = 1004, + f = 1005, + g = 1006, + v = 1007, + y = 1008, + x = 1009, + _ = 1012, + w = 1014, + b = 1015, + M = 1016, + S = 1020, + T = 1022, + E = 1023, + A = 1026, + L = 1027, + R = 33776, + C = 33777, + P = 33778, + D = 33779, + I = 35840, + N = 35841, + B = 35842, + z = 35843, + F = 37492, + O = 37496, + H = 2300, + G = 2301, + U = 2302, + k = 2400, + V = 2401, + W = 2402, + j = 2500, + q = 2501, + X = 3e3, + Y = 3001, + Z = 3007, + J = 3002, + Q = 3004, + K = 3005, + $ = 3006, + tt = 7680, + et = 35044, + nt = 35048, + it = '300 es'; + class rt { + addEventListener(t, e) { + void 0 === this._listeners && (this._listeners = {}); + const n = this._listeners; + void 0 === n[t] && (n[t] = []), -1 === n[t].indexOf(e) && n[t].push(e); + } + hasEventListener(t, e) { + if (void 0 === this._listeners) return !1; + const n = this._listeners; + return void 0 !== n[t] && -1 !== n[t].indexOf(e); + } + removeEventListener(t, e) { + if (void 0 === this._listeners) return; + const n = this._listeners[t]; + if (void 0 !== n) { + const t = n.indexOf(e); + -1 !== t && n.splice(t, 1); + } + } + dispatchEvent(t) { + if (void 0 === this._listeners) return; + const e = this._listeners[t.type]; + if (void 0 !== e) { + t.target = this; + const n = e.slice(0); + for (let e = 0, i = n.length; e < i; e++) n[e].call(this, t); + t.target = null; + } + } + } + const st = []; + for (let t = 0; t < 256; t++) st[t] = (t < 16 ? '0' : '') + t.toString(16); + let at = 1234567; + const ot = Math.PI / 180, + lt = 180 / Math.PI; + function ct() { + const t = (4294967295 * Math.random()) | 0, + e = (4294967295 * Math.random()) | 0, + n = (4294967295 * Math.random()) | 0, + i = (4294967295 * Math.random()) | 0; + return ( + st[255 & t] + + st[(t >> 8) & 255] + + st[(t >> 16) & 255] + + st[(t >> 24) & 255] + + '-' + + st[255 & e] + + st[(e >> 8) & 255] + + '-' + + st[((e >> 16) & 15) | 64] + + st[(e >> 24) & 255] + + '-' + + st[(63 & n) | 128] + + st[(n >> 8) & 255] + + '-' + + st[(n >> 16) & 255] + + st[(n >> 24) & 255] + + st[255 & i] + + st[(i >> 8) & 255] + + st[(i >> 16) & 255] + + st[(i >> 24) & 255] + ).toUpperCase(); + } + function ht(t, e, n) { + return Math.max(e, Math.min(n, t)); + } + function ut(t, e) { + return ((t % e) + e) % e; + } + function dt(t, e, n) { + return (1 - n) * t + n * e; + } + function pt(t) { + return 0 == (t & (t - 1)) && 0 !== t; + } + function mt(t) { + return Math.pow(2, Math.ceil(Math.log(t) / Math.LN2)); + } + function ft(t) { + return Math.pow(2, Math.floor(Math.log(t) / Math.LN2)); + } + var gt = Object.freeze({ + __proto__: null, + DEG2RAD: ot, + RAD2DEG: lt, + generateUUID: ct, + clamp: ht, + euclideanModulo: ut, + mapLinear: function (t, e, n, i, r) { + return i + ((t - e) * (r - i)) / (n - e); + }, + inverseLerp: function (t, e, n) { + return t !== e ? (n - t) / (e - t) : 0; + }, + lerp: dt, + damp: function (t, e, n, i) { + return dt(t, e, 1 - Math.exp(-n * i)); + }, + pingpong: function (t, e = 1) { + return e - Math.abs(ut(t, 2 * e) - e); + }, + smoothstep: function (t, e, n) { + return t <= e + ? 0 + : t >= n + ? 1 + : (t = (t - e) / (n - e)) * t * (3 - 2 * t); + }, + smootherstep: function (t, e, n) { + return t <= e + ? 0 + : t >= n + ? 1 + : (t = (t - e) / (n - e)) * t * t * (t * (6 * t - 15) + 10); + }, + randInt: function (t, e) { + return t + Math.floor(Math.random() * (e - t + 1)); + }, + randFloat: function (t, e) { + return t + Math.random() * (e - t); + }, + randFloatSpread: function (t) { + return t * (0.5 - Math.random()); + }, + seededRandom: function (t) { + return ( + void 0 !== t && (at = t % 2147483647), + (at = (16807 * at) % 2147483647), + (at - 1) / 2147483646 + ); + }, + degToRad: function (t) { + return t * ot; + }, + radToDeg: function (t) { + return t * lt; + }, + isPowerOfTwo: pt, + ceilPowerOfTwo: mt, + floorPowerOfTwo: ft, + setQuaternionFromProperEuler: function (t, e, n, i, r) { + const s = Math.cos, + a = Math.sin, + o = s(n / 2), + l = a(n / 2), + c = s((e + i) / 2), + h = a((e + i) / 2), + u = s((e - i) / 2), + d = a((e - i) / 2), + p = s((i - e) / 2), + m = a((i - e) / 2); + switch (r) { + case 'XYX': + t.set(o * h, l * u, l * d, o * c); + break; + case 'YZY': + t.set(l * d, o * h, l * u, o * c); + break; + case 'ZXZ': + t.set(l * u, l * d, o * h, o * c); + break; + case 'XZX': + t.set(o * h, l * m, l * p, o * c); + break; + case 'YXY': + t.set(l * p, o * h, l * m, o * c); + break; + case 'ZYZ': + t.set(l * m, l * p, o * h, o * c); + break; + default: + console.warn( + 'THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: ' + + r + ); + } + }, + }); + class vt { + constructor(t = 0, e = 0) { + (this.x = t), (this.y = e); + } + get width() { + return this.x; + } + set width(t) { + this.x = t; + } + get height() { + return this.y; + } + set height(t) { + this.y = t; + } + set(t, e) { + return (this.x = t), (this.y = e), this; + } + setScalar(t) { + return (this.x = t), (this.y = t), this; + } + setX(t) { + return (this.x = t), this; + } + setY(t) { + return (this.y = t), this; + } + setComponent(t, e) { + switch (t) { + case 0: + this.x = e; + break; + case 1: + this.y = e; + break; + default: + throw new Error('index is out of range: ' + t); + } + return this; + } + getComponent(t) { + switch (t) { + case 0: + return this.x; + case 1: + return this.y; + default: + throw new Error('index is out of range: ' + t); + } + } + clone() { + return new this.constructor(this.x, this.y); + } + copy(t) { + return (this.x = t.x), (this.y = t.y), this; + } + add(t, e) { + return void 0 !== e + ? (console.warn( + 'THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' + ), + this.addVectors(t, e)) + : ((this.x += t.x), (this.y += t.y), this); + } + addScalar(t) { + return (this.x += t), (this.y += t), this; + } + addVectors(t, e) { + return (this.x = t.x + e.x), (this.y = t.y + e.y), this; + } + addScaledVector(t, e) { + return (this.x += t.x * e), (this.y += t.y * e), this; + } + sub(t, e) { + return void 0 !== e + ? (console.warn( + 'THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' + ), + this.subVectors(t, e)) + : ((this.x -= t.x), (this.y -= t.y), this); + } + subScalar(t) { + return (this.x -= t), (this.y -= t), this; + } + subVectors(t, e) { + return (this.x = t.x - e.x), (this.y = t.y - e.y), this; + } + multiply(t) { + return (this.x *= t.x), (this.y *= t.y), this; + } + multiplyScalar(t) { + return (this.x *= t), (this.y *= t), this; + } + divide(t) { + return (this.x /= t.x), (this.y /= t.y), this; + } + divideScalar(t) { + return this.multiplyScalar(1 / t); + } + applyMatrix3(t) { + const e = this.x, + n = this.y, + i = t.elements; + return ( + (this.x = i[0] * e + i[3] * n + i[6]), + (this.y = i[1] * e + i[4] * n + i[7]), + this + ); + } + min(t) { + return ( + (this.x = Math.min(this.x, t.x)), (this.y = Math.min(this.y, t.y)), this + ); + } + max(t) { + return ( + (this.x = Math.max(this.x, t.x)), (this.y = Math.max(this.y, t.y)), this + ); + } + clamp(t, e) { + return ( + (this.x = Math.max(t.x, Math.min(e.x, this.x))), + (this.y = Math.max(t.y, Math.min(e.y, this.y))), + this + ); + } + clampScalar(t, e) { + return ( + (this.x = Math.max(t, Math.min(e, this.x))), + (this.y = Math.max(t, Math.min(e, this.y))), + this + ); + } + clampLength(t, e) { + const n = this.length(); + return this.divideScalar(n || 1).multiplyScalar( + Math.max(t, Math.min(e, n)) + ); + } + floor() { + return (this.x = Math.floor(this.x)), (this.y = Math.floor(this.y)), this; + } + ceil() { + return (this.x = Math.ceil(this.x)), (this.y = Math.ceil(this.y)), this; + } + round() { + return (this.x = Math.round(this.x)), (this.y = Math.round(this.y)), this; + } + roundToZero() { + return ( + (this.x = this.x < 0 ? Math.ceil(this.x) : Math.floor(this.x)), + (this.y = this.y < 0 ? Math.ceil(this.y) : Math.floor(this.y)), + this + ); + } + negate() { + return (this.x = -this.x), (this.y = -this.y), this; + } + dot(t) { + return this.x * t.x + this.y * t.y; + } + cross(t) { + return this.x * t.y - this.y * t.x; + } + lengthSq() { + return this.x * this.x + this.y * this.y; + } + length() { + return Math.sqrt(this.x * this.x + this.y * this.y); + } + manhattanLength() { + return Math.abs(this.x) + Math.abs(this.y); + } + normalize() { + return this.divideScalar(this.length() || 1); + } + angle() { + return Math.atan2(-this.y, -this.x) + Math.PI; + } + distanceTo(t) { + return Math.sqrt(this.distanceToSquared(t)); + } + distanceToSquared(t) { + const e = this.x - t.x, + n = this.y - t.y; + return e * e + n * n; + } + manhattanDistanceTo(t) { + return Math.abs(this.x - t.x) + Math.abs(this.y - t.y); + } + setLength(t) { + return this.normalize().multiplyScalar(t); + } + lerp(t, e) { + return ( + (this.x += (t.x - this.x) * e), (this.y += (t.y - this.y) * e), this + ); + } + lerpVectors(t, e, n) { + return ( + (this.x = t.x + (e.x - t.x) * n), (this.y = t.y + (e.y - t.y) * n), this + ); + } + equals(t) { + return t.x === this.x && t.y === this.y; + } + fromArray(t, e = 0) { + return (this.x = t[e]), (this.y = t[e + 1]), this; + } + toArray(t = [], e = 0) { + return (t[e] = this.x), (t[e + 1] = this.y), t; + } + fromBufferAttribute(t, e, n) { + return ( + void 0 !== n && + console.warn( + 'THREE.Vector2: offset has been removed from .fromBufferAttribute().' + ), + (this.x = t.getX(e)), + (this.y = t.getY(e)), + this + ); + } + rotateAround(t, e) { + const n = Math.cos(e), + i = Math.sin(e), + r = this.x - t.x, + s = this.y - t.y; + return ( + (this.x = r * n - s * i + t.x), (this.y = r * i + s * n + t.y), this + ); + } + random() { + return (this.x = Math.random()), (this.y = Math.random()), this; + } + } + vt.prototype.isVector2 = !0; + class yt { + constructor() { + (this.elements = [1, 0, 0, 0, 1, 0, 0, 0, 1]), + arguments.length > 0 && + console.error( + 'THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.' + ); + } + set(t, e, n, i, r, s, a, o, l) { + const c = this.elements; + return ( + (c[0] = t), + (c[1] = i), + (c[2] = a), + (c[3] = e), + (c[4] = r), + (c[5] = o), + (c[6] = n), + (c[7] = s), + (c[8] = l), + this + ); + } + identity() { + return this.set(1, 0, 0, 0, 1, 0, 0, 0, 1), this; + } + copy(t) { + const e = this.elements, + n = t.elements; + return ( + (e[0] = n[0]), + (e[1] = n[1]), + (e[2] = n[2]), + (e[3] = n[3]), + (e[4] = n[4]), + (e[5] = n[5]), + (e[6] = n[6]), + (e[7] = n[7]), + (e[8] = n[8]), + this + ); + } + extractBasis(t, e, n) { + return ( + t.setFromMatrix3Column(this, 0), + e.setFromMatrix3Column(this, 1), + n.setFromMatrix3Column(this, 2), + this + ); + } + setFromMatrix4(t) { + const e = t.elements; + return ( + this.set(e[0], e[4], e[8], e[1], e[5], e[9], e[2], e[6], e[10]), this + ); + } + multiply(t) { + return this.multiplyMatrices(this, t); + } + premultiply(t) { + return this.multiplyMatrices(t, this); + } + multiplyMatrices(t, e) { + const n = t.elements, + i = e.elements, + r = this.elements, + s = n[0], + a = n[3], + o = n[6], + l = n[1], + c = n[4], + h = n[7], + u = n[2], + d = n[5], + p = n[8], + m = i[0], + f = i[3], + g = i[6], + v = i[1], + y = i[4], + x = i[7], + _ = i[2], + w = i[5], + b = i[8]; + return ( + (r[0] = s * m + a * v + o * _), + (r[3] = s * f + a * y + o * w), + (r[6] = s * g + a * x + o * b), + (r[1] = l * m + c * v + h * _), + (r[4] = l * f + c * y + h * w), + (r[7] = l * g + c * x + h * b), + (r[2] = u * m + d * v + p * _), + (r[5] = u * f + d * y + p * w), + (r[8] = u * g + d * x + p * b), + this + ); + } + multiplyScalar(t) { + const e = this.elements; + return ( + (e[0] *= t), + (e[3] *= t), + (e[6] *= t), + (e[1] *= t), + (e[4] *= t), + (e[7] *= t), + (e[2] *= t), + (e[5] *= t), + (e[8] *= t), + this + ); + } + determinant() { + const t = this.elements, + e = t[0], + n = t[1], + i = t[2], + r = t[3], + s = t[4], + a = t[5], + o = t[6], + l = t[7], + c = t[8]; + return ( + e * s * c - e * a * l - n * r * c + n * a * o + i * r * l - i * s * o + ); + } + invert() { + const t = this.elements, + e = t[0], + n = t[1], + i = t[2], + r = t[3], + s = t[4], + a = t[5], + o = t[6], + l = t[7], + c = t[8], + h = c * s - a * l, + u = a * o - c * r, + d = l * r - s * o, + p = e * h + n * u + i * d; + if (0 === p) return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0); + const m = 1 / p; + return ( + (t[0] = h * m), + (t[1] = (i * l - c * n) * m), + (t[2] = (a * n - i * s) * m), + (t[3] = u * m), + (t[4] = (c * e - i * o) * m), + (t[5] = (i * r - a * e) * m), + (t[6] = d * m), + (t[7] = (n * o - l * e) * m), + (t[8] = (s * e - n * r) * m), + this + ); + } + transpose() { + let t; + const e = this.elements; + return ( + (t = e[1]), + (e[1] = e[3]), + (e[3] = t), + (t = e[2]), + (e[2] = e[6]), + (e[6] = t), + (t = e[5]), + (e[5] = e[7]), + (e[7] = t), + this + ); + } + getNormalMatrix(t) { + return this.setFromMatrix4(t).invert().transpose(); + } + transposeIntoArray(t) { + const e = this.elements; + return ( + (t[0] = e[0]), + (t[1] = e[3]), + (t[2] = e[6]), + (t[3] = e[1]), + (t[4] = e[4]), + (t[5] = e[7]), + (t[6] = e[2]), + (t[7] = e[5]), + (t[8] = e[8]), + this + ); + } + setUvTransform(t, e, n, i, r, s, a) { + const o = Math.cos(r), + l = Math.sin(r); + return ( + this.set( + n * o, + n * l, + -n * (o * s + l * a) + s + t, + -i * l, + i * o, + -i * (-l * s + o * a) + a + e, + 0, + 0, + 1 + ), + this + ); + } + scale(t, e) { + const n = this.elements; + return ( + (n[0] *= t), + (n[3] *= t), + (n[6] *= t), + (n[1] *= e), + (n[4] *= e), + (n[7] *= e), + this + ); + } + rotate(t) { + const e = Math.cos(t), + n = Math.sin(t), + i = this.elements, + r = i[0], + s = i[3], + a = i[6], + o = i[1], + l = i[4], + c = i[7]; + return ( + (i[0] = e * r + n * o), + (i[3] = e * s + n * l), + (i[6] = e * a + n * c), + (i[1] = -n * r + e * o), + (i[4] = -n * s + e * l), + (i[7] = -n * a + e * c), + this + ); + } + translate(t, e) { + const n = this.elements; + return ( + (n[0] += t * n[2]), + (n[3] += t * n[5]), + (n[6] += t * n[8]), + (n[1] += e * n[2]), + (n[4] += e * n[5]), + (n[7] += e * n[8]), + this + ); + } + equals(t) { + const e = this.elements, + n = t.elements; + for (let t = 0; t < 9; t++) if (e[t] !== n[t]) return !1; + return !0; + } + fromArray(t, e = 0) { + for (let n = 0; n < 9; n++) this.elements[n] = t[n + e]; + return this; + } + toArray(t = [], e = 0) { + const n = this.elements; + return ( + (t[e] = n[0]), + (t[e + 1] = n[1]), + (t[e + 2] = n[2]), + (t[e + 3] = n[3]), + (t[e + 4] = n[4]), + (t[e + 5] = n[5]), + (t[e + 6] = n[6]), + (t[e + 7] = n[7]), + (t[e + 8] = n[8]), + t + ); + } + clone() { + return new this.constructor().fromArray(this.elements); + } + } + let xt; + yt.prototype.isMatrix3 = !0; + class _t { + static getDataURL(t) { + if (/^data:/i.test(t.src)) return t.src; + if ('undefined' == typeof HTMLCanvasElement) return t.src; + let e; + if (t instanceof HTMLCanvasElement) e = t; + else { + void 0 === xt && + (xt = document.createElementNS( + 'http://www.w3.org/1999/xhtml', + 'canvas' + )), + (xt.width = t.width), + (xt.height = t.height); + const n = xt.getContext('2d'); + t instanceof ImageData + ? n.putImageData(t, 0, 0) + : n.drawImage(t, 0, 0, t.width, t.height), + (e = xt); + } + return e.width > 2048 || e.height > 2048 + ? (console.warn( + 'THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons', + t + ), + e.toDataURL('image/jpeg', 0.6)) + : e.toDataURL('image/png'); + } + } + let wt = 0; + class bt extends rt { + constructor( + t = bt.DEFAULT_IMAGE, + e = bt.DEFAULT_MAPPING, + n = 1001, + i = 1001, + r = 1006, + s = 1008, + a = 1023, + o = 1009, + l = 1, + c = 3e3 + ) { + super(), + Object.defineProperty(this, 'id', { value: wt++ }), + (this.uuid = ct()), + (this.name = ''), + (this.image = t), + (this.mipmaps = []), + (this.mapping = e), + (this.wrapS = n), + (this.wrapT = i), + (this.magFilter = r), + (this.minFilter = s), + (this.anisotropy = l), + (this.format = a), + (this.internalFormat = null), + (this.type = o), + (this.offset = new vt(0, 0)), + (this.repeat = new vt(1, 1)), + (this.center = new vt(0, 0)), + (this.rotation = 0), + (this.matrixAutoUpdate = !0), + (this.matrix = new yt()), + (this.generateMipmaps = !0), + (this.premultiplyAlpha = !1), + (this.flipY = !0), + (this.unpackAlignment = 4), + (this.encoding = c), + (this.version = 0), + (this.onUpdate = null); + } + updateMatrix() { + this.matrix.setUvTransform( + this.offset.x, + this.offset.y, + this.repeat.x, + this.repeat.y, + this.rotation, + this.center.x, + this.center.y + ); + } + clone() { + return new this.constructor().copy(this); + } + copy(t) { + return ( + (this.name = t.name), + (this.image = t.image), + (this.mipmaps = t.mipmaps.slice(0)), + (this.mapping = t.mapping), + (this.wrapS = t.wrapS), + (this.wrapT = t.wrapT), + (this.magFilter = t.magFilter), + (this.minFilter = t.minFilter), + (this.anisotropy = t.anisotropy), + (this.format = t.format), + (this.internalFormat = t.internalFormat), + (this.type = t.type), + this.offset.copy(t.offset), + this.repeat.copy(t.repeat), + this.center.copy(t.center), + (this.rotation = t.rotation), + (this.matrixAutoUpdate = t.matrixAutoUpdate), + this.matrix.copy(t.matrix), + (this.generateMipmaps = t.generateMipmaps), + (this.premultiplyAlpha = t.premultiplyAlpha), + (this.flipY = t.flipY), + (this.unpackAlignment = t.unpackAlignment), + (this.encoding = t.encoding), + this + ); + } + toJSON(t) { + const e = void 0 === t || 'string' == typeof t; + if (!e && void 0 !== t.textures[this.uuid]) return t.textures[this.uuid]; + const n = { + metadata: { + version: 4.5, + type: 'Texture', + generator: 'Texture.toJSON', + }, + uuid: this.uuid, + name: this.name, + mapping: this.mapping, + repeat: [this.repeat.x, this.repeat.y], + offset: [this.offset.x, this.offset.y], + center: [this.center.x, this.center.y], + rotation: this.rotation, + wrap: [this.wrapS, this.wrapT], + format: this.format, + type: this.type, + encoding: this.encoding, + minFilter: this.minFilter, + magFilter: this.magFilter, + anisotropy: this.anisotropy, + flipY: this.flipY, + premultiplyAlpha: this.premultiplyAlpha, + unpackAlignment: this.unpackAlignment, + }; + if (void 0 !== this.image) { + const i = this.image; + if ( + (void 0 === i.uuid && (i.uuid = ct()), + !e && void 0 === t.images[i.uuid]) + ) { + let e; + if (Array.isArray(i)) { + e = []; + for (let t = 0, n = i.length; t < n; t++) + i[t].isDataTexture ? e.push(Mt(i[t].image)) : e.push(Mt(i[t])); + } else e = Mt(i); + t.images[i.uuid] = { uuid: i.uuid, url: e }; + } + n.image = i.uuid; + } + return e || (t.textures[this.uuid] = n), n; + } + dispose() { + this.dispatchEvent({ type: 'dispose' }); + } + transformUv(t) { + if (this.mapping !== i) return t; + if ((t.applyMatrix3(this.matrix), t.x < 0 || t.x > 1)) + switch (this.wrapS) { + case h: + t.x = t.x - Math.floor(t.x); + break; + case u: + t.x = t.x < 0 ? 0 : 1; + break; + case d: + 1 === Math.abs(Math.floor(t.x) % 2) + ? (t.x = Math.ceil(t.x) - t.x) + : (t.x = t.x - Math.floor(t.x)); + } + if (t.y < 0 || t.y > 1) + switch (this.wrapT) { + case h: + t.y = t.y - Math.floor(t.y); + break; + case u: + t.y = t.y < 0 ? 0 : 1; + break; + case d: + 1 === Math.abs(Math.floor(t.y) % 2) + ? (t.y = Math.ceil(t.y) - t.y) + : (t.y = t.y - Math.floor(t.y)); + } + return this.flipY && (t.y = 1 - t.y), t; + } + set needsUpdate(t) { + !0 === t && this.version++; + } + } + function Mt(t) { + return ('undefined' != typeof HTMLImageElement && + t instanceof HTMLImageElement) || + ('undefined' != typeof HTMLCanvasElement && + t instanceof HTMLCanvasElement) || + ('undefined' != typeof ImageBitmap && t instanceof ImageBitmap) + ? _t.getDataURL(t) + : t.data + ? { + data: Array.prototype.slice.call(t.data), + width: t.width, + height: t.height, + type: t.data.constructor.name, + } + : (console.warn('THREE.Texture: Unable to serialize Texture.'), {}); + } + (bt.DEFAULT_IMAGE = void 0), + (bt.DEFAULT_MAPPING = i), + (bt.prototype.isTexture = !0); + class St { + constructor(t = 0, e = 0, n = 0, i = 1) { + (this.x = t), (this.y = e), (this.z = n), (this.w = i); + } + get width() { + return this.z; + } + set width(t) { + this.z = t; + } + get height() { + return this.w; + } + set height(t) { + this.w = t; + } + set(t, e, n, i) { + return (this.x = t), (this.y = e), (this.z = n), (this.w = i), this; + } + setScalar(t) { + return (this.x = t), (this.y = t), (this.z = t), (this.w = t), this; + } + setX(t) { + return (this.x = t), this; + } + setY(t) { + return (this.y = t), this; + } + setZ(t) { + return (this.z = t), this; + } + setW(t) { + return (this.w = t), this; + } + setComponent(t, e) { + switch (t) { + case 0: + this.x = e; + break; + case 1: + this.y = e; + break; + case 2: + this.z = e; + break; + case 3: + this.w = e; + break; + default: + throw new Error('index is out of range: ' + t); + } + return this; + } + getComponent(t) { + switch (t) { + case 0: + return this.x; + case 1: + return this.y; + case 2: + return this.z; + case 3: + return this.w; + default: + throw new Error('index is out of range: ' + t); + } + } + clone() { + return new this.constructor(this.x, this.y, this.z, this.w); + } + copy(t) { + return ( + (this.x = t.x), + (this.y = t.y), + (this.z = t.z), + (this.w = void 0 !== t.w ? t.w : 1), + this + ); + } + add(t, e) { + return void 0 !== e + ? (console.warn( + 'THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' + ), + this.addVectors(t, e)) + : ((this.x += t.x), + (this.y += t.y), + (this.z += t.z), + (this.w += t.w), + this); + } + addScalar(t) { + return (this.x += t), (this.y += t), (this.z += t), (this.w += t), this; + } + addVectors(t, e) { + return ( + (this.x = t.x + e.x), + (this.y = t.y + e.y), + (this.z = t.z + e.z), + (this.w = t.w + e.w), + this + ); + } + addScaledVector(t, e) { + return ( + (this.x += t.x * e), + (this.y += t.y * e), + (this.z += t.z * e), + (this.w += t.w * e), + this + ); + } + sub(t, e) { + return void 0 !== e + ? (console.warn( + 'THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' + ), + this.subVectors(t, e)) + : ((this.x -= t.x), + (this.y -= t.y), + (this.z -= t.z), + (this.w -= t.w), + this); + } + subScalar(t) { + return (this.x -= t), (this.y -= t), (this.z -= t), (this.w -= t), this; + } + subVectors(t, e) { + return ( + (this.x = t.x - e.x), + (this.y = t.y - e.y), + (this.z = t.z - e.z), + (this.w = t.w - e.w), + this + ); + } + multiply(t) { + return ( + (this.x *= t.x), (this.y *= t.y), (this.z *= t.z), (this.w *= t.w), this + ); + } + multiplyScalar(t) { + return (this.x *= t), (this.y *= t), (this.z *= t), (this.w *= t), this; + } + applyMatrix4(t) { + const e = this.x, + n = this.y, + i = this.z, + r = this.w, + s = t.elements; + return ( + (this.x = s[0] * e + s[4] * n + s[8] * i + s[12] * r), + (this.y = s[1] * e + s[5] * n + s[9] * i + s[13] * r), + (this.z = s[2] * e + s[6] * n + s[10] * i + s[14] * r), + (this.w = s[3] * e + s[7] * n + s[11] * i + s[15] * r), + this + ); + } + divideScalar(t) { + return this.multiplyScalar(1 / t); + } + setAxisAngleFromQuaternion(t) { + this.w = 2 * Math.acos(t.w); + const e = Math.sqrt(1 - t.w * t.w); + return ( + e < 1e-4 + ? ((this.x = 1), (this.y = 0), (this.z = 0)) + : ((this.x = t.x / e), (this.y = t.y / e), (this.z = t.z / e)), + this + ); + } + setAxisAngleFromRotationMatrix(t) { + let e, n, i, r; + const s = 0.01, + a = 0.1, + o = t.elements, + l = o[0], + c = o[4], + h = o[8], + u = o[1], + d = o[5], + p = o[9], + m = o[2], + f = o[6], + g = o[10]; + if (Math.abs(c - u) < s && Math.abs(h - m) < s && Math.abs(p - f) < s) { + if ( + Math.abs(c + u) < a && + Math.abs(h + m) < a && + Math.abs(p + f) < a && + Math.abs(l + d + g - 3) < a + ) + return this.set(1, 0, 0, 0), this; + e = Math.PI; + const t = (l + 1) / 2, + o = (d + 1) / 2, + v = (g + 1) / 2, + y = (c + u) / 4, + x = (h + m) / 4, + _ = (p + f) / 4; + return ( + t > o && t > v + ? t < s + ? ((n = 0), (i = 0.707106781), (r = 0.707106781)) + : ((n = Math.sqrt(t)), (i = y / n), (r = x / n)) + : o > v + ? o < s + ? ((n = 0.707106781), (i = 0), (r = 0.707106781)) + : ((i = Math.sqrt(o)), (n = y / i), (r = _ / i)) + : v < s + ? ((n = 0.707106781), (i = 0.707106781), (r = 0)) + : ((r = Math.sqrt(v)), (n = x / r), (i = _ / r)), + this.set(n, i, r, e), + this + ); + } + let v = Math.sqrt( + (f - p) * (f - p) + (h - m) * (h - m) + (u - c) * (u - c) + ); + return ( + Math.abs(v) < 0.001 && (v = 1), + (this.x = (f - p) / v), + (this.y = (h - m) / v), + (this.z = (u - c) / v), + (this.w = Math.acos((l + d + g - 1) / 2)), + this + ); + } + min(t) { + return ( + (this.x = Math.min(this.x, t.x)), + (this.y = Math.min(this.y, t.y)), + (this.z = Math.min(this.z, t.z)), + (this.w = Math.min(this.w, t.w)), + this + ); + } + max(t) { + return ( + (this.x = Math.max(this.x, t.x)), + (this.y = Math.max(this.y, t.y)), + (this.z = Math.max(this.z, t.z)), + (this.w = Math.max(this.w, t.w)), + this + ); + } + clamp(t, e) { + return ( + (this.x = Math.max(t.x, Math.min(e.x, this.x))), + (this.y = Math.max(t.y, Math.min(e.y, this.y))), + (this.z = Math.max(t.z, Math.min(e.z, this.z))), + (this.w = Math.max(t.w, Math.min(e.w, this.w))), + this + ); + } + clampScalar(t, e) { + return ( + (this.x = Math.max(t, Math.min(e, this.x))), + (this.y = Math.max(t, Math.min(e, this.y))), + (this.z = Math.max(t, Math.min(e, this.z))), + (this.w = Math.max(t, Math.min(e, this.w))), + this + ); + } + clampLength(t, e) { + const n = this.length(); + return this.divideScalar(n || 1).multiplyScalar( + Math.max(t, Math.min(e, n)) + ); + } + floor() { + return ( + (this.x = Math.floor(this.x)), + (this.y = Math.floor(this.y)), + (this.z = Math.floor(this.z)), + (this.w = Math.floor(this.w)), + this + ); + } + ceil() { + return ( + (this.x = Math.ceil(this.x)), + (this.y = Math.ceil(this.y)), + (this.z = Math.ceil(this.z)), + (this.w = Math.ceil(this.w)), + this + ); + } + round() { + return ( + (this.x = Math.round(this.x)), + (this.y = Math.round(this.y)), + (this.z = Math.round(this.z)), + (this.w = Math.round(this.w)), + this + ); + } + roundToZero() { + return ( + (this.x = this.x < 0 ? Math.ceil(this.x) : Math.floor(this.x)), + (this.y = this.y < 0 ? Math.ceil(this.y) : Math.floor(this.y)), + (this.z = this.z < 0 ? Math.ceil(this.z) : Math.floor(this.z)), + (this.w = this.w < 0 ? Math.ceil(this.w) : Math.floor(this.w)), + this + ); + } + negate() { + return ( + (this.x = -this.x), + (this.y = -this.y), + (this.z = -this.z), + (this.w = -this.w), + this + ); + } + dot(t) { + return this.x * t.x + this.y * t.y + this.z * t.z + this.w * t.w; + } + lengthSq() { + return ( + this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w + ); + } + length() { + return Math.sqrt( + this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w + ); + } + manhattanLength() { + return ( + Math.abs(this.x) + + Math.abs(this.y) + + Math.abs(this.z) + + Math.abs(this.w) + ); + } + normalize() { + return this.divideScalar(this.length() || 1); + } + setLength(t) { + return this.normalize().multiplyScalar(t); + } + lerp(t, e) { + return ( + (this.x += (t.x - this.x) * e), + (this.y += (t.y - this.y) * e), + (this.z += (t.z - this.z) * e), + (this.w += (t.w - this.w) * e), + this + ); + } + lerpVectors(t, e, n) { + return ( + (this.x = t.x + (e.x - t.x) * n), + (this.y = t.y + (e.y - t.y) * n), + (this.z = t.z + (e.z - t.z) * n), + (this.w = t.w + (e.w - t.w) * n), + this + ); + } + equals(t) { + return ( + t.x === this.x && t.y === this.y && t.z === this.z && t.w === this.w + ); + } + fromArray(t, e = 0) { + return ( + (this.x = t[e]), + (this.y = t[e + 1]), + (this.z = t[e + 2]), + (this.w = t[e + 3]), + this + ); + } + toArray(t = [], e = 0) { + return ( + (t[e] = this.x), + (t[e + 1] = this.y), + (t[e + 2] = this.z), + (t[e + 3] = this.w), + t + ); + } + fromBufferAttribute(t, e, n) { + return ( + void 0 !== n && + console.warn( + 'THREE.Vector4: offset has been removed from .fromBufferAttribute().' + ), + (this.x = t.getX(e)), + (this.y = t.getY(e)), + (this.z = t.getZ(e)), + (this.w = t.getW(e)), + this + ); + } + random() { + return ( + (this.x = Math.random()), + (this.y = Math.random()), + (this.z = Math.random()), + (this.w = Math.random()), + this + ); + } + } + St.prototype.isVector4 = !0; + class Tt extends rt { + constructor(t, e, n) { + super(), + (this.width = t), + (this.height = e), + (this.depth = 1), + (this.scissor = new St(0, 0, t, e)), + (this.scissorTest = !1), + (this.viewport = new St(0, 0, t, e)), + (n = n || {}), + (this.texture = new bt( + void 0, + n.mapping, + n.wrapS, + n.wrapT, + n.magFilter, + n.minFilter, + n.format, + n.type, + n.anisotropy, + n.encoding + )), + (this.texture.image = {}), + (this.texture.image.width = t), + (this.texture.image.height = e), + (this.texture.image.depth = 1), + (this.texture.generateMipmaps = + void 0 !== n.generateMipmaps && n.generateMipmaps), + (this.texture.minFilter = void 0 !== n.minFilter ? n.minFilter : g), + (this.depthBuffer = void 0 === n.depthBuffer || n.depthBuffer), + (this.stencilBuffer = void 0 !== n.stencilBuffer && n.stencilBuffer), + (this.depthTexture = void 0 !== n.depthTexture ? n.depthTexture : null); + } + setTexture(t) { + (t.image = { width: this.width, height: this.height, depth: this.depth }), + (this.texture = t); + } + setSize(t, e, n = 1) { + (this.width === t && this.height === e && this.depth === n) || + ((this.width = t), + (this.height = e), + (this.depth = n), + (this.texture.image.width = t), + (this.texture.image.height = e), + (this.texture.image.depth = n), + this.dispose()), + this.viewport.set(0, 0, t, e), + this.scissor.set(0, 0, t, e); + } + clone() { + return new this.constructor().copy(this); + } + copy(t) { + return ( + (this.width = t.width), + (this.height = t.height), + (this.depth = t.depth), + this.viewport.copy(t.viewport), + (this.texture = t.texture.clone()), + (this.depthBuffer = t.depthBuffer), + (this.stencilBuffer = t.stencilBuffer), + (this.depthTexture = t.depthTexture), + this + ); + } + dispose() { + this.dispatchEvent({ type: 'dispose' }); + } + } + Tt.prototype.isWebGLRenderTarget = !0; + class Et extends Tt { + constructor(t, e, n) { + super(t, e, n), (this.samples = 4); + } + copy(t) { + return super.copy.call(this, t), (this.samples = t.samples), this; + } + } + Et.prototype.isWebGLMultisampleRenderTarget = !0; + class At { + constructor(t = 0, e = 0, n = 0, i = 1) { + (this._x = t), (this._y = e), (this._z = n), (this._w = i); + } + static slerp(t, e, n, i) { + return ( + console.warn( + 'THREE.Quaternion: Static .slerp() has been deprecated. Use qm.slerpQuaternions( qa, qb, t ) instead.' + ), + n.slerpQuaternions(t, e, i) + ); + } + static slerpFlat(t, e, n, i, r, s, a) { + let o = n[i + 0], + l = n[i + 1], + c = n[i + 2], + h = n[i + 3]; + const u = r[s + 0], + d = r[s + 1], + p = r[s + 2], + m = r[s + 3]; + if (0 === a) + return ( + (t[e + 0] = o), (t[e + 1] = l), (t[e + 2] = c), void (t[e + 3] = h) + ); + if (1 === a) + return ( + (t[e + 0] = u), (t[e + 1] = d), (t[e + 2] = p), void (t[e + 3] = m) + ); + if (h !== m || o !== u || l !== d || c !== p) { + let t = 1 - a; + const e = o * u + l * d + c * p + h * m, + n = e >= 0 ? 1 : -1, + i = 1 - e * e; + if (i > Number.EPSILON) { + const r = Math.sqrt(i), + s = Math.atan2(r, e * n); + (t = Math.sin(t * s) / r), (a = Math.sin(a * s) / r); + } + const r = a * n; + if ( + ((o = o * t + u * r), + (l = l * t + d * r), + (c = c * t + p * r), + (h = h * t + m * r), + t === 1 - a) + ) { + const t = 1 / Math.sqrt(o * o + l * l + c * c + h * h); + (o *= t), (l *= t), (c *= t), (h *= t); + } + } + (t[e] = o), (t[e + 1] = l), (t[e + 2] = c), (t[e + 3] = h); + } + static multiplyQuaternionsFlat(t, e, n, i, r, s) { + const a = n[i], + o = n[i + 1], + l = n[i + 2], + c = n[i + 3], + h = r[s], + u = r[s + 1], + d = r[s + 2], + p = r[s + 3]; + return ( + (t[e] = a * p + c * h + o * d - l * u), + (t[e + 1] = o * p + c * u + l * h - a * d), + (t[e + 2] = l * p + c * d + a * u - o * h), + (t[e + 3] = c * p - a * h - o * u - l * d), + t + ); + } + get x() { + return this._x; + } + set x(t) { + (this._x = t), this._onChangeCallback(); + } + get y() { + return this._y; + } + set y(t) { + (this._y = t), this._onChangeCallback(); + } + get z() { + return this._z; + } + set z(t) { + (this._z = t), this._onChangeCallback(); + } + get w() { + return this._w; + } + set w(t) { + (this._w = t), this._onChangeCallback(); + } + set(t, e, n, i) { + return ( + (this._x = t), + (this._y = e), + (this._z = n), + (this._w = i), + this._onChangeCallback(), + this + ); + } + clone() { + return new this.constructor(this._x, this._y, this._z, this._w); + } + copy(t) { + return ( + (this._x = t.x), + (this._y = t.y), + (this._z = t.z), + (this._w = t.w), + this._onChangeCallback(), + this + ); + } + setFromEuler(t, e) { + if (!t || !t.isEuler) + throw new Error( + 'THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.' + ); + const n = t._x, + i = t._y, + r = t._z, + s = t._order, + a = Math.cos, + o = Math.sin, + l = a(n / 2), + c = a(i / 2), + h = a(r / 2), + u = o(n / 2), + d = o(i / 2), + p = o(r / 2); + switch (s) { + case 'XYZ': + (this._x = u * c * h + l * d * p), + (this._y = l * d * h - u * c * p), + (this._z = l * c * p + u * d * h), + (this._w = l * c * h - u * d * p); + break; + case 'YXZ': + (this._x = u * c * h + l * d * p), + (this._y = l * d * h - u * c * p), + (this._z = l * c * p - u * d * h), + (this._w = l * c * h + u * d * p); + break; + case 'ZXY': + (this._x = u * c * h - l * d * p), + (this._y = l * d * h + u * c * p), + (this._z = l * c * p + u * d * h), + (this._w = l * c * h - u * d * p); + break; + case 'ZYX': + (this._x = u * c * h - l * d * p), + (this._y = l * d * h + u * c * p), + (this._z = l * c * p - u * d * h), + (this._w = l * c * h + u * d * p); + break; + case 'YZX': + (this._x = u * c * h + l * d * p), + (this._y = l * d * h + u * c * p), + (this._z = l * c * p - u * d * h), + (this._w = l * c * h - u * d * p); + break; + case 'XZY': + (this._x = u * c * h - l * d * p), + (this._y = l * d * h - u * c * p), + (this._z = l * c * p + u * d * h), + (this._w = l * c * h + u * d * p); + break; + default: + console.warn( + 'THREE.Quaternion: .setFromEuler() encountered an unknown order: ' + + s + ); + } + return !1 !== e && this._onChangeCallback(), this; + } + setFromAxisAngle(t, e) { + const n = e / 2, + i = Math.sin(n); + return ( + (this._x = t.x * i), + (this._y = t.y * i), + (this._z = t.z * i), + (this._w = Math.cos(n)), + this._onChangeCallback(), + this + ); + } + setFromRotationMatrix(t) { + const e = t.elements, + n = e[0], + i = e[4], + r = e[8], + s = e[1], + a = e[5], + o = e[9], + l = e[2], + c = e[6], + h = e[10], + u = n + a + h; + if (u > 0) { + const t = 0.5 / Math.sqrt(u + 1); + (this._w = 0.25 / t), + (this._x = (c - o) * t), + (this._y = (r - l) * t), + (this._z = (s - i) * t); + } else if (n > a && n > h) { + const t = 2 * Math.sqrt(1 + n - a - h); + (this._w = (c - o) / t), + (this._x = 0.25 * t), + (this._y = (i + s) / t), + (this._z = (r + l) / t); + } else if (a > h) { + const t = 2 * Math.sqrt(1 + a - n - h); + (this._w = (r - l) / t), + (this._x = (i + s) / t), + (this._y = 0.25 * t), + (this._z = (o + c) / t); + } else { + const t = 2 * Math.sqrt(1 + h - n - a); + (this._w = (s - i) / t), + (this._x = (r + l) / t), + (this._y = (o + c) / t), + (this._z = 0.25 * t); + } + return this._onChangeCallback(), this; + } + setFromUnitVectors(t, e) { + let n = t.dot(e) + 1; + return ( + n < Number.EPSILON + ? ((n = 0), + Math.abs(t.x) > Math.abs(t.z) + ? ((this._x = -t.y), + (this._y = t.x), + (this._z = 0), + (this._w = n)) + : ((this._x = 0), + (this._y = -t.z), + (this._z = t.y), + (this._w = n))) + : ((this._x = t.y * e.z - t.z * e.y), + (this._y = t.z * e.x - t.x * e.z), + (this._z = t.x * e.y - t.y * e.x), + (this._w = n)), + this.normalize() + ); + } + angleTo(t) { + return 2 * Math.acos(Math.abs(ht(this.dot(t), -1, 1))); + } + rotateTowards(t, e) { + const n = this.angleTo(t); + if (0 === n) return this; + const i = Math.min(1, e / n); + return this.slerp(t, i), this; + } + identity() { + return this.set(0, 0, 0, 1); + } + invert() { + return this.conjugate(); + } + conjugate() { + return ( + (this._x *= -1), + (this._y *= -1), + (this._z *= -1), + this._onChangeCallback(), + this + ); + } + dot(t) { + return this._x * t._x + this._y * t._y + this._z * t._z + this._w * t._w; + } + lengthSq() { + return ( + this._x * this._x + + this._y * this._y + + this._z * this._z + + this._w * this._w + ); + } + length() { + return Math.sqrt( + this._x * this._x + + this._y * this._y + + this._z * this._z + + this._w * this._w + ); + } + normalize() { + let t = this.length(); + return ( + 0 === t + ? ((this._x = 0), (this._y = 0), (this._z = 0), (this._w = 1)) + : ((t = 1 / t), + (this._x = this._x * t), + (this._y = this._y * t), + (this._z = this._z * t), + (this._w = this._w * t)), + this._onChangeCallback(), + this + ); + } + multiply(t, e) { + return void 0 !== e + ? (console.warn( + 'THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead.' + ), + this.multiplyQuaternions(t, e)) + : this.multiplyQuaternions(this, t); + } + premultiply(t) { + return this.multiplyQuaternions(t, this); + } + multiplyQuaternions(t, e) { + const n = t._x, + i = t._y, + r = t._z, + s = t._w, + a = e._x, + o = e._y, + l = e._z, + c = e._w; + return ( + (this._x = n * c + s * a + i * l - r * o), + (this._y = i * c + s * o + r * a - n * l), + (this._z = r * c + s * l + n * o - i * a), + (this._w = s * c - n * a - i * o - r * l), + this._onChangeCallback(), + this + ); + } + slerp(t, e) { + if (0 === e) return this; + if (1 === e) return this.copy(t); + const n = this._x, + i = this._y, + r = this._z, + s = this._w; + let a = s * t._w + n * t._x + i * t._y + r * t._z; + if ( + (a < 0 + ? ((this._w = -t._w), + (this._x = -t._x), + (this._y = -t._y), + (this._z = -t._z), + (a = -a)) + : this.copy(t), + a >= 1) + ) + return (this._w = s), (this._x = n), (this._y = i), (this._z = r), this; + const o = 1 - a * a; + if (o <= Number.EPSILON) { + const t = 1 - e; + return ( + (this._w = t * s + e * this._w), + (this._x = t * n + e * this._x), + (this._y = t * i + e * this._y), + (this._z = t * r + e * this._z), + this.normalize(), + this._onChangeCallback(), + this + ); + } + const l = Math.sqrt(o), + c = Math.atan2(l, a), + h = Math.sin((1 - e) * c) / l, + u = Math.sin(e * c) / l; + return ( + (this._w = s * h + this._w * u), + (this._x = n * h + this._x * u), + (this._y = i * h + this._y * u), + (this._z = r * h + this._z * u), + this._onChangeCallback(), + this + ); + } + slerpQuaternions(t, e, n) { + this.copy(t).slerp(e, n); + } + equals(t) { + return ( + t._x === this._x && + t._y === this._y && + t._z === this._z && + t._w === this._w + ); + } + fromArray(t, e = 0) { + return ( + (this._x = t[e]), + (this._y = t[e + 1]), + (this._z = t[e + 2]), + (this._w = t[e + 3]), + this._onChangeCallback(), + this + ); + } + toArray(t = [], e = 0) { + return ( + (t[e] = this._x), + (t[e + 1] = this._y), + (t[e + 2] = this._z), + (t[e + 3] = this._w), + t + ); + } + fromBufferAttribute(t, e) { + return ( + (this._x = t.getX(e)), + (this._y = t.getY(e)), + (this._z = t.getZ(e)), + (this._w = t.getW(e)), + this + ); + } + _onChange(t) { + return (this._onChangeCallback = t), this; + } + _onChangeCallback() {} + } + At.prototype.isQuaternion = !0; + class Lt { + constructor(t = 0, e = 0, n = 0) { + (this.x = t), (this.y = e), (this.z = n); + } + set(t, e, n) { + return ( + void 0 === n && (n = this.z), + (this.x = t), + (this.y = e), + (this.z = n), + this + ); + } + setScalar(t) { + return (this.x = t), (this.y = t), (this.z = t), this; + } + setX(t) { + return (this.x = t), this; + } + setY(t) { + return (this.y = t), this; + } + setZ(t) { + return (this.z = t), this; + } + setComponent(t, e) { + switch (t) { + case 0: + this.x = e; + break; + case 1: + this.y = e; + break; + case 2: + this.z = e; + break; + default: + throw new Error('index is out of range: ' + t); + } + return this; + } + getComponent(t) { + switch (t) { + case 0: + return this.x; + case 1: + return this.y; + case 2: + return this.z; + default: + throw new Error('index is out of range: ' + t); + } + } + clone() { + return new this.constructor(this.x, this.y, this.z); + } + copy(t) { + return (this.x = t.x), (this.y = t.y), (this.z = t.z), this; + } + add(t, e) { + return void 0 !== e + ? (console.warn( + 'THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' + ), + this.addVectors(t, e)) + : ((this.x += t.x), (this.y += t.y), (this.z += t.z), this); + } + addScalar(t) { + return (this.x += t), (this.y += t), (this.z += t), this; + } + addVectors(t, e) { + return ( + (this.x = t.x + e.x), (this.y = t.y + e.y), (this.z = t.z + e.z), this + ); + } + addScaledVector(t, e) { + return ( + (this.x += t.x * e), (this.y += t.y * e), (this.z += t.z * e), this + ); + } + sub(t, e) { + return void 0 !== e + ? (console.warn( + 'THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' + ), + this.subVectors(t, e)) + : ((this.x -= t.x), (this.y -= t.y), (this.z -= t.z), this); + } + subScalar(t) { + return (this.x -= t), (this.y -= t), (this.z -= t), this; + } + subVectors(t, e) { + return ( + (this.x = t.x - e.x), (this.y = t.y - e.y), (this.z = t.z - e.z), this + ); + } + multiply(t, e) { + return void 0 !== e + ? (console.warn( + 'THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.' + ), + this.multiplyVectors(t, e)) + : ((this.x *= t.x), (this.y *= t.y), (this.z *= t.z), this); + } + multiplyScalar(t) { + return (this.x *= t), (this.y *= t), (this.z *= t), this; + } + multiplyVectors(t, e) { + return ( + (this.x = t.x * e.x), (this.y = t.y * e.y), (this.z = t.z * e.z), this + ); + } + applyEuler(t) { + return ( + (t && t.isEuler) || + console.error( + 'THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.' + ), + this.applyQuaternion(Ct.setFromEuler(t)) + ); + } + applyAxisAngle(t, e) { + return this.applyQuaternion(Ct.setFromAxisAngle(t, e)); + } + applyMatrix3(t) { + const e = this.x, + n = this.y, + i = this.z, + r = t.elements; + return ( + (this.x = r[0] * e + r[3] * n + r[6] * i), + (this.y = r[1] * e + r[4] * n + r[7] * i), + (this.z = r[2] * e + r[5] * n + r[8] * i), + this + ); + } + applyNormalMatrix(t) { + return this.applyMatrix3(t).normalize(); + } + applyMatrix4(t) { + const e = this.x, + n = this.y, + i = this.z, + r = t.elements, + s = 1 / (r[3] * e + r[7] * n + r[11] * i + r[15]); + return ( + (this.x = (r[0] * e + r[4] * n + r[8] * i + r[12]) * s), + (this.y = (r[1] * e + r[5] * n + r[9] * i + r[13]) * s), + (this.z = (r[2] * e + r[6] * n + r[10] * i + r[14]) * s), + this + ); + } + applyQuaternion(t) { + const e = this.x, + n = this.y, + i = this.z, + r = t.x, + s = t.y, + a = t.z, + o = t.w, + l = o * e + s * i - a * n, + c = o * n + a * e - r * i, + h = o * i + r * n - s * e, + u = -r * e - s * n - a * i; + return ( + (this.x = l * o + u * -r + c * -a - h * -s), + (this.y = c * o + u * -s + h * -r - l * -a), + (this.z = h * o + u * -a + l * -s - c * -r), + this + ); + } + project(t) { + return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4( + t.projectionMatrix + ); + } + unproject(t) { + return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4( + t.matrixWorld + ); + } + transformDirection(t) { + const e = this.x, + n = this.y, + i = this.z, + r = t.elements; + return ( + (this.x = r[0] * e + r[4] * n + r[8] * i), + (this.y = r[1] * e + r[5] * n + r[9] * i), + (this.z = r[2] * e + r[6] * n + r[10] * i), + this.normalize() + ); + } + divide(t) { + return (this.x /= t.x), (this.y /= t.y), (this.z /= t.z), this; + } + divideScalar(t) { + return this.multiplyScalar(1 / t); + } + min(t) { + return ( + (this.x = Math.min(this.x, t.x)), + (this.y = Math.min(this.y, t.y)), + (this.z = Math.min(this.z, t.z)), + this + ); + } + max(t) { + return ( + (this.x = Math.max(this.x, t.x)), + (this.y = Math.max(this.y, t.y)), + (this.z = Math.max(this.z, t.z)), + this + ); + } + clamp(t, e) { + return ( + (this.x = Math.max(t.x, Math.min(e.x, this.x))), + (this.y = Math.max(t.y, Math.min(e.y, this.y))), + (this.z = Math.max(t.z, Math.min(e.z, this.z))), + this + ); + } + clampScalar(t, e) { + return ( + (this.x = Math.max(t, Math.min(e, this.x))), + (this.y = Math.max(t, Math.min(e, this.y))), + (this.z = Math.max(t, Math.min(e, this.z))), + this + ); + } + clampLength(t, e) { + const n = this.length(); + return this.divideScalar(n || 1).multiplyScalar( + Math.max(t, Math.min(e, n)) + ); + } + floor() { + return ( + (this.x = Math.floor(this.x)), + (this.y = Math.floor(this.y)), + (this.z = Math.floor(this.z)), + this + ); + } + ceil() { + return ( + (this.x = Math.ceil(this.x)), + (this.y = Math.ceil(this.y)), + (this.z = Math.ceil(this.z)), + this + ); + } + round() { + return ( + (this.x = Math.round(this.x)), + (this.y = Math.round(this.y)), + (this.z = Math.round(this.z)), + this + ); + } + roundToZero() { + return ( + (this.x = this.x < 0 ? Math.ceil(this.x) : Math.floor(this.x)), + (this.y = this.y < 0 ? Math.ceil(this.y) : Math.floor(this.y)), + (this.z = this.z < 0 ? Math.ceil(this.z) : Math.floor(this.z)), + this + ); + } + negate() { + return (this.x = -this.x), (this.y = -this.y), (this.z = -this.z), this; + } + dot(t) { + return this.x * t.x + this.y * t.y + this.z * t.z; + } + lengthSq() { + return this.x * this.x + this.y * this.y + this.z * this.z; + } + length() { + return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z); + } + manhattanLength() { + return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z); + } + normalize() { + return this.divideScalar(this.length() || 1); + } + setLength(t) { + return this.normalize().multiplyScalar(t); + } + lerp(t, e) { + return ( + (this.x += (t.x - this.x) * e), + (this.y += (t.y - this.y) * e), + (this.z += (t.z - this.z) * e), + this + ); + } + lerpVectors(t, e, n) { + return ( + (this.x = t.x + (e.x - t.x) * n), + (this.y = t.y + (e.y - t.y) * n), + (this.z = t.z + (e.z - t.z) * n), + this + ); + } + cross(t, e) { + return void 0 !== e + ? (console.warn( + 'THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.' + ), + this.crossVectors(t, e)) + : this.crossVectors(this, t); + } + crossVectors(t, e) { + const n = t.x, + i = t.y, + r = t.z, + s = e.x, + a = e.y, + o = e.z; + return ( + (this.x = i * o - r * a), + (this.y = r * s - n * o), + (this.z = n * a - i * s), + this + ); + } + projectOnVector(t) { + const e = t.lengthSq(); + if (0 === e) return this.set(0, 0, 0); + const n = t.dot(this) / e; + return this.copy(t).multiplyScalar(n); + } + projectOnPlane(t) { + return Rt.copy(this).projectOnVector(t), this.sub(Rt); + } + reflect(t) { + return this.sub(Rt.copy(t).multiplyScalar(2 * this.dot(t))); + } + angleTo(t) { + const e = Math.sqrt(this.lengthSq() * t.lengthSq()); + if (0 === e) return Math.PI / 2; + const n = this.dot(t) / e; + return Math.acos(ht(n, -1, 1)); + } + distanceTo(t) { + return Math.sqrt(this.distanceToSquared(t)); + } + distanceToSquared(t) { + const e = this.x - t.x, + n = this.y - t.y, + i = this.z - t.z; + return e * e + n * n + i * i; + } + manhattanDistanceTo(t) { + return ( + Math.abs(this.x - t.x) + Math.abs(this.y - t.y) + Math.abs(this.z - t.z) + ); + } + setFromSpherical(t) { + return this.setFromSphericalCoords(t.radius, t.phi, t.theta); + } + setFromSphericalCoords(t, e, n) { + const i = Math.sin(e) * t; + return ( + (this.x = i * Math.sin(n)), + (this.y = Math.cos(e) * t), + (this.z = i * Math.cos(n)), + this + ); + } + setFromCylindrical(t) { + return this.setFromCylindricalCoords(t.radius, t.theta, t.y); + } + setFromCylindricalCoords(t, e, n) { + return ( + (this.x = t * Math.sin(e)), + (this.y = n), + (this.z = t * Math.cos(e)), + this + ); + } + setFromMatrixPosition(t) { + const e = t.elements; + return (this.x = e[12]), (this.y = e[13]), (this.z = e[14]), this; + } + setFromMatrixScale(t) { + const e = this.setFromMatrixColumn(t, 0).length(), + n = this.setFromMatrixColumn(t, 1).length(), + i = this.setFromMatrixColumn(t, 2).length(); + return (this.x = e), (this.y = n), (this.z = i), this; + } + setFromMatrixColumn(t, e) { + return this.fromArray(t.elements, 4 * e); + } + setFromMatrix3Column(t, e) { + return this.fromArray(t.elements, 3 * e); + } + equals(t) { + return t.x === this.x && t.y === this.y && t.z === this.z; + } + fromArray(t, e = 0) { + return (this.x = t[e]), (this.y = t[e + 1]), (this.z = t[e + 2]), this; + } + toArray(t = [], e = 0) { + return (t[e] = this.x), (t[e + 1] = this.y), (t[e + 2] = this.z), t; + } + fromBufferAttribute(t, e, n) { + return ( + void 0 !== n && + console.warn( + 'THREE.Vector3: offset has been removed from .fromBufferAttribute().' + ), + (this.x = t.getX(e)), + (this.y = t.getY(e)), + (this.z = t.getZ(e)), + this + ); + } + random() { + return ( + (this.x = Math.random()), + (this.y = Math.random()), + (this.z = Math.random()), + this + ); + } + } + Lt.prototype.isVector3 = !0; + const Rt = new Lt(), + Ct = new At(); + class Pt { + constructor( + t = new Lt(1 / 0, 1 / 0, 1 / 0), + e = new Lt(-1 / 0, -1 / 0, -1 / 0) + ) { + (this.min = t), (this.max = e); + } + set(t, e) { + return this.min.copy(t), this.max.copy(e), this; + } + setFromArray(t) { + let e = 1 / 0, + n = 1 / 0, + i = 1 / 0, + r = -1 / 0, + s = -1 / 0, + a = -1 / 0; + for (let o = 0, l = t.length; o < l; o += 3) { + const l = t[o], + c = t[o + 1], + h = t[o + 2]; + l < e && (e = l), + c < n && (n = c), + h < i && (i = h), + l > r && (r = l), + c > s && (s = c), + h > a && (a = h); + } + return this.min.set(e, n, i), this.max.set(r, s, a), this; + } + setFromBufferAttribute(t) { + let e = 1 / 0, + n = 1 / 0, + i = 1 / 0, + r = -1 / 0, + s = -1 / 0, + a = -1 / 0; + for (let o = 0, l = t.count; o < l; o++) { + const l = t.getX(o), + c = t.getY(o), + h = t.getZ(o); + l < e && (e = l), + c < n && (n = c), + h < i && (i = h), + l > r && (r = l), + c > s && (s = c), + h > a && (a = h); + } + return this.min.set(e, n, i), this.max.set(r, s, a), this; + } + setFromPoints(t) { + this.makeEmpty(); + for (let e = 0, n = t.length; e < n; e++) this.expandByPoint(t[e]); + return this; + } + setFromCenterAndSize(t, e) { + const n = It.copy(e).multiplyScalar(0.5); + return this.min.copy(t).sub(n), this.max.copy(t).add(n), this; + } + setFromObject(t) { + return this.makeEmpty(), this.expandByObject(t); + } + clone() { + return new this.constructor().copy(this); + } + copy(t) { + return this.min.copy(t.min), this.max.copy(t.max), this; + } + makeEmpty() { + return ( + (this.min.x = this.min.y = this.min.z = 1 / 0), + (this.max.x = this.max.y = this.max.z = -1 / 0), + this + ); + } + isEmpty() { + return ( + this.max.x < this.min.x || + this.max.y < this.min.y || + this.max.z < this.min.z + ); + } + getCenter(t) { + return ( + void 0 === t && + (console.warn('THREE.Box3: .getCenter() target is now required'), + (t = new Lt())), + this.isEmpty() + ? t.set(0, 0, 0) + : t.addVectors(this.min, this.max).multiplyScalar(0.5) + ); + } + getSize(t) { + return ( + void 0 === t && + (console.warn('THREE.Box3: .getSize() target is now required'), + (t = new Lt())), + this.isEmpty() ? t.set(0, 0, 0) : t.subVectors(this.max, this.min) + ); + } + expandByPoint(t) { + return this.min.min(t), this.max.max(t), this; + } + expandByVector(t) { + return this.min.sub(t), this.max.add(t), this; + } + expandByScalar(t) { + return this.min.addScalar(-t), this.max.addScalar(t), this; + } + expandByObject(t) { + t.updateWorldMatrix(!1, !1); + const e = t.geometry; + void 0 !== e && + (null === e.boundingBox && e.computeBoundingBox(), + Nt.copy(e.boundingBox), + Nt.applyMatrix4(t.matrixWorld), + this.union(Nt)); + const n = t.children; + for (let t = 0, e = n.length; t < e; t++) this.expandByObject(n[t]); + return this; + } + containsPoint(t) { + return !( + t.x < this.min.x || + t.x > this.max.x || + t.y < this.min.y || + t.y > this.max.y || + t.z < this.min.z || + t.z > this.max.z + ); + } + containsBox(t) { + return ( + this.min.x <= t.min.x && + t.max.x <= this.max.x && + this.min.y <= t.min.y && + t.max.y <= this.max.y && + this.min.z <= t.min.z && + t.max.z <= this.max.z + ); + } + getParameter(t, e) { + return ( + void 0 === e && + (console.warn('THREE.Box3: .getParameter() target is now required'), + (e = new Lt())), + e.set( + (t.x - this.min.x) / (this.max.x - this.min.x), + (t.y - this.min.y) / (this.max.y - this.min.y), + (t.z - this.min.z) / (this.max.z - this.min.z) + ) + ); + } + intersectsBox(t) { + return !( + t.max.x < this.min.x || + t.min.x > this.max.x || + t.max.y < this.min.y || + t.min.y > this.max.y || + t.max.z < this.min.z || + t.min.z > this.max.z + ); + } + intersectsSphere(t) { + return ( + this.clampPoint(t.center, It), + It.distanceToSquared(t.center) <= t.radius * t.radius + ); + } + intersectsPlane(t) { + let e, n; + return ( + t.normal.x > 0 + ? ((e = t.normal.x * this.min.x), (n = t.normal.x * this.max.x)) + : ((e = t.normal.x * this.max.x), (n = t.normal.x * this.min.x)), + t.normal.y > 0 + ? ((e += t.normal.y * this.min.y), (n += t.normal.y * this.max.y)) + : ((e += t.normal.y * this.max.y), (n += t.normal.y * this.min.y)), + t.normal.z > 0 + ? ((e += t.normal.z * this.min.z), (n += t.normal.z * this.max.z)) + : ((e += t.normal.z * this.max.z), (n += t.normal.z * this.min.z)), + e <= -t.constant && n >= -t.constant + ); + } + intersectsTriangle(t) { + if (this.isEmpty()) return !1; + this.getCenter(Ut), + kt.subVectors(this.max, Ut), + Bt.subVectors(t.a, Ut), + zt.subVectors(t.b, Ut), + Ft.subVectors(t.c, Ut), + Ot.subVectors(zt, Bt), + Ht.subVectors(Ft, zt), + Gt.subVectors(Bt, Ft); + let e = [ + 0, + -Ot.z, + Ot.y, + 0, + -Ht.z, + Ht.y, + 0, + -Gt.z, + Gt.y, + Ot.z, + 0, + -Ot.x, + Ht.z, + 0, + -Ht.x, + Gt.z, + 0, + -Gt.x, + -Ot.y, + Ot.x, + 0, + -Ht.y, + Ht.x, + 0, + -Gt.y, + Gt.x, + 0, + ]; + return ( + !!jt(e, Bt, zt, Ft, kt) && + ((e = [1, 0, 0, 0, 1, 0, 0, 0, 1]), + !!jt(e, Bt, zt, Ft, kt) && + (Vt.crossVectors(Ot, Ht), + (e = [Vt.x, Vt.y, Vt.z]), + jt(e, Bt, zt, Ft, kt))) + ); + } + clampPoint(t, e) { + return ( + void 0 === e && + (console.warn('THREE.Box3: .clampPoint() target is now required'), + (e = new Lt())), + e.copy(t).clamp(this.min, this.max) + ); + } + distanceToPoint(t) { + return It.copy(t).clamp(this.min, this.max).sub(t).length(); + } + getBoundingSphere(t) { + return ( + void 0 === t && + console.error( + 'THREE.Box3: .getBoundingSphere() target is now required' + ), + this.getCenter(t.center), + (t.radius = 0.5 * this.getSize(It).length()), + t + ); + } + intersect(t) { + return ( + this.min.max(t.min), + this.max.min(t.max), + this.isEmpty() && this.makeEmpty(), + this + ); + } + union(t) { + return this.min.min(t.min), this.max.max(t.max), this; + } + applyMatrix4(t) { + return ( + this.isEmpty() || + (Dt[0].set(this.min.x, this.min.y, this.min.z).applyMatrix4(t), + Dt[1].set(this.min.x, this.min.y, this.max.z).applyMatrix4(t), + Dt[2].set(this.min.x, this.max.y, this.min.z).applyMatrix4(t), + Dt[3].set(this.min.x, this.max.y, this.max.z).applyMatrix4(t), + Dt[4].set(this.max.x, this.min.y, this.min.z).applyMatrix4(t), + Dt[5].set(this.max.x, this.min.y, this.max.z).applyMatrix4(t), + Dt[6].set(this.max.x, this.max.y, this.min.z).applyMatrix4(t), + Dt[7].set(this.max.x, this.max.y, this.max.z).applyMatrix4(t), + this.setFromPoints(Dt)), + this + ); + } + translate(t) { + return this.min.add(t), this.max.add(t), this; + } + equals(t) { + return t.min.equals(this.min) && t.max.equals(this.max); + } + } + Pt.prototype.isBox3 = !0; + const Dt = [ + new Lt(), + new Lt(), + new Lt(), + new Lt(), + new Lt(), + new Lt(), + new Lt(), + new Lt(), + ], + It = new Lt(), + Nt = new Pt(), + Bt = new Lt(), + zt = new Lt(), + Ft = new Lt(), + Ot = new Lt(), + Ht = new Lt(), + Gt = new Lt(), + Ut = new Lt(), + kt = new Lt(), + Vt = new Lt(), + Wt = new Lt(); + function jt(t, e, n, i, r) { + for (let s = 0, a = t.length - 3; s <= a; s += 3) { + Wt.fromArray(t, s); + const a = + r.x * Math.abs(Wt.x) + r.y * Math.abs(Wt.y) + r.z * Math.abs(Wt.z), + o = e.dot(Wt), + l = n.dot(Wt), + c = i.dot(Wt); + if (Math.max(-Math.max(o, l, c), Math.min(o, l, c)) > a) return !1; + } + return !0; + } + const qt = new Pt(), + Xt = new Lt(), + Yt = new Lt(), + Zt = new Lt(); + class Jt { + constructor(t = new Lt(), e = -1) { + (this.center = t), (this.radius = e); + } + set(t, e) { + return this.center.copy(t), (this.radius = e), this; + } + setFromPoints(t, e) { + const n = this.center; + void 0 !== e ? n.copy(e) : qt.setFromPoints(t).getCenter(n); + let i = 0; + for (let e = 0, r = t.length; e < r; e++) + i = Math.max(i, n.distanceToSquared(t[e])); + return (this.radius = Math.sqrt(i)), this; + } + copy(t) { + return this.center.copy(t.center), (this.radius = t.radius), this; + } + isEmpty() { + return this.radius < 0; + } + makeEmpty() { + return this.center.set(0, 0, 0), (this.radius = -1), this; + } + containsPoint(t) { + return t.distanceToSquared(this.center) <= this.radius * this.radius; + } + distanceToPoint(t) { + return t.distanceTo(this.center) - this.radius; + } + intersectsSphere(t) { + const e = this.radius + t.radius; + return t.center.distanceToSquared(this.center) <= e * e; + } + intersectsBox(t) { + return t.intersectsSphere(this); + } + intersectsPlane(t) { + return Math.abs(t.distanceToPoint(this.center)) <= this.radius; + } + clampPoint(t, e) { + const n = this.center.distanceToSquared(t); + return ( + void 0 === e && + (console.warn('THREE.Sphere: .clampPoint() target is now required'), + (e = new Lt())), + e.copy(t), + n > this.radius * this.radius && + (e.sub(this.center).normalize(), + e.multiplyScalar(this.radius).add(this.center)), + e + ); + } + getBoundingBox(t) { + return ( + void 0 === t && + (console.warn( + 'THREE.Sphere: .getBoundingBox() target is now required' + ), + (t = new Pt())), + this.isEmpty() + ? (t.makeEmpty(), t) + : (t.set(this.center, this.center), t.expandByScalar(this.radius), t) + ); + } + applyMatrix4(t) { + return ( + this.center.applyMatrix4(t), + (this.radius = this.radius * t.getMaxScaleOnAxis()), + this + ); + } + translate(t) { + return this.center.add(t), this; + } + expandByPoint(t) { + Zt.subVectors(t, this.center); + const e = Zt.lengthSq(); + if (e > this.radius * this.radius) { + const t = Math.sqrt(e), + n = 0.5 * (t - this.radius); + this.center.add(Zt.multiplyScalar(n / t)), (this.radius += n); + } + return this; + } + union(t) { + return ( + Yt.subVectors(t.center, this.center) + .normalize() + .multiplyScalar(t.radius), + this.expandByPoint(Xt.copy(t.center).add(Yt)), + this.expandByPoint(Xt.copy(t.center).sub(Yt)), + this + ); + } + equals(t) { + return t.center.equals(this.center) && t.radius === this.radius; + } + clone() { + return new this.constructor().copy(this); + } + } + const Qt = new Lt(), + Kt = new Lt(), + $t = new Lt(), + te = new Lt(), + ee = new Lt(), + ne = new Lt(), + ie = new Lt(); + class re { + constructor(t = new Lt(), e = new Lt(0, 0, -1)) { + (this.origin = t), (this.direction = e); + } + set(t, e) { + return this.origin.copy(t), this.direction.copy(e), this; + } + copy(t) { + return this.origin.copy(t.origin), this.direction.copy(t.direction), this; + } + at(t, e) { + return ( + void 0 === e && + (console.warn('THREE.Ray: .at() target is now required'), + (e = new Lt())), + e.copy(this.direction).multiplyScalar(t).add(this.origin) + ); + } + lookAt(t) { + return this.direction.copy(t).sub(this.origin).normalize(), this; + } + recast(t) { + return this.origin.copy(this.at(t, Qt)), this; + } + closestPointToPoint(t, e) { + void 0 === e && + (console.warn( + 'THREE.Ray: .closestPointToPoint() target is now required' + ), + (e = new Lt())), + e.subVectors(t, this.origin); + const n = e.dot(this.direction); + return n < 0 + ? e.copy(this.origin) + : e.copy(this.direction).multiplyScalar(n).add(this.origin); + } + distanceToPoint(t) { + return Math.sqrt(this.distanceSqToPoint(t)); + } + distanceSqToPoint(t) { + const e = Qt.subVectors(t, this.origin).dot(this.direction); + return e < 0 + ? this.origin.distanceToSquared(t) + : (Qt.copy(this.direction).multiplyScalar(e).add(this.origin), + Qt.distanceToSquared(t)); + } + distanceSqToSegment(t, e, n, i) { + Kt.copy(t).add(e).multiplyScalar(0.5), + $t.copy(e).sub(t).normalize(), + te.copy(this.origin).sub(Kt); + const r = 0.5 * t.distanceTo(e), + s = -this.direction.dot($t), + a = te.dot(this.direction), + o = -te.dot($t), + l = te.lengthSq(), + c = Math.abs(1 - s * s); + let h, u, d, p; + if (c > 0) + if (((h = s * o - a), (u = s * a - o), (p = r * c), h >= 0)) + if (u >= -p) + if (u <= p) { + const t = 1 / c; + (h *= t), + (u *= t), + (d = h * (h + s * u + 2 * a) + u * (s * h + u + 2 * o) + l); + } else + (u = r), + (h = Math.max(0, -(s * u + a))), + (d = -h * h + u * (u + 2 * o) + l); + else + (u = -r), + (h = Math.max(0, -(s * u + a))), + (d = -h * h + u * (u + 2 * o) + l); + else + u <= -p + ? ((h = Math.max(0, -(-s * r + a))), + (u = h > 0 ? -r : Math.min(Math.max(-r, -o), r)), + (d = -h * h + u * (u + 2 * o) + l)) + : u <= p + ? ((h = 0), + (u = Math.min(Math.max(-r, -o), r)), + (d = u * (u + 2 * o) + l)) + : ((h = Math.max(0, -(s * r + a))), + (u = h > 0 ? r : Math.min(Math.max(-r, -o), r)), + (d = -h * h + u * (u + 2 * o) + l)); + else + (u = s > 0 ? -r : r), + (h = Math.max(0, -(s * u + a))), + (d = -h * h + u * (u + 2 * o) + l); + return ( + n && n.copy(this.direction).multiplyScalar(h).add(this.origin), + i && i.copy($t).multiplyScalar(u).add(Kt), + d + ); + } + intersectSphere(t, e) { + Qt.subVectors(t.center, this.origin); + const n = Qt.dot(this.direction), + i = Qt.dot(Qt) - n * n, + r = t.radius * t.radius; + if (i > r) return null; + const s = Math.sqrt(r - i), + a = n - s, + o = n + s; + return a < 0 && o < 0 ? null : a < 0 ? this.at(o, e) : this.at(a, e); + } + intersectsSphere(t) { + return this.distanceSqToPoint(t.center) <= t.radius * t.radius; + } + distanceToPlane(t) { + const e = t.normal.dot(this.direction); + if (0 === e) return 0 === t.distanceToPoint(this.origin) ? 0 : null; + const n = -(this.origin.dot(t.normal) + t.constant) / e; + return n >= 0 ? n : null; + } + intersectPlane(t, e) { + const n = this.distanceToPlane(t); + return null === n ? null : this.at(n, e); + } + intersectsPlane(t) { + const e = t.distanceToPoint(this.origin); + if (0 === e) return !0; + return t.normal.dot(this.direction) * e < 0; + } + intersectBox(t, e) { + let n, i, r, s, a, o; + const l = 1 / this.direction.x, + c = 1 / this.direction.y, + h = 1 / this.direction.z, + u = this.origin; + return ( + l >= 0 + ? ((n = (t.min.x - u.x) * l), (i = (t.max.x - u.x) * l)) + : ((n = (t.max.x - u.x) * l), (i = (t.min.x - u.x) * l)), + c >= 0 + ? ((r = (t.min.y - u.y) * c), (s = (t.max.y - u.y) * c)) + : ((r = (t.max.y - u.y) * c), (s = (t.min.y - u.y) * c)), + n > s || r > i + ? null + : ((r > n || n != n) && (n = r), + (s < i || i != i) && (i = s), + h >= 0 + ? ((a = (t.min.z - u.z) * h), (o = (t.max.z - u.z) * h)) + : ((a = (t.max.z - u.z) * h), (o = (t.min.z - u.z) * h)), + n > o || a > i + ? null + : ((a > n || n != n) && (n = a), + (o < i || i != i) && (i = o), + i < 0 ? null : this.at(n >= 0 ? n : i, e))) + ); + } + intersectsBox(t) { + return null !== this.intersectBox(t, Qt); + } + intersectTriangle(t, e, n, i, r) { + ee.subVectors(e, t), ne.subVectors(n, t), ie.crossVectors(ee, ne); + let s, + a = this.direction.dot(ie); + if (a > 0) { + if (i) return null; + s = 1; + } else { + if (!(a < 0)) return null; + (s = -1), (a = -a); + } + te.subVectors(this.origin, t); + const o = s * this.direction.dot(ne.crossVectors(te, ne)); + if (o < 0) return null; + const l = s * this.direction.dot(ee.cross(te)); + if (l < 0) return null; + if (o + l > a) return null; + const c = -s * te.dot(ie); + return c < 0 ? null : this.at(c / a, r); + } + applyMatrix4(t) { + return ( + this.origin.applyMatrix4(t), this.direction.transformDirection(t), this + ); + } + equals(t) { + return t.origin.equals(this.origin) && t.direction.equals(this.direction); + } + clone() { + return new this.constructor().copy(this); + } + } + class se { + constructor() { + (this.elements = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]), + arguments.length > 0 && + console.error( + 'THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.' + ); + } + set(t, e, n, i, r, s, a, o, l, c, h, u, d, p, m, f) { + const g = this.elements; + return ( + (g[0] = t), + (g[4] = e), + (g[8] = n), + (g[12] = i), + (g[1] = r), + (g[5] = s), + (g[9] = a), + (g[13] = o), + (g[2] = l), + (g[6] = c), + (g[10] = h), + (g[14] = u), + (g[3] = d), + (g[7] = p), + (g[11] = m), + (g[15] = f), + this + ); + } + identity() { + return this.set(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1), this; + } + clone() { + return new se().fromArray(this.elements); + } + copy(t) { + const e = this.elements, + n = t.elements; + return ( + (e[0] = n[0]), + (e[1] = n[1]), + (e[2] = n[2]), + (e[3] = n[3]), + (e[4] = n[4]), + (e[5] = n[5]), + (e[6] = n[6]), + (e[7] = n[7]), + (e[8] = n[8]), + (e[9] = n[9]), + (e[10] = n[10]), + (e[11] = n[11]), + (e[12] = n[12]), + (e[13] = n[13]), + (e[14] = n[14]), + (e[15] = n[15]), + this + ); + } + copyPosition(t) { + const e = this.elements, + n = t.elements; + return (e[12] = n[12]), (e[13] = n[13]), (e[14] = n[14]), this; + } + setFromMatrix3(t) { + const e = t.elements; + return ( + this.set( + e[0], + e[3], + e[6], + 0, + e[1], + e[4], + e[7], + 0, + e[2], + e[5], + e[8], + 0, + 0, + 0, + 0, + 1 + ), + this + ); + } + extractBasis(t, e, n) { + return ( + t.setFromMatrixColumn(this, 0), + e.setFromMatrixColumn(this, 1), + n.setFromMatrixColumn(this, 2), + this + ); + } + makeBasis(t, e, n) { + return ( + this.set( + t.x, + e.x, + n.x, + 0, + t.y, + e.y, + n.y, + 0, + t.z, + e.z, + n.z, + 0, + 0, + 0, + 0, + 1 + ), + this + ); + } + extractRotation(t) { + const e = this.elements, + n = t.elements, + i = 1 / ae.setFromMatrixColumn(t, 0).length(), + r = 1 / ae.setFromMatrixColumn(t, 1).length(), + s = 1 / ae.setFromMatrixColumn(t, 2).length(); + return ( + (e[0] = n[0] * i), + (e[1] = n[1] * i), + (e[2] = n[2] * i), + (e[3] = 0), + (e[4] = n[4] * r), + (e[5] = n[5] * r), + (e[6] = n[6] * r), + (e[7] = 0), + (e[8] = n[8] * s), + (e[9] = n[9] * s), + (e[10] = n[10] * s), + (e[11] = 0), + (e[12] = 0), + (e[13] = 0), + (e[14] = 0), + (e[15] = 1), + this + ); + } + makeRotationFromEuler(t) { + (t && t.isEuler) || + console.error( + 'THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.' + ); + const e = this.elements, + n = t.x, + i = t.y, + r = t.z, + s = Math.cos(n), + a = Math.sin(n), + o = Math.cos(i), + l = Math.sin(i), + c = Math.cos(r), + h = Math.sin(r); + if ('XYZ' === t.order) { + const t = s * c, + n = s * h, + i = a * c, + r = a * h; + (e[0] = o * c), + (e[4] = -o * h), + (e[8] = l), + (e[1] = n + i * l), + (e[5] = t - r * l), + (e[9] = -a * o), + (e[2] = r - t * l), + (e[6] = i + n * l), + (e[10] = s * o); + } else if ('YXZ' === t.order) { + const t = o * c, + n = o * h, + i = l * c, + r = l * h; + (e[0] = t + r * a), + (e[4] = i * a - n), + (e[8] = s * l), + (e[1] = s * h), + (e[5] = s * c), + (e[9] = -a), + (e[2] = n * a - i), + (e[6] = r + t * a), + (e[10] = s * o); + } else if ('ZXY' === t.order) { + const t = o * c, + n = o * h, + i = l * c, + r = l * h; + (e[0] = t - r * a), + (e[4] = -s * h), + (e[8] = i + n * a), + (e[1] = n + i * a), + (e[5] = s * c), + (e[9] = r - t * a), + (e[2] = -s * l), + (e[6] = a), + (e[10] = s * o); + } else if ('ZYX' === t.order) { + const t = s * c, + n = s * h, + i = a * c, + r = a * h; + (e[0] = o * c), + (e[4] = i * l - n), + (e[8] = t * l + r), + (e[1] = o * h), + (e[5] = r * l + t), + (e[9] = n * l - i), + (e[2] = -l), + (e[6] = a * o), + (e[10] = s * o); + } else if ('YZX' === t.order) { + const t = s * o, + n = s * l, + i = a * o, + r = a * l; + (e[0] = o * c), + (e[4] = r - t * h), + (e[8] = i * h + n), + (e[1] = h), + (e[5] = s * c), + (e[9] = -a * c), + (e[2] = -l * c), + (e[6] = n * h + i), + (e[10] = t - r * h); + } else if ('XZY' === t.order) { + const t = s * o, + n = s * l, + i = a * o, + r = a * l; + (e[0] = o * c), + (e[4] = -h), + (e[8] = l * c), + (e[1] = t * h + r), + (e[5] = s * c), + (e[9] = n * h - i), + (e[2] = i * h - n), + (e[6] = a * c), + (e[10] = r * h + t); + } + return ( + (e[3] = 0), + (e[7] = 0), + (e[11] = 0), + (e[12] = 0), + (e[13] = 0), + (e[14] = 0), + (e[15] = 1), + this + ); + } + makeRotationFromQuaternion(t) { + return this.compose(le, t, ce); + } + lookAt(t, e, n) { + const i = this.elements; + return ( + de.subVectors(t, e), + 0 === de.lengthSq() && (de.z = 1), + de.normalize(), + he.crossVectors(n, de), + 0 === he.lengthSq() && + (1 === Math.abs(n.z) ? (de.x += 1e-4) : (de.z += 1e-4), + de.normalize(), + he.crossVectors(n, de)), + he.normalize(), + ue.crossVectors(de, he), + (i[0] = he.x), + (i[4] = ue.x), + (i[8] = de.x), + (i[1] = he.y), + (i[5] = ue.y), + (i[9] = de.y), + (i[2] = he.z), + (i[6] = ue.z), + (i[10] = de.z), + this + ); + } + multiply(t, e) { + return void 0 !== e + ? (console.warn( + 'THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead.' + ), + this.multiplyMatrices(t, e)) + : this.multiplyMatrices(this, t); + } + premultiply(t) { + return this.multiplyMatrices(t, this); + } + multiplyMatrices(t, e) { + const n = t.elements, + i = e.elements, + r = this.elements, + s = n[0], + a = n[4], + o = n[8], + l = n[12], + c = n[1], + h = n[5], + u = n[9], + d = n[13], + p = n[2], + m = n[6], + f = n[10], + g = n[14], + v = n[3], + y = n[7], + x = n[11], + _ = n[15], + w = i[0], + b = i[4], + M = i[8], + S = i[12], + T = i[1], + E = i[5], + A = i[9], + L = i[13], + R = i[2], + C = i[6], + P = i[10], + D = i[14], + I = i[3], + N = i[7], + B = i[11], + z = i[15]; + return ( + (r[0] = s * w + a * T + o * R + l * I), + (r[4] = s * b + a * E + o * C + l * N), + (r[8] = s * M + a * A + o * P + l * B), + (r[12] = s * S + a * L + o * D + l * z), + (r[1] = c * w + h * T + u * R + d * I), + (r[5] = c * b + h * E + u * C + d * N), + (r[9] = c * M + h * A + u * P + d * B), + (r[13] = c * S + h * L + u * D + d * z), + (r[2] = p * w + m * T + f * R + g * I), + (r[6] = p * b + m * E + f * C + g * N), + (r[10] = p * M + m * A + f * P + g * B), + (r[14] = p * S + m * L + f * D + g * z), + (r[3] = v * w + y * T + x * R + _ * I), + (r[7] = v * b + y * E + x * C + _ * N), + (r[11] = v * M + y * A + x * P + _ * B), + (r[15] = v * S + y * L + x * D + _ * z), + this + ); + } + multiplyScalar(t) { + const e = this.elements; + return ( + (e[0] *= t), + (e[4] *= t), + (e[8] *= t), + (e[12] *= t), + (e[1] *= t), + (e[5] *= t), + (e[9] *= t), + (e[13] *= t), + (e[2] *= t), + (e[6] *= t), + (e[10] *= t), + (e[14] *= t), + (e[3] *= t), + (e[7] *= t), + (e[11] *= t), + (e[15] *= t), + this + ); + } + determinant() { + const t = this.elements, + e = t[0], + n = t[4], + i = t[8], + r = t[12], + s = t[1], + a = t[5], + o = t[9], + l = t[13], + c = t[2], + h = t[6], + u = t[10], + d = t[14]; + return ( + t[3] * + (+r * o * h - + i * l * h - + r * a * u + + n * l * u + + i * a * d - + n * o * d) + + t[7] * + (+e * o * d - + e * l * u + + r * s * u - + i * s * d + + i * l * c - + r * o * c) + + t[11] * + (+e * l * h - + e * a * d - + r * s * h + + n * s * d + + r * a * c - + n * l * c) + + t[15] * + (-i * a * c - + e * o * h + + e * a * u + + i * s * h - + n * s * u + + n * o * c) + ); + } + transpose() { + const t = this.elements; + let e; + return ( + (e = t[1]), + (t[1] = t[4]), + (t[4] = e), + (e = t[2]), + (t[2] = t[8]), + (t[8] = e), + (e = t[6]), + (t[6] = t[9]), + (t[9] = e), + (e = t[3]), + (t[3] = t[12]), + (t[12] = e), + (e = t[7]), + (t[7] = t[13]), + (t[13] = e), + (e = t[11]), + (t[11] = t[14]), + (t[14] = e), + this + ); + } + setPosition(t, e, n) { + const i = this.elements; + return ( + t.isVector3 + ? ((i[12] = t.x), (i[13] = t.y), (i[14] = t.z)) + : ((i[12] = t), (i[13] = e), (i[14] = n)), + this + ); + } + invert() { + const t = this.elements, + e = t[0], + n = t[1], + i = t[2], + r = t[3], + s = t[4], + a = t[5], + o = t[6], + l = t[7], + c = t[8], + h = t[9], + u = t[10], + d = t[11], + p = t[12], + m = t[13], + f = t[14], + g = t[15], + v = + h * f * l - m * u * l + m * o * d - a * f * d - h * o * g + a * u * g, + y = + p * u * l - c * f * l - p * o * d + s * f * d + c * o * g - s * u * g, + x = + c * m * l - p * h * l + p * a * d - s * m * d - c * a * g + s * h * g, + _ = + p * h * o - c * m * o - p * a * u + s * m * u + c * a * f - s * h * f, + w = e * v + n * y + i * x + r * _; + if (0 === w) + return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); + const b = 1 / w; + return ( + (t[0] = v * b), + (t[1] = + (m * u * r - + h * f * r - + m * i * d + + n * f * d + + h * i * g - + n * u * g) * + b), + (t[2] = + (a * f * r - + m * o * r + + m * i * l - + n * f * l - + a * i * g + + n * o * g) * + b), + (t[3] = + (h * o * r - + a * u * r - + h * i * l + + n * u * l + + a * i * d - + n * o * d) * + b), + (t[4] = y * b), + (t[5] = + (c * f * r - + p * u * r + + p * i * d - + e * f * d - + c * i * g + + e * u * g) * + b), + (t[6] = + (p * o * r - + s * f * r - + p * i * l + + e * f * l + + s * i * g - + e * o * g) * + b), + (t[7] = + (s * u * r - + c * o * r + + c * i * l - + e * u * l - + s * i * d + + e * o * d) * + b), + (t[8] = x * b), + (t[9] = + (p * h * r - + c * m * r - + p * n * d + + e * m * d + + c * n * g - + e * h * g) * + b), + (t[10] = + (s * m * r - + p * a * r + + p * n * l - + e * m * l - + s * n * g + + e * a * g) * + b), + (t[11] = + (c * a * r - + s * h * r - + c * n * l + + e * h * l + + s * n * d - + e * a * d) * + b), + (t[12] = _ * b), + (t[13] = + (c * m * i - + p * h * i + + p * n * u - + e * m * u - + c * n * f + + e * h * f) * + b), + (t[14] = + (p * a * i - + s * m * i - + p * n * o + + e * m * o + + s * n * f - + e * a * f) * + b), + (t[15] = + (s * h * i - + c * a * i + + c * n * o - + e * h * o - + s * n * u + + e * a * u) * + b), + this + ); + } + scale(t) { + const e = this.elements, + n = t.x, + i = t.y, + r = t.z; + return ( + (e[0] *= n), + (e[4] *= i), + (e[8] *= r), + (e[1] *= n), + (e[5] *= i), + (e[9] *= r), + (e[2] *= n), + (e[6] *= i), + (e[10] *= r), + (e[3] *= n), + (e[7] *= i), + (e[11] *= r), + this + ); + } + getMaxScaleOnAxis() { + const t = this.elements, + e = t[0] * t[0] + t[1] * t[1] + t[2] * t[2], + n = t[4] * t[4] + t[5] * t[5] + t[6] * t[6], + i = t[8] * t[8] + t[9] * t[9] + t[10] * t[10]; + return Math.sqrt(Math.max(e, n, i)); + } + makeTranslation(t, e, n) { + return this.set(1, 0, 0, t, 0, 1, 0, e, 0, 0, 1, n, 0, 0, 0, 1), this; + } + makeRotationX(t) { + const e = Math.cos(t), + n = Math.sin(t); + return this.set(1, 0, 0, 0, 0, e, -n, 0, 0, n, e, 0, 0, 0, 0, 1), this; + } + makeRotationY(t) { + const e = Math.cos(t), + n = Math.sin(t); + return this.set(e, 0, n, 0, 0, 1, 0, 0, -n, 0, e, 0, 0, 0, 0, 1), this; + } + makeRotationZ(t) { + const e = Math.cos(t), + n = Math.sin(t); + return this.set(e, -n, 0, 0, n, e, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1), this; + } + makeRotationAxis(t, e) { + const n = Math.cos(e), + i = Math.sin(e), + r = 1 - n, + s = t.x, + a = t.y, + o = t.z, + l = r * s, + c = r * a; + return ( + this.set( + l * s + n, + l * a - i * o, + l * o + i * a, + 0, + l * a + i * o, + c * a + n, + c * o - i * s, + 0, + l * o - i * a, + c * o + i * s, + r * o * o + n, + 0, + 0, + 0, + 0, + 1 + ), + this + ); + } + makeScale(t, e, n) { + return this.set(t, 0, 0, 0, 0, e, 0, 0, 0, 0, n, 0, 0, 0, 0, 1), this; + } + makeShear(t, e, n) { + return this.set(1, e, n, 0, t, 1, n, 0, t, e, 1, 0, 0, 0, 0, 1), this; + } + compose(t, e, n) { + const i = this.elements, + r = e._x, + s = e._y, + a = e._z, + o = e._w, + l = r + r, + c = s + s, + h = a + a, + u = r * l, + d = r * c, + p = r * h, + m = s * c, + f = s * h, + g = a * h, + v = o * l, + y = o * c, + x = o * h, + _ = n.x, + w = n.y, + b = n.z; + return ( + (i[0] = (1 - (m + g)) * _), + (i[1] = (d + x) * _), + (i[2] = (p - y) * _), + (i[3] = 0), + (i[4] = (d - x) * w), + (i[5] = (1 - (u + g)) * w), + (i[6] = (f + v) * w), + (i[7] = 0), + (i[8] = (p + y) * b), + (i[9] = (f - v) * b), + (i[10] = (1 - (u + m)) * b), + (i[11] = 0), + (i[12] = t.x), + (i[13] = t.y), + (i[14] = t.z), + (i[15] = 1), + this + ); + } + decompose(t, e, n) { + const i = this.elements; + let r = ae.set(i[0], i[1], i[2]).length(); + const s = ae.set(i[4], i[5], i[6]).length(), + a = ae.set(i[8], i[9], i[10]).length(); + this.determinant() < 0 && (r = -r), + (t.x = i[12]), + (t.y = i[13]), + (t.z = i[14]), + oe.copy(this); + const o = 1 / r, + l = 1 / s, + c = 1 / a; + return ( + (oe.elements[0] *= o), + (oe.elements[1] *= o), + (oe.elements[2] *= o), + (oe.elements[4] *= l), + (oe.elements[5] *= l), + (oe.elements[6] *= l), + (oe.elements[8] *= c), + (oe.elements[9] *= c), + (oe.elements[10] *= c), + e.setFromRotationMatrix(oe), + (n.x = r), + (n.y = s), + (n.z = a), + this + ); + } + makePerspective(t, e, n, i, r, s) { + void 0 === s && + console.warn( + 'THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.' + ); + const a = this.elements, + o = (2 * r) / (e - t), + l = (2 * r) / (n - i), + c = (e + t) / (e - t), + h = (n + i) / (n - i), + u = -(s + r) / (s - r), + d = (-2 * s * r) / (s - r); + return ( + (a[0] = o), + (a[4] = 0), + (a[8] = c), + (a[12] = 0), + (a[1] = 0), + (a[5] = l), + (a[9] = h), + (a[13] = 0), + (a[2] = 0), + (a[6] = 0), + (a[10] = u), + (a[14] = d), + (a[3] = 0), + (a[7] = 0), + (a[11] = -1), + (a[15] = 0), + this + ); + } + makeOrthographic(t, e, n, i, r, s) { + const a = this.elements, + o = 1 / (e - t), + l = 1 / (n - i), + c = 1 / (s - r), + h = (e + t) * o, + u = (n + i) * l, + d = (s + r) * c; + return ( + (a[0] = 2 * o), + (a[4] = 0), + (a[8] = 0), + (a[12] = -h), + (a[1] = 0), + (a[5] = 2 * l), + (a[9] = 0), + (a[13] = -u), + (a[2] = 0), + (a[6] = 0), + (a[10] = -2 * c), + (a[14] = -d), + (a[3] = 0), + (a[7] = 0), + (a[11] = 0), + (a[15] = 1), + this + ); + } + equals(t) { + const e = this.elements, + n = t.elements; + for (let t = 0; t < 16; t++) if (e[t] !== n[t]) return !1; + return !0; + } + fromArray(t, e = 0) { + for (let n = 0; n < 16; n++) this.elements[n] = t[n + e]; + return this; + } + toArray(t = [], e = 0) { + const n = this.elements; + return ( + (t[e] = n[0]), + (t[e + 1] = n[1]), + (t[e + 2] = n[2]), + (t[e + 3] = n[3]), + (t[e + 4] = n[4]), + (t[e + 5] = n[5]), + (t[e + 6] = n[6]), + (t[e + 7] = n[7]), + (t[e + 8] = n[8]), + (t[e + 9] = n[9]), + (t[e + 10] = n[10]), + (t[e + 11] = n[11]), + (t[e + 12] = n[12]), + (t[e + 13] = n[13]), + (t[e + 14] = n[14]), + (t[e + 15] = n[15]), + t + ); + } + } + se.prototype.isMatrix4 = !0; + const ae = new Lt(), + oe = new se(), + le = new Lt(0, 0, 0), + ce = new Lt(1, 1, 1), + he = new Lt(), + ue = new Lt(), + de = new Lt(), + pe = new se(), + me = new At(); + class fe { + constructor(t = 0, e = 0, n = 0, i = fe.DefaultOrder) { + (this._x = t), (this._y = e), (this._z = n), (this._order = i); + } + get x() { + return this._x; + } + set x(t) { + (this._x = t), this._onChangeCallback(); + } + get y() { + return this._y; + } + set y(t) { + (this._y = t), this._onChangeCallback(); + } + get z() { + return this._z; + } + set z(t) { + (this._z = t), this._onChangeCallback(); + } + get order() { + return this._order; + } + set order(t) { + (this._order = t), this._onChangeCallback(); + } + set(t, e, n, i) { + return ( + (this._x = t), + (this._y = e), + (this._z = n), + (this._order = i || this._order), + this._onChangeCallback(), + this + ); + } + clone() { + return new this.constructor(this._x, this._y, this._z, this._order); + } + copy(t) { + return ( + (this._x = t._x), + (this._y = t._y), + (this._z = t._z), + (this._order = t._order), + this._onChangeCallback(), + this + ); + } + setFromRotationMatrix(t, e, n) { + const i = t.elements, + r = i[0], + s = i[4], + a = i[8], + o = i[1], + l = i[5], + c = i[9], + h = i[2], + u = i[6], + d = i[10]; + switch ((e = e || this._order)) { + case 'XYZ': + (this._y = Math.asin(ht(a, -1, 1))), + Math.abs(a) < 0.9999999 + ? ((this._x = Math.atan2(-c, d)), (this._z = Math.atan2(-s, r))) + : ((this._x = Math.atan2(u, l)), (this._z = 0)); + break; + case 'YXZ': + (this._x = Math.asin(-ht(c, -1, 1))), + Math.abs(c) < 0.9999999 + ? ((this._y = Math.atan2(a, d)), (this._z = Math.atan2(o, l))) + : ((this._y = Math.atan2(-h, r)), (this._z = 0)); + break; + case 'ZXY': + (this._x = Math.asin(ht(u, -1, 1))), + Math.abs(u) < 0.9999999 + ? ((this._y = Math.atan2(-h, d)), (this._z = Math.atan2(-s, l))) + : ((this._y = 0), (this._z = Math.atan2(o, r))); + break; + case 'ZYX': + (this._y = Math.asin(-ht(h, -1, 1))), + Math.abs(h) < 0.9999999 + ? ((this._x = Math.atan2(u, d)), (this._z = Math.atan2(o, r))) + : ((this._x = 0), (this._z = Math.atan2(-s, l))); + break; + case 'YZX': + (this._z = Math.asin(ht(o, -1, 1))), + Math.abs(o) < 0.9999999 + ? ((this._x = Math.atan2(-c, l)), (this._y = Math.atan2(-h, r))) + : ((this._x = 0), (this._y = Math.atan2(a, d))); + break; + case 'XZY': + (this._z = Math.asin(-ht(s, -1, 1))), + Math.abs(s) < 0.9999999 + ? ((this._x = Math.atan2(u, l)), (this._y = Math.atan2(a, r))) + : ((this._x = Math.atan2(-c, d)), (this._y = 0)); + break; + default: + console.warn( + 'THREE.Euler: .setFromRotationMatrix() encountered an unknown order: ' + + e + ); + } + return (this._order = e), !1 !== n && this._onChangeCallback(), this; + } + setFromQuaternion(t, e, n) { + return ( + pe.makeRotationFromQuaternion(t), this.setFromRotationMatrix(pe, e, n) + ); + } + setFromVector3(t, e) { + return this.set(t.x, t.y, t.z, e || this._order); + } + reorder(t) { + return me.setFromEuler(this), this.setFromQuaternion(me, t); + } + equals(t) { + return ( + t._x === this._x && + t._y === this._y && + t._z === this._z && + t._order === this._order + ); + } + fromArray(t) { + return ( + (this._x = t[0]), + (this._y = t[1]), + (this._z = t[2]), + void 0 !== t[3] && (this._order = t[3]), + this._onChangeCallback(), + this + ); + } + toArray(t = [], e = 0) { + return ( + (t[e] = this._x), + (t[e + 1] = this._y), + (t[e + 2] = this._z), + (t[e + 3] = this._order), + t + ); + } + toVector3(t) { + return t + ? t.set(this._x, this._y, this._z) + : new Lt(this._x, this._y, this._z); + } + _onChange(t) { + return (this._onChangeCallback = t), this; + } + _onChangeCallback() {} + } + (fe.prototype.isEuler = !0), + (fe.DefaultOrder = 'XYZ'), + (fe.RotationOrders = ['XYZ', 'YZX', 'ZXY', 'XZY', 'YXZ', 'ZYX']); + class ge { + constructor() { + this.mask = 1; + } + set(t) { + this.mask = (1 << t) | 0; + } + enable(t) { + this.mask |= (1 << t) | 0; + } + enableAll() { + this.mask = -1; + } + toggle(t) { + this.mask ^= (1 << t) | 0; + } + disable(t) { + this.mask &= ~((1 << t) | 0); + } + disableAll() { + this.mask = 0; + } + test(t) { + return 0 != (this.mask & t.mask); + } + } + let ve = 0; + const ye = new Lt(), + xe = new At(), + _e = new se(), + we = new Lt(), + be = new Lt(), + Me = new Lt(), + Se = new At(), + Te = new Lt(1, 0, 0), + Ee = new Lt(0, 1, 0), + Ae = new Lt(0, 0, 1), + Le = { type: 'added' }, + Re = { type: 'removed' }; + class Ce extends rt { + constructor() { + super(), + Object.defineProperty(this, 'id', { value: ve++ }), + (this.uuid = ct()), + (this.name = ''), + (this.type = 'Object3D'), + (this.parent = null), + (this.children = []), + (this.up = Ce.DefaultUp.clone()); + const t = new Lt(), + e = new fe(), + n = new At(), + i = new Lt(1, 1, 1); + e._onChange(function () { + n.setFromEuler(e, !1); + }), + n._onChange(function () { + e.setFromQuaternion(n, void 0, !1); + }), + Object.defineProperties(this, { + position: { configurable: !0, enumerable: !0, value: t }, + rotation: { configurable: !0, enumerable: !0, value: e }, + quaternion: { configurable: !0, enumerable: !0, value: n }, + scale: { configurable: !0, enumerable: !0, value: i }, + modelViewMatrix: { value: new se() }, + normalMatrix: { value: new yt() }, + }), + (this.matrix = new se()), + (this.matrixWorld = new se()), + (this.matrixAutoUpdate = Ce.DefaultMatrixAutoUpdate), + (this.matrixWorldNeedsUpdate = !1), + (this.layers = new ge()), + (this.visible = !0), + (this.castShadow = !1), + (this.receiveShadow = !1), + (this.frustumCulled = !0), + (this.renderOrder = 0), + (this.animations = []), + (this.userData = {}); + } + onBeforeRender() {} + onAfterRender() {} + applyMatrix4(t) { + this.matrixAutoUpdate && this.updateMatrix(), + this.matrix.premultiply(t), + this.matrix.decompose(this.position, this.quaternion, this.scale); + } + applyQuaternion(t) { + return this.quaternion.premultiply(t), this; + } + setRotationFromAxisAngle(t, e) { + this.quaternion.setFromAxisAngle(t, e); + } + setRotationFromEuler(t) { + this.quaternion.setFromEuler(t, !0); + } + setRotationFromMatrix(t) { + this.quaternion.setFromRotationMatrix(t); + } + setRotationFromQuaternion(t) { + this.quaternion.copy(t); + } + rotateOnAxis(t, e) { + return xe.setFromAxisAngle(t, e), this.quaternion.multiply(xe), this; + } + rotateOnWorldAxis(t, e) { + return xe.setFromAxisAngle(t, e), this.quaternion.premultiply(xe), this; + } + rotateX(t) { + return this.rotateOnAxis(Te, t); + } + rotateY(t) { + return this.rotateOnAxis(Ee, t); + } + rotateZ(t) { + return this.rotateOnAxis(Ae, t); + } + translateOnAxis(t, e) { + return ( + ye.copy(t).applyQuaternion(this.quaternion), + this.position.add(ye.multiplyScalar(e)), + this + ); + } + translateX(t) { + return this.translateOnAxis(Te, t); + } + translateY(t) { + return this.translateOnAxis(Ee, t); + } + translateZ(t) { + return this.translateOnAxis(Ae, t); + } + localToWorld(t) { + return t.applyMatrix4(this.matrixWorld); + } + worldToLocal(t) { + return t.applyMatrix4(_e.copy(this.matrixWorld).invert()); + } + lookAt(t, e, n) { + t.isVector3 ? we.copy(t) : we.set(t, e, n); + const i = this.parent; + this.updateWorldMatrix(!0, !1), + be.setFromMatrixPosition(this.matrixWorld), + this.isCamera || this.isLight + ? _e.lookAt(be, we, this.up) + : _e.lookAt(we, be, this.up), + this.quaternion.setFromRotationMatrix(_e), + i && + (_e.extractRotation(i.matrixWorld), + xe.setFromRotationMatrix(_e), + this.quaternion.premultiply(xe.invert())); + } + add(t) { + if (arguments.length > 1) { + for (let t = 0; t < arguments.length; t++) this.add(arguments[t]); + return this; + } + return t === this + ? (console.error( + "THREE.Object3D.add: object can't be added as a child of itself.", + t + ), + this) + : (t && t.isObject3D + ? (null !== t.parent && t.parent.remove(t), + (t.parent = this), + this.children.push(t), + t.dispatchEvent(Le)) + : console.error( + 'THREE.Object3D.add: object not an instance of THREE.Object3D.', + t + ), + this); + } + remove(t) { + if (arguments.length > 1) { + for (let t = 0; t < arguments.length; t++) this.remove(arguments[t]); + return this; + } + const e = this.children.indexOf(t); + return ( + -1 !== e && + ((t.parent = null), this.children.splice(e, 1), t.dispatchEvent(Re)), + this + ); + } + clear() { + for (let t = 0; t < this.children.length; t++) { + const e = this.children[t]; + (e.parent = null), e.dispatchEvent(Re); + } + return (this.children.length = 0), this; + } + attach(t) { + return ( + this.updateWorldMatrix(!0, !1), + _e.copy(this.matrixWorld).invert(), + null !== t.parent && + (t.parent.updateWorldMatrix(!0, !1), + _e.multiply(t.parent.matrixWorld)), + t.applyMatrix4(_e), + this.add(t), + t.updateWorldMatrix(!1, !0), + this + ); + } + getObjectById(t) { + return this.getObjectByProperty('id', t); + } + getObjectByName(t) { + return this.getObjectByProperty('name', t); + } + getObjectByProperty(t, e) { + if (this[t] === e) return this; + for (let n = 0, i = this.children.length; n < i; n++) { + const i = this.children[n].getObjectByProperty(t, e); + if (void 0 !== i) return i; + } + } + getWorldPosition(t) { + return ( + void 0 === t && + (console.warn( + 'THREE.Object3D: .getWorldPosition() target is now required' + ), + (t = new Lt())), + this.updateWorldMatrix(!0, !1), + t.setFromMatrixPosition(this.matrixWorld) + ); + } + getWorldQuaternion(t) { + return ( + void 0 === t && + (console.warn( + 'THREE.Object3D: .getWorldQuaternion() target is now required' + ), + (t = new At())), + this.updateWorldMatrix(!0, !1), + this.matrixWorld.decompose(be, t, Me), + t + ); + } + getWorldScale(t) { + return ( + void 0 === t && + (console.warn( + 'THREE.Object3D: .getWorldScale() target is now required' + ), + (t = new Lt())), + this.updateWorldMatrix(!0, !1), + this.matrixWorld.decompose(be, Se, t), + t + ); + } + getWorldDirection(t) { + void 0 === t && + (console.warn( + 'THREE.Object3D: .getWorldDirection() target is now required' + ), + (t = new Lt())), + this.updateWorldMatrix(!0, !1); + const e = this.matrixWorld.elements; + return t.set(e[8], e[9], e[10]).normalize(); + } + raycast() {} + traverse(t) { + t(this); + const e = this.children; + for (let n = 0, i = e.length; n < i; n++) e[n].traverse(t); + } + traverseVisible(t) { + if (!1 === this.visible) return; + t(this); + const e = this.children; + for (let n = 0, i = e.length; n < i; n++) e[n].traverseVisible(t); + } + traverseAncestors(t) { + const e = this.parent; + null !== e && (t(e), e.traverseAncestors(t)); + } + updateMatrix() { + this.matrix.compose(this.position, this.quaternion, this.scale), + (this.matrixWorldNeedsUpdate = !0); + } + updateMatrixWorld(t) { + this.matrixAutoUpdate && this.updateMatrix(), + (this.matrixWorldNeedsUpdate || t) && + (null === this.parent + ? this.matrixWorld.copy(this.matrix) + : this.matrixWorld.multiplyMatrices( + this.parent.matrixWorld, + this.matrix + ), + (this.matrixWorldNeedsUpdate = !1), + (t = !0)); + const e = this.children; + for (let n = 0, i = e.length; n < i; n++) e[n].updateMatrixWorld(t); + } + updateWorldMatrix(t, e) { + const n = this.parent; + if ( + (!0 === t && null !== n && n.updateWorldMatrix(!0, !1), + this.matrixAutoUpdate && this.updateMatrix(), + null === this.parent + ? this.matrixWorld.copy(this.matrix) + : this.matrixWorld.multiplyMatrices( + this.parent.matrixWorld, + this.matrix + ), + !0 === e) + ) { + const t = this.children; + for (let e = 0, n = t.length; e < n; e++) + t[e].updateWorldMatrix(!1, !0); + } + } + toJSON(t) { + const e = void 0 === t || 'string' == typeof t, + n = {}; + e && + ((t = { + geometries: {}, + materials: {}, + textures: {}, + images: {}, + shapes: {}, + skeletons: {}, + animations: {}, + }), + (n.metadata = { + version: 4.5, + type: 'Object', + generator: 'Object3D.toJSON', + })); + const i = {}; + function r(e, n) { + return void 0 === e[n.uuid] && (e[n.uuid] = n.toJSON(t)), n.uuid; + } + if ( + ((i.uuid = this.uuid), + (i.type = this.type), + '' !== this.name && (i.name = this.name), + !0 === this.castShadow && (i.castShadow = !0), + !0 === this.receiveShadow && (i.receiveShadow = !0), + !1 === this.visible && (i.visible = !1), + !1 === this.frustumCulled && (i.frustumCulled = !1), + 0 !== this.renderOrder && (i.renderOrder = this.renderOrder), + '{}' !== JSON.stringify(this.userData) && (i.userData = this.userData), + (i.layers = this.layers.mask), + (i.matrix = this.matrix.toArray()), + !1 === this.matrixAutoUpdate && (i.matrixAutoUpdate = !1), + this.isInstancedMesh && + ((i.type = 'InstancedMesh'), + (i.count = this.count), + (i.instanceMatrix = this.instanceMatrix.toJSON()), + null !== this.instanceColor && + (i.instanceColor = this.instanceColor.toJSON())), + this.isMesh || this.isLine || this.isPoints) + ) { + i.geometry = r(t.geometries, this.geometry); + const e = this.geometry.parameters; + if (void 0 !== e && void 0 !== e.shapes) { + const n = e.shapes; + if (Array.isArray(n)) + for (let e = 0, i = n.length; e < i; e++) { + const i = n[e]; + r(t.shapes, i); + } + else r(t.shapes, n); + } + } + if ( + (this.isSkinnedMesh && + ((i.bindMode = this.bindMode), + (i.bindMatrix = this.bindMatrix.toArray()), + void 0 !== this.skeleton && + (r(t.skeletons, this.skeleton), (i.skeleton = this.skeleton.uuid))), + void 0 !== this.material) + ) + if (Array.isArray(this.material)) { + const e = []; + for (let n = 0, i = this.material.length; n < i; n++) + e.push(r(t.materials, this.material[n])); + i.material = e; + } else i.material = r(t.materials, this.material); + if (this.children.length > 0) { + i.children = []; + for (let e = 0; e < this.children.length; e++) + i.children.push(this.children[e].toJSON(t).object); + } + if (this.animations.length > 0) { + i.animations = []; + for (let e = 0; e < this.animations.length; e++) { + const n = this.animations[e]; + i.animations.push(r(t.animations, n)); + } + } + if (e) { + const e = s(t.geometries), + i = s(t.materials), + r = s(t.textures), + a = s(t.images), + o = s(t.shapes), + l = s(t.skeletons), + c = s(t.animations); + e.length > 0 && (n.geometries = e), + i.length > 0 && (n.materials = i), + r.length > 0 && (n.textures = r), + a.length > 0 && (n.images = a), + o.length > 0 && (n.shapes = o), + l.length > 0 && (n.skeletons = l), + c.length > 0 && (n.animations = c); + } + return (n.object = i), n; + function s(t) { + const e = []; + for (const n in t) { + const i = t[n]; + delete i.metadata, e.push(i); + } + return e; + } + } + clone(t) { + return new this.constructor().copy(this, t); + } + copy(t, e = !0) { + if ( + ((this.name = t.name), + this.up.copy(t.up), + this.position.copy(t.position), + (this.rotation.order = t.rotation.order), + this.quaternion.copy(t.quaternion), + this.scale.copy(t.scale), + this.matrix.copy(t.matrix), + this.matrixWorld.copy(t.matrixWorld), + (this.matrixAutoUpdate = t.matrixAutoUpdate), + (this.matrixWorldNeedsUpdate = t.matrixWorldNeedsUpdate), + (this.layers.mask = t.layers.mask), + (this.visible = t.visible), + (this.castShadow = t.castShadow), + (this.receiveShadow = t.receiveShadow), + (this.frustumCulled = t.frustumCulled), + (this.renderOrder = t.renderOrder), + (this.userData = JSON.parse(JSON.stringify(t.userData))), + !0 === e) + ) + for (let e = 0; e < t.children.length; e++) { + const n = t.children[e]; + this.add(n.clone()); + } + return this; + } + } + (Ce.DefaultUp = new Lt(0, 1, 0)), + (Ce.DefaultMatrixAutoUpdate = !0), + (Ce.prototype.isObject3D = !0); + const Pe = new Lt(), + De = new Lt(), + Ie = new yt(); + class Ne { + constructor(t = new Lt(1, 0, 0), e = 0) { + (this.normal = t), (this.constant = e); + } + set(t, e) { + return this.normal.copy(t), (this.constant = e), this; + } + setComponents(t, e, n, i) { + return this.normal.set(t, e, n), (this.constant = i), this; + } + setFromNormalAndCoplanarPoint(t, e) { + return this.normal.copy(t), (this.constant = -e.dot(this.normal)), this; + } + setFromCoplanarPoints(t, e, n) { + const i = Pe.subVectors(n, e).cross(De.subVectors(t, e)).normalize(); + return this.setFromNormalAndCoplanarPoint(i, t), this; + } + copy(t) { + return this.normal.copy(t.normal), (this.constant = t.constant), this; + } + normalize() { + const t = 1 / this.normal.length(); + return this.normal.multiplyScalar(t), (this.constant *= t), this; + } + negate() { + return (this.constant *= -1), this.normal.negate(), this; + } + distanceToPoint(t) { + return this.normal.dot(t) + this.constant; + } + distanceToSphere(t) { + return this.distanceToPoint(t.center) - t.radius; + } + projectPoint(t, e) { + return ( + void 0 === e && + (console.warn('THREE.Plane: .projectPoint() target is now required'), + (e = new Lt())), + e.copy(this.normal).multiplyScalar(-this.distanceToPoint(t)).add(t) + ); + } + intersectLine(t, e) { + void 0 === e && + (console.warn('THREE.Plane: .intersectLine() target is now required'), + (e = new Lt())); + const n = t.delta(Pe), + i = this.normal.dot(n); + if (0 === i) + return 0 === this.distanceToPoint(t.start) ? e.copy(t.start) : null; + const r = -(t.start.dot(this.normal) + this.constant) / i; + return r < 0 || r > 1 ? null : e.copy(n).multiplyScalar(r).add(t.start); + } + intersectsLine(t) { + const e = this.distanceToPoint(t.start), + n = this.distanceToPoint(t.end); + return (e < 0 && n > 0) || (n < 0 && e > 0); + } + intersectsBox(t) { + return t.intersectsPlane(this); + } + intersectsSphere(t) { + return t.intersectsPlane(this); + } + coplanarPoint(t) { + return ( + void 0 === t && + (console.warn('THREE.Plane: .coplanarPoint() target is now required'), + (t = new Lt())), + t.copy(this.normal).multiplyScalar(-this.constant) + ); + } + applyMatrix4(t, e) { + const n = e || Ie.getNormalMatrix(t), + i = this.coplanarPoint(Pe).applyMatrix4(t), + r = this.normal.applyMatrix3(n).normalize(); + return (this.constant = -i.dot(r)), this; + } + translate(t) { + return (this.constant -= t.dot(this.normal)), this; + } + equals(t) { + return t.normal.equals(this.normal) && t.constant === this.constant; + } + clone() { + return new this.constructor().copy(this); + } + } + Ne.prototype.isPlane = !0; + const Be = new Lt(), + ze = new Lt(), + Fe = new Lt(), + Oe = new Lt(), + He = new Lt(), + Ge = new Lt(), + Ue = new Lt(), + ke = new Lt(), + Ve = new Lt(), + We = new Lt(); + class je { + constructor(t = new Lt(), e = new Lt(), n = new Lt()) { + (this.a = t), (this.b = e), (this.c = n); + } + static getNormal(t, e, n, i) { + void 0 === i && + (console.warn('THREE.Triangle: .getNormal() target is now required'), + (i = new Lt())), + i.subVectors(n, e), + Be.subVectors(t, e), + i.cross(Be); + const r = i.lengthSq(); + return r > 0 ? i.multiplyScalar(1 / Math.sqrt(r)) : i.set(0, 0, 0); + } + static getBarycoord(t, e, n, i, r) { + Be.subVectors(i, e), ze.subVectors(n, e), Fe.subVectors(t, e); + const s = Be.dot(Be), + a = Be.dot(ze), + o = Be.dot(Fe), + l = ze.dot(ze), + c = ze.dot(Fe), + h = s * l - a * a; + if ( + (void 0 === r && + (console.warn( + 'THREE.Triangle: .getBarycoord() target is now required' + ), + (r = new Lt())), + 0 === h) + ) + return r.set(-2, -1, -1); + const u = 1 / h, + d = (l * o - a * c) * u, + p = (s * c - a * o) * u; + return r.set(1 - d - p, p, d); + } + static containsPoint(t, e, n, i) { + return ( + this.getBarycoord(t, e, n, i, Oe), + Oe.x >= 0 && Oe.y >= 0 && Oe.x + Oe.y <= 1 + ); + } + static getUV(t, e, n, i, r, s, a, o) { + return ( + this.getBarycoord(t, e, n, i, Oe), + o.set(0, 0), + o.addScaledVector(r, Oe.x), + o.addScaledVector(s, Oe.y), + o.addScaledVector(a, Oe.z), + o + ); + } + static isFrontFacing(t, e, n, i) { + return Be.subVectors(n, e), ze.subVectors(t, e), Be.cross(ze).dot(i) < 0; + } + set(t, e, n) { + return this.a.copy(t), this.b.copy(e), this.c.copy(n), this; + } + setFromPointsAndIndices(t, e, n, i) { + return this.a.copy(t[e]), this.b.copy(t[n]), this.c.copy(t[i]), this; + } + clone() { + return new this.constructor().copy(this); + } + copy(t) { + return this.a.copy(t.a), this.b.copy(t.b), this.c.copy(t.c), this; + } + getArea() { + return ( + Be.subVectors(this.c, this.b), + ze.subVectors(this.a, this.b), + 0.5 * Be.cross(ze).length() + ); + } + getMidpoint(t) { + return ( + void 0 === t && + (console.warn( + 'THREE.Triangle: .getMidpoint() target is now required' + ), + (t = new Lt())), + t + .addVectors(this.a, this.b) + .add(this.c) + .multiplyScalar(1 / 3) + ); + } + getNormal(t) { + return je.getNormal(this.a, this.b, this.c, t); + } + getPlane(t) { + return ( + void 0 === t && + (console.warn('THREE.Triangle: .getPlane() target is now required'), + (t = new Ne())), + t.setFromCoplanarPoints(this.a, this.b, this.c) + ); + } + getBarycoord(t, e) { + return je.getBarycoord(t, this.a, this.b, this.c, e); + } + getUV(t, e, n, i, r) { + return je.getUV(t, this.a, this.b, this.c, e, n, i, r); + } + containsPoint(t) { + return je.containsPoint(t, this.a, this.b, this.c); + } + isFrontFacing(t) { + return je.isFrontFacing(this.a, this.b, this.c, t); + } + intersectsBox(t) { + return t.intersectsTriangle(this); + } + closestPointToPoint(t, e) { + void 0 === e && + (console.warn( + 'THREE.Triangle: .closestPointToPoint() target is now required' + ), + (e = new Lt())); + const n = this.a, + i = this.b, + r = this.c; + let s, a; + He.subVectors(i, n), Ge.subVectors(r, n), ke.subVectors(t, n); + const o = He.dot(ke), + l = Ge.dot(ke); + if (o <= 0 && l <= 0) return e.copy(n); + Ve.subVectors(t, i); + const c = He.dot(Ve), + h = Ge.dot(Ve); + if (c >= 0 && h <= c) return e.copy(i); + const u = o * h - c * l; + if (u <= 0 && o >= 0 && c <= 0) + return (s = o / (o - c)), e.copy(n).addScaledVector(He, s); + We.subVectors(t, r); + const d = He.dot(We), + p = Ge.dot(We); + if (p >= 0 && d <= p) return e.copy(r); + const m = d * l - o * p; + if (m <= 0 && l >= 0 && p <= 0) + return (a = l / (l - p)), e.copy(n).addScaledVector(Ge, a); + const f = c * p - d * h; + if (f <= 0 && h - c >= 0 && d - p >= 0) + return ( + Ue.subVectors(r, i), + (a = (h - c) / (h - c + (d - p))), + e.copy(i).addScaledVector(Ue, a) + ); + const g = 1 / (f + m + u); + return ( + (s = m * g), + (a = u * g), + e.copy(n).addScaledVector(He, s).addScaledVector(Ge, a) + ); + } + equals(t) { + return t.a.equals(this.a) && t.b.equals(this.b) && t.c.equals(this.c); + } + } + let qe = 0; + function Xe() { + Object.defineProperty(this, 'id', { value: qe++ }), + (this.uuid = ct()), + (this.name = ''), + (this.type = 'Material'), + (this.fog = !0), + (this.blending = 1), + (this.side = 0), + (this.vertexColors = !1), + (this.opacity = 1), + (this.transparent = !1), + (this.blendSrc = 204), + (this.blendDst = 205), + (this.blendEquation = n), + (this.blendSrcAlpha = null), + (this.blendDstAlpha = null), + (this.blendEquationAlpha = null), + (this.depthFunc = 3), + (this.depthTest = !0), + (this.depthWrite = !0), + (this.stencilWriteMask = 255), + (this.stencilFunc = 519), + (this.stencilRef = 0), + (this.stencilFuncMask = 255), + (this.stencilFail = tt), + (this.stencilZFail = tt), + (this.stencilZPass = tt), + (this.stencilWrite = !1), + (this.clippingPlanes = null), + (this.clipIntersection = !1), + (this.clipShadows = !1), + (this.shadowSide = null), + (this.colorWrite = !0), + (this.precision = null), + (this.polygonOffset = !1), + (this.polygonOffsetFactor = 0), + (this.polygonOffsetUnits = 0), + (this.dithering = !1), + (this.alphaTest = 0), + (this.alphaToCoverage = !1), + (this.premultipliedAlpha = !1), + (this.visible = !0), + (this.toneMapped = !0), + (this.userData = {}), + (this.version = 0); + } + (Xe.prototype = Object.assign(Object.create(rt.prototype), { + constructor: Xe, + isMaterial: !0, + onBuild: function () {}, + onBeforeCompile: function () {}, + customProgramCacheKey: function () { + return this.onBeforeCompile.toString(); + }, + setValues: function (t) { + if (void 0 !== t) + for (const e in t) { + const n = t[e]; + if (void 0 === n) { + console.warn("THREE.Material: '" + e + "' parameter is undefined."); + continue; + } + if ('shading' === e) { + console.warn( + 'THREE.' + + this.type + + ': .shading has been removed. Use the boolean .flatShading instead.' + ), + (this.flatShading = 1 === n); + continue; + } + const i = this[e]; + void 0 !== i + ? i && i.isColor + ? i.set(n) + : i && i.isVector3 && n && n.isVector3 + ? i.copy(n) + : (this[e] = n) + : console.warn( + 'THREE.' + + this.type + + ": '" + + e + + "' is not a property of this material." + ); + } + }, + toJSON: function (t) { + const e = void 0 === t || 'string' == typeof t; + e && (t = { textures: {}, images: {} }); + const n = { + metadata: { + version: 4.5, + type: 'Material', + generator: 'Material.toJSON', + }, + }; + function i(t) { + const e = []; + for (const n in t) { + const i = t[n]; + delete i.metadata, e.push(i); + } + return e; + } + if ( + ((n.uuid = this.uuid), + (n.type = this.type), + '' !== this.name && (n.name = this.name), + this.color && this.color.isColor && (n.color = this.color.getHex()), + void 0 !== this.roughness && (n.roughness = this.roughness), + void 0 !== this.metalness && (n.metalness = this.metalness), + this.sheen && this.sheen.isColor && (n.sheen = this.sheen.getHex()), + this.emissive && + this.emissive.isColor && + (n.emissive = this.emissive.getHex()), + this.emissiveIntensity && + 1 !== this.emissiveIntensity && + (n.emissiveIntensity = this.emissiveIntensity), + this.specular && + this.specular.isColor && + (n.specular = this.specular.getHex()), + void 0 !== this.shininess && (n.shininess = this.shininess), + void 0 !== this.clearcoat && (n.clearcoat = this.clearcoat), + void 0 !== this.clearcoatRoughness && + (n.clearcoatRoughness = this.clearcoatRoughness), + this.clearcoatMap && + this.clearcoatMap.isTexture && + (n.clearcoatMap = this.clearcoatMap.toJSON(t).uuid), + this.clearcoatRoughnessMap && + this.clearcoatRoughnessMap.isTexture && + (n.clearcoatRoughnessMap = this.clearcoatRoughnessMap.toJSON(t).uuid), + this.clearcoatNormalMap && + this.clearcoatNormalMap.isTexture && + ((n.clearcoatNormalMap = this.clearcoatNormalMap.toJSON(t).uuid), + (n.clearcoatNormalScale = this.clearcoatNormalScale.toArray())), + this.map && this.map.isTexture && (n.map = this.map.toJSON(t).uuid), + this.matcap && + this.matcap.isTexture && + (n.matcap = this.matcap.toJSON(t).uuid), + this.alphaMap && + this.alphaMap.isTexture && + (n.alphaMap = this.alphaMap.toJSON(t).uuid), + this.lightMap && + this.lightMap.isTexture && + ((n.lightMap = this.lightMap.toJSON(t).uuid), + (n.lightMapIntensity = this.lightMapIntensity)), + this.aoMap && + this.aoMap.isTexture && + ((n.aoMap = this.aoMap.toJSON(t).uuid), + (n.aoMapIntensity = this.aoMapIntensity)), + this.bumpMap && + this.bumpMap.isTexture && + ((n.bumpMap = this.bumpMap.toJSON(t).uuid), + (n.bumpScale = this.bumpScale)), + this.normalMap && + this.normalMap.isTexture && + ((n.normalMap = this.normalMap.toJSON(t).uuid), + (n.normalMapType = this.normalMapType), + (n.normalScale = this.normalScale.toArray())), + this.displacementMap && + this.displacementMap.isTexture && + ((n.displacementMap = this.displacementMap.toJSON(t).uuid), + (n.displacementScale = this.displacementScale), + (n.displacementBias = this.displacementBias)), + this.roughnessMap && + this.roughnessMap.isTexture && + (n.roughnessMap = this.roughnessMap.toJSON(t).uuid), + this.metalnessMap && + this.metalnessMap.isTexture && + (n.metalnessMap = this.metalnessMap.toJSON(t).uuid), + this.emissiveMap && + this.emissiveMap.isTexture && + (n.emissiveMap = this.emissiveMap.toJSON(t).uuid), + this.specularMap && + this.specularMap.isTexture && + (n.specularMap = this.specularMap.toJSON(t).uuid), + this.envMap && + this.envMap.isTexture && + ((n.envMap = this.envMap.toJSON(t).uuid), + void 0 !== this.combine && (n.combine = this.combine)), + void 0 !== this.envMapIntensity && + (n.envMapIntensity = this.envMapIntensity), + void 0 !== this.reflectivity && (n.reflectivity = this.reflectivity), + void 0 !== this.refractionRatio && + (n.refractionRatio = this.refractionRatio), + this.gradientMap && + this.gradientMap.isTexture && + (n.gradientMap = this.gradientMap.toJSON(t).uuid), + void 0 !== this.size && (n.size = this.size), + null !== this.shadowSide && (n.shadowSide = this.shadowSide), + void 0 !== this.sizeAttenuation && + (n.sizeAttenuation = this.sizeAttenuation), + 1 !== this.blending && (n.blending = this.blending), + 0 !== this.side && (n.side = this.side), + this.vertexColors && (n.vertexColors = !0), + this.opacity < 1 && (n.opacity = this.opacity), + !0 === this.transparent && (n.transparent = this.transparent), + (n.depthFunc = this.depthFunc), + (n.depthTest = this.depthTest), + (n.depthWrite = this.depthWrite), + (n.colorWrite = this.colorWrite), + (n.stencilWrite = this.stencilWrite), + (n.stencilWriteMask = this.stencilWriteMask), + (n.stencilFunc = this.stencilFunc), + (n.stencilRef = this.stencilRef), + (n.stencilFuncMask = this.stencilFuncMask), + (n.stencilFail = this.stencilFail), + (n.stencilZFail = this.stencilZFail), + (n.stencilZPass = this.stencilZPass), + this.rotation && 0 !== this.rotation && (n.rotation = this.rotation), + !0 === this.polygonOffset && (n.polygonOffset = !0), + 0 !== this.polygonOffsetFactor && + (n.polygonOffsetFactor = this.polygonOffsetFactor), + 0 !== this.polygonOffsetUnits && + (n.polygonOffsetUnits = this.polygonOffsetUnits), + this.linewidth && + 1 !== this.linewidth && + (n.linewidth = this.linewidth), + void 0 !== this.dashSize && (n.dashSize = this.dashSize), + void 0 !== this.gapSize && (n.gapSize = this.gapSize), + void 0 !== this.scale && (n.scale = this.scale), + !0 === this.dithering && (n.dithering = !0), + this.alphaTest > 0 && (n.alphaTest = this.alphaTest), + !0 === this.alphaToCoverage && + (n.alphaToCoverage = this.alphaToCoverage), + !0 === this.premultipliedAlpha && + (n.premultipliedAlpha = this.premultipliedAlpha), + !0 === this.wireframe && (n.wireframe = this.wireframe), + this.wireframeLinewidth > 1 && + (n.wireframeLinewidth = this.wireframeLinewidth), + 'round' !== this.wireframeLinecap && + (n.wireframeLinecap = this.wireframeLinecap), + 'round' !== this.wireframeLinejoin && + (n.wireframeLinejoin = this.wireframeLinejoin), + !0 === this.morphTargets && (n.morphTargets = !0), + !0 === this.morphNormals && (n.morphNormals = !0), + !0 === this.skinning && (n.skinning = !0), + !0 === this.flatShading && (n.flatShading = this.flatShading), + !1 === this.visible && (n.visible = !1), + !1 === this.toneMapped && (n.toneMapped = !1), + '{}' !== JSON.stringify(this.userData) && (n.userData = this.userData), + e) + ) { + const e = i(t.textures), + r = i(t.images); + e.length > 0 && (n.textures = e), r.length > 0 && (n.images = r); + } + return n; + }, + clone: function () { + return new this.constructor().copy(this); + }, + copy: function (t) { + (this.name = t.name), + (this.fog = t.fog), + (this.blending = t.blending), + (this.side = t.side), + (this.vertexColors = t.vertexColors), + (this.opacity = t.opacity), + (this.transparent = t.transparent), + (this.blendSrc = t.blendSrc), + (this.blendDst = t.blendDst), + (this.blendEquation = t.blendEquation), + (this.blendSrcAlpha = t.blendSrcAlpha), + (this.blendDstAlpha = t.blendDstAlpha), + (this.blendEquationAlpha = t.blendEquationAlpha), + (this.depthFunc = t.depthFunc), + (this.depthTest = t.depthTest), + (this.depthWrite = t.depthWrite), + (this.stencilWriteMask = t.stencilWriteMask), + (this.stencilFunc = t.stencilFunc), + (this.stencilRef = t.stencilRef), + (this.stencilFuncMask = t.stencilFuncMask), + (this.stencilFail = t.stencilFail), + (this.stencilZFail = t.stencilZFail), + (this.stencilZPass = t.stencilZPass), + (this.stencilWrite = t.stencilWrite); + const e = t.clippingPlanes; + let n = null; + if (null !== e) { + const t = e.length; + n = new Array(t); + for (let i = 0; i !== t; ++i) n[i] = e[i].clone(); + } + return ( + (this.clippingPlanes = n), + (this.clipIntersection = t.clipIntersection), + (this.clipShadows = t.clipShadows), + (this.shadowSide = t.shadowSide), + (this.colorWrite = t.colorWrite), + (this.precision = t.precision), + (this.polygonOffset = t.polygonOffset), + (this.polygonOffsetFactor = t.polygonOffsetFactor), + (this.polygonOffsetUnits = t.polygonOffsetUnits), + (this.dithering = t.dithering), + (this.alphaTest = t.alphaTest), + (this.alphaToCoverage = t.alphaToCoverage), + (this.premultipliedAlpha = t.premultipliedAlpha), + (this.visible = t.visible), + (this.toneMapped = t.toneMapped), + (this.userData = JSON.parse(JSON.stringify(t.userData))), + this + ); + }, + dispose: function () { + this.dispatchEvent({ type: 'dispose' }); + }, + })), + Object.defineProperty(Xe.prototype, 'needsUpdate', { + set: function (t) { + !0 === t && this.version++; + }, + }); + const Ye = { + aliceblue: 15792383, + antiquewhite: 16444375, + aqua: 65535, + aquamarine: 8388564, + azure: 15794175, + beige: 16119260, + bisque: 16770244, + black: 0, + blanchedalmond: 16772045, + blue: 255, + blueviolet: 9055202, + brown: 10824234, + burlywood: 14596231, + cadetblue: 6266528, + chartreuse: 8388352, + chocolate: 13789470, + coral: 16744272, + cornflowerblue: 6591981, + cornsilk: 16775388, + crimson: 14423100, + cyan: 65535, + darkblue: 139, + darkcyan: 35723, + darkgoldenrod: 12092939, + darkgray: 11119017, + darkgreen: 25600, + darkgrey: 11119017, + darkkhaki: 12433259, + darkmagenta: 9109643, + darkolivegreen: 5597999, + darkorange: 16747520, + darkorchid: 10040012, + darkred: 9109504, + darksalmon: 15308410, + darkseagreen: 9419919, + darkslateblue: 4734347, + darkslategray: 3100495, + darkslategrey: 3100495, + darkturquoise: 52945, + darkviolet: 9699539, + deeppink: 16716947, + deepskyblue: 49151, + dimgray: 6908265, + dimgrey: 6908265, + dodgerblue: 2003199, + firebrick: 11674146, + floralwhite: 16775920, + forestgreen: 2263842, + fuchsia: 16711935, + gainsboro: 14474460, + ghostwhite: 16316671, + gold: 16766720, + goldenrod: 14329120, + gray: 8421504, + green: 32768, + greenyellow: 11403055, + grey: 8421504, + honeydew: 15794160, + hotpink: 16738740, + indianred: 13458524, + indigo: 4915330, + ivory: 16777200, + khaki: 15787660, + lavender: 15132410, + lavenderblush: 16773365, + lawngreen: 8190976, + lemonchiffon: 16775885, + lightblue: 11393254, + lightcoral: 15761536, + lightcyan: 14745599, + lightgoldenrodyellow: 16448210, + lightgray: 13882323, + lightgreen: 9498256, + lightgrey: 13882323, + lightpink: 16758465, + lightsalmon: 16752762, + lightseagreen: 2142890, + lightskyblue: 8900346, + lightslategray: 7833753, + lightslategrey: 7833753, + lightsteelblue: 11584734, + lightyellow: 16777184, + lime: 65280, + limegreen: 3329330, + linen: 16445670, + magenta: 16711935, + maroon: 8388608, + mediumaquamarine: 6737322, + mediumblue: 205, + mediumorchid: 12211667, + mediumpurple: 9662683, + mediumseagreen: 3978097, + mediumslateblue: 8087790, + mediumspringgreen: 64154, + mediumturquoise: 4772300, + mediumvioletred: 13047173, + midnightblue: 1644912, + mintcream: 16121850, + mistyrose: 16770273, + moccasin: 16770229, + navajowhite: 16768685, + navy: 128, + oldlace: 16643558, + olive: 8421376, + olivedrab: 7048739, + orange: 16753920, + orangered: 16729344, + orchid: 14315734, + palegoldenrod: 15657130, + palegreen: 10025880, + paleturquoise: 11529966, + palevioletred: 14381203, + papayawhip: 16773077, + peachpuff: 16767673, + peru: 13468991, + pink: 16761035, + plum: 14524637, + powderblue: 11591910, + purple: 8388736, + rebeccapurple: 6697881, + red: 16711680, + rosybrown: 12357519, + royalblue: 4286945, + saddlebrown: 9127187, + salmon: 16416882, + sandybrown: 16032864, + seagreen: 3050327, + seashell: 16774638, + sienna: 10506797, + silver: 12632256, + skyblue: 8900331, + slateblue: 6970061, + slategray: 7372944, + slategrey: 7372944, + snow: 16775930, + springgreen: 65407, + steelblue: 4620980, + tan: 13808780, + teal: 32896, + thistle: 14204888, + tomato: 16737095, + turquoise: 4251856, + violet: 15631086, + wheat: 16113331, + white: 16777215, + whitesmoke: 16119285, + yellow: 16776960, + yellowgreen: 10145074, + }, + Ze = { h: 0, s: 0, l: 0 }, + Je = { h: 0, s: 0, l: 0 }; + function Qe(t, e, n) { + return ( + n < 0 && (n += 1), + n > 1 && (n -= 1), + n < 1 / 6 + ? t + 6 * (e - t) * n + : n < 0.5 + ? e + : n < 2 / 3 + ? t + 6 * (e - t) * (2 / 3 - n) + : t + ); + } + function Ke(t) { + return t < 0.04045 + ? 0.0773993808 * t + : Math.pow(0.9478672986 * t + 0.0521327014, 2.4); + } + function $e(t) { + return t < 0.0031308 ? 12.92 * t : 1.055 * Math.pow(t, 0.41666) - 0.055; + } + class tn { + constructor(t, e, n) { + return void 0 === e && void 0 === n ? this.set(t) : this.setRGB(t, e, n); + } + set(t) { + return ( + t && t.isColor + ? this.copy(t) + : 'number' == typeof t + ? this.setHex(t) + : 'string' == typeof t && this.setStyle(t), + this + ); + } + setScalar(t) { + return (this.r = t), (this.g = t), (this.b = t), this; + } + setHex(t) { + return ( + (t = Math.floor(t)), + (this.r = ((t >> 16) & 255) / 255), + (this.g = ((t >> 8) & 255) / 255), + (this.b = (255 & t) / 255), + this + ); + } + setRGB(t, e, n) { + return (this.r = t), (this.g = e), (this.b = n), this; + } + setHSL(t, e, n) { + if (((t = ut(t, 1)), (e = ht(e, 0, 1)), (n = ht(n, 0, 1)), 0 === e)) + this.r = this.g = this.b = n; + else { + const i = n <= 0.5 ? n * (1 + e) : n + e - n * e, + r = 2 * n - i; + (this.r = Qe(r, i, t + 1 / 3)), + (this.g = Qe(r, i, t)), + (this.b = Qe(r, i, t - 1 / 3)); + } + return this; + } + setStyle(t) { + function e(e) { + void 0 !== e && + parseFloat(e) < 1 && + console.warn( + 'THREE.Color: Alpha component of ' + t + ' will be ignored.' + ); + } + let n; + if ((n = /^((?:rgb|hsl)a?)\(([^\)]*)\)/.exec(t))) { + let t; + const i = n[1], + r = n[2]; + switch (i) { + case 'rgb': + case 'rgba': + if ( + (t = + /^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec( + r + )) + ) + return ( + (this.r = Math.min(255, parseInt(t[1], 10)) / 255), + (this.g = Math.min(255, parseInt(t[2], 10)) / 255), + (this.b = Math.min(255, parseInt(t[3], 10)) / 255), + e(t[4]), + this + ); + if ( + (t = + /^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec( + r + )) + ) + return ( + (this.r = Math.min(100, parseInt(t[1], 10)) / 100), + (this.g = Math.min(100, parseInt(t[2], 10)) / 100), + (this.b = Math.min(100, parseInt(t[3], 10)) / 100), + e(t[4]), + this + ); + break; + case 'hsl': + case 'hsla': + if ( + (t = + /^\s*(\d*\.?\d+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec( + r + )) + ) { + const n = parseFloat(t[1]) / 360, + i = parseInt(t[2], 10) / 100, + r = parseInt(t[3], 10) / 100; + return e(t[4]), this.setHSL(n, i, r); + } + } + } else if ((n = /^\#([A-Fa-f\d]+)$/.exec(t))) { + const t = n[1], + e = t.length; + if (3 === e) + return ( + (this.r = parseInt(t.charAt(0) + t.charAt(0), 16) / 255), + (this.g = parseInt(t.charAt(1) + t.charAt(1), 16) / 255), + (this.b = parseInt(t.charAt(2) + t.charAt(2), 16) / 255), + this + ); + if (6 === e) + return ( + (this.r = parseInt(t.charAt(0) + t.charAt(1), 16) / 255), + (this.g = parseInt(t.charAt(2) + t.charAt(3), 16) / 255), + (this.b = parseInt(t.charAt(4) + t.charAt(5), 16) / 255), + this + ); + } + return t && t.length > 0 ? this.setColorName(t) : this; + } + setColorName(t) { + const e = Ye[t.toLowerCase()]; + return ( + void 0 !== e + ? this.setHex(e) + : console.warn('THREE.Color: Unknown color ' + t), + this + ); + } + clone() { + return new this.constructor(this.r, this.g, this.b); + } + copy(t) { + return (this.r = t.r), (this.g = t.g), (this.b = t.b), this; + } + copyGammaToLinear(t, e = 2) { + return ( + (this.r = Math.pow(t.r, e)), + (this.g = Math.pow(t.g, e)), + (this.b = Math.pow(t.b, e)), + this + ); + } + copyLinearToGamma(t, e = 2) { + const n = e > 0 ? 1 / e : 1; + return ( + (this.r = Math.pow(t.r, n)), + (this.g = Math.pow(t.g, n)), + (this.b = Math.pow(t.b, n)), + this + ); + } + convertGammaToLinear(t) { + return this.copyGammaToLinear(this, t), this; + } + convertLinearToGamma(t) { + return this.copyLinearToGamma(this, t), this; + } + copySRGBToLinear(t) { + return (this.r = Ke(t.r)), (this.g = Ke(t.g)), (this.b = Ke(t.b)), this; + } + copyLinearToSRGB(t) { + return (this.r = $e(t.r)), (this.g = $e(t.g)), (this.b = $e(t.b)), this; + } + convertSRGBToLinear() { + return this.copySRGBToLinear(this), this; + } + convertLinearToSRGB() { + return this.copyLinearToSRGB(this), this; + } + getHex() { + return ( + ((255 * this.r) << 16) ^ ((255 * this.g) << 8) ^ ((255 * this.b) << 0) + ); + } + getHexString() { + return ('000000' + this.getHex().toString(16)).slice(-6); + } + getHSL(t) { + void 0 === t && + (console.warn('THREE.Color: .getHSL() target is now required'), + (t = { h: 0, s: 0, l: 0 })); + const e = this.r, + n = this.g, + i = this.b, + r = Math.max(e, n, i), + s = Math.min(e, n, i); + let a, o; + const l = (s + r) / 2; + if (s === r) (a = 0), (o = 0); + else { + const t = r - s; + switch (((o = l <= 0.5 ? t / (r + s) : t / (2 - r - s)), r)) { + case e: + a = (n - i) / t + (n < i ? 6 : 0); + break; + case n: + a = (i - e) / t + 2; + break; + case i: + a = (e - n) / t + 4; + } + a /= 6; + } + return (t.h = a), (t.s = o), (t.l = l), t; + } + getStyle() { + return ( + 'rgb(' + + ((255 * this.r) | 0) + + ',' + + ((255 * this.g) | 0) + + ',' + + ((255 * this.b) | 0) + + ')' + ); + } + offsetHSL(t, e, n) { + return ( + this.getHSL(Ze), + (Ze.h += t), + (Ze.s += e), + (Ze.l += n), + this.setHSL(Ze.h, Ze.s, Ze.l), + this + ); + } + add(t) { + return (this.r += t.r), (this.g += t.g), (this.b += t.b), this; + } + addColors(t, e) { + return ( + (this.r = t.r + e.r), (this.g = t.g + e.g), (this.b = t.b + e.b), this + ); + } + addScalar(t) { + return (this.r += t), (this.g += t), (this.b += t), this; + } + sub(t) { + return ( + (this.r = Math.max(0, this.r - t.r)), + (this.g = Math.max(0, this.g - t.g)), + (this.b = Math.max(0, this.b - t.b)), + this + ); + } + multiply(t) { + return (this.r *= t.r), (this.g *= t.g), (this.b *= t.b), this; + } + multiplyScalar(t) { + return (this.r *= t), (this.g *= t), (this.b *= t), this; + } + lerp(t, e) { + return ( + (this.r += (t.r - this.r) * e), + (this.g += (t.g - this.g) * e), + (this.b += (t.b - this.b) * e), + this + ); + } + lerpColors(t, e, n) { + return ( + (this.r = t.r + (e.r - t.r) * n), + (this.g = t.g + (e.g - t.g) * n), + (this.b = t.b + (e.b - t.b) * n), + this + ); + } + lerpHSL(t, e) { + this.getHSL(Ze), t.getHSL(Je); + const n = dt(Ze.h, Je.h, e), + i = dt(Ze.s, Je.s, e), + r = dt(Ze.l, Je.l, e); + return this.setHSL(n, i, r), this; + } + equals(t) { + return t.r === this.r && t.g === this.g && t.b === this.b; + } + fromArray(t, e = 0) { + return (this.r = t[e]), (this.g = t[e + 1]), (this.b = t[e + 2]), this; + } + toArray(t = [], e = 0) { + return (t[e] = this.r), (t[e + 1] = this.g), (t[e + 2] = this.b), t; + } + fromBufferAttribute(t, e) { + return ( + (this.r = t.getX(e)), + (this.g = t.getY(e)), + (this.b = t.getZ(e)), + !0 === t.normalized && + ((this.r /= 255), (this.g /= 255), (this.b /= 255)), + this + ); + } + toJSON() { + return this.getHex(); + } + } + (tn.NAMES = Ye), + (tn.prototype.isColor = !0), + (tn.prototype.r = 1), + (tn.prototype.g = 1), + (tn.prototype.b = 1); + class en extends Xe { + constructor(t) { + super(), + (this.type = 'MeshBasicMaterial'), + (this.color = new tn(16777215)), + (this.map = null), + (this.lightMap = null), + (this.lightMapIntensity = 1), + (this.aoMap = null), + (this.aoMapIntensity = 1), + (this.specularMap = null), + (this.alphaMap = null), + (this.envMap = null), + (this.combine = 0), + (this.reflectivity = 1), + (this.refractionRatio = 0.98), + (this.wireframe = !1), + (this.wireframeLinewidth = 1), + (this.wireframeLinecap = 'round'), + (this.wireframeLinejoin = 'round'), + (this.skinning = !1), + (this.morphTargets = !1), + this.setValues(t); + } + copy(t) { + return ( + super.copy(t), + this.color.copy(t.color), + (this.map = t.map), + (this.lightMap = t.lightMap), + (this.lightMapIntensity = t.lightMapIntensity), + (this.aoMap = t.aoMap), + (this.aoMapIntensity = t.aoMapIntensity), + (this.specularMap = t.specularMap), + (this.alphaMap = t.alphaMap), + (this.envMap = t.envMap), + (this.combine = t.combine), + (this.reflectivity = t.reflectivity), + (this.refractionRatio = t.refractionRatio), + (this.wireframe = t.wireframe), + (this.wireframeLinewidth = t.wireframeLinewidth), + (this.wireframeLinecap = t.wireframeLinecap), + (this.wireframeLinejoin = t.wireframeLinejoin), + (this.skinning = t.skinning), + (this.morphTargets = t.morphTargets), + this + ); + } + } + en.prototype.isMeshBasicMaterial = !0; + const nn = new Lt(), + rn = new vt(); + class sn { + constructor(t, e, n) { + if (Array.isArray(t)) + throw new TypeError( + 'THREE.BufferAttribute: array should be a Typed Array.' + ); + (this.name = ''), + (this.array = t), + (this.itemSize = e), + (this.count = void 0 !== t ? t.length / e : 0), + (this.normalized = !0 === n), + (this.usage = et), + (this.updateRange = { offset: 0, count: -1 }), + (this.version = 0), + (this.onUploadCallback = function () {}); + } + set needsUpdate(t) { + !0 === t && this.version++; + } + setUsage(t) { + return (this.usage = t), this; + } + copy(t) { + return ( + (this.name = t.name), + (this.array = new t.array.constructor(t.array)), + (this.itemSize = t.itemSize), + (this.count = t.count), + (this.normalized = t.normalized), + (this.usage = t.usage), + this + ); + } + copyAt(t, e, n) { + (t *= this.itemSize), (n *= e.itemSize); + for (let i = 0, r = this.itemSize; i < r; i++) + this.array[t + i] = e.array[n + i]; + return this; + } + copyArray(t) { + return this.array.set(t), this; + } + copyColorsArray(t) { + const e = this.array; + let n = 0; + for (let i = 0, r = t.length; i < r; i++) { + let r = t[i]; + void 0 === r && + (console.warn( + 'THREE.BufferAttribute.copyColorsArray(): color is undefined', + i + ), + (r = new tn())), + (e[n++] = r.r), + (e[n++] = r.g), + (e[n++] = r.b); + } + return this; + } + copyVector2sArray(t) { + const e = this.array; + let n = 0; + for (let i = 0, r = t.length; i < r; i++) { + let r = t[i]; + void 0 === r && + (console.warn( + 'THREE.BufferAttribute.copyVector2sArray(): vector is undefined', + i + ), + (r = new vt())), + (e[n++] = r.x), + (e[n++] = r.y); + } + return this; + } + copyVector3sArray(t) { + const e = this.array; + let n = 0; + for (let i = 0, r = t.length; i < r; i++) { + let r = t[i]; + void 0 === r && + (console.warn( + 'THREE.BufferAttribute.copyVector3sArray(): vector is undefined', + i + ), + (r = new Lt())), + (e[n++] = r.x), + (e[n++] = r.y), + (e[n++] = r.z); + } + return this; + } + copyVector4sArray(t) { + const e = this.array; + let n = 0; + for (let i = 0, r = t.length; i < r; i++) { + let r = t[i]; + void 0 === r && + (console.warn( + 'THREE.BufferAttribute.copyVector4sArray(): vector is undefined', + i + ), + (r = new St())), + (e[n++] = r.x), + (e[n++] = r.y), + (e[n++] = r.z), + (e[n++] = r.w); + } + return this; + } + applyMatrix3(t) { + if (2 === this.itemSize) + for (let e = 0, n = this.count; e < n; e++) + rn.fromBufferAttribute(this, e), + rn.applyMatrix3(t), + this.setXY(e, rn.x, rn.y); + else if (3 === this.itemSize) + for (let e = 0, n = this.count; e < n; e++) + nn.fromBufferAttribute(this, e), + nn.applyMatrix3(t), + this.setXYZ(e, nn.x, nn.y, nn.z); + return this; + } + applyMatrix4(t) { + for (let e = 0, n = this.count; e < n; e++) + (nn.x = this.getX(e)), + (nn.y = this.getY(e)), + (nn.z = this.getZ(e)), + nn.applyMatrix4(t), + this.setXYZ(e, nn.x, nn.y, nn.z); + return this; + } + applyNormalMatrix(t) { + for (let e = 0, n = this.count; e < n; e++) + (nn.x = this.getX(e)), + (nn.y = this.getY(e)), + (nn.z = this.getZ(e)), + nn.applyNormalMatrix(t), + this.setXYZ(e, nn.x, nn.y, nn.z); + return this; + } + transformDirection(t) { + for (let e = 0, n = this.count; e < n; e++) + (nn.x = this.getX(e)), + (nn.y = this.getY(e)), + (nn.z = this.getZ(e)), + nn.transformDirection(t), + this.setXYZ(e, nn.x, nn.y, nn.z); + return this; + } + set(t, e = 0) { + return this.array.set(t, e), this; + } + getX(t) { + return this.array[t * this.itemSize]; + } + setX(t, e) { + return (this.array[t * this.itemSize] = e), this; + } + getY(t) { + return this.array[t * this.itemSize + 1]; + } + setY(t, e) { + return (this.array[t * this.itemSize + 1] = e), this; + } + getZ(t) { + return this.array[t * this.itemSize + 2]; + } + setZ(t, e) { + return (this.array[t * this.itemSize + 2] = e), this; + } + getW(t) { + return this.array[t * this.itemSize + 3]; + } + setW(t, e) { + return (this.array[t * this.itemSize + 3] = e), this; + } + setXY(t, e, n) { + return ( + (t *= this.itemSize), + (this.array[t + 0] = e), + (this.array[t + 1] = n), + this + ); + } + setXYZ(t, e, n, i) { + return ( + (t *= this.itemSize), + (this.array[t + 0] = e), + (this.array[t + 1] = n), + (this.array[t + 2] = i), + this + ); + } + setXYZW(t, e, n, i, r) { + return ( + (t *= this.itemSize), + (this.array[t + 0] = e), + (this.array[t + 1] = n), + (this.array[t + 2] = i), + (this.array[t + 3] = r), + this + ); + } + onUpload(t) { + return (this.onUploadCallback = t), this; + } + clone() { + return new this.constructor(this.array, this.itemSize).copy(this); + } + toJSON() { + const t = { + itemSize: this.itemSize, + type: this.array.constructor.name, + array: Array.prototype.slice.call(this.array), + normalized: this.normalized, + }; + return ( + '' !== this.name && (t.name = this.name), + this.usage !== et && (t.usage = this.usage), + (0 === this.updateRange.offset && -1 === this.updateRange.count) || + (t.updateRange = this.updateRange), + t + ); + } + } + sn.prototype.isBufferAttribute = !0; + class an extends sn { + constructor(t, e, n) { + super(new Int8Array(t), e, n); + } + } + class on extends sn { + constructor(t, e, n) { + super(new Uint8Array(t), e, n); + } + } + class ln extends sn { + constructor(t, e, n) { + super(new Uint8ClampedArray(t), e, n); + } + } + class cn extends sn { + constructor(t, e, n) { + super(new Int16Array(t), e, n); + } + } + class hn extends sn { + constructor(t, e, n) { + super(new Uint16Array(t), e, n); + } + } + class un extends sn { + constructor(t, e, n) { + super(new Int32Array(t), e, n); + } + } + class dn extends sn { + constructor(t, e, n) { + super(new Uint32Array(t), e, n); + } + } + class pn extends sn { + constructor(t, e, n) { + super(new Uint16Array(t), e, n); + } + } + pn.prototype.isFloat16BufferAttribute = !0; + class mn extends sn { + constructor(t, e, n) { + super(new Float32Array(t), e, n); + } + } + class fn extends sn { + constructor(t, e, n) { + super(new Float64Array(t), e, n); + } + } + function gn(t) { + if (0 === t.length) return -1 / 0; + let e = t[0]; + for (let n = 1, i = t.length; n < i; ++n) t[n] > e && (e = t[n]); + return e; + } + const vn = { + Int8Array: Int8Array, + Uint8Array: Uint8Array, + Uint8ClampedArray: Uint8ClampedArray, + Int16Array: Int16Array, + Uint16Array: Uint16Array, + Int32Array: Int32Array, + Uint32Array: Uint32Array, + Float32Array: Float32Array, + Float64Array: Float64Array, + }; + function yn(t, e) { + return new vn[t](e); + } + let xn = 0; + const _n = new se(), + wn = new Ce(), + bn = new Lt(), + Mn = new Pt(), + Sn = new Pt(), + Tn = new Lt(); + class En extends rt { + constructor() { + super(), + Object.defineProperty(this, 'id', { value: xn++ }), + (this.uuid = ct()), + (this.name = ''), + (this.type = 'BufferGeometry'), + (this.index = null), + (this.attributes = {}), + (this.morphAttributes = {}), + (this.morphTargetsRelative = !1), + (this.groups = []), + (this.boundingBox = null), + (this.boundingSphere = null), + (this.drawRange = { start: 0, count: 1 / 0 }), + (this.userData = {}); + } + getIndex() { + return this.index; + } + setIndex(t) { + return ( + Array.isArray(t) + ? (this.index = new (gn(t) > 65535 ? dn : hn)(t, 1)) + : (this.index = t), + this + ); + } + getAttribute(t) { + return this.attributes[t]; + } + setAttribute(t, e) { + return (this.attributes[t] = e), this; + } + deleteAttribute(t) { + return delete this.attributes[t], this; + } + hasAttribute(t) { + return void 0 !== this.attributes[t]; + } + addGroup(t, e, n = 0) { + this.groups.push({ start: t, count: e, materialIndex: n }); + } + clearGroups() { + this.groups = []; + } + setDrawRange(t, e) { + (this.drawRange.start = t), (this.drawRange.count = e); + } + applyMatrix4(t) { + const e = this.attributes.position; + void 0 !== e && (e.applyMatrix4(t), (e.needsUpdate = !0)); + const n = this.attributes.normal; + if (void 0 !== n) { + const e = new yt().getNormalMatrix(t); + n.applyNormalMatrix(e), (n.needsUpdate = !0); + } + const i = this.attributes.tangent; + return ( + void 0 !== i && (i.transformDirection(t), (i.needsUpdate = !0)), + null !== this.boundingBox && this.computeBoundingBox(), + null !== this.boundingSphere && this.computeBoundingSphere(), + this + ); + } + rotateX(t) { + return _n.makeRotationX(t), this.applyMatrix4(_n), this; + } + rotateY(t) { + return _n.makeRotationY(t), this.applyMatrix4(_n), this; + } + rotateZ(t) { + return _n.makeRotationZ(t), this.applyMatrix4(_n), this; + } + translate(t, e, n) { + return _n.makeTranslation(t, e, n), this.applyMatrix4(_n), this; + } + scale(t, e, n) { + return _n.makeScale(t, e, n), this.applyMatrix4(_n), this; + } + lookAt(t) { + return ( + wn.lookAt(t), wn.updateMatrix(), this.applyMatrix4(wn.matrix), this + ); + } + center() { + return ( + this.computeBoundingBox(), + this.boundingBox.getCenter(bn).negate(), + this.translate(bn.x, bn.y, bn.z), + this + ); + } + setFromPoints(t) { + const e = []; + for (let n = 0, i = t.length; n < i; n++) { + const i = t[n]; + e.push(i.x, i.y, i.z || 0); + } + return this.setAttribute('position', new mn(e, 3)), this; + } + computeBoundingBox() { + null === this.boundingBox && (this.boundingBox = new Pt()); + const t = this.attributes.position, + e = this.morphAttributes.position; + if (t && t.isGLBufferAttribute) + return ( + console.error( + 'THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box. Alternatively set "mesh.frustumCulled" to "false".', + this + ), + void this.boundingBox.set( + new Lt(-1 / 0, -1 / 0, -1 / 0), + new Lt(1 / 0, 1 / 0, 1 / 0) + ) + ); + if (void 0 !== t) { + if ((this.boundingBox.setFromBufferAttribute(t), e)) + for (let t = 0, n = e.length; t < n; t++) { + const n = e[t]; + Mn.setFromBufferAttribute(n), + this.morphTargetsRelative + ? (Tn.addVectors(this.boundingBox.min, Mn.min), + this.boundingBox.expandByPoint(Tn), + Tn.addVectors(this.boundingBox.max, Mn.max), + this.boundingBox.expandByPoint(Tn)) + : (this.boundingBox.expandByPoint(Mn.min), + this.boundingBox.expandByPoint(Mn.max)); + } + } else this.boundingBox.makeEmpty(); + (isNaN(this.boundingBox.min.x) || + isNaN(this.boundingBox.min.y) || + isNaN(this.boundingBox.min.z)) && + console.error( + 'THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The "position" attribute is likely to have NaN values.', + this + ); + } + computeBoundingSphere() { + null === this.boundingSphere && (this.boundingSphere = new Jt()); + const t = this.attributes.position, + e = this.morphAttributes.position; + if (t && t.isGLBufferAttribute) + return ( + console.error( + 'THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere. Alternatively set "mesh.frustumCulled" to "false".', + this + ), + void this.boundingSphere.set(new Lt(), 1 / 0) + ); + if (t) { + const n = this.boundingSphere.center; + if ((Mn.setFromBufferAttribute(t), e)) + for (let t = 0, n = e.length; t < n; t++) { + const n = e[t]; + Sn.setFromBufferAttribute(n), + this.morphTargetsRelative + ? (Tn.addVectors(Mn.min, Sn.min), + Mn.expandByPoint(Tn), + Tn.addVectors(Mn.max, Sn.max), + Mn.expandByPoint(Tn)) + : (Mn.expandByPoint(Sn.min), Mn.expandByPoint(Sn.max)); + } + Mn.getCenter(n); + let i = 0; + for (let e = 0, r = t.count; e < r; e++) + Tn.fromBufferAttribute(t, e), + (i = Math.max(i, n.distanceToSquared(Tn))); + if (e) + for (let r = 0, s = e.length; r < s; r++) { + const s = e[r], + a = this.morphTargetsRelative; + for (let e = 0, r = s.count; e < r; e++) + Tn.fromBufferAttribute(s, e), + a && (bn.fromBufferAttribute(t, e), Tn.add(bn)), + (i = Math.max(i, n.distanceToSquared(Tn))); + } + (this.boundingSphere.radius = Math.sqrt(i)), + isNaN(this.boundingSphere.radius) && + console.error( + 'THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.', + this + ); + } + } + computeFaceNormals() {} + computeTangents() { + const t = this.index, + e = this.attributes; + if ( + null === t || + void 0 === e.position || + void 0 === e.normal || + void 0 === e.uv + ) + return void console.error( + 'THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)' + ); + const n = t.array, + i = e.position.array, + r = e.normal.array, + s = e.uv.array, + a = i.length / 3; + void 0 === e.tangent && + this.setAttribute('tangent', new sn(new Float32Array(4 * a), 4)); + const o = e.tangent.array, + l = [], + c = []; + for (let t = 0; t < a; t++) (l[t] = new Lt()), (c[t] = new Lt()); + const h = new Lt(), + u = new Lt(), + d = new Lt(), + p = new vt(), + m = new vt(), + f = new vt(), + g = new Lt(), + v = new Lt(); + function y(t, e, n) { + h.fromArray(i, 3 * t), + u.fromArray(i, 3 * e), + d.fromArray(i, 3 * n), + p.fromArray(s, 2 * t), + m.fromArray(s, 2 * e), + f.fromArray(s, 2 * n), + u.sub(h), + d.sub(h), + m.sub(p), + f.sub(p); + const r = 1 / (m.x * f.y - f.x * m.y); + isFinite(r) && + (g + .copy(u) + .multiplyScalar(f.y) + .addScaledVector(d, -m.y) + .multiplyScalar(r), + v + .copy(d) + .multiplyScalar(m.x) + .addScaledVector(u, -f.x) + .multiplyScalar(r), + l[t].add(g), + l[e].add(g), + l[n].add(g), + c[t].add(v), + c[e].add(v), + c[n].add(v)); + } + let x = this.groups; + 0 === x.length && (x = [{ start: 0, count: n.length }]); + for (let t = 0, e = x.length; t < e; ++t) { + const e = x[t], + i = e.start; + for (let t = i, r = i + e.count; t < r; t += 3) + y(n[t + 0], n[t + 1], n[t + 2]); + } + const _ = new Lt(), + w = new Lt(), + b = new Lt(), + M = new Lt(); + function S(t) { + b.fromArray(r, 3 * t), M.copy(b); + const e = l[t]; + _.copy(e), + _.sub(b.multiplyScalar(b.dot(e))).normalize(), + w.crossVectors(M, e); + const n = w.dot(c[t]) < 0 ? -1 : 1; + (o[4 * t] = _.x), + (o[4 * t + 1] = _.y), + (o[4 * t + 2] = _.z), + (o[4 * t + 3] = n); + } + for (let t = 0, e = x.length; t < e; ++t) { + const e = x[t], + i = e.start; + for (let t = i, r = i + e.count; t < r; t += 3) + S(n[t + 0]), S(n[t + 1]), S(n[t + 2]); + } + } + computeVertexNormals() { + const t = this.index, + e = this.getAttribute('position'); + if (void 0 !== e) { + let n = this.getAttribute('normal'); + if (void 0 === n) + (n = new sn(new Float32Array(3 * e.count), 3)), + this.setAttribute('normal', n); + else for (let t = 0, e = n.count; t < e; t++) n.setXYZ(t, 0, 0, 0); + const i = new Lt(), + r = new Lt(), + s = new Lt(), + a = new Lt(), + o = new Lt(), + l = new Lt(), + c = new Lt(), + h = new Lt(); + if (t) + for (let u = 0, d = t.count; u < d; u += 3) { + const d = t.getX(u + 0), + p = t.getX(u + 1), + m = t.getX(u + 2); + i.fromBufferAttribute(e, d), + r.fromBufferAttribute(e, p), + s.fromBufferAttribute(e, m), + c.subVectors(s, r), + h.subVectors(i, r), + c.cross(h), + a.fromBufferAttribute(n, d), + o.fromBufferAttribute(n, p), + l.fromBufferAttribute(n, m), + a.add(c), + o.add(c), + l.add(c), + n.setXYZ(d, a.x, a.y, a.z), + n.setXYZ(p, o.x, o.y, o.z), + n.setXYZ(m, l.x, l.y, l.z); + } + else + for (let t = 0, a = e.count; t < a; t += 3) + i.fromBufferAttribute(e, t + 0), + r.fromBufferAttribute(e, t + 1), + s.fromBufferAttribute(e, t + 2), + c.subVectors(s, r), + h.subVectors(i, r), + c.cross(h), + n.setXYZ(t + 0, c.x, c.y, c.z), + n.setXYZ(t + 1, c.x, c.y, c.z), + n.setXYZ(t + 2, c.x, c.y, c.z); + this.normalizeNormals(), (n.needsUpdate = !0); + } + } + merge(t, e) { + if (!t || !t.isBufferGeometry) + return void console.error( + 'THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.', + t + ); + void 0 === e && + ((e = 0), + console.warn( + 'THREE.BufferGeometry.merge(): Overwriting original geometry, starting at offset=0. Use BufferGeometryUtils.mergeBufferGeometries() for lossless merge.' + )); + const n = this.attributes; + for (const i in n) { + if (void 0 === t.attributes[i]) continue; + const r = n[i].array, + s = t.attributes[i], + a = s.array, + o = s.itemSize * e, + l = Math.min(a.length, r.length - o); + for (let t = 0, e = o; t < l; t++, e++) r[e] = a[t]; + } + return this; + } + normalizeNormals() { + const t = this.attributes.normal; + for (let e = 0, n = t.count; e < n; e++) + Tn.fromBufferAttribute(t, e), + Tn.normalize(), + t.setXYZ(e, Tn.x, Tn.y, Tn.z); + } + toNonIndexed() { + function t(t, e) { + const n = t.array, + i = t.itemSize, + r = t.normalized, + s = new n.constructor(e.length * i); + let a = 0, + o = 0; + for (let t = 0, r = e.length; t < r; t++) { + a = e[t] * i; + for (let t = 0; t < i; t++) s[o++] = n[a++]; + } + return new sn(s, i, r); + } + if (null === this.index) + return ( + console.warn( + 'THREE.BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed.' + ), + this + ); + const e = new En(), + n = this.index.array, + i = this.attributes; + for (const r in i) { + const s = t(i[r], n); + e.setAttribute(r, s); + } + const r = this.morphAttributes; + for (const i in r) { + const s = [], + a = r[i]; + for (let e = 0, i = a.length; e < i; e++) { + const i = t(a[e], n); + s.push(i); + } + e.morphAttributes[i] = s; + } + e.morphTargetsRelative = this.morphTargetsRelative; + const s = this.groups; + for (let t = 0, n = s.length; t < n; t++) { + const n = s[t]; + e.addGroup(n.start, n.count, n.materialIndex); + } + return e; + } + toJSON() { + const t = { + metadata: { + version: 4.5, + type: 'BufferGeometry', + generator: 'BufferGeometry.toJSON', + }, + }; + if ( + ((t.uuid = this.uuid), + (t.type = this.type), + '' !== this.name && (t.name = this.name), + Object.keys(this.userData).length > 0 && (t.userData = this.userData), + void 0 !== this.parameters) + ) { + const e = this.parameters; + for (const n in e) void 0 !== e[n] && (t[n] = e[n]); + return t; + } + t.data = { attributes: {} }; + const e = this.index; + null !== e && + (t.data.index = { + type: e.array.constructor.name, + array: Array.prototype.slice.call(e.array), + }); + const n = this.attributes; + for (const e in n) { + const i = n[e]; + t.data.attributes[e] = i.toJSON(t.data); + } + const i = {}; + let r = !1; + for (const e in this.morphAttributes) { + const n = this.morphAttributes[e], + s = []; + for (let e = 0, i = n.length; e < i; e++) { + const i = n[e]; + s.push(i.toJSON(t.data)); + } + s.length > 0 && ((i[e] = s), (r = !0)); + } + r && + ((t.data.morphAttributes = i), + (t.data.morphTargetsRelative = this.morphTargetsRelative)); + const s = this.groups; + s.length > 0 && (t.data.groups = JSON.parse(JSON.stringify(s))); + const a = this.boundingSphere; + return ( + null !== a && + (t.data.boundingSphere = { + center: a.center.toArray(), + radius: a.radius, + }), + t + ); + } + clone() { + return new En().copy(this); + } + copy(t) { + (this.index = null), + (this.attributes = {}), + (this.morphAttributes = {}), + (this.groups = []), + (this.boundingBox = null), + (this.boundingSphere = null); + const e = {}; + this.name = t.name; + const n = t.index; + null !== n && this.setIndex(n.clone(e)); + const i = t.attributes; + for (const t in i) { + const n = i[t]; + this.setAttribute(t, n.clone(e)); + } + const r = t.morphAttributes; + for (const t in r) { + const n = [], + i = r[t]; + for (let t = 0, r = i.length; t < r; t++) n.push(i[t].clone(e)); + this.morphAttributes[t] = n; + } + this.morphTargetsRelative = t.morphTargetsRelative; + const s = t.groups; + for (let t = 0, e = s.length; t < e; t++) { + const e = s[t]; + this.addGroup(e.start, e.count, e.materialIndex); + } + const a = t.boundingBox; + null !== a && (this.boundingBox = a.clone()); + const o = t.boundingSphere; + return ( + null !== o && (this.boundingSphere = o.clone()), + (this.drawRange.start = t.drawRange.start), + (this.drawRange.count = t.drawRange.count), + (this.userData = t.userData), + this + ); + } + dispose() { + this.dispatchEvent({ type: 'dispose' }); + } + } + En.prototype.isBufferGeometry = !0; + const An = new se(), + Ln = new re(), + Rn = new Jt(), + Cn = new Lt(), + Pn = new Lt(), + Dn = new Lt(), + In = new Lt(), + Nn = new Lt(), + Bn = new Lt(), + zn = new Lt(), + Fn = new Lt(), + On = new Lt(), + Hn = new vt(), + Gn = new vt(), + Un = new vt(), + kn = new Lt(), + Vn = new Lt(); + class Wn extends Ce { + constructor(t = new En(), e = new en()) { + super(), + (this.type = 'Mesh'), + (this.geometry = t), + (this.material = e), + this.updateMorphTargets(); + } + copy(t) { + return ( + super.copy(t), + void 0 !== t.morphTargetInfluences && + (this.morphTargetInfluences = t.morphTargetInfluences.slice()), + void 0 !== t.morphTargetDictionary && + (this.morphTargetDictionary = Object.assign( + {}, + t.morphTargetDictionary + )), + (this.material = t.material), + (this.geometry = t.geometry), + this + ); + } + updateMorphTargets() { + const t = this.geometry; + if (t.isBufferGeometry) { + const e = t.morphAttributes, + n = Object.keys(e); + if (n.length > 0) { + const t = e[n[0]]; + if (void 0 !== t) { + (this.morphTargetInfluences = []), + (this.morphTargetDictionary = {}); + for (let e = 0, n = t.length; e < n; e++) { + const n = t[e].name || String(e); + this.morphTargetInfluences.push(0), + (this.morphTargetDictionary[n] = e); + } + } + } + } else { + const e = t.morphTargets; + void 0 !== e && + e.length > 0 && + console.error( + 'THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' + ); + } + } + raycast(t, e) { + const n = this.geometry, + i = this.material, + r = this.matrixWorld; + if (void 0 === i) return; + if ( + (null === n.boundingSphere && n.computeBoundingSphere(), + Rn.copy(n.boundingSphere), + Rn.applyMatrix4(r), + !1 === t.ray.intersectsSphere(Rn)) + ) + return; + if ( + (An.copy(r).invert(), + Ln.copy(t.ray).applyMatrix4(An), + null !== n.boundingBox && !1 === Ln.intersectsBox(n.boundingBox)) + ) + return; + let s; + if (n.isBufferGeometry) { + const r = n.index, + a = n.attributes.position, + o = n.morphAttributes.position, + l = n.morphTargetsRelative, + c = n.attributes.uv, + h = n.attributes.uv2, + u = n.groups, + d = n.drawRange; + if (null !== r) + if (Array.isArray(i)) + for (let n = 0, p = u.length; n < p; n++) { + const p = u[n], + m = i[p.materialIndex]; + for ( + let n = Math.max(p.start, d.start), + i = Math.min(p.start + p.count, d.start + d.count); + n < i; + n += 3 + ) { + const i = r.getX(n), + u = r.getX(n + 1), + d = r.getX(n + 2); + (s = jn(this, m, t, Ln, a, o, l, c, h, i, u, d)), + s && + ((s.faceIndex = Math.floor(n / 3)), + (s.face.materialIndex = p.materialIndex), + e.push(s)); + } + } + else { + for ( + let n = Math.max(0, d.start), + u = Math.min(r.count, d.start + d.count); + n < u; + n += 3 + ) { + const u = r.getX(n), + d = r.getX(n + 1), + p = r.getX(n + 2); + (s = jn(this, i, t, Ln, a, o, l, c, h, u, d, p)), + s && ((s.faceIndex = Math.floor(n / 3)), e.push(s)); + } + } + else if (void 0 !== a) + if (Array.isArray(i)) + for (let n = 0, r = u.length; n < r; n++) { + const r = u[n], + p = i[r.materialIndex]; + for ( + let n = Math.max(r.start, d.start), + i = Math.min(r.start + r.count, d.start + d.count); + n < i; + n += 3 + ) { + (s = jn(this, p, t, Ln, a, o, l, c, h, n, n + 1, n + 2)), + s && + ((s.faceIndex = Math.floor(n / 3)), + (s.face.materialIndex = r.materialIndex), + e.push(s)); + } + } + else { + for ( + let n = Math.max(0, d.start), + r = Math.min(a.count, d.start + d.count); + n < r; + n += 3 + ) { + (s = jn(this, i, t, Ln, a, o, l, c, h, n, n + 1, n + 2)), + s && ((s.faceIndex = Math.floor(n / 3)), e.push(s)); + } + } + } else + n.isGeometry && + console.error( + 'THREE.Mesh.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' + ); + } + } + function jn(t, e, n, i, r, s, a, o, l, c, h, u) { + Cn.fromBufferAttribute(r, c), + Pn.fromBufferAttribute(r, h), + Dn.fromBufferAttribute(r, u); + const d = t.morphTargetInfluences; + if (e.morphTargets && s && d) { + zn.set(0, 0, 0), Fn.set(0, 0, 0), On.set(0, 0, 0); + for (let t = 0, e = s.length; t < e; t++) { + const e = d[t], + n = s[t]; + 0 !== e && + (In.fromBufferAttribute(n, c), + Nn.fromBufferAttribute(n, h), + Bn.fromBufferAttribute(n, u), + a + ? (zn.addScaledVector(In, e), + Fn.addScaledVector(Nn, e), + On.addScaledVector(Bn, e)) + : (zn.addScaledVector(In.sub(Cn), e), + Fn.addScaledVector(Nn.sub(Pn), e), + On.addScaledVector(Bn.sub(Dn), e))); + } + Cn.add(zn), Pn.add(Fn), Dn.add(On); + } + t.isSkinnedMesh && + e.skinning && + (t.boneTransform(c, Cn), t.boneTransform(h, Pn), t.boneTransform(u, Dn)); + const p = (function (t, e, n, i, r, s, a, o) { + let l; + if ( + ((l = + 1 === e.side + ? i.intersectTriangle(a, s, r, !0, o) + : i.intersectTriangle(r, s, a, 2 !== e.side, o)), + null === l) + ) + return null; + Vn.copy(o), Vn.applyMatrix4(t.matrixWorld); + const c = n.ray.origin.distanceTo(Vn); + return c < n.near || c > n.far + ? null + : { distance: c, point: Vn.clone(), object: t }; + })(t, e, n, i, Cn, Pn, Dn, kn); + if (p) { + o && + (Hn.fromBufferAttribute(o, c), + Gn.fromBufferAttribute(o, h), + Un.fromBufferAttribute(o, u), + (p.uv = je.getUV(kn, Cn, Pn, Dn, Hn, Gn, Un, new vt()))), + l && + (Hn.fromBufferAttribute(l, c), + Gn.fromBufferAttribute(l, h), + Un.fromBufferAttribute(l, u), + (p.uv2 = je.getUV(kn, Cn, Pn, Dn, Hn, Gn, Un, new vt()))); + const t = { a: c, b: h, c: u, normal: new Lt(), materialIndex: 0 }; + je.getNormal(Cn, Pn, Dn, t.normal), (p.face = t); + } + return p; + } + Wn.prototype.isMesh = !0; + class qn extends En { + constructor(t = 1, e = 1, n = 1, i = 1, r = 1, s = 1) { + super(), + (this.type = 'BoxGeometry'), + (this.parameters = { + width: t, + height: e, + depth: n, + widthSegments: i, + heightSegments: r, + depthSegments: s, + }); + const a = this; + (i = Math.floor(i)), (r = Math.floor(r)), (s = Math.floor(s)); + const o = [], + l = [], + c = [], + h = []; + let u = 0, + d = 0; + function p(t, e, n, i, r, s, p, m, f, g, v) { + const y = s / f, + x = p / g, + _ = s / 2, + w = p / 2, + b = m / 2, + M = f + 1, + S = g + 1; + let T = 0, + E = 0; + const A = new Lt(); + for (let s = 0; s < S; s++) { + const a = s * x - w; + for (let o = 0; o < M; o++) { + const u = o * y - _; + (A[t] = u * i), + (A[e] = a * r), + (A[n] = b), + l.push(A.x, A.y, A.z), + (A[t] = 0), + (A[e] = 0), + (A[n] = m > 0 ? 1 : -1), + c.push(A.x, A.y, A.z), + h.push(o / f), + h.push(1 - s / g), + (T += 1); + } + } + for (let t = 0; t < g; t++) + for (let e = 0; e < f; e++) { + const n = u + e + M * t, + i = u + e + M * (t + 1), + r = u + (e + 1) + M * (t + 1), + s = u + (e + 1) + M * t; + o.push(n, i, s), o.push(i, r, s), (E += 6); + } + a.addGroup(d, E, v), (d += E), (u += T); + } + p('z', 'y', 'x', -1, -1, n, e, t, s, r, 0), + p('z', 'y', 'x', 1, -1, n, e, -t, s, r, 1), + p('x', 'z', 'y', 1, 1, t, n, e, i, s, 2), + p('x', 'z', 'y', 1, -1, t, n, -e, i, s, 3), + p('x', 'y', 'z', 1, -1, t, e, n, i, r, 4), + p('x', 'y', 'z', -1, -1, t, e, -n, i, r, 5), + this.setIndex(o), + this.setAttribute('position', new mn(l, 3)), + this.setAttribute('normal', new mn(c, 3)), + this.setAttribute('uv', new mn(h, 2)); + } + } + function Xn(t) { + const e = {}; + for (const n in t) { + e[n] = {}; + for (const i in t[n]) { + const r = t[n][i]; + r && + (r.isColor || + r.isMatrix3 || + r.isMatrix4 || + r.isVector2 || + r.isVector3 || + r.isVector4 || + r.isTexture || + r.isQuaternion) + ? (e[n][i] = r.clone()) + : Array.isArray(r) + ? (e[n][i] = r.slice()) + : (e[n][i] = r); + } + } + return e; + } + function Yn(t) { + const e = {}; + for (let n = 0; n < t.length; n++) { + const i = Xn(t[n]); + for (const t in i) e[t] = i[t]; + } + return e; + } + const Zn = { clone: Xn, merge: Yn }; + class Jn extends Xe { + constructor(t) { + super(), + (this.type = 'ShaderMaterial'), + (this.defines = {}), + (this.uniforms = {}), + (this.vertexShader = + 'void main() {\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}'), + (this.fragmentShader = + 'void main() {\n\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}'), + (this.linewidth = 1), + (this.wireframe = !1), + (this.wireframeLinewidth = 1), + (this.fog = !1), + (this.lights = !1), + (this.clipping = !1), + (this.skinning = !1), + (this.morphTargets = !1), + (this.morphNormals = !1), + (this.extensions = { + derivatives: !1, + fragDepth: !1, + drawBuffers: !1, + shaderTextureLOD: !1, + }), + (this.defaultAttributeValues = { + color: [1, 1, 1], + uv: [0, 0], + uv2: [0, 0], + }), + (this.index0AttributeName = void 0), + (this.uniformsNeedUpdate = !1), + (this.glslVersion = null), + void 0 !== t && + (void 0 !== t.attributes && + console.error( + 'THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead.' + ), + this.setValues(t)); + } + copy(t) { + return ( + super.copy(t), + (this.fragmentShader = t.fragmentShader), + (this.vertexShader = t.vertexShader), + (this.uniforms = Xn(t.uniforms)), + (this.defines = Object.assign({}, t.defines)), + (this.wireframe = t.wireframe), + (this.wireframeLinewidth = t.wireframeLinewidth), + (this.lights = t.lights), + (this.clipping = t.clipping), + (this.skinning = t.skinning), + (this.morphTargets = t.morphTargets), + (this.morphNormals = t.morphNormals), + (this.extensions = Object.assign({}, t.extensions)), + (this.glslVersion = t.glslVersion), + this + ); + } + toJSON(t) { + const e = super.toJSON(t); + (e.glslVersion = this.glslVersion), (e.uniforms = {}); + for (const n in this.uniforms) { + const i = this.uniforms[n].value; + i && i.isTexture + ? (e.uniforms[n] = { type: 't', value: i.toJSON(t).uuid }) + : i && i.isColor + ? (e.uniforms[n] = { type: 'c', value: i.getHex() }) + : i && i.isVector2 + ? (e.uniforms[n] = { type: 'v2', value: i.toArray() }) + : i && i.isVector3 + ? (e.uniforms[n] = { type: 'v3', value: i.toArray() }) + : i && i.isVector4 + ? (e.uniforms[n] = { type: 'v4', value: i.toArray() }) + : i && i.isMatrix3 + ? (e.uniforms[n] = { type: 'm3', value: i.toArray() }) + : i && i.isMatrix4 + ? (e.uniforms[n] = { type: 'm4', value: i.toArray() }) + : (e.uniforms[n] = { value: i }); + } + Object.keys(this.defines).length > 0 && (e.defines = this.defines), + (e.vertexShader = this.vertexShader), + (e.fragmentShader = this.fragmentShader); + const n = {}; + for (const t in this.extensions) !0 === this.extensions[t] && (n[t] = !0); + return Object.keys(n).length > 0 && (e.extensions = n), e; + } + } + Jn.prototype.isShaderMaterial = !0; + class Qn extends Ce { + constructor() { + super(), + (this.type = 'Camera'), + (this.matrixWorldInverse = new se()), + (this.projectionMatrix = new se()), + (this.projectionMatrixInverse = new se()); + } + copy(t, e) { + return ( + super.copy(t, e), + this.matrixWorldInverse.copy(t.matrixWorldInverse), + this.projectionMatrix.copy(t.projectionMatrix), + this.projectionMatrixInverse.copy(t.projectionMatrixInverse), + this + ); + } + getWorldDirection(t) { + void 0 === t && + (console.warn( + 'THREE.Camera: .getWorldDirection() target is now required' + ), + (t = new Lt())), + this.updateWorldMatrix(!0, !1); + const e = this.matrixWorld.elements; + return t.set(-e[8], -e[9], -e[10]).normalize(); + } + updateMatrixWorld(t) { + super.updateMatrixWorld(t), + this.matrixWorldInverse.copy(this.matrixWorld).invert(); + } + updateWorldMatrix(t, e) { + super.updateWorldMatrix(t, e), + this.matrixWorldInverse.copy(this.matrixWorld).invert(); + } + clone() { + return new this.constructor().copy(this); + } + } + Qn.prototype.isCamera = !0; + class Kn extends Qn { + constructor(t = 50, e = 1, n = 0.1, i = 2e3) { + super(), + (this.type = 'PerspectiveCamera'), + (this.fov = t), + (this.zoom = 1), + (this.near = n), + (this.far = i), + (this.focus = 10), + (this.aspect = e), + (this.view = null), + (this.filmGauge = 35), + (this.filmOffset = 0), + this.updateProjectionMatrix(); + } + copy(t, e) { + return ( + super.copy(t, e), + (this.fov = t.fov), + (this.zoom = t.zoom), + (this.near = t.near), + (this.far = t.far), + (this.focus = t.focus), + (this.aspect = t.aspect), + (this.view = null === t.view ? null : Object.assign({}, t.view)), + (this.filmGauge = t.filmGauge), + (this.filmOffset = t.filmOffset), + this + ); + } + setFocalLength(t) { + const e = (0.5 * this.getFilmHeight()) / t; + (this.fov = 2 * lt * Math.atan(e)), this.updateProjectionMatrix(); + } + getFocalLength() { + const t = Math.tan(0.5 * ot * this.fov); + return (0.5 * this.getFilmHeight()) / t; + } + getEffectiveFOV() { + return 2 * lt * Math.atan(Math.tan(0.5 * ot * this.fov) / this.zoom); + } + getFilmWidth() { + return this.filmGauge * Math.min(this.aspect, 1); + } + getFilmHeight() { + return this.filmGauge / Math.max(this.aspect, 1); + } + setViewOffset(t, e, n, i, r, s) { + (this.aspect = t / e), + null === this.view && + (this.view = { + enabled: !0, + fullWidth: 1, + fullHeight: 1, + offsetX: 0, + offsetY: 0, + width: 1, + height: 1, + }), + (this.view.enabled = !0), + (this.view.fullWidth = t), + (this.view.fullHeight = e), + (this.view.offsetX = n), + (this.view.offsetY = i), + (this.view.width = r), + (this.view.height = s), + this.updateProjectionMatrix(); + } + clearViewOffset() { + null !== this.view && (this.view.enabled = !1), + this.updateProjectionMatrix(); + } + updateProjectionMatrix() { + const t = this.near; + let e = (t * Math.tan(0.5 * ot * this.fov)) / this.zoom, + n = 2 * e, + i = this.aspect * n, + r = -0.5 * i; + const s = this.view; + if (null !== this.view && this.view.enabled) { + const t = s.fullWidth, + a = s.fullHeight; + (r += (s.offsetX * i) / t), + (e -= (s.offsetY * n) / a), + (i *= s.width / t), + (n *= s.height / a); + } + const a = this.filmOffset; + 0 !== a && (r += (t * a) / this.getFilmWidth()), + this.projectionMatrix.makePerspective(r, r + i, e, e - n, t, this.far), + this.projectionMatrixInverse.copy(this.projectionMatrix).invert(); + } + toJSON(t) { + const e = super.toJSON(t); + return ( + (e.object.fov = this.fov), + (e.object.zoom = this.zoom), + (e.object.near = this.near), + (e.object.far = this.far), + (e.object.focus = this.focus), + (e.object.aspect = this.aspect), + null !== this.view && (e.object.view = Object.assign({}, this.view)), + (e.object.filmGauge = this.filmGauge), + (e.object.filmOffset = this.filmOffset), + e + ); + } + } + Kn.prototype.isPerspectiveCamera = !0; + const $n = 90; + class ti extends Ce { + constructor(t, e, n) { + if ( + (super(), (this.type = 'CubeCamera'), !0 !== n.isWebGLCubeRenderTarget) + ) + return void console.error( + 'THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter.' + ); + this.renderTarget = n; + const i = new Kn($n, 1, t, e); + (i.layers = this.layers), + i.up.set(0, -1, 0), + i.lookAt(new Lt(1, 0, 0)), + this.add(i); + const r = new Kn($n, 1, t, e); + (r.layers = this.layers), + r.up.set(0, -1, 0), + r.lookAt(new Lt(-1, 0, 0)), + this.add(r); + const s = new Kn($n, 1, t, e); + (s.layers = this.layers), + s.up.set(0, 0, 1), + s.lookAt(new Lt(0, 1, 0)), + this.add(s); + const a = new Kn($n, 1, t, e); + (a.layers = this.layers), + a.up.set(0, 0, -1), + a.lookAt(new Lt(0, -1, 0)), + this.add(a); + const o = new Kn($n, 1, t, e); + (o.layers = this.layers), + o.up.set(0, -1, 0), + o.lookAt(new Lt(0, 0, 1)), + this.add(o); + const l = new Kn($n, 1, t, e); + (l.layers = this.layers), + l.up.set(0, -1, 0), + l.lookAt(new Lt(0, 0, -1)), + this.add(l); + } + update(t, e) { + null === this.parent && this.updateMatrixWorld(); + const n = this.renderTarget, + [i, r, s, a, o, l] = this.children, + c = t.xr.enabled, + h = t.getRenderTarget(); + t.xr.enabled = !1; + const u = n.texture.generateMipmaps; + (n.texture.generateMipmaps = !1), + t.setRenderTarget(n, 0), + t.render(e, i), + t.setRenderTarget(n, 1), + t.render(e, r), + t.setRenderTarget(n, 2), + t.render(e, s), + t.setRenderTarget(n, 3), + t.render(e, a), + t.setRenderTarget(n, 4), + t.render(e, o), + (n.texture.generateMipmaps = u), + t.setRenderTarget(n, 5), + t.render(e, l), + t.setRenderTarget(h), + (t.xr.enabled = c); + } + } + class ei extends bt { + constructor(t, e, n, i, s, a, o, l, c, h) { + super( + (t = void 0 !== t ? t : []), + (e = void 0 !== e ? e : r), + n, + i, + s, + a, + (o = void 0 !== o ? o : T), + l, + c, + h + ), + (this._needsFlipEnvMap = !0), + (this.flipY = !1); + } + get images() { + return this.image; + } + set images(t) { + this.image = t; + } + } + ei.prototype.isCubeTexture = !0; + class ni extends Tt { + constructor(t, e, n) { + Number.isInteger(e) && + (console.warn( + 'THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )' + ), + (e = n)), + super(t, t, e), + (e = e || {}), + (this.texture = new ei( + void 0, + e.mapping, + e.wrapS, + e.wrapT, + e.magFilter, + e.minFilter, + e.format, + e.type, + e.anisotropy, + e.encoding + )), + (this.texture.generateMipmaps = + void 0 !== e.generateMipmaps && e.generateMipmaps), + (this.texture.minFilter = void 0 !== e.minFilter ? e.minFilter : g), + (this.texture._needsFlipEnvMap = !1); + } + fromEquirectangularTexture(t, e) { + (this.texture.type = e.type), + (this.texture.format = E), + (this.texture.encoding = e.encoding), + (this.texture.generateMipmaps = e.generateMipmaps), + (this.texture.minFilter = e.minFilter), + (this.texture.magFilter = e.magFilter); + const n = { + uniforms: { tEquirect: { value: null } }, + vertexShader: + '\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t\t\t\t\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\n\t\t\t\t}\n\t\t\t', + fragmentShader: + '\n\n\t\t\t\tuniform sampler2D tEquirect;\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\t#include \n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t\t}\n\t\t\t', + }, + i = new qn(5, 5, 5), + r = new Jn({ + name: 'CubemapFromEquirect', + uniforms: Xn(n.uniforms), + vertexShader: n.vertexShader, + fragmentShader: n.fragmentShader, + side: 1, + blending: 0, + }); + r.uniforms.tEquirect.value = e; + const s = new Wn(i, r), + a = e.minFilter; + e.minFilter === y && (e.minFilter = g); + return ( + new ti(1, 10, this).update(t, s), + (e.minFilter = a), + s.geometry.dispose(), + s.material.dispose(), + this + ); + } + clear(t, e, n, i) { + const r = t.getRenderTarget(); + for (let r = 0; r < 6; r++) t.setRenderTarget(this, r), t.clear(e, n, i); + t.setRenderTarget(r); + } + } + ni.prototype.isWebGLCubeRenderTarget = !0; + class ii extends bt { + constructor(t, e, n, i, r, s, a, o, l, c, h, u) { + super(null, s, a, o, l, c, i, r, h, u), + (this.image = { data: t || null, width: e || 1, height: n || 1 }), + (this.magFilter = void 0 !== l ? l : p), + (this.minFilter = void 0 !== c ? c : p), + (this.generateMipmaps = !1), + (this.flipY = !1), + (this.unpackAlignment = 1), + (this.needsUpdate = !0); + } + } + ii.prototype.isDataTexture = !0; + const ri = new Jt(), + si = new Lt(); + class ai { + constructor( + t = new Ne(), + e = new Ne(), + n = new Ne(), + i = new Ne(), + r = new Ne(), + s = new Ne() + ) { + this.planes = [t, e, n, i, r, s]; + } + set(t, e, n, i, r, s) { + const a = this.planes; + return ( + a[0].copy(t), + a[1].copy(e), + a[2].copy(n), + a[3].copy(i), + a[4].copy(r), + a[5].copy(s), + this + ); + } + copy(t) { + const e = this.planes; + for (let n = 0; n < 6; n++) e[n].copy(t.planes[n]); + return this; + } + setFromProjectionMatrix(t) { + const e = this.planes, + n = t.elements, + i = n[0], + r = n[1], + s = n[2], + a = n[3], + o = n[4], + l = n[5], + c = n[6], + h = n[7], + u = n[8], + d = n[9], + p = n[10], + m = n[11], + f = n[12], + g = n[13], + v = n[14], + y = n[15]; + return ( + e[0].setComponents(a - i, h - o, m - u, y - f).normalize(), + e[1].setComponents(a + i, h + o, m + u, y + f).normalize(), + e[2].setComponents(a + r, h + l, m + d, y + g).normalize(), + e[3].setComponents(a - r, h - l, m - d, y - g).normalize(), + e[4].setComponents(a - s, h - c, m - p, y - v).normalize(), + e[5].setComponents(a + s, h + c, m + p, y + v).normalize(), + this + ); + } + intersectsObject(t) { + const e = t.geometry; + return ( + null === e.boundingSphere && e.computeBoundingSphere(), + ri.copy(e.boundingSphere).applyMatrix4(t.matrixWorld), + this.intersectsSphere(ri) + ); + } + intersectsSprite(t) { + return ( + ri.center.set(0, 0, 0), + (ri.radius = 0.7071067811865476), + ri.applyMatrix4(t.matrixWorld), + this.intersectsSphere(ri) + ); + } + intersectsSphere(t) { + const e = this.planes, + n = t.center, + i = -t.radius; + for (let t = 0; t < 6; t++) { + if (e[t].distanceToPoint(n) < i) return !1; + } + return !0; + } + intersectsBox(t) { + const e = this.planes; + for (let n = 0; n < 6; n++) { + const i = e[n]; + if ( + ((si.x = i.normal.x > 0 ? t.max.x : t.min.x), + (si.y = i.normal.y > 0 ? t.max.y : t.min.y), + (si.z = i.normal.z > 0 ? t.max.z : t.min.z), + i.distanceToPoint(si) < 0) + ) + return !1; + } + return !0; + } + containsPoint(t) { + const e = this.planes; + for (let n = 0; n < 6; n++) if (e[n].distanceToPoint(t) < 0) return !1; + return !0; + } + clone() { + return new this.constructor().copy(this); + } + } + function oi() { + let t = null, + e = !1, + n = null, + i = null; + function r(e, s) { + n(e, s), (i = t.requestAnimationFrame(r)); + } + return { + start: function () { + !0 !== e && null !== n && ((i = t.requestAnimationFrame(r)), (e = !0)); + }, + stop: function () { + t.cancelAnimationFrame(i), (e = !1); + }, + setAnimationLoop: function (t) { + n = t; + }, + setContext: function (e) { + t = e; + }, + }; + } + function li(t, e) { + const n = e.isWebGL2, + i = new WeakMap(); + return { + get: function (t) { + return t.isInterleavedBufferAttribute && (t = t.data), i.get(t); + }, + remove: function (e) { + e.isInterleavedBufferAttribute && (e = e.data); + const n = i.get(e); + n && (t.deleteBuffer(n.buffer), i.delete(e)); + }, + update: function (e, r) { + if (e.isGLBufferAttribute) { + const t = i.get(e); + return void ( + (!t || t.version < e.version) && + i.set(e, { + buffer: e.buffer, + type: e.type, + bytesPerElement: e.elementSize, + version: e.version, + }) + ); + } + e.isInterleavedBufferAttribute && (e = e.data); + const s = i.get(e); + void 0 === s + ? i.set( + e, + (function (e, i) { + const r = e.array, + s = e.usage, + a = t.createBuffer(); + t.bindBuffer(i, a), t.bufferData(i, r, s), e.onUploadCallback(); + let o = 5126; + return ( + r instanceof Float32Array + ? (o = 5126) + : r instanceof Float64Array + ? console.warn( + 'THREE.WebGLAttributes: Unsupported data buffer format: Float64Array.' + ) + : r instanceof Uint16Array + ? e.isFloat16BufferAttribute + ? n + ? (o = 5131) + : console.warn( + 'THREE.WebGLAttributes: Usage of Float16BufferAttribute requires WebGL2.' + ) + : (o = 5123) + : r instanceof Int16Array + ? (o = 5122) + : r instanceof Uint32Array + ? (o = 5125) + : r instanceof Int32Array + ? (o = 5124) + : r instanceof Int8Array + ? (o = 5120) + : r instanceof Uint8Array && (o = 5121), + { + buffer: a, + type: o, + bytesPerElement: r.BYTES_PER_ELEMENT, + version: e.version, + } + ); + })(e, r) + ) + : s.version < e.version && + (!(function (e, i, r) { + const s = i.array, + a = i.updateRange; + t.bindBuffer(r, e), + -1 === a.count + ? t.bufferSubData(r, 0, s) + : (n + ? t.bufferSubData( + r, + a.offset * s.BYTES_PER_ELEMENT, + s, + a.offset, + a.count + ) + : t.bufferSubData( + r, + a.offset * s.BYTES_PER_ELEMENT, + s.subarray(a.offset, a.offset + a.count) + ), + (a.count = -1)); + })(s.buffer, e, r), + (s.version = e.version)); + }, + }; + } + class ci extends En { + constructor(t = 1, e = 1, n = 1, i = 1) { + super(), + (this.type = 'PlaneGeometry'), + (this.parameters = { + width: t, + height: e, + widthSegments: n, + heightSegments: i, + }); + const r = t / 2, + s = e / 2, + a = Math.floor(n), + o = Math.floor(i), + l = a + 1, + c = o + 1, + h = t / a, + u = e / o, + d = [], + p = [], + m = [], + f = []; + for (let t = 0; t < c; t++) { + const e = t * u - s; + for (let n = 0; n < l; n++) { + const i = n * h - r; + p.push(i, -e, 0), m.push(0, 0, 1), f.push(n / a), f.push(1 - t / o); + } + } + for (let t = 0; t < o; t++) + for (let e = 0; e < a; e++) { + const n = e + l * t, + i = e + l * (t + 1), + r = e + 1 + l * (t + 1), + s = e + 1 + l * t; + d.push(n, i, s), d.push(i, r, s); + } + this.setIndex(d), + this.setAttribute('position', new mn(p, 3)), + this.setAttribute('normal', new mn(m, 3)), + this.setAttribute('uv', new mn(f, 2)); + } + } + const hi = { + alphamap_fragment: + '#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\n#endif', + alphamap_pars_fragment: + '#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif', + alphatest_fragment: + '#ifdef ALPHATEST\n\tif ( diffuseColor.a < ALPHATEST ) discard;\n#endif', + aomap_fragment: + '#ifdef USE_AOMAP\n\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\n\treflectedLight.indirectDiffuse *= ambientOcclusion;\n\t#if defined( USE_ENVMAP ) && defined( STANDARD )\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\n\t#endif\n#endif', + aomap_pars_fragment: + '#ifdef USE_AOMAP\n\tuniform sampler2D aoMap;\n\tuniform float aoMapIntensity;\n#endif', + begin_vertex: 'vec3 transformed = vec3( position );', + beginnormal_vertex: + 'vec3 objectNormal = vec3( normal );\n#ifdef USE_TANGENT\n\tvec3 objectTangent = vec3( tangent.xyz );\n#endif', + bsdfs: + 'vec2 integrateSpecularBRDF( const in float dotNV, const in float roughness ) {\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\treturn vec2( -1.04, 1.04 ) * a004 + r.zw;\n}\nfloat punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\tif( cutoffDistance > 0.0 ) {\n\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t}\n\treturn distanceFalloff;\n#else\n\tif( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\t}\n\treturn 1.0;\n#endif\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nvec3 F_Schlick_RoughnessDependent( const in vec3 F0, const in float dotNV, const in float roughness ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotNV - 6.98316 ) * dotNV );\n\tvec3 Fr = max( vec3( 1.0 - roughness ), F0 ) - F0;\n\treturn Fr * fresnel + F0;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\treturn 1.0 / ( gl * gv );\n}\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + viewDir );\n\tfloat dotNL = saturate( dot( normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( G * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\nvec3 BRDF_Specular_GGX_Environment( const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\treturn specularColor * brdf.x + brdf.y;\n}\nvoid BRDF_Specular_Multiscattering_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tvec3 F = F_Schlick_RoughnessDependent( specularColor, dotNV, roughness );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\tvec3 FssEss = F * brdf.x + brdf.y;\n\tfloat Ess = brdf.x + brdf.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie(float roughness, float NoH) {\n\tfloat invAlpha = 1.0 / roughness;\n\tfloat cos2h = NoH * NoH;\n\tfloat sin2h = max(1.0 - cos2h, 0.0078125);\treturn (2.0 + invAlpha) * pow(sin2h, invAlpha * 0.5) / (2.0 * PI);\n}\nfloat V_Neubelt(float NoV, float NoL) {\n\treturn saturate(1.0 / (4.0 * (NoL + NoV - NoL * NoV)));\n}\nvec3 BRDF_Specular_Sheen( const in float roughness, const in vec3 L, const in GeometricContext geometry, vec3 specularColor ) {\n\tvec3 N = geometry.normal;\n\tvec3 V = geometry.viewDir;\n\tvec3 H = normalize( V + L );\n\tfloat dotNH = saturate( dot( N, H ) );\n\treturn specularColor * D_Charlie( roughness, dotNH ) * V_Neubelt( dot(N, V), dot(N, L) );\n}\n#endif', + bumpmap_pars_fragment: + '#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) {\n\t\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 ) * faceDirection;\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif', + clipping_planes_fragment: + '#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#pragma unroll_loop_end\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\tif ( clipped ) discard;\n\t#endif\n#endif', + clipping_planes_pars_fragment: + '#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif', + clipping_planes_pars_vertex: + '#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif', + clipping_planes_vertex: + '#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif', + color_fragment: + '#if defined( USE_COLOR_ALPHA )\n\tdiffuseColor *= vColor;\n#elif defined( USE_COLOR )\n\tdiffuseColor.rgb *= vColor;\n#endif', + color_pars_fragment: + '#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR )\n\tvarying vec3 vColor;\n#endif', + color_pars_vertex: + '#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvarying vec3 vColor;\n#endif', + color_vertex: + '#if defined( USE_COLOR_ALPHA )\n\tvColor = vec4( 1.0 );\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvColor = vec3( 1.0 );\n#endif\n#ifdef USE_COLOR\n\tvColor *= color;\n#endif\n#ifdef USE_INSTANCING_COLOR\n\tvColor.xyz *= instanceColor.xyz;\n#endif', + common: + '#define PI 3.141592653589793\n#define PI2 6.283185307179586\n#define PI_HALF 1.5707963267948966\n#define RECIPROCAL_PI 0.3183098861837907\n#define RECIPROCAL_PI2 0.15915494309189535\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement(a) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract(sin(sn) * c);\n}\n#ifdef HIGH_PRECISION\n\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n\tfloat max3( vec3 v ) { return max( max( v.x, v.y ), v.z ); }\n\tfloat precisionSafeLength( vec3 v ) {\n\t\tfloat maxComponent = max3( abs( v ) );\n\t\treturn length( v / maxComponent ) * maxComponent;\n\t}\n#endif\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n#ifdef CLEARCOAT\n\tvec3 clearcoatNormal;\n#endif\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\n\treturn - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat linearToRelativeLuminance( const in vec3 color ) {\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\treturn dot( weights, color.rgb );\n}\nbool isPerspectiveMatrix( mat4 m ) {\n\treturn m[ 2 ][ 3 ] == - 1.0;\n}\nvec2 equirectUv( in vec3 dir ) {\n\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\n\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\treturn vec2( u, v );\n}', + cube_uv_reflection_fragment: + '#ifdef ENVMAP_TYPE_CUBE_UV\n\t#define cubeUV_maxMipLevel 8.0\n\t#define cubeUV_minMipLevel 4.0\n\t#define cubeUV_maxTileSize 256.0\n\t#define cubeUV_minTileSize 16.0\n\tfloat getFace( vec3 direction ) {\n\t\tvec3 absDirection = abs( direction );\n\t\tfloat face = - 1.0;\n\t\tif ( absDirection.x > absDirection.z ) {\n\t\t\tif ( absDirection.x > absDirection.y )\n\t\t\t\tface = direction.x > 0.0 ? 0.0 : 3.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t} else {\n\t\t\tif ( absDirection.z > absDirection.y )\n\t\t\t\tface = direction.z > 0.0 ? 2.0 : 5.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t}\n\t\treturn face;\n\t}\n\tvec2 getUV( vec3 direction, float face ) {\n\t\tvec2 uv;\n\t\tif ( face == 0.0 ) {\n\t\t\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 1.0 ) {\n\t\t\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\n\t\t} else if ( face == 2.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\n\t\t} else if ( face == 3.0 ) {\n\t\t\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 4.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\n\t\t} else {\n\t\t\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\n\t\t}\n\t\treturn 0.5 * ( uv + 1.0 );\n\t}\n\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\n\t\tfloat face = getFace( direction );\n\t\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\n\t\tmipInt = max( mipInt, cubeUV_minMipLevel );\n\t\tfloat faceSize = exp2( mipInt );\n\t\tfloat texelSize = 1.0 / ( 3.0 * cubeUV_maxTileSize );\n\t\tvec2 uv = getUV( direction, face ) * ( faceSize - 1.0 );\n\t\tvec2 f = fract( uv );\n\t\tuv += 0.5 - f;\n\t\tif ( face > 2.0 ) {\n\t\t\tuv.y += faceSize;\n\t\t\tface -= 3.0;\n\t\t}\n\t\tuv.x += face * faceSize;\n\t\tif ( mipInt < cubeUV_maxMipLevel ) {\n\t\t\tuv.y += 2.0 * cubeUV_maxTileSize;\n\t\t}\n\t\tuv.y += filterInt * 2.0 * cubeUV_minTileSize;\n\t\tuv.x += 3.0 * max( 0.0, cubeUV_maxTileSize - 2.0 * faceSize );\n\t\tuv *= texelSize;\n\t\tvec3 tl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x += texelSize;\n\t\tvec3 tr = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.y += texelSize;\n\t\tvec3 br = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x -= texelSize;\n\t\tvec3 bl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tvec3 tm = mix( tl, tr, f.x );\n\t\tvec3 bm = mix( bl, br, f.x );\n\t\treturn mix( tm, bm, f.y );\n\t}\n\t#define r0 1.0\n\t#define v0 0.339\n\t#define m0 - 2.0\n\t#define r1 0.8\n\t#define v1 0.276\n\t#define m1 - 1.0\n\t#define r4 0.4\n\t#define v4 0.046\n\t#define m4 2.0\n\t#define r5 0.305\n\t#define v5 0.016\n\t#define m5 3.0\n\t#define r6 0.21\n\t#define v6 0.0038\n\t#define m6 4.0\n\tfloat roughnessToMip( float roughness ) {\n\t\tfloat mip = 0.0;\n\t\tif ( roughness >= r1 ) {\n\t\t\tmip = ( r0 - roughness ) * ( m1 - m0 ) / ( r0 - r1 ) + m0;\n\t\t} else if ( roughness >= r4 ) {\n\t\t\tmip = ( r1 - roughness ) * ( m4 - m1 ) / ( r1 - r4 ) + m1;\n\t\t} else if ( roughness >= r5 ) {\n\t\t\tmip = ( r4 - roughness ) * ( m5 - m4 ) / ( r4 - r5 ) + m4;\n\t\t} else if ( roughness >= r6 ) {\n\t\t\tmip = ( r5 - roughness ) * ( m6 - m5 ) / ( r5 - r6 ) + m5;\n\t\t} else {\n\t\t\tmip = - 2.0 * log2( 1.16 * roughness );\t\t}\n\t\treturn mip;\n\t}\n\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\n\t\tfloat mip = clamp( roughnessToMip( roughness ), m0, cubeUV_maxMipLevel );\n\t\tfloat mipF = fract( mip );\n\t\tfloat mipInt = floor( mip );\n\t\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\n\t\tif ( mipF == 0.0 ) {\n\t\t\treturn vec4( color0, 1.0 );\n\t\t} else {\n\t\t\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\n\t\t\treturn vec4( mix( color0, color1, mipF ), 1.0 );\n\t\t}\n\t}\n#endif', + defaultnormal_vertex: + 'vec3 transformedNormal = objectNormal;\n#ifdef USE_INSTANCING\n\tmat3 m = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\n\ttransformedNormal = m * transformedNormal;\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif', + displacementmap_pars_vertex: + '#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif', + displacementmap_vertex: + '#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\n#endif', + emissivemap_fragment: + '#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif', + emissivemap_pars_fragment: + '#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif', + encodings_fragment: 'gl_FragColor = linearToOutputTexel( gl_FragColor );', + encodings_pars_fragment: + '\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\n\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract( Le );\n\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\n\treturn vec4( max( vRGB, 0.0 ), 1.0 );\n}', + envmap_fragment: + '#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvec3 cameraToFrag;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifndef ENVMAP_TYPE_CUBE_UV\n\t\tenvColor = envMapTexelToLinear( envColor );\n\t#endif\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif', + envmap_common_pars_fragment: + '#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\tuniform int maxMipLevel;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\t\n#endif', + envmap_pars_fragment: + '#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif', + envmap_pars_vertex: + '#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif', + envmap_physical_pars_fragment: + '#if defined( USE_ENVMAP )\n\t#ifdef ENVMAP_MODE_REFRACTION\n\t\tuniform float refractionRatio;\n\t#endif\n\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\n\t\t#else\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\t\t#endif\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t}\n\tfloat getSpecularMIPLevel( const in float roughness, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat sigma = PI * roughness * roughness / ( 1.0 + roughness );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar + log2( sigma );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( -viewDir, normal );\n\t\t\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( -viewDir, normal, refractionRatio );\n\t\t#endif\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( roughness, maxMIPLevel );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\n\t\t#endif\n\t\treturn envMapColor.rgb * envMapIntensity;\n\t}\n#endif', + envmap_vertex: + '#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif', + fog_vertex: '#ifdef USE_FOG\n\tfogDepth = - mvPosition.z;\n#endif', + fog_pars_vertex: '#ifdef USE_FOG\n\tvarying float fogDepth;\n#endif', + fog_fragment: + '#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif', + fog_pars_fragment: + '#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float fogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif', + gradientmap_pars_fragment: + '#ifdef USE_GRADIENTMAP\n\tuniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\tfloat dotNL = dot( normal, lightDirection );\n\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t#ifdef USE_GRADIENTMAP\n\t\treturn texture2D( gradientMap, coord ).rgb;\n\t#else\n\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t#endif\n}', + lightmap_fragment: + '#ifdef USE_LIGHTMAP\n\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\treflectedLight.indirectDiffuse += PI * lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n#endif', + lightmap_pars_fragment: + '#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif', + lights_lambert_vertex: + 'vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\nvIndirectFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n\tvIndirectBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry );\n#ifdef DOUBLE_SIDED\n\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\n\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry );\n#endif\n#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif', + lights_pars_begin: + 'uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\nuniform vec3 lightProbe[ 9 ];\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n\treturn result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in GeometricContext geometry ) {\n\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treturn irradiance;\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tdirectLight.color = directionalLight.color;\n\t\tdirectLight.direction = directionalLight.direction;\n\t\tdirectLight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tdirectLight.color = pointLight.color;\n\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n\t\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\n\t\tif ( angleCos > spotLight.coneCos ) {\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\t\tdirectLight.color = spotLight.color;\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tdirectLight.visible = true;\n\t\t} else {\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tirradiance *= PI;\n\t\t#endif\n\t\treturn irradiance;\n\t}\n#endif', + lights_toon_fragment: + 'ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;', + lights_toon_pars_fragment: + 'varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct ToonMaterial {\n\tvec3 diffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon\n#define Material_LightProbeLOD( material )\t(0)', + lights_phong_fragment: + 'BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;', + lights_phong_pars_fragment: + 'varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct BlinnPhongMaterial {\n\tvec3 diffuseColor;\n\tvec3 specularColor;\n\tfloat specularShininess;\n\tfloat specularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)', + lights_physical_fragment: + 'PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.specularRoughness = max( roughnessFactor, 0.0525 );material.specularRoughness += geometryRoughness;\nmaterial.specularRoughness = min( material.specularRoughness, 1.0 );\n#ifdef REFLECTIVITY\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#endif\n#ifdef CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;\n\t#endif\n\tmaterial.clearcoat = saturate( material.clearcoat );\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n\tmaterial.clearcoatRoughness += geometryRoughness;\n\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_SHEEN\n\tmaterial.sheenColor = sheen;\n#endif', + lights_physical_pars_fragment: + 'struct PhysicalMaterial {\n\tvec3 diffuseColor;\n\tfloat specularRoughness;\n\tvec3 specularColor;\n#ifdef CLEARCOAT\n\tfloat clearcoat;\n\tfloat clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tvec3 sheenColor;\n#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearcoatDHRApprox( const in float roughness, const in float dotNL ) {\n\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.specularRoughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3(\t\t0, 1,\t\t0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNL = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = ccDotNL * directLight.color;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tccIrradiance *= PI;\n\t\t#endif\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t\treflectedLight.directSpecular += ccIrradiance * material.clearcoat * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_Sheen(\n\t\t\tmaterial.specularRoughness,\n\t\t\tdirectLight.direction,\n\t\t\tgeometry,\n\t\t\tmaterial.sheenColor\n\t\t);\n\t#else\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.normal, material.specularColor, material.specularRoughness);\n\t#endif\n\treflectedLight.directDiffuse += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNV = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular += clearcoatRadiance * material.clearcoat * BRDF_Specular_GGX_Environment( geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t\tfloat ccDotNL = ccDotNV;\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\tfloat clearcoatInv = 1.0 - clearcoatDHR;\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\tBRDF_Specular_Multiscattering_Environment( geometry, material.specularColor, material.specularRoughness, singleScattering, multiScattering );\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\n\treflectedLight.indirectSpecular += clearcoatInv * radiance * singleScattering;\n\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}', + lights_fragment_begin: + '\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n#ifdef CLEARCOAT\n\tgeometry.clearcoatNormal = clearcoatNormal;\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\tirradiance += getLightProbeIrradiance( lightProbe, geometry );\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n#endif', + lights_fragment_maps: + '#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.normal, material.specularRoughness, maxMipLevel );\n\t#ifdef CLEARCOAT\n\t\tclearcoatRadiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness, maxMipLevel );\n\t#endif\n#endif', + lights_fragment_end: + '#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\n#endif', + logdepthbuf_fragment: + '#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif', + logdepthbuf_pars_fragment: + '#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif', + logdepthbuf_pars_vertex: + '#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t\tvarying float vIsPerspective;\n\t#else\n\t\tuniform float logDepthBufFC;\n\t#endif\n#endif', + logdepthbuf_vertex: + '#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n\t#else\n\t\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\n\t\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\t\tgl_Position.z *= gl_Position.w;\n\t\t}\n\t#endif\n#endif', + map_fragment: + '#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif', + map_pars_fragment: '#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif', + map_particle_fragment: + '#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n#endif\n#ifdef USE_MAP\n\tvec4 mapTexel = texture2D( map, uv );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif', + map_particle_pars_fragment: + '#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tuniform mat3 uvTransform;\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif', + metalnessmap_fragment: + 'float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif', + metalnessmap_pars_fragment: + '#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif', + morphnormal_vertex: + '#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\n\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\n\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\n\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\n#endif', + morphtarget_pars_vertex: + '#ifdef USE_MORPHTARGETS\n\tuniform float morphTargetBaseInfluence;\n\t#ifndef USE_MORPHNORMALS\n\t\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\t\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif', + morphtarget_vertex: + '#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\n\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\n\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\n\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\t\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\n\t\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\n\t\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\n\t\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\n\t#endif\n#endif', + normal_fragment_begin: + 'float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\n#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * faceDirection;\n\t#endif\n\t#ifdef USE_TANGENT\n\t\tvec3 tangent = normalize( vTangent );\n\t\tvec3 bitangent = normalize( vBitangent );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\ttangent = tangent * faceDirection;\n\t\t\tbitangent = bitangent * faceDirection;\n\t\t#endif\n\t\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tmat3 vTBN = mat3( tangent, bitangent, normal );\n\t\t#endif\n\t#endif\n#endif\nvec3 geometryNormal = normal;', + normal_fragment_maps: + '#ifdef OBJECTSPACE_NORMALMAP\n\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * faceDirection;\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( TANGENTSPACE_NORMALMAP )\n\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\t#ifdef USE_TANGENT\n\t\tnormal = normalize( vTBN * mapN );\n\t#else\n\t\tnormal = perturbNormal2Arb( -vViewPosition, normal, mapN, faceDirection );\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd(), faceDirection );\n#endif', + normalmap_pars_fragment: + '#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN, float faceDirection ) {\n\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tvec3 N = surf_norm;\n\t\tvec3 q1perp = cross( q1, N );\n\t\tvec3 q0perp = cross( N, q0 );\n\t\tvec3 T = q1perp * st0.x + q0perp * st1.x;\n\t\tvec3 B = q1perp * st0.y + q0perp * st1.y;\n\t\tfloat det = max( dot( T, T ), dot( B, B ) );\n\t\tfloat scale = ( det == 0.0 ) ? 0.0 : faceDirection * inversesqrt( det );\n\t\treturn normalize( T * ( mapN.x * scale ) + B * ( mapN.y * scale ) + N * mapN.z );\n\t}\n#endif', + clearcoat_normal_fragment_begin: + '#ifdef CLEARCOAT\n\tvec3 clearcoatNormal = geometryNormal;\n#endif', + clearcoat_normal_fragment_maps: + '#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\t#ifdef USE_TANGENT\n\t\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\n\t#else\n\t\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN, faceDirection );\n\t#endif\n#endif', + clearcoat_pars_fragment: + '#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif', + packing: + 'vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nvec4 pack2HalfToRGBA( vec2 v ) {\n\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ));\n\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w);\n}\nvec2 unpackRGBATo2Half( vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}', + premultiplied_alpha_fragment: + '#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif', + project_vertex: + 'vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;', + dithering_fragment: + '#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif', + dithering_pars_fragment: + '#ifdef DITHERING\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif', + roughnessmap_fragment: + 'float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif', + roughnessmap_pars_fragment: + '#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif', + shadowmap_pars_fragment: + '#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n\t\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\n\t}\n\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n\t\tfloat occlusion = 1.0;\n\t\tvec2 distribution = texture2DDistribution( shadow, uv );\n\t\tfloat hard_shadow = step( compare , distribution.x );\n\t\tif (hard_shadow != 1.0 ) {\n\t\t\tfloat distance = compare - distribution.x ;\n\t\t\tfloat variance = max( 0.00000, distribution.y * distribution.y );\n\t\t\tfloat softness_probability = variance / (variance + distance * distance );\t\t\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\t\t\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n\t\t}\n\t\treturn occlusion;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t\tf.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \n\t\t\t\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t\tf.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif', + shadowmap_pars_vertex: + '#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n#endif', + shadowmap_vertex: + '#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0\n\t\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\tvec4 shadowWorldPosition;\n\t#endif\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n#endif', + shadowmask_pars_fragment: + 'float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tdirectionalLight = directionalLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tspotLight = spotLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tpointLight = pointLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#endif\n\treturn shadow;\n}', + skinbase_vertex: + '#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif', + skinning_pars_vertex: + '#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform highp sampler2D boneTexture;\n\t\tuniform int boneTextureSize;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif', + skinning_vertex: + '#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif', + skinnormal_vertex: + '#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif', + specularmap_fragment: + 'float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif', + specularmap_pars_fragment: + '#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif', + tonemapping_fragment: + '#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif', + tonemapping_pars_fragment: + '#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 RRTAndODTFit( vec3 v ) {\n\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n\treturn a / b;\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tconst mat3 ACESInputMat = mat3(\n\t\tvec3( 0.59719, 0.07600, 0.02840 ),\t\tvec3( 0.35458, 0.90834, 0.13383 ),\n\t\tvec3( 0.04823, 0.01566, 0.83777 )\n\t);\n\tconst mat3 ACESOutputMat = mat3(\n\t\tvec3(\t1.60475, -0.10208, -0.00327 ),\t\tvec3( -0.53108,\t1.10813, -0.07276 ),\n\t\tvec3( -0.07367, -0.00605,\t1.07602 )\n\t);\n\tcolor *= toneMappingExposure / 0.6;\n\tcolor = ACESInputMat * color;\n\tcolor = RRTAndODTFit( color );\n\tcolor = ACESOutputMat * color;\n\treturn saturate( color );\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }', + transmissionmap_fragment: + '#ifdef USE_TRANSMISSIONMAP\n\ttotalTransmission *= texture2D( transmissionMap, vUv ).r;\n#endif', + transmissionmap_pars_fragment: + '#ifdef USE_TRANSMISSIONMAP\n\tuniform sampler2D transmissionMap;\n#endif', + uv_pars_fragment: + '#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\n\tvarying vec2 vUv;\n#endif', + uv_pars_vertex: + '#ifdef USE_UV\n\t#ifdef UVS_VERTEX_ONLY\n\t\tvec2 vUv;\n\t#else\n\t\tvarying vec2 vUv;\n\t#endif\n\tuniform mat3 uvTransform;\n#endif', + uv_vertex: + '#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif', + uv2_pars_fragment: + '#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif', + uv2_pars_vertex: + '#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n\tuniform mat3 uv2Transform;\n#endif', + uv2_vertex: + '#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\n#endif', + worldpos_vertex: + '#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif', + background_frag: + 'uniform sampler2D t2D;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}', + background_vert: + 'varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}', + cube_frag: + '#include \nuniform float opacity;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 vReflect = vWorldDirection;\n\t#include \n\tgl_FragColor = envColor;\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}', + cube_vert: + 'varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}', + depth_frag: + '#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\t#endif\n}', + depth_vert: + '#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvHighPrecisionZW = gl_Position.zw;\n}', + distanceRGBA_frag: + '#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}', + distanceRGBA_vert: + '#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}', + equirect_frag: + 'uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tvec4 texColor = texture2D( tEquirect, sampleUV );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}', + equirect_vert: + 'varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}', + linedashed_frag: + 'uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}', + linedashed_vert: + 'uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvLineDistance = scale * lineDistance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}', + meshbasic_frag: + 'uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}', + meshbasic_vert: + '#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_ENVMAP\n\t#include \n\t#include \n\t#include \n\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}', + meshlambert_frag: + 'uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\n\t#else\n\t\treflectedLight.indirectDiffuse += vIndirectFront;\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}', + meshlambert_vert: + '#define LAMBERT\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}', + meshmatcap_frag: + '#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t\tmatcapColor = matcapTexelToLinear( matcapColor );\n\t#else\n\t\tvec4 matcapColor = vec4( 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}', + meshmatcap_vert: + '#define MATCAP\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifndef FLAT_SHADED\n\t\tvNormal = normalize( transformedNormal );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n}', + meshtoon_frag: + '#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}', + meshtoon_vert: + '#define TOON\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}', + meshphong_frag: + '#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}', + meshphong_vert: + '#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}', + meshphysical_frag: + '#define STANDARD\n#ifdef PHYSICAL\n\t#define REFLECTIVITY\n\t#define CLEARCOAT\n\t#define TRANSMISSION\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef TRANSMISSION\n\tuniform float transmission;\n#endif\n#ifdef REFLECTIVITY\n\tuniform float reflectivity;\n#endif\n#ifdef CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheen;\n#endif\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#ifdef TRANSMISSION\n\t\tfloat totalTransmission = transmission;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#ifdef TRANSMISSION\n\t\tdiffuseColor.a *= mix( saturate( 1. - totalTransmission + linearToRelativeLuminance( reflectedLight.directSpecular + reflectedLight.indirectSpecular ) ), 1.0, metalness );\n\t#endif\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}', + meshphysical_vert: + '#define STANDARD\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}', + normal_frag: + '#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}', + normal_vert: + '#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}', + points_frag: + 'uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}', + points_vert: + 'uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}', + shadow_frag: + 'uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n\t#include \n\t#include \n}', + shadow_vert: + '#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}', + sprite_frag: + 'uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n}', + sprite_vert: + 'uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}', + }, + ui = { + common: { + diffuse: { value: new tn(15658734) }, + opacity: { value: 1 }, + map: { value: null }, + uvTransform: { value: new yt() }, + uv2Transform: { value: new yt() }, + alphaMap: { value: null }, + }, + specularmap: { specularMap: { value: null } }, + envmap: { + envMap: { value: null }, + flipEnvMap: { value: -1 }, + reflectivity: { value: 1 }, + refractionRatio: { value: 0.98 }, + maxMipLevel: { value: 0 }, + }, + aomap: { aoMap: { value: null }, aoMapIntensity: { value: 1 } }, + lightmap: { lightMap: { value: null }, lightMapIntensity: { value: 1 } }, + emissivemap: { emissiveMap: { value: null } }, + bumpmap: { bumpMap: { value: null }, bumpScale: { value: 1 } }, + normalmap: { + normalMap: { value: null }, + normalScale: { value: new vt(1, 1) }, + }, + displacementmap: { + displacementMap: { value: null }, + displacementScale: { value: 1 }, + displacementBias: { value: 0 }, + }, + roughnessmap: { roughnessMap: { value: null } }, + metalnessmap: { metalnessMap: { value: null } }, + gradientmap: { gradientMap: { value: null } }, + fog: { + fogDensity: { value: 25e-5 }, + fogNear: { value: 1 }, + fogFar: { value: 2e3 }, + fogColor: { value: new tn(16777215) }, + }, + lights: { + ambientLightColor: { value: [] }, + lightProbe: { value: [] }, + directionalLights: { + value: [], + properties: { direction: {}, color: {} }, + }, + directionalLightShadows: { + value: [], + properties: { + shadowBias: {}, + shadowNormalBias: {}, + shadowRadius: {}, + shadowMapSize: {}, + }, + }, + directionalShadowMap: { value: [] }, + directionalShadowMatrix: { value: [] }, + spotLights: { + value: [], + properties: { + color: {}, + position: {}, + direction: {}, + distance: {}, + coneCos: {}, + penumbraCos: {}, + decay: {}, + }, + }, + spotLightShadows: { + value: [], + properties: { + shadowBias: {}, + shadowNormalBias: {}, + shadowRadius: {}, + shadowMapSize: {}, + }, + }, + spotShadowMap: { value: [] }, + spotShadowMatrix: { value: [] }, + pointLights: { + value: [], + properties: { color: {}, position: {}, decay: {}, distance: {} }, + }, + pointLightShadows: { + value: [], + properties: { + shadowBias: {}, + shadowNormalBias: {}, + shadowRadius: {}, + shadowMapSize: {}, + shadowCameraNear: {}, + shadowCameraFar: {}, + }, + }, + pointShadowMap: { value: [] }, + pointShadowMatrix: { value: [] }, + hemisphereLights: { + value: [], + properties: { direction: {}, skyColor: {}, groundColor: {} }, + }, + rectAreaLights: { + value: [], + properties: { color: {}, position: {}, width: {}, height: {} }, + }, + ltc_1: { value: null }, + ltc_2: { value: null }, + }, + points: { + diffuse: { value: new tn(15658734) }, + opacity: { value: 1 }, + size: { value: 1 }, + scale: { value: 1 }, + map: { value: null }, + alphaMap: { value: null }, + uvTransform: { value: new yt() }, + }, + sprite: { + diffuse: { value: new tn(15658734) }, + opacity: { value: 1 }, + center: { value: new vt(0.5, 0.5) }, + rotation: { value: 0 }, + map: { value: null }, + alphaMap: { value: null }, + uvTransform: { value: new yt() }, + }, + }, + di = { + basic: { + uniforms: Yn([ + ui.common, + ui.specularmap, + ui.envmap, + ui.aomap, + ui.lightmap, + ui.fog, + ]), + vertexShader: hi.meshbasic_vert, + fragmentShader: hi.meshbasic_frag, + }, + lambert: { + uniforms: Yn([ + ui.common, + ui.specularmap, + ui.envmap, + ui.aomap, + ui.lightmap, + ui.emissivemap, + ui.fog, + ui.lights, + { emissive: { value: new tn(0) } }, + ]), + vertexShader: hi.meshlambert_vert, + fragmentShader: hi.meshlambert_frag, + }, + phong: { + uniforms: Yn([ + ui.common, + ui.specularmap, + ui.envmap, + ui.aomap, + ui.lightmap, + ui.emissivemap, + ui.bumpmap, + ui.normalmap, + ui.displacementmap, + ui.fog, + ui.lights, + { + emissive: { value: new tn(0) }, + specular: { value: new tn(1118481) }, + shininess: { value: 30 }, + }, + ]), + vertexShader: hi.meshphong_vert, + fragmentShader: hi.meshphong_frag, + }, + standard: { + uniforms: Yn([ + ui.common, + ui.envmap, + ui.aomap, + ui.lightmap, + ui.emissivemap, + ui.bumpmap, + ui.normalmap, + ui.displacementmap, + ui.roughnessmap, + ui.metalnessmap, + ui.fog, + ui.lights, + { + emissive: { value: new tn(0) }, + roughness: { value: 1 }, + metalness: { value: 0 }, + envMapIntensity: { value: 1 }, + }, + ]), + vertexShader: hi.meshphysical_vert, + fragmentShader: hi.meshphysical_frag, + }, + toon: { + uniforms: Yn([ + ui.common, + ui.aomap, + ui.lightmap, + ui.emissivemap, + ui.bumpmap, + ui.normalmap, + ui.displacementmap, + ui.gradientmap, + ui.fog, + ui.lights, + { emissive: { value: new tn(0) } }, + ]), + vertexShader: hi.meshtoon_vert, + fragmentShader: hi.meshtoon_frag, + }, + matcap: { + uniforms: Yn([ + ui.common, + ui.bumpmap, + ui.normalmap, + ui.displacementmap, + ui.fog, + { matcap: { value: null } }, + ]), + vertexShader: hi.meshmatcap_vert, + fragmentShader: hi.meshmatcap_frag, + }, + points: { + uniforms: Yn([ui.points, ui.fog]), + vertexShader: hi.points_vert, + fragmentShader: hi.points_frag, + }, + dashed: { + uniforms: Yn([ + ui.common, + ui.fog, + { + scale: { value: 1 }, + dashSize: { value: 1 }, + totalSize: { value: 2 }, + }, + ]), + vertexShader: hi.linedashed_vert, + fragmentShader: hi.linedashed_frag, + }, + depth: { + uniforms: Yn([ui.common, ui.displacementmap]), + vertexShader: hi.depth_vert, + fragmentShader: hi.depth_frag, + }, + normal: { + uniforms: Yn([ + ui.common, + ui.bumpmap, + ui.normalmap, + ui.displacementmap, + { opacity: { value: 1 } }, + ]), + vertexShader: hi.normal_vert, + fragmentShader: hi.normal_frag, + }, + sprite: { + uniforms: Yn([ui.sprite, ui.fog]), + vertexShader: hi.sprite_vert, + fragmentShader: hi.sprite_frag, + }, + background: { + uniforms: { uvTransform: { value: new yt() }, t2D: { value: null } }, + vertexShader: hi.background_vert, + fragmentShader: hi.background_frag, + }, + cube: { + uniforms: Yn([ui.envmap, { opacity: { value: 1 } }]), + vertexShader: hi.cube_vert, + fragmentShader: hi.cube_frag, + }, + equirect: { + uniforms: { tEquirect: { value: null } }, + vertexShader: hi.equirect_vert, + fragmentShader: hi.equirect_frag, + }, + distanceRGBA: { + uniforms: Yn([ + ui.common, + ui.displacementmap, + { + referencePosition: { value: new Lt() }, + nearDistance: { value: 1 }, + farDistance: { value: 1e3 }, + }, + ]), + vertexShader: hi.distanceRGBA_vert, + fragmentShader: hi.distanceRGBA_frag, + }, + shadow: { + uniforms: Yn([ + ui.lights, + ui.fog, + { color: { value: new tn(0) }, opacity: { value: 1 } }, + ]), + vertexShader: hi.shadow_vert, + fragmentShader: hi.shadow_frag, + }, + }; + function pi(t, e, n, i, r) { + const s = new tn(0); + let a, + o, + c = 0, + h = null, + u = 0, + d = null; + function p(t, e) { + n.buffers.color.setClear(t.r, t.g, t.b, e, r); + } + return { + getClearColor: function () { + return s; + }, + setClearColor: function (t, e = 1) { + s.set(t), (c = e), p(s, c); + }, + getClearAlpha: function () { + return c; + }, + setClearAlpha: function (t) { + (c = t), p(s, c); + }, + render: function (n, r, m, f) { + let g = !0 === r.isScene ? r.background : null; + g && g.isTexture && (g = e.get(g)); + const v = t.xr, + y = v.getSession && v.getSession(); + y && 'additive' === y.environmentBlendMode && (g = null), + null === g ? p(s, c) : g && g.isColor && (p(g, 1), (f = !0)), + (t.autoClear || f) && + t.clear(t.autoClearColor, t.autoClearDepth, t.autoClearStencil), + g && (g.isCubeTexture || g.mapping === l) + ? (void 0 === o && + ((o = new Wn( + new qn(1, 1, 1), + new Jn({ + name: 'BackgroundCubeMaterial', + uniforms: Xn(di.cube.uniforms), + vertexShader: di.cube.vertexShader, + fragmentShader: di.cube.fragmentShader, + side: 1, + depthTest: !1, + depthWrite: !1, + fog: !1, + }) + )), + o.geometry.deleteAttribute('normal'), + o.geometry.deleteAttribute('uv'), + (o.onBeforeRender = function (t, e, n) { + this.matrixWorld.copyPosition(n.matrixWorld); + }), + Object.defineProperty(o.material, 'envMap', { + get: function () { + return this.uniforms.envMap.value; + }, + }), + i.update(o)), + (o.material.uniforms.envMap.value = g), + (o.material.uniforms.flipEnvMap.value = + g.isCubeTexture && g._needsFlipEnvMap ? -1 : 1), + (h === g && u === g.version && d === t.toneMapping) || + ((o.material.needsUpdate = !0), + (h = g), + (u = g.version), + (d = t.toneMapping)), + n.unshift(o, o.geometry, o.material, 0, 0, null)) + : g && + g.isTexture && + (void 0 === a && + ((a = new Wn( + new ci(2, 2), + new Jn({ + name: 'BackgroundMaterial', + uniforms: Xn(di.background.uniforms), + vertexShader: di.background.vertexShader, + fragmentShader: di.background.fragmentShader, + side: 0, + depthTest: !1, + depthWrite: !1, + fog: !1, + }) + )), + a.geometry.deleteAttribute('normal'), + Object.defineProperty(a.material, 'map', { + get: function () { + return this.uniforms.t2D.value; + }, + }), + i.update(a)), + (a.material.uniforms.t2D.value = g), + !0 === g.matrixAutoUpdate && g.updateMatrix(), + a.material.uniforms.uvTransform.value.copy(g.matrix), + (h === g && u === g.version && d === t.toneMapping) || + ((a.material.needsUpdate = !0), + (h = g), + (u = g.version), + (d = t.toneMapping)), + n.unshift(a, a.geometry, a.material, 0, 0, null)); + }, + }; + } + function mi(t, e, n, i) { + const r = t.getParameter(34921), + s = i.isWebGL2 ? null : e.get('OES_vertex_array_object'), + a = i.isWebGL2 || null !== s, + o = {}, + l = d(null); + let c = l; + function h(e) { + return i.isWebGL2 ? t.bindVertexArray(e) : s.bindVertexArrayOES(e); + } + function u(e) { + return i.isWebGL2 ? t.deleteVertexArray(e) : s.deleteVertexArrayOES(e); + } + function d(t) { + const e = [], + n = [], + i = []; + for (let t = 0; t < r; t++) (e[t] = 0), (n[t] = 0), (i[t] = 0); + return { + geometry: null, + program: null, + wireframe: !1, + newAttributes: e, + enabledAttributes: n, + attributeDivisors: i, + object: t, + attributes: {}, + index: null, + }; + } + function p() { + const t = c.newAttributes; + for (let e = 0, n = t.length; e < n; e++) t[e] = 0; + } + function m(t) { + f(t, 0); + } + function f(n, r) { + const s = c.newAttributes, + a = c.enabledAttributes, + o = c.attributeDivisors; + if ( + ((s[n] = 1), + 0 === a[n] && (t.enableVertexAttribArray(n), (a[n] = 1)), + o[n] !== r) + ) { + (i.isWebGL2 ? t : e.get('ANGLE_instanced_arrays'))[ + i.isWebGL2 ? 'vertexAttribDivisor' : 'vertexAttribDivisorANGLE' + ](n, r), + (o[n] = r); + } + } + function g() { + const e = c.newAttributes, + n = c.enabledAttributes; + for (let i = 0, r = n.length; i < r; i++) + n[i] !== e[i] && (t.disableVertexAttribArray(i), (n[i] = 0)); + } + function v(e, n, r, s, a, o) { + !0 !== i.isWebGL2 || (5124 !== r && 5125 !== r) + ? t.vertexAttribPointer(e, n, r, s, a, o) + : t.vertexAttribIPointer(e, n, r, a, o); + } + function y() { + x(), c !== l && ((c = l), h(c.object)); + } + function x() { + (l.geometry = null), (l.program = null), (l.wireframe = !1); + } + return { + setup: function (r, l, u, y, x) { + let _ = !1; + if (a) { + const e = (function (e, n, r) { + const a = !0 === r.wireframe; + let l = o[e.id]; + void 0 === l && ((l = {}), (o[e.id] = l)); + let c = l[n.id]; + void 0 === c && ((c = {}), (l[n.id] = c)); + let h = c[a]; + void 0 === h && + ((h = d( + i.isWebGL2 ? t.createVertexArray() : s.createVertexArrayOES() + )), + (c[a] = h)); + return h; + })(y, u, l); + c !== e && ((c = e), h(c.object)), + (_ = (function (t, e) { + const n = c.attributes, + i = t.attributes; + let r = 0; + for (const t in i) { + const e = n[t], + s = i[t]; + if (void 0 === e) return !0; + if (e.attribute !== s) return !0; + if (e.data !== s.data) return !0; + r++; + } + return c.attributesNum !== r || c.index !== e; + })(y, x)), + _ && + (function (t, e) { + const n = {}, + i = t.attributes; + let r = 0; + for (const t in i) { + const e = i[t], + s = {}; + (s.attribute = e), + e.data && (s.data = e.data), + (n[t] = s), + r++; + } + (c.attributes = n), (c.attributesNum = r), (c.index = e); + })(y, x); + } else { + const t = !0 === l.wireframe; + (c.geometry === y.id && c.program === u.id && c.wireframe === t) || + ((c.geometry = y.id), + (c.program = u.id), + (c.wireframe = t), + (_ = !0)); + } + !0 === r.isInstancedMesh && (_ = !0), + null !== x && n.update(x, 34963), + _ && + (!(function (r, s, a, o) { + if ( + !1 === i.isWebGL2 && + (r.isInstancedMesh || o.isInstancedBufferGeometry) && + null === e.get('ANGLE_instanced_arrays') + ) + return; + p(); + const l = o.attributes, + c = a.getAttributes(), + h = s.defaultAttributeValues; + for (const e in c) { + const i = c[e]; + if (i >= 0) { + const s = l[e]; + if (void 0 !== s) { + const e = s.normalized, + r = s.itemSize, + a = n.get(s); + if (void 0 === a) continue; + const l = a.buffer, + c = a.type, + h = a.bytesPerElement; + if (s.isInterleavedBufferAttribute) { + const n = s.data, + a = n.stride, + u = s.offset; + n && n.isInstancedInterleavedBuffer + ? (f(i, n.meshPerAttribute), + void 0 === o._maxInstanceCount && + (o._maxInstanceCount = + n.meshPerAttribute * n.count)) + : m(i), + t.bindBuffer(34962, l), + v(i, r, c, e, a * h, u * h); + } else + s.isInstancedBufferAttribute + ? (f(i, s.meshPerAttribute), + void 0 === o._maxInstanceCount && + (o._maxInstanceCount = + s.meshPerAttribute * s.count)) + : m(i), + t.bindBuffer(34962, l), + v(i, r, c, e, 0, 0); + } else if ('instanceMatrix' === e) { + const e = n.get(r.instanceMatrix); + if (void 0 === e) continue; + const s = e.buffer, + a = e.type; + f(i + 0, 1), + f(i + 1, 1), + f(i + 2, 1), + f(i + 3, 1), + t.bindBuffer(34962, s), + t.vertexAttribPointer(i + 0, 4, a, !1, 64, 0), + t.vertexAttribPointer(i + 1, 4, a, !1, 64, 16), + t.vertexAttribPointer(i + 2, 4, a, !1, 64, 32), + t.vertexAttribPointer(i + 3, 4, a, !1, 64, 48); + } else if ('instanceColor' === e) { + const e = n.get(r.instanceColor); + if (void 0 === e) continue; + const s = e.buffer, + a = e.type; + f(i, 1), + t.bindBuffer(34962, s), + t.vertexAttribPointer(i, 3, a, !1, 12, 0); + } else if (void 0 !== h) { + const n = h[e]; + if (void 0 !== n) + switch (n.length) { + case 2: + t.vertexAttrib2fv(i, n); + break; + case 3: + t.vertexAttrib3fv(i, n); + break; + case 4: + t.vertexAttrib4fv(i, n); + break; + default: + t.vertexAttrib1fv(i, n); + } + } + } + } + g(); + })(r, l, u, y), + null !== x && t.bindBuffer(34963, n.get(x).buffer)); + }, + reset: y, + resetDefaultState: x, + dispose: function () { + y(); + for (const t in o) { + const e = o[t]; + for (const t in e) { + const n = e[t]; + for (const t in n) u(n[t].object), delete n[t]; + delete e[t]; + } + delete o[t]; + } + }, + releaseStatesOfGeometry: function (t) { + if (void 0 === o[t.id]) return; + const e = o[t.id]; + for (const t in e) { + const n = e[t]; + for (const t in n) u(n[t].object), delete n[t]; + delete e[t]; + } + delete o[t.id]; + }, + releaseStatesOfProgram: function (t) { + for (const e in o) { + const n = o[e]; + if (void 0 === n[t.id]) continue; + const i = n[t.id]; + for (const t in i) u(i[t].object), delete i[t]; + delete n[t.id]; + } + }, + initAttributes: p, + enableAttribute: m, + disableUnusedAttributes: g, + }; + } + function fi(t, e, n, i) { + const r = i.isWebGL2; + let s; + (this.setMode = function (t) { + s = t; + }), + (this.render = function (e, i) { + t.drawArrays(s, e, i), n.update(i, s, 1); + }), + (this.renderInstances = function (i, a, o) { + if (0 === o) return; + let l, c; + if (r) (l = t), (c = 'drawArraysInstanced'); + else if ( + ((l = e.get('ANGLE_instanced_arrays')), + (c = 'drawArraysInstancedANGLE'), + null === l) + ) + return void console.error( + 'THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' + ); + l[c](s, i, a, o), n.update(a, s, o); + }); + } + function gi(t, e, n) { + let i; + function r(e) { + if ('highp' === e) { + if ( + t.getShaderPrecisionFormat(35633, 36338).precision > 0 && + t.getShaderPrecisionFormat(35632, 36338).precision > 0 + ) + return 'highp'; + e = 'mediump'; + } + return 'mediump' === e && + t.getShaderPrecisionFormat(35633, 36337).precision > 0 && + t.getShaderPrecisionFormat(35632, 36337).precision > 0 + ? 'mediump' + : 'lowp'; + } + const s = + ('undefined' != typeof WebGL2RenderingContext && + t instanceof WebGL2RenderingContext) || + ('undefined' != typeof WebGL2ComputeRenderingContext && + t instanceof WebGL2ComputeRenderingContext); + let a = void 0 !== n.precision ? n.precision : 'highp'; + const o = r(a); + o !== a && + (console.warn( + 'THREE.WebGLRenderer:', + a, + 'not supported, using', + o, + 'instead.' + ), + (a = o)); + const l = !0 === n.logarithmicDepthBuffer, + c = t.getParameter(34930), + h = t.getParameter(35660), + u = t.getParameter(3379), + d = t.getParameter(34076), + p = t.getParameter(34921), + m = t.getParameter(36347), + f = t.getParameter(36348), + g = t.getParameter(36349), + v = h > 0, + y = s || e.has('OES_texture_float'); + return { + isWebGL2: s, + getMaxAnisotropy: function () { + if (void 0 !== i) return i; + if (!0 === e.has('EXT_texture_filter_anisotropic')) { + const n = e.get('EXT_texture_filter_anisotropic'); + i = t.getParameter(n.MAX_TEXTURE_MAX_ANISOTROPY_EXT); + } else i = 0; + return i; + }, + getMaxPrecision: r, + precision: a, + logarithmicDepthBuffer: l, + maxTextures: c, + maxVertexTextures: h, + maxTextureSize: u, + maxCubemapSize: d, + maxAttributes: p, + maxVertexUniforms: m, + maxVaryings: f, + maxFragmentUniforms: g, + vertexTextures: v, + floatFragmentTextures: y, + floatVertexTextures: v && y, + maxSamples: s ? t.getParameter(36183) : 0, + }; + } + function vi(t) { + const e = this; + let n = null, + i = 0, + r = !1, + s = !1; + const a = new Ne(), + o = new yt(), + l = { value: null, needsUpdate: !1 }; + function c() { + l.value !== n && ((l.value = n), (l.needsUpdate = i > 0)), + (e.numPlanes = i), + (e.numIntersection = 0); + } + function h(t, n, i, r) { + const s = null !== t ? t.length : 0; + let c = null; + if (0 !== s) { + if (((c = l.value), !0 !== r || null === c)) { + const e = i + 4 * s, + r = n.matrixWorldInverse; + o.getNormalMatrix(r), + (null === c || c.length < e) && (c = new Float32Array(e)); + for (let e = 0, n = i; e !== s; ++e, n += 4) + a.copy(t[e]).applyMatrix4(r, o), + a.normal.toArray(c, n), + (c[n + 3] = a.constant); + } + (l.value = c), (l.needsUpdate = !0); + } + return (e.numPlanes = s), (e.numIntersection = 0), c; + } + (this.uniform = l), + (this.numPlanes = 0), + (this.numIntersection = 0), + (this.init = function (t, e, s) { + const a = 0 !== t.length || e || 0 !== i || r; + return (r = e), (n = h(t, s, 0)), (i = t.length), a; + }), + (this.beginShadows = function () { + (s = !0), h(null); + }), + (this.endShadows = function () { + (s = !1), c(); + }), + (this.setState = function (e, a, o) { + const u = e.clippingPlanes, + d = e.clipIntersection, + p = e.clipShadows, + m = t.get(e); + if (!r || null === u || 0 === u.length || (s && !p)) s ? h(null) : c(); + else { + const t = s ? 0 : i, + e = 4 * t; + let r = m.clippingState || null; + (l.value = r), (r = h(u, a, e, o)); + for (let t = 0; t !== e; ++t) r[t] = n[t]; + (m.clippingState = r), + (this.numIntersection = d ? this.numPlanes : 0), + (this.numPlanes += t); + } + }); + } + function yi(t) { + let e = new WeakMap(); + function n(t, e) { + return e === a ? (t.mapping = r) : e === o && (t.mapping = s), t; + } + function i(t) { + const n = t.target; + n.removeEventListener('dispose', i); + const r = e.get(n); + void 0 !== r && (e.delete(n), r.dispose()); + } + return { + get: function (r) { + if (r && r.isTexture) { + const s = r.mapping; + if (s === a || s === o) { + if (e.has(r)) { + return n(e.get(r).texture, r.mapping); + } + { + const s = r.image; + if (s && s.height > 0) { + const a = t.getRenderTarget(), + o = new ni(s.height / 2); + return ( + o.fromEquirectangularTexture(t, r), + e.set(r, o), + t.setRenderTarget(a), + r.addEventListener('dispose', i), + n(o.texture, r.mapping) + ); + } + return null; + } + } + } + return r; + }, + dispose: function () { + e = new WeakMap(); + }, + }; + } + function xi(t) { + const e = {}; + function n(n) { + if (void 0 !== e[n]) return e[n]; + let i; + switch (n) { + case 'WEBGL_depth_texture': + i = + t.getExtension('WEBGL_depth_texture') || + t.getExtension('MOZ_WEBGL_depth_texture') || + t.getExtension('WEBKIT_WEBGL_depth_texture'); + break; + case 'EXT_texture_filter_anisotropic': + i = + t.getExtension('EXT_texture_filter_anisotropic') || + t.getExtension('MOZ_EXT_texture_filter_anisotropic') || + t.getExtension('WEBKIT_EXT_texture_filter_anisotropic'); + break; + case 'WEBGL_compressed_texture_s3tc': + i = + t.getExtension('WEBGL_compressed_texture_s3tc') || + t.getExtension('MOZ_WEBGL_compressed_texture_s3tc') || + t.getExtension('WEBKIT_WEBGL_compressed_texture_s3tc'); + break; + case 'WEBGL_compressed_texture_pvrtc': + i = + t.getExtension('WEBGL_compressed_texture_pvrtc') || + t.getExtension('WEBKIT_WEBGL_compressed_texture_pvrtc'); + break; + default: + i = t.getExtension(n); + } + return (e[n] = i), i; + } + return { + has: function (t) { + return null !== n(t); + }, + init: function (t) { + t.isWebGL2 + ? n('EXT_color_buffer_float') + : (n('WEBGL_depth_texture'), + n('OES_texture_float'), + n('OES_texture_half_float'), + n('OES_texture_half_float_linear'), + n('OES_standard_derivatives'), + n('OES_element_index_uint'), + n('OES_vertex_array_object'), + n('ANGLE_instanced_arrays')), + n('OES_texture_float_linear'), + n('EXT_color_buffer_half_float'); + }, + get: function (t) { + const e = n(t); + return ( + null === e && + console.warn( + 'THREE.WebGLRenderer: ' + t + ' extension not supported.' + ), + e + ); + }, + }; + } + function _i(t, e, n, i) { + const r = {}, + s = new WeakMap(); + function a(t) { + const o = t.target; + null !== o.index && e.remove(o.index); + for (const t in o.attributes) e.remove(o.attributes[t]); + o.removeEventListener('dispose', a), delete r[o.id]; + const l = s.get(o); + l && (e.remove(l), s.delete(o)), + i.releaseStatesOfGeometry(o), + !0 === o.isInstancedBufferGeometry && delete o._maxInstanceCount, + n.memory.geometries--; + } + function o(t) { + const n = [], + i = t.index, + r = t.attributes.position; + let a = 0; + if (null !== i) { + const t = i.array; + a = i.version; + for (let e = 0, i = t.length; e < i; e += 3) { + const i = t[e + 0], + r = t[e + 1], + s = t[e + 2]; + n.push(i, r, r, s, s, i); + } + } else { + const t = r.array; + a = r.version; + for (let e = 0, i = t.length / 3 - 1; e < i; e += 3) { + const t = e + 0, + i = e + 1, + r = e + 2; + n.push(t, i, i, r, r, t); + } + } + const o = new (gn(n) > 65535 ? dn : hn)(n, 1); + o.version = a; + const l = s.get(t); + l && e.remove(l), s.set(t, o); + } + return { + get: function (t, e) { + return ( + !0 === r[e.id] || + (e.addEventListener('dispose', a), + (r[e.id] = !0), + n.memory.geometries++), + e + ); + }, + update: function (t) { + const n = t.attributes; + for (const t in n) e.update(n[t], 34962); + const i = t.morphAttributes; + for (const t in i) { + const n = i[t]; + for (let t = 0, i = n.length; t < i; t++) e.update(n[t], 34962); + } + }, + getWireframeAttribute: function (t) { + const e = s.get(t); + if (e) { + const n = t.index; + null !== n && e.version < n.version && o(t); + } else o(t); + return s.get(t); + }, + }; + } + function wi(t, e, n, i) { + const r = i.isWebGL2; + let s, a, o; + (this.setMode = function (t) { + s = t; + }), + (this.setIndex = function (t) { + (a = t.type), (o = t.bytesPerElement); + }), + (this.render = function (e, i) { + t.drawElements(s, i, a, e * o), n.update(i, s, 1); + }), + (this.renderInstances = function (i, l, c) { + if (0 === c) return; + let h, u; + if (r) (h = t), (u = 'drawElementsInstanced'); + else if ( + ((h = e.get('ANGLE_instanced_arrays')), + (u = 'drawElementsInstancedANGLE'), + null === h) + ) + return void console.error( + 'THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' + ); + h[u](s, l, a, i * o, c), n.update(l, s, c); + }); + } + function bi(t) { + const e = { frame: 0, calls: 0, triangles: 0, points: 0, lines: 0 }; + return { + memory: { geometries: 0, textures: 0 }, + render: e, + programs: null, + autoReset: !0, + reset: function () { + e.frame++, + (e.calls = 0), + (e.triangles = 0), + (e.points = 0), + (e.lines = 0); + }, + update: function (t, n, i) { + switch ((e.calls++, n)) { + case 4: + e.triangles += i * (t / 3); + break; + case 1: + e.lines += i * (t / 2); + break; + case 3: + e.lines += i * (t - 1); + break; + case 2: + e.lines += i * t; + break; + case 0: + e.points += i * t; + break; + default: + console.error('THREE.WebGLInfo: Unknown draw mode:', n); + } + }, + }; + } + function Mi(t, e) { + return t[0] - e[0]; + } + function Si(t, e) { + return Math.abs(e[1]) - Math.abs(t[1]); + } + function Ti(t) { + const e = {}, + n = new Float32Array(8), + i = []; + for (let t = 0; t < 8; t++) i[t] = [t, 0]; + return { + update: function (r, s, a, o) { + const l = r.morphTargetInfluences, + c = void 0 === l ? 0 : l.length; + let h = e[s.id]; + if (void 0 === h) { + h = []; + for (let t = 0; t < c; t++) h[t] = [t, 0]; + e[s.id] = h; + } + for (let t = 0; t < c; t++) { + const e = h[t]; + (e[0] = t), (e[1] = l[t]); + } + h.sort(Si); + for (let t = 0; t < 8; t++) + t < c && h[t][1] + ? ((i[t][0] = h[t][0]), (i[t][1] = h[t][1])) + : ((i[t][0] = Number.MAX_SAFE_INTEGER), (i[t][1] = 0)); + i.sort(Mi); + const u = a.morphTargets && s.morphAttributes.position, + d = a.morphNormals && s.morphAttributes.normal; + let p = 0; + for (let t = 0; t < 8; t++) { + const e = i[t], + r = e[0], + a = e[1]; + r !== Number.MAX_SAFE_INTEGER && a + ? (u && + s.getAttribute('morphTarget' + t) !== u[r] && + s.setAttribute('morphTarget' + t, u[r]), + d && + s.getAttribute('morphNormal' + t) !== d[r] && + s.setAttribute('morphNormal' + t, d[r]), + (n[t] = a), + (p += a)) + : (u && + !0 === s.hasAttribute('morphTarget' + t) && + s.deleteAttribute('morphTarget' + t), + d && + !0 === s.hasAttribute('morphNormal' + t) && + s.deleteAttribute('morphNormal' + t), + (n[t] = 0)); + } + const m = s.morphTargetsRelative ? 1 : 1 - p; + o.getUniforms().setValue(t, 'morphTargetBaseInfluence', m), + o.getUniforms().setValue(t, 'morphTargetInfluences', n); + }, + }; + } + function Ei(t, e, n, i) { + let r = new WeakMap(); + function s(t) { + const e = t.target; + e.removeEventListener('dispose', s), + n.remove(e.instanceMatrix), + null !== e.instanceColor && n.remove(e.instanceColor); + } + return { + update: function (t) { + const a = i.render.frame, + o = t.geometry, + l = e.get(t, o); + return ( + r.get(l) !== a && (e.update(l), r.set(l, a)), + t.isInstancedMesh && + (!1 === t.hasEventListener('dispose', s) && + t.addEventListener('dispose', s), + n.update(t.instanceMatrix, 34962), + null !== t.instanceColor && n.update(t.instanceColor, 34962)), + l + ); + }, + dispose: function () { + r = new WeakMap(); + }, + }; + } + di.physical = { + uniforms: Yn([ + di.standard.uniforms, + { + clearcoat: { value: 0 }, + clearcoatMap: { value: null }, + clearcoatRoughness: { value: 0 }, + clearcoatRoughnessMap: { value: null }, + clearcoatNormalScale: { value: new vt(1, 1) }, + clearcoatNormalMap: { value: null }, + sheen: { value: new tn(0) }, + transmission: { value: 0 }, + transmissionMap: { value: null }, + }, + ]), + vertexShader: hi.meshphysical_vert, + fragmentShader: hi.meshphysical_frag, + }; + class Ai extends bt { + constructor(t = null, e = 1, n = 1, i = 1) { + super(null), + (this.image = { data: t, width: e, height: n, depth: i }), + (this.magFilter = p), + (this.minFilter = p), + (this.wrapR = u), + (this.generateMipmaps = !1), + (this.flipY = !1), + (this.unpackAlignment = 1), + (this.needsUpdate = !0); + } + } + Ai.prototype.isDataTexture2DArray = !0; + class Li extends bt { + constructor(t = null, e = 1, n = 1, i = 1) { + super(null), + (this.image = { data: t, width: e, height: n, depth: i }), + (this.magFilter = p), + (this.minFilter = p), + (this.wrapR = u), + (this.generateMipmaps = !1), + (this.flipY = !1), + (this.unpackAlignment = 1), + (this.needsUpdate = !0); + } + } + Li.prototype.isDataTexture3D = !0; + const Ri = new bt(), + Ci = new Ai(), + Pi = new Li(), + Di = new ei(), + Ii = [], + Ni = [], + Bi = new Float32Array(16), + zi = new Float32Array(9), + Fi = new Float32Array(4); + function Oi(t, e, n) { + const i = t[0]; + if (i <= 0 || i > 0) return t; + const r = e * n; + let s = Ii[r]; + if ((void 0 === s && ((s = new Float32Array(r)), (Ii[r] = s)), 0 !== e)) { + i.toArray(s, 0); + for (let i = 1, r = 0; i !== e; ++i) (r += n), t[i].toArray(s, r); + } + return s; + } + function Hi(t, e) { + if (t.length !== e.length) return !1; + for (let n = 0, i = t.length; n < i; n++) if (t[n] !== e[n]) return !1; + return !0; + } + function Gi(t, e) { + for (let n = 0, i = e.length; n < i; n++) t[n] = e[n]; + } + function Ui(t, e) { + let n = Ni[e]; + void 0 === n && ((n = new Int32Array(e)), (Ni[e] = n)); + for (let i = 0; i !== e; ++i) n[i] = t.allocateTextureUnit(); + return n; + } + function ki(t, e) { + const n = this.cache; + n[0] !== e && (t.uniform1f(this.addr, e), (n[0] = e)); + } + function Vi(t, e) { + const n = this.cache; + if (void 0 !== e.x) + (n[0] === e.x && n[1] === e.y) || + (t.uniform2f(this.addr, e.x, e.y), (n[0] = e.x), (n[1] = e.y)); + else { + if (Hi(n, e)) return; + t.uniform2fv(this.addr, e), Gi(n, e); + } + } + function Wi(t, e) { + const n = this.cache; + if (void 0 !== e.x) + (n[0] === e.x && n[1] === e.y && n[2] === e.z) || + (t.uniform3f(this.addr, e.x, e.y, e.z), + (n[0] = e.x), + (n[1] = e.y), + (n[2] = e.z)); + else if (void 0 !== e.r) + (n[0] === e.r && n[1] === e.g && n[2] === e.b) || + (t.uniform3f(this.addr, e.r, e.g, e.b), + (n[0] = e.r), + (n[1] = e.g), + (n[2] = e.b)); + else { + if (Hi(n, e)) return; + t.uniform3fv(this.addr, e), Gi(n, e); + } + } + function ji(t, e) { + const n = this.cache; + if (void 0 !== e.x) + (n[0] === e.x && n[1] === e.y && n[2] === e.z && n[3] === e.w) || + (t.uniform4f(this.addr, e.x, e.y, e.z, e.w), + (n[0] = e.x), + (n[1] = e.y), + (n[2] = e.z), + (n[3] = e.w)); + else { + if (Hi(n, e)) return; + t.uniform4fv(this.addr, e), Gi(n, e); + } + } + function qi(t, e) { + const n = this.cache, + i = e.elements; + if (void 0 === i) { + if (Hi(n, e)) return; + t.uniformMatrix2fv(this.addr, !1, e), Gi(n, e); + } else { + if (Hi(n, i)) return; + Fi.set(i), t.uniformMatrix2fv(this.addr, !1, Fi), Gi(n, i); + } + } + function Xi(t, e) { + const n = this.cache, + i = e.elements; + if (void 0 === i) { + if (Hi(n, e)) return; + t.uniformMatrix3fv(this.addr, !1, e), Gi(n, e); + } else { + if (Hi(n, i)) return; + zi.set(i), t.uniformMatrix3fv(this.addr, !1, zi), Gi(n, i); + } + } + function Yi(t, e) { + const n = this.cache, + i = e.elements; + if (void 0 === i) { + if (Hi(n, e)) return; + t.uniformMatrix4fv(this.addr, !1, e), Gi(n, e); + } else { + if (Hi(n, i)) return; + Bi.set(i), t.uniformMatrix4fv(this.addr, !1, Bi), Gi(n, i); + } + } + function Zi(t, e) { + const n = this.cache; + n[0] !== e && (t.uniform1i(this.addr, e), (n[0] = e)); + } + function Ji(t, e) { + const n = this.cache; + Hi(n, e) || (t.uniform2iv(this.addr, e), Gi(n, e)); + } + function Qi(t, e) { + const n = this.cache; + Hi(n, e) || (t.uniform3iv(this.addr, e), Gi(n, e)); + } + function Ki(t, e) { + const n = this.cache; + Hi(n, e) || (t.uniform4iv(this.addr, e), Gi(n, e)); + } + function $i(t, e) { + const n = this.cache; + n[0] !== e && (t.uniform1ui(this.addr, e), (n[0] = e)); + } + function tr(t, e) { + const n = this.cache; + Hi(n, e) || (t.uniform2uiv(this.addr, e), Gi(n, e)); + } + function er(t, e) { + const n = this.cache; + Hi(n, e) || (t.uniform3uiv(this.addr, e), Gi(n, e)); + } + function nr(t, e) { + const n = this.cache; + Hi(n, e) || (t.uniform4uiv(this.addr, e), Gi(n, e)); + } + function ir(t, e, n) { + const i = this.cache, + r = n.allocateTextureUnit(); + i[0] !== r && (t.uniform1i(this.addr, r), (i[0] = r)), + n.safeSetTexture2D(e || Ri, r); + } + function rr(t, e, n) { + const i = this.cache, + r = n.allocateTextureUnit(); + i[0] !== r && (t.uniform1i(this.addr, r), (i[0] = r)), + n.setTexture3D(e || Pi, r); + } + function sr(t, e, n) { + const i = this.cache, + r = n.allocateTextureUnit(); + i[0] !== r && (t.uniform1i(this.addr, r), (i[0] = r)), + n.safeSetTextureCube(e || Di, r); + } + function ar(t, e, n) { + const i = this.cache, + r = n.allocateTextureUnit(); + i[0] !== r && (t.uniform1i(this.addr, r), (i[0] = r)), + n.setTexture2DArray(e || Ci, r); + } + function or(t, e) { + t.uniform1fv(this.addr, e); + } + function lr(t, e) { + const n = Oi(e, this.size, 2); + t.uniform2fv(this.addr, n); + } + function cr(t, e) { + const n = Oi(e, this.size, 3); + t.uniform3fv(this.addr, n); + } + function hr(t, e) { + const n = Oi(e, this.size, 4); + t.uniform4fv(this.addr, n); + } + function ur(t, e) { + const n = Oi(e, this.size, 4); + t.uniformMatrix2fv(this.addr, !1, n); + } + function dr(t, e) { + const n = Oi(e, this.size, 9); + t.uniformMatrix3fv(this.addr, !1, n); + } + function pr(t, e) { + const n = Oi(e, this.size, 16); + t.uniformMatrix4fv(this.addr, !1, n); + } + function mr(t, e) { + t.uniform1iv(this.addr, e); + } + function fr(t, e) { + t.uniform2iv(this.addr, e); + } + function gr(t, e) { + t.uniform3iv(this.addr, e); + } + function vr(t, e) { + t.uniform4iv(this.addr, e); + } + function yr(t, e) { + t.uniform1uiv(this.addr, e); + } + function xr(t, e) { + t.uniform2uiv(this.addr, e); + } + function _r(t, e) { + t.uniform3uiv(this.addr, e); + } + function wr(t, e) { + t.uniform4uiv(this.addr, e); + } + function br(t, e, n) { + const i = e.length, + r = Ui(n, i); + t.uniform1iv(this.addr, r); + for (let t = 0; t !== i; ++t) n.safeSetTexture2D(e[t] || Ri, r[t]); + } + function Mr(t, e, n) { + const i = e.length, + r = Ui(n, i); + t.uniform1iv(this.addr, r); + for (let t = 0; t !== i; ++t) n.safeSetTextureCube(e[t] || Di, r[t]); + } + function Sr(t, e, n) { + (this.id = t), + (this.addr = n), + (this.cache = []), + (this.setValue = (function (t) { + switch (t) { + case 5126: + return ki; + case 35664: + return Vi; + case 35665: + return Wi; + case 35666: + return ji; + case 35674: + return qi; + case 35675: + return Xi; + case 35676: + return Yi; + case 5124: + case 35670: + return Zi; + case 35667: + case 35671: + return Ji; + case 35668: + case 35672: + return Qi; + case 35669: + case 35673: + return Ki; + case 5125: + return $i; + case 36294: + return tr; + case 36295: + return er; + case 36296: + return nr; + case 35678: + case 36198: + case 36298: + case 36306: + case 35682: + return ir; + case 35679: + case 36299: + case 36307: + return rr; + case 35680: + case 36300: + case 36308: + case 36293: + return sr; + case 36289: + case 36303: + case 36311: + case 36292: + return ar; + } + })(e.type)); + } + function Tr(t, e, n) { + (this.id = t), + (this.addr = n), + (this.cache = []), + (this.size = e.size), + (this.setValue = (function (t) { + switch (t) { + case 5126: + return or; + case 35664: + return lr; + case 35665: + return cr; + case 35666: + return hr; + case 35674: + return ur; + case 35675: + return dr; + case 35676: + return pr; + case 5124: + case 35670: + return mr; + case 35667: + case 35671: + return fr; + case 35668: + case 35672: + return gr; + case 35669: + case 35673: + return vr; + case 5125: + return yr; + case 36294: + return xr; + case 36295: + return _r; + case 36296: + return wr; + case 35678: + case 36198: + case 36298: + case 36306: + case 35682: + return br; + case 35680: + case 36300: + case 36308: + case 36293: + return Mr; + } + })(e.type)); + } + function Er(t) { + (this.id = t), (this.seq = []), (this.map = {}); + } + (Tr.prototype.updateCache = function (t) { + const e = this.cache; + t instanceof Float32Array && + e.length !== t.length && + (this.cache = new Float32Array(t.length)), + Gi(e, t); + }), + (Er.prototype.setValue = function (t, e, n) { + const i = this.seq; + for (let r = 0, s = i.length; r !== s; ++r) { + const s = i[r]; + s.setValue(t, e[s.id], n); + } + }); + const Ar = /(\w+)(\])?(\[|\.)?/g; + function Lr(t, e) { + t.seq.push(e), (t.map[e.id] = e); + } + function Rr(t, e, n) { + const i = t.name, + r = i.length; + for (Ar.lastIndex = 0; ; ) { + const s = Ar.exec(i), + a = Ar.lastIndex; + let o = s[1]; + const l = ']' === s[2], + c = s[3]; + if ((l && (o |= 0), void 0 === c || ('[' === c && a + 2 === r))) { + Lr(n, void 0 === c ? new Sr(o, t, e) : new Tr(o, t, e)); + break; + } + { + let t = n.map[o]; + void 0 === t && ((t = new Er(o)), Lr(n, t)), (n = t); + } + } + } + function Cr(t, e) { + (this.seq = []), (this.map = {}); + const n = t.getProgramParameter(e, 35718); + for (let i = 0; i < n; ++i) { + const n = t.getActiveUniform(e, i); + Rr(n, t.getUniformLocation(e, n.name), this); + } + } + function Pr(t, e, n) { + const i = t.createShader(e); + return t.shaderSource(i, n), t.compileShader(i), i; + } + (Cr.prototype.setValue = function (t, e, n, i) { + const r = this.map[e]; + void 0 !== r && r.setValue(t, n, i); + }), + (Cr.prototype.setOptional = function (t, e, n) { + const i = e[n]; + void 0 !== i && this.setValue(t, n, i); + }), + (Cr.upload = function (t, e, n, i) { + for (let r = 0, s = e.length; r !== s; ++r) { + const s = e[r], + a = n[s.id]; + !1 !== a.needsUpdate && s.setValue(t, a.value, i); + } + }), + (Cr.seqWithValue = function (t, e) { + const n = []; + for (let i = 0, r = t.length; i !== r; ++i) { + const r = t[i]; + r.id in e && n.push(r); + } + return n; + }); + let Dr = 0; + function Ir(t) { + switch (t) { + case X: + return ['Linear', '( value )']; + case Y: + return ['sRGB', '( value )']; + case J: + return ['RGBE', '( value )']; + case Q: + return ['RGBM', '( value, 7.0 )']; + case K: + return ['RGBM', '( value, 16.0 )']; + case $: + return ['RGBD', '( value, 256.0 )']; + case Z: + return ['Gamma', '( value, float( GAMMA_FACTOR ) )']; + case 3003: + return ['LogLuv', '( value )']; + default: + return ( + console.warn('THREE.WebGLProgram: Unsupported encoding:', t), + ['Linear', '( value )'] + ); + } + } + function Nr(t, e, n) { + const i = t.getShaderParameter(e, 35713), + r = t.getShaderInfoLog(e).trim(); + if (i && '' === r) return ''; + return ( + 'THREE.WebGLShader: gl.getShaderInfoLog() ' + + n + + '\n' + + r + + (function (t) { + const e = t.split('\n'); + for (let t = 0; t < e.length; t++) e[t] = t + 1 + ': ' + e[t]; + return e.join('\n'); + })(t.getShaderSource(e)) + ); + } + function Br(t, e) { + const n = Ir(e); + return ( + 'vec4 ' + + t + + '( vec4 value ) { return ' + + n[0] + + 'ToLinear' + + n[1] + + '; }' + ); + } + function zr(t, e) { + const n = Ir(e); + return ( + 'vec4 ' + t + '( vec4 value ) { return LinearTo' + n[0] + n[1] + '; }' + ); + } + function Fr(t, e) { + let n; + switch (e) { + case 1: + n = 'Linear'; + break; + case 2: + n = 'Reinhard'; + break; + case 3: + n = 'OptimizedCineon'; + break; + case 4: + n = 'ACESFilmic'; + break; + case 5: + n = 'Custom'; + break; + default: + console.warn('THREE.WebGLProgram: Unsupported toneMapping:', e), + (n = 'Linear'); + } + return ( + 'vec3 ' + t + '( vec3 color ) { return ' + n + 'ToneMapping( color ); }' + ); + } + function Or(t) { + return '' !== t; + } + function Hr(t, e) { + return t + .replace(/NUM_DIR_LIGHTS/g, e.numDirLights) + .replace(/NUM_SPOT_LIGHTS/g, e.numSpotLights) + .replace(/NUM_RECT_AREA_LIGHTS/g, e.numRectAreaLights) + .replace(/NUM_POINT_LIGHTS/g, e.numPointLights) + .replace(/NUM_HEMI_LIGHTS/g, e.numHemiLights) + .replace(/NUM_DIR_LIGHT_SHADOWS/g, e.numDirLightShadows) + .replace(/NUM_SPOT_LIGHT_SHADOWS/g, e.numSpotLightShadows) + .replace(/NUM_POINT_LIGHT_SHADOWS/g, e.numPointLightShadows); + } + function Gr(t, e) { + return t + .replace(/NUM_CLIPPING_PLANES/g, e.numClippingPlanes) + .replace( + /UNION_CLIPPING_PLANES/g, + e.numClippingPlanes - e.numClipIntersection + ); + } + const Ur = /^[ \t]*#include +<([\w\d./]+)>/gm; + function kr(t) { + return t.replace(Ur, Vr); + } + function Vr(t, e) { + const n = hi[e]; + if (void 0 === n) throw new Error('Can not resolve #include <' + e + '>'); + return kr(n); + } + const Wr = + /#pragma unroll_loop[\s]+?for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g, + jr = + /#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g; + function qr(t) { + return t.replace(jr, Yr).replace(Wr, Xr); + } + function Xr(t, e, n, i) { + return ( + console.warn( + 'WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead.' + ), + Yr(t, e, n, i) + ); + } + function Yr(t, e, n, i) { + let r = ''; + for (let t = parseInt(e); t < parseInt(n); t++) + r += i + .replace(/\[\s*i\s*\]/g, '[ ' + t + ' ]') + .replace(/UNROLLED_LOOP_INDEX/g, t); + return r; + } + function Zr(t) { + let e = + 'precision ' + + t.precision + + ' float;\nprecision ' + + t.precision + + ' int;'; + return ( + 'highp' === t.precision + ? (e += '\n#define HIGH_PRECISION') + : 'mediump' === t.precision + ? (e += '\n#define MEDIUM_PRECISION') + : 'lowp' === t.precision && (e += '\n#define LOW_PRECISION'), + e + ); + } + function Jr(t, e, n, i) { + const a = t.getContext(), + o = n.defines; + let h = n.vertexShader, + u = n.fragmentShader; + const d = (function (t) { + let e = 'SHADOWMAP_TYPE_BASIC'; + return ( + 1 === t.shadowMapType + ? (e = 'SHADOWMAP_TYPE_PCF') + : 2 === t.shadowMapType + ? (e = 'SHADOWMAP_TYPE_PCF_SOFT') + : 3 === t.shadowMapType && (e = 'SHADOWMAP_TYPE_VSM'), + e + ); + })(n), + p = (function (t) { + let e = 'ENVMAP_TYPE_CUBE'; + if (t.envMap) + switch (t.envMapMode) { + case r: + case s: + e = 'ENVMAP_TYPE_CUBE'; + break; + case l: + case c: + e = 'ENVMAP_TYPE_CUBE_UV'; + } + return e; + })(n), + m = (function (t) { + let e = 'ENVMAP_MODE_REFLECTION'; + if (t.envMap) + switch (t.envMapMode) { + case s: + case c: + e = 'ENVMAP_MODE_REFRACTION'; + } + return e; + })(n), + f = (function (t) { + let e = 'ENVMAP_BLENDING_NONE'; + if (t.envMap) + switch (t.combine) { + case 0: + e = 'ENVMAP_BLENDING_MULTIPLY'; + break; + case 1: + e = 'ENVMAP_BLENDING_MIX'; + break; + case 2: + e = 'ENVMAP_BLENDING_ADD'; + } + return e; + })(n), + g = t.gammaFactor > 0 ? t.gammaFactor : 1, + v = n.isWebGL2 + ? '' + : (function (t) { + return [ + t.extensionDerivatives || + t.envMapCubeUV || + t.bumpMap || + t.tangentSpaceNormalMap || + t.clearcoatNormalMap || + t.flatShading || + 'physical' === t.shaderID + ? '#extension GL_OES_standard_derivatives : enable' + : '', + (t.extensionFragDepth || t.logarithmicDepthBuffer) && + t.rendererExtensionFragDepth + ? '#extension GL_EXT_frag_depth : enable' + : '', + t.extensionDrawBuffers && t.rendererExtensionDrawBuffers + ? '#extension GL_EXT_draw_buffers : require' + : '', + (t.extensionShaderTextureLOD || t.envMap) && + t.rendererExtensionShaderTextureLod + ? '#extension GL_EXT_shader_texture_lod : enable' + : '', + ] + .filter(Or) + .join('\n'); + })(n), + y = (function (t) { + const e = []; + for (const n in t) { + const i = t[n]; + !1 !== i && e.push('#define ' + n + ' ' + i); + } + return e.join('\n'); + })(o), + x = a.createProgram(); + let _, + w, + b = n.glslVersion ? '#version ' + n.glslVersion + '\n' : ''; + n.isRawShaderMaterial + ? ((_ = [y].filter(Or).join('\n')), + _.length > 0 && (_ += '\n'), + (w = [v, y].filter(Or).join('\n')), + w.length > 0 && (w += '\n')) + : ((_ = [ + Zr(n), + '#define SHADER_NAME ' + n.shaderName, + y, + n.instancing ? '#define USE_INSTANCING' : '', + n.instancingColor ? '#define USE_INSTANCING_COLOR' : '', + n.supportsVertexTextures ? '#define VERTEX_TEXTURES' : '', + '#define GAMMA_FACTOR ' + g, + '#define MAX_BONES ' + n.maxBones, + n.useFog && n.fog ? '#define USE_FOG' : '', + n.useFog && n.fogExp2 ? '#define FOG_EXP2' : '', + n.map ? '#define USE_MAP' : '', + n.envMap ? '#define USE_ENVMAP' : '', + n.envMap ? '#define ' + m : '', + n.lightMap ? '#define USE_LIGHTMAP' : '', + n.aoMap ? '#define USE_AOMAP' : '', + n.emissiveMap ? '#define USE_EMISSIVEMAP' : '', + n.bumpMap ? '#define USE_BUMPMAP' : '', + n.normalMap ? '#define USE_NORMALMAP' : '', + n.normalMap && n.objectSpaceNormalMap + ? '#define OBJECTSPACE_NORMALMAP' + : '', + n.normalMap && n.tangentSpaceNormalMap + ? '#define TANGENTSPACE_NORMALMAP' + : '', + n.clearcoatMap ? '#define USE_CLEARCOATMAP' : '', + n.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '', + n.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '', + n.displacementMap && n.supportsVertexTextures + ? '#define USE_DISPLACEMENTMAP' + : '', + n.specularMap ? '#define USE_SPECULARMAP' : '', + n.roughnessMap ? '#define USE_ROUGHNESSMAP' : '', + n.metalnessMap ? '#define USE_METALNESSMAP' : '', + n.alphaMap ? '#define USE_ALPHAMAP' : '', + n.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '', + n.vertexTangents ? '#define USE_TANGENT' : '', + n.vertexColors ? '#define USE_COLOR' : '', + n.vertexAlphas ? '#define USE_COLOR_ALPHA' : '', + n.vertexUvs ? '#define USE_UV' : '', + n.uvsVertexOnly ? '#define UVS_VERTEX_ONLY' : '', + n.flatShading ? '#define FLAT_SHADED' : '', + n.skinning ? '#define USE_SKINNING' : '', + n.useVertexTexture ? '#define BONE_TEXTURE' : '', + n.morphTargets ? '#define USE_MORPHTARGETS' : '', + n.morphNormals && !1 === n.flatShading + ? '#define USE_MORPHNORMALS' + : '', + n.doubleSided ? '#define DOUBLE_SIDED' : '', + n.flipSided ? '#define FLIP_SIDED' : '', + n.shadowMapEnabled ? '#define USE_SHADOWMAP' : '', + n.shadowMapEnabled ? '#define ' + d : '', + n.sizeAttenuation ? '#define USE_SIZEATTENUATION' : '', + n.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '', + n.logarithmicDepthBuffer && n.rendererExtensionFragDepth + ? '#define USE_LOGDEPTHBUF_EXT' + : '', + 'uniform mat4 modelMatrix;', + 'uniform mat4 modelViewMatrix;', + 'uniform mat4 projectionMatrix;', + 'uniform mat4 viewMatrix;', + 'uniform mat3 normalMatrix;', + 'uniform vec3 cameraPosition;', + 'uniform bool isOrthographic;', + '#ifdef USE_INSTANCING', + '\tattribute mat4 instanceMatrix;', + '#endif', + '#ifdef USE_INSTANCING_COLOR', + '\tattribute vec3 instanceColor;', + '#endif', + 'attribute vec3 position;', + 'attribute vec3 normal;', + 'attribute vec2 uv;', + '#ifdef USE_TANGENT', + '\tattribute vec4 tangent;', + '#endif', + '#if defined( USE_COLOR_ALPHA )', + '\tattribute vec4 color;', + '#elif defined( USE_COLOR )', + '\tattribute vec3 color;', + '#endif', + '#ifdef USE_MORPHTARGETS', + '\tattribute vec3 morphTarget0;', + '\tattribute vec3 morphTarget1;', + '\tattribute vec3 morphTarget2;', + '\tattribute vec3 morphTarget3;', + '\t#ifdef USE_MORPHNORMALS', + '\t\tattribute vec3 morphNormal0;', + '\t\tattribute vec3 morphNormal1;', + '\t\tattribute vec3 morphNormal2;', + '\t\tattribute vec3 morphNormal3;', + '\t#else', + '\t\tattribute vec3 morphTarget4;', + '\t\tattribute vec3 morphTarget5;', + '\t\tattribute vec3 morphTarget6;', + '\t\tattribute vec3 morphTarget7;', + '\t#endif', + '#endif', + '#ifdef USE_SKINNING', + '\tattribute vec4 skinIndex;', + '\tattribute vec4 skinWeight;', + '#endif', + '\n', + ] + .filter(Or) + .join('\n')), + (w = [ + v, + Zr(n), + '#define SHADER_NAME ' + n.shaderName, + y, + n.alphaTest + ? '#define ALPHATEST ' + n.alphaTest + (n.alphaTest % 1 ? '' : '.0') + : '', + '#define GAMMA_FACTOR ' + g, + n.useFog && n.fog ? '#define USE_FOG' : '', + n.useFog && n.fogExp2 ? '#define FOG_EXP2' : '', + n.map ? '#define USE_MAP' : '', + n.matcap ? '#define USE_MATCAP' : '', + n.envMap ? '#define USE_ENVMAP' : '', + n.envMap ? '#define ' + p : '', + n.envMap ? '#define ' + m : '', + n.envMap ? '#define ' + f : '', + n.lightMap ? '#define USE_LIGHTMAP' : '', + n.aoMap ? '#define USE_AOMAP' : '', + n.emissiveMap ? '#define USE_EMISSIVEMAP' : '', + n.bumpMap ? '#define USE_BUMPMAP' : '', + n.normalMap ? '#define USE_NORMALMAP' : '', + n.normalMap && n.objectSpaceNormalMap + ? '#define OBJECTSPACE_NORMALMAP' + : '', + n.normalMap && n.tangentSpaceNormalMap + ? '#define TANGENTSPACE_NORMALMAP' + : '', + n.clearcoatMap ? '#define USE_CLEARCOATMAP' : '', + n.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '', + n.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '', + n.specularMap ? '#define USE_SPECULARMAP' : '', + n.roughnessMap ? '#define USE_ROUGHNESSMAP' : '', + n.metalnessMap ? '#define USE_METALNESSMAP' : '', + n.alphaMap ? '#define USE_ALPHAMAP' : '', + n.sheen ? '#define USE_SHEEN' : '', + n.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '', + n.vertexTangents ? '#define USE_TANGENT' : '', + n.vertexColors || n.instancingColor ? '#define USE_COLOR' : '', + n.vertexAlphas ? '#define USE_COLOR_ALPHA' : '', + n.vertexUvs ? '#define USE_UV' : '', + n.uvsVertexOnly ? '#define UVS_VERTEX_ONLY' : '', + n.gradientMap ? '#define USE_GRADIENTMAP' : '', + n.flatShading ? '#define FLAT_SHADED' : '', + n.doubleSided ? '#define DOUBLE_SIDED' : '', + n.flipSided ? '#define FLIP_SIDED' : '', + n.shadowMapEnabled ? '#define USE_SHADOWMAP' : '', + n.shadowMapEnabled ? '#define ' + d : '', + n.premultipliedAlpha ? '#define PREMULTIPLIED_ALPHA' : '', + n.physicallyCorrectLights ? '#define PHYSICALLY_CORRECT_LIGHTS' : '', + n.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '', + n.logarithmicDepthBuffer && n.rendererExtensionFragDepth + ? '#define USE_LOGDEPTHBUF_EXT' + : '', + (n.extensionShaderTextureLOD || n.envMap) && + n.rendererExtensionShaderTextureLod + ? '#define TEXTURE_LOD_EXT' + : '', + 'uniform mat4 viewMatrix;', + 'uniform vec3 cameraPosition;', + 'uniform bool isOrthographic;', + 0 !== n.toneMapping ? '#define TONE_MAPPING' : '', + 0 !== n.toneMapping ? hi.tonemapping_pars_fragment : '', + 0 !== n.toneMapping ? Fr('toneMapping', n.toneMapping) : '', + n.dithering ? '#define DITHERING' : '', + hi.encodings_pars_fragment, + n.map ? Br('mapTexelToLinear', n.mapEncoding) : '', + n.matcap ? Br('matcapTexelToLinear', n.matcapEncoding) : '', + n.envMap ? Br('envMapTexelToLinear', n.envMapEncoding) : '', + n.emissiveMap + ? Br('emissiveMapTexelToLinear', n.emissiveMapEncoding) + : '', + n.lightMap ? Br('lightMapTexelToLinear', n.lightMapEncoding) : '', + zr('linearToOutputTexel', n.outputEncoding), + n.depthPacking ? '#define DEPTH_PACKING ' + n.depthPacking : '', + '\n', + ] + .filter(Or) + .join('\n'))), + (h = kr(h)), + (h = Hr(h, n)), + (h = Gr(h, n)), + (u = kr(u)), + (u = Hr(u, n)), + (u = Gr(u, n)), + (h = qr(h)), + (u = qr(u)), + n.isWebGL2 && + !0 !== n.isRawShaderMaterial && + ((b = '#version 300 es\n'), + (_ = + [ + '#define attribute in', + '#define varying out', + '#define texture2D texture', + ].join('\n') + + '\n' + + _), + (w = + [ + '#define varying in', + n.glslVersion === it ? '' : 'out highp vec4 pc_fragColor;', + n.glslVersion === it ? '' : '#define gl_FragColor pc_fragColor', + '#define gl_FragDepthEXT gl_FragDepth', + '#define texture2D texture', + '#define textureCube texture', + '#define texture2DProj textureProj', + '#define texture2DLodEXT textureLod', + '#define texture2DProjLodEXT textureProjLod', + '#define textureCubeLodEXT textureLod', + '#define texture2DGradEXT textureGrad', + '#define texture2DProjGradEXT textureProjGrad', + '#define textureCubeGradEXT textureGrad', + ].join('\n') + + '\n' + + w)); + const M = b + w + u, + S = Pr(a, 35633, b + _ + h), + T = Pr(a, 35632, M); + if ( + (a.attachShader(x, S), + a.attachShader(x, T), + void 0 !== n.index0AttributeName + ? a.bindAttribLocation(x, 0, n.index0AttributeName) + : !0 === n.morphTargets && a.bindAttribLocation(x, 0, 'position'), + a.linkProgram(x), + t.debug.checkShaderErrors) + ) { + const t = a.getProgramInfoLog(x).trim(), + e = a.getShaderInfoLog(S).trim(), + n = a.getShaderInfoLog(T).trim(); + let i = !0, + r = !0; + if (!1 === a.getProgramParameter(x, 35714)) { + i = !1; + const e = Nr(a, S, 'vertex'), + n = Nr(a, T, 'fragment'); + console.error( + 'THREE.WebGLProgram: shader error: ', + a.getError(), + '35715', + a.getProgramParameter(x, 35715), + 'gl.getProgramInfoLog', + t, + e, + n + ); + } else + '' !== t + ? console.warn('THREE.WebGLProgram: gl.getProgramInfoLog()', t) + : ('' !== e && '' !== n) || (r = !1); + r && + (this.diagnostics = { + runnable: i, + programLog: t, + vertexShader: { log: e, prefix: _ }, + fragmentShader: { log: n, prefix: w }, + }); + } + let E, A; + return ( + a.deleteShader(S), + a.deleteShader(T), + (this.getUniforms = function () { + return void 0 === E && (E = new Cr(a, x)), E; + }), + (this.getAttributes = function () { + return ( + void 0 === A && + (A = (function (t, e) { + const n = {}, + i = t.getProgramParameter(e, 35721); + for (let r = 0; r < i; r++) { + const i = t.getActiveAttrib(e, r).name; + n[i] = t.getAttribLocation(e, i); + } + return n; + })(a, x)), + A + ); + }), + (this.destroy = function () { + i.releaseStatesOfProgram(this), + a.deleteProgram(x), + (this.program = void 0); + }), + (this.name = n.shaderName), + (this.id = Dr++), + (this.cacheKey = e), + (this.usedTimes = 1), + (this.program = x), + (this.vertexShader = S), + (this.fragmentShader = T), + this + ); + } + function Qr(t, e, n, i, r, s) { + const a = [], + o = i.isWebGL2, + h = i.logarithmicDepthBuffer, + u = i.floatVertexTextures, + d = i.maxVertexUniforms, + p = i.vertexTextures; + let m = i.precision; + const f = { + MeshDepthMaterial: 'depth', + MeshDistanceMaterial: 'distanceRGBA', + MeshNormalMaterial: 'normal', + MeshBasicMaterial: 'basic', + MeshLambertMaterial: 'lambert', + MeshPhongMaterial: 'phong', + MeshToonMaterial: 'toon', + MeshStandardMaterial: 'physical', + MeshPhysicalMaterial: 'physical', + MeshMatcapMaterial: 'matcap', + LineBasicMaterial: 'basic', + LineDashedMaterial: 'dashed', + PointsMaterial: 'points', + ShadowMaterial: 'shadow', + SpriteMaterial: 'sprite', + }, + g = [ + 'precision', + 'isWebGL2', + 'supportsVertexTextures', + 'outputEncoding', + 'instancing', + 'instancingColor', + 'map', + 'mapEncoding', + 'matcap', + 'matcapEncoding', + 'envMap', + 'envMapMode', + 'envMapEncoding', + 'envMapCubeUV', + 'lightMap', + 'lightMapEncoding', + 'aoMap', + 'emissiveMap', + 'emissiveMapEncoding', + 'bumpMap', + 'normalMap', + 'objectSpaceNormalMap', + 'tangentSpaceNormalMap', + 'clearcoatMap', + 'clearcoatRoughnessMap', + 'clearcoatNormalMap', + 'displacementMap', + 'specularMap', + 'roughnessMap', + 'metalnessMap', + 'gradientMap', + 'alphaMap', + 'combine', + 'vertexColors', + 'vertexAlphas', + 'vertexTangents', + 'vertexUvs', + 'uvsVertexOnly', + 'fog', + 'useFog', + 'fogExp2', + 'flatShading', + 'sizeAttenuation', + 'logarithmicDepthBuffer', + 'skinning', + 'maxBones', + 'useVertexTexture', + 'morphTargets', + 'morphNormals', + 'premultipliedAlpha', + 'numDirLights', + 'numPointLights', + 'numSpotLights', + 'numHemiLights', + 'numRectAreaLights', + 'numDirLightShadows', + 'numPointLightShadows', + 'numSpotLightShadows', + 'shadowMapEnabled', + 'shadowMapType', + 'toneMapping', + 'physicallyCorrectLights', + 'alphaTest', + 'doubleSided', + 'flipSided', + 'numClippingPlanes', + 'numClipIntersection', + 'depthPacking', + 'dithering', + 'sheen', + 'transmissionMap', + ]; + function v(t) { + let e; + return ( + t && t.isTexture + ? (e = t.encoding) + : t && t.isWebGLRenderTarget + ? (console.warn( + "THREE.WebGLPrograms.getTextureEncodingFromMap: don't use render targets as textures. Use their .texture property instead." + ), + (e = t.texture.encoding)) + : (e = X), + e + ); + } + return { + getParameters: function (r, a, g, y, x) { + const _ = y.fog, + w = r.isMeshStandardMaterial ? y.environment : null, + b = e.get(r.envMap || w), + M = f[r.type], + S = x.isSkinnedMesh + ? (function (t) { + const e = t.skeleton.bones; + if (u) return 1024; + { + const t = d, + n = Math.floor((t - 20) / 4), + i = Math.min(n, e.length); + return i < e.length + ? (console.warn( + 'THREE.WebGLRenderer: Skeleton has ' + + e.length + + ' bones. This GPU supports ' + + i + + '.' + ), + 0) + : i; + } + })(x) + : 0; + let T, E; + if ( + (null !== r.precision && + ((m = i.getMaxPrecision(r.precision)), + m !== r.precision && + console.warn( + 'THREE.WebGLProgram.getParameters:', + r.precision, + 'not supported, using', + m, + 'instead.' + )), + M) + ) { + const t = di[M]; + (T = t.vertexShader), (E = t.fragmentShader); + } else (T = r.vertexShader), (E = r.fragmentShader); + const A = t.getRenderTarget(); + return { + isWebGL2: o, + shaderID: M, + shaderName: r.type, + vertexShader: T, + fragmentShader: E, + defines: r.defines, + isRawShaderMaterial: !0 === r.isRawShaderMaterial, + glslVersion: r.glslVersion, + precision: m, + instancing: !0 === x.isInstancedMesh, + instancingColor: !0 === x.isInstancedMesh && null !== x.instanceColor, + supportsVertexTextures: p, + outputEncoding: null !== A ? v(A.texture) : t.outputEncoding, + map: !!r.map, + mapEncoding: v(r.map), + matcap: !!r.matcap, + matcapEncoding: v(r.matcap), + envMap: !!b, + envMapMode: b && b.mapping, + envMapEncoding: v(b), + envMapCubeUV: !!b && (b.mapping === l || b.mapping === c), + lightMap: !!r.lightMap, + lightMapEncoding: v(r.lightMap), + aoMap: !!r.aoMap, + emissiveMap: !!r.emissiveMap, + emissiveMapEncoding: v(r.emissiveMap), + bumpMap: !!r.bumpMap, + normalMap: !!r.normalMap, + objectSpaceNormalMap: 1 === r.normalMapType, + tangentSpaceNormalMap: 0 === r.normalMapType, + clearcoatMap: !!r.clearcoatMap, + clearcoatRoughnessMap: !!r.clearcoatRoughnessMap, + clearcoatNormalMap: !!r.clearcoatNormalMap, + displacementMap: !!r.displacementMap, + roughnessMap: !!r.roughnessMap, + metalnessMap: !!r.metalnessMap, + specularMap: !!r.specularMap, + alphaMap: !!r.alphaMap, + gradientMap: !!r.gradientMap, + sheen: !!r.sheen, + transmissionMap: !!r.transmissionMap, + combine: r.combine, + vertexTangents: r.normalMap && r.vertexTangents, + vertexColors: r.vertexColors, + vertexAlphas: + !0 === r.vertexColors && + x.geometry && + x.geometry.attributes.color && + 4 === x.geometry.attributes.color.itemSize, + vertexUvs: !!( + r.map || + r.bumpMap || + r.normalMap || + r.specularMap || + r.alphaMap || + r.emissiveMap || + r.roughnessMap || + r.metalnessMap || + r.clearcoatMap || + r.clearcoatRoughnessMap || + r.clearcoatNormalMap || + r.displacementMap || + r.transmissionMap + ), + uvsVertexOnly: !( + r.map || + r.bumpMap || + r.normalMap || + r.specularMap || + r.alphaMap || + r.emissiveMap || + r.roughnessMap || + r.metalnessMap || + r.clearcoatNormalMap || + r.transmissionMap || + !r.displacementMap + ), + fog: !!_, + useFog: r.fog, + fogExp2: _ && _.isFogExp2, + flatShading: !!r.flatShading, + sizeAttenuation: r.sizeAttenuation, + logarithmicDepthBuffer: h, + skinning: r.skinning && S > 0, + maxBones: S, + useVertexTexture: u, + morphTargets: r.morphTargets, + morphNormals: r.morphNormals, + numDirLights: a.directional.length, + numPointLights: a.point.length, + numSpotLights: a.spot.length, + numRectAreaLights: a.rectArea.length, + numHemiLights: a.hemi.length, + numDirLightShadows: a.directionalShadowMap.length, + numPointLightShadows: a.pointShadowMap.length, + numSpotLightShadows: a.spotShadowMap.length, + numClippingPlanes: s.numPlanes, + numClipIntersection: s.numIntersection, + dithering: r.dithering, + shadowMapEnabled: t.shadowMap.enabled && g.length > 0, + shadowMapType: t.shadowMap.type, + toneMapping: r.toneMapped ? t.toneMapping : 0, + physicallyCorrectLights: t.physicallyCorrectLights, + premultipliedAlpha: r.premultipliedAlpha, + alphaTest: r.alphaTest, + doubleSided: 2 === r.side, + flipSided: 1 === r.side, + depthPacking: void 0 !== r.depthPacking && r.depthPacking, + index0AttributeName: r.index0AttributeName, + extensionDerivatives: r.extensions && r.extensions.derivatives, + extensionFragDepth: r.extensions && r.extensions.fragDepth, + extensionDrawBuffers: r.extensions && r.extensions.drawBuffers, + extensionShaderTextureLOD: + r.extensions && r.extensions.shaderTextureLOD, + rendererExtensionFragDepth: o || n.has('EXT_frag_depth'), + rendererExtensionDrawBuffers: o || n.has('WEBGL_draw_buffers'), + rendererExtensionShaderTextureLod: + o || n.has('EXT_shader_texture_lod'), + customProgramCacheKey: r.customProgramCacheKey(), + }; + }, + getProgramCacheKey: function (e) { + const n = []; + if ( + (e.shaderID + ? n.push(e.shaderID) + : (n.push(e.fragmentShader), n.push(e.vertexShader)), + void 0 !== e.defines) + ) + for (const t in e.defines) n.push(t), n.push(e.defines[t]); + if (!1 === e.isRawShaderMaterial) { + for (let t = 0; t < g.length; t++) n.push(e[g[t]]); + n.push(t.outputEncoding), n.push(t.gammaFactor); + } + return n.push(e.customProgramCacheKey), n.join(); + }, + getUniforms: function (t) { + const e = f[t.type]; + let n; + if (e) { + const t = di[e]; + n = Zn.clone(t.uniforms); + } else n = t.uniforms; + return n; + }, + acquireProgram: function (e, n) { + let i; + for (let t = 0, e = a.length; t < e; t++) { + const e = a[t]; + if (e.cacheKey === n) { + (i = e), ++i.usedTimes; + break; + } + } + return void 0 === i && ((i = new Jr(t, n, e, r)), a.push(i)), i; + }, + releaseProgram: function (t) { + if (0 == --t.usedTimes) { + const e = a.indexOf(t); + (a[e] = a[a.length - 1]), a.pop(), t.destroy(); + } + }, + programs: a, + }; + } + function Kr() { + let t = new WeakMap(); + return { + get: function (e) { + let n = t.get(e); + return void 0 === n && ((n = {}), t.set(e, n)), n; + }, + remove: function (e) { + t.delete(e); + }, + update: function (e, n, i) { + t.get(e)[n] = i; + }, + dispose: function () { + t = new WeakMap(); + }, + }; + } + function $r(t, e) { + return t.groupOrder !== e.groupOrder + ? t.groupOrder - e.groupOrder + : t.renderOrder !== e.renderOrder + ? t.renderOrder - e.renderOrder + : t.program !== e.program + ? t.program.id - e.program.id + : t.material.id !== e.material.id + ? t.material.id - e.material.id + : t.z !== e.z + ? t.z - e.z + : t.id - e.id; + } + function ts(t, e) { + return t.groupOrder !== e.groupOrder + ? t.groupOrder - e.groupOrder + : t.renderOrder !== e.renderOrder + ? t.renderOrder - e.renderOrder + : t.z !== e.z + ? e.z - t.z + : t.id - e.id; + } + function es(t) { + const e = []; + let n = 0; + const i = [], + r = [], + s = { id: -1 }; + function a(i, r, a, o, l, c) { + let h = e[n]; + const u = t.get(a); + return ( + void 0 === h + ? ((h = { + id: i.id, + object: i, + geometry: r, + material: a, + program: u.program || s, + groupOrder: o, + renderOrder: i.renderOrder, + z: l, + group: c, + }), + (e[n] = h)) + : ((h.id = i.id), + (h.object = i), + (h.geometry = r), + (h.material = a), + (h.program = u.program || s), + (h.groupOrder = o), + (h.renderOrder = i.renderOrder), + (h.z = l), + (h.group = c)), + n++, + h + ); + } + return { + opaque: i, + transparent: r, + init: function () { + (n = 0), (i.length = 0), (r.length = 0); + }, + push: function (t, e, n, s, o, l) { + const c = a(t, e, n, s, o, l); + (!0 === n.transparent ? r : i).push(c); + }, + unshift: function (t, e, n, s, o, l) { + const c = a(t, e, n, s, o, l); + (!0 === n.transparent ? r : i).unshift(c); + }, + finish: function () { + for (let t = n, i = e.length; t < i; t++) { + const n = e[t]; + if (null === n.id) break; + (n.id = null), + (n.object = null), + (n.geometry = null), + (n.material = null), + (n.program = null), + (n.group = null); + } + }, + sort: function (t, e) { + i.length > 1 && i.sort(t || $r), r.length > 1 && r.sort(e || ts); + }, + }; + } + function ns(t) { + let e = new WeakMap(); + return { + get: function (n, i) { + let r; + return ( + !1 === e.has(n) + ? ((r = new es(t)), e.set(n, [r])) + : i >= e.get(n).length + ? ((r = new es(t)), e.get(n).push(r)) + : (r = e.get(n)[i]), + r + ); + }, + dispose: function () { + e = new WeakMap(); + }, + }; + } + function is() { + const t = {}; + return { + get: function (e) { + if (void 0 !== t[e.id]) return t[e.id]; + let n; + switch (e.type) { + case 'DirectionalLight': + n = { direction: new Lt(), color: new tn() }; + break; + case 'SpotLight': + n = { + position: new Lt(), + direction: new Lt(), + color: new tn(), + distance: 0, + coneCos: 0, + penumbraCos: 0, + decay: 0, + }; + break; + case 'PointLight': + n = { position: new Lt(), color: new tn(), distance: 0, decay: 0 }; + break; + case 'HemisphereLight': + n = { + direction: new Lt(), + skyColor: new tn(), + groundColor: new tn(), + }; + break; + case 'RectAreaLight': + n = { + color: new tn(), + position: new Lt(), + halfWidth: new Lt(), + halfHeight: new Lt(), + }; + } + return (t[e.id] = n), n; + }, + }; + } + let rs = 0; + function ss(t, e) { + return (e.castShadow ? 1 : 0) - (t.castShadow ? 1 : 0); + } + function as(t, e) { + const n = new is(), + i = (function () { + const t = {}; + return { + get: function (e) { + if (void 0 !== t[e.id]) return t[e.id]; + let n; + switch (e.type) { + case 'DirectionalLight': + case 'SpotLight': + n = { + shadowBias: 0, + shadowNormalBias: 0, + shadowRadius: 1, + shadowMapSize: new vt(), + }; + break; + case 'PointLight': + n = { + shadowBias: 0, + shadowNormalBias: 0, + shadowRadius: 1, + shadowMapSize: new vt(), + shadowCameraNear: 1, + shadowCameraFar: 1e3, + }; + } + return (t[e.id] = n), n; + }, + }; + })(), + r = { + version: 0, + hash: { + directionalLength: -1, + pointLength: -1, + spotLength: -1, + rectAreaLength: -1, + hemiLength: -1, + numDirectionalShadows: -1, + numPointShadows: -1, + numSpotShadows: -1, + }, + ambient: [0, 0, 0], + probe: [], + directional: [], + directionalShadow: [], + directionalShadowMap: [], + directionalShadowMatrix: [], + spot: [], + spotShadow: [], + spotShadowMap: [], + spotShadowMatrix: [], + rectArea: [], + rectAreaLTC1: null, + rectAreaLTC2: null, + point: [], + pointShadow: [], + pointShadowMap: [], + pointShadowMatrix: [], + hemi: [], + }; + for (let t = 0; t < 9; t++) r.probe.push(new Lt()); + const s = new Lt(), + a = new se(), + o = new se(); + return { + setup: function (s) { + let a = 0, + o = 0, + l = 0; + for (let t = 0; t < 9; t++) r.probe[t].set(0, 0, 0); + let c = 0, + h = 0, + u = 0, + d = 0, + p = 0, + m = 0, + f = 0, + g = 0; + s.sort(ss); + for (let t = 0, e = s.length; t < e; t++) { + const e = s[t], + v = e.color, + y = e.intensity, + x = e.distance, + _ = e.shadow && e.shadow.map ? e.shadow.map.texture : null; + if (e.isAmbientLight) (a += v.r * y), (o += v.g * y), (l += v.b * y); + else if (e.isLightProbe) + for (let t = 0; t < 9; t++) + r.probe[t].addScaledVector(e.sh.coefficients[t], y); + else if (e.isDirectionalLight) { + const t = n.get(e); + if ( + (t.color.copy(e.color).multiplyScalar(e.intensity), e.castShadow) + ) { + const t = e.shadow, + n = i.get(e); + (n.shadowBias = t.bias), + (n.shadowNormalBias = t.normalBias), + (n.shadowRadius = t.radius), + (n.shadowMapSize = t.mapSize), + (r.directionalShadow[c] = n), + (r.directionalShadowMap[c] = _), + (r.directionalShadowMatrix[c] = e.shadow.matrix), + m++; + } + (r.directional[c] = t), c++; + } else if (e.isSpotLight) { + const t = n.get(e); + if ( + (t.position.setFromMatrixPosition(e.matrixWorld), + t.color.copy(v).multiplyScalar(y), + (t.distance = x), + (t.coneCos = Math.cos(e.angle)), + (t.penumbraCos = Math.cos(e.angle * (1 - e.penumbra))), + (t.decay = e.decay), + e.castShadow) + ) { + const t = e.shadow, + n = i.get(e); + (n.shadowBias = t.bias), + (n.shadowNormalBias = t.normalBias), + (n.shadowRadius = t.radius), + (n.shadowMapSize = t.mapSize), + (r.spotShadow[u] = n), + (r.spotShadowMap[u] = _), + (r.spotShadowMatrix[u] = e.shadow.matrix), + g++; + } + (r.spot[u] = t), u++; + } else if (e.isRectAreaLight) { + const t = n.get(e); + t.color.copy(v).multiplyScalar(y), + t.halfWidth.set(0.5 * e.width, 0, 0), + t.halfHeight.set(0, 0.5 * e.height, 0), + (r.rectArea[d] = t), + d++; + } else if (e.isPointLight) { + const t = n.get(e); + if ( + (t.color.copy(e.color).multiplyScalar(e.intensity), + (t.distance = e.distance), + (t.decay = e.decay), + e.castShadow) + ) { + const t = e.shadow, + n = i.get(e); + (n.shadowBias = t.bias), + (n.shadowNormalBias = t.normalBias), + (n.shadowRadius = t.radius), + (n.shadowMapSize = t.mapSize), + (n.shadowCameraNear = t.camera.near), + (n.shadowCameraFar = t.camera.far), + (r.pointShadow[h] = n), + (r.pointShadowMap[h] = _), + (r.pointShadowMatrix[h] = e.shadow.matrix), + f++; + } + (r.point[h] = t), h++; + } else if (e.isHemisphereLight) { + const t = n.get(e); + t.skyColor.copy(e.color).multiplyScalar(y), + t.groundColor.copy(e.groundColor).multiplyScalar(y), + (r.hemi[p] = t), + p++; + } + } + d > 0 && + (e.isWebGL2 || !0 === t.has('OES_texture_float_linear') + ? ((r.rectAreaLTC1 = ui.LTC_FLOAT_1), + (r.rectAreaLTC2 = ui.LTC_FLOAT_2)) + : !0 === t.has('OES_texture_half_float_linear') + ? ((r.rectAreaLTC1 = ui.LTC_HALF_1), + (r.rectAreaLTC2 = ui.LTC_HALF_2)) + : console.error( + 'THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.' + )), + (r.ambient[0] = a), + (r.ambient[1] = o), + (r.ambient[2] = l); + const v = r.hash; + (v.directionalLength === c && + v.pointLength === h && + v.spotLength === u && + v.rectAreaLength === d && + v.hemiLength === p && + v.numDirectionalShadows === m && + v.numPointShadows === f && + v.numSpotShadows === g) || + ((r.directional.length = c), + (r.spot.length = u), + (r.rectArea.length = d), + (r.point.length = h), + (r.hemi.length = p), + (r.directionalShadow.length = m), + (r.directionalShadowMap.length = m), + (r.pointShadow.length = f), + (r.pointShadowMap.length = f), + (r.spotShadow.length = g), + (r.spotShadowMap.length = g), + (r.directionalShadowMatrix.length = m), + (r.pointShadowMatrix.length = f), + (r.spotShadowMatrix.length = g), + (v.directionalLength = c), + (v.pointLength = h), + (v.spotLength = u), + (v.rectAreaLength = d), + (v.hemiLength = p), + (v.numDirectionalShadows = m), + (v.numPointShadows = f), + (v.numSpotShadows = g), + (r.version = rs++)); + }, + setupView: function (t, e) { + let n = 0, + i = 0, + l = 0, + c = 0, + h = 0; + const u = e.matrixWorldInverse; + for (let e = 0, d = t.length; e < d; e++) { + const d = t[e]; + if (d.isDirectionalLight) { + const t = r.directional[n]; + t.direction.setFromMatrixPosition(d.matrixWorld), + s.setFromMatrixPosition(d.target.matrixWorld), + t.direction.sub(s), + t.direction.transformDirection(u), + n++; + } else if (d.isSpotLight) { + const t = r.spot[l]; + t.position.setFromMatrixPosition(d.matrixWorld), + t.position.applyMatrix4(u), + t.direction.setFromMatrixPosition(d.matrixWorld), + s.setFromMatrixPosition(d.target.matrixWorld), + t.direction.sub(s), + t.direction.transformDirection(u), + l++; + } else if (d.isRectAreaLight) { + const t = r.rectArea[c]; + t.position.setFromMatrixPosition(d.matrixWorld), + t.position.applyMatrix4(u), + o.identity(), + a.copy(d.matrixWorld), + a.premultiply(u), + o.extractRotation(a), + t.halfWidth.set(0.5 * d.width, 0, 0), + t.halfHeight.set(0, 0.5 * d.height, 0), + t.halfWidth.applyMatrix4(o), + t.halfHeight.applyMatrix4(o), + c++; + } else if (d.isPointLight) { + const t = r.point[i]; + t.position.setFromMatrixPosition(d.matrixWorld), + t.position.applyMatrix4(u), + i++; + } else if (d.isHemisphereLight) { + const t = r.hemi[h]; + t.direction.setFromMatrixPosition(d.matrixWorld), + t.direction.transformDirection(u), + t.direction.normalize(), + h++; + } + } + }, + state: r, + }; + } + function os(t, e) { + const n = new as(t, e), + i = [], + r = []; + return { + init: function () { + (i.length = 0), (r.length = 0); + }, + state: { lightsArray: i, shadowsArray: r, lights: n }, + setupLights: function () { + n.setup(i); + }, + setupLightsView: function (t) { + n.setupView(i, t); + }, + pushLight: function (t) { + i.push(t); + }, + pushShadow: function (t) { + r.push(t); + }, + }; + } + function ls(t, e) { + let n = new WeakMap(); + return { + get: function (i, r = 0) { + let s; + return ( + !1 === n.has(i) + ? ((s = new os(t, e)), n.set(i, [s])) + : r >= n.get(i).length + ? ((s = new os(t, e)), n.get(i).push(s)) + : (s = n.get(i)[r]), + s + ); + }, + dispose: function () { + n = new WeakMap(); + }, + }; + } + class cs extends Xe { + constructor(t) { + super(), + (this.type = 'MeshDepthMaterial'), + (this.depthPacking = 3200), + (this.skinning = !1), + (this.morphTargets = !1), + (this.map = null), + (this.alphaMap = null), + (this.displacementMap = null), + (this.displacementScale = 1), + (this.displacementBias = 0), + (this.wireframe = !1), + (this.wireframeLinewidth = 1), + (this.fog = !1), + this.setValues(t); + } + copy(t) { + return ( + super.copy(t), + (this.depthPacking = t.depthPacking), + (this.skinning = t.skinning), + (this.morphTargets = t.morphTargets), + (this.map = t.map), + (this.alphaMap = t.alphaMap), + (this.displacementMap = t.displacementMap), + (this.displacementScale = t.displacementScale), + (this.displacementBias = t.displacementBias), + (this.wireframe = t.wireframe), + (this.wireframeLinewidth = t.wireframeLinewidth), + this + ); + } + } + cs.prototype.isMeshDepthMaterial = !0; + class hs extends Xe { + constructor(t) { + super(), + (this.type = 'MeshDistanceMaterial'), + (this.referencePosition = new Lt()), + (this.nearDistance = 1), + (this.farDistance = 1e3), + (this.skinning = !1), + (this.morphTargets = !1), + (this.map = null), + (this.alphaMap = null), + (this.displacementMap = null), + (this.displacementScale = 1), + (this.displacementBias = 0), + (this.fog = !1), + this.setValues(t); + } + copy(t) { + return ( + super.copy(t), + this.referencePosition.copy(t.referencePosition), + (this.nearDistance = t.nearDistance), + (this.farDistance = t.farDistance), + (this.skinning = t.skinning), + (this.morphTargets = t.morphTargets), + (this.map = t.map), + (this.alphaMap = t.alphaMap), + (this.displacementMap = t.displacementMap), + (this.displacementScale = t.displacementScale), + (this.displacementBias = t.displacementBias), + this + ); + } + } + hs.prototype.isMeshDistanceMaterial = !0; + function us(t, e, n) { + let i = new ai(); + const r = new vt(), + s = new vt(), + a = new St(), + o = [], + l = [], + c = {}, + h = n.maxTextureSize, + u = { 0: 1, 1: 0, 2: 2 }, + d = new Jn({ + defines: { SAMPLE_RATE: 2 / 8, HALF_SAMPLE_RATE: 1 / 8 }, + uniforms: { + shadow_pass: { value: null }, + resolution: { value: new vt() }, + radius: { value: 4 }, + }, + vertexShader: + 'void main() {\n\tgl_Position = vec4( position, 1.0 );\n}', + fragmentShader: + 'uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include \nvoid main() {\n\tfloat mean = 0.0;\n\tfloat squared_mean = 0.0;\n\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );\n\tfor ( float i = -1.0; i < 1.0 ; i += SAMPLE_RATE) {\n\t\t#ifdef HORIZONTAL_PASS\n\t\t\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( i, 0.0 ) * radius ) / resolution ) );\n\t\t\tmean += distribution.x;\n\t\t\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n\t\t#else\n\t\t\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, i ) * radius ) / resolution ) );\n\t\t\tmean += depth;\n\t\t\tsquared_mean += depth * depth;\n\t\t#endif\n\t}\n\tmean = mean * HALF_SAMPLE_RATE;\n\tsquared_mean = squared_mean * HALF_SAMPLE_RATE;\n\tfloat std_dev = sqrt( squared_mean - mean * mean );\n\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}', + }), + m = d.clone(); + m.defines.HORIZONTAL_PASS = 1; + const f = new En(); + f.setAttribute( + 'position', + new sn(new Float32Array([-1, -1, 0.5, 3, -1, 0.5, -1, 3, 0.5]), 3) + ); + const v = new Wn(f, d), + y = this; + function x(n, i) { + const r = e.update(v); + (d.uniforms.shadow_pass.value = n.map.texture), + (d.uniforms.resolution.value = n.mapSize), + (d.uniforms.radius.value = n.radius), + t.setRenderTarget(n.mapPass), + t.clear(), + t.renderBufferDirect(i, null, r, d, v, null), + (m.uniforms.shadow_pass.value = n.mapPass.texture), + (m.uniforms.resolution.value = n.mapSize), + (m.uniforms.radius.value = n.radius), + t.setRenderTarget(n.map), + t.clear(), + t.renderBufferDirect(i, null, r, m, v, null); + } + function _(t, e, n) { + const i = (t << 0) | (e << 1) | (n << 2); + let r = o[i]; + return ( + void 0 === r && + ((r = new cs({ depthPacking: 3201, morphTargets: t, skinning: e })), + (o[i] = r)), + r + ); + } + function w(t, e, n) { + const i = (t << 0) | (e << 1) | (n << 2); + let r = l[i]; + return ( + void 0 === r && + ((r = new hs({ morphTargets: t, skinning: e })), (l[i] = r)), + r + ); + } + function b(e, n, i, r, s, a, o) { + let l = null, + h = _, + d = e.customDepthMaterial; + if ( + (!0 === r.isPointLight && ((h = w), (d = e.customDistanceMaterial)), + void 0 === d) + ) { + let t = !1; + !0 === i.morphTargets && + (t = + n.morphAttributes && + n.morphAttributes.position && + n.morphAttributes.position.length > 0); + let r = !1; + !0 === e.isSkinnedMesh && + (!0 === i.skinning + ? (r = !0) + : console.warn( + 'THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:', + e + )); + l = h(t, r, !0 === e.isInstancedMesh); + } else l = d; + if ( + t.localClippingEnabled && + !0 === i.clipShadows && + 0 !== i.clippingPlanes.length + ) { + const t = l.uuid, + e = i.uuid; + let n = c[t]; + void 0 === n && ((n = {}), (c[t] = n)); + let r = n[e]; + void 0 === r && ((r = l.clone()), (n[e] = r)), (l = r); + } + return ( + (l.visible = i.visible), + (l.wireframe = i.wireframe), + (l.side = + 3 === o + ? null !== i.shadowSide + ? i.shadowSide + : i.side + : null !== i.shadowSide + ? i.shadowSide + : u[i.side]), + (l.clipShadows = i.clipShadows), + (l.clippingPlanes = i.clippingPlanes), + (l.clipIntersection = i.clipIntersection), + (l.wireframeLinewidth = i.wireframeLinewidth), + (l.linewidth = i.linewidth), + !0 === r.isPointLight && + !0 === l.isMeshDistanceMaterial && + (l.referencePosition.setFromMatrixPosition(r.matrixWorld), + (l.nearDistance = s), + (l.farDistance = a)), + l + ); + } + function M(n, r, s, a, o) { + if (!1 === n.visible) return; + if ( + n.layers.test(r.layers) && + (n.isMesh || n.isLine || n.isPoints) && + (n.castShadow || (n.receiveShadow && 3 === o)) && + (!n.frustumCulled || i.intersectsObject(n)) + ) { + n.modelViewMatrix.multiplyMatrices(s.matrixWorldInverse, n.matrixWorld); + const i = e.update(n), + r = n.material; + if (Array.isArray(r)) { + const e = i.groups; + for (let l = 0, c = e.length; l < c; l++) { + const c = e[l], + h = r[c.materialIndex]; + if (h && h.visible) { + const e = b(n, i, h, a, s.near, s.far, o); + t.renderBufferDirect(s, null, i, e, n, c); + } + } + } else if (r.visible) { + const e = b(n, i, r, a, s.near, s.far, o); + t.renderBufferDirect(s, null, i, e, n, null); + } + } + const l = n.children; + for (let t = 0, e = l.length; t < e; t++) M(l[t], r, s, a, o); + } + (this.enabled = !1), + (this.autoUpdate = !0), + (this.needsUpdate = !1), + (this.type = 1), + (this.render = function (e, n, o) { + if (!1 === y.enabled) return; + if (!1 === y.autoUpdate && !1 === y.needsUpdate) return; + if (0 === e.length) return; + const l = t.getRenderTarget(), + c = t.getActiveCubeFace(), + u = t.getActiveMipmapLevel(), + d = t.state; + d.setBlending(0), + d.buffers.color.setClear(1, 1, 1, 1), + d.buffers.depth.setTest(!0), + d.setScissorTest(!1); + for (let l = 0, c = e.length; l < c; l++) { + const c = e[l], + u = c.shadow; + if (void 0 === u) { + console.warn('THREE.WebGLShadowMap:', c, 'has no shadow.'); + continue; + } + if (!1 === u.autoUpdate && !1 === u.needsUpdate) continue; + r.copy(u.mapSize); + const m = u.getFrameExtents(); + if ( + (r.multiply(m), + s.copy(u.mapSize), + (r.x > h || r.y > h) && + (r.x > h && + ((s.x = Math.floor(h / m.x)), + (r.x = s.x * m.x), + (u.mapSize.x = s.x)), + r.y > h && + ((s.y = Math.floor(h / m.y)), + (r.y = s.y * m.y), + (u.mapSize.y = s.y))), + null === u.map && !u.isPointLightShadow && 3 === this.type) + ) { + const t = { minFilter: g, magFilter: g, format: E }; + (u.map = new Tt(r.x, r.y, t)), + (u.map.texture.name = c.name + '.shadowMap'), + (u.mapPass = new Tt(r.x, r.y, t)), + u.camera.updateProjectionMatrix(); + } + if (null === u.map) { + const t = { minFilter: p, magFilter: p, format: E }; + (u.map = new Tt(r.x, r.y, t)), + (u.map.texture.name = c.name + '.shadowMap'), + u.camera.updateProjectionMatrix(); + } + t.setRenderTarget(u.map), t.clear(); + const f = u.getViewportCount(); + for (let t = 0; t < f; t++) { + const e = u.getViewport(t); + a.set(s.x * e.x, s.y * e.y, s.x * e.z, s.y * e.w), + d.viewport(a), + u.updateMatrices(c, t), + (i = u.getFrustum()), + M(n, o, u.camera, c, this.type); + } + u.isPointLightShadow || 3 !== this.type || x(u, o), + (u.needsUpdate = !1); + } + (y.needsUpdate = !1), t.setRenderTarget(l, c, u); + }); + } + function ds(t, e, i) { + const r = i.isWebGL2; + const s = new (function () { + let e = !1; + const n = new St(); + let i = null; + const r = new St(0, 0, 0, 0); + return { + setMask: function (n) { + i === n || e || (t.colorMask(n, n, n, n), (i = n)); + }, + setLocked: function (t) { + e = t; + }, + setClear: function (e, i, s, a, o) { + !0 === o && ((e *= a), (i *= a), (s *= a)), + n.set(e, i, s, a), + !1 === r.equals(n) && (t.clearColor(e, i, s, a), r.copy(n)); + }, + reset: function () { + (e = !1), (i = null), r.set(-1, 0, 0, 0); + }, + }; + })(), + a = new (function () { + let e = !1, + n = null, + i = null, + r = null; + return { + setTest: function (t) { + t ? z(2929) : F(2929); + }, + setMask: function (i) { + n === i || e || (t.depthMask(i), (n = i)); + }, + setFunc: function (e) { + if (i !== e) { + if (e) + switch (e) { + case 0: + t.depthFunc(512); + break; + case 1: + t.depthFunc(519); + break; + case 2: + t.depthFunc(513); + break; + case 3: + t.depthFunc(515); + break; + case 4: + t.depthFunc(514); + break; + case 5: + t.depthFunc(518); + break; + case 6: + t.depthFunc(516); + break; + case 7: + t.depthFunc(517); + break; + default: + t.depthFunc(515); + } + else t.depthFunc(515); + i = e; + } + }, + setLocked: function (t) { + e = t; + }, + setClear: function (e) { + r !== e && (t.clearDepth(e), (r = e)); + }, + reset: function () { + (e = !1), (n = null), (i = null), (r = null); + }, + }; + })(), + o = new (function () { + let e = !1, + n = null, + i = null, + r = null, + s = null, + a = null, + o = null, + l = null, + c = null; + return { + setTest: function (t) { + e || (t ? z(2960) : F(2960)); + }, + setMask: function (i) { + n === i || e || (t.stencilMask(i), (n = i)); + }, + setFunc: function (e, n, a) { + (i === e && r === n && s === a) || + (t.stencilFunc(e, n, a), (i = e), (r = n), (s = a)); + }, + setOp: function (e, n, i) { + (a === e && o === n && l === i) || + (t.stencilOp(e, n, i), (a = e), (o = n), (l = i)); + }, + setLocked: function (t) { + e = t; + }, + setClear: function (e) { + c !== e && (t.clearStencil(e), (c = e)); + }, + reset: function () { + (e = !1), + (n = null), + (i = null), + (r = null), + (s = null), + (a = null), + (o = null), + (l = null), + (c = null); + }, + }; + })(); + let l = {}, + c = null, + h = {}, + u = null, + d = !1, + p = null, + m = null, + f = null, + g = null, + v = null, + y = null, + x = null, + _ = !1, + w = null, + b = null, + M = null, + S = null, + T = null; + const E = t.getParameter(35661); + let A = !1, + L = 0; + const R = t.getParameter(7938); + -1 !== R.indexOf('WebGL') + ? ((L = parseFloat(/^WebGL (\d)/.exec(R)[1])), (A = L >= 1)) + : -1 !== R.indexOf('OpenGL ES') && + ((L = parseFloat(/^OpenGL ES (\d)/.exec(R)[1])), (A = L >= 2)); + let C = null, + P = {}; + const D = new St(0, 0, t.canvas.width, t.canvas.height), + I = new St(0, 0, t.canvas.width, t.canvas.height); + function N(e, n, i) { + const r = new Uint8Array(4), + s = t.createTexture(); + t.bindTexture(e, s), + t.texParameteri(e, 10241, 9728), + t.texParameteri(e, 10240, 9728); + for (let e = 0; e < i; e++) + t.texImage2D(n + e, 0, 6408, 1, 1, 0, 6408, 5121, r); + return s; + } + const B = {}; + function z(e) { + !0 !== l[e] && (t.enable(e), (l[e] = !0)); + } + function F(e) { + !1 !== l[e] && (t.disable(e), (l[e] = !1)); + } + (B[3553] = N(3553, 3553, 1)), + (B[34067] = N(34067, 34069, 6)), + s.setClear(0, 0, 0, 1), + a.setClear(1), + o.setClear(0), + z(2929), + a.setFunc(3), + U(!1), + k(1), + z(2884), + G(0); + const O = { [n]: 32774, 101: 32778, 102: 32779 }; + if (r) (O[103] = 32775), (O[104] = 32776); + else { + const t = e.get('EXT_blend_minmax'); + null !== t && ((O[103] = t.MIN_EXT), (O[104] = t.MAX_EXT)); + } + const H = { + 200: 0, + 201: 1, + 202: 768, + 204: 770, + 210: 776, + 208: 774, + 206: 772, + 203: 769, + 205: 771, + 209: 775, + 207: 773, + }; + function G(e, i, r, s, a, o, l, c) { + if (0 !== e) { + if ((!1 === d && (z(3042), (d = !0)), 5 === e)) + (a = a || i), + (o = o || r), + (l = l || s), + (i === m && a === v) || + (t.blendEquationSeparate(O[i], O[a]), (m = i), (v = a)), + (r === f && s === g && o === y && l === x) || + (t.blendFuncSeparate(H[r], H[s], H[o], H[l]), + (f = r), + (g = s), + (y = o), + (x = l)), + (p = e), + (_ = null); + else if (e !== p || c !== _) { + if ( + ((m === n && v === n) || (t.blendEquation(32774), (m = n), (v = n)), + c) + ) + switch (e) { + case 1: + t.blendFuncSeparate(1, 771, 1, 771); + break; + case 2: + t.blendFunc(1, 1); + break; + case 3: + t.blendFuncSeparate(0, 0, 769, 771); + break; + case 4: + t.blendFuncSeparate(0, 768, 0, 770); + break; + default: + console.error('THREE.WebGLState: Invalid blending: ', e); + } + else + switch (e) { + case 1: + t.blendFuncSeparate(770, 771, 1, 771); + break; + case 2: + t.blendFunc(770, 1); + break; + case 3: + t.blendFunc(0, 769); + break; + case 4: + t.blendFunc(0, 768); + break; + default: + console.error('THREE.WebGLState: Invalid blending: ', e); + } + (f = null), (g = null), (y = null), (x = null), (p = e), (_ = c); + } + } else !0 === d && (F(3042), (d = !1)); + } + function U(e) { + w !== e && (e ? t.frontFace(2304) : t.frontFace(2305), (w = e)); + } + function k(e) { + 0 !== e + ? (z(2884), + e !== b && + (1 === e + ? t.cullFace(1029) + : 2 === e + ? t.cullFace(1028) + : t.cullFace(1032))) + : F(2884), + (b = e); + } + function V(e, n, i) { + e + ? (z(32823), + (S === n && T === i) || (t.polygonOffset(n, i), (S = n), (T = i))) + : F(32823); + } + function W(e) { + void 0 === e && (e = 33984 + E - 1), + C !== e && (t.activeTexture(e), (C = e)); + } + return { + buffers: { color: s, depth: a, stencil: o }, + enable: z, + disable: F, + bindFramebuffer: function (e, n) { + null === n && null !== c && (n = c), + h[e] !== n && + (t.bindFramebuffer(e, n), + (h[e] = n), + r && + (36009 === e && (h[36160] = n), 36160 === e && (h[36009] = n))); + }, + bindXRFramebuffer: function (e) { + e !== c && (t.bindFramebuffer(36160, e), (c = e)); + }, + useProgram: function (e) { + return u !== e && (t.useProgram(e), (u = e), !0); + }, + setBlending: G, + setMaterial: function (t, e) { + 2 === t.side ? F(2884) : z(2884); + let n = 1 === t.side; + e && (n = !n), + U(n), + 1 === t.blending && !1 === t.transparent + ? G(0) + : G( + t.blending, + t.blendEquation, + t.blendSrc, + t.blendDst, + t.blendEquationAlpha, + t.blendSrcAlpha, + t.blendDstAlpha, + t.premultipliedAlpha + ), + a.setFunc(t.depthFunc), + a.setTest(t.depthTest), + a.setMask(t.depthWrite), + s.setMask(t.colorWrite); + const i = t.stencilWrite; + o.setTest(i), + i && + (o.setMask(t.stencilWriteMask), + o.setFunc(t.stencilFunc, t.stencilRef, t.stencilFuncMask), + o.setOp(t.stencilFail, t.stencilZFail, t.stencilZPass)), + V(t.polygonOffset, t.polygonOffsetFactor, t.polygonOffsetUnits), + !0 === t.alphaToCoverage ? z(32926) : F(32926); + }, + setFlipSided: U, + setCullFace: k, + setLineWidth: function (e) { + e !== M && (A && t.lineWidth(e), (M = e)); + }, + setPolygonOffset: V, + setScissorTest: function (t) { + t ? z(3089) : F(3089); + }, + activeTexture: W, + bindTexture: function (e, n) { + null === C && W(); + let i = P[C]; + void 0 === i && ((i = { type: void 0, texture: void 0 }), (P[C] = i)), + (i.type === e && i.texture === n) || + (t.bindTexture(e, n || B[e]), (i.type = e), (i.texture = n)); + }, + unbindTexture: function () { + const e = P[C]; + void 0 !== e && + void 0 !== e.type && + (t.bindTexture(e.type, null), + (e.type = void 0), + (e.texture = void 0)); + }, + compressedTexImage2D: function () { + try { + t.compressedTexImage2D.apply(t, arguments); + } catch (t) { + console.error('THREE.WebGLState:', t); + } + }, + texImage2D: function () { + try { + t.texImage2D.apply(t, arguments); + } catch (t) { + console.error('THREE.WebGLState:', t); + } + }, + texImage3D: function () { + try { + t.texImage3D.apply(t, arguments); + } catch (t) { + console.error('THREE.WebGLState:', t); + } + }, + scissor: function (e) { + !1 === D.equals(e) && (t.scissor(e.x, e.y, e.z, e.w), D.copy(e)); + }, + viewport: function (e) { + !1 === I.equals(e) && (t.viewport(e.x, e.y, e.z, e.w), I.copy(e)); + }, + reset: function () { + t.disable(3042), + t.disable(2884), + t.disable(2929), + t.disable(32823), + t.disable(3089), + t.disable(2960), + t.disable(32926), + t.blendEquation(32774), + t.blendFunc(1, 0), + t.blendFuncSeparate(1, 0, 1, 0), + t.colorMask(!0, !0, !0, !0), + t.clearColor(0, 0, 0, 0), + t.depthMask(!0), + t.depthFunc(513), + t.clearDepth(1), + t.stencilMask(4294967295), + t.stencilFunc(519, 0, 4294967295), + t.stencilOp(7680, 7680, 7680), + t.clearStencil(0), + t.cullFace(1029), + t.frontFace(2305), + t.polygonOffset(0, 0), + t.activeTexture(33984), + t.bindFramebuffer(36160, null), + !0 === r && + (t.bindFramebuffer(36009, null), t.bindFramebuffer(36008, null)), + t.useProgram(null), + t.lineWidth(1), + t.scissor(0, 0, t.canvas.width, t.canvas.height), + t.viewport(0, 0, t.canvas.width, t.canvas.height), + (l = {}), + (C = null), + (P = {}), + (c = null), + (h = {}), + (u = null), + (d = !1), + (p = null), + (m = null), + (f = null), + (g = null), + (v = null), + (y = null), + (x = null), + (_ = !1), + (w = null), + (b = null), + (M = null), + (S = null), + (T = null), + D.set(0, 0, t.canvas.width, t.canvas.height), + I.set(0, 0, t.canvas.width, t.canvas.height), + s.reset(), + a.reset(), + o.reset(); + }, + }; + } + function ps(t, e, n, i, r, s, a) { + const o = r.isWebGL2, + l = r.maxTextures, + c = r.maxCubemapSize, + x = r.maxTextureSize, + R = r.maxSamples, + C = new WeakMap(); + let P, + D = !1; + try { + D = + 'undefined' != typeof OffscreenCanvas && + null !== new OffscreenCanvas(1, 1).getContext('2d'); + } catch (t) {} + function I(t, e) { + return D + ? new OffscreenCanvas(t, e) + : document.createElementNS('http://www.w3.org/1999/xhtml', 'canvas'); + } + function N(t, e, n, i) { + let r = 1; + if ( + ((t.width > i || t.height > i) && (r = i / Math.max(t.width, t.height)), + r < 1 || !0 === e) + ) { + if ( + ('undefined' != typeof HTMLImageElement && + t instanceof HTMLImageElement) || + ('undefined' != typeof HTMLCanvasElement && + t instanceof HTMLCanvasElement) || + ('undefined' != typeof ImageBitmap && t instanceof ImageBitmap) + ) { + const i = e ? ft : Math.floor, + s = i(r * t.width), + a = i(r * t.height); + void 0 === P && (P = I(s, a)); + const o = n ? I(s, a) : P; + (o.width = s), (o.height = a); + return ( + o.getContext('2d').drawImage(t, 0, 0, s, a), + console.warn( + 'THREE.WebGLRenderer: Texture has been resized from (' + + t.width + + 'x' + + t.height + + ') to (' + + s + + 'x' + + a + + ').' + ), + o + ); + } + return ( + 'data' in t && + console.warn( + 'THREE.WebGLRenderer: Image in DataTexture is too big (' + + t.width + + 'x' + + t.height + + ').' + ), + t + ); + } + return t; + } + function B(t) { + return pt(t.width) && pt(t.height); + } + function z(t, e) { + return t.generateMipmaps && e && t.minFilter !== p && t.minFilter !== g; + } + function F(e, n, r, s) { + t.generateMipmap(e); + i.get(n).__maxMipLevel = Math.log2(Math.max(r, s)); + } + function O(n, i, r) { + if (!1 === o) return i; + if (null !== n) { + if (void 0 !== t[n]) return t[n]; + console.warn( + "THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '" + + n + + "'" + ); + } + let s = i; + return ( + 6403 === i && + (5126 === r && (s = 33326), + 5131 === r && (s = 33325), + 5121 === r && (s = 33321)), + 6407 === i && + (5126 === r && (s = 34837), + 5131 === r && (s = 34843), + 5121 === r && (s = 32849)), + 6408 === i && + (5126 === r && (s = 34836), + 5131 === r && (s = 34842), + 5121 === r && (s = 32856)), + (33325 !== s && 33326 !== s && 34842 !== s && 34836 !== s) || + e.get('EXT_color_buffer_float'), + s + ); + } + function H(t) { + return t === p || t === m || t === f ? 9728 : 9729; + } + function G(e) { + const n = e.target; + n.removeEventListener('dispose', G), + (function (e) { + const n = i.get(e); + if (void 0 === n.__webglInit) return; + t.deleteTexture(n.__webglTexture), i.remove(e); + })(n), + n.isVideoTexture && C.delete(n), + a.memory.textures--; + } + function U(e) { + const n = e.target; + n.removeEventListener('dispose', U), + (function (e) { + const n = e.texture, + r = i.get(e), + s = i.get(n); + if (!e) return; + void 0 !== s.__webglTexture && t.deleteTexture(s.__webglTexture); + e.depthTexture && e.depthTexture.dispose(); + if (e.isWebGLCubeRenderTarget) + for (let e = 0; e < 6; e++) + t.deleteFramebuffer(r.__webglFramebuffer[e]), + r.__webglDepthbuffer && + t.deleteRenderbuffer(r.__webglDepthbuffer[e]); + else + t.deleteFramebuffer(r.__webglFramebuffer), + r.__webglDepthbuffer && + t.deleteRenderbuffer(r.__webglDepthbuffer), + r.__webglMultisampledFramebuffer && + t.deleteFramebuffer(r.__webglMultisampledFramebuffer), + r.__webglColorRenderbuffer && + t.deleteRenderbuffer(r.__webglColorRenderbuffer), + r.__webglDepthRenderbuffer && + t.deleteRenderbuffer(r.__webglDepthRenderbuffer); + i.remove(n), i.remove(e); + })(n), + a.memory.textures--; + } + let k = 0; + function V(t, e) { + const r = i.get(t); + if ( + (t.isVideoTexture && + (function (t) { + const e = a.render.frame; + C.get(t) !== e && (C.set(t, e), t.update()); + })(t), + t.version > 0 && r.__version !== t.version) + ) { + const n = t.image; + if (void 0 === n) + console.warn( + 'THREE.WebGLRenderer: Texture marked for update but image is undefined' + ); + else { + if (!1 !== n.complete) return void Z(r, t, e); + console.warn( + 'THREE.WebGLRenderer: Texture marked for update but image is incomplete' + ); + } + } + n.activeTexture(33984 + e), n.bindTexture(3553, r.__webglTexture); + } + function W(e, r) { + const a = i.get(e); + e.version > 0 && a.__version !== e.version + ? (function (e, i, r) { + if (6 !== i.image.length) return; + Y(e, i), + n.activeTexture(33984 + r), + n.bindTexture(34067, e.__webglTexture), + t.pixelStorei(37440, i.flipY), + t.pixelStorei(37441, i.premultiplyAlpha), + t.pixelStorei(3317, i.unpackAlignment), + t.pixelStorei(37443, 0); + const a = + i && (i.isCompressedTexture || i.image[0].isCompressedTexture), + l = i.image[0] && i.image[0].isDataTexture, + h = []; + for (let t = 0; t < 6; t++) + h[t] = + a || l + ? l + ? i.image[t].image + : i.image[t] + : N(i.image[t], !1, !0, c); + const u = h[0], + d = B(u) || o, + p = s.convert(i.format), + m = s.convert(i.type), + f = O(i.internalFormat, p, m); + let g; + if ((X(34067, i, d), a)) { + for (let t = 0; t < 6; t++) { + g = h[t].mipmaps; + for (let e = 0; e < g.length; e++) { + const r = g[e]; + i.format !== E && i.format !== T + ? null !== p + ? n.compressedTexImage2D( + 34069 + t, + e, + f, + r.width, + r.height, + 0, + r.data + ) + : console.warn( + 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()' + ) + : n.texImage2D( + 34069 + t, + e, + f, + r.width, + r.height, + 0, + p, + m, + r.data + ); + } + } + e.__maxMipLevel = g.length - 1; + } else { + g = i.mipmaps; + for (let t = 0; t < 6; t++) + if (l) { + n.texImage2D( + 34069 + t, + 0, + f, + h[t].width, + h[t].height, + 0, + p, + m, + h[t].data + ); + for (let e = 0; e < g.length; e++) { + const i = g[e].image[t].image; + n.texImage2D( + 34069 + t, + e + 1, + f, + i.width, + i.height, + 0, + p, + m, + i.data + ); + } + } else { + n.texImage2D(34069 + t, 0, f, p, m, h[t]); + for (let e = 0; e < g.length; e++) { + const i = g[e]; + n.texImage2D(34069 + t, e + 1, f, p, m, i.image[t]); + } + } + e.__maxMipLevel = g.length; + } + z(i, d) && F(34067, i, u.width, u.height); + (e.__version = i.version), i.onUpdate && i.onUpdate(i); + })(a, e, r) + : (n.activeTexture(33984 + r), n.bindTexture(34067, a.__webglTexture)); + } + const j = { [h]: 10497, [u]: 33071, [d]: 33648 }, + q = { [p]: 9728, [m]: 9984, [f]: 9986, [g]: 9729, [v]: 9985, [y]: 9987 }; + function X(n, s, a) { + if ( + (a + ? (t.texParameteri(n, 10242, j[s.wrapS]), + t.texParameteri(n, 10243, j[s.wrapT]), + (32879 !== n && 35866 !== n) || + t.texParameteri(n, 32882, j[s.wrapR]), + t.texParameteri(n, 10240, q[s.magFilter]), + t.texParameteri(n, 10241, q[s.minFilter])) + : (t.texParameteri(n, 10242, 33071), + t.texParameteri(n, 10243, 33071), + (32879 !== n && 35866 !== n) || t.texParameteri(n, 32882, 33071), + (s.wrapS === u && s.wrapT === u) || + console.warn( + 'THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.' + ), + t.texParameteri(n, 10240, H(s.magFilter)), + t.texParameteri(n, 10241, H(s.minFilter)), + s.minFilter !== p && + s.minFilter !== g && + console.warn( + 'THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.' + )), + !0 === e.has('EXT_texture_filter_anisotropic')) + ) { + const a = e.get('EXT_texture_filter_anisotropic'); + if (s.type === b && !1 === e.has('OES_texture_float_linear')) return; + if ( + !1 === o && + s.type === M && + !1 === e.has('OES_texture_half_float_linear') + ) + return; + (s.anisotropy > 1 || i.get(s).__currentAnisotropy) && + (t.texParameterf( + n, + a.TEXTURE_MAX_ANISOTROPY_EXT, + Math.min(s.anisotropy, r.getMaxAnisotropy()) + ), + (i.get(s).__currentAnisotropy = s.anisotropy)); + } + } + function Y(e, n) { + void 0 === e.__webglInit && + ((e.__webglInit = !0), + n.addEventListener('dispose', G), + (e.__webglTexture = t.createTexture()), + a.memory.textures++); + } + function Z(e, i, r) { + let a = 3553; + i.isDataTexture2DArray && (a = 35866), + i.isDataTexture3D && (a = 32879), + Y(e, i), + n.activeTexture(33984 + r), + n.bindTexture(a, e.__webglTexture), + t.pixelStorei(37440, i.flipY), + t.pixelStorei(37441, i.premultiplyAlpha), + t.pixelStorei(3317, i.unpackAlignment), + t.pixelStorei(37443, 0); + const l = + (function (t) { + return ( + !o && + (t.wrapS !== u || + t.wrapT !== u || + (t.minFilter !== p && t.minFilter !== g)) + ); + })(i) && !1 === B(i.image), + c = N(i.image, l, !1, x), + h = B(c) || o, + d = s.convert(i.format); + let m, + f = s.convert(i.type), + v = O(i.internalFormat, d, f); + X(a, i, h); + const y = i.mipmaps; + if (i.isDepthTexture) + (v = 6402), + o + ? (v = + i.type === b + ? 36012 + : i.type === w + ? 33190 + : i.type === S + ? 35056 + : 33189) + : i.type === b && + console.error( + 'WebGLRenderer: Floating point depth texture requires WebGL2.' + ), + i.format === A && + 6402 === v && + i.type !== _ && + i.type !== w && + (console.warn( + 'THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture.' + ), + (i.type = _), + (f = s.convert(i.type))), + i.format === L && + 6402 === v && + ((v = 34041), + i.type !== S && + (console.warn( + 'THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture.' + ), + (i.type = S), + (f = s.convert(i.type)))), + n.texImage2D(3553, 0, v, c.width, c.height, 0, d, f, null); + else if (i.isDataTexture) + if (y.length > 0 && h) { + for (let t = 0, e = y.length; t < e; t++) + (m = y[t]), + n.texImage2D(3553, t, v, m.width, m.height, 0, d, f, m.data); + (i.generateMipmaps = !1), (e.__maxMipLevel = y.length - 1); + } else + n.texImage2D(3553, 0, v, c.width, c.height, 0, d, f, c.data), + (e.__maxMipLevel = 0); + else if (i.isCompressedTexture) { + for (let t = 0, e = y.length; t < e; t++) + (m = y[t]), + i.format !== E && i.format !== T + ? null !== d + ? n.compressedTexImage2D( + 3553, + t, + v, + m.width, + m.height, + 0, + m.data + ) + : console.warn( + 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()' + ) + : n.texImage2D(3553, t, v, m.width, m.height, 0, d, f, m.data); + e.__maxMipLevel = y.length - 1; + } else if (i.isDataTexture2DArray) + n.texImage3D(35866, 0, v, c.width, c.height, c.depth, 0, d, f, c.data), + (e.__maxMipLevel = 0); + else if (i.isDataTexture3D) + n.texImage3D(32879, 0, v, c.width, c.height, c.depth, 0, d, f, c.data), + (e.__maxMipLevel = 0); + else if (y.length > 0 && h) { + for (let t = 0, e = y.length; t < e; t++) + (m = y[t]), n.texImage2D(3553, t, v, d, f, m); + (i.generateMipmaps = !1), (e.__maxMipLevel = y.length - 1); + } else n.texImage2D(3553, 0, v, d, f, c), (e.__maxMipLevel = 0); + z(i, h) && F(a, i, c.width, c.height), + (e.__version = i.version), + i.onUpdate && i.onUpdate(i); + } + function J(e, r, a, o) { + const l = r.texture, + c = s.convert(l.format), + h = s.convert(l.type), + u = O(l.internalFormat, c, h); + 32879 === o || 35866 === o + ? n.texImage3D(o, 0, u, r.width, r.height, r.depth, 0, c, h, null) + : n.texImage2D(o, 0, u, r.width, r.height, 0, c, h, null), + n.bindFramebuffer(36160, e), + t.framebufferTexture2D(36160, a, o, i.get(l).__webglTexture, 0), + n.bindFramebuffer(36160, null); + } + function Q(e, n, i) { + if ((t.bindRenderbuffer(36161, e), n.depthBuffer && !n.stencilBuffer)) { + let r = 33189; + if (i) { + const e = n.depthTexture; + e && + e.isDepthTexture && + (e.type === b ? (r = 36012) : e.type === w && (r = 33190)); + const i = $(n); + t.renderbufferStorageMultisample(36161, i, r, n.width, n.height); + } else t.renderbufferStorage(36161, r, n.width, n.height); + t.framebufferRenderbuffer(36160, 36096, 36161, e); + } else if (n.depthBuffer && n.stencilBuffer) { + if (i) { + const e = $(n); + t.renderbufferStorageMultisample(36161, e, 35056, n.width, n.height); + } else t.renderbufferStorage(36161, 34041, n.width, n.height); + t.framebufferRenderbuffer(36160, 33306, 36161, e); + } else { + const e = n.texture, + r = s.convert(e.format), + a = s.convert(e.type), + o = O(e.internalFormat, r, a); + if (i) { + const e = $(n); + t.renderbufferStorageMultisample(36161, e, o, n.width, n.height); + } else t.renderbufferStorage(36161, o, n.width, n.height); + } + t.bindRenderbuffer(36161, null); + } + function K(e) { + const r = i.get(e), + s = !0 === e.isWebGLCubeRenderTarget; + if (e.depthTexture) { + if (s) + throw new Error( + 'target.depthTexture not supported in Cube render targets' + ); + !(function (e, r) { + if (r && r.isWebGLCubeRenderTarget) + throw new Error( + 'Depth Texture with cube render targets is not supported' + ); + if ( + (n.bindFramebuffer(36160, e), + !r.depthTexture || !r.depthTexture.isDepthTexture) + ) + throw new Error( + 'renderTarget.depthTexture must be an instance of THREE.DepthTexture' + ); + (i.get(r.depthTexture).__webglTexture && + r.depthTexture.image.width === r.width && + r.depthTexture.image.height === r.height) || + ((r.depthTexture.image.width = r.width), + (r.depthTexture.image.height = r.height), + (r.depthTexture.needsUpdate = !0)), + V(r.depthTexture, 0); + const s = i.get(r.depthTexture).__webglTexture; + if (r.depthTexture.format === A) + t.framebufferTexture2D(36160, 36096, 3553, s, 0); + else { + if (r.depthTexture.format !== L) + throw new Error('Unknown depthTexture format'); + t.framebufferTexture2D(36160, 33306, 3553, s, 0); + } + })(r.__webglFramebuffer, e); + } else if (s) { + r.__webglDepthbuffer = []; + for (let i = 0; i < 6; i++) + n.bindFramebuffer(36160, r.__webglFramebuffer[i]), + (r.__webglDepthbuffer[i] = t.createRenderbuffer()), + Q(r.__webglDepthbuffer[i], e, !1); + } else + n.bindFramebuffer(36160, r.__webglFramebuffer), + (r.__webglDepthbuffer = t.createRenderbuffer()), + Q(r.__webglDepthbuffer, e, !1); + n.bindFramebuffer(36160, null); + } + function $(t) { + return o && t.isWebGLMultisampleRenderTarget ? Math.min(R, t.samples) : 0; + } + let tt = !1, + et = !1; + (this.allocateTextureUnit = function () { + const t = k; + return ( + t >= l && + console.warn( + 'THREE.WebGLTextures: Trying to use ' + + t + + ' texture units while this GPU supports only ' + + l + ), + (k += 1), + t + ); + }), + (this.resetTextureUnits = function () { + k = 0; + }), + (this.setTexture2D = V), + (this.setTexture2DArray = function (t, e) { + const r = i.get(t); + t.version > 0 && r.__version !== t.version + ? Z(r, t, e) + : (n.activeTexture(33984 + e), + n.bindTexture(35866, r.__webglTexture)); + }), + (this.setTexture3D = function (t, e) { + const r = i.get(t); + t.version > 0 && r.__version !== t.version + ? Z(r, t, e) + : (n.activeTexture(33984 + e), + n.bindTexture(32879, r.__webglTexture)); + }), + (this.setTextureCube = W), + (this.setupRenderTarget = function (e) { + const r = e.texture, + l = i.get(e), + c = i.get(r); + e.addEventListener('dispose', U), + (c.__webglTexture = t.createTexture()), + (c.__version = r.version), + a.memory.textures++; + const h = !0 === e.isWebGLCubeRenderTarget, + u = !0 === e.isWebGLMultisampleRenderTarget, + d = r.isDataTexture3D || r.isDataTexture2DArray, + p = B(e) || o; + if ( + (!o || + r.format !== T || + (r.type !== b && r.type !== M) || + ((r.format = E), + console.warn( + 'THREE.WebGLRenderer: Rendering to textures with RGB format is not supported. Using RGBA format instead.' + )), + h) + ) { + l.__webglFramebuffer = []; + for (let e = 0; e < 6; e++) + l.__webglFramebuffer[e] = t.createFramebuffer(); + } else if (((l.__webglFramebuffer = t.createFramebuffer()), u)) + if (o) { + (l.__webglMultisampledFramebuffer = t.createFramebuffer()), + (l.__webglColorRenderbuffer = t.createRenderbuffer()), + t.bindRenderbuffer(36161, l.__webglColorRenderbuffer); + const i = s.convert(r.format), + a = s.convert(r.type), + o = O(r.internalFormat, i, a), + c = $(e); + t.renderbufferStorageMultisample(36161, c, o, e.width, e.height), + n.bindFramebuffer(36160, l.__webglMultisampledFramebuffer), + t.framebufferRenderbuffer( + 36160, + 36064, + 36161, + l.__webglColorRenderbuffer + ), + t.bindRenderbuffer(36161, null), + e.depthBuffer && + ((l.__webglDepthRenderbuffer = t.createRenderbuffer()), + Q(l.__webglDepthRenderbuffer, e, !0)), + n.bindFramebuffer(36160, null); + } else + console.warn( + 'THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.' + ); + if (h) { + n.bindTexture(34067, c.__webglTexture), X(34067, r, p); + for (let t = 0; t < 6; t++) + J(l.__webglFramebuffer[t], e, 36064, 34069 + t); + z(r, p) && F(34067, r, e.width, e.height), n.bindTexture(34067, null); + } else { + let t = 3553; + if (d) + if (o) { + t = r.isDataTexture3D ? 32879 : 35866; + } else + console.warn( + 'THREE.DataTexture3D and THREE.DataTexture2DArray only supported with WebGL2.' + ); + n.bindTexture(t, c.__webglTexture), + X(t, r, p), + J(l.__webglFramebuffer, e, 36064, t), + z(r, p) && F(3553, r, e.width, e.height), + n.bindTexture(3553, null); + } + e.depthBuffer && K(e); + }), + (this.updateRenderTargetMipmap = function (t) { + const e = t.texture; + if (z(e, B(t) || o)) { + const r = t.isWebGLCubeRenderTarget ? 34067 : 3553, + s = i.get(e).__webglTexture; + n.bindTexture(r, s), + F(r, e, t.width, t.height), + n.bindTexture(r, null); + } + }), + (this.updateMultisampleRenderTarget = function (e) { + if (e.isWebGLMultisampleRenderTarget) + if (o) { + const r = e.width, + s = e.height; + let a = 16384; + e.depthBuffer && (a |= 256), e.stencilBuffer && (a |= 1024); + const o = i.get(e); + n.bindFramebuffer(36008, o.__webglMultisampledFramebuffer), + n.bindFramebuffer(36009, o.__webglFramebuffer), + t.blitFramebuffer(0, 0, r, s, 0, 0, r, s, a, 9728), + n.bindFramebuffer(36008, null), + n.bindFramebuffer(36009, o.__webglMultisampledFramebuffer); + } else + console.warn( + 'THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.' + ); + }), + (this.safeSetTexture2D = function (t, e) { + t && + t.isWebGLRenderTarget && + (!1 === tt && + (console.warn( + "THREE.WebGLTextures.safeSetTexture2D: don't use render targets as textures. Use their .texture property instead." + ), + (tt = !0)), + (t = t.texture)), + V(t, e); + }), + (this.safeSetTextureCube = function (t, e) { + t && + t.isWebGLCubeRenderTarget && + (!1 === et && + (console.warn( + "THREE.WebGLTextures.safeSetTextureCube: don't use cube render targets as textures. Use their .texture property instead." + ), + (et = !0)), + (t = t.texture)), + W(t, e); + }); + } + function ms(t, e, n) { + const i = n.isWebGL2; + return { + convert: function (t) { + let n; + if (t === x) return 5121; + if (1017 === t) return 32819; + if (1018 === t) return 32820; + if (1019 === t) return 33635; + if (1010 === t) return 5120; + if (1011 === t) return 5122; + if (t === _) return 5123; + if (1013 === t) return 5124; + if (t === w) return 5125; + if (t === b) return 5126; + if (t === M) + return i + ? 5131 + : ((n = e.get('OES_texture_half_float')), + null !== n ? n.HALF_FLOAT_OES : null); + if (1021 === t) return 6406; + if (t === T) return 6407; + if (t === E) return 6408; + if (1024 === t) return 6409; + if (1025 === t) return 6410; + if (t === A) return 6402; + if (t === L) return 34041; + if (1028 === t) return 6403; + if (1029 === t) return 36244; + if (1030 === t) return 33319; + if (1031 === t) return 33320; + if (1032 === t) return 36248; + if (1033 === t) return 36249; + if (t === R || t === C || t === P || t === D) { + if (((n = e.get('WEBGL_compressed_texture_s3tc')), null === n)) + return null; + if (t === R) return n.COMPRESSED_RGB_S3TC_DXT1_EXT; + if (t === C) return n.COMPRESSED_RGBA_S3TC_DXT1_EXT; + if (t === P) return n.COMPRESSED_RGBA_S3TC_DXT3_EXT; + if (t === D) return n.COMPRESSED_RGBA_S3TC_DXT5_EXT; + } + if (t === I || t === N || t === B || t === z) { + if (((n = e.get('WEBGL_compressed_texture_pvrtc')), null === n)) + return null; + if (t === I) return n.COMPRESSED_RGB_PVRTC_4BPPV1_IMG; + if (t === N) return n.COMPRESSED_RGB_PVRTC_2BPPV1_IMG; + if (t === B) return n.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG; + if (t === z) return n.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG; + } + if (36196 === t) + return ( + (n = e.get('WEBGL_compressed_texture_etc1')), + null !== n ? n.COMPRESSED_RGB_ETC1_WEBGL : null + ); + if ( + (t === F || t === O) && + ((n = e.get('WEBGL_compressed_texture_etc')), null !== n) + ) { + if (t === F) return n.COMPRESSED_RGB8_ETC2; + if (t === O) return n.COMPRESSED_RGBA8_ETC2_EAC; + } + return 37808 === t || + 37809 === t || + 37810 === t || + 37811 === t || + 37812 === t || + 37813 === t || + 37814 === t || + 37815 === t || + 37816 === t || + 37817 === t || + 37818 === t || + 37819 === t || + 37820 === t || + 37821 === t || + 37840 === t || + 37841 === t || + 37842 === t || + 37843 === t || + 37844 === t || + 37845 === t || + 37846 === t || + 37847 === t || + 37848 === t || + 37849 === t || + 37850 === t || + 37851 === t || + 37852 === t || + 37853 === t + ? ((n = e.get('WEBGL_compressed_texture_astc')), + null !== n ? t : null) + : 36492 === t + ? ((n = e.get('EXT_texture_compression_bptc')), + null !== n ? t : null) + : t === S + ? i + ? 34042 + : ((n = e.get('WEBGL_depth_texture')), + null !== n ? n.UNSIGNED_INT_24_8_WEBGL : null) + : void 0; + }, + }; + } + class fs extends Kn { + constructor(t = []) { + super(), (this.cameras = t); + } + } + fs.prototype.isArrayCamera = !0; + class gs extends Ce { + constructor() { + super(), (this.type = 'Group'); + } + } + gs.prototype.isGroup = !0; + const vs = { type: 'move' }; + class ys { + constructor() { + (this._targetRay = null), (this._grip = null), (this._hand = null); + } + getHandSpace() { + return ( + null === this._hand && + ((this._hand = new gs()), + (this._hand.matrixAutoUpdate = !1), + (this._hand.visible = !1), + (this._hand.joints = {}), + (this._hand.inputState = { pinching: !1 })), + this._hand + ); + } + getTargetRaySpace() { + return ( + null === this._targetRay && + ((this._targetRay = new gs()), + (this._targetRay.matrixAutoUpdate = !1), + (this._targetRay.visible = !1), + (this._targetRay.hasLinearVelocity = !1), + (this._targetRay.linearVelocity = new Lt()), + (this._targetRay.hasAngularVelocity = !1), + (this._targetRay.angularVelocity = new Lt())), + this._targetRay + ); + } + getGripSpace() { + return ( + null === this._grip && + ((this._grip = new gs()), + (this._grip.matrixAutoUpdate = !1), + (this._grip.visible = !1), + (this._grip.hasLinearVelocity = !1), + (this._grip.linearVelocity = new Lt()), + (this._grip.hasAngularVelocity = !1), + (this._grip.angularVelocity = new Lt())), + this._grip + ); + } + dispatchEvent(t) { + return ( + null !== this._targetRay && this._targetRay.dispatchEvent(t), + null !== this._grip && this._grip.dispatchEvent(t), + null !== this._hand && this._hand.dispatchEvent(t), + this + ); + } + disconnect(t) { + return ( + this.dispatchEvent({ type: 'disconnected', data: t }), + null !== this._targetRay && (this._targetRay.visible = !1), + null !== this._grip && (this._grip.visible = !1), + null !== this._hand && (this._hand.visible = !1), + this + ); + } + update(t, e, n) { + let i = null, + r = null, + s = null; + const a = this._targetRay, + o = this._grip, + l = this._hand; + if (t && 'visible-blurred' !== e.session.visibilityState) + if ( + (null !== a && + ((i = e.getPose(t.targetRaySpace, n)), + null !== i && + (a.matrix.fromArray(i.transform.matrix), + a.matrix.decompose(a.position, a.rotation, a.scale), + i.linearVelocity + ? ((a.hasLinearVelocity = !0), + a.linearVelocity.copy(i.linearVelocity)) + : (a.hasLinearVelocity = !1), + i.angularVelocity + ? ((a.hasAngularVelocity = !0), + a.angularVelocity.copy(i.angularVelocity)) + : (a.hasAngularVelocity = !1), + this.dispatchEvent(vs))), + l && t.hand) + ) { + s = !0; + for (const i of t.hand.values()) { + const t = e.getJointPose(i, n); + if (void 0 === l.joints[i.jointName]) { + const t = new gs(); + (t.matrixAutoUpdate = !1), + (t.visible = !1), + (l.joints[i.jointName] = t), + l.add(t); + } + const r = l.joints[i.jointName]; + null !== t && + (r.matrix.fromArray(t.transform.matrix), + r.matrix.decompose(r.position, r.rotation, r.scale), + (r.jointRadius = t.radius)), + (r.visible = null !== t); + } + const i = l.joints['index-finger-tip'], + r = l.joints['thumb-tip'], + a = i.position.distanceTo(r.position), + o = 0.02, + c = 0.005; + l.inputState.pinching && a > o + c + ? ((l.inputState.pinching = !1), + this.dispatchEvent({ + type: 'pinchend', + handedness: t.handedness, + target: this, + })) + : !l.inputState.pinching && + a <= o - c && + ((l.inputState.pinching = !0), + this.dispatchEvent({ + type: 'pinchstart', + handedness: t.handedness, + target: this, + })); + } else + null !== o && + t.gripSpace && + ((r = e.getPose(t.gripSpace, n)), + null !== r && + (o.matrix.fromArray(r.transform.matrix), + o.matrix.decompose(o.position, o.rotation, o.scale), + r.linearVelocity + ? ((o.hasLinearVelocity = !0), + o.linearVelocity.copy(r.linearVelocity)) + : (o.hasLinearVelocity = !1), + r.angularVelocity + ? ((o.hasAngularVelocity = !0), + o.angularVelocity.copy(r.angularVelocity)) + : (o.hasAngularVelocity = !1))); + return ( + null !== a && (a.visible = null !== i), + null !== o && (o.visible = null !== r), + null !== l && (l.visible = null !== s), + this + ); + } + } + class xs extends rt { + constructor(t, e) { + super(); + const n = this, + i = t.state; + let r = null, + s = 1, + a = null, + o = 'local-floor', + l = null; + const c = [], + h = new Map(), + u = new Kn(); + u.layers.enable(1), (u.viewport = new St()); + const d = new Kn(); + d.layers.enable(2), (d.viewport = new St()); + const p = [u, d], + m = new fs(); + m.layers.enable(1), m.layers.enable(2); + let f = null, + g = null; + function v(t) { + const e = h.get(t.inputSource); + e && e.dispatchEvent({ type: t.type, data: t.inputSource }); + } + function y() { + h.forEach(function (t, e) { + t.disconnect(e); + }), + h.clear(), + (f = null), + (g = null), + i.bindXRFramebuffer(null), + t.setRenderTarget(t.getRenderTarget()), + S.stop(), + (n.isPresenting = !1), + n.dispatchEvent({ type: 'sessionend' }); + } + function x(t) { + const e = r.inputSources; + for (let t = 0; t < c.length; t++) h.set(e[t], c[t]); + for (let e = 0; e < t.removed.length; e++) { + const n = t.removed[e], + i = h.get(n); + i && + (i.dispatchEvent({ type: 'disconnected', data: n }), h.delete(n)); + } + for (let e = 0; e < t.added.length; e++) { + const n = t.added[e], + i = h.get(n); + i && i.dispatchEvent({ type: 'connected', data: n }); + } + } + (this.enabled = !1), + (this.isPresenting = !1), + (this.getController = function (t) { + let e = c[t]; + return ( + void 0 === e && ((e = new ys()), (c[t] = e)), e.getTargetRaySpace() + ); + }), + (this.getControllerGrip = function (t) { + let e = c[t]; + return void 0 === e && ((e = new ys()), (c[t] = e)), e.getGripSpace(); + }), + (this.getHand = function (t) { + let e = c[t]; + return void 0 === e && ((e = new ys()), (c[t] = e)), e.getHandSpace(); + }), + (this.setFramebufferScaleFactor = function (t) { + (s = t), + !0 === n.isPresenting && + console.warn( + 'THREE.WebXRManager: Cannot change framebuffer scale while presenting.' + ); + }), + (this.setReferenceSpaceType = function (t) { + (o = t), + !0 === n.isPresenting && + console.warn( + 'THREE.WebXRManager: Cannot change reference space type while presenting.' + ); + }), + (this.getReferenceSpace = function () { + return a; + }), + (this.getSession = function () { + return r; + }), + (this.setSession = async function (t) { + if (((r = t), null !== r)) { + r.addEventListener('select', v), + r.addEventListener('selectstart', v), + r.addEventListener('selectend', v), + r.addEventListener('squeeze', v), + r.addEventListener('squeezestart', v), + r.addEventListener('squeezeend', v), + r.addEventListener('end', y), + r.addEventListener('inputsourceschange', x); + const t = e.getContextAttributes(); + !0 !== t.xrCompatible && (await e.makeXRCompatible()); + const i = { + antialias: t.antialias, + alpha: t.alpha, + depth: t.depth, + stencil: t.stencil, + framebufferScaleFactor: s, + }, + l = new XRWebGLLayer(r, e, i); + r.updateRenderState({ baseLayer: l }), + (a = await r.requestReferenceSpace(o)), + S.setContext(r), + S.start(), + (n.isPresenting = !0), + n.dispatchEvent({ type: 'sessionstart' }); + } + }); + const _ = new Lt(), + w = new Lt(); + function b(t, e) { + null === e + ? t.matrixWorld.copy(t.matrix) + : t.matrixWorld.multiplyMatrices(e.matrixWorld, t.matrix), + t.matrixWorldInverse.copy(t.matrixWorld).invert(); + } + this.getCamera = function (t) { + (m.near = d.near = u.near = t.near), + (m.far = d.far = u.far = t.far), + (f === m.near && g === m.far) || + (r.updateRenderState({ depthNear: m.near, depthFar: m.far }), + (f = m.near), + (g = m.far)); + const e = t.parent, + n = m.cameras; + b(m, e); + for (let t = 0; t < n.length; t++) b(n[t], e); + t.matrixWorld.copy(m.matrixWorld), + t.matrix.copy(m.matrix), + t.matrix.decompose(t.position, t.quaternion, t.scale); + const i = t.children; + for (let t = 0, e = i.length; t < e; t++) i[t].updateMatrixWorld(!0); + return ( + 2 === n.length + ? (function (t, e, n) { + _.setFromMatrixPosition(e.matrixWorld), + w.setFromMatrixPosition(n.matrixWorld); + const i = _.distanceTo(w), + r = e.projectionMatrix.elements, + s = n.projectionMatrix.elements, + a = r[14] / (r[10] - 1), + o = r[14] / (r[10] + 1), + l = (r[9] + 1) / r[5], + c = (r[9] - 1) / r[5], + h = (r[8] - 1) / r[0], + u = (s[8] + 1) / s[0], + d = a * h, + p = a * u, + m = i / (-h + u), + f = m * -h; + e.matrixWorld.decompose(t.position, t.quaternion, t.scale), + t.translateX(f), + t.translateZ(m), + t.matrixWorld.compose(t.position, t.quaternion, t.scale), + t.matrixWorldInverse.copy(t.matrixWorld).invert(); + const g = a + m, + v = o + m, + y = d - f, + x = p + (i - f), + b = ((l * o) / v) * g, + M = ((c * o) / v) * g; + t.projectionMatrix.makePerspective(y, x, b, M, g, v); + })(m, u, d) + : m.projectionMatrix.copy(u.projectionMatrix), + m + ); + }; + let M = null; + const S = new oi(); + S.setAnimationLoop(function (t, e) { + if (((l = e.getViewerPose(a)), null !== l)) { + const t = l.views, + e = r.renderState.baseLayer; + i.bindXRFramebuffer(e.framebuffer); + let n = !1; + t.length !== m.cameras.length && ((m.cameras.length = 0), (n = !0)); + for (let i = 0; i < t.length; i++) { + const r = t[i], + s = e.getViewport(r), + a = p[i]; + a.matrix.fromArray(r.transform.matrix), + a.projectionMatrix.fromArray(r.projectionMatrix), + a.viewport.set(s.x, s.y, s.width, s.height), + 0 === i && m.matrix.copy(a.matrix), + !0 === n && m.cameras.push(a); + } + } + const n = r.inputSources; + for (let t = 0; t < c.length; t++) { + const i = c[t], + r = n[t]; + i.update(r, e, a); + } + M && M(t, e); + }), + (this.setAnimationLoop = function (t) { + M = t; + }), + (this.dispose = function () {}); + } + } + function _s(t) { + function e(e, n) { + (e.opacity.value = n.opacity), + n.color && e.diffuse.value.copy(n.color), + n.emissive && + e.emissive.value.copy(n.emissive).multiplyScalar(n.emissiveIntensity), + n.map && (e.map.value = n.map), + n.alphaMap && (e.alphaMap.value = n.alphaMap), + n.specularMap && (e.specularMap.value = n.specularMap); + const i = t.get(n).envMap; + if (i) { + (e.envMap.value = i), + (e.flipEnvMap.value = i.isCubeTexture && i._needsFlipEnvMap ? -1 : 1), + (e.reflectivity.value = n.reflectivity), + (e.refractionRatio.value = n.refractionRatio); + const r = t.get(i).__maxMipLevel; + void 0 !== r && (e.maxMipLevel.value = r); + } + let r, s; + n.lightMap && + ((e.lightMap.value = n.lightMap), + (e.lightMapIntensity.value = n.lightMapIntensity)), + n.aoMap && + ((e.aoMap.value = n.aoMap), + (e.aoMapIntensity.value = n.aoMapIntensity)), + n.map + ? (r = n.map) + : n.specularMap + ? (r = n.specularMap) + : n.displacementMap + ? (r = n.displacementMap) + : n.normalMap + ? (r = n.normalMap) + : n.bumpMap + ? (r = n.bumpMap) + : n.roughnessMap + ? (r = n.roughnessMap) + : n.metalnessMap + ? (r = n.metalnessMap) + : n.alphaMap + ? (r = n.alphaMap) + : n.emissiveMap + ? (r = n.emissiveMap) + : n.clearcoatMap + ? (r = n.clearcoatMap) + : n.clearcoatNormalMap + ? (r = n.clearcoatNormalMap) + : n.clearcoatRoughnessMap && + (r = n.clearcoatRoughnessMap), + void 0 !== r && + (r.isWebGLRenderTarget && (r = r.texture), + !0 === r.matrixAutoUpdate && r.updateMatrix(), + e.uvTransform.value.copy(r.matrix)), + n.aoMap ? (s = n.aoMap) : n.lightMap && (s = n.lightMap), + void 0 !== s && + (s.isWebGLRenderTarget && (s = s.texture), + !0 === s.matrixAutoUpdate && s.updateMatrix(), + e.uv2Transform.value.copy(s.matrix)); + } + function n(e, n) { + (e.roughness.value = n.roughness), + (e.metalness.value = n.metalness), + n.roughnessMap && (e.roughnessMap.value = n.roughnessMap), + n.metalnessMap && (e.metalnessMap.value = n.metalnessMap), + n.emissiveMap && (e.emissiveMap.value = n.emissiveMap), + n.bumpMap && + ((e.bumpMap.value = n.bumpMap), + (e.bumpScale.value = n.bumpScale), + 1 === n.side && (e.bumpScale.value *= -1)), + n.normalMap && + ((e.normalMap.value = n.normalMap), + e.normalScale.value.copy(n.normalScale), + 1 === n.side && e.normalScale.value.negate()), + n.displacementMap && + ((e.displacementMap.value = n.displacementMap), + (e.displacementScale.value = n.displacementScale), + (e.displacementBias.value = n.displacementBias)); + t.get(n).envMap && (e.envMapIntensity.value = n.envMapIntensity); + } + return { + refreshFogUniforms: function (t, e) { + t.fogColor.value.copy(e.color), + e.isFog + ? ((t.fogNear.value = e.near), (t.fogFar.value = e.far)) + : e.isFogExp2 && (t.fogDensity.value = e.density); + }, + refreshMaterialUniforms: function (t, i, r, s) { + i.isMeshBasicMaterial + ? e(t, i) + : i.isMeshLambertMaterial + ? (e(t, i), + (function (t, e) { + e.emissiveMap && (t.emissiveMap.value = e.emissiveMap); + })(t, i)) + : i.isMeshToonMaterial + ? (e(t, i), + (function (t, e) { + e.gradientMap && (t.gradientMap.value = e.gradientMap); + e.emissiveMap && (t.emissiveMap.value = e.emissiveMap); + e.bumpMap && + ((t.bumpMap.value = e.bumpMap), + (t.bumpScale.value = e.bumpScale), + 1 === e.side && (t.bumpScale.value *= -1)); + e.normalMap && + ((t.normalMap.value = e.normalMap), + t.normalScale.value.copy(e.normalScale), + 1 === e.side && t.normalScale.value.negate()); + e.displacementMap && + ((t.displacementMap.value = e.displacementMap), + (t.displacementScale.value = e.displacementScale), + (t.displacementBias.value = e.displacementBias)); + })(t, i)) + : i.isMeshPhongMaterial + ? (e(t, i), + (function (t, e) { + t.specular.value.copy(e.specular), + (t.shininess.value = Math.max(e.shininess, 1e-4)), + e.emissiveMap && (t.emissiveMap.value = e.emissiveMap); + e.bumpMap && + ((t.bumpMap.value = e.bumpMap), + (t.bumpScale.value = e.bumpScale), + 1 === e.side && (t.bumpScale.value *= -1)); + e.normalMap && + ((t.normalMap.value = e.normalMap), + t.normalScale.value.copy(e.normalScale), + 1 === e.side && t.normalScale.value.negate()); + e.displacementMap && + ((t.displacementMap.value = e.displacementMap), + (t.displacementScale.value = e.displacementScale), + (t.displacementBias.value = e.displacementBias)); + })(t, i)) + : i.isMeshStandardMaterial + ? (e(t, i), + i.isMeshPhysicalMaterial + ? (function (t, e) { + n(t, e), + (t.reflectivity.value = e.reflectivity), + (t.clearcoat.value = e.clearcoat), + (t.clearcoatRoughness.value = e.clearcoatRoughness), + e.sheen && t.sheen.value.copy(e.sheen); + e.clearcoatMap && + (t.clearcoatMap.value = e.clearcoatMap); + e.clearcoatRoughnessMap && + (t.clearcoatRoughnessMap.value = + e.clearcoatRoughnessMap); + e.clearcoatNormalMap && + (t.clearcoatNormalScale.value.copy( + e.clearcoatNormalScale + ), + (t.clearcoatNormalMap.value = e.clearcoatNormalMap), + 1 === e.side && + t.clearcoatNormalScale.value.negate()); + (t.transmission.value = e.transmission), + e.transmissionMap && + (t.transmissionMap.value = e.transmissionMap); + })(t, i) + : n(t, i)) + : i.isMeshMatcapMaterial + ? (e(t, i), + (function (t, e) { + e.matcap && (t.matcap.value = e.matcap); + e.bumpMap && + ((t.bumpMap.value = e.bumpMap), + (t.bumpScale.value = e.bumpScale), + 1 === e.side && (t.bumpScale.value *= -1)); + e.normalMap && + ((t.normalMap.value = e.normalMap), + t.normalScale.value.copy(e.normalScale), + 1 === e.side && t.normalScale.value.negate()); + e.displacementMap && + ((t.displacementMap.value = e.displacementMap), + (t.displacementScale.value = e.displacementScale), + (t.displacementBias.value = e.displacementBias)); + })(t, i)) + : i.isMeshDepthMaterial + ? (e(t, i), + (function (t, e) { + e.displacementMap && + ((t.displacementMap.value = e.displacementMap), + (t.displacementScale.value = e.displacementScale), + (t.displacementBias.value = e.displacementBias)); + })(t, i)) + : i.isMeshDistanceMaterial + ? (e(t, i), + (function (t, e) { + e.displacementMap && + ((t.displacementMap.value = e.displacementMap), + (t.displacementScale.value = e.displacementScale), + (t.displacementBias.value = e.displacementBias)); + t.referencePosition.value.copy(e.referencePosition), + (t.nearDistance.value = e.nearDistance), + (t.farDistance.value = e.farDistance); + })(t, i)) + : i.isMeshNormalMaterial + ? (e(t, i), + (function (t, e) { + e.bumpMap && + ((t.bumpMap.value = e.bumpMap), + (t.bumpScale.value = e.bumpScale), + 1 === e.side && (t.bumpScale.value *= -1)); + e.normalMap && + ((t.normalMap.value = e.normalMap), + t.normalScale.value.copy(e.normalScale), + 1 === e.side && t.normalScale.value.negate()); + e.displacementMap && + ((t.displacementMap.value = e.displacementMap), + (t.displacementScale.value = + e.displacementScale), + (t.displacementBias.value = + e.displacementBias)); + })(t, i)) + : i.isLineBasicMaterial + ? ((function (t, e) { + t.diffuse.value.copy(e.color), + (t.opacity.value = e.opacity); + })(t, i), + i.isLineDashedMaterial && + (function (t, e) { + (t.dashSize.value = e.dashSize), + (t.totalSize.value = + e.dashSize + e.gapSize), + (t.scale.value = e.scale); + })(t, i)) + : i.isPointsMaterial + ? (function (t, e, n, i) { + t.diffuse.value.copy(e.color), + (t.opacity.value = e.opacity), + (t.size.value = e.size * n), + (t.scale.value = 0.5 * i), + e.map && (t.map.value = e.map); + e.alphaMap && (t.alphaMap.value = e.alphaMap); + let r; + e.map + ? (r = e.map) + : e.alphaMap && (r = e.alphaMap); + void 0 !== r && + (!0 === r.matrixAutoUpdate && + r.updateMatrix(), + t.uvTransform.value.copy(r.matrix)); + })(t, i, r, s) + : i.isSpriteMaterial + ? (function (t, e) { + t.diffuse.value.copy(e.color), + (t.opacity.value = e.opacity), + (t.rotation.value = e.rotation), + e.map && (t.map.value = e.map); + e.alphaMap && + (t.alphaMap.value = e.alphaMap); + let n; + e.map + ? (n = e.map) + : e.alphaMap && (n = e.alphaMap); + void 0 !== n && + (!0 === n.matrixAutoUpdate && + n.updateMatrix(), + t.uvTransform.value.copy(n.matrix)); + })(t, i) + : i.isShadowMaterial + ? (t.color.value.copy(i.color), + (t.opacity.value = i.opacity)) + : i.isShaderMaterial && + (i.uniformsNeedUpdate = !1); + }, + }; + } + function ws(t) { + const e = + void 0 !== (t = t || {}).canvas + ? t.canvas + : (function () { + const t = document.createElementNS( + 'http://www.w3.org/1999/xhtml', + 'canvas' + ); + return (t.style.display = 'block'), t; + })(), + n = void 0 !== t.context ? t.context : null, + i = void 0 !== t.alpha && t.alpha, + r = void 0 === t.depth || t.depth, + s = void 0 === t.stencil || t.stencil, + a = void 0 !== t.antialias && t.antialias, + o = void 0 === t.premultipliedAlpha || t.premultipliedAlpha, + l = void 0 !== t.preserveDrawingBuffer && t.preserveDrawingBuffer, + c = void 0 !== t.powerPreference ? t.powerPreference : 'default', + h = + void 0 !== t.failIfMajorPerformanceCaveat && + t.failIfMajorPerformanceCaveat; + let u = null, + d = null; + const p = [], + m = []; + (this.domElement = e), + (this.debug = { checkShaderErrors: !0 }), + (this.autoClear = !0), + (this.autoClearColor = !0), + (this.autoClearDepth = !0), + (this.autoClearStencil = !0), + (this.sortObjects = !0), + (this.clippingPlanes = []), + (this.localClippingEnabled = !1), + (this.gammaFactor = 2), + (this.outputEncoding = X), + (this.physicallyCorrectLights = !1), + (this.toneMapping = 0), + (this.toneMappingExposure = 1); + const f = this; + let g = !1, + v = 0, + y = 0, + _ = null, + w = -1, + S = null; + const T = new St(), + A = new St(); + let L = null, + R = e.width, + C = e.height, + P = 1, + D = null, + I = null; + const N = new St(0, 0, R, C), + B = new St(0, 0, R, C); + let z = !1; + const F = new ai(); + let O = !1, + H = !1; + const G = new se(), + U = new Lt(), + k = { + background: null, + fog: null, + environment: null, + overrideMaterial: null, + isScene: !0, + }; + function V() { + return null === _ ? P : 1; + } + let W, + j, + q, + Y, + Z, + J, + Q, + K, + $, + tt, + et, + nt, + it, + rt, + st, + at, + ot, + lt, + ct, + ht, + ut, + dt, + pt = n; + function ft(t, n) { + for (let i = 0; i < t.length; i++) { + const r = t[i], + s = e.getContext(r, n); + if (null !== s) return s; + } + return null; + } + try { + const t = { + alpha: i, + depth: r, + stencil: s, + antialias: a, + premultipliedAlpha: o, + preserveDrawingBuffer: l, + powerPreference: c, + failIfMajorPerformanceCaveat: h, + }; + if ( + (e.addEventListener('webglcontextlost', xt, !1), + e.addEventListener('webglcontextrestored', _t, !1), + null === pt) + ) { + const e = ['webgl2', 'webgl', 'experimental-webgl']; + if ( + (!0 === f.isWebGL1Renderer && e.shift(), (pt = ft(e, t)), null === pt) + ) + throw ft(e) + ? new Error( + 'Error creating WebGL context with your selected attributes.' + ) + : new Error('Error creating WebGL context.'); + } + void 0 === pt.getShaderPrecisionFormat && + (pt.getShaderPrecisionFormat = function () { + return { rangeMin: 1, rangeMax: 1, precision: 1 }; + }); + } catch (t) { + throw (console.error('THREE.WebGLRenderer: ' + t.message), t); + } + function gt() { + (W = new xi(pt)), + (j = new gi(pt, W, t)), + W.init(j), + (ut = new ms(pt, W, j)), + (q = new ds(pt, W, j)), + (Y = new bi(pt)), + (Z = new Kr()), + (J = new ps(pt, W, q, Z, j, ut, Y)), + (Q = new yi(f)), + (K = new li(pt, j)), + (dt = new mi(pt, W, K, j)), + ($ = new _i(pt, K, Y, dt)), + (tt = new Ei(pt, $, K, Y)), + (lt = new Ti(pt)), + (st = new vi(Z)), + (et = new Qr(f, Q, W, j, dt, st)), + (nt = new _s(Z)), + (it = new ns(Z)), + (rt = new ls(W, j)), + (ot = new pi(f, Q, q, tt, o)), + (at = new us(f, tt, j)), + (ct = new fi(pt, W, Y, j)), + (ht = new wi(pt, W, Y, j)), + (Y.programs = et.programs), + (f.capabilities = j), + (f.extensions = W), + (f.properties = Z), + (f.renderLists = it), + (f.shadowMap = at), + (f.state = q), + (f.info = Y); + } + gt(); + const yt = new xs(f, pt); + function xt(t) { + t.preventDefault(), + console.log('THREE.WebGLRenderer: Context Lost.'), + (g = !0); + } + function _t() { + console.log('THREE.WebGLRenderer: Context Restored.'), (g = !1); + const t = Y.autoReset, + e = at.enabled, + n = at.autoUpdate, + i = at.needsUpdate, + r = at.type; + gt(), + (Y.autoReset = t), + (at.enabled = e), + (at.autoUpdate = n), + (at.needsUpdate = i), + (at.type = r); + } + function wt(t) { + const e = t.target; + e.removeEventListener('dispose', wt), + (function (t) { + (function (t) { + const e = Z.get(t).programs; + void 0 !== e && + e.forEach(function (t) { + et.releaseProgram(t); + }); + })(t), + Z.remove(t); + })(e); + } + (this.xr = yt), + (this.getContext = function () { + return pt; + }), + (this.getContextAttributes = function () { + return pt.getContextAttributes(); + }), + (this.forceContextLoss = function () { + const t = W.get('WEBGL_lose_context'); + t && t.loseContext(); + }), + (this.forceContextRestore = function () { + const t = W.get('WEBGL_lose_context'); + t && t.restoreContext(); + }), + (this.getPixelRatio = function () { + return P; + }), + (this.setPixelRatio = function (t) { + void 0 !== t && ((P = t), this.setSize(R, C, !1)); + }), + (this.getSize = function (t) { + return ( + void 0 === t && + (console.warn( + 'WebGLRenderer: .getsize() now requires a Vector2 as an argument' + ), + (t = new vt())), + t.set(R, C) + ); + }), + (this.setSize = function (t, n, i) { + yt.isPresenting + ? console.warn( + "THREE.WebGLRenderer: Can't change size while VR device is presenting." + ) + : ((R = t), + (C = n), + (e.width = Math.floor(t * P)), + (e.height = Math.floor(n * P)), + !1 !== i && + ((e.style.width = t + 'px'), (e.style.height = n + 'px')), + this.setViewport(0, 0, t, n)); + }), + (this.getDrawingBufferSize = function (t) { + return ( + void 0 === t && + (console.warn( + 'WebGLRenderer: .getdrawingBufferSize() now requires a Vector2 as an argument' + ), + (t = new vt())), + t.set(R * P, C * P).floor() + ); + }), + (this.setDrawingBufferSize = function (t, n, i) { + (R = t), + (C = n), + (P = i), + (e.width = Math.floor(t * i)), + (e.height = Math.floor(n * i)), + this.setViewport(0, 0, t, n); + }), + (this.getCurrentViewport = function (t) { + return ( + void 0 === t && + (console.warn( + 'WebGLRenderer: .getCurrentViewport() now requires a Vector4 as an argument' + ), + (t = new St())), + t.copy(T) + ); + }), + (this.getViewport = function (t) { + return t.copy(N); + }), + (this.setViewport = function (t, e, n, i) { + t.isVector4 ? N.set(t.x, t.y, t.z, t.w) : N.set(t, e, n, i), + q.viewport(T.copy(N).multiplyScalar(P).floor()); + }), + (this.getScissor = function (t) { + return t.copy(B); + }), + (this.setScissor = function (t, e, n, i) { + t.isVector4 ? B.set(t.x, t.y, t.z, t.w) : B.set(t, e, n, i), + q.scissor(A.copy(B).multiplyScalar(P).floor()); + }), + (this.getScissorTest = function () { + return z; + }), + (this.setScissorTest = function (t) { + q.setScissorTest((z = t)); + }), + (this.setOpaqueSort = function (t) { + D = t; + }), + (this.setTransparentSort = function (t) { + I = t; + }), + (this.getClearColor = function (t) { + return ( + void 0 === t && + (console.warn( + 'WebGLRenderer: .getClearColor() now requires a Color as an argument' + ), + (t = new tn())), + t.copy(ot.getClearColor()) + ); + }), + (this.setClearColor = function () { + ot.setClearColor.apply(ot, arguments); + }), + (this.getClearAlpha = function () { + return ot.getClearAlpha(); + }), + (this.setClearAlpha = function () { + ot.setClearAlpha.apply(ot, arguments); + }), + (this.clear = function (t, e, n) { + let i = 0; + (void 0 === t || t) && (i |= 16384), + (void 0 === e || e) && (i |= 256), + (void 0 === n || n) && (i |= 1024), + pt.clear(i); + }), + (this.clearColor = function () { + this.clear(!0, !1, !1); + }), + (this.clearDepth = function () { + this.clear(!1, !0, !1); + }), + (this.clearStencil = function () { + this.clear(!1, !1, !0); + }), + (this.dispose = function () { + e.removeEventListener('webglcontextlost', xt, !1), + e.removeEventListener('webglcontextrestored', _t, !1), + it.dispose(), + rt.dispose(), + Z.dispose(), + Q.dispose(), + tt.dispose(), + dt.dispose(), + yt.dispose(), + yt.removeEventListener('sessionstart', Mt), + yt.removeEventListener('sessionend', Tt), + Et.stop(); + }), + (this.renderBufferImmediate = function (t, e) { + dt.initAttributes(); + const n = Z.get(t); + t.hasPositions && !n.position && (n.position = pt.createBuffer()), + t.hasNormals && !n.normal && (n.normal = pt.createBuffer()), + t.hasUvs && !n.uv && (n.uv = pt.createBuffer()), + t.hasColors && !n.color && (n.color = pt.createBuffer()); + const i = e.getAttributes(); + t.hasPositions && + (pt.bindBuffer(34962, n.position), + pt.bufferData(34962, t.positionArray, 35048), + dt.enableAttribute(i.position), + pt.vertexAttribPointer(i.position, 3, 5126, !1, 0, 0)), + t.hasNormals && + (pt.bindBuffer(34962, n.normal), + pt.bufferData(34962, t.normalArray, 35048), + dt.enableAttribute(i.normal), + pt.vertexAttribPointer(i.normal, 3, 5126, !1, 0, 0)), + t.hasUvs && + (pt.bindBuffer(34962, n.uv), + pt.bufferData(34962, t.uvArray, 35048), + dt.enableAttribute(i.uv), + pt.vertexAttribPointer(i.uv, 2, 5126, !1, 0, 0)), + t.hasColors && + (pt.bindBuffer(34962, n.color), + pt.bufferData(34962, t.colorArray, 35048), + dt.enableAttribute(i.color), + pt.vertexAttribPointer(i.color, 3, 5126, !1, 0, 0)), + dt.disableUnusedAttributes(), + pt.drawArrays(4, 0, t.count), + (t.count = 0); + }), + (this.renderBufferDirect = function (t, e, n, i, r, s) { + null === e && (e = k); + const a = r.isMesh && r.matrixWorld.determinant() < 0, + o = It(t, e, i, r); + q.setMaterial(i, a); + let l = n.index; + const c = n.attributes.position; + if (null === l) { + if (void 0 === c || 0 === c.count) return; + } else if (0 === l.count) return; + let h, + u = 1; + !0 === i.wireframe && ((l = $.getWireframeAttribute(n)), (u = 2)), + (i.morphTargets || i.morphNormals) && lt.update(r, n, i, o), + dt.setup(r, i, o, n, l); + let d = ct; + null !== l && ((h = K.get(l)), (d = ht), d.setIndex(h)); + const p = null !== l ? l.count : c.count, + m = n.drawRange.start * u, + f = n.drawRange.count * u, + g = null !== s ? s.start * u : 0, + v = null !== s ? s.count * u : 1 / 0, + y = Math.max(m, g), + x = Math.min(p, m + f, g + v) - 1, + _ = Math.max(0, x - y + 1); + if (0 !== _) { + if (r.isMesh) + !0 === i.wireframe + ? (q.setLineWidth(i.wireframeLinewidth * V()), d.setMode(1)) + : d.setMode(4); + else if (r.isLine) { + let t = i.linewidth; + void 0 === t && (t = 1), + q.setLineWidth(t * V()), + r.isLineSegments + ? d.setMode(1) + : r.isLineLoop + ? d.setMode(2) + : d.setMode(3); + } else r.isPoints ? d.setMode(0) : r.isSprite && d.setMode(4); + if (r.isInstancedMesh) d.renderInstances(y, _, r.count); + else if (n.isInstancedBufferGeometry) { + const t = Math.min(n.instanceCount, n._maxInstanceCount); + d.renderInstances(y, _, t); + } else d.render(y, _); + } + }), + (this.compile = function (t, e) { + (d = rt.get(t)), + d.init(), + t.traverseVisible(function (t) { + t.isLight && + t.layers.test(e.layers) && + (d.pushLight(t), t.castShadow && d.pushShadow(t)); + }), + d.setupLights(), + t.traverse(function (e) { + const n = e.material; + if (n) + if (Array.isArray(n)) + for (let i = 0; i < n.length; i++) { + Pt(n[i], t, e); + } + else Pt(n, t, e); + }); + }); + let bt = null; + function Mt() { + Et.stop(); + } + function Tt() { + Et.start(); + } + const Et = new oi(); + function At(t, e, n, i) { + if (!1 === t.visible) return; + if (t.layers.test(e.layers)) + if (t.isGroup) n = t.renderOrder; + else if (t.isLOD) !0 === t.autoUpdate && t.update(e); + else if (t.isLight) d.pushLight(t), t.castShadow && d.pushShadow(t); + else if (t.isSprite) { + if (!t.frustumCulled || F.intersectsSprite(t)) { + i && U.setFromMatrixPosition(t.matrixWorld).applyMatrix4(G); + const e = tt.update(t), + r = t.material; + r.visible && u.push(t, e, r, n, U.z, null); + } + } else if (t.isImmediateRenderObject) + i && U.setFromMatrixPosition(t.matrixWorld).applyMatrix4(G), + u.push(t, null, t.material, n, U.z, null); + else if ( + (t.isMesh || t.isLine || t.isPoints) && + (t.isSkinnedMesh && + t.skeleton.frame !== Y.render.frame && + (t.skeleton.update(), (t.skeleton.frame = Y.render.frame)), + !t.frustumCulled || F.intersectsObject(t)) + ) { + i && U.setFromMatrixPosition(t.matrixWorld).applyMatrix4(G); + const e = tt.update(t), + r = t.material; + if (Array.isArray(r)) { + const i = e.groups; + for (let s = 0, a = i.length; s < a; s++) { + const a = i[s], + o = r[a.materialIndex]; + o && o.visible && u.push(t, e, o, n, U.z, a); + } + } else r.visible && u.push(t, e, r, n, U.z, null); + } + const r = t.children; + for (let t = 0, s = r.length; t < s; t++) At(r[t], e, n, i); + } + function Rt(t, e, n) { + const i = !0 === e.isScene ? e.overrideMaterial : null; + for (let r = 0, s = t.length; r < s; r++) { + const s = t[r], + a = s.object, + o = s.geometry, + l = null === i ? s.material : i, + c = s.group; + if (n.isArrayCamera) { + const t = n.cameras; + for (let n = 0, i = t.length; n < i; n++) { + const i = t[n]; + a.layers.test(i.layers) && + (q.viewport(T.copy(i.viewport)), + d.setupLightsView(i), + Ct(a, e, i, o, l, c)); + } + } else Ct(a, e, n, o, l, c); + } + } + function Ct(t, e, n, i, r, s) { + if ( + (t.onBeforeRender(f, e, n, i, r, s), + t.modelViewMatrix.multiplyMatrices(n.matrixWorldInverse, t.matrixWorld), + t.normalMatrix.getNormalMatrix(t.modelViewMatrix), + t.isImmediateRenderObject) + ) { + const i = It(n, e, r, t); + q.setMaterial(r), + dt.reset(), + (function (t, e) { + t.render(function (t) { + f.renderBufferImmediate(t, e); + }); + })(t, i); + } else f.renderBufferDirect(n, e, i, r, t, s); + t.onAfterRender(f, e, n, i, r, s); + } + function Pt(t, e, n) { + !0 !== e.isScene && (e = k); + const i = Z.get(t), + r = d.state.lights, + s = d.state.shadowsArray, + a = r.state.version, + o = et.getParameters(t, r.state, s, e, n), + l = et.getProgramCacheKey(o); + let c = i.programs; + (i.environment = t.isMeshStandardMaterial ? e.environment : null), + (i.fog = e.fog), + (i.envMap = Q.get(t.envMap || i.environment)), + void 0 === c && + (t.addEventListener('dispose', wt), + (c = new Map()), + (i.programs = c)); + let h = c.get(l); + if (void 0 !== h) { + if (i.currentProgram === h && i.lightsStateVersion === a) + return Dt(t, o), h; + } else + (o.uniforms = et.getUniforms(t)), + t.onBuild(o, f), + t.onBeforeCompile(o, f), + (h = et.acquireProgram(o, l)), + c.set(l, h), + (i.uniforms = o.uniforms); + const u = i.uniforms; + ((t.isShaderMaterial || t.isRawShaderMaterial) && !0 !== t.clipping) || + (u.clippingPlanes = st.uniform), + Dt(t, o), + (i.needsLights = (function (t) { + return ( + t.isMeshLambertMaterial || + t.isMeshToonMaterial || + t.isMeshPhongMaterial || + t.isMeshStandardMaterial || + t.isShadowMaterial || + (t.isShaderMaterial && !0 === t.lights) + ); + })(t)), + (i.lightsStateVersion = a), + i.needsLights && + ((u.ambientLightColor.value = r.state.ambient), + (u.lightProbe.value = r.state.probe), + (u.directionalLights.value = r.state.directional), + (u.directionalLightShadows.value = r.state.directionalShadow), + (u.spotLights.value = r.state.spot), + (u.spotLightShadows.value = r.state.spotShadow), + (u.rectAreaLights.value = r.state.rectArea), + (u.ltc_1.value = r.state.rectAreaLTC1), + (u.ltc_2.value = r.state.rectAreaLTC2), + (u.pointLights.value = r.state.point), + (u.pointLightShadows.value = r.state.pointShadow), + (u.hemisphereLights.value = r.state.hemi), + (u.directionalShadowMap.value = r.state.directionalShadowMap), + (u.directionalShadowMatrix.value = r.state.directionalShadowMatrix), + (u.spotShadowMap.value = r.state.spotShadowMap), + (u.spotShadowMatrix.value = r.state.spotShadowMatrix), + (u.pointShadowMap.value = r.state.pointShadowMap), + (u.pointShadowMatrix.value = r.state.pointShadowMatrix)); + const p = h.getUniforms(), + m = Cr.seqWithValue(p.seq, u); + return (i.currentProgram = h), (i.uniformsList = m), h; + } + function Dt(t, e) { + const n = Z.get(t); + (n.outputEncoding = e.outputEncoding), + (n.instancing = e.instancing), + (n.numClippingPlanes = e.numClippingPlanes), + (n.numIntersection = e.numClipIntersection), + (n.vertexAlphas = e.vertexAlphas); + } + function It(t, e, n, i) { + !0 !== e.isScene && (e = k), J.resetTextureUnits(); + const r = e.fog, + s = n.isMeshStandardMaterial ? e.environment : null, + a = null === _ ? f.outputEncoding : _.texture.encoding, + o = Q.get(n.envMap || s), + l = + !0 === n.vertexColors && + i.geometry && + i.geometry.attributes.color && + 4 === i.geometry.attributes.color.itemSize, + c = Z.get(n), + h = d.state.lights; + if (!0 === O && (!0 === H || t !== S)) { + const e = t === S && n.id === w; + st.setState(n, t, e); + } + let u = !1; + n.version === c.__version + ? (c.needsLights && c.lightsStateVersion !== h.state.version) || + c.outputEncoding !== a || + (i.isInstancedMesh && !1 === c.instancing) + ? (u = !0) + : i.isInstancedMesh || !0 !== c.instancing + ? c.envMap !== o || (n.fog && c.fog !== r) + ? (u = !0) + : void 0 === c.numClippingPlanes || + (c.numClippingPlanes === st.numPlanes && + c.numIntersection === st.numIntersection) + ? c.vertexAlphas !== l && (u = !0) + : (u = !0) + : (u = !0) + : ((u = !0), (c.__version = n.version)); + let p = c.currentProgram; + !0 === u && (p = Pt(n, e, i)); + let m = !1, + g = !1, + v = !1; + const y = p.getUniforms(), + x = c.uniforms; + if ( + (q.useProgram(p.program) && ((m = !0), (g = !0), (v = !0)), + n.id !== w && ((w = n.id), (g = !0)), + m || S !== t) + ) { + if ( + (y.setValue(pt, 'projectionMatrix', t.projectionMatrix), + j.logarithmicDepthBuffer && + y.setValue( + pt, + 'logDepthBufFC', + 2 / (Math.log(t.far + 1) / Math.LN2) + ), + S !== t && ((S = t), (g = !0), (v = !0)), + n.isShaderMaterial || + n.isMeshPhongMaterial || + n.isMeshToonMaterial || + n.isMeshStandardMaterial || + n.envMap) + ) { + const e = y.map.cameraPosition; + void 0 !== e && + e.setValue(pt, U.setFromMatrixPosition(t.matrixWorld)); + } + (n.isMeshPhongMaterial || + n.isMeshToonMaterial || + n.isMeshLambertMaterial || + n.isMeshBasicMaterial || + n.isMeshStandardMaterial || + n.isShaderMaterial) && + y.setValue(pt, 'isOrthographic', !0 === t.isOrthographicCamera), + (n.isMeshPhongMaterial || + n.isMeshToonMaterial || + n.isMeshLambertMaterial || + n.isMeshBasicMaterial || + n.isMeshStandardMaterial || + n.isShaderMaterial || + n.isShadowMaterial || + n.skinning) && + y.setValue(pt, 'viewMatrix', t.matrixWorldInverse); + } + if (n.skinning) { + y.setOptional(pt, i, 'bindMatrix'), + y.setOptional(pt, i, 'bindMatrixInverse'); + const t = i.skeleton; + if (t) { + const e = t.bones; + if (j.floatVertexTextures) { + if (null === t.boneTexture) { + let n = Math.sqrt(4 * e.length); + (n = mt(n)), (n = Math.max(n, 4)); + const i = new Float32Array(n * n * 4); + i.set(t.boneMatrices); + const r = new ii(i, n, n, E, b); + (t.boneMatrices = i), + (t.boneTexture = r), + (t.boneTextureSize = n); + } + y.setValue(pt, 'boneTexture', t.boneTexture, J), + y.setValue(pt, 'boneTextureSize', t.boneTextureSize); + } else y.setOptional(pt, t, 'boneMatrices'); + } + } + var M, T; + return ( + (g || c.receiveShadow !== i.receiveShadow) && + ((c.receiveShadow = i.receiveShadow), + y.setValue(pt, 'receiveShadow', i.receiveShadow)), + g && + (y.setValue(pt, 'toneMappingExposure', f.toneMappingExposure), + c.needsLights && + ((T = v), + ((M = x).ambientLightColor.needsUpdate = T), + (M.lightProbe.needsUpdate = T), + (M.directionalLights.needsUpdate = T), + (M.directionalLightShadows.needsUpdate = T), + (M.pointLights.needsUpdate = T), + (M.pointLightShadows.needsUpdate = T), + (M.spotLights.needsUpdate = T), + (M.spotLightShadows.needsUpdate = T), + (M.rectAreaLights.needsUpdate = T), + (M.hemisphereLights.needsUpdate = T)), + r && n.fog && nt.refreshFogUniforms(x, r), + nt.refreshMaterialUniforms(x, n, P, C), + Cr.upload(pt, c.uniformsList, x, J)), + n.isShaderMaterial && + !0 === n.uniformsNeedUpdate && + (Cr.upload(pt, c.uniformsList, x, J), (n.uniformsNeedUpdate = !1)), + n.isSpriteMaterial && y.setValue(pt, 'center', i.center), + y.setValue(pt, 'modelViewMatrix', i.modelViewMatrix), + y.setValue(pt, 'normalMatrix', i.normalMatrix), + y.setValue(pt, 'modelMatrix', i.matrixWorld), + p + ); + } + Et.setAnimationLoop(function (t) { + bt && bt(t); + }), + 'undefined' != typeof window && Et.setContext(window), + (this.setAnimationLoop = function (t) { + (bt = t), yt.setAnimationLoop(t), null === t ? Et.stop() : Et.start(); + }), + yt.addEventListener('sessionstart', Mt), + yt.addEventListener('sessionend', Tt), + (this.render = function (t, e) { + let n, i; + if ( + (void 0 !== arguments[2] && + (console.warn( + 'THREE.WebGLRenderer.render(): the renderTarget argument has been removed. Use .setRenderTarget() instead.' + ), + (n = arguments[2])), + void 0 !== arguments[3] && + (console.warn( + 'THREE.WebGLRenderer.render(): the forceClear argument has been removed. Use .clear() instead.' + ), + (i = arguments[3])), + void 0 !== e && !0 !== e.isCamera) + ) + return void console.error( + 'THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.' + ); + if (!0 === g) return; + !0 === t.autoUpdate && t.updateMatrixWorld(), + null === e.parent && e.updateMatrixWorld(), + !0 === yt.enabled && !0 === yt.isPresenting && (e = yt.getCamera(e)), + !0 === t.isScene && t.onBeforeRender(f, t, e, n || _), + (d = rt.get(t, m.length)), + d.init(), + m.push(d), + G.multiplyMatrices(e.projectionMatrix, e.matrixWorldInverse), + F.setFromProjectionMatrix(G), + (H = this.localClippingEnabled), + (O = st.init(this.clippingPlanes, H, e)), + (u = it.get(t, p.length)), + u.init(), + p.push(u), + At(t, e, 0, f.sortObjects), + u.finish(), + !0 === f.sortObjects && u.sort(D, I), + !0 === O && st.beginShadows(); + const r = d.state.shadowsArray; + at.render(r, t, e), + d.setupLights(), + d.setupLightsView(e), + !0 === O && st.endShadows(), + !0 === this.info.autoReset && this.info.reset(), + void 0 !== n && this.setRenderTarget(n), + ot.render(u, t, e, i); + const s = u.opaque, + a = u.transparent; + s.length > 0 && Rt(s, t, e), + a.length > 0 && Rt(a, t, e), + null !== _ && + (J.updateRenderTargetMipmap(_), J.updateMultisampleRenderTarget(_)), + !0 === t.isScene && t.onAfterRender(f, t, e), + q.buffers.depth.setTest(!0), + q.buffers.depth.setMask(!0), + q.buffers.color.setMask(!0), + q.setPolygonOffset(!1), + dt.resetDefaultState(), + (w = -1), + (S = null), + m.pop(), + (d = m.length > 0 ? m[m.length - 1] : null), + p.pop(), + (u = p.length > 0 ? p[p.length - 1] : null); + }), + (this.getActiveCubeFace = function () { + return v; + }), + (this.getActiveMipmapLevel = function () { + return y; + }), + (this.getRenderTarget = function () { + return _; + }), + (this.setRenderTarget = function (t, e = 0, n = 0) { + (_ = t), + (v = e), + (y = n), + t && void 0 === Z.get(t).__webglFramebuffer && J.setupRenderTarget(t); + let i = null, + r = !1, + s = !1; + if (t) { + const n = t.texture; + (n.isDataTexture3D || n.isDataTexture2DArray) && (s = !0); + const a = Z.get(t).__webglFramebuffer; + t.isWebGLCubeRenderTarget + ? ((i = a[e]), (r = !0)) + : (i = t.isWebGLMultisampleRenderTarget + ? Z.get(t).__webglMultisampledFramebuffer + : a), + T.copy(t.viewport), + A.copy(t.scissor), + (L = t.scissorTest); + } else + T.copy(N).multiplyScalar(P).floor(), + A.copy(B).multiplyScalar(P).floor(), + (L = z); + if ( + (q.bindFramebuffer(36160, i), + q.viewport(T), + q.scissor(A), + q.setScissorTest(L), + r) + ) { + const i = Z.get(t.texture); + pt.framebufferTexture2D(36160, 36064, 34069 + e, i.__webglTexture, n); + } else if (s) { + const i = Z.get(t.texture), + r = e || 0; + pt.framebufferTextureLayer(36160, 36064, i.__webglTexture, n || 0, r); + } + }), + (this.readRenderTargetPixels = function (t, e, n, i, r, s, a) { + if (!t || !t.isWebGLRenderTarget) + return void console.error( + 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.' + ); + let o = Z.get(t).__webglFramebuffer; + if ((t.isWebGLCubeRenderTarget && void 0 !== a && (o = o[a]), o)) { + q.bindFramebuffer(36160, o); + try { + const a = t.texture, + o = a.format, + l = a.type; + if (o !== E && ut.convert(o) !== pt.getParameter(35739)) + return void console.error( + 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.' + ); + const c = + l === M && + (W.has('EXT_color_buffer_half_float') || + (j.isWebGL2 && W.has('EXT_color_buffer_float'))); + if ( + !( + l === x || + ut.convert(l) === pt.getParameter(35738) || + (l === b && + (j.isWebGL2 || + W.has('OES_texture_float') || + W.has('WEBGL_color_buffer_float'))) || + c + ) + ) + return void console.error( + 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.' + ); + 36053 === pt.checkFramebufferStatus(36160) + ? e >= 0 && + e <= t.width - i && + n >= 0 && + n <= t.height - r && + pt.readPixels(e, n, i, r, ut.convert(o), ut.convert(l), s) + : console.error( + 'THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.' + ); + } finally { + const t = null !== _ ? Z.get(_).__webglFramebuffer : null; + q.bindFramebuffer(36160, t); + } + } + }), + (this.copyFramebufferToTexture = function (t, e, n = 0) { + const i = Math.pow(2, -n), + r = Math.floor(e.image.width * i), + s = Math.floor(e.image.height * i), + a = ut.convert(e.format); + J.setTexture2D(e, 0), + pt.copyTexImage2D(3553, n, a, t.x, t.y, r, s, 0), + q.unbindTexture(); + }), + (this.copyTextureToTexture = function (t, e, n, i = 0) { + const r = e.image.width, + s = e.image.height, + a = ut.convert(n.format), + o = ut.convert(n.type); + J.setTexture2D(n, 0), + pt.pixelStorei(37440, n.flipY), + pt.pixelStorei(37441, n.premultiplyAlpha), + pt.pixelStorei(3317, n.unpackAlignment), + e.isDataTexture + ? pt.texSubImage2D(3553, i, t.x, t.y, r, s, a, o, e.image.data) + : e.isCompressedTexture + ? pt.compressedTexSubImage2D( + 3553, + i, + t.x, + t.y, + e.mipmaps[0].width, + e.mipmaps[0].height, + a, + e.mipmaps[0].data + ) + : pt.texSubImage2D(3553, i, t.x, t.y, a, o, e.image), + 0 === i && n.generateMipmaps && pt.generateMipmap(3553), + q.unbindTexture(); + }), + (this.copyTextureToTexture3D = function (t, e, n, i, r = 0) { + if (f.isWebGL1Renderer) + return void console.warn( + 'THREE.WebGLRenderer.copyTextureToTexture3D: can only be used with WebGL2.' + ); + const { width: s, height: a, data: o } = n.image, + l = ut.convert(i.format), + c = ut.convert(i.type); + let h; + if (i.isDataTexture3D) J.setTexture3D(i, 0), (h = 32879); + else { + if (!i.isDataTexture2DArray) + return void console.warn( + 'THREE.WebGLRenderer.copyTextureToTexture3D: only supports THREE.DataTexture3D and THREE.DataTexture2DArray.' + ); + J.setTexture2DArray(i, 0), (h = 35866); + } + pt.pixelStorei(37440, i.flipY), + pt.pixelStorei(37441, i.premultiplyAlpha), + pt.pixelStorei(3317, i.unpackAlignment); + const u = pt.getParameter(3314), + d = pt.getParameter(32878), + p = pt.getParameter(3316), + m = pt.getParameter(3315), + g = pt.getParameter(32877); + pt.pixelStorei(3314, s), + pt.pixelStorei(32878, a), + pt.pixelStorei(3316, t.min.x), + pt.pixelStorei(3315, t.min.y), + pt.pixelStorei(32877, t.min.z), + pt.texSubImage3D( + h, + r, + e.x, + e.y, + e.z, + t.max.x - t.min.x + 1, + t.max.y - t.min.y + 1, + t.max.z - t.min.z + 1, + l, + c, + o + ), + pt.pixelStorei(3314, u), + pt.pixelStorei(32878, d), + pt.pixelStorei(3316, p), + pt.pixelStorei(3315, m), + pt.pixelStorei(32877, g), + 0 === r && i.generateMipmaps && pt.generateMipmap(h), + q.unbindTexture(); + }), + (this.initTexture = function (t) { + J.setTexture2D(t, 0), q.unbindTexture(); + }), + (this.resetState = function () { + (v = 0), (y = 0), (_ = null), q.reset(), dt.reset(); + }), + 'undefined' != typeof __THREE_DEVTOOLS__ && + __THREE_DEVTOOLS__.dispatchEvent( + new CustomEvent('observe', { detail: this }) + ); + } + class bs extends ws {} + bs.prototype.isWebGL1Renderer = !0; + class Ms { + constructor(t, e = 25e-5) { + (this.name = ''), (this.color = new tn(t)), (this.density = e); + } + clone() { + return new Ms(this.color, this.density); + } + toJSON() { + return { + type: 'FogExp2', + color: this.color.getHex(), + density: this.density, + }; + } + } + Ms.prototype.isFogExp2 = !0; + class Ss { + constructor(t, e = 1, n = 1e3) { + (this.name = ''), + (this.color = new tn(t)), + (this.near = e), + (this.far = n); + } + clone() { + return new Ss(this.color, this.near, this.far); + } + toJSON() { + return { + type: 'Fog', + color: this.color.getHex(), + near: this.near, + far: this.far, + }; + } + } + Ss.prototype.isFog = !0; + class Ts extends Ce { + constructor() { + super(), + (this.type = 'Scene'), + (this.background = null), + (this.environment = null), + (this.fog = null), + (this.overrideMaterial = null), + (this.autoUpdate = !0), + 'undefined' != typeof __THREE_DEVTOOLS__ && + __THREE_DEVTOOLS__.dispatchEvent( + new CustomEvent('observe', { detail: this }) + ); + } + copy(t, e) { + return ( + super.copy(t, e), + null !== t.background && (this.background = t.background.clone()), + null !== t.environment && (this.environment = t.environment.clone()), + null !== t.fog && (this.fog = t.fog.clone()), + null !== t.overrideMaterial && + (this.overrideMaterial = t.overrideMaterial.clone()), + (this.autoUpdate = t.autoUpdate), + (this.matrixAutoUpdate = t.matrixAutoUpdate), + this + ); + } + toJSON(t) { + const e = super.toJSON(t); + return ( + null !== this.background && + (e.object.background = this.background.toJSON(t)), + null !== this.environment && + (e.object.environment = this.environment.toJSON(t)), + null !== this.fog && (e.object.fog = this.fog.toJSON()), + e + ); + } + } + Ts.prototype.isScene = !0; + class Es { + constructor(t, e) { + (this.array = t), + (this.stride = e), + (this.count = void 0 !== t ? t.length / e : 0), + (this.usage = et), + (this.updateRange = { offset: 0, count: -1 }), + (this.version = 0), + (this.uuid = ct()), + (this.onUploadCallback = function () {}); + } + set needsUpdate(t) { + !0 === t && this.version++; + } + setUsage(t) { + return (this.usage = t), this; + } + copy(t) { + return ( + (this.array = new t.array.constructor(t.array)), + (this.count = t.count), + (this.stride = t.stride), + (this.usage = t.usage), + this + ); + } + copyAt(t, e, n) { + (t *= this.stride), (n *= e.stride); + for (let i = 0, r = this.stride; i < r; i++) + this.array[t + i] = e.array[n + i]; + return this; + } + set(t, e = 0) { + return this.array.set(t, e), this; + } + clone(t) { + void 0 === t.arrayBuffers && (t.arrayBuffers = {}), + void 0 === this.array.buffer._uuid && (this.array.buffer._uuid = ct()), + void 0 === t.arrayBuffers[this.array.buffer._uuid] && + (t.arrayBuffers[this.array.buffer._uuid] = + this.array.slice(0).buffer); + const e = new this.array.constructor( + t.arrayBuffers[this.array.buffer._uuid] + ), + n = new Es(e, this.stride); + return n.setUsage(this.usage), n; + } + onUpload(t) { + return (this.onUploadCallback = t), this; + } + toJSON(t) { + return ( + void 0 === t.arrayBuffers && (t.arrayBuffers = {}), + void 0 === this.array.buffer._uuid && (this.array.buffer._uuid = ct()), + void 0 === t.arrayBuffers[this.array.buffer._uuid] && + (t.arrayBuffers[this.array.buffer._uuid] = Array.prototype.slice.call( + new Uint32Array(this.array.buffer) + )), + { + uuid: this.uuid, + buffer: this.array.buffer._uuid, + type: this.array.constructor.name, + stride: this.stride, + } + ); + } + } + Es.prototype.isInterleavedBuffer = !0; + const As = new Lt(); + class Ls { + constructor(t, e, n, i) { + (this.name = ''), + (this.data = t), + (this.itemSize = e), + (this.offset = n), + (this.normalized = !0 === i); + } + get count() { + return this.data.count; + } + get array() { + return this.data.array; + } + set needsUpdate(t) { + this.data.needsUpdate = t; + } + applyMatrix4(t) { + for (let e = 0, n = this.data.count; e < n; e++) + (As.x = this.getX(e)), + (As.y = this.getY(e)), + (As.z = this.getZ(e)), + As.applyMatrix4(t), + this.setXYZ(e, As.x, As.y, As.z); + return this; + } + applyNormalMatrix(t) { + for (let e = 0, n = this.count; e < n; e++) + (As.x = this.getX(e)), + (As.y = this.getY(e)), + (As.z = this.getZ(e)), + As.applyNormalMatrix(t), + this.setXYZ(e, As.x, As.y, As.z); + return this; + } + transformDirection(t) { + for (let e = 0, n = this.count; e < n; e++) + (As.x = this.getX(e)), + (As.y = this.getY(e)), + (As.z = this.getZ(e)), + As.transformDirection(t), + this.setXYZ(e, As.x, As.y, As.z); + return this; + } + setX(t, e) { + return (this.data.array[t * this.data.stride + this.offset] = e), this; + } + setY(t, e) { + return ( + (this.data.array[t * this.data.stride + this.offset + 1] = e), this + ); + } + setZ(t, e) { + return ( + (this.data.array[t * this.data.stride + this.offset + 2] = e), this + ); + } + setW(t, e) { + return ( + (this.data.array[t * this.data.stride + this.offset + 3] = e), this + ); + } + getX(t) { + return this.data.array[t * this.data.stride + this.offset]; + } + getY(t) { + return this.data.array[t * this.data.stride + this.offset + 1]; + } + getZ(t) { + return this.data.array[t * this.data.stride + this.offset + 2]; + } + getW(t) { + return this.data.array[t * this.data.stride + this.offset + 3]; + } + setXY(t, e, n) { + return ( + (t = t * this.data.stride + this.offset), + (this.data.array[t + 0] = e), + (this.data.array[t + 1] = n), + this + ); + } + setXYZ(t, e, n, i) { + return ( + (t = t * this.data.stride + this.offset), + (this.data.array[t + 0] = e), + (this.data.array[t + 1] = n), + (this.data.array[t + 2] = i), + this + ); + } + setXYZW(t, e, n, i, r) { + return ( + (t = t * this.data.stride + this.offset), + (this.data.array[t + 0] = e), + (this.data.array[t + 1] = n), + (this.data.array[t + 2] = i), + (this.data.array[t + 3] = r), + this + ); + } + clone(t) { + if (void 0 === t) { + console.log( + 'THREE.InterleavedBufferAttribute.clone(): Cloning an interlaved buffer attribute will deinterleave buffer data.' + ); + const t = []; + for (let e = 0; e < this.count; e++) { + const n = e * this.data.stride + this.offset; + for (let e = 0; e < this.itemSize; e++) + t.push(this.data.array[n + e]); + } + return new sn( + new this.array.constructor(t), + this.itemSize, + this.normalized + ); + } + return ( + void 0 === t.interleavedBuffers && (t.interleavedBuffers = {}), + void 0 === t.interleavedBuffers[this.data.uuid] && + (t.interleavedBuffers[this.data.uuid] = this.data.clone(t)), + new Ls( + t.interleavedBuffers[this.data.uuid], + this.itemSize, + this.offset, + this.normalized + ) + ); + } + toJSON(t) { + if (void 0 === t) { + console.log( + 'THREE.InterleavedBufferAttribute.toJSON(): Serializing an interlaved buffer attribute will deinterleave buffer data.' + ); + const t = []; + for (let e = 0; e < this.count; e++) { + const n = e * this.data.stride + this.offset; + for (let e = 0; e < this.itemSize; e++) + t.push(this.data.array[n + e]); + } + return { + itemSize: this.itemSize, + type: this.array.constructor.name, + array: t, + normalized: this.normalized, + }; + } + return ( + void 0 === t.interleavedBuffers && (t.interleavedBuffers = {}), + void 0 === t.interleavedBuffers[this.data.uuid] && + (t.interleavedBuffers[this.data.uuid] = this.data.toJSON(t)), + { + isInterleavedBufferAttribute: !0, + itemSize: this.itemSize, + data: this.data.uuid, + offset: this.offset, + normalized: this.normalized, + } + ); + } + } + Ls.prototype.isInterleavedBufferAttribute = !0; + class Rs extends Xe { + constructor(t) { + super(), + (this.type = 'SpriteMaterial'), + (this.color = new tn(16777215)), + (this.map = null), + (this.alphaMap = null), + (this.rotation = 0), + (this.sizeAttenuation = !0), + (this.transparent = !0), + this.setValues(t); + } + copy(t) { + return ( + super.copy(t), + this.color.copy(t.color), + (this.map = t.map), + (this.alphaMap = t.alphaMap), + (this.rotation = t.rotation), + (this.sizeAttenuation = t.sizeAttenuation), + this + ); + } + } + let Cs; + Rs.prototype.isSpriteMaterial = !0; + const Ps = new Lt(), + Ds = new Lt(), + Is = new Lt(), + Ns = new vt(), + Bs = new vt(), + zs = new se(), + Fs = new Lt(), + Os = new Lt(), + Hs = new Lt(), + Gs = new vt(), + Us = new vt(), + ks = new vt(); + class Vs extends Ce { + constructor(t) { + if ((super(), (this.type = 'Sprite'), void 0 === Cs)) { + Cs = new En(); + const t = new Float32Array([ + -0.5, -0.5, 0, 0, 0, 0.5, -0.5, 0, 1, 0, 0.5, 0.5, 0, 1, 1, -0.5, + 0.5, 0, 0, 1, + ]), + e = new Es(t, 5); + Cs.setIndex([0, 1, 2, 0, 2, 3]), + Cs.setAttribute('position', new Ls(e, 3, 0, !1)), + Cs.setAttribute('uv', new Ls(e, 2, 3, !1)); + } + (this.geometry = Cs), + (this.material = void 0 !== t ? t : new Rs()), + (this.center = new vt(0.5, 0.5)); + } + raycast(t, e) { + null === t.camera && + console.error( + 'THREE.Sprite: "Raycaster.camera" needs to be set in order to raycast against sprites.' + ), + Ds.setFromMatrixScale(this.matrixWorld), + zs.copy(t.camera.matrixWorld), + this.modelViewMatrix.multiplyMatrices( + t.camera.matrixWorldInverse, + this.matrixWorld + ), + Is.setFromMatrixPosition(this.modelViewMatrix), + t.camera.isPerspectiveCamera && + !1 === this.material.sizeAttenuation && + Ds.multiplyScalar(-Is.z); + const n = this.material.rotation; + let i, r; + 0 !== n && ((r = Math.cos(n)), (i = Math.sin(n))); + const s = this.center; + Ws(Fs.set(-0.5, -0.5, 0), Is, s, Ds, i, r), + Ws(Os.set(0.5, -0.5, 0), Is, s, Ds, i, r), + Ws(Hs.set(0.5, 0.5, 0), Is, s, Ds, i, r), + Gs.set(0, 0), + Us.set(1, 0), + ks.set(1, 1); + let a = t.ray.intersectTriangle(Fs, Os, Hs, !1, Ps); + if ( + null === a && + (Ws(Os.set(-0.5, 0.5, 0), Is, s, Ds, i, r), + Us.set(0, 1), + (a = t.ray.intersectTriangle(Fs, Hs, Os, !1, Ps)), + null === a) + ) + return; + const o = t.ray.origin.distanceTo(Ps); + o < t.near || + o > t.far || + e.push({ + distance: o, + point: Ps.clone(), + uv: je.getUV(Ps, Fs, Os, Hs, Gs, Us, ks, new vt()), + face: null, + object: this, + }); + } + copy(t) { + return ( + super.copy(t), + void 0 !== t.center && this.center.copy(t.center), + (this.material = t.material), + this + ); + } + } + function Ws(t, e, n, i, r, s) { + Ns.subVectors(t, n).addScalar(0.5).multiply(i), + void 0 !== r + ? ((Bs.x = s * Ns.x - r * Ns.y), (Bs.y = r * Ns.x + s * Ns.y)) + : Bs.copy(Ns), + t.copy(e), + (t.x += Bs.x), + (t.y += Bs.y), + t.applyMatrix4(zs); + } + Vs.prototype.isSprite = !0; + const js = new Lt(), + qs = new Lt(); + class Xs extends Ce { + constructor() { + super(), + (this._currentLevel = 0), + (this.type = 'LOD'), + Object.defineProperties(this, { + levels: { enumerable: !0, value: [] }, + isLOD: { value: !0 }, + }), + (this.autoUpdate = !0); + } + copy(t) { + super.copy(t, !1); + const e = t.levels; + for (let t = 0, n = e.length; t < n; t++) { + const n = e[t]; + this.addLevel(n.object.clone(), n.distance); + } + return (this.autoUpdate = t.autoUpdate), this; + } + addLevel(t, e = 0) { + e = Math.abs(e); + const n = this.levels; + let i; + for (i = 0; i < n.length && !(e < n[i].distance); i++); + return n.splice(i, 0, { distance: e, object: t }), this.add(t), this; + } + getCurrentLevel() { + return this._currentLevel; + } + getObjectForDistance(t) { + const e = this.levels; + if (e.length > 0) { + let n, i; + for (n = 1, i = e.length; n < i && !(t < e[n].distance); n++); + return e[n - 1].object; + } + return null; + } + raycast(t, e) { + if (this.levels.length > 0) { + js.setFromMatrixPosition(this.matrixWorld); + const n = t.ray.origin.distanceTo(js); + this.getObjectForDistance(n).raycast(t, e); + } + } + update(t) { + const e = this.levels; + if (e.length > 1) { + js.setFromMatrixPosition(t.matrixWorld), + qs.setFromMatrixPosition(this.matrixWorld); + const n = js.distanceTo(qs) / t.zoom; + let i, r; + for ( + e[0].object.visible = !0, i = 1, r = e.length; + i < r && n >= e[i].distance; + i++ + ) + (e[i - 1].object.visible = !1), (e[i].object.visible = !0); + for (this._currentLevel = i - 1; i < r; i++) e[i].object.visible = !1; + } + } + toJSON(t) { + const e = super.toJSON(t); + !1 === this.autoUpdate && (e.object.autoUpdate = !1), + (e.object.levels = []); + const n = this.levels; + for (let t = 0, i = n.length; t < i; t++) { + const i = n[t]; + e.object.levels.push({ object: i.object.uuid, distance: i.distance }); + } + return e; + } + } + const Ys = new Lt(), + Zs = new St(), + Js = new St(), + Qs = new Lt(), + Ks = new se(); + class $s extends Wn { + constructor(t, e) { + super(t, e), + (this.type = 'SkinnedMesh'), + (this.bindMode = 'attached'), + (this.bindMatrix = new se()), + (this.bindMatrixInverse = new se()); + } + copy(t) { + return ( + super.copy(t), + (this.bindMode = t.bindMode), + this.bindMatrix.copy(t.bindMatrix), + this.bindMatrixInverse.copy(t.bindMatrixInverse), + (this.skeleton = t.skeleton), + this + ); + } + bind(t, e) { + (this.skeleton = t), + void 0 === e && + (this.updateMatrixWorld(!0), + this.skeleton.calculateInverses(), + (e = this.matrixWorld)), + this.bindMatrix.copy(e), + this.bindMatrixInverse.copy(e).invert(); + } + pose() { + this.skeleton.pose(); + } + normalizeSkinWeights() { + const t = new St(), + e = this.geometry.attributes.skinWeight; + for (let n = 0, i = e.count; n < i; n++) { + (t.x = e.getX(n)), + (t.y = e.getY(n)), + (t.z = e.getZ(n)), + (t.w = e.getW(n)); + const i = 1 / t.manhattanLength(); + i !== 1 / 0 ? t.multiplyScalar(i) : t.set(1, 0, 0, 0), + e.setXYZW(n, t.x, t.y, t.z, t.w); + } + } + updateMatrixWorld(t) { + super.updateMatrixWorld(t), + 'attached' === this.bindMode + ? this.bindMatrixInverse.copy(this.matrixWorld).invert() + : 'detached' === this.bindMode + ? this.bindMatrixInverse.copy(this.bindMatrix).invert() + : console.warn( + 'THREE.SkinnedMesh: Unrecognized bindMode: ' + this.bindMode + ); + } + boneTransform(t, e) { + const n = this.skeleton, + i = this.geometry; + Zs.fromBufferAttribute(i.attributes.skinIndex, t), + Js.fromBufferAttribute(i.attributes.skinWeight, t), + Ys.fromBufferAttribute(i.attributes.position, t).applyMatrix4( + this.bindMatrix + ), + e.set(0, 0, 0); + for (let t = 0; t < 4; t++) { + const i = Js.getComponent(t); + if (0 !== i) { + const r = Zs.getComponent(t); + Ks.multiplyMatrices(n.bones[r].matrixWorld, n.boneInverses[r]), + e.addScaledVector(Qs.copy(Ys).applyMatrix4(Ks), i); + } + } + return e.applyMatrix4(this.bindMatrixInverse); + } + } + $s.prototype.isSkinnedMesh = !0; + class ta extends Ce { + constructor() { + super(), (this.type = 'Bone'); + } + } + ta.prototype.isBone = !0; + const ea = new se(), + na = new se(); + class ia { + constructor(t = [], e = []) { + (this.uuid = ct()), + (this.bones = t.slice(0)), + (this.boneInverses = e), + (this.boneMatrices = null), + (this.boneTexture = null), + (this.boneTextureSize = 0), + (this.frame = -1), + this.init(); + } + init() { + const t = this.bones, + e = this.boneInverses; + if ( + ((this.boneMatrices = new Float32Array(16 * t.length)), 0 === e.length) + ) + this.calculateInverses(); + else if (t.length !== e.length) { + console.warn( + 'THREE.Skeleton: Number of inverse bone matrices does not match amount of bones.' + ), + (this.boneInverses = []); + for (let t = 0, e = this.bones.length; t < e; t++) + this.boneInverses.push(new se()); + } + } + calculateInverses() { + this.boneInverses.length = 0; + for (let t = 0, e = this.bones.length; t < e; t++) { + const e = new se(); + this.bones[t] && e.copy(this.bones[t].matrixWorld).invert(), + this.boneInverses.push(e); + } + } + pose() { + for (let t = 0, e = this.bones.length; t < e; t++) { + const e = this.bones[t]; + e && e.matrixWorld.copy(this.boneInverses[t]).invert(); + } + for (let t = 0, e = this.bones.length; t < e; t++) { + const e = this.bones[t]; + e && + (e.parent && e.parent.isBone + ? (e.matrix.copy(e.parent.matrixWorld).invert(), + e.matrix.multiply(e.matrixWorld)) + : e.matrix.copy(e.matrixWorld), + e.matrix.decompose(e.position, e.quaternion, e.scale)); + } + } + update() { + const t = this.bones, + e = this.boneInverses, + n = this.boneMatrices, + i = this.boneTexture; + for (let i = 0, r = t.length; i < r; i++) { + const r = t[i] ? t[i].matrixWorld : na; + ea.multiplyMatrices(r, e[i]), ea.toArray(n, 16 * i); + } + null !== i && (i.needsUpdate = !0); + } + clone() { + return new ia(this.bones, this.boneInverses); + } + getBoneByName(t) { + for (let e = 0, n = this.bones.length; e < n; e++) { + const n = this.bones[e]; + if (n.name === t) return n; + } + } + dispose() { + null !== this.boneTexture && + (this.boneTexture.dispose(), (this.boneTexture = null)); + } + fromJSON(t, e) { + this.uuid = t.uuid; + for (let n = 0, i = t.bones.length; n < i; n++) { + const i = t.bones[n]; + let r = e[i]; + void 0 === r && + (console.warn('THREE.Skeleton: No bone found with UUID:', i), + (r = new ta())), + this.bones.push(r), + this.boneInverses.push(new se().fromArray(t.boneInverses[n])); + } + return this.init(), this; + } + toJSON() { + const t = { + metadata: { + version: 4.5, + type: 'Skeleton', + generator: 'Skeleton.toJSON', + }, + bones: [], + boneInverses: [], + }; + t.uuid = this.uuid; + const e = this.bones, + n = this.boneInverses; + for (let i = 0, r = e.length; i < r; i++) { + const r = e[i]; + t.bones.push(r.uuid); + const s = n[i]; + t.boneInverses.push(s.toArray()); + } + return t; + } + } + const ra = new se(), + sa = new se(), + aa = [], + oa = new Wn(); + class la extends Wn { + constructor(t, e, n) { + super(t, e), + (this.instanceMatrix = new sn(new Float32Array(16 * n), 16)), + (this.instanceColor = null), + (this.count = n), + (this.frustumCulled = !1); + } + copy(t) { + return ( + super.copy(t), + this.instanceMatrix.copy(t.instanceMatrix), + null !== t.instanceColor && + (this.instanceColor = t.instanceColor.clone()), + (this.count = t.count), + this + ); + } + getColorAt(t, e) { + e.fromArray(this.instanceColor.array, 3 * t); + } + getMatrixAt(t, e) { + e.fromArray(this.instanceMatrix.array, 16 * t); + } + raycast(t, e) { + const n = this.matrixWorld, + i = this.count; + if ( + ((oa.geometry = this.geometry), + (oa.material = this.material), + void 0 !== oa.material) + ) + for (let r = 0; r < i; r++) { + this.getMatrixAt(r, ra), + sa.multiplyMatrices(n, ra), + (oa.matrixWorld = sa), + oa.raycast(t, aa); + for (let t = 0, n = aa.length; t < n; t++) { + const n = aa[t]; + (n.instanceId = r), (n.object = this), e.push(n); + } + aa.length = 0; + } + } + setColorAt(t, e) { + null === this.instanceColor && + (this.instanceColor = new sn(new Float32Array(3 * this.count), 3)), + e.toArray(this.instanceColor.array, 3 * t); + } + setMatrixAt(t, e) { + e.toArray(this.instanceMatrix.array, 16 * t); + } + updateMorphTargets() {} + dispose() { + this.dispatchEvent({ type: 'dispose' }); + } + } + la.prototype.isInstancedMesh = !0; + class ca extends Xe { + constructor(t) { + super(), + (this.type = 'LineBasicMaterial'), + (this.color = new tn(16777215)), + (this.linewidth = 1), + (this.linecap = 'round'), + (this.linejoin = 'round'), + (this.morphTargets = !1), + this.setValues(t); + } + copy(t) { + return ( + super.copy(t), + this.color.copy(t.color), + (this.linewidth = t.linewidth), + (this.linecap = t.linecap), + (this.linejoin = t.linejoin), + (this.morphTargets = t.morphTargets), + this + ); + } + } + ca.prototype.isLineBasicMaterial = !0; + const ha = new Lt(), + ua = new Lt(), + da = new se(), + pa = new re(), + ma = new Jt(); + class fa extends Ce { + constructor(t = new En(), e = new ca()) { + super(), + (this.type = 'Line'), + (this.geometry = t), + (this.material = e), + this.updateMorphTargets(); + } + copy(t) { + return ( + super.copy(t), + (this.material = t.material), + (this.geometry = t.geometry), + this + ); + } + computeLineDistances() { + const t = this.geometry; + if (t.isBufferGeometry) + if (null === t.index) { + const e = t.attributes.position, + n = [0]; + for (let t = 1, i = e.count; t < i; t++) + ha.fromBufferAttribute(e, t - 1), + ua.fromBufferAttribute(e, t), + (n[t] = n[t - 1]), + (n[t] += ha.distanceTo(ua)); + t.setAttribute('lineDistance', new mn(n, 1)); + } else + console.warn( + 'THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' + ); + else + t.isGeometry && + console.error( + 'THREE.Line.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' + ); + return this; + } + raycast(t, e) { + const n = this.geometry, + i = this.matrixWorld, + r = t.params.Line.threshold, + s = n.drawRange; + if ( + (null === n.boundingSphere && n.computeBoundingSphere(), + ma.copy(n.boundingSphere), + ma.applyMatrix4(i), + (ma.radius += r), + !1 === t.ray.intersectsSphere(ma)) + ) + return; + da.copy(i).invert(), pa.copy(t.ray).applyMatrix4(da); + const a = r / ((this.scale.x + this.scale.y + this.scale.z) / 3), + o = a * a, + l = new Lt(), + c = new Lt(), + h = new Lt(), + u = new Lt(), + d = this.isLineSegments ? 2 : 1; + if (n.isBufferGeometry) { + const i = n.index, + r = n.attributes.position; + if (null !== i) { + for ( + let n = Math.max(0, s.start), + a = Math.min(i.count, s.start + s.count) - 1; + n < a; + n += d + ) { + const s = i.getX(n), + a = i.getX(n + 1); + l.fromBufferAttribute(r, s), c.fromBufferAttribute(r, a); + if (pa.distanceSqToSegment(l, c, u, h) > o) continue; + u.applyMatrix4(this.matrixWorld); + const d = t.ray.origin.distanceTo(u); + d < t.near || + d > t.far || + e.push({ + distance: d, + point: h.clone().applyMatrix4(this.matrixWorld), + index: n, + face: null, + faceIndex: null, + object: this, + }); + } + } else { + for ( + let n = Math.max(0, s.start), + i = Math.min(r.count, s.start + s.count) - 1; + n < i; + n += d + ) { + l.fromBufferAttribute(r, n), c.fromBufferAttribute(r, n + 1); + if (pa.distanceSqToSegment(l, c, u, h) > o) continue; + u.applyMatrix4(this.matrixWorld); + const i = t.ray.origin.distanceTo(u); + i < t.near || + i > t.far || + e.push({ + distance: i, + point: h.clone().applyMatrix4(this.matrixWorld), + index: n, + face: null, + faceIndex: null, + object: this, + }); + } + } + } else + n.isGeometry && + console.error( + 'THREE.Line.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' + ); + } + updateMorphTargets() { + const t = this.geometry; + if (t.isBufferGeometry) { + const e = t.morphAttributes, + n = Object.keys(e); + if (n.length > 0) { + const t = e[n[0]]; + if (void 0 !== t) { + (this.morphTargetInfluences = []), + (this.morphTargetDictionary = {}); + for (let e = 0, n = t.length; e < n; e++) { + const n = t[e].name || String(e); + this.morphTargetInfluences.push(0), + (this.morphTargetDictionary[n] = e); + } + } + } + } else { + const e = t.morphTargets; + void 0 !== e && + e.length > 0 && + console.error( + 'THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.' + ); + } + } + } + fa.prototype.isLine = !0; + const ga = new Lt(), + va = new Lt(); + class ya extends fa { + constructor(t, e) { + super(t, e), (this.type = 'LineSegments'); + } + computeLineDistances() { + const t = this.geometry; + if (t.isBufferGeometry) + if (null === t.index) { + const e = t.attributes.position, + n = []; + for (let t = 0, i = e.count; t < i; t += 2) + ga.fromBufferAttribute(e, t), + va.fromBufferAttribute(e, t + 1), + (n[t] = 0 === t ? 0 : n[t - 1]), + (n[t + 1] = n[t] + ga.distanceTo(va)); + t.setAttribute('lineDistance', new mn(n, 1)); + } else + console.warn( + 'THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' + ); + else + t.isGeometry && + console.error( + 'THREE.LineSegments.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' + ); + return this; + } + } + ya.prototype.isLineSegments = !0; + class xa extends fa { + constructor(t, e) { + super(t, e), (this.type = 'LineLoop'); + } + } + xa.prototype.isLineLoop = !0; + class _a extends Xe { + constructor(t) { + super(), + (this.type = 'PointsMaterial'), + (this.color = new tn(16777215)), + (this.map = null), + (this.alphaMap = null), + (this.size = 1), + (this.sizeAttenuation = !0), + (this.morphTargets = !1), + this.setValues(t); + } + copy(t) { + return ( + super.copy(t), + this.color.copy(t.color), + (this.map = t.map), + (this.alphaMap = t.alphaMap), + (this.size = t.size), + (this.sizeAttenuation = t.sizeAttenuation), + (this.morphTargets = t.morphTargets), + this + ); + } + } + _a.prototype.isPointsMaterial = !0; + const wa = new se(), + ba = new re(), + Ma = new Jt(), + Sa = new Lt(); + class Ta extends Ce { + constructor(t = new En(), e = new _a()) { + super(), + (this.type = 'Points'), + (this.geometry = t), + (this.material = e), + this.updateMorphTargets(); + } + copy(t) { + return ( + super.copy(t), + (this.material = t.material), + (this.geometry = t.geometry), + this + ); + } + raycast(t, e) { + const n = this.geometry, + i = this.matrixWorld, + r = t.params.Points.threshold, + s = n.drawRange; + if ( + (null === n.boundingSphere && n.computeBoundingSphere(), + Ma.copy(n.boundingSphere), + Ma.applyMatrix4(i), + (Ma.radius += r), + !1 === t.ray.intersectsSphere(Ma)) + ) + return; + wa.copy(i).invert(), ba.copy(t.ray).applyMatrix4(wa); + const a = r / ((this.scale.x + this.scale.y + this.scale.z) / 3), + o = a * a; + if (n.isBufferGeometry) { + const r = n.index, + a = n.attributes.position; + if (null !== r) { + for ( + let n = Math.max(0, s.start), + l = Math.min(r.count, s.start + s.count); + n < l; + n++ + ) { + const s = r.getX(n); + Sa.fromBufferAttribute(a, s), Ea(Sa, s, o, i, t, e, this); + } + } else { + for ( + let n = Math.max(0, s.start), + r = Math.min(a.count, s.start + s.count); + n < r; + n++ + ) + Sa.fromBufferAttribute(a, n), Ea(Sa, n, o, i, t, e, this); + } + } else + console.error( + 'THREE.Points.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' + ); + } + updateMorphTargets() { + const t = this.geometry; + if (t.isBufferGeometry) { + const e = t.morphAttributes, + n = Object.keys(e); + if (n.length > 0) { + const t = e[n[0]]; + if (void 0 !== t) { + (this.morphTargetInfluences = []), + (this.morphTargetDictionary = {}); + for (let e = 0, n = t.length; e < n; e++) { + const n = t[e].name || String(e); + this.morphTargetInfluences.push(0), + (this.morphTargetDictionary[n] = e); + } + } + } + } else { + const e = t.morphTargets; + void 0 !== e && + e.length > 0 && + console.error( + 'THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.' + ); + } + } + } + function Ea(t, e, n, i, r, s, a) { + const o = ba.distanceSqToPoint(t); + if (o < n) { + const n = new Lt(); + ba.closestPointToPoint(t, n), n.applyMatrix4(i); + const l = r.ray.origin.distanceTo(n); + if (l < r.near || l > r.far) return; + s.push({ + distance: l, + distanceToRay: Math.sqrt(o), + point: n, + index: e, + face: null, + object: a, + }); + } + } + Ta.prototype.isPoints = !0; + class Aa extends bt { + constructor(t, e, n, i, r, s, a, o, l) { + super(t, e, n, i, r, s, a, o, l), + (this.format = void 0 !== a ? a : T), + (this.minFilter = void 0 !== s ? s : g), + (this.magFilter = void 0 !== r ? r : g), + (this.generateMipmaps = !1); + const c = this; + 'requestVideoFrameCallback' in t && + t.requestVideoFrameCallback(function e() { + (c.needsUpdate = !0), t.requestVideoFrameCallback(e); + }); + } + clone() { + return new this.constructor(this.image).copy(this); + } + update() { + const t = this.image; + !1 === 'requestVideoFrameCallback' in t && + t.readyState >= t.HAVE_CURRENT_DATA && + (this.needsUpdate = !0); + } + } + Aa.prototype.isVideoTexture = !0; + class La extends bt { + constructor(t, e, n, i, r, s, a, o, l, c, h, u) { + super(null, s, a, o, l, c, i, r, h, u), + (this.image = { width: e, height: n }), + (this.mipmaps = t), + (this.flipY = !1), + (this.generateMipmaps = !1); + } + } + La.prototype.isCompressedTexture = !0; + class Ra extends bt { + constructor(t, e, n, i, r, s, a, o, l) { + super(t, e, n, i, r, s, a, o, l), (this.needsUpdate = !0); + } + } + Ra.prototype.isCanvasTexture = !0; + class Ca extends bt { + constructor(t, e, n, i, r, s, a, o, l, c) { + if ((c = void 0 !== c ? c : A) !== A && c !== L) + throw new Error( + 'DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat' + ); + void 0 === n && c === A && (n = _), + void 0 === n && c === L && (n = S), + super(null, i, r, s, a, o, c, n, l), + (this.image = { width: t, height: e }), + (this.magFilter = void 0 !== a ? a : p), + (this.minFilter = void 0 !== o ? o : p), + (this.flipY = !1), + (this.generateMipmaps = !1); + } + } + Ca.prototype.isDepthTexture = !0; + class Pa extends En { + constructor(t = 1, e = 8, n = 0, i = 2 * Math.PI) { + super(), + (this.type = 'CircleGeometry'), + (this.parameters = { + radius: t, + segments: e, + thetaStart: n, + thetaLength: i, + }), + (e = Math.max(3, e)); + const r = [], + s = [], + a = [], + o = [], + l = new Lt(), + c = new vt(); + s.push(0, 0, 0), a.push(0, 0, 1), o.push(0.5, 0.5); + for (let r = 0, h = 3; r <= e; r++, h += 3) { + const u = n + (r / e) * i; + (l.x = t * Math.cos(u)), + (l.y = t * Math.sin(u)), + s.push(l.x, l.y, l.z), + a.push(0, 0, 1), + (c.x = (s[h] / t + 1) / 2), + (c.y = (s[h + 1] / t + 1) / 2), + o.push(c.x, c.y); + } + for (let t = 1; t <= e; t++) r.push(t, t + 1, 0); + this.setIndex(r), + this.setAttribute('position', new mn(s, 3)), + this.setAttribute('normal', new mn(a, 3)), + this.setAttribute('uv', new mn(o, 2)); + } + } + class Da extends En { + constructor( + t = 1, + e = 1, + n = 1, + i = 8, + r = 1, + s = !1, + a = 0, + o = 2 * Math.PI + ) { + super(), + (this.type = 'CylinderGeometry'), + (this.parameters = { + radiusTop: t, + radiusBottom: e, + height: n, + radialSegments: i, + heightSegments: r, + openEnded: s, + thetaStart: a, + thetaLength: o, + }); + const l = this; + (i = Math.floor(i)), (r = Math.floor(r)); + const c = [], + h = [], + u = [], + d = []; + let p = 0; + const m = [], + f = n / 2; + let g = 0; + function v(n) { + const r = p, + s = new vt(), + m = new Lt(); + let v = 0; + const y = !0 === n ? t : e, + x = !0 === n ? 1 : -1; + for (let t = 1; t <= i; t++) + h.push(0, f * x, 0), u.push(0, x, 0), d.push(0.5, 0.5), p++; + const _ = p; + for (let t = 0; t <= i; t++) { + const e = (t / i) * o + a, + n = Math.cos(e), + r = Math.sin(e); + (m.x = y * r), + (m.y = f * x), + (m.z = y * n), + h.push(m.x, m.y, m.z), + u.push(0, x, 0), + (s.x = 0.5 * n + 0.5), + (s.y = 0.5 * r * x + 0.5), + d.push(s.x, s.y), + p++; + } + for (let t = 0; t < i; t++) { + const e = r + t, + i = _ + t; + !0 === n ? c.push(i, i + 1, e) : c.push(i + 1, i, e), (v += 3); + } + l.addGroup(g, v, !0 === n ? 1 : 2), (g += v); + } + !(function () { + const s = new Lt(), + v = new Lt(); + let y = 0; + const x = (e - t) / n; + for (let l = 0; l <= r; l++) { + const c = [], + g = l / r, + y = g * (e - t) + t; + for (let t = 0; t <= i; t++) { + const e = t / i, + r = e * o + a, + l = Math.sin(r), + m = Math.cos(r); + (v.x = y * l), + (v.y = -g * n + f), + (v.z = y * m), + h.push(v.x, v.y, v.z), + s.set(l, x, m).normalize(), + u.push(s.x, s.y, s.z), + d.push(e, 1 - g), + c.push(p++); + } + m.push(c); + } + for (let t = 0; t < i; t++) + for (let e = 0; e < r; e++) { + const n = m[e][t], + i = m[e + 1][t], + r = m[e + 1][t + 1], + s = m[e][t + 1]; + c.push(n, i, s), c.push(i, r, s), (y += 6); + } + l.addGroup(g, y, 0), (g += y); + })(), + !1 === s && (t > 0 && v(!0), e > 0 && v(!1)), + this.setIndex(c), + this.setAttribute('position', new mn(h, 3)), + this.setAttribute('normal', new mn(u, 3)), + this.setAttribute('uv', new mn(d, 2)); + } + } + class Ia extends Da { + constructor(t = 1, e = 1, n = 8, i = 1, r = !1, s = 0, a = 2 * Math.PI) { + super(0, t, e, n, i, r, s, a), + (this.type = 'ConeGeometry'), + (this.parameters = { + radius: t, + height: e, + radialSegments: n, + heightSegments: i, + openEnded: r, + thetaStart: s, + thetaLength: a, + }); + } + } + class Na extends En { + constructor(t, e, n = 1, i = 0) { + super(), + (this.type = 'PolyhedronGeometry'), + (this.parameters = { vertices: t, indices: e, radius: n, detail: i }); + const r = [], + s = []; + function a(t, e, n, i) { + const r = i + 1, + s = []; + for (let i = 0; i <= r; i++) { + s[i] = []; + const a = t.clone().lerp(n, i / r), + o = e.clone().lerp(n, i / r), + l = r - i; + for (let t = 0; t <= l; t++) + s[i][t] = 0 === t && i === r ? a : a.clone().lerp(o, t / l); + } + for (let t = 0; t < r; t++) + for (let e = 0; e < 2 * (r - t) - 1; e++) { + const n = Math.floor(e / 2); + e % 2 == 0 + ? (o(s[t][n + 1]), o(s[t + 1][n]), o(s[t][n])) + : (o(s[t][n + 1]), o(s[t + 1][n + 1]), o(s[t + 1][n])); + } + } + function o(t) { + r.push(t.x, t.y, t.z); + } + function l(e, n) { + const i = 3 * e; + (n.x = t[i + 0]), (n.y = t[i + 1]), (n.z = t[i + 2]); + } + function c(t, e, n, i) { + i < 0 && 1 === t.x && (s[e] = t.x - 1), + 0 === n.x && 0 === n.z && (s[e] = i / 2 / Math.PI + 0.5); + } + function h(t) { + return Math.atan2(t.z, -t.x); + } + !(function (t) { + const n = new Lt(), + i = new Lt(), + r = new Lt(); + for (let s = 0; s < e.length; s += 3) + l(e[s + 0], n), l(e[s + 1], i), l(e[s + 2], r), a(n, i, r, t); + })(i), + (function (t) { + const e = new Lt(); + for (let n = 0; n < r.length; n += 3) + (e.x = r[n + 0]), + (e.y = r[n + 1]), + (e.z = r[n + 2]), + e.normalize().multiplyScalar(t), + (r[n + 0] = e.x), + (r[n + 1] = e.y), + (r[n + 2] = e.z); + })(n), + (function () { + const t = new Lt(); + for (let n = 0; n < r.length; n += 3) { + (t.x = r[n + 0]), (t.y = r[n + 1]), (t.z = r[n + 2]); + const i = h(t) / 2 / Math.PI + 0.5, + a = + ((e = t), + Math.atan2(-e.y, Math.sqrt(e.x * e.x + e.z * e.z)) / Math.PI + + 0.5); + s.push(i, 1 - a); + } + var e; + (function () { + const t = new Lt(), + e = new Lt(), + n = new Lt(), + i = new Lt(), + a = new vt(), + o = new vt(), + l = new vt(); + for (let u = 0, d = 0; u < r.length; u += 9, d += 6) { + t.set(r[u + 0], r[u + 1], r[u + 2]), + e.set(r[u + 3], r[u + 4], r[u + 5]), + n.set(r[u + 6], r[u + 7], r[u + 8]), + a.set(s[d + 0], s[d + 1]), + o.set(s[d + 2], s[d + 3]), + l.set(s[d + 4], s[d + 5]), + i.copy(t).add(e).add(n).divideScalar(3); + const p = h(i); + c(a, d + 0, t, p), c(o, d + 2, e, p), c(l, d + 4, n, p); + } + })(), + (function () { + for (let t = 0; t < s.length; t += 6) { + const e = s[t + 0], + n = s[t + 2], + i = s[t + 4], + r = Math.max(e, n, i), + a = Math.min(e, n, i); + r > 0.9 && + a < 0.1 && + (e < 0.2 && (s[t + 0] += 1), + n < 0.2 && (s[t + 2] += 1), + i < 0.2 && (s[t + 4] += 1)); + } + })(); + })(), + this.setAttribute('position', new mn(r, 3)), + this.setAttribute('normal', new mn(r.slice(), 3)), + this.setAttribute('uv', new mn(s, 2)), + 0 === i ? this.computeVertexNormals() : this.normalizeNormals(); + } + } + class Ba extends Na { + constructor(t = 1, e = 0) { + const n = (1 + Math.sqrt(5)) / 2, + i = 1 / n; + super( + [ + -1, + -1, + -1, + -1, + -1, + 1, + -1, + 1, + -1, + -1, + 1, + 1, + 1, + -1, + -1, + 1, + -1, + 1, + 1, + 1, + -1, + 1, + 1, + 1, + 0, + -i, + -n, + 0, + -i, + n, + 0, + i, + -n, + 0, + i, + n, + -i, + -n, + 0, + -i, + n, + 0, + i, + -n, + 0, + i, + n, + 0, + -n, + 0, + -i, + n, + 0, + -i, + -n, + 0, + i, + n, + 0, + i, + ], + [ + 3, 11, 7, 3, 7, 15, 3, 15, 13, 7, 19, 17, 7, 17, 6, 7, 6, 15, 17, 4, + 8, 17, 8, 10, 17, 10, 6, 8, 0, 16, 8, 16, 2, 8, 2, 10, 0, 12, 1, 0, 1, + 18, 0, 18, 16, 6, 10, 2, 6, 2, 13, 6, 13, 15, 2, 16, 18, 2, 18, 3, 2, + 3, 13, 18, 1, 9, 18, 9, 11, 18, 11, 3, 4, 14, 12, 4, 12, 0, 4, 0, 8, + 11, 9, 5, 11, 5, 19, 11, 19, 7, 19, 5, 14, 19, 14, 4, 19, 4, 17, 1, + 12, 14, 1, 14, 5, 1, 5, 9, + ], + t, + e + ), + (this.type = 'DodecahedronGeometry'), + (this.parameters = { radius: t, detail: e }); + } + } + const za = new Lt(), + Fa = new Lt(), + Oa = new Lt(), + Ha = new je(); + class Ga extends En { + constructor(t, e) { + if ( + (super(), + (this.type = 'EdgesGeometry'), + (this.parameters = { thresholdAngle: e }), + (e = void 0 !== e ? e : 1), + !0 === t.isGeometry) + ) + return void console.error( + 'THREE.EdgesGeometry no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' + ); + const n = Math.pow(10, 4), + i = Math.cos(ot * e), + r = t.getIndex(), + s = t.getAttribute('position'), + a = r ? r.count : s.count, + o = [0, 0, 0], + l = ['a', 'b', 'c'], + c = new Array(3), + h = {}, + u = []; + for (let t = 0; t < a; t += 3) { + r + ? ((o[0] = r.getX(t)), (o[1] = r.getX(t + 1)), (o[2] = r.getX(t + 2))) + : ((o[0] = t), (o[1] = t + 1), (o[2] = t + 2)); + const { a: e, b: a, c: d } = Ha; + if ( + (e.fromBufferAttribute(s, o[0]), + a.fromBufferAttribute(s, o[1]), + d.fromBufferAttribute(s, o[2]), + Ha.getNormal(Oa), + (c[0] = `${Math.round(e.x * n)},${Math.round(e.y * n)},${Math.round(e.z * n)}`), + (c[1] = `${Math.round(a.x * n)},${Math.round(a.y * n)},${Math.round(a.z * n)}`), + (c[2] = `${Math.round(d.x * n)},${Math.round(d.y * n)},${Math.round(d.z * n)}`), + c[0] !== c[1] && c[1] !== c[2] && c[2] !== c[0]) + ) + for (let t = 0; t < 3; t++) { + const e = (t + 1) % 3, + n = c[t], + r = c[e], + s = Ha[l[t]], + a = Ha[l[e]], + d = `${n}_${r}`, + p = `${r}_${n}`; + p in h && h[p] + ? (Oa.dot(h[p].normal) <= i && + (u.push(s.x, s.y, s.z), u.push(a.x, a.y, a.z)), + (h[p] = null)) + : d in h || + (h[d] = { index0: o[t], index1: o[e], normal: Oa.clone() }); + } + } + for (const t in h) + if (h[t]) { + const { index0: e, index1: n } = h[t]; + za.fromBufferAttribute(s, e), + Fa.fromBufferAttribute(s, n), + u.push(za.x, za.y, za.z), + u.push(Fa.x, Fa.y, Fa.z); + } + this.setAttribute('position', new mn(u, 3)); + } + } + const Ua = function (t, e, n) { + n = n || 2; + const i = e && e.length, + r = i ? e[0] * n : t.length; + let s = ka(t, 0, r, n, !0); + const a = []; + if (!s || s.next === s.prev) return a; + let o, l, c, h, u, d, p; + if ( + (i && + (s = (function (t, e, n, i) { + const r = []; + let s, a, o, l, c; + for (s = 0, a = e.length; s < a; s++) + (o = e[s] * i), + (l = s < a - 1 ? e[s + 1] * i : t.length), + (c = ka(t, o, l, i, !1)), + c === c.next && (c.steiner = !0), + r.push($a(c)); + for (r.sort(Za), s = 0; s < r.length; s++) + Ja(r[s], n), (n = Va(n, n.next)); + return n; + })(t, e, s, n)), + t.length > 80 * n) + ) { + (o = c = t[0]), (l = h = t[1]); + for (let e = n; e < r; e += n) + (u = t[e]), + (d = t[e + 1]), + u < o && (o = u), + d < l && (l = d), + u > c && (c = u), + d > h && (h = d); + (p = Math.max(c - o, h - l)), (p = 0 !== p ? 1 / p : 0); + } + return Wa(s, a, n, o, l, p), a; + }; + function ka(t, e, n, i, r) { + let s, a; + if ( + r === + (function (t, e, n, i) { + let r = 0; + for (let s = e, a = n - i; s < n; s += i) + (r += (t[a] - t[s]) * (t[s + 1] + t[a + 1])), (a = s); + return r; + })(t, e, n, i) > + 0 + ) + for (s = e; s < n; s += i) a = co(s, t[s], t[s + 1], a); + else for (s = n - i; s >= e; s -= i) a = co(s, t[s], t[s + 1], a); + return a && io(a, a.next) && (ho(a), (a = a.next)), a; + } + function Va(t, e) { + if (!t) return t; + e || (e = t); + let n, + i = t; + do { + if ( + ((n = !1), i.steiner || (!io(i, i.next) && 0 !== no(i.prev, i, i.next))) + ) + i = i.next; + else { + if ((ho(i), (i = e = i.prev), i === i.next)) break; + n = !0; + } + } while (n || i !== e); + return e; + } + function Wa(t, e, n, i, r, s, a) { + if (!t) return; + !a && + s && + (function (t, e, n, i) { + let r = t; + do { + null === r.z && (r.z = Ka(r.x, r.y, e, n, i)), + (r.prevZ = r.prev), + (r.nextZ = r.next), + (r = r.next); + } while (r !== t); + (r.prevZ.nextZ = null), + (r.prevZ = null), + (function (t) { + let e, + n, + i, + r, + s, + a, + o, + l, + c = 1; + do { + for (n = t, t = null, s = null, a = 0; n; ) { + for ( + a++, i = n, o = 0, e = 0; + e < c && (o++, (i = i.nextZ), i); + e++ + ); + for (l = c; o > 0 || (l > 0 && i); ) + 0 !== o && (0 === l || !i || n.z <= i.z) + ? ((r = n), (n = n.nextZ), o--) + : ((r = i), (i = i.nextZ), l--), + s ? (s.nextZ = r) : (t = r), + (r.prevZ = s), + (s = r); + n = i; + } + (s.nextZ = null), (c *= 2); + } while (a > 1); + })(r); + })(t, i, r, s); + let o, + l, + c = t; + for (; t.prev !== t.next; ) + if (((o = t.prev), (l = t.next), s ? qa(t, i, r, s) : ja(t))) + e.push(o.i / n), + e.push(t.i / n), + e.push(l.i / n), + ho(t), + (t = l.next), + (c = l.next); + else if ((t = l) === c) { + a + ? 1 === a + ? Wa((t = Xa(Va(t), e, n)), e, n, i, r, s, 2) + : 2 === a && Ya(t, e, n, i, r, s) + : Wa(Va(t), e, n, i, r, s, 1); + break; + } + } + function ja(t) { + const e = t.prev, + n = t, + i = t.next; + if (no(e, n, i) >= 0) return !1; + let r = t.next.next; + for (; r !== t.prev; ) { + if ( + to(e.x, e.y, n.x, n.y, i.x, i.y, r.x, r.y) && + no(r.prev, r, r.next) >= 0 + ) + return !1; + r = r.next; + } + return !0; + } + function qa(t, e, n, i) { + const r = t.prev, + s = t, + a = t.next; + if (no(r, s, a) >= 0) return !1; + const o = r.x < s.x ? (r.x < a.x ? r.x : a.x) : s.x < a.x ? s.x : a.x, + l = r.y < s.y ? (r.y < a.y ? r.y : a.y) : s.y < a.y ? s.y : a.y, + c = r.x > s.x ? (r.x > a.x ? r.x : a.x) : s.x > a.x ? s.x : a.x, + h = r.y > s.y ? (r.y > a.y ? r.y : a.y) : s.y > a.y ? s.y : a.y, + u = Ka(o, l, e, n, i), + d = Ka(c, h, e, n, i); + let p = t.prevZ, + m = t.nextZ; + for (; p && p.z >= u && m && m.z <= d; ) { + if ( + p !== t.prev && + p !== t.next && + to(r.x, r.y, s.x, s.y, a.x, a.y, p.x, p.y) && + no(p.prev, p, p.next) >= 0 + ) + return !1; + if ( + ((p = p.prevZ), + m !== t.prev && + m !== t.next && + to(r.x, r.y, s.x, s.y, a.x, a.y, m.x, m.y) && + no(m.prev, m, m.next) >= 0) + ) + return !1; + m = m.nextZ; + } + for (; p && p.z >= u; ) { + if ( + p !== t.prev && + p !== t.next && + to(r.x, r.y, s.x, s.y, a.x, a.y, p.x, p.y) && + no(p.prev, p, p.next) >= 0 + ) + return !1; + p = p.prevZ; + } + for (; m && m.z <= d; ) { + if ( + m !== t.prev && + m !== t.next && + to(r.x, r.y, s.x, s.y, a.x, a.y, m.x, m.y) && + no(m.prev, m, m.next) >= 0 + ) + return !1; + m = m.nextZ; + } + return !0; + } + function Xa(t, e, n) { + let i = t; + do { + const r = i.prev, + s = i.next.next; + !io(r, s) && + ro(r, i, i.next, s) && + oo(r, s) && + oo(s, r) && + (e.push(r.i / n), + e.push(i.i / n), + e.push(s.i / n), + ho(i), + ho(i.next), + (i = t = s)), + (i = i.next); + } while (i !== t); + return Va(i); + } + function Ya(t, e, n, i, r, s) { + let a = t; + do { + let t = a.next.next; + for (; t !== a.prev; ) { + if (a.i !== t.i && eo(a, t)) { + let o = lo(a, t); + return ( + (a = Va(a, a.next)), + (o = Va(o, o.next)), + Wa(a, e, n, i, r, s), + void Wa(o, e, n, i, r, s) + ); + } + t = t.next; + } + a = a.next; + } while (a !== t); + } + function Za(t, e) { + return t.x - e.x; + } + function Ja(t, e) { + if ( + (e = (function (t, e) { + let n = e; + const i = t.x, + r = t.y; + let s, + a = -1 / 0; + do { + if (r <= n.y && r >= n.next.y && n.next.y !== n.y) { + const t = n.x + ((r - n.y) * (n.next.x - n.x)) / (n.next.y - n.y); + if (t <= i && t > a) { + if (((a = t), t === i)) { + if (r === n.y) return n; + if (r === n.next.y) return n.next; + } + s = n.x < n.next.x ? n : n.next; + } + } + n = n.next; + } while (n !== e); + if (!s) return null; + if (i === a) return s; + const o = s, + l = s.x, + c = s.y; + let h, + u = 1 / 0; + n = s; + do { + i >= n.x && + n.x >= l && + i !== n.x && + to(r < c ? i : a, r, l, c, r < c ? a : i, r, n.x, n.y) && + ((h = Math.abs(r - n.y) / (i - n.x)), + oo(n, t) && + (h < u || + (h === u && (n.x > s.x || (n.x === s.x && Qa(s, n))))) && + ((s = n), (u = h))), + (n = n.next); + } while (n !== o); + return s; + })(t, e)) + ) { + const n = lo(e, t); + Va(e, e.next), Va(n, n.next); + } + } + function Qa(t, e) { + return no(t.prev, t, e.prev) < 0 && no(e.next, t, t.next) < 0; + } + function Ka(t, e, n, i, r) { + return ( + (t = + 1431655765 & + ((t = + 858993459 & + ((t = + 252645135 & + ((t = 16711935 & ((t = 32767 * (t - n) * r) | (t << 8))) | + (t << 4))) | + (t << 2))) | + (t << 1))) | + ((e = + 1431655765 & + ((e = + 858993459 & + ((e = + 252645135 & + ((e = 16711935 & ((e = 32767 * (e - i) * r) | (e << 8))) | + (e << 4))) | + (e << 2))) | + (e << 1))) << + 1) + ); + } + function $a(t) { + let e = t, + n = t; + do { + (e.x < n.x || (e.x === n.x && e.y < n.y)) && (n = e), (e = e.next); + } while (e !== t); + return n; + } + function to(t, e, n, i, r, s, a, o) { + return ( + (r - a) * (e - o) - (t - a) * (s - o) >= 0 && + (t - a) * (i - o) - (n - a) * (e - o) >= 0 && + (n - a) * (s - o) - (r - a) * (i - o) >= 0 + ); + } + function eo(t, e) { + return ( + t.next.i !== e.i && + t.prev.i !== e.i && + !(function (t, e) { + let n = t; + do { + if ( + n.i !== t.i && + n.next.i !== t.i && + n.i !== e.i && + n.next.i !== e.i && + ro(n, n.next, t, e) + ) + return !0; + n = n.next; + } while (n !== t); + return !1; + })(t, e) && + ((oo(t, e) && + oo(e, t) && + (function (t, e) { + let n = t, + i = !1; + const r = (t.x + e.x) / 2, + s = (t.y + e.y) / 2; + do { + n.y > s != n.next.y > s && + n.next.y !== n.y && + r < ((n.next.x - n.x) * (s - n.y)) / (n.next.y - n.y) + n.x && + (i = !i), + (n = n.next); + } while (n !== t); + return i; + })(t, e) && + (no(t.prev, t, e.prev) || no(t, e.prev, e))) || + (io(t, e) && no(t.prev, t, t.next) > 0 && no(e.prev, e, e.next) > 0)) + ); + } + function no(t, e, n) { + return (e.y - t.y) * (n.x - e.x) - (e.x - t.x) * (n.y - e.y); + } + function io(t, e) { + return t.x === e.x && t.y === e.y; + } + function ro(t, e, n, i) { + const r = ao(no(t, e, n)), + s = ao(no(t, e, i)), + a = ao(no(n, i, t)), + o = ao(no(n, i, e)); + return ( + (r !== s && a !== o) || + !(0 !== r || !so(t, n, e)) || + !(0 !== s || !so(t, i, e)) || + !(0 !== a || !so(n, t, i)) || + !(0 !== o || !so(n, e, i)) + ); + } + function so(t, e, n) { + return ( + e.x <= Math.max(t.x, n.x) && + e.x >= Math.min(t.x, n.x) && + e.y <= Math.max(t.y, n.y) && + e.y >= Math.min(t.y, n.y) + ); + } + function ao(t) { + return t > 0 ? 1 : t < 0 ? -1 : 0; + } + function oo(t, e) { + return no(t.prev, t, t.next) < 0 + ? no(t, e, t.next) >= 0 && no(t, t.prev, e) >= 0 + : no(t, e, t.prev) < 0 || no(t, t.next, e) < 0; + } + function lo(t, e) { + const n = new uo(t.i, t.x, t.y), + i = new uo(e.i, e.x, e.y), + r = t.next, + s = e.prev; + return ( + (t.next = e), + (e.prev = t), + (n.next = r), + (r.prev = n), + (i.next = n), + (n.prev = i), + (s.next = i), + (i.prev = s), + i + ); + } + function co(t, e, n, i) { + const r = new uo(t, e, n); + return ( + i + ? ((r.next = i.next), (r.prev = i), (i.next.prev = r), (i.next = r)) + : ((r.prev = r), (r.next = r)), + r + ); + } + function ho(t) { + (t.next.prev = t.prev), + (t.prev.next = t.next), + t.prevZ && (t.prevZ.nextZ = t.nextZ), + t.nextZ && (t.nextZ.prevZ = t.prevZ); + } + function uo(t, e, n) { + (this.i = t), + (this.x = e), + (this.y = n), + (this.prev = null), + (this.next = null), + (this.z = null), + (this.prevZ = null), + (this.nextZ = null), + (this.steiner = !1); + } + class po { + static area(t) { + const e = t.length; + let n = 0; + for (let i = e - 1, r = 0; r < e; i = r++) + n += t[i].x * t[r].y - t[r].x * t[i].y; + return 0.5 * n; + } + static isClockWise(t) { + return po.area(t) < 0; + } + static triangulateShape(t, e) { + const n = [], + i = [], + r = []; + mo(t), fo(n, t); + let s = t.length; + e.forEach(mo); + for (let t = 0; t < e.length; t++) + i.push(s), (s += e[t].length), fo(n, e[t]); + const a = Ua(n, i); + for (let t = 0; t < a.length; t += 3) r.push(a.slice(t, t + 3)); + return r; + } + } + function mo(t) { + const e = t.length; + e > 2 && t[e - 1].equals(t[0]) && t.pop(); + } + function fo(t, e) { + for (let n = 0; n < e.length; n++) t.push(e[n].x), t.push(e[n].y); + } + class go extends En { + constructor(t, e) { + super(), + (this.type = 'ExtrudeGeometry'), + (this.parameters = { shapes: t, options: e }), + (t = Array.isArray(t) ? t : [t]); + const n = this, + i = [], + r = []; + for (let e = 0, n = t.length; e < n; e++) { + s(t[e]); + } + function s(t) { + const s = [], + a = void 0 !== e.curveSegments ? e.curveSegments : 12, + o = void 0 !== e.steps ? e.steps : 1; + let l = void 0 !== e.depth ? e.depth : 100, + c = void 0 === e.bevelEnabled || e.bevelEnabled, + h = void 0 !== e.bevelThickness ? e.bevelThickness : 6, + u = void 0 !== e.bevelSize ? e.bevelSize : h - 2, + d = void 0 !== e.bevelOffset ? e.bevelOffset : 0, + p = void 0 !== e.bevelSegments ? e.bevelSegments : 3; + const m = e.extrudePath, + f = void 0 !== e.UVGenerator ? e.UVGenerator : vo; + void 0 !== e.amount && + (console.warn( + 'THREE.ExtrudeBufferGeometry: amount has been renamed to depth.' + ), + (l = e.amount)); + let g, + v, + y, + x, + _, + w = !1; + m && + ((g = m.getSpacedPoints(o)), + (w = !0), + (c = !1), + (v = m.computeFrenetFrames(o, !1)), + (y = new Lt()), + (x = new Lt()), + (_ = new Lt())), + c || ((p = 0), (h = 0), (u = 0), (d = 0)); + const b = t.extractPoints(a); + let M = b.shape; + const S = b.holes; + if (!po.isClockWise(M)) { + M = M.reverse(); + for (let t = 0, e = S.length; t < e; t++) { + const e = S[t]; + po.isClockWise(e) && (S[t] = e.reverse()); + } + } + const T = po.triangulateShape(M, S), + E = M; + for (let t = 0, e = S.length; t < e; t++) { + const e = S[t]; + M = M.concat(e); + } + function A(t, e, n) { + return ( + e || console.error('THREE.ExtrudeGeometry: vec does not exist'), + e.clone().multiplyScalar(n).add(t) + ); + } + const L = M.length, + R = T.length; + function C(t, e, n) { + let i, r, s; + const a = t.x - e.x, + o = t.y - e.y, + l = n.x - t.x, + c = n.y - t.y, + h = a * a + o * o, + u = a * c - o * l; + if (Math.abs(u) > Number.EPSILON) { + const u = Math.sqrt(h), + d = Math.sqrt(l * l + c * c), + p = e.x - o / u, + m = e.y + a / u, + f = + ((n.x - c / d - p) * c - (n.y + l / d - m) * l) / + (a * c - o * l); + (i = p + a * f - t.x), (r = m + o * f - t.y); + const g = i * i + r * r; + if (g <= 2) return new vt(i, r); + s = Math.sqrt(g / 2); + } else { + let t = !1; + a > Number.EPSILON + ? l > Number.EPSILON && (t = !0) + : a < -Number.EPSILON + ? l < -Number.EPSILON && (t = !0) + : Math.sign(o) === Math.sign(c) && (t = !0), + t + ? ((i = -o), (r = a), (s = Math.sqrt(h))) + : ((i = a), (r = o), (s = Math.sqrt(h / 2))); + } + return new vt(i / s, r / s); + } + const P = []; + for ( + let t = 0, e = E.length, n = e - 1, i = t + 1; + t < e; + t++, n++, i++ + ) + n === e && (n = 0), i === e && (i = 0), (P[t] = C(E[t], E[n], E[i])); + const D = []; + let I, + N = P.concat(); + for (let t = 0, e = S.length; t < e; t++) { + const e = S[t]; + I = []; + for ( + let t = 0, n = e.length, i = n - 1, r = t + 1; + t < n; + t++, i++, r++ + ) + i === n && (i = 0), + r === n && (r = 0), + (I[t] = C(e[t], e[i], e[r])); + D.push(I), (N = N.concat(I)); + } + for (let t = 0; t < p; t++) { + const e = t / p, + n = h * Math.cos((e * Math.PI) / 2), + i = u * Math.sin((e * Math.PI) / 2) + d; + for (let t = 0, e = E.length; t < e; t++) { + const e = A(E[t], P[t], i); + F(e.x, e.y, -n); + } + for (let t = 0, e = S.length; t < e; t++) { + const e = S[t]; + I = D[t]; + for (let t = 0, r = e.length; t < r; t++) { + const r = A(e[t], I[t], i); + F(r.x, r.y, -n); + } + } + } + const B = u + d; + for (let t = 0; t < L; t++) { + const e = c ? A(M[t], N[t], B) : M[t]; + w + ? (x.copy(v.normals[0]).multiplyScalar(e.x), + y.copy(v.binormals[0]).multiplyScalar(e.y), + _.copy(g[0]).add(x).add(y), + F(_.x, _.y, _.z)) + : F(e.x, e.y, 0); + } + for (let t = 1; t <= o; t++) + for (let e = 0; e < L; e++) { + const n = c ? A(M[e], N[e], B) : M[e]; + w + ? (x.copy(v.normals[t]).multiplyScalar(n.x), + y.copy(v.binormals[t]).multiplyScalar(n.y), + _.copy(g[t]).add(x).add(y), + F(_.x, _.y, _.z)) + : F(n.x, n.y, (l / o) * t); + } + for (let t = p - 1; t >= 0; t--) { + const e = t / p, + n = h * Math.cos((e * Math.PI) / 2), + i = u * Math.sin((e * Math.PI) / 2) + d; + for (let t = 0, e = E.length; t < e; t++) { + const e = A(E[t], P[t], i); + F(e.x, e.y, l + n); + } + for (let t = 0, e = S.length; t < e; t++) { + const e = S[t]; + I = D[t]; + for (let t = 0, r = e.length; t < r; t++) { + const r = A(e[t], I[t], i); + w ? F(r.x, r.y + g[o - 1].y, g[o - 1].x + n) : F(r.x, r.y, l + n); + } + } + } + function z(t, e) { + let n = t.length; + for (; --n >= 0; ) { + const i = n; + let r = n - 1; + r < 0 && (r = t.length - 1); + for (let t = 0, n = o + 2 * p; t < n; t++) { + const n = L * t, + s = L * (t + 1); + H(e + i + n, e + r + n, e + r + s, e + i + s); + } + } + } + function F(t, e, n) { + s.push(t), s.push(e), s.push(n); + } + function O(t, e, r) { + G(t), G(e), G(r); + const s = i.length / 3, + a = f.generateTopUV(n, i, s - 3, s - 2, s - 1); + U(a[0]), U(a[1]), U(a[2]); + } + function H(t, e, r, s) { + G(t), G(e), G(s), G(e), G(r), G(s); + const a = i.length / 3, + o = f.generateSideWallUV(n, i, a - 6, a - 3, a - 2, a - 1); + U(o[0]), U(o[1]), U(o[3]), U(o[1]), U(o[2]), U(o[3]); + } + function G(t) { + i.push(s[3 * t + 0]), i.push(s[3 * t + 1]), i.push(s[3 * t + 2]); + } + function U(t) { + r.push(t.x), r.push(t.y); + } + !(function () { + const t = i.length / 3; + if (c) { + let t = 0, + e = L * t; + for (let t = 0; t < R; t++) { + const n = T[t]; + O(n[2] + e, n[1] + e, n[0] + e); + } + (t = o + 2 * p), (e = L * t); + for (let t = 0; t < R; t++) { + const n = T[t]; + O(n[0] + e, n[1] + e, n[2] + e); + } + } else { + for (let t = 0; t < R; t++) { + const e = T[t]; + O(e[2], e[1], e[0]); + } + for (let t = 0; t < R; t++) { + const e = T[t]; + O(e[0] + L * o, e[1] + L * o, e[2] + L * o); + } + } + n.addGroup(t, i.length / 3 - t, 0); + })(), + (function () { + const t = i.length / 3; + let e = 0; + z(E, e), (e += E.length); + for (let t = 0, n = S.length; t < n; t++) { + const n = S[t]; + z(n, e), (e += n.length); + } + n.addGroup(t, i.length / 3 - t, 1); + })(); + } + this.setAttribute('position', new mn(i, 3)), + this.setAttribute('uv', new mn(r, 2)), + this.computeVertexNormals(); + } + toJSON() { + const t = En.prototype.toJSON.call(this); + return (function (t, e, n) { + if (((n.shapes = []), Array.isArray(t))) + for (let e = 0, i = t.length; e < i; e++) { + const i = t[e]; + n.shapes.push(i.uuid); + } + else n.shapes.push(t.uuid); + void 0 !== e.extrudePath && + (n.options.extrudePath = e.extrudePath.toJSON()); + return n; + })(this.parameters.shapes, this.parameters.options, t); + } + } + const vo = { + generateTopUV: function (t, e, n, i, r) { + const s = e[3 * n], + a = e[3 * n + 1], + o = e[3 * i], + l = e[3 * i + 1], + c = e[3 * r], + h = e[3 * r + 1]; + return [new vt(s, a), new vt(o, l), new vt(c, h)]; + }, + generateSideWallUV: function (t, e, n, i, r, s) { + const a = e[3 * n], + o = e[3 * n + 1], + l = e[3 * n + 2], + c = e[3 * i], + h = e[3 * i + 1], + u = e[3 * i + 2], + d = e[3 * r], + p = e[3 * r + 1], + m = e[3 * r + 2], + f = e[3 * s], + g = e[3 * s + 1], + v = e[3 * s + 2]; + return Math.abs(o - h) < 0.01 + ? [ + new vt(a, 1 - l), + new vt(c, 1 - u), + new vt(d, 1 - m), + new vt(f, 1 - v), + ] + : [ + new vt(o, 1 - l), + new vt(h, 1 - u), + new vt(p, 1 - m), + new vt(g, 1 - v), + ]; + }, + }; + class yo extends Na { + constructor(t = 1, e = 0) { + const n = (1 + Math.sqrt(5)) / 2; + super( + [ + -1, + n, + 0, + 1, + n, + 0, + -1, + -n, + 0, + 1, + -n, + 0, + 0, + -1, + n, + 0, + 1, + n, + 0, + -1, + -n, + 0, + 1, + -n, + n, + 0, + -1, + n, + 0, + 1, + -n, + 0, + -1, + -n, + 0, + 1, + ], + [ + 0, 11, 5, 0, 5, 1, 0, 1, 7, 0, 7, 10, 0, 10, 11, 1, 5, 9, 5, 11, 4, + 11, 10, 2, 10, 7, 6, 7, 1, 8, 3, 9, 4, 3, 4, 2, 3, 2, 6, 3, 6, 8, 3, + 8, 9, 4, 9, 5, 2, 4, 11, 6, 2, 10, 8, 6, 7, 9, 8, 1, + ], + t, + e + ), + (this.type = 'IcosahedronGeometry'), + (this.parameters = { radius: t, detail: e }); + } + } + class xo extends En { + constructor(t, e = 12, n = 0, i = 2 * Math.PI) { + super(), + (this.type = 'LatheGeometry'), + (this.parameters = { + points: t, + segments: e, + phiStart: n, + phiLength: i, + }), + (e = Math.floor(e)), + (i = ht(i, 0, 2 * Math.PI)); + const r = [], + s = [], + a = [], + o = 1 / e, + l = new Lt(), + c = new vt(); + for (let r = 0; r <= e; r++) { + const h = n + r * o * i, + u = Math.sin(h), + d = Math.cos(h); + for (let n = 0; n <= t.length - 1; n++) + (l.x = t[n].x * u), + (l.y = t[n].y), + (l.z = t[n].x * d), + s.push(l.x, l.y, l.z), + (c.x = r / e), + (c.y = n / (t.length - 1)), + a.push(c.x, c.y); + } + for (let n = 0; n < e; n++) + for (let e = 0; e < t.length - 1; e++) { + const i = e + n * t.length, + s = i, + a = i + t.length, + o = i + t.length + 1, + l = i + 1; + r.push(s, a, l), r.push(a, o, l); + } + if ( + (this.setIndex(r), + this.setAttribute('position', new mn(s, 3)), + this.setAttribute('uv', new mn(a, 2)), + this.computeVertexNormals(), + i === 2 * Math.PI) + ) { + const n = this.attributes.normal.array, + i = new Lt(), + r = new Lt(), + s = new Lt(), + a = e * t.length * 3; + for (let e = 0, o = 0; e < t.length; e++, o += 3) + (i.x = n[o + 0]), + (i.y = n[o + 1]), + (i.z = n[o + 2]), + (r.x = n[a + o + 0]), + (r.y = n[a + o + 1]), + (r.z = n[a + o + 2]), + s.addVectors(i, r).normalize(), + (n[o + 0] = n[a + o + 0] = s.x), + (n[o + 1] = n[a + o + 1] = s.y), + (n[o + 2] = n[a + o + 2] = s.z); + } + } + } + class _o extends Na { + constructor(t = 1, e = 0) { + super( + [1, 0, 0, -1, 0, 0, 0, 1, 0, 0, -1, 0, 0, 0, 1, 0, 0, -1], + [ + 0, 2, 4, 0, 4, 3, 0, 3, 5, 0, 5, 2, 1, 2, 5, 1, 5, 3, 1, 3, 4, 1, 4, + 2, + ], + t, + e + ), + (this.type = 'OctahedronGeometry'), + (this.parameters = { radius: t, detail: e }); + } + } + class wo extends En { + constructor(t, e, n) { + super(), + (this.type = 'ParametricGeometry'), + (this.parameters = { func: t, slices: e, stacks: n }); + const i = [], + r = [], + s = [], + a = [], + o = 1e-5, + l = new Lt(), + c = new Lt(), + h = new Lt(), + u = new Lt(), + d = new Lt(); + t.length < 3 && + console.error( + 'THREE.ParametricGeometry: Function must now modify a Vector3 as third parameter.' + ); + const p = e + 1; + for (let i = 0; i <= n; i++) { + const p = i / n; + for (let n = 0; n <= e; n++) { + const i = n / e; + t(i, p, c), + r.push(c.x, c.y, c.z), + i - o >= 0 + ? (t(i - o, p, h), u.subVectors(c, h)) + : (t(i + o, p, h), u.subVectors(h, c)), + p - o >= 0 + ? (t(i, p - o, h), d.subVectors(c, h)) + : (t(i, p + o, h), d.subVectors(h, c)), + l.crossVectors(u, d).normalize(), + s.push(l.x, l.y, l.z), + a.push(i, p); + } + } + for (let t = 0; t < n; t++) + for (let n = 0; n < e; n++) { + const e = t * p + n, + r = t * p + n + 1, + s = (t + 1) * p + n + 1, + a = (t + 1) * p + n; + i.push(e, r, a), i.push(r, s, a); + } + this.setIndex(i), + this.setAttribute('position', new mn(r, 3)), + this.setAttribute('normal', new mn(s, 3)), + this.setAttribute('uv', new mn(a, 2)); + } + } + class bo extends En { + constructor(t = 0.5, e = 1, n = 8, i = 1, r = 0, s = 2 * Math.PI) { + super(), + (this.type = 'RingGeometry'), + (this.parameters = { + innerRadius: t, + outerRadius: e, + thetaSegments: n, + phiSegments: i, + thetaStart: r, + thetaLength: s, + }), + (n = Math.max(3, n)); + const a = [], + o = [], + l = [], + c = []; + let h = t; + const u = (e - t) / (i = Math.max(1, i)), + d = new Lt(), + p = new vt(); + for (let t = 0; t <= i; t++) { + for (let t = 0; t <= n; t++) { + const i = r + (t / n) * s; + (d.x = h * Math.cos(i)), + (d.y = h * Math.sin(i)), + o.push(d.x, d.y, d.z), + l.push(0, 0, 1), + (p.x = (d.x / e + 1) / 2), + (p.y = (d.y / e + 1) / 2), + c.push(p.x, p.y); + } + h += u; + } + for (let t = 0; t < i; t++) { + const e = t * (n + 1); + for (let t = 0; t < n; t++) { + const i = t + e, + r = i, + s = i + n + 1, + o = i + n + 2, + l = i + 1; + a.push(r, s, l), a.push(s, o, l); + } + } + this.setIndex(a), + this.setAttribute('position', new mn(o, 3)), + this.setAttribute('normal', new mn(l, 3)), + this.setAttribute('uv', new mn(c, 2)); + } + } + class Mo extends En { + constructor(t, e = 12) { + super(), + (this.type = 'ShapeGeometry'), + (this.parameters = { shapes: t, curveSegments: e }); + const n = [], + i = [], + r = [], + s = []; + let a = 0, + o = 0; + if (!1 === Array.isArray(t)) l(t); + else + for (let e = 0; e < t.length; e++) + l(t[e]), this.addGroup(a, o, e), (a += o), (o = 0); + function l(t) { + const a = i.length / 3, + l = t.extractPoints(e); + let c = l.shape; + const h = l.holes; + !1 === po.isClockWise(c) && (c = c.reverse()); + for (let t = 0, e = h.length; t < e; t++) { + const e = h[t]; + !0 === po.isClockWise(e) && (h[t] = e.reverse()); + } + const u = po.triangulateShape(c, h); + for (let t = 0, e = h.length; t < e; t++) { + const e = h[t]; + c = c.concat(e); + } + for (let t = 0, e = c.length; t < e; t++) { + const e = c[t]; + i.push(e.x, e.y, 0), r.push(0, 0, 1), s.push(e.x, e.y); + } + for (let t = 0, e = u.length; t < e; t++) { + const e = u[t], + i = e[0] + a, + r = e[1] + a, + s = e[2] + a; + n.push(i, r, s), (o += 3); + } + } + this.setIndex(n), + this.setAttribute('position', new mn(i, 3)), + this.setAttribute('normal', new mn(r, 3)), + this.setAttribute('uv', new mn(s, 2)); + } + toJSON() { + const t = En.prototype.toJSON.call(this); + return (function (t, e) { + if (((e.shapes = []), Array.isArray(t))) + for (let n = 0, i = t.length; n < i; n++) { + const i = t[n]; + e.shapes.push(i.uuid); + } + else e.shapes.push(t.uuid); + return e; + })(this.parameters.shapes, t); + } + } + class So extends En { + constructor( + t = 1, + e = 8, + n = 6, + i = 0, + r = 2 * Math.PI, + s = 0, + a = Math.PI + ) { + super(), + (this.type = 'SphereGeometry'), + (this.parameters = { + radius: t, + widthSegments: e, + heightSegments: n, + phiStart: i, + phiLength: r, + thetaStart: s, + thetaLength: a, + }), + (e = Math.max(3, Math.floor(e))), + (n = Math.max(2, Math.floor(n))); + const o = Math.min(s + a, Math.PI); + let l = 0; + const c = [], + h = new Lt(), + u = new Lt(), + d = [], + p = [], + m = [], + f = []; + for (let d = 0; d <= n; d++) { + const g = [], + v = d / n; + let y = 0; + 0 == d && 0 == s + ? (y = 0.5 / e) + : d == n && o == Math.PI && (y = -0.5 / e); + for (let n = 0; n <= e; n++) { + const o = n / e; + (h.x = -t * Math.cos(i + o * r) * Math.sin(s + v * a)), + (h.y = t * Math.cos(s + v * a)), + (h.z = t * Math.sin(i + o * r) * Math.sin(s + v * a)), + p.push(h.x, h.y, h.z), + u.copy(h).normalize(), + m.push(u.x, u.y, u.z), + f.push(o + y, 1 - v), + g.push(l++); + } + c.push(g); + } + for (let t = 0; t < n; t++) + for (let i = 0; i < e; i++) { + const e = c[t][i + 1], + r = c[t][i], + a = c[t + 1][i], + l = c[t + 1][i + 1]; + (0 !== t || s > 0) && d.push(e, r, l), + (t !== n - 1 || o < Math.PI) && d.push(r, a, l); + } + this.setIndex(d), + this.setAttribute('position', new mn(p, 3)), + this.setAttribute('normal', new mn(m, 3)), + this.setAttribute('uv', new mn(f, 2)); + } + } + class To extends Na { + constructor(t = 1, e = 0) { + super( + [1, 1, 1, -1, -1, 1, -1, 1, -1, 1, -1, -1], + [2, 1, 0, 0, 3, 2, 1, 3, 0, 2, 3, 1], + t, + e + ), + (this.type = 'TetrahedronGeometry'), + (this.parameters = { radius: t, detail: e }); + } + } + class Eo extends go { + constructor(t, e = {}) { + const n = e.font; + if (!n || !n.isFont) + return ( + console.error( + 'THREE.TextGeometry: font parameter is not an instance of THREE.Font.' + ), + new En() + ); + const i = n.generateShapes(t, e.size); + (e.depth = void 0 !== e.height ? e.height : 50), + void 0 === e.bevelThickness && (e.bevelThickness = 10), + void 0 === e.bevelSize && (e.bevelSize = 8), + void 0 === e.bevelEnabled && (e.bevelEnabled = !1), + super(i, e), + (this.type = 'TextGeometry'); + } + } + class Ao extends En { + constructor(t = 1, e = 0.4, n = 8, i = 6, r = 2 * Math.PI) { + super(), + (this.type = 'TorusGeometry'), + (this.parameters = { + radius: t, + tube: e, + radialSegments: n, + tubularSegments: i, + arc: r, + }), + (n = Math.floor(n)), + (i = Math.floor(i)); + const s = [], + a = [], + o = [], + l = [], + c = new Lt(), + h = new Lt(), + u = new Lt(); + for (let s = 0; s <= n; s++) + for (let d = 0; d <= i; d++) { + const p = (d / i) * r, + m = (s / n) * Math.PI * 2; + (h.x = (t + e * Math.cos(m)) * Math.cos(p)), + (h.y = (t + e * Math.cos(m)) * Math.sin(p)), + (h.z = e * Math.sin(m)), + a.push(h.x, h.y, h.z), + (c.x = t * Math.cos(p)), + (c.y = t * Math.sin(p)), + u.subVectors(h, c).normalize(), + o.push(u.x, u.y, u.z), + l.push(d / i), + l.push(s / n); + } + for (let t = 1; t <= n; t++) + for (let e = 1; e <= i; e++) { + const n = (i + 1) * t + e - 1, + r = (i + 1) * (t - 1) + e - 1, + a = (i + 1) * (t - 1) + e, + o = (i + 1) * t + e; + s.push(n, r, o), s.push(r, a, o); + } + this.setIndex(s), + this.setAttribute('position', new mn(a, 3)), + this.setAttribute('normal', new mn(o, 3)), + this.setAttribute('uv', new mn(l, 2)); + } + } + class Lo extends En { + constructor(t = 1, e = 0.4, n = 64, i = 8, r = 2, s = 3) { + super(), + (this.type = 'TorusKnotGeometry'), + (this.parameters = { + radius: t, + tube: e, + tubularSegments: n, + radialSegments: i, + p: r, + q: s, + }), + (n = Math.floor(n)), + (i = Math.floor(i)); + const a = [], + o = [], + l = [], + c = [], + h = new Lt(), + u = new Lt(), + d = new Lt(), + p = new Lt(), + m = new Lt(), + f = new Lt(), + g = new Lt(); + for (let a = 0; a <= n; ++a) { + const y = (a / n) * r * Math.PI * 2; + v(y, r, s, t, d), + v(y + 0.01, r, s, t, p), + f.subVectors(p, d), + g.addVectors(p, d), + m.crossVectors(f, g), + g.crossVectors(m, f), + m.normalize(), + g.normalize(); + for (let t = 0; t <= i; ++t) { + const r = (t / i) * Math.PI * 2, + s = -e * Math.cos(r), + p = e * Math.sin(r); + (h.x = d.x + (s * g.x + p * m.x)), + (h.y = d.y + (s * g.y + p * m.y)), + (h.z = d.z + (s * g.z + p * m.z)), + o.push(h.x, h.y, h.z), + u.subVectors(h, d).normalize(), + l.push(u.x, u.y, u.z), + c.push(a / n), + c.push(t / i); + } + } + for (let t = 1; t <= n; t++) + for (let e = 1; e <= i; e++) { + const n = (i + 1) * (t - 1) + (e - 1), + r = (i + 1) * t + (e - 1), + s = (i + 1) * t + e, + o = (i + 1) * (t - 1) + e; + a.push(n, r, o), a.push(r, s, o); + } + function v(t, e, n, i, r) { + const s = Math.cos(t), + a = Math.sin(t), + o = (n / e) * t, + l = Math.cos(o); + (r.x = i * (2 + l) * 0.5 * s), + (r.y = i * (2 + l) * a * 0.5), + (r.z = i * Math.sin(o) * 0.5); + } + this.setIndex(a), + this.setAttribute('position', new mn(o, 3)), + this.setAttribute('normal', new mn(l, 3)), + this.setAttribute('uv', new mn(c, 2)); + } + } + class Ro extends En { + constructor(t, e = 64, n = 1, i = 8, r = !1) { + super(), + (this.type = 'TubeGeometry'), + (this.parameters = { + path: t, + tubularSegments: e, + radius: n, + radialSegments: i, + closed: r, + }); + const s = t.computeFrenetFrames(e, r); + (this.tangents = s.tangents), + (this.normals = s.normals), + (this.binormals = s.binormals); + const a = new Lt(), + o = new Lt(), + l = new vt(); + let c = new Lt(); + const h = [], + u = [], + d = [], + p = []; + function m(r) { + c = t.getPointAt(r / e, c); + const l = s.normals[r], + d = s.binormals[r]; + for (let t = 0; t <= i; t++) { + const e = (t / i) * Math.PI * 2, + r = Math.sin(e), + s = -Math.cos(e); + (o.x = s * l.x + r * d.x), + (o.y = s * l.y + r * d.y), + (o.z = s * l.z + r * d.z), + o.normalize(), + u.push(o.x, o.y, o.z), + (a.x = c.x + n * o.x), + (a.y = c.y + n * o.y), + (a.z = c.z + n * o.z), + h.push(a.x, a.y, a.z); + } + } + !(function () { + for (let t = 0; t < e; t++) m(t); + m(!1 === r ? e : 0), + (function () { + for (let t = 0; t <= e; t++) + for (let n = 0; n <= i; n++) + (l.x = t / e), (l.y = n / i), d.push(l.x, l.y); + })(), + (function () { + for (let t = 1; t <= e; t++) + for (let e = 1; e <= i; e++) { + const n = (i + 1) * (t - 1) + (e - 1), + r = (i + 1) * t + (e - 1), + s = (i + 1) * t + e, + a = (i + 1) * (t - 1) + e; + p.push(n, r, a), p.push(r, s, a); + } + })(); + })(), + this.setIndex(p), + this.setAttribute('position', new mn(h, 3)), + this.setAttribute('normal', new mn(u, 3)), + this.setAttribute('uv', new mn(d, 2)); + } + toJSON() { + const t = En.prototype.toJSON.call(this); + return (t.path = this.parameters.path.toJSON()), t; + } + } + class Co extends En { + constructor(t) { + if ((super(), (this.type = 'WireframeGeometry'), !0 === t.isGeometry)) + return void console.error( + 'THREE.WireframeGeometry no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' + ); + const e = [], + n = [0, 0], + i = {}, + r = new Lt(); + if (null !== t.index) { + const s = t.attributes.position, + a = t.index; + let o = t.groups; + 0 === o.length && + (o = [{ start: 0, count: a.count, materialIndex: 0 }]); + for (let t = 0, e = o.length; t < e; ++t) { + const e = o[t], + r = e.start; + for (let t = r, s = r + e.count; t < s; t += 3) + for (let e = 0; e < 3; e++) { + const r = a.getX(t + e), + s = a.getX(t + ((e + 1) % 3)); + (n[0] = Math.min(r, s)), (n[1] = Math.max(r, s)); + const o = n[0] + ',' + n[1]; + void 0 === i[o] && (i[o] = { index1: n[0], index2: n[1] }); + } + } + for (const t in i) { + const n = i[t]; + r.fromBufferAttribute(s, n.index1), + e.push(r.x, r.y, r.z), + r.fromBufferAttribute(s, n.index2), + e.push(r.x, r.y, r.z); + } + } else { + const n = t.attributes.position; + for (let t = 0, i = n.count / 3; t < i; t++) + for (let i = 0; i < 3; i++) { + const s = 3 * t + i; + r.fromBufferAttribute(n, s), e.push(r.x, r.y, r.z); + const a = 3 * t + ((i + 1) % 3); + r.fromBufferAttribute(n, a), e.push(r.x, r.y, r.z); + } + } + this.setAttribute('position', new mn(e, 3)); + } + } + var Po = Object.freeze({ + __proto__: null, + BoxGeometry: qn, + BoxBufferGeometry: qn, + CircleGeometry: Pa, + CircleBufferGeometry: Pa, + ConeGeometry: Ia, + ConeBufferGeometry: Ia, + CylinderGeometry: Da, + CylinderBufferGeometry: Da, + DodecahedronGeometry: Ba, + DodecahedronBufferGeometry: Ba, + EdgesGeometry: Ga, + ExtrudeGeometry: go, + ExtrudeBufferGeometry: go, + IcosahedronGeometry: yo, + IcosahedronBufferGeometry: yo, + LatheGeometry: xo, + LatheBufferGeometry: xo, + OctahedronGeometry: _o, + OctahedronBufferGeometry: _o, + ParametricGeometry: wo, + ParametricBufferGeometry: wo, + PlaneGeometry: ci, + PlaneBufferGeometry: ci, + PolyhedronGeometry: Na, + PolyhedronBufferGeometry: Na, + RingGeometry: bo, + RingBufferGeometry: bo, + ShapeGeometry: Mo, + ShapeBufferGeometry: Mo, + SphereGeometry: So, + SphereBufferGeometry: So, + TetrahedronGeometry: To, + TetrahedronBufferGeometry: To, + TextGeometry: Eo, + TextBufferGeometry: Eo, + TorusGeometry: Ao, + TorusBufferGeometry: Ao, + TorusKnotGeometry: Lo, + TorusKnotBufferGeometry: Lo, + TubeGeometry: Ro, + TubeBufferGeometry: Ro, + WireframeGeometry: Co, + }); + class Do extends Xe { + constructor(t) { + super(), + (this.type = 'ShadowMaterial'), + (this.color = new tn(0)), + (this.transparent = !0), + this.setValues(t); + } + copy(t) { + return super.copy(t), this.color.copy(t.color), this; + } + } + Do.prototype.isShadowMaterial = !0; + class Io extends Jn { + constructor(t) { + super(t), (this.type = 'RawShaderMaterial'); + } + } + Io.prototype.isRawShaderMaterial = !0; + class No extends Xe { + constructor(t) { + super(), + (this.defines = { STANDARD: '' }), + (this.type = 'MeshStandardMaterial'), + (this.color = new tn(16777215)), + (this.roughness = 1), + (this.metalness = 0), + (this.map = null), + (this.lightMap = null), + (this.lightMapIntensity = 1), + (this.aoMap = null), + (this.aoMapIntensity = 1), + (this.emissive = new tn(0)), + (this.emissiveIntensity = 1), + (this.emissiveMap = null), + (this.bumpMap = null), + (this.bumpScale = 1), + (this.normalMap = null), + (this.normalMapType = 0), + (this.normalScale = new vt(1, 1)), + (this.displacementMap = null), + (this.displacementScale = 1), + (this.displacementBias = 0), + (this.roughnessMap = null), + (this.metalnessMap = null), + (this.alphaMap = null), + (this.envMap = null), + (this.envMapIntensity = 1), + (this.refractionRatio = 0.98), + (this.wireframe = !1), + (this.wireframeLinewidth = 1), + (this.wireframeLinecap = 'round'), + (this.wireframeLinejoin = 'round'), + (this.skinning = !1), + (this.morphTargets = !1), + (this.morphNormals = !1), + (this.flatShading = !1), + (this.vertexTangents = !1), + this.setValues(t); + } + copy(t) { + return ( + super.copy(t), + (this.defines = { STANDARD: '' }), + this.color.copy(t.color), + (this.roughness = t.roughness), + (this.metalness = t.metalness), + (this.map = t.map), + (this.lightMap = t.lightMap), + (this.lightMapIntensity = t.lightMapIntensity), + (this.aoMap = t.aoMap), + (this.aoMapIntensity = t.aoMapIntensity), + this.emissive.copy(t.emissive), + (this.emissiveMap = t.emissiveMap), + (this.emissiveIntensity = t.emissiveIntensity), + (this.bumpMap = t.bumpMap), + (this.bumpScale = t.bumpScale), + (this.normalMap = t.normalMap), + (this.normalMapType = t.normalMapType), + this.normalScale.copy(t.normalScale), + (this.displacementMap = t.displacementMap), + (this.displacementScale = t.displacementScale), + (this.displacementBias = t.displacementBias), + (this.roughnessMap = t.roughnessMap), + (this.metalnessMap = t.metalnessMap), + (this.alphaMap = t.alphaMap), + (this.envMap = t.envMap), + (this.envMapIntensity = t.envMapIntensity), + (this.refractionRatio = t.refractionRatio), + (this.wireframe = t.wireframe), + (this.wireframeLinewidth = t.wireframeLinewidth), + (this.wireframeLinecap = t.wireframeLinecap), + (this.wireframeLinejoin = t.wireframeLinejoin), + (this.skinning = t.skinning), + (this.morphTargets = t.morphTargets), + (this.morphNormals = t.morphNormals), + (this.flatShading = t.flatShading), + (this.vertexTangents = t.vertexTangents), + this + ); + } + } + No.prototype.isMeshStandardMaterial = !0; + class Bo extends No { + constructor(t) { + super(), + (this.defines = { STANDARD: '', PHYSICAL: '' }), + (this.type = 'MeshPhysicalMaterial'), + (this.clearcoat = 0), + (this.clearcoatMap = null), + (this.clearcoatRoughness = 0), + (this.clearcoatRoughnessMap = null), + (this.clearcoatNormalScale = new vt(1, 1)), + (this.clearcoatNormalMap = null), + (this.reflectivity = 0.5), + Object.defineProperty(this, 'ior', { + get: function () { + return ( + (1 + 0.4 * this.reflectivity) / (1 - 0.4 * this.reflectivity) + ); + }, + set: function (t) { + this.reflectivity = ht((2.5 * (t - 1)) / (t + 1), 0, 1); + }, + }), + (this.sheen = null), + (this.transmission = 0), + (this.transmissionMap = null), + this.setValues(t); + } + copy(t) { + return ( + super.copy(t), + (this.defines = { STANDARD: '', PHYSICAL: '' }), + (this.clearcoat = t.clearcoat), + (this.clearcoatMap = t.clearcoatMap), + (this.clearcoatRoughness = t.clearcoatRoughness), + (this.clearcoatRoughnessMap = t.clearcoatRoughnessMap), + (this.clearcoatNormalMap = t.clearcoatNormalMap), + this.clearcoatNormalScale.copy(t.clearcoatNormalScale), + (this.reflectivity = t.reflectivity), + t.sheen + ? (this.sheen = (this.sheen || new tn()).copy(t.sheen)) + : (this.sheen = null), + (this.transmission = t.transmission), + (this.transmissionMap = t.transmissionMap), + this + ); + } + } + Bo.prototype.isMeshPhysicalMaterial = !0; + class zo extends Xe { + constructor(t) { + super(), + (this.type = 'MeshPhongMaterial'), + (this.color = new tn(16777215)), + (this.specular = new tn(1118481)), + (this.shininess = 30), + (this.map = null), + (this.lightMap = null), + (this.lightMapIntensity = 1), + (this.aoMap = null), + (this.aoMapIntensity = 1), + (this.emissive = new tn(0)), + (this.emissiveIntensity = 1), + (this.emissiveMap = null), + (this.bumpMap = null), + (this.bumpScale = 1), + (this.normalMap = null), + (this.normalMapType = 0), + (this.normalScale = new vt(1, 1)), + (this.displacementMap = null), + (this.displacementScale = 1), + (this.displacementBias = 0), + (this.specularMap = null), + (this.alphaMap = null), + (this.envMap = null), + (this.combine = 0), + (this.reflectivity = 1), + (this.refractionRatio = 0.98), + (this.wireframe = !1), + (this.wireframeLinewidth = 1), + (this.wireframeLinecap = 'round'), + (this.wireframeLinejoin = 'round'), + (this.skinning = !1), + (this.morphTargets = !1), + (this.morphNormals = !1), + (this.flatShading = !1), + this.setValues(t); + } + copy(t) { + return ( + super.copy(t), + this.color.copy(t.color), + this.specular.copy(t.specular), + (this.shininess = t.shininess), + (this.map = t.map), + (this.lightMap = t.lightMap), + (this.lightMapIntensity = t.lightMapIntensity), + (this.aoMap = t.aoMap), + (this.aoMapIntensity = t.aoMapIntensity), + this.emissive.copy(t.emissive), + (this.emissiveMap = t.emissiveMap), + (this.emissiveIntensity = t.emissiveIntensity), + (this.bumpMap = t.bumpMap), + (this.bumpScale = t.bumpScale), + (this.normalMap = t.normalMap), + (this.normalMapType = t.normalMapType), + this.normalScale.copy(t.normalScale), + (this.displacementMap = t.displacementMap), + (this.displacementScale = t.displacementScale), + (this.displacementBias = t.displacementBias), + (this.specularMap = t.specularMap), + (this.alphaMap = t.alphaMap), + (this.envMap = t.envMap), + (this.combine = t.combine), + (this.reflectivity = t.reflectivity), + (this.refractionRatio = t.refractionRatio), + (this.wireframe = t.wireframe), + (this.wireframeLinewidth = t.wireframeLinewidth), + (this.wireframeLinecap = t.wireframeLinecap), + (this.wireframeLinejoin = t.wireframeLinejoin), + (this.skinning = t.skinning), + (this.morphTargets = t.morphTargets), + (this.morphNormals = t.morphNormals), + (this.flatShading = t.flatShading), + this + ); + } + } + zo.prototype.isMeshPhongMaterial = !0; + class Fo extends Xe { + constructor(t) { + super(), + (this.defines = { TOON: '' }), + (this.type = 'MeshToonMaterial'), + (this.color = new tn(16777215)), + (this.map = null), + (this.gradientMap = null), + (this.lightMap = null), + (this.lightMapIntensity = 1), + (this.aoMap = null), + (this.aoMapIntensity = 1), + (this.emissive = new tn(0)), + (this.emissiveIntensity = 1), + (this.emissiveMap = null), + (this.bumpMap = null), + (this.bumpScale = 1), + (this.normalMap = null), + (this.normalMapType = 0), + (this.normalScale = new vt(1, 1)), + (this.displacementMap = null), + (this.displacementScale = 1), + (this.displacementBias = 0), + (this.alphaMap = null), + (this.wireframe = !1), + (this.wireframeLinewidth = 1), + (this.wireframeLinecap = 'round'), + (this.wireframeLinejoin = 'round'), + (this.skinning = !1), + (this.morphTargets = !1), + (this.morphNormals = !1), + this.setValues(t); + } + copy(t) { + return ( + super.copy(t), + this.color.copy(t.color), + (this.map = t.map), + (this.gradientMap = t.gradientMap), + (this.lightMap = t.lightMap), + (this.lightMapIntensity = t.lightMapIntensity), + (this.aoMap = t.aoMap), + (this.aoMapIntensity = t.aoMapIntensity), + this.emissive.copy(t.emissive), + (this.emissiveMap = t.emissiveMap), + (this.emissiveIntensity = t.emissiveIntensity), + (this.bumpMap = t.bumpMap), + (this.bumpScale = t.bumpScale), + (this.normalMap = t.normalMap), + (this.normalMapType = t.normalMapType), + this.normalScale.copy(t.normalScale), + (this.displacementMap = t.displacementMap), + (this.displacementScale = t.displacementScale), + (this.displacementBias = t.displacementBias), + (this.alphaMap = t.alphaMap), + (this.wireframe = t.wireframe), + (this.wireframeLinewidth = t.wireframeLinewidth), + (this.wireframeLinecap = t.wireframeLinecap), + (this.wireframeLinejoin = t.wireframeLinejoin), + (this.skinning = t.skinning), + (this.morphTargets = t.morphTargets), + (this.morphNormals = t.morphNormals), + this + ); + } + } + Fo.prototype.isMeshToonMaterial = !0; + class Oo extends Xe { + constructor(t) { + super(), + (this.type = 'MeshNormalMaterial'), + (this.bumpMap = null), + (this.bumpScale = 1), + (this.normalMap = null), + (this.normalMapType = 0), + (this.normalScale = new vt(1, 1)), + (this.displacementMap = null), + (this.displacementScale = 1), + (this.displacementBias = 0), + (this.wireframe = !1), + (this.wireframeLinewidth = 1), + (this.fog = !1), + (this.skinning = !1), + (this.morphTargets = !1), + (this.morphNormals = !1), + (this.flatShading = !1), + this.setValues(t); + } + copy(t) { + return ( + super.copy(t), + (this.bumpMap = t.bumpMap), + (this.bumpScale = t.bumpScale), + (this.normalMap = t.normalMap), + (this.normalMapType = t.normalMapType), + this.normalScale.copy(t.normalScale), + (this.displacementMap = t.displacementMap), + (this.displacementScale = t.displacementScale), + (this.displacementBias = t.displacementBias), + (this.wireframe = t.wireframe), + (this.wireframeLinewidth = t.wireframeLinewidth), + (this.skinning = t.skinning), + (this.morphTargets = t.morphTargets), + (this.morphNormals = t.morphNormals), + (this.flatShading = t.flatShading), + this + ); + } + } + Oo.prototype.isMeshNormalMaterial = !0; + class Ho extends Xe { + constructor(t) { + super(), + (this.type = 'MeshLambertMaterial'), + (this.color = new tn(16777215)), + (this.map = null), + (this.lightMap = null), + (this.lightMapIntensity = 1), + (this.aoMap = null), + (this.aoMapIntensity = 1), + (this.emissive = new tn(0)), + (this.emissiveIntensity = 1), + (this.emissiveMap = null), + (this.specularMap = null), + (this.alphaMap = null), + (this.envMap = null), + (this.combine = 0), + (this.reflectivity = 1), + (this.refractionRatio = 0.98), + (this.wireframe = !1), + (this.wireframeLinewidth = 1), + (this.wireframeLinecap = 'round'), + (this.wireframeLinejoin = 'round'), + (this.skinning = !1), + (this.morphTargets = !1), + (this.morphNormals = !1), + this.setValues(t); + } + copy(t) { + return ( + super.copy(t), + this.color.copy(t.color), + (this.map = t.map), + (this.lightMap = t.lightMap), + (this.lightMapIntensity = t.lightMapIntensity), + (this.aoMap = t.aoMap), + (this.aoMapIntensity = t.aoMapIntensity), + this.emissive.copy(t.emissive), + (this.emissiveMap = t.emissiveMap), + (this.emissiveIntensity = t.emissiveIntensity), + (this.specularMap = t.specularMap), + (this.alphaMap = t.alphaMap), + (this.envMap = t.envMap), + (this.combine = t.combine), + (this.reflectivity = t.reflectivity), + (this.refractionRatio = t.refractionRatio), + (this.wireframe = t.wireframe), + (this.wireframeLinewidth = t.wireframeLinewidth), + (this.wireframeLinecap = t.wireframeLinecap), + (this.wireframeLinejoin = t.wireframeLinejoin), + (this.skinning = t.skinning), + (this.morphTargets = t.morphTargets), + (this.morphNormals = t.morphNormals), + this + ); + } + } + Ho.prototype.isMeshLambertMaterial = !0; + class Go extends Xe { + constructor(t) { + super(), + (this.defines = { MATCAP: '' }), + (this.type = 'MeshMatcapMaterial'), + (this.color = new tn(16777215)), + (this.matcap = null), + (this.map = null), + (this.bumpMap = null), + (this.bumpScale = 1), + (this.normalMap = null), + (this.normalMapType = 0), + (this.normalScale = new vt(1, 1)), + (this.displacementMap = null), + (this.displacementScale = 1), + (this.displacementBias = 0), + (this.alphaMap = null), + (this.skinning = !1), + (this.morphTargets = !1), + (this.morphNormals = !1), + (this.flatShading = !1), + this.setValues(t); + } + copy(t) { + return ( + super.copy(t), + (this.defines = { MATCAP: '' }), + this.color.copy(t.color), + (this.matcap = t.matcap), + (this.map = t.map), + (this.bumpMap = t.bumpMap), + (this.bumpScale = t.bumpScale), + (this.normalMap = t.normalMap), + (this.normalMapType = t.normalMapType), + this.normalScale.copy(t.normalScale), + (this.displacementMap = t.displacementMap), + (this.displacementScale = t.displacementScale), + (this.displacementBias = t.displacementBias), + (this.alphaMap = t.alphaMap), + (this.skinning = t.skinning), + (this.morphTargets = t.morphTargets), + (this.morphNormals = t.morphNormals), + (this.flatShading = t.flatShading), + this + ); + } + } + Go.prototype.isMeshMatcapMaterial = !0; + class Uo extends ca { + constructor(t) { + super(), + (this.type = 'LineDashedMaterial'), + (this.scale = 1), + (this.dashSize = 3), + (this.gapSize = 1), + this.setValues(t); + } + copy(t) { + return ( + super.copy(t), + (this.scale = t.scale), + (this.dashSize = t.dashSize), + (this.gapSize = t.gapSize), + this + ); + } + } + Uo.prototype.isLineDashedMaterial = !0; + var ko = Object.freeze({ + __proto__: null, + ShadowMaterial: Do, + SpriteMaterial: Rs, + RawShaderMaterial: Io, + ShaderMaterial: Jn, + PointsMaterial: _a, + MeshPhysicalMaterial: Bo, + MeshStandardMaterial: No, + MeshPhongMaterial: zo, + MeshToonMaterial: Fo, + MeshNormalMaterial: Oo, + MeshLambertMaterial: Ho, + MeshDepthMaterial: cs, + MeshDistanceMaterial: hs, + MeshBasicMaterial: en, + MeshMatcapMaterial: Go, + LineDashedMaterial: Uo, + LineBasicMaterial: ca, + Material: Xe, + }); + const Vo = { + arraySlice: function (t, e, n) { + return Vo.isTypedArray(t) + ? new t.constructor(t.subarray(e, void 0 !== n ? n : t.length)) + : t.slice(e, n); + }, + convertArray: function (t, e, n) { + return !t || (!n && t.constructor === e) + ? t + : 'number' == typeof e.BYTES_PER_ELEMENT + ? new e(t) + : Array.prototype.slice.call(t); + }, + isTypedArray: function (t) { + return ArrayBuffer.isView(t) && !(t instanceof DataView); + }, + getKeyframeOrder: function (t) { + const e = t.length, + n = new Array(e); + for (let t = 0; t !== e; ++t) n[t] = t; + return ( + n.sort(function (e, n) { + return t[e] - t[n]; + }), + n + ); + }, + sortedArray: function (t, e, n) { + const i = t.length, + r = new t.constructor(i); + for (let s = 0, a = 0; a !== i; ++s) { + const i = n[s] * e; + for (let n = 0; n !== e; ++n) r[a++] = t[i + n]; + } + return r; + }, + flattenJSON: function (t, e, n, i) { + let r = 1, + s = t[0]; + for (; void 0 !== s && void 0 === s[i]; ) s = t[r++]; + if (void 0 === s) return; + let a = s[i]; + if (void 0 !== a) + if (Array.isArray(a)) + do { + (a = s[i]), + void 0 !== a && (e.push(s.time), n.push.apply(n, a)), + (s = t[r++]); + } while (void 0 !== s); + else if (void 0 !== a.toArray) + do { + (a = s[i]), + void 0 !== a && (e.push(s.time), a.toArray(n, n.length)), + (s = t[r++]); + } while (void 0 !== s); + else + do { + (a = s[i]), + void 0 !== a && (e.push(s.time), n.push(a)), + (s = t[r++]); + } while (void 0 !== s); + }, + subclip: function (t, e, n, i, r = 30) { + const s = t.clone(); + s.name = e; + const a = []; + for (let t = 0; t < s.tracks.length; ++t) { + const e = s.tracks[t], + o = e.getValueSize(), + l = [], + c = []; + for (let t = 0; t < e.times.length; ++t) { + const s = e.times[t] * r; + if (!(s < n || s >= i)) { + l.push(e.times[t]); + for (let n = 0; n < o; ++n) c.push(e.values[t * o + n]); + } + } + 0 !== l.length && + ((e.times = Vo.convertArray(l, e.times.constructor)), + (e.values = Vo.convertArray(c, e.values.constructor)), + a.push(e)); + } + s.tracks = a; + let o = 1 / 0; + for (let t = 0; t < s.tracks.length; ++t) + o > s.tracks[t].times[0] && (o = s.tracks[t].times[0]); + for (let t = 0; t < s.tracks.length; ++t) s.tracks[t].shift(-1 * o); + return s.resetDuration(), s; + }, + makeClipAdditive: function (t, e = 0, n = t, i = 30) { + i <= 0 && (i = 30); + const r = n.tracks.length, + s = e / i; + for (let e = 0; e < r; ++e) { + const i = n.tracks[e], + r = i.ValueTypeName; + if ('bool' === r || 'string' === r) continue; + const a = t.tracks.find(function (t) { + return t.name === i.name && t.ValueTypeName === r; + }); + if (void 0 === a) continue; + let o = 0; + const l = i.getValueSize(); + i.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline && + (o = l / 3); + let c = 0; + const h = a.getValueSize(); + a.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline && + (c = h / 3); + const u = i.times.length - 1; + let d; + if (s <= i.times[0]) { + const t = o, + e = l - o; + d = Vo.arraySlice(i.values, t, e); + } else if (s >= i.times[u]) { + const t = u * l + o, + e = t + l - o; + d = Vo.arraySlice(i.values, t, e); + } else { + const t = i.createInterpolant(), + e = o, + n = l - o; + t.evaluate(s), (d = Vo.arraySlice(t.resultBuffer, e, n)); + } + if ('quaternion' === r) { + new At().fromArray(d).normalize().conjugate().toArray(d); + } + const p = a.times.length; + for (let t = 0; t < p; ++t) { + const e = t * h + c; + if ('quaternion' === r) + At.multiplyQuaternionsFlat(a.values, e, d, 0, a.values, e); + else { + const t = h - 2 * c; + for (let n = 0; n < t; ++n) a.values[e + n] -= d[n]; + } + } + } + return (t.blendMode = q), t; + }, + }; + class Wo { + constructor(t, e, n, i) { + (this.parameterPositions = t), + (this._cachedIndex = 0), + (this.resultBuffer = void 0 !== i ? i : new e.constructor(n)), + (this.sampleValues = e), + (this.valueSize = n), + (this.settings = null), + (this.DefaultSettings_ = {}); + } + evaluate(t) { + const e = this.parameterPositions; + let n = this._cachedIndex, + i = e[n], + r = e[n - 1]; + t: { + e: { + let s; + n: { + i: if (!(t < i)) { + for (let s = n + 2; ; ) { + if (void 0 === i) { + if (t < r) break i; + return ( + (n = e.length), + (this._cachedIndex = n), + this.afterEnd_(n - 1, t, r) + ); + } + if (n === s) break; + if (((r = i), (i = e[++n]), t < i)) break e; + } + s = e.length; + break n; + } + if (t >= r) break t; + { + const a = e[1]; + t < a && ((n = 2), (r = a)); + for (let s = n - 2; ; ) { + if (void 0 === r) + return (this._cachedIndex = 0), this.beforeStart_(0, t, i); + if (n === s) break; + if (((i = r), (r = e[--n - 1]), t >= r)) break e; + } + (s = n), (n = 0); + } + } + for (; n < s; ) { + const i = (n + s) >>> 1; + t < e[i] ? (s = i) : (n = i + 1); + } + if (((i = e[n]), (r = e[n - 1]), void 0 === r)) + return (this._cachedIndex = 0), this.beforeStart_(0, t, i); + if (void 0 === i) + return ( + (n = e.length), + (this._cachedIndex = n), + this.afterEnd_(n - 1, r, t) + ); + } + (this._cachedIndex = n), this.intervalChanged_(n, r, i); + } + return this.interpolate_(n, r, t, i); + } + getSettings_() { + return this.settings || this.DefaultSettings_; + } + copySampleValue_(t) { + const e = this.resultBuffer, + n = this.sampleValues, + i = this.valueSize, + r = t * i; + for (let t = 0; t !== i; ++t) e[t] = n[r + t]; + return e; + } + interpolate_() { + throw new Error('call to abstract method'); + } + intervalChanged_() {} + } + (Wo.prototype.beforeStart_ = Wo.prototype.copySampleValue_), + (Wo.prototype.afterEnd_ = Wo.prototype.copySampleValue_); + class jo extends Wo { + constructor(t, e, n, i) { + super(t, e, n, i), + (this._weightPrev = -0), + (this._offsetPrev = -0), + (this._weightNext = -0), + (this._offsetNext = -0), + (this.DefaultSettings_ = { endingStart: k, endingEnd: k }); + } + intervalChanged_(t, e, n) { + const i = this.parameterPositions; + let r = t - 2, + s = t + 1, + a = i[r], + o = i[s]; + if (void 0 === a) + switch (this.getSettings_().endingStart) { + case V: + (r = t), (a = 2 * e - n); + break; + case W: + (r = i.length - 2), (a = e + i[r] - i[r + 1]); + break; + default: + (r = t), (a = n); + } + if (void 0 === o) + switch (this.getSettings_().endingEnd) { + case V: + (s = t), (o = 2 * n - e); + break; + case W: + (s = 1), (o = n + i[1] - i[0]); + break; + default: + (s = t - 1), (o = e); + } + const l = 0.5 * (n - e), + c = this.valueSize; + (this._weightPrev = l / (e - a)), + (this._weightNext = l / (o - n)), + (this._offsetPrev = r * c), + (this._offsetNext = s * c); + } + interpolate_(t, e, n, i) { + const r = this.resultBuffer, + s = this.sampleValues, + a = this.valueSize, + o = t * a, + l = o - a, + c = this._offsetPrev, + h = this._offsetNext, + u = this._weightPrev, + d = this._weightNext, + p = (n - e) / (i - e), + m = p * p, + f = m * p, + g = -u * f + 2 * u * m - u * p, + v = (1 + u) * f + (-1.5 - 2 * u) * m + (-0.5 + u) * p + 1, + y = (-1 - d) * f + (1.5 + d) * m + 0.5 * p, + x = d * f - d * m; + for (let t = 0; t !== a; ++t) + r[t] = g * s[c + t] + v * s[l + t] + y * s[o + t] + x * s[h + t]; + return r; + } + } + class qo extends Wo { + constructor(t, e, n, i) { + super(t, e, n, i); + } + interpolate_(t, e, n, i) { + const r = this.resultBuffer, + s = this.sampleValues, + a = this.valueSize, + o = t * a, + l = o - a, + c = (n - e) / (i - e), + h = 1 - c; + for (let t = 0; t !== a; ++t) r[t] = s[l + t] * h + s[o + t] * c; + return r; + } + } + class Xo extends Wo { + constructor(t, e, n, i) { + super(t, e, n, i); + } + interpolate_(t) { + return this.copySampleValue_(t - 1); + } + } + class Yo { + constructor(t, e, n, i) { + if (void 0 === t) + throw new Error('THREE.KeyframeTrack: track name is undefined'); + if (void 0 === e || 0 === e.length) + throw new Error( + 'THREE.KeyframeTrack: no keyframes in track named ' + t + ); + (this.name = t), + (this.times = Vo.convertArray(e, this.TimeBufferType)), + (this.values = Vo.convertArray(n, this.ValueBufferType)), + this.setInterpolation(i || this.DefaultInterpolation); + } + static toJSON(t) { + const e = t.constructor; + let n; + if (e.toJSON !== this.toJSON) n = e.toJSON(t); + else { + n = { + name: t.name, + times: Vo.convertArray(t.times, Array), + values: Vo.convertArray(t.values, Array), + }; + const e = t.getInterpolation(); + e !== t.DefaultInterpolation && (n.interpolation = e); + } + return (n.type = t.ValueTypeName), n; + } + InterpolantFactoryMethodDiscrete(t) { + return new Xo(this.times, this.values, this.getValueSize(), t); + } + InterpolantFactoryMethodLinear(t) { + return new qo(this.times, this.values, this.getValueSize(), t); + } + InterpolantFactoryMethodSmooth(t) { + return new jo(this.times, this.values, this.getValueSize(), t); + } + setInterpolation(t) { + let e; + switch (t) { + case H: + e = this.InterpolantFactoryMethodDiscrete; + break; + case G: + e = this.InterpolantFactoryMethodLinear; + break; + case U: + e = this.InterpolantFactoryMethodSmooth; + } + if (void 0 === e) { + const e = + 'unsupported interpolation for ' + + this.ValueTypeName + + ' keyframe track named ' + + this.name; + if (void 0 === this.createInterpolant) { + if (t === this.DefaultInterpolation) throw new Error(e); + this.setInterpolation(this.DefaultInterpolation); + } + return console.warn('THREE.KeyframeTrack:', e), this; + } + return (this.createInterpolant = e), this; + } + getInterpolation() { + switch (this.createInterpolant) { + case this.InterpolantFactoryMethodDiscrete: + return H; + case this.InterpolantFactoryMethodLinear: + return G; + case this.InterpolantFactoryMethodSmooth: + return U; + } + } + getValueSize() { + return this.values.length / this.times.length; + } + shift(t) { + if (0 !== t) { + const e = this.times; + for (let n = 0, i = e.length; n !== i; ++n) e[n] += t; + } + return this; + } + scale(t) { + if (1 !== t) { + const e = this.times; + for (let n = 0, i = e.length; n !== i; ++n) e[n] *= t; + } + return this; + } + trim(t, e) { + const n = this.times, + i = n.length; + let r = 0, + s = i - 1; + for (; r !== i && n[r] < t; ) ++r; + for (; -1 !== s && n[s] > e; ) --s; + if ((++s, 0 !== r || s !== i)) { + r >= s && ((s = Math.max(s, 1)), (r = s - 1)); + const t = this.getValueSize(); + (this.times = Vo.arraySlice(n, r, s)), + (this.values = Vo.arraySlice(this.values, r * t, s * t)); + } + return this; + } + validate() { + let t = !0; + const e = this.getValueSize(); + e - Math.floor(e) != 0 && + (console.error( + 'THREE.KeyframeTrack: Invalid value size in track.', + this + ), + (t = !1)); + const n = this.times, + i = this.values, + r = n.length; + 0 === r && + (console.error('THREE.KeyframeTrack: Track is empty.', this), (t = !1)); + let s = null; + for (let e = 0; e !== r; e++) { + const i = n[e]; + if ('number' == typeof i && isNaN(i)) { + console.error( + 'THREE.KeyframeTrack: Time is not a valid number.', + this, + e, + i + ), + (t = !1); + break; + } + if (null !== s && s > i) { + console.error( + 'THREE.KeyframeTrack: Out of order keys.', + this, + e, + i, + s + ), + (t = !1); + break; + } + s = i; + } + if (void 0 !== i && Vo.isTypedArray(i)) + for (let e = 0, n = i.length; e !== n; ++e) { + const n = i[e]; + if (isNaN(n)) { + console.error( + 'THREE.KeyframeTrack: Value is not a valid number.', + this, + e, + n + ), + (t = !1); + break; + } + } + return t; + } + optimize() { + const t = Vo.arraySlice(this.times), + e = Vo.arraySlice(this.values), + n = this.getValueSize(), + i = this.getInterpolation() === U, + r = t.length - 1; + let s = 1; + for (let a = 1; a < r; ++a) { + let r = !1; + const o = t[a]; + if (o !== t[a + 1] && (1 !== a || o !== t[0])) + if (i) r = !0; + else { + const t = a * n, + i = t - n, + s = t + n; + for (let a = 0; a !== n; ++a) { + const n = e[t + a]; + if (n !== e[i + a] || n !== e[s + a]) { + r = !0; + break; + } + } + } + if (r) { + if (a !== s) { + t[s] = t[a]; + const i = a * n, + r = s * n; + for (let t = 0; t !== n; ++t) e[r + t] = e[i + t]; + } + ++s; + } + } + if (r > 0) { + t[s] = t[r]; + for (let t = r * n, i = s * n, a = 0; a !== n; ++a) e[i + a] = e[t + a]; + ++s; + } + return ( + s !== t.length + ? ((this.times = Vo.arraySlice(t, 0, s)), + (this.values = Vo.arraySlice(e, 0, s * n))) + : ((this.times = t), (this.values = e)), + this + ); + } + clone() { + const t = Vo.arraySlice(this.times, 0), + e = Vo.arraySlice(this.values, 0), + n = new (0, this.constructor)(this.name, t, e); + return (n.createInterpolant = this.createInterpolant), n; + } + } + (Yo.prototype.TimeBufferType = Float32Array), + (Yo.prototype.ValueBufferType = Float32Array), + (Yo.prototype.DefaultInterpolation = G); + class Zo extends Yo {} + (Zo.prototype.ValueTypeName = 'bool'), + (Zo.prototype.ValueBufferType = Array), + (Zo.prototype.DefaultInterpolation = H), + (Zo.prototype.InterpolantFactoryMethodLinear = void 0), + (Zo.prototype.InterpolantFactoryMethodSmooth = void 0); + class Jo extends Yo {} + Jo.prototype.ValueTypeName = 'color'; + class Qo extends Yo {} + Qo.prototype.ValueTypeName = 'number'; + class Ko extends Wo { + constructor(t, e, n, i) { + super(t, e, n, i); + } + interpolate_(t, e, n, i) { + const r = this.resultBuffer, + s = this.sampleValues, + a = this.valueSize, + o = (n - e) / (i - e); + let l = t * a; + for (let t = l + a; l !== t; l += 4) + At.slerpFlat(r, 0, s, l - a, s, l, o); + return r; + } + } + class $o extends Yo { + InterpolantFactoryMethodLinear(t) { + return new Ko(this.times, this.values, this.getValueSize(), t); + } + } + ($o.prototype.ValueTypeName = 'quaternion'), + ($o.prototype.DefaultInterpolation = G), + ($o.prototype.InterpolantFactoryMethodSmooth = void 0); + class tl extends Yo {} + (tl.prototype.ValueTypeName = 'string'), + (tl.prototype.ValueBufferType = Array), + (tl.prototype.DefaultInterpolation = H), + (tl.prototype.InterpolantFactoryMethodLinear = void 0), + (tl.prototype.InterpolantFactoryMethodSmooth = void 0); + class el extends Yo {} + el.prototype.ValueTypeName = 'vector'; + class nl { + constructor(t, e = -1, n, i = 2500) { + (this.name = t), + (this.tracks = n), + (this.duration = e), + (this.blendMode = i), + (this.uuid = ct()), + this.duration < 0 && this.resetDuration(); + } + static parse(t) { + const e = [], + n = t.tracks, + i = 1 / (t.fps || 1); + for (let t = 0, r = n.length; t !== r; ++t) e.push(il(n[t]).scale(i)); + const r = new this(t.name, t.duration, e, t.blendMode); + return (r.uuid = t.uuid), r; + } + static toJSON(t) { + const e = [], + n = t.tracks, + i = { + name: t.name, + duration: t.duration, + tracks: e, + uuid: t.uuid, + blendMode: t.blendMode, + }; + for (let t = 0, i = n.length; t !== i; ++t) e.push(Yo.toJSON(n[t])); + return i; + } + static CreateFromMorphTargetSequence(t, e, n, i) { + const r = e.length, + s = []; + for (let t = 0; t < r; t++) { + let a = [], + o = []; + a.push((t + r - 1) % r, t, (t + 1) % r), o.push(0, 1, 0); + const l = Vo.getKeyframeOrder(a); + (a = Vo.sortedArray(a, 1, l)), + (o = Vo.sortedArray(o, 1, l)), + i || 0 !== a[0] || (a.push(r), o.push(o[0])), + s.push( + new Qo('.morphTargetInfluences[' + e[t].name + ']', a, o).scale( + 1 / n + ) + ); + } + return new this(t, -1, s); + } + static findByName(t, e) { + let n = t; + if (!Array.isArray(t)) { + const e = t; + n = (e.geometry && e.geometry.animations) || e.animations; + } + for (let t = 0; t < n.length; t++) if (n[t].name === e) return n[t]; + return null; + } + static CreateClipsFromMorphTargetSequences(t, e, n) { + const i = {}, + r = /^([\w-]*?)([\d]+)$/; + for (let e = 0, n = t.length; e < n; e++) { + const n = t[e], + s = n.name.match(r); + if (s && s.length > 1) { + const t = s[1]; + let e = i[t]; + e || (i[t] = e = []), e.push(n); + } + } + const s = []; + for (const t in i) + s.push(this.CreateFromMorphTargetSequence(t, i[t], e, n)); + return s; + } + static parseAnimation(t, e) { + if (!t) + return ( + console.error( + 'THREE.AnimationClip: No animation in JSONLoader data.' + ), + null + ); + const n = function (t, e, n, i, r) { + if (0 !== n.length) { + const s = [], + a = []; + Vo.flattenJSON(n, s, a, i), + 0 !== s.length && r.push(new t(e, s, a)); + } + }, + i = [], + r = t.name || 'default', + s = t.fps || 30, + a = t.blendMode; + let o = t.length || -1; + const l = t.hierarchy || []; + for (let t = 0; t < l.length; t++) { + const r = l[t].keys; + if (r && 0 !== r.length) + if (r[0].morphTargets) { + const t = {}; + let e; + for (e = 0; e < r.length; e++) + if (r[e].morphTargets) + for (let n = 0; n < r[e].morphTargets.length; n++) + t[r[e].morphTargets[n]] = -1; + for (const n in t) { + const t = [], + s = []; + for (let i = 0; i !== r[e].morphTargets.length; ++i) { + const i = r[e]; + t.push(i.time), s.push(i.morphTarget === n ? 1 : 0); + } + i.push(new Qo('.morphTargetInfluence[' + n + ']', t, s)); + } + o = t.length * (s || 1); + } else { + const s = '.bones[' + e[t].name + ']'; + n(el, s + '.position', r, 'pos', i), + n($o, s + '.quaternion', r, 'rot', i), + n(el, s + '.scale', r, 'scl', i); + } + } + if (0 === i.length) return null; + return new this(r, o, i, a); + } + resetDuration() { + let t = 0; + for (let e = 0, n = this.tracks.length; e !== n; ++e) { + const n = this.tracks[e]; + t = Math.max(t, n.times[n.times.length - 1]); + } + return (this.duration = t), this; + } + trim() { + for (let t = 0; t < this.tracks.length; t++) + this.tracks[t].trim(0, this.duration); + return this; + } + validate() { + let t = !0; + for (let e = 0; e < this.tracks.length; e++) + t = t && this.tracks[e].validate(); + return t; + } + optimize() { + for (let t = 0; t < this.tracks.length; t++) this.tracks[t].optimize(); + return this; + } + clone() { + const t = []; + for (let e = 0; e < this.tracks.length; e++) + t.push(this.tracks[e].clone()); + return new this.constructor(this.name, this.duration, t, this.blendMode); + } + toJSON() { + return this.constructor.toJSON(this); + } + } + function il(t) { + if (void 0 === t.type) + throw new Error( + 'THREE.KeyframeTrack: track type undefined, can not parse' + ); + const e = (function (t) { + switch (t.toLowerCase()) { + case 'scalar': + case 'double': + case 'float': + case 'number': + case 'integer': + return Qo; + case 'vector': + case 'vector2': + case 'vector3': + case 'vector4': + return el; + case 'color': + return Jo; + case 'quaternion': + return $o; + case 'bool': + case 'boolean': + return Zo; + case 'string': + return tl; + } + throw new Error('THREE.KeyframeTrack: Unsupported typeName: ' + t); + })(t.type); + if (void 0 === t.times) { + const e = [], + n = []; + Vo.flattenJSON(t.keys, e, n, 'value'), (t.times = e), (t.values = n); + } + return void 0 !== e.parse + ? e.parse(t) + : new e(t.name, t.times, t.values, t.interpolation); + } + const rl = { + enabled: !1, + files: {}, + add: function (t, e) { + !1 !== this.enabled && (this.files[t] = e); + }, + get: function (t) { + if (!1 !== this.enabled) return this.files[t]; + }, + remove: function (t) { + delete this.files[t]; + }, + clear: function () { + this.files = {}; + }, + }; + class sl { + constructor(t, e, n) { + const i = this; + let r, + s = !1, + a = 0, + o = 0; + const l = []; + (this.onStart = void 0), + (this.onLoad = t), + (this.onProgress = e), + (this.onError = n), + (this.itemStart = function (t) { + o++, !1 === s && void 0 !== i.onStart && i.onStart(t, a, o), (s = !0); + }), + (this.itemEnd = function (t) { + a++, + void 0 !== i.onProgress && i.onProgress(t, a, o), + a === o && ((s = !1), void 0 !== i.onLoad && i.onLoad()); + }), + (this.itemError = function (t) { + void 0 !== i.onError && i.onError(t); + }), + (this.resolveURL = function (t) { + return r ? r(t) : t; + }), + (this.setURLModifier = function (t) { + return (r = t), this; + }), + (this.addHandler = function (t, e) { + return l.push(t, e), this; + }), + (this.removeHandler = function (t) { + const e = l.indexOf(t); + return -1 !== e && l.splice(e, 2), this; + }), + (this.getHandler = function (t) { + for (let e = 0, n = l.length; e < n; e += 2) { + const n = l[e], + i = l[e + 1]; + if ((n.global && (n.lastIndex = 0), n.test(t))) return i; + } + return null; + }); + } + } + const al = new sl(); + class ol { + constructor(t) { + (this.manager = void 0 !== t ? t : al), + (this.crossOrigin = 'anonymous'), + (this.withCredentials = !1), + (this.path = ''), + (this.resourcePath = ''), + (this.requestHeader = {}); + } + load() {} + loadAsync(t, e) { + const n = this; + return new Promise(function (i, r) { + n.load(t, i, e, r); + }); + } + parse() {} + setCrossOrigin(t) { + return (this.crossOrigin = t), this; + } + setWithCredentials(t) { + return (this.withCredentials = t), this; + } + setPath(t) { + return (this.path = t), this; + } + setResourcePath(t) { + return (this.resourcePath = t), this; + } + setRequestHeader(t) { + return (this.requestHeader = t), this; + } + } + const ll = {}; + class cl extends ol { + constructor(t) { + super(t); + } + load(t, e, n, i) { + void 0 === t && (t = ''), + void 0 !== this.path && (t = this.path + t), + (t = this.manager.resolveURL(t)); + const r = this, + s = rl.get(t); + if (void 0 !== s) + return ( + r.manager.itemStart(t), + setTimeout(function () { + e && e(s), r.manager.itemEnd(t); + }, 0), + s + ); + if (void 0 !== ll[t]) + return void ll[t].push({ onLoad: e, onProgress: n, onError: i }); + const a = t.match(/^data:(.*?)(;base64)?,(.*)$/); + let o; + if (a) { + const n = a[1], + s = !!a[2]; + let o = a[3]; + (o = decodeURIComponent(o)), s && (o = atob(o)); + try { + let i; + const s = (this.responseType || '').toLowerCase(); + switch (s) { + case 'arraybuffer': + case 'blob': + const t = new Uint8Array(o.length); + for (let e = 0; e < o.length; e++) t[e] = o.charCodeAt(e); + i = 'blob' === s ? new Blob([t.buffer], { type: n }) : t.buffer; + break; + case 'document': + const e = new DOMParser(); + i = e.parseFromString(o, n); + break; + case 'json': + i = JSON.parse(o); + break; + default: + i = o; + } + setTimeout(function () { + e && e(i), r.manager.itemEnd(t); + }, 0); + } catch (e) { + setTimeout(function () { + i && i(e), r.manager.itemError(t), r.manager.itemEnd(t); + }, 0); + } + } else { + (ll[t] = []), + ll[t].push({ onLoad: e, onProgress: n, onError: i }), + (o = new XMLHttpRequest()), + o.open('GET', t, !0), + o.addEventListener( + 'load', + function (e) { + const n = this.response, + i = ll[t]; + if ((delete ll[t], 200 === this.status || 0 === this.status)) { + 0 === this.status && + console.warn('THREE.FileLoader: HTTP Status 0 received.'), + rl.add(t, n); + for (let t = 0, e = i.length; t < e; t++) { + const e = i[t]; + e.onLoad && e.onLoad(n); + } + r.manager.itemEnd(t); + } else { + for (let t = 0, n = i.length; t < n; t++) { + const n = i[t]; + n.onError && n.onError(e); + } + r.manager.itemError(t), r.manager.itemEnd(t); + } + }, + !1 + ), + o.addEventListener( + 'progress', + function (e) { + const n = ll[t]; + for (let t = 0, i = n.length; t < i; t++) { + const i = n[t]; + i.onProgress && i.onProgress(e); + } + }, + !1 + ), + o.addEventListener( + 'error', + function (e) { + const n = ll[t]; + delete ll[t]; + for (let t = 0, i = n.length; t < i; t++) { + const i = n[t]; + i.onError && i.onError(e); + } + r.manager.itemError(t), r.manager.itemEnd(t); + }, + !1 + ), + o.addEventListener( + 'abort', + function (e) { + const n = ll[t]; + delete ll[t]; + for (let t = 0, i = n.length; t < i; t++) { + const i = n[t]; + i.onError && i.onError(e); + } + r.manager.itemError(t), r.manager.itemEnd(t); + }, + !1 + ), + void 0 !== this.responseType && (o.responseType = this.responseType), + void 0 !== this.withCredentials && + (o.withCredentials = this.withCredentials), + o.overrideMimeType && + o.overrideMimeType( + void 0 !== this.mimeType ? this.mimeType : 'text/plain' + ); + for (const t in this.requestHeader) + o.setRequestHeader(t, this.requestHeader[t]); + o.send(null); + } + return r.manager.itemStart(t), o; + } + setResponseType(t) { + return (this.responseType = t), this; + } + setMimeType(t) { + return (this.mimeType = t), this; + } + } + class hl extends ol { + constructor(t) { + super(t); + } + load(t, e, n, i) { + void 0 !== this.path && (t = this.path + t), + (t = this.manager.resolveURL(t)); + const r = this, + s = rl.get(t); + if (void 0 !== s) + return ( + r.manager.itemStart(t), + setTimeout(function () { + e && e(s), r.manager.itemEnd(t); + }, 0), + s + ); + const a = document.createElementNS('http://www.w3.org/1999/xhtml', 'img'); + function o() { + a.removeEventListener('load', o, !1), + a.removeEventListener('error', l, !1), + rl.add(t, this), + e && e(this), + r.manager.itemEnd(t); + } + function l(e) { + a.removeEventListener('load', o, !1), + a.removeEventListener('error', l, !1), + i && i(e), + r.manager.itemError(t), + r.manager.itemEnd(t); + } + return ( + a.addEventListener('load', o, !1), + a.addEventListener('error', l, !1), + 'data:' !== t.substr(0, 5) && + void 0 !== this.crossOrigin && + (a.crossOrigin = this.crossOrigin), + r.manager.itemStart(t), + (a.src = t), + a + ); + } + } + class ul extends ol { + constructor(t) { + super(t); + } + load(t, e, n, i) { + const r = new ei(), + s = new hl(this.manager); + s.setCrossOrigin(this.crossOrigin), s.setPath(this.path); + let a = 0; + function o(n) { + s.load( + t[n], + function (t) { + (r.images[n] = t), + a++, + 6 === a && ((r.needsUpdate = !0), e && e(r)); + }, + void 0, + i + ); + } + for (let e = 0; e < t.length; ++e) o(e); + return r; + } + } + class dl extends ol { + constructor(t) { + super(t); + } + load(t, e, n, i) { + const r = this, + s = new ii(), + a = new cl(this.manager); + return ( + a.setResponseType('arraybuffer'), + a.setRequestHeader(this.requestHeader), + a.setPath(this.path), + a.setWithCredentials(r.withCredentials), + a.load( + t, + function (t) { + const n = r.parse(t); + n && + (void 0 !== n.image + ? (s.image = n.image) + : void 0 !== n.data && + ((s.image.width = n.width), + (s.image.height = n.height), + (s.image.data = n.data)), + (s.wrapS = void 0 !== n.wrapS ? n.wrapS : u), + (s.wrapT = void 0 !== n.wrapT ? n.wrapT : u), + (s.magFilter = void 0 !== n.magFilter ? n.magFilter : g), + (s.minFilter = void 0 !== n.minFilter ? n.minFilter : g), + (s.anisotropy = void 0 !== n.anisotropy ? n.anisotropy : 1), + void 0 !== n.encoding && (s.encoding = n.encoding), + void 0 !== n.flipY && (s.flipY = n.flipY), + void 0 !== n.format && (s.format = n.format), + void 0 !== n.type && (s.type = n.type), + void 0 !== n.mipmaps && + ((s.mipmaps = n.mipmaps), (s.minFilter = y)), + 1 === n.mipmapCount && (s.minFilter = g), + void 0 !== n.generateMipmaps && + (s.generateMipmaps = n.generateMipmaps), + (s.needsUpdate = !0), + e && e(s, n)); + }, + n, + i + ), + s + ); + } + } + class pl extends ol { + constructor(t) { + super(t); + } + load(t, e, n, i) { + const r = new bt(), + s = new hl(this.manager); + return ( + s.setCrossOrigin(this.crossOrigin), + s.setPath(this.path), + s.load( + t, + function (n) { + r.image = n; + const i = + t.search(/\.jpe?g($|\?)/i) > 0 || + 0 === t.search(/^data\:image\/jpeg/); + (r.format = i ? T : E), (r.needsUpdate = !0), void 0 !== e && e(r); + }, + n, + i + ), + r + ); + } + } + class ml { + constructor() { + (this.type = 'Curve'), (this.arcLengthDivisions = 200); + } + getPoint() { + return console.warn('THREE.Curve: .getPoint() not implemented.'), null; + } + getPointAt(t, e) { + const n = this.getUtoTmapping(t); + return this.getPoint(n, e); + } + getPoints(t = 5) { + const e = []; + for (let n = 0; n <= t; n++) e.push(this.getPoint(n / t)); + return e; + } + getSpacedPoints(t = 5) { + const e = []; + for (let n = 0; n <= t; n++) e.push(this.getPointAt(n / t)); + return e; + } + getLength() { + const t = this.getLengths(); + return t[t.length - 1]; + } + getLengths(t = this.arcLengthDivisions) { + if ( + this.cacheArcLengths && + this.cacheArcLengths.length === t + 1 && + !this.needsUpdate + ) + return this.cacheArcLengths; + this.needsUpdate = !1; + const e = []; + let n, + i = this.getPoint(0), + r = 0; + e.push(0); + for (let s = 1; s <= t; s++) + (n = this.getPoint(s / t)), (r += n.distanceTo(i)), e.push(r), (i = n); + return (this.cacheArcLengths = e), e; + } + updateArcLengths() { + (this.needsUpdate = !0), this.getLengths(); + } + getUtoTmapping(t, e) { + const n = this.getLengths(); + let i = 0; + const r = n.length; + let s; + s = e || t * n[r - 1]; + let a, + o = 0, + l = r - 1; + for (; o <= l; ) + if (((i = Math.floor(o + (l - o) / 2)), (a = n[i] - s), a < 0)) + o = i + 1; + else { + if (!(a > 0)) { + l = i; + break; + } + l = i - 1; + } + if (((i = l), n[i] === s)) return i / (r - 1); + const c = n[i]; + return (i + (s - c) / (n[i + 1] - c)) / (r - 1); + } + getTangent(t, e) { + const n = 1e-4; + let i = t - n, + r = t + n; + i < 0 && (i = 0), r > 1 && (r = 1); + const s = this.getPoint(i), + a = this.getPoint(r), + o = e || (s.isVector2 ? new vt() : new Lt()); + return o.copy(a).sub(s).normalize(), o; + } + getTangentAt(t, e) { + const n = this.getUtoTmapping(t); + return this.getTangent(n, e); + } + computeFrenetFrames(t, e) { + const n = new Lt(), + i = [], + r = [], + s = [], + a = new Lt(), + o = new se(); + for (let e = 0; e <= t; e++) { + const n = e / t; + (i[e] = this.getTangentAt(n, new Lt())), i[e].normalize(); + } + (r[0] = new Lt()), (s[0] = new Lt()); + let l = Number.MAX_VALUE; + const c = Math.abs(i[0].x), + h = Math.abs(i[0].y), + u = Math.abs(i[0].z); + c <= l && ((l = c), n.set(1, 0, 0)), + h <= l && ((l = h), n.set(0, 1, 0)), + u <= l && n.set(0, 0, 1), + a.crossVectors(i[0], n).normalize(), + r[0].crossVectors(i[0], a), + s[0].crossVectors(i[0], r[0]); + for (let e = 1; e <= t; e++) { + if ( + ((r[e] = r[e - 1].clone()), + (s[e] = s[e - 1].clone()), + a.crossVectors(i[e - 1], i[e]), + a.length() > Number.EPSILON) + ) { + a.normalize(); + const t = Math.acos(ht(i[e - 1].dot(i[e]), -1, 1)); + r[e].applyMatrix4(o.makeRotationAxis(a, t)); + } + s[e].crossVectors(i[e], r[e]); + } + if (!0 === e) { + let e = Math.acos(ht(r[0].dot(r[t]), -1, 1)); + (e /= t), i[0].dot(a.crossVectors(r[0], r[t])) > 0 && (e = -e); + for (let n = 1; n <= t; n++) + r[n].applyMatrix4(o.makeRotationAxis(i[n], e * n)), + s[n].crossVectors(i[n], r[n]); + } + return { tangents: i, normals: r, binormals: s }; + } + clone() { + return new this.constructor().copy(this); + } + copy(t) { + return (this.arcLengthDivisions = t.arcLengthDivisions), this; + } + toJSON() { + const t = { + metadata: { version: 4.5, type: 'Curve', generator: 'Curve.toJSON' }, + }; + return ( + (t.arcLengthDivisions = this.arcLengthDivisions), + (t.type = this.type), + t + ); + } + fromJSON(t) { + return (this.arcLengthDivisions = t.arcLengthDivisions), this; + } + } + class fl extends ml { + constructor( + t = 0, + e = 0, + n = 1, + i = 1, + r = 0, + s = 2 * Math.PI, + a = !1, + o = 0 + ) { + super(), + (this.type = 'EllipseCurve'), + (this.aX = t), + (this.aY = e), + (this.xRadius = n), + (this.yRadius = i), + (this.aStartAngle = r), + (this.aEndAngle = s), + (this.aClockwise = a), + (this.aRotation = o); + } + getPoint(t, e) { + const n = e || new vt(), + i = 2 * Math.PI; + let r = this.aEndAngle - this.aStartAngle; + const s = Math.abs(r) < Number.EPSILON; + for (; r < 0; ) r += i; + for (; r > i; ) r -= i; + r < Number.EPSILON && (r = s ? 0 : i), + !0 !== this.aClockwise || s || (r === i ? (r = -i) : (r -= i)); + const a = this.aStartAngle + t * r; + let o = this.aX + this.xRadius * Math.cos(a), + l = this.aY + this.yRadius * Math.sin(a); + if (0 !== this.aRotation) { + const t = Math.cos(this.aRotation), + e = Math.sin(this.aRotation), + n = o - this.aX, + i = l - this.aY; + (o = n * t - i * e + this.aX), (l = n * e + i * t + this.aY); + } + return n.set(o, l); + } + copy(t) { + return ( + super.copy(t), + (this.aX = t.aX), + (this.aY = t.aY), + (this.xRadius = t.xRadius), + (this.yRadius = t.yRadius), + (this.aStartAngle = t.aStartAngle), + (this.aEndAngle = t.aEndAngle), + (this.aClockwise = t.aClockwise), + (this.aRotation = t.aRotation), + this + ); + } + toJSON() { + const t = super.toJSON(); + return ( + (t.aX = this.aX), + (t.aY = this.aY), + (t.xRadius = this.xRadius), + (t.yRadius = this.yRadius), + (t.aStartAngle = this.aStartAngle), + (t.aEndAngle = this.aEndAngle), + (t.aClockwise = this.aClockwise), + (t.aRotation = this.aRotation), + t + ); + } + fromJSON(t) { + return ( + super.fromJSON(t), + (this.aX = t.aX), + (this.aY = t.aY), + (this.xRadius = t.xRadius), + (this.yRadius = t.yRadius), + (this.aStartAngle = t.aStartAngle), + (this.aEndAngle = t.aEndAngle), + (this.aClockwise = t.aClockwise), + (this.aRotation = t.aRotation), + this + ); + } + } + fl.prototype.isEllipseCurve = !0; + class gl extends fl { + constructor(t, e, n, i, r, s) { + super(t, e, n, n, i, r, s), (this.type = 'ArcCurve'); + } + } + function vl() { + let t = 0, + e = 0, + n = 0, + i = 0; + function r(r, s, a, o) { + (t = r), + (e = a), + (n = -3 * r + 3 * s - 2 * a - o), + (i = 2 * r - 2 * s + a + o); + } + return { + initCatmullRom: function (t, e, n, i, s) { + r(e, n, s * (n - t), s * (i - e)); + }, + initNonuniformCatmullRom: function (t, e, n, i, s, a, o) { + let l = (e - t) / s - (n - t) / (s + a) + (n - e) / a, + c = (n - e) / a - (i - e) / (a + o) + (i - n) / o; + (l *= a), (c *= a), r(e, n, l, c); + }, + calc: function (r) { + const s = r * r; + return t + e * r + n * s + i * (s * r); + }, + }; + } + gl.prototype.isArcCurve = !0; + const yl = new Lt(), + xl = new vl(), + _l = new vl(), + wl = new vl(); + class bl extends ml { + constructor(t = [], e = !1, n = 'centripetal', i = 0.5) { + super(), + (this.type = 'CatmullRomCurve3'), + (this.points = t), + (this.closed = e), + (this.curveType = n), + (this.tension = i); + } + getPoint(t, e = new Lt()) { + const n = e, + i = this.points, + r = i.length, + s = (r - (this.closed ? 0 : 1)) * t; + let a, + o, + l = Math.floor(s), + c = s - l; + this.closed + ? (l += l > 0 ? 0 : (Math.floor(Math.abs(l) / r) + 1) * r) + : 0 === c && l === r - 1 && ((l = r - 2), (c = 1)), + this.closed || l > 0 + ? (a = i[(l - 1) % r]) + : (yl.subVectors(i[0], i[1]).add(i[0]), (a = yl)); + const h = i[l % r], + u = i[(l + 1) % r]; + if ( + (this.closed || l + 2 < r + ? (o = i[(l + 2) % r]) + : (yl.subVectors(i[r - 1], i[r - 2]).add(i[r - 1]), (o = yl)), + 'centripetal' === this.curveType || 'chordal' === this.curveType) + ) { + const t = 'chordal' === this.curveType ? 0.5 : 0.25; + let e = Math.pow(a.distanceToSquared(h), t), + n = Math.pow(h.distanceToSquared(u), t), + i = Math.pow(u.distanceToSquared(o), t); + n < 1e-4 && (n = 1), + e < 1e-4 && (e = n), + i < 1e-4 && (i = n), + xl.initNonuniformCatmullRom(a.x, h.x, u.x, o.x, e, n, i), + _l.initNonuniformCatmullRom(a.y, h.y, u.y, o.y, e, n, i), + wl.initNonuniformCatmullRom(a.z, h.z, u.z, o.z, e, n, i); + } else + 'catmullrom' === this.curveType && + (xl.initCatmullRom(a.x, h.x, u.x, o.x, this.tension), + _l.initCatmullRom(a.y, h.y, u.y, o.y, this.tension), + wl.initCatmullRom(a.z, h.z, u.z, o.z, this.tension)); + return n.set(xl.calc(c), _l.calc(c), wl.calc(c)), n; + } + copy(t) { + super.copy(t), (this.points = []); + for (let e = 0, n = t.points.length; e < n; e++) { + const n = t.points[e]; + this.points.push(n.clone()); + } + return ( + (this.closed = t.closed), + (this.curveType = t.curveType), + (this.tension = t.tension), + this + ); + } + toJSON() { + const t = super.toJSON(); + t.points = []; + for (let e = 0, n = this.points.length; e < n; e++) { + const n = this.points[e]; + t.points.push(n.toArray()); + } + return ( + (t.closed = this.closed), + (t.curveType = this.curveType), + (t.tension = this.tension), + t + ); + } + fromJSON(t) { + super.fromJSON(t), (this.points = []); + for (let e = 0, n = t.points.length; e < n; e++) { + const n = t.points[e]; + this.points.push(new Lt().fromArray(n)); + } + return ( + (this.closed = t.closed), + (this.curveType = t.curveType), + (this.tension = t.tension), + this + ); + } + } + function Ml(t, e, n, i, r) { + const s = 0.5 * (i - e), + a = 0.5 * (r - n), + o = t * t; + return ( + (2 * n - 2 * i + s + a) * (t * o) + + (-3 * n + 3 * i - 2 * s - a) * o + + s * t + + n + ); + } + function Sl(t, e, n, i) { + return ( + (function (t, e) { + const n = 1 - t; + return n * n * e; + })(t, e) + + (function (t, e) { + return 2 * (1 - t) * t * e; + })(t, n) + + (function (t, e) { + return t * t * e; + })(t, i) + ); + } + function Tl(t, e, n, i, r) { + return ( + (function (t, e) { + const n = 1 - t; + return n * n * n * e; + })(t, e) + + (function (t, e) { + const n = 1 - t; + return 3 * n * n * t * e; + })(t, n) + + (function (t, e) { + return 3 * (1 - t) * t * t * e; + })(t, i) + + (function (t, e) { + return t * t * t * e; + })(t, r) + ); + } + bl.prototype.isCatmullRomCurve3 = !0; + class El extends ml { + constructor(t = new vt(), e = new vt(), n = new vt(), i = new vt()) { + super(), + (this.type = 'CubicBezierCurve'), + (this.v0 = t), + (this.v1 = e), + (this.v2 = n), + (this.v3 = i); + } + getPoint(t, e = new vt()) { + const n = e, + i = this.v0, + r = this.v1, + s = this.v2, + a = this.v3; + return n.set(Tl(t, i.x, r.x, s.x, a.x), Tl(t, i.y, r.y, s.y, a.y)), n; + } + copy(t) { + return ( + super.copy(t), + this.v0.copy(t.v0), + this.v1.copy(t.v1), + this.v2.copy(t.v2), + this.v3.copy(t.v3), + this + ); + } + toJSON() { + const t = super.toJSON(); + return ( + (t.v0 = this.v0.toArray()), + (t.v1 = this.v1.toArray()), + (t.v2 = this.v2.toArray()), + (t.v3 = this.v3.toArray()), + t + ); + } + fromJSON(t) { + return ( + super.fromJSON(t), + this.v0.fromArray(t.v0), + this.v1.fromArray(t.v1), + this.v2.fromArray(t.v2), + this.v3.fromArray(t.v3), + this + ); + } + } + El.prototype.isCubicBezierCurve = !0; + class Al extends ml { + constructor(t = new Lt(), e = new Lt(), n = new Lt(), i = new Lt()) { + super(), + (this.type = 'CubicBezierCurve3'), + (this.v0 = t), + (this.v1 = e), + (this.v2 = n), + (this.v3 = i); + } + getPoint(t, e = new Lt()) { + const n = e, + i = this.v0, + r = this.v1, + s = this.v2, + a = this.v3; + return ( + n.set( + Tl(t, i.x, r.x, s.x, a.x), + Tl(t, i.y, r.y, s.y, a.y), + Tl(t, i.z, r.z, s.z, a.z) + ), + n + ); + } + copy(t) { + return ( + super.copy(t), + this.v0.copy(t.v0), + this.v1.copy(t.v1), + this.v2.copy(t.v2), + this.v3.copy(t.v3), + this + ); + } + toJSON() { + const t = super.toJSON(); + return ( + (t.v0 = this.v0.toArray()), + (t.v1 = this.v1.toArray()), + (t.v2 = this.v2.toArray()), + (t.v3 = this.v3.toArray()), + t + ); + } + fromJSON(t) { + return ( + super.fromJSON(t), + this.v0.fromArray(t.v0), + this.v1.fromArray(t.v1), + this.v2.fromArray(t.v2), + this.v3.fromArray(t.v3), + this + ); + } + } + Al.prototype.isCubicBezierCurve3 = !0; + class Ll extends ml { + constructor(t = new vt(), e = new vt()) { + super(), (this.type = 'LineCurve'), (this.v1 = t), (this.v2 = e); + } + getPoint(t, e = new vt()) { + const n = e; + return ( + 1 === t + ? n.copy(this.v2) + : (n.copy(this.v2).sub(this.v1), n.multiplyScalar(t).add(this.v1)), + n + ); + } + getPointAt(t, e) { + return this.getPoint(t, e); + } + getTangent(t, e) { + const n = e || new vt(); + return n.copy(this.v2).sub(this.v1).normalize(), n; + } + copy(t) { + return super.copy(t), this.v1.copy(t.v1), this.v2.copy(t.v2), this; + } + toJSON() { + const t = super.toJSON(); + return (t.v1 = this.v1.toArray()), (t.v2 = this.v2.toArray()), t; + } + fromJSON(t) { + return ( + super.fromJSON(t), + this.v1.fromArray(t.v1), + this.v2.fromArray(t.v2), + this + ); + } + } + Ll.prototype.isLineCurve = !0; + class Rl extends ml { + constructor(t = new Lt(), e = new Lt()) { + super(), + (this.type = 'LineCurve3'), + (this.isLineCurve3 = !0), + (this.v1 = t), + (this.v2 = e); + } + getPoint(t, e = new Lt()) { + const n = e; + return ( + 1 === t + ? n.copy(this.v2) + : (n.copy(this.v2).sub(this.v1), n.multiplyScalar(t).add(this.v1)), + n + ); + } + getPointAt(t, e) { + return this.getPoint(t, e); + } + copy(t) { + return super.copy(t), this.v1.copy(t.v1), this.v2.copy(t.v2), this; + } + toJSON() { + const t = super.toJSON(); + return (t.v1 = this.v1.toArray()), (t.v2 = this.v2.toArray()), t; + } + fromJSON(t) { + return ( + super.fromJSON(t), + this.v1.fromArray(t.v1), + this.v2.fromArray(t.v2), + this + ); + } + } + class Cl extends ml { + constructor(t = new vt(), e = new vt(), n = new vt()) { + super(), + (this.type = 'QuadraticBezierCurve'), + (this.v0 = t), + (this.v1 = e), + (this.v2 = n); + } + getPoint(t, e = new vt()) { + const n = e, + i = this.v0, + r = this.v1, + s = this.v2; + return n.set(Sl(t, i.x, r.x, s.x), Sl(t, i.y, r.y, s.y)), n; + } + copy(t) { + return ( + super.copy(t), + this.v0.copy(t.v0), + this.v1.copy(t.v1), + this.v2.copy(t.v2), + this + ); + } + toJSON() { + const t = super.toJSON(); + return ( + (t.v0 = this.v0.toArray()), + (t.v1 = this.v1.toArray()), + (t.v2 = this.v2.toArray()), + t + ); + } + fromJSON(t) { + return ( + super.fromJSON(t), + this.v0.fromArray(t.v0), + this.v1.fromArray(t.v1), + this.v2.fromArray(t.v2), + this + ); + } + } + Cl.prototype.isQuadraticBezierCurve = !0; + class Pl extends ml { + constructor(t = new Lt(), e = new Lt(), n = new Lt()) { + super(), + (this.type = 'QuadraticBezierCurve3'), + (this.v0 = t), + (this.v1 = e), + (this.v2 = n); + } + getPoint(t, e = new Lt()) { + const n = e, + i = this.v0, + r = this.v1, + s = this.v2; + return ( + n.set(Sl(t, i.x, r.x, s.x), Sl(t, i.y, r.y, s.y), Sl(t, i.z, r.z, s.z)), + n + ); + } + copy(t) { + return ( + super.copy(t), + this.v0.copy(t.v0), + this.v1.copy(t.v1), + this.v2.copy(t.v2), + this + ); + } + toJSON() { + const t = super.toJSON(); + return ( + (t.v0 = this.v0.toArray()), + (t.v1 = this.v1.toArray()), + (t.v2 = this.v2.toArray()), + t + ); + } + fromJSON(t) { + return ( + super.fromJSON(t), + this.v0.fromArray(t.v0), + this.v1.fromArray(t.v1), + this.v2.fromArray(t.v2), + this + ); + } + } + Pl.prototype.isQuadraticBezierCurve3 = !0; + class Dl extends ml { + constructor(t = []) { + super(), (this.type = 'SplineCurve'), (this.points = t); + } + getPoint(t, e = new vt()) { + const n = e, + i = this.points, + r = (i.length - 1) * t, + s = Math.floor(r), + a = r - s, + o = i[0 === s ? s : s - 1], + l = i[s], + c = i[s > i.length - 2 ? i.length - 1 : s + 1], + h = i[s > i.length - 3 ? i.length - 1 : s + 2]; + return n.set(Ml(a, o.x, l.x, c.x, h.x), Ml(a, o.y, l.y, c.y, h.y)), n; + } + copy(t) { + super.copy(t), (this.points = []); + for (let e = 0, n = t.points.length; e < n; e++) { + const n = t.points[e]; + this.points.push(n.clone()); + } + return this; + } + toJSON() { + const t = super.toJSON(); + t.points = []; + for (let e = 0, n = this.points.length; e < n; e++) { + const n = this.points[e]; + t.points.push(n.toArray()); + } + return t; + } + fromJSON(t) { + super.fromJSON(t), (this.points = []); + for (let e = 0, n = t.points.length; e < n; e++) { + const n = t.points[e]; + this.points.push(new vt().fromArray(n)); + } + return this; + } + } + Dl.prototype.isSplineCurve = !0; + var Il = Object.freeze({ + __proto__: null, + ArcCurve: gl, + CatmullRomCurve3: bl, + CubicBezierCurve: El, + CubicBezierCurve3: Al, + EllipseCurve: fl, + LineCurve: Ll, + LineCurve3: Rl, + QuadraticBezierCurve: Cl, + QuadraticBezierCurve3: Pl, + SplineCurve: Dl, + }); + class Nl extends ml { + constructor() { + super(), + (this.type = 'CurvePath'), + (this.curves = []), + (this.autoClose = !1); + } + add(t) { + this.curves.push(t); + } + closePath() { + const t = this.curves[0].getPoint(0), + e = this.curves[this.curves.length - 1].getPoint(1); + t.equals(e) || this.curves.push(new Ll(e, t)); + } + getPoint(t) { + const e = t * this.getLength(), + n = this.getCurveLengths(); + let i = 0; + for (; i < n.length; ) { + if (n[i] >= e) { + const t = n[i] - e, + r = this.curves[i], + s = r.getLength(), + a = 0 === s ? 0 : 1 - t / s; + return r.getPointAt(a); + } + i++; + } + return null; + } + getLength() { + const t = this.getCurveLengths(); + return t[t.length - 1]; + } + updateArcLengths() { + (this.needsUpdate = !0), + (this.cacheLengths = null), + this.getCurveLengths(); + } + getCurveLengths() { + if (this.cacheLengths && this.cacheLengths.length === this.curves.length) + return this.cacheLengths; + const t = []; + let e = 0; + for (let n = 0, i = this.curves.length; n < i; n++) + (e += this.curves[n].getLength()), t.push(e); + return (this.cacheLengths = t), t; + } + getSpacedPoints(t = 40) { + const e = []; + for (let n = 0; n <= t; n++) e.push(this.getPoint(n / t)); + return this.autoClose && e.push(e[0]), e; + } + getPoints(t = 12) { + const e = []; + let n; + for (let i = 0, r = this.curves; i < r.length; i++) { + const s = r[i], + a = + s && s.isEllipseCurve + ? 2 * t + : s && (s.isLineCurve || s.isLineCurve3) + ? 1 + : s && s.isSplineCurve + ? t * s.points.length + : t, + o = s.getPoints(a); + for (let t = 0; t < o.length; t++) { + const i = o[t]; + (n && n.equals(i)) || (e.push(i), (n = i)); + } + } + return ( + this.autoClose && + e.length > 1 && + !e[e.length - 1].equals(e[0]) && + e.push(e[0]), + e + ); + } + copy(t) { + super.copy(t), (this.curves = []); + for (let e = 0, n = t.curves.length; e < n; e++) { + const n = t.curves[e]; + this.curves.push(n.clone()); + } + return (this.autoClose = t.autoClose), this; + } + toJSON() { + const t = super.toJSON(); + (t.autoClose = this.autoClose), (t.curves = []); + for (let e = 0, n = this.curves.length; e < n; e++) { + const n = this.curves[e]; + t.curves.push(n.toJSON()); + } + return t; + } + fromJSON(t) { + super.fromJSON(t), (this.autoClose = t.autoClose), (this.curves = []); + for (let e = 0, n = t.curves.length; e < n; e++) { + const n = t.curves[e]; + this.curves.push(new Il[n.type]().fromJSON(n)); + } + return this; + } + } + class Bl extends Nl { + constructor(t) { + super(), + (this.type = 'Path'), + (this.currentPoint = new vt()), + t && this.setFromPoints(t); + } + setFromPoints(t) { + this.moveTo(t[0].x, t[0].y); + for (let e = 1, n = t.length; e < n; e++) this.lineTo(t[e].x, t[e].y); + return this; + } + moveTo(t, e) { + return this.currentPoint.set(t, e), this; + } + lineTo(t, e) { + const n = new Ll(this.currentPoint.clone(), new vt(t, e)); + return this.curves.push(n), this.currentPoint.set(t, e), this; + } + quadraticCurveTo(t, e, n, i) { + const r = new Cl(this.currentPoint.clone(), new vt(t, e), new vt(n, i)); + return this.curves.push(r), this.currentPoint.set(n, i), this; + } + bezierCurveTo(t, e, n, i, r, s) { + const a = new El( + this.currentPoint.clone(), + new vt(t, e), + new vt(n, i), + new vt(r, s) + ); + return this.curves.push(a), this.currentPoint.set(r, s), this; + } + splineThru(t) { + const e = [this.currentPoint.clone()].concat(t), + n = new Dl(e); + return this.curves.push(n), this.currentPoint.copy(t[t.length - 1]), this; + } + arc(t, e, n, i, r, s) { + const a = this.currentPoint.x, + o = this.currentPoint.y; + return this.absarc(t + a, e + o, n, i, r, s), this; + } + absarc(t, e, n, i, r, s) { + return this.absellipse(t, e, n, n, i, r, s), this; + } + ellipse(t, e, n, i, r, s, a, o) { + const l = this.currentPoint.x, + c = this.currentPoint.y; + return this.absellipse(t + l, e + c, n, i, r, s, a, o), this; + } + absellipse(t, e, n, i, r, s, a, o) { + const l = new fl(t, e, n, i, r, s, a, o); + if (this.curves.length > 0) { + const t = l.getPoint(0); + t.equals(this.currentPoint) || this.lineTo(t.x, t.y); + } + this.curves.push(l); + const c = l.getPoint(1); + return this.currentPoint.copy(c), this; + } + copy(t) { + return super.copy(t), this.currentPoint.copy(t.currentPoint), this; + } + toJSON() { + const t = super.toJSON(); + return (t.currentPoint = this.currentPoint.toArray()), t; + } + fromJSON(t) { + return ( + super.fromJSON(t), this.currentPoint.fromArray(t.currentPoint), this + ); + } + } + class zl extends Bl { + constructor(t) { + super(t), (this.uuid = ct()), (this.type = 'Shape'), (this.holes = []); + } + getPointsHoles(t) { + const e = []; + for (let n = 0, i = this.holes.length; n < i; n++) + e[n] = this.holes[n].getPoints(t); + return e; + } + extractPoints(t) { + return { shape: this.getPoints(t), holes: this.getPointsHoles(t) }; + } + copy(t) { + super.copy(t), (this.holes = []); + for (let e = 0, n = t.holes.length; e < n; e++) { + const n = t.holes[e]; + this.holes.push(n.clone()); + } + return this; + } + toJSON() { + const t = super.toJSON(); + (t.uuid = this.uuid), (t.holes = []); + for (let e = 0, n = this.holes.length; e < n; e++) { + const n = this.holes[e]; + t.holes.push(n.toJSON()); + } + return t; + } + fromJSON(t) { + super.fromJSON(t), (this.uuid = t.uuid), (this.holes = []); + for (let e = 0, n = t.holes.length; e < n; e++) { + const n = t.holes[e]; + this.holes.push(new Bl().fromJSON(n)); + } + return this; + } + } + class Fl extends Ce { + constructor(t, e = 1) { + super(), + (this.type = 'Light'), + (this.color = new tn(t)), + (this.intensity = e); + } + dispose() {} + copy(t) { + return ( + super.copy(t), + this.color.copy(t.color), + (this.intensity = t.intensity), + this + ); + } + toJSON(t) { + const e = super.toJSON(t); + return ( + (e.object.color = this.color.getHex()), + (e.object.intensity = this.intensity), + void 0 !== this.groundColor && + (e.object.groundColor = this.groundColor.getHex()), + void 0 !== this.distance && (e.object.distance = this.distance), + void 0 !== this.angle && (e.object.angle = this.angle), + void 0 !== this.decay && (e.object.decay = this.decay), + void 0 !== this.penumbra && (e.object.penumbra = this.penumbra), + void 0 !== this.shadow && (e.object.shadow = this.shadow.toJSON()), + e + ); + } + } + Fl.prototype.isLight = !0; + class Ol extends Fl { + constructor(t, e, n) { + super(t, n), + (this.type = 'HemisphereLight'), + this.position.copy(Ce.DefaultUp), + this.updateMatrix(), + (this.groundColor = new tn(e)); + } + copy(t) { + return ( + Fl.prototype.copy.call(this, t), + this.groundColor.copy(t.groundColor), + this + ); + } + } + Ol.prototype.isHemisphereLight = !0; + const Hl = new se(), + Gl = new Lt(), + Ul = new Lt(); + class kl { + constructor(t) { + (this.camera = t), + (this.bias = 0), + (this.normalBias = 0), + (this.radius = 1), + (this.mapSize = new vt(512, 512)), + (this.map = null), + (this.mapPass = null), + (this.matrix = new se()), + (this.autoUpdate = !0), + (this.needsUpdate = !1), + (this._frustum = new ai()), + (this._frameExtents = new vt(1, 1)), + (this._viewportCount = 1), + (this._viewports = [new St(0, 0, 1, 1)]); + } + getViewportCount() { + return this._viewportCount; + } + getFrustum() { + return this._frustum; + } + updateMatrices(t) { + const e = this.camera, + n = this.matrix; + Gl.setFromMatrixPosition(t.matrixWorld), + e.position.copy(Gl), + Ul.setFromMatrixPosition(t.target.matrixWorld), + e.lookAt(Ul), + e.updateMatrixWorld(), + Hl.multiplyMatrices(e.projectionMatrix, e.matrixWorldInverse), + this._frustum.setFromProjectionMatrix(Hl), + n.set(0.5, 0, 0, 0.5, 0, 0.5, 0, 0.5, 0, 0, 0.5, 0.5, 0, 0, 0, 1), + n.multiply(e.projectionMatrix), + n.multiply(e.matrixWorldInverse); + } + getViewport(t) { + return this._viewports[t]; + } + getFrameExtents() { + return this._frameExtents; + } + dispose() { + this.map && this.map.dispose(), this.mapPass && this.mapPass.dispose(); + } + copy(t) { + return ( + (this.camera = t.camera.clone()), + (this.bias = t.bias), + (this.radius = t.radius), + this.mapSize.copy(t.mapSize), + this + ); + } + clone() { + return new this.constructor().copy(this); + } + toJSON() { + const t = {}; + return ( + 0 !== this.bias && (t.bias = this.bias), + 0 !== this.normalBias && (t.normalBias = this.normalBias), + 1 !== this.radius && (t.radius = this.radius), + (512 === this.mapSize.x && 512 === this.mapSize.y) || + (t.mapSize = this.mapSize.toArray()), + (t.camera = this.camera.toJSON(!1).object), + delete t.camera.matrix, + t + ); + } + } + class Vl extends kl { + constructor() { + super(new Kn(50, 1, 0.5, 500)), (this.focus = 1); + } + updateMatrices(t) { + const e = this.camera, + n = 2 * lt * t.angle * this.focus, + i = this.mapSize.width / this.mapSize.height, + r = t.distance || e.far; + (n === e.fov && i === e.aspect && r === e.far) || + ((e.fov = n), (e.aspect = i), (e.far = r), e.updateProjectionMatrix()), + super.updateMatrices(t); + } + copy(t) { + return super.copy(t), (this.focus = t.focus), this; + } + } + Vl.prototype.isSpotLightShadow = !0; + class Wl extends Fl { + constructor(t, e, n = 0, i = Math.PI / 3, r = 0, s = 1) { + super(t, e), + (this.type = 'SpotLight'), + this.position.copy(Ce.DefaultUp), + this.updateMatrix(), + (this.target = new Ce()), + (this.distance = n), + (this.angle = i), + (this.penumbra = r), + (this.decay = s), + (this.shadow = new Vl()); + } + get power() { + return this.intensity * Math.PI; + } + set power(t) { + this.intensity = t / Math.PI; + } + dispose() { + this.shadow.dispose(); + } + copy(t) { + return ( + super.copy(t), + (this.distance = t.distance), + (this.angle = t.angle), + (this.penumbra = t.penumbra), + (this.decay = t.decay), + (this.target = t.target.clone()), + (this.shadow = t.shadow.clone()), + this + ); + } + } + Wl.prototype.isSpotLight = !0; + const jl = new se(), + ql = new Lt(), + Xl = new Lt(); + class Yl extends kl { + constructor() { + super(new Kn(90, 1, 0.5, 500)), + (this._frameExtents = new vt(4, 2)), + (this._viewportCount = 6), + (this._viewports = [ + new St(2, 1, 1, 1), + new St(0, 1, 1, 1), + new St(3, 1, 1, 1), + new St(1, 1, 1, 1), + new St(3, 0, 1, 1), + new St(1, 0, 1, 1), + ]), + (this._cubeDirections = [ + new Lt(1, 0, 0), + new Lt(-1, 0, 0), + new Lt(0, 0, 1), + new Lt(0, 0, -1), + new Lt(0, 1, 0), + new Lt(0, -1, 0), + ]), + (this._cubeUps = [ + new Lt(0, 1, 0), + new Lt(0, 1, 0), + new Lt(0, 1, 0), + new Lt(0, 1, 0), + new Lt(0, 0, 1), + new Lt(0, 0, -1), + ]); + } + updateMatrices(t, e = 0) { + const n = this.camera, + i = this.matrix, + r = t.distance || n.far; + r !== n.far && ((n.far = r), n.updateProjectionMatrix()), + ql.setFromMatrixPosition(t.matrixWorld), + n.position.copy(ql), + Xl.copy(n.position), + Xl.add(this._cubeDirections[e]), + n.up.copy(this._cubeUps[e]), + n.lookAt(Xl), + n.updateMatrixWorld(), + i.makeTranslation(-ql.x, -ql.y, -ql.z), + jl.multiplyMatrices(n.projectionMatrix, n.matrixWorldInverse), + this._frustum.setFromProjectionMatrix(jl); + } + } + Yl.prototype.isPointLightShadow = !0; + class Zl extends Fl { + constructor(t, e, n = 0, i = 1) { + super(t, e), + (this.type = 'PointLight'), + (this.distance = n), + (this.decay = i), + (this.shadow = new Yl()); + } + get power() { + return 4 * this.intensity * Math.PI; + } + set power(t) { + this.intensity = t / (4 * Math.PI); + } + dispose() { + this.shadow.dispose(); + } + copy(t) { + return ( + super.copy(t), + (this.distance = t.distance), + (this.decay = t.decay), + (this.shadow = t.shadow.clone()), + this + ); + } + } + Zl.prototype.isPointLight = !0; + class Jl extends Qn { + constructor(t = -1, e = 1, n = 1, i = -1, r = 0.1, s = 2e3) { + super(), + (this.type = 'OrthographicCamera'), + (this.zoom = 1), + (this.view = null), + (this.left = t), + (this.right = e), + (this.top = n), + (this.bottom = i), + (this.near = r), + (this.far = s), + this.updateProjectionMatrix(); + } + copy(t, e) { + return ( + super.copy(t, e), + (this.left = t.left), + (this.right = t.right), + (this.top = t.top), + (this.bottom = t.bottom), + (this.near = t.near), + (this.far = t.far), + (this.zoom = t.zoom), + (this.view = null === t.view ? null : Object.assign({}, t.view)), + this + ); + } + setViewOffset(t, e, n, i, r, s) { + null === this.view && + (this.view = { + enabled: !0, + fullWidth: 1, + fullHeight: 1, + offsetX: 0, + offsetY: 0, + width: 1, + height: 1, + }), + (this.view.enabled = !0), + (this.view.fullWidth = t), + (this.view.fullHeight = e), + (this.view.offsetX = n), + (this.view.offsetY = i), + (this.view.width = r), + (this.view.height = s), + this.updateProjectionMatrix(); + } + clearViewOffset() { + null !== this.view && (this.view.enabled = !1), + this.updateProjectionMatrix(); + } + updateProjectionMatrix() { + const t = (this.right - this.left) / (2 * this.zoom), + e = (this.top - this.bottom) / (2 * this.zoom), + n = (this.right + this.left) / 2, + i = (this.top + this.bottom) / 2; + let r = n - t, + s = n + t, + a = i + e, + o = i - e; + if (null !== this.view && this.view.enabled) { + const t = (this.right - this.left) / this.view.fullWidth / this.zoom, + e = (this.top - this.bottom) / this.view.fullHeight / this.zoom; + (r += t * this.view.offsetX), + (s = r + t * this.view.width), + (a -= e * this.view.offsetY), + (o = a - e * this.view.height); + } + this.projectionMatrix.makeOrthographic(r, s, a, o, this.near, this.far), + this.projectionMatrixInverse.copy(this.projectionMatrix).invert(); + } + toJSON(t) { + const e = super.toJSON(t); + return ( + (e.object.zoom = this.zoom), + (e.object.left = this.left), + (e.object.right = this.right), + (e.object.top = this.top), + (e.object.bottom = this.bottom), + (e.object.near = this.near), + (e.object.far = this.far), + null !== this.view && (e.object.view = Object.assign({}, this.view)), + e + ); + } + } + Jl.prototype.isOrthographicCamera = !0; + class Ql extends kl { + constructor() { + super(new Jl(-5, 5, 5, -5, 0.5, 500)); + } + } + Ql.prototype.isDirectionalLightShadow = !0; + class Kl extends Fl { + constructor(t, e) { + super(t, e), + (this.type = 'DirectionalLight'), + this.position.copy(Ce.DefaultUp), + this.updateMatrix(), + (this.target = new Ce()), + (this.shadow = new Ql()); + } + dispose() { + this.shadow.dispose(); + } + copy(t) { + return ( + super.copy(t), + (this.target = t.target.clone()), + (this.shadow = t.shadow.clone()), + this + ); + } + } + Kl.prototype.isDirectionalLight = !0; + class $l extends Fl { + constructor(t, e) { + super(t, e), (this.type = 'AmbientLight'); + } + } + $l.prototype.isAmbientLight = !0; + class tc extends Fl { + constructor(t, e, n = 10, i = 10) { + super(t, e), + (this.type = 'RectAreaLight'), + (this.width = n), + (this.height = i); + } + copy(t) { + return ( + super.copy(t), (this.width = t.width), (this.height = t.height), this + ); + } + toJSON(t) { + const e = super.toJSON(t); + return (e.object.width = this.width), (e.object.height = this.height), e; + } + } + tc.prototype.isRectAreaLight = !0; + class ec { + constructor() { + this.coefficients = []; + for (let t = 0; t < 9; t++) this.coefficients.push(new Lt()); + } + set(t) { + for (let e = 0; e < 9; e++) this.coefficients[e].copy(t[e]); + return this; + } + zero() { + for (let t = 0; t < 9; t++) this.coefficients[t].set(0, 0, 0); + return this; + } + getAt(t, e) { + const n = t.x, + i = t.y, + r = t.z, + s = this.coefficients; + return ( + e.copy(s[0]).multiplyScalar(0.282095), + e.addScaledVector(s[1], 0.488603 * i), + e.addScaledVector(s[2], 0.488603 * r), + e.addScaledVector(s[3], 0.488603 * n), + e.addScaledVector(s[4], n * i * 1.092548), + e.addScaledVector(s[5], i * r * 1.092548), + e.addScaledVector(s[6], 0.315392 * (3 * r * r - 1)), + e.addScaledVector(s[7], n * r * 1.092548), + e.addScaledVector(s[8], 0.546274 * (n * n - i * i)), + e + ); + } + getIrradianceAt(t, e) { + const n = t.x, + i = t.y, + r = t.z, + s = this.coefficients; + return ( + e.copy(s[0]).multiplyScalar(0.886227), + e.addScaledVector(s[1], 1.023328 * i), + e.addScaledVector(s[2], 1.023328 * r), + e.addScaledVector(s[3], 1.023328 * n), + e.addScaledVector(s[4], 0.858086 * n * i), + e.addScaledVector(s[5], 0.858086 * i * r), + e.addScaledVector(s[6], 0.743125 * r * r - 0.247708), + e.addScaledVector(s[7], 0.858086 * n * r), + e.addScaledVector(s[8], 0.429043 * (n * n - i * i)), + e + ); + } + add(t) { + for (let e = 0; e < 9; e++) this.coefficients[e].add(t.coefficients[e]); + return this; + } + addScaledSH(t, e) { + for (let n = 0; n < 9; n++) + this.coefficients[n].addScaledVector(t.coefficients[n], e); + return this; + } + scale(t) { + for (let e = 0; e < 9; e++) this.coefficients[e].multiplyScalar(t); + return this; + } + lerp(t, e) { + for (let n = 0; n < 9; n++) + this.coefficients[n].lerp(t.coefficients[n], e); + return this; + } + equals(t) { + for (let e = 0; e < 9; e++) + if (!this.coefficients[e].equals(t.coefficients[e])) return !1; + return !0; + } + copy(t) { + return this.set(t.coefficients); + } + clone() { + return new this.constructor().copy(this); + } + fromArray(t, e = 0) { + const n = this.coefficients; + for (let i = 0; i < 9; i++) n[i].fromArray(t, e + 3 * i); + return this; + } + toArray(t = [], e = 0) { + const n = this.coefficients; + for (let i = 0; i < 9; i++) n[i].toArray(t, e + 3 * i); + return t; + } + static getBasisAt(t, e) { + const n = t.x, + i = t.y, + r = t.z; + (e[0] = 0.282095), + (e[1] = 0.488603 * i), + (e[2] = 0.488603 * r), + (e[3] = 0.488603 * n), + (e[4] = 1.092548 * n * i), + (e[5] = 1.092548 * i * r), + (e[6] = 0.315392 * (3 * r * r - 1)), + (e[7] = 1.092548 * n * r), + (e[8] = 0.546274 * (n * n - i * i)); + } + } + ec.prototype.isSphericalHarmonics3 = !0; + class nc extends Fl { + constructor(t = new ec(), e = 1) { + super(void 0, e), (this.sh = t); + } + copy(t) { + return super.copy(t), this.sh.copy(t.sh), this; + } + fromJSON(t) { + return (this.intensity = t.intensity), this.sh.fromArray(t.sh), this; + } + toJSON(t) { + const e = super.toJSON(t); + return (e.object.sh = this.sh.toArray()), e; + } + } + nc.prototype.isLightProbe = !0; + class ic extends ol { + constructor(t) { + super(t), (this.textures = {}); + } + load(t, e, n, i) { + const r = this, + s = new cl(r.manager); + s.setPath(r.path), + s.setRequestHeader(r.requestHeader), + s.setWithCredentials(r.withCredentials), + s.load( + t, + function (n) { + try { + e(r.parse(JSON.parse(n))); + } catch (e) { + i ? i(e) : console.error(e), r.manager.itemError(t); + } + }, + n, + i + ); + } + parse(t) { + const e = this.textures; + function n(t) { + return ( + void 0 === e[t] && + console.warn('THREE.MaterialLoader: Undefined texture', t), + e[t] + ); + } + const i = new ko[t.type](); + if ( + (void 0 !== t.uuid && (i.uuid = t.uuid), + void 0 !== t.name && (i.name = t.name), + void 0 !== t.color && void 0 !== i.color && i.color.setHex(t.color), + void 0 !== t.roughness && (i.roughness = t.roughness), + void 0 !== t.metalness && (i.metalness = t.metalness), + void 0 !== t.sheen && (i.sheen = new tn().setHex(t.sheen)), + void 0 !== t.emissive && + void 0 !== i.emissive && + i.emissive.setHex(t.emissive), + void 0 !== t.specular && + void 0 !== i.specular && + i.specular.setHex(t.specular), + void 0 !== t.shininess && (i.shininess = t.shininess), + void 0 !== t.clearcoat && (i.clearcoat = t.clearcoat), + void 0 !== t.clearcoatRoughness && + (i.clearcoatRoughness = t.clearcoatRoughness), + void 0 !== t.fog && (i.fog = t.fog), + void 0 !== t.flatShading && (i.flatShading = t.flatShading), + void 0 !== t.blending && (i.blending = t.blending), + void 0 !== t.combine && (i.combine = t.combine), + void 0 !== t.side && (i.side = t.side), + void 0 !== t.shadowSide && (i.shadowSide = t.shadowSide), + void 0 !== t.opacity && (i.opacity = t.opacity), + void 0 !== t.transparent && (i.transparent = t.transparent), + void 0 !== t.alphaTest && (i.alphaTest = t.alphaTest), + void 0 !== t.depthTest && (i.depthTest = t.depthTest), + void 0 !== t.depthWrite && (i.depthWrite = t.depthWrite), + void 0 !== t.colorWrite && (i.colorWrite = t.colorWrite), + void 0 !== t.stencilWrite && (i.stencilWrite = t.stencilWrite), + void 0 !== t.stencilWriteMask && + (i.stencilWriteMask = t.stencilWriteMask), + void 0 !== t.stencilFunc && (i.stencilFunc = t.stencilFunc), + void 0 !== t.stencilRef && (i.stencilRef = t.stencilRef), + void 0 !== t.stencilFuncMask && (i.stencilFuncMask = t.stencilFuncMask), + void 0 !== t.stencilFail && (i.stencilFail = t.stencilFail), + void 0 !== t.stencilZFail && (i.stencilZFail = t.stencilZFail), + void 0 !== t.stencilZPass && (i.stencilZPass = t.stencilZPass), + void 0 !== t.wireframe && (i.wireframe = t.wireframe), + void 0 !== t.wireframeLinewidth && + (i.wireframeLinewidth = t.wireframeLinewidth), + void 0 !== t.wireframeLinecap && + (i.wireframeLinecap = t.wireframeLinecap), + void 0 !== t.wireframeLinejoin && + (i.wireframeLinejoin = t.wireframeLinejoin), + void 0 !== t.rotation && (i.rotation = t.rotation), + 1 !== t.linewidth && (i.linewidth = t.linewidth), + void 0 !== t.dashSize && (i.dashSize = t.dashSize), + void 0 !== t.gapSize && (i.gapSize = t.gapSize), + void 0 !== t.scale && (i.scale = t.scale), + void 0 !== t.polygonOffset && (i.polygonOffset = t.polygonOffset), + void 0 !== t.polygonOffsetFactor && + (i.polygonOffsetFactor = t.polygonOffsetFactor), + void 0 !== t.polygonOffsetUnits && + (i.polygonOffsetUnits = t.polygonOffsetUnits), + void 0 !== t.skinning && (i.skinning = t.skinning), + void 0 !== t.morphTargets && (i.morphTargets = t.morphTargets), + void 0 !== t.morphNormals && (i.morphNormals = t.morphNormals), + void 0 !== t.dithering && (i.dithering = t.dithering), + void 0 !== t.alphaToCoverage && (i.alphaToCoverage = t.alphaToCoverage), + void 0 !== t.premultipliedAlpha && + (i.premultipliedAlpha = t.premultipliedAlpha), + void 0 !== t.vertexTangents && (i.vertexTangents = t.vertexTangents), + void 0 !== t.visible && (i.visible = t.visible), + void 0 !== t.toneMapped && (i.toneMapped = t.toneMapped), + void 0 !== t.userData && (i.userData = t.userData), + void 0 !== t.vertexColors && + ('number' == typeof t.vertexColors + ? (i.vertexColors = t.vertexColors > 0) + : (i.vertexColors = t.vertexColors)), + void 0 !== t.uniforms) + ) + for (const e in t.uniforms) { + const r = t.uniforms[e]; + switch (((i.uniforms[e] = {}), r.type)) { + case 't': + i.uniforms[e].value = n(r.value); + break; + case 'c': + i.uniforms[e].value = new tn().setHex(r.value); + break; + case 'v2': + i.uniforms[e].value = new vt().fromArray(r.value); + break; + case 'v3': + i.uniforms[e].value = new Lt().fromArray(r.value); + break; + case 'v4': + i.uniforms[e].value = new St().fromArray(r.value); + break; + case 'm3': + i.uniforms[e].value = new yt().fromArray(r.value); + break; + case 'm4': + i.uniforms[e].value = new se().fromArray(r.value); + break; + default: + i.uniforms[e].value = r.value; + } + } + if ( + (void 0 !== t.defines && (i.defines = t.defines), + void 0 !== t.vertexShader && (i.vertexShader = t.vertexShader), + void 0 !== t.fragmentShader && (i.fragmentShader = t.fragmentShader), + void 0 !== t.extensions) + ) + for (const e in t.extensions) i.extensions[e] = t.extensions[e]; + if ( + (void 0 !== t.shading && (i.flatShading = 1 === t.shading), + void 0 !== t.size && (i.size = t.size), + void 0 !== t.sizeAttenuation && (i.sizeAttenuation = t.sizeAttenuation), + void 0 !== t.map && (i.map = n(t.map)), + void 0 !== t.matcap && (i.matcap = n(t.matcap)), + void 0 !== t.alphaMap && (i.alphaMap = n(t.alphaMap)), + void 0 !== t.bumpMap && (i.bumpMap = n(t.bumpMap)), + void 0 !== t.bumpScale && (i.bumpScale = t.bumpScale), + void 0 !== t.normalMap && (i.normalMap = n(t.normalMap)), + void 0 !== t.normalMapType && (i.normalMapType = t.normalMapType), + void 0 !== t.normalScale) + ) { + let e = t.normalScale; + !1 === Array.isArray(e) && (e = [e, e]), + (i.normalScale = new vt().fromArray(e)); + } + return ( + void 0 !== t.displacementMap && + (i.displacementMap = n(t.displacementMap)), + void 0 !== t.displacementScale && + (i.displacementScale = t.displacementScale), + void 0 !== t.displacementBias && + (i.displacementBias = t.displacementBias), + void 0 !== t.roughnessMap && (i.roughnessMap = n(t.roughnessMap)), + void 0 !== t.metalnessMap && (i.metalnessMap = n(t.metalnessMap)), + void 0 !== t.emissiveMap && (i.emissiveMap = n(t.emissiveMap)), + void 0 !== t.emissiveIntensity && + (i.emissiveIntensity = t.emissiveIntensity), + void 0 !== t.specularMap && (i.specularMap = n(t.specularMap)), + void 0 !== t.envMap && (i.envMap = n(t.envMap)), + void 0 !== t.envMapIntensity && (i.envMapIntensity = t.envMapIntensity), + void 0 !== t.reflectivity && (i.reflectivity = t.reflectivity), + void 0 !== t.refractionRatio && (i.refractionRatio = t.refractionRatio), + void 0 !== t.lightMap && (i.lightMap = n(t.lightMap)), + void 0 !== t.lightMapIntensity && + (i.lightMapIntensity = t.lightMapIntensity), + void 0 !== t.aoMap && (i.aoMap = n(t.aoMap)), + void 0 !== t.aoMapIntensity && (i.aoMapIntensity = t.aoMapIntensity), + void 0 !== t.gradientMap && (i.gradientMap = n(t.gradientMap)), + void 0 !== t.clearcoatMap && (i.clearcoatMap = n(t.clearcoatMap)), + void 0 !== t.clearcoatRoughnessMap && + (i.clearcoatRoughnessMap = n(t.clearcoatRoughnessMap)), + void 0 !== t.clearcoatNormalMap && + (i.clearcoatNormalMap = n(t.clearcoatNormalMap)), + void 0 !== t.clearcoatNormalScale && + (i.clearcoatNormalScale = new vt().fromArray(t.clearcoatNormalScale)), + void 0 !== t.transmission && (i.transmission = t.transmission), + void 0 !== t.transmissionMap && + (i.transmissionMap = n(t.transmissionMap)), + i + ); + } + setTextures(t) { + return (this.textures = t), this; + } + } + class rc { + static decodeText(t) { + if ('undefined' != typeof TextDecoder) return new TextDecoder().decode(t); + let e = ''; + for (let n = 0, i = t.length; n < i; n++) e += String.fromCharCode(t[n]); + try { + return decodeURIComponent(escape(e)); + } catch (t) { + return e; + } + } + static extractUrlBase(t) { + const e = t.lastIndexOf('/'); + return -1 === e ? './' : t.substr(0, e + 1); + } + } + class sc extends En { + constructor() { + super(), + (this.type = 'InstancedBufferGeometry'), + (this.instanceCount = 1 / 0); + } + copy(t) { + return super.copy(t), (this.instanceCount = t.instanceCount), this; + } + clone() { + return new this.constructor().copy(this); + } + toJSON() { + const t = super.toJSON(this); + return ( + (t.instanceCount = this.instanceCount), + (t.isInstancedBufferGeometry = !0), + t + ); + } + } + sc.prototype.isInstancedBufferGeometry = !0; + class ac extends sn { + constructor(t, e, n, i) { + 'number' == typeof n && + ((i = n), + (n = !1), + console.error( + 'THREE.InstancedBufferAttribute: The constructor now expects normalized as the third argument.' + )), + super(t, e, n), + (this.meshPerAttribute = i || 1); + } + copy(t) { + return super.copy(t), (this.meshPerAttribute = t.meshPerAttribute), this; + } + toJSON() { + const t = super.toJSON(); + return ( + (t.meshPerAttribute = this.meshPerAttribute), + (t.isInstancedBufferAttribute = !0), + t + ); + } + } + ac.prototype.isInstancedBufferAttribute = !0; + class oc extends ol { + constructor(t) { + super(t); + } + load(t, e, n, i) { + const r = this, + s = new cl(r.manager); + s.setPath(r.path), + s.setRequestHeader(r.requestHeader), + s.setWithCredentials(r.withCredentials), + s.load( + t, + function (n) { + try { + e(r.parse(JSON.parse(n))); + } catch (e) { + i ? i(e) : console.error(e), r.manager.itemError(t); + } + }, + n, + i + ); + } + parse(t) { + const e = {}, + n = {}; + function i(t, i) { + if (void 0 !== e[i]) return e[i]; + const r = t.interleavedBuffers[i], + s = (function (t, e) { + if (void 0 !== n[e]) return n[e]; + const i = t.arrayBuffers[e], + r = new Uint32Array(i).buffer; + return (n[e] = r), r; + })(t, r.buffer), + a = yn(r.type, s), + o = new Es(a, r.stride); + return (o.uuid = r.uuid), (e[i] = o), o; + } + const r = t.isInstancedBufferGeometry ? new sc() : new En(), + s = t.data.index; + if (void 0 !== s) { + const t = yn(s.type, s.array); + r.setIndex(new sn(t, 1)); + } + const a = t.data.attributes; + for (const e in a) { + const n = a[e]; + let s; + if (n.isInterleavedBufferAttribute) { + const e = i(t.data, n.data); + s = new Ls(e, n.itemSize, n.offset, n.normalized); + } else { + const t = yn(n.type, n.array); + s = new (n.isInstancedBufferAttribute ? ac : sn)( + t, + n.itemSize, + n.normalized + ); + } + void 0 !== n.name && (s.name = n.name), + void 0 !== n.usage && s.setUsage(n.usage), + void 0 !== n.updateRange && + ((s.updateRange.offset = n.updateRange.offset), + (s.updateRange.count = n.updateRange.count)), + r.setAttribute(e, s); + } + const o = t.data.morphAttributes; + if (o) + for (const e in o) { + const n = o[e], + s = []; + for (let e = 0, r = n.length; e < r; e++) { + const r = n[e]; + let a; + if (r.isInterleavedBufferAttribute) { + const e = i(t.data, r.data); + a = new Ls(e, r.itemSize, r.offset, r.normalized); + } else { + const t = yn(r.type, r.array); + a = new sn(t, r.itemSize, r.normalized); + } + void 0 !== r.name && (a.name = r.name), s.push(a); + } + r.morphAttributes[e] = s; + } + t.data.morphTargetsRelative && (r.morphTargetsRelative = !0); + const l = t.data.groups || t.data.drawcalls || t.data.offsets; + if (void 0 !== l) + for (let t = 0, e = l.length; t !== e; ++t) { + const e = l[t]; + r.addGroup(e.start, e.count, e.materialIndex); + } + const c = t.data.boundingSphere; + if (void 0 !== c) { + const t = new Lt(); + void 0 !== c.center && t.fromArray(c.center), + (r.boundingSphere = new Jt(t, c.radius)); + } + return ( + t.name && (r.name = t.name), t.userData && (r.userData = t.userData), r + ); + } + } + const lc = { + UVMapping: i, + CubeReflectionMapping: r, + CubeRefractionMapping: s, + EquirectangularReflectionMapping: a, + EquirectangularRefractionMapping: o, + CubeUVReflectionMapping: l, + CubeUVRefractionMapping: c, + }, + cc = { + RepeatWrapping: h, + ClampToEdgeWrapping: u, + MirroredRepeatWrapping: d, + }, + hc = { + NearestFilter: p, + NearestMipmapNearestFilter: m, + NearestMipmapLinearFilter: f, + LinearFilter: g, + LinearMipmapNearestFilter: v, + LinearMipmapLinearFilter: y, + }; + class uc extends ol { + constructor(t) { + super(t), + 'undefined' == typeof createImageBitmap && + console.warn( + 'THREE.ImageBitmapLoader: createImageBitmap() not supported.' + ), + 'undefined' == typeof fetch && + console.warn('THREE.ImageBitmapLoader: fetch() not supported.'), + (this.options = { premultiplyAlpha: 'none' }); + } + setOptions(t) { + return (this.options = t), this; + } + load(t, e, n, i) { + void 0 === t && (t = ''), + void 0 !== this.path && (t = this.path + t), + (t = this.manager.resolveURL(t)); + const r = this, + s = rl.get(t); + if (void 0 !== s) + return ( + r.manager.itemStart(t), + setTimeout(function () { + e && e(s), r.manager.itemEnd(t); + }, 0), + s + ); + const a = {}; + (a.credentials = + 'anonymous' === this.crossOrigin ? 'same-origin' : 'include'), + (a.headers = this.requestHeader), + fetch(t, a) + .then(function (t) { + return t.blob(); + }) + .then(function (t) { + return createImageBitmap( + t, + Object.assign(r.options, { colorSpaceConversion: 'none' }) + ); + }) + .then(function (n) { + rl.add(t, n), e && e(n), r.manager.itemEnd(t); + }) + .catch(function (e) { + i && i(e), r.manager.itemError(t), r.manager.itemEnd(t); + }), + r.manager.itemStart(t); + } + } + uc.prototype.isImageBitmapLoader = !0; + class dc { + constructor() { + (this.type = 'ShapePath'), + (this.color = new tn()), + (this.subPaths = []), + (this.currentPath = null); + } + moveTo(t, e) { + return ( + (this.currentPath = new Bl()), + this.subPaths.push(this.currentPath), + this.currentPath.moveTo(t, e), + this + ); + } + lineTo(t, e) { + return this.currentPath.lineTo(t, e), this; + } + quadraticCurveTo(t, e, n, i) { + return this.currentPath.quadraticCurveTo(t, e, n, i), this; + } + bezierCurveTo(t, e, n, i, r, s) { + return this.currentPath.bezierCurveTo(t, e, n, i, r, s), this; + } + splineThru(t) { + return this.currentPath.splineThru(t), this; + } + toShapes(t, e) { + function n(t) { + const e = []; + for (let n = 0, i = t.length; n < i; n++) { + const i = t[n], + r = new zl(); + (r.curves = i.curves), e.push(r); + } + return e; + } + function i(t, e) { + const n = e.length; + let i = !1; + for (let r = n - 1, s = 0; s < n; r = s++) { + let n = e[r], + a = e[s], + o = a.x - n.x, + l = a.y - n.y; + if (Math.abs(l) > Number.EPSILON) { + if ( + (l < 0 && ((n = e[s]), (o = -o), (a = e[r]), (l = -l)), + t.y < n.y || t.y > a.y) + ) + continue; + if (t.y === n.y) { + if (t.x === n.x) return !0; + } else { + const e = l * (t.x - n.x) - o * (t.y - n.y); + if (0 === e) return !0; + if (e < 0) continue; + i = !i; + } + } else { + if (t.y !== n.y) continue; + if ((a.x <= t.x && t.x <= n.x) || (n.x <= t.x && t.x <= a.x)) + return !0; + } + } + return i; + } + const r = po.isClockWise, + s = this.subPaths; + if (0 === s.length) return []; + if (!0 === e) return n(s); + let a, o, l; + const c = []; + if (1 === s.length) + return (o = s[0]), (l = new zl()), (l.curves = o.curves), c.push(l), c; + let h = !r(s[0].getPoints()); + h = t ? !h : h; + const u = [], + d = []; + let p, + m, + f = [], + g = 0; + (d[g] = void 0), (f[g] = []); + for (let e = 0, n = s.length; e < n; e++) + (o = s[e]), + (p = o.getPoints()), + (a = r(p)), + (a = t ? !a : a), + a + ? (!h && d[g] && g++, + (d[g] = { s: new zl(), p: p }), + (d[g].s.curves = o.curves), + h && g++, + (f[g] = [])) + : f[g].push({ h: o, p: p[0] }); + if (!d[0]) return n(s); + if (d.length > 1) { + let t = !1; + const e = []; + for (let t = 0, e = d.length; t < e; t++) u[t] = []; + for (let n = 0, r = d.length; n < r; n++) { + const r = f[n]; + for (let s = 0; s < r.length; s++) { + const a = r[s]; + let o = !0; + for (let r = 0; r < d.length; r++) + i(a.p, d[r].p) && + (n !== r && e.push({ froms: n, tos: r, hole: s }), + o ? ((o = !1), u[r].push(a)) : (t = !0)); + o && u[n].push(a); + } + } + e.length > 0 && (t || (f = u)); + } + for (let t = 0, e = d.length; t < e; t++) { + (l = d[t].s), c.push(l), (m = f[t]); + for (let t = 0, e = m.length; t < e; t++) l.holes.push(m[t].h); + } + return c; + } + } + class pc { + constructor(t) { + (this.type = 'Font'), (this.data = t); + } + generateShapes(t, e = 100) { + const n = [], + i = (function (t, e, n) { + const i = Array.from(t), + r = e / n.resolution, + s = + (n.boundingBox.yMax - n.boundingBox.yMin + n.underlineThickness) * + r, + a = []; + let o = 0, + l = 0; + for (let t = 0; t < i.length; t++) { + const e = i[t]; + if ('\n' === e) (o = 0), (l -= s); + else { + const t = mc(e, r, o, l, n); + (o += t.offsetX), a.push(t.path); + } + } + return a; + })(t, e, this.data); + for (let t = 0, e = i.length; t < e; t++) + Array.prototype.push.apply(n, i[t].toShapes()); + return n; + } + } + function mc(t, e, n, i, r) { + const s = r.glyphs[t] || r.glyphs['?']; + if (!s) + return void console.error( + 'THREE.Font: character "' + + t + + '" does not exists in font family ' + + r.familyName + + '.' + ); + const a = new dc(); + let o, l, c, h, u, d, p, m; + if (s.o) { + const t = s._cachedOutline || (s._cachedOutline = s.o.split(' ')); + for (let r = 0, s = t.length; r < s; ) { + switch (t[r++]) { + case 'm': + (o = t[r++] * e + n), (l = t[r++] * e + i), a.moveTo(o, l); + break; + case 'l': + (o = t[r++] * e + n), (l = t[r++] * e + i), a.lineTo(o, l); + break; + case 'q': + (c = t[r++] * e + n), + (h = t[r++] * e + i), + (u = t[r++] * e + n), + (d = t[r++] * e + i), + a.quadraticCurveTo(u, d, c, h); + break; + case 'b': + (c = t[r++] * e + n), + (h = t[r++] * e + i), + (u = t[r++] * e + n), + (d = t[r++] * e + i), + (p = t[r++] * e + n), + (m = t[r++] * e + i), + a.bezierCurveTo(u, d, p, m, c, h); + } + } + } + return { offsetX: s.ha * e, path: a }; + } + pc.prototype.isFont = !0; + let fc; + const gc = { + getContext: function () { + return ( + void 0 === fc && + (fc = new (window.AudioContext || window.webkitAudioContext)()), + fc + ); + }, + setContext: function (t) { + fc = t; + }, + }; + class vc extends ol { + constructor(t) { + super(t); + } + load(t, e, n, i) { + const r = this, + s = new cl(this.manager); + s.setResponseType('arraybuffer'), + s.setPath(this.path), + s.setRequestHeader(this.requestHeader), + s.setWithCredentials(this.withCredentials), + s.load( + t, + function (n) { + try { + const t = n.slice(0); + gc.getContext().decodeAudioData(t, function (t) { + e(t); + }); + } catch (e) { + i ? i(e) : console.error(e), r.manager.itemError(t); + } + }, + n, + i + ); + } + } + class yc extends nc { + constructor(t, e, n = 1) { + super(void 0, n); + const i = new tn().set(t), + r = new tn().set(e), + s = new Lt(i.r, i.g, i.b), + a = new Lt(r.r, r.g, r.b), + o = Math.sqrt(Math.PI), + l = o * Math.sqrt(0.75); + this.sh.coefficients[0].copy(s).add(a).multiplyScalar(o), + this.sh.coefficients[1].copy(s).sub(a).multiplyScalar(l); + } + } + yc.prototype.isHemisphereLightProbe = !0; + class xc extends nc { + constructor(t, e = 1) { + super(void 0, e); + const n = new tn().set(t); + this.sh.coefficients[0] + .set(n.r, n.g, n.b) + .multiplyScalar(2 * Math.sqrt(Math.PI)); + } + } + xc.prototype.isAmbientLightProbe = !0; + const _c = new se(), + wc = new se(); + class bc { + constructor(t = !0) { + (this.autoStart = t), + (this.startTime = 0), + (this.oldTime = 0), + (this.elapsedTime = 0), + (this.running = !1); + } + start() { + (this.startTime = Mc()), + (this.oldTime = this.startTime), + (this.elapsedTime = 0), + (this.running = !0); + } + stop() { + this.getElapsedTime(), (this.running = !1), (this.autoStart = !1); + } + getElapsedTime() { + return this.getDelta(), this.elapsedTime; + } + getDelta() { + let t = 0; + if (this.autoStart && !this.running) return this.start(), 0; + if (this.running) { + const e = Mc(); + (t = (e - this.oldTime) / 1e3), + (this.oldTime = e), + (this.elapsedTime += t); + } + return t; + } + } + function Mc() { + return ('undefined' == typeof performance ? Date : performance).now(); + } + const Sc = new Lt(), + Tc = new At(), + Ec = new Lt(), + Ac = new Lt(); + class Lc extends Ce { + constructor(t) { + super(), + (this.type = 'Audio'), + (this.listener = t), + (this.context = t.context), + (this.gain = this.context.createGain()), + this.gain.connect(t.getInput()), + (this.autoplay = !1), + (this.buffer = null), + (this.detune = 0), + (this.loop = !1), + (this.loopStart = 0), + (this.loopEnd = 0), + (this.offset = 0), + (this.duration = void 0), + (this.playbackRate = 1), + (this.isPlaying = !1), + (this.hasPlaybackControl = !0), + (this.source = null), + (this.sourceType = 'empty'), + (this._startedAt = 0), + (this._progress = 0), + (this._connected = !1), + (this.filters = []); + } + getOutput() { + return this.gain; + } + setNodeSource(t) { + return ( + (this.hasPlaybackControl = !1), + (this.sourceType = 'audioNode'), + (this.source = t), + this.connect(), + this + ); + } + setMediaElementSource(t) { + return ( + (this.hasPlaybackControl = !1), + (this.sourceType = 'mediaNode'), + (this.source = this.context.createMediaElementSource(t)), + this.connect(), + this + ); + } + setMediaStreamSource(t) { + return ( + (this.hasPlaybackControl = !1), + (this.sourceType = 'mediaStreamNode'), + (this.source = this.context.createMediaStreamSource(t)), + this.connect(), + this + ); + } + setBuffer(t) { + return ( + (this.buffer = t), + (this.sourceType = 'buffer'), + this.autoplay && this.play(), + this + ); + } + play(t = 0) { + if (!0 === this.isPlaying) + return void console.warn('THREE.Audio: Audio is already playing.'); + if (!1 === this.hasPlaybackControl) + return void console.warn( + 'THREE.Audio: this Audio has no playback control.' + ); + this._startedAt = this.context.currentTime + t; + const e = this.context.createBufferSource(); + return ( + (e.buffer = this.buffer), + (e.loop = this.loop), + (e.loopStart = this.loopStart), + (e.loopEnd = this.loopEnd), + (e.onended = this.onEnded.bind(this)), + e.start(this._startedAt, this._progress + this.offset, this.duration), + (this.isPlaying = !0), + (this.source = e), + this.setDetune(this.detune), + this.setPlaybackRate(this.playbackRate), + this.connect() + ); + } + pause() { + if (!1 !== this.hasPlaybackControl) + return ( + !0 === this.isPlaying && + ((this._progress += + Math.max(this.context.currentTime - this._startedAt, 0) * + this.playbackRate), + !0 === this.loop && + (this._progress = + this._progress % (this.duration || this.buffer.duration)), + this.source.stop(), + (this.source.onended = null), + (this.isPlaying = !1)), + this + ); + console.warn('THREE.Audio: this Audio has no playback control.'); + } + stop() { + if (!1 !== this.hasPlaybackControl) + return ( + (this._progress = 0), + this.source.stop(), + (this.source.onended = null), + (this.isPlaying = !1), + this + ); + console.warn('THREE.Audio: this Audio has no playback control.'); + } + connect() { + if (this.filters.length > 0) { + this.source.connect(this.filters[0]); + for (let t = 1, e = this.filters.length; t < e; t++) + this.filters[t - 1].connect(this.filters[t]); + this.filters[this.filters.length - 1].connect(this.getOutput()); + } else this.source.connect(this.getOutput()); + return (this._connected = !0), this; + } + disconnect() { + if (this.filters.length > 0) { + this.source.disconnect(this.filters[0]); + for (let t = 1, e = this.filters.length; t < e; t++) + this.filters[t - 1].disconnect(this.filters[t]); + this.filters[this.filters.length - 1].disconnect(this.getOutput()); + } else this.source.disconnect(this.getOutput()); + return (this._connected = !1), this; + } + getFilters() { + return this.filters; + } + setFilters(t) { + return ( + t || (t = []), + !0 === this._connected + ? (this.disconnect(), (this.filters = t.slice()), this.connect()) + : (this.filters = t.slice()), + this + ); + } + setDetune(t) { + if (((this.detune = t), void 0 !== this.source.detune)) + return ( + !0 === this.isPlaying && + this.source.detune.setTargetAtTime( + this.detune, + this.context.currentTime, + 0.01 + ), + this + ); + } + getDetune() { + return this.detune; + } + getFilter() { + return this.getFilters()[0]; + } + setFilter(t) { + return this.setFilters(t ? [t] : []); + } + setPlaybackRate(t) { + if (!1 !== this.hasPlaybackControl) + return ( + (this.playbackRate = t), + !0 === this.isPlaying && + this.source.playbackRate.setTargetAtTime( + this.playbackRate, + this.context.currentTime, + 0.01 + ), + this + ); + console.warn('THREE.Audio: this Audio has no playback control.'); + } + getPlaybackRate() { + return this.playbackRate; + } + onEnded() { + this.isPlaying = !1; + } + getLoop() { + return !1 === this.hasPlaybackControl + ? (console.warn('THREE.Audio: this Audio has no playback control.'), !1) + : this.loop; + } + setLoop(t) { + if (!1 !== this.hasPlaybackControl) + return ( + (this.loop = t), + !0 === this.isPlaying && (this.source.loop = this.loop), + this + ); + console.warn('THREE.Audio: this Audio has no playback control.'); + } + setLoopStart(t) { + return (this.loopStart = t), this; + } + setLoopEnd(t) { + return (this.loopEnd = t), this; + } + getVolume() { + return this.gain.gain.value; + } + setVolume(t) { + return ( + this.gain.gain.setTargetAtTime(t, this.context.currentTime, 0.01), this + ); + } + } + const Rc = new Lt(), + Cc = new At(), + Pc = new Lt(), + Dc = new Lt(); + class Ic { + constructor(t, e = 2048) { + (this.analyser = t.context.createAnalyser()), + (this.analyser.fftSize = e), + (this.data = new Uint8Array(this.analyser.frequencyBinCount)), + t.getOutput().connect(this.analyser); + } + getFrequencyData() { + return this.analyser.getByteFrequencyData(this.data), this.data; + } + getAverageFrequency() { + let t = 0; + const e = this.getFrequencyData(); + for (let n = 0; n < e.length; n++) t += e[n]; + return t / e.length; + } + } + class Nc { + constructor(t, e, n) { + let i, r, s; + switch (((this.binding = t), (this.valueSize = n), e)) { + case 'quaternion': + (i = this._slerp), + (r = this._slerpAdditive), + (s = this._setAdditiveIdentityQuaternion), + (this.buffer = new Float64Array(6 * n)), + (this._workIndex = 5); + break; + case 'string': + case 'bool': + (i = this._select), + (r = this._select), + (s = this._setAdditiveIdentityOther), + (this.buffer = new Array(5 * n)); + break; + default: + (i = this._lerp), + (r = this._lerpAdditive), + (s = this._setAdditiveIdentityNumeric), + (this.buffer = new Float64Array(5 * n)); + } + (this._mixBufferRegion = i), + (this._mixBufferRegionAdditive = r), + (this._setIdentity = s), + (this._origIndex = 3), + (this._addIndex = 4), + (this.cumulativeWeight = 0), + (this.cumulativeWeightAdditive = 0), + (this.useCount = 0), + (this.referenceCount = 0); + } + accumulate(t, e) { + const n = this.buffer, + i = this.valueSize, + r = t * i + i; + let s = this.cumulativeWeight; + if (0 === s) { + for (let t = 0; t !== i; ++t) n[r + t] = n[t]; + s = e; + } else { + s += e; + const t = e / s; + this._mixBufferRegion(n, r, 0, t, i); + } + this.cumulativeWeight = s; + } + accumulateAdditive(t) { + const e = this.buffer, + n = this.valueSize, + i = n * this._addIndex; + 0 === this.cumulativeWeightAdditive && this._setIdentity(), + this._mixBufferRegionAdditive(e, i, 0, t, n), + (this.cumulativeWeightAdditive += t); + } + apply(t) { + const e = this.valueSize, + n = this.buffer, + i = t * e + e, + r = this.cumulativeWeight, + s = this.cumulativeWeightAdditive, + a = this.binding; + if ( + ((this.cumulativeWeight = 0), + (this.cumulativeWeightAdditive = 0), + r < 1) + ) { + const t = e * this._origIndex; + this._mixBufferRegion(n, i, t, 1 - r, e); + } + s > 0 && this._mixBufferRegionAdditive(n, i, this._addIndex * e, 1, e); + for (let t = e, r = e + e; t !== r; ++t) + if (n[t] !== n[t + e]) { + a.setValue(n, i); + break; + } + } + saveOriginalState() { + const t = this.binding, + e = this.buffer, + n = this.valueSize, + i = n * this._origIndex; + t.getValue(e, i); + for (let t = n, r = i; t !== r; ++t) e[t] = e[i + (t % n)]; + this._setIdentity(), + (this.cumulativeWeight = 0), + (this.cumulativeWeightAdditive = 0); + } + restoreOriginalState() { + const t = 3 * this.valueSize; + this.binding.setValue(this.buffer, t); + } + _setAdditiveIdentityNumeric() { + const t = this._addIndex * this.valueSize, + e = t + this.valueSize; + for (let n = t; n < e; n++) this.buffer[n] = 0; + } + _setAdditiveIdentityQuaternion() { + this._setAdditiveIdentityNumeric(), + (this.buffer[this._addIndex * this.valueSize + 3] = 1); + } + _setAdditiveIdentityOther() { + const t = this._origIndex * this.valueSize, + e = this._addIndex * this.valueSize; + for (let n = 0; n < this.valueSize; n++) + this.buffer[e + n] = this.buffer[t + n]; + } + _select(t, e, n, i, r) { + if (i >= 0.5) for (let i = 0; i !== r; ++i) t[e + i] = t[n + i]; + } + _slerp(t, e, n, i) { + At.slerpFlat(t, e, t, e, t, n, i); + } + _slerpAdditive(t, e, n, i, r) { + const s = this._workIndex * r; + At.multiplyQuaternionsFlat(t, s, t, e, t, n), + At.slerpFlat(t, e, t, e, t, s, i); + } + _lerp(t, e, n, i, r) { + const s = 1 - i; + for (let a = 0; a !== r; ++a) { + const r = e + a; + t[r] = t[r] * s + t[n + a] * i; + } + } + _lerpAdditive(t, e, n, i, r) { + for (let s = 0; s !== r; ++s) { + const r = e + s; + t[r] = t[r] + t[n + s] * i; + } + } + } + const Bc = '\\[\\]\\.:\\/', + zc = new RegExp('[\\[\\]\\.:\\/]', 'g'), + Fc = '[^\\[\\]\\.:\\/]', + Oc = '[^' + Bc.replace('\\.', '') + ']', + Hc = /((?:WC+[\/:])*)/.source.replace('WC', Fc), + Gc = /(WCOD+)?/.source.replace('WCOD', Oc), + Uc = /(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace('WC', Fc), + kc = /\.(WC+)(?:\[(.+)\])?/.source.replace('WC', Fc), + Vc = new RegExp('^' + Hc + Gc + Uc + kc + '$'), + Wc = ['material', 'materials', 'bones']; + class jc { + constructor(t, e, n) { + (this.path = e), + (this.parsedPath = n || jc.parseTrackName(e)), + (this.node = jc.findNode(t, this.parsedPath.nodeName) || t), + (this.rootNode = t), + (this.getValue = this._getValue_unbound), + (this.setValue = this._setValue_unbound); + } + static create(t, e, n) { + return t && t.isAnimationObjectGroup + ? new jc.Composite(t, e, n) + : new jc(t, e, n); + } + static sanitizeNodeName(t) { + return t.replace(/\s/g, '_').replace(zc, ''); + } + static parseTrackName(t) { + const e = Vc.exec(t); + if (!e) throw new Error('PropertyBinding: Cannot parse trackName: ' + t); + const n = { + nodeName: e[2], + objectName: e[3], + objectIndex: e[4], + propertyName: e[5], + propertyIndex: e[6], + }, + i = n.nodeName && n.nodeName.lastIndexOf('.'); + if (void 0 !== i && -1 !== i) { + const t = n.nodeName.substring(i + 1); + -1 !== Wc.indexOf(t) && + ((n.nodeName = n.nodeName.substring(0, i)), (n.objectName = t)); + } + if (null === n.propertyName || 0 === n.propertyName.length) + throw new Error( + 'PropertyBinding: can not parse propertyName from trackName: ' + t + ); + return n; + } + static findNode(t, e) { + if ( + !e || + '' === e || + '.' === e || + -1 === e || + e === t.name || + e === t.uuid + ) + return t; + if (t.skeleton) { + const n = t.skeleton.getBoneByName(e); + if (void 0 !== n) return n; + } + if (t.children) { + const n = function (t) { + for (let i = 0; i < t.length; i++) { + const r = t[i]; + if (r.name === e || r.uuid === e) return r; + const s = n(r.children); + if (s) return s; + } + return null; + }, + i = n(t.children); + if (i) return i; + } + return null; + } + _getValue_unavailable() {} + _setValue_unavailable() {} + _getValue_direct(t, e) { + t[e] = this.node[this.propertyName]; + } + _getValue_array(t, e) { + const n = this.resolvedProperty; + for (let i = 0, r = n.length; i !== r; ++i) t[e++] = n[i]; + } + _getValue_arrayElement(t, e) { + t[e] = this.resolvedProperty[this.propertyIndex]; + } + _getValue_toArray(t, e) { + this.resolvedProperty.toArray(t, e); + } + _setValue_direct(t, e) { + this.targetObject[this.propertyName] = t[e]; + } + _setValue_direct_setNeedsUpdate(t, e) { + (this.targetObject[this.propertyName] = t[e]), + (this.targetObject.needsUpdate = !0); + } + _setValue_direct_setMatrixWorldNeedsUpdate(t, e) { + (this.targetObject[this.propertyName] = t[e]), + (this.targetObject.matrixWorldNeedsUpdate = !0); + } + _setValue_array(t, e) { + const n = this.resolvedProperty; + for (let i = 0, r = n.length; i !== r; ++i) n[i] = t[e++]; + } + _setValue_array_setNeedsUpdate(t, e) { + const n = this.resolvedProperty; + for (let i = 0, r = n.length; i !== r; ++i) n[i] = t[e++]; + this.targetObject.needsUpdate = !0; + } + _setValue_array_setMatrixWorldNeedsUpdate(t, e) { + const n = this.resolvedProperty; + for (let i = 0, r = n.length; i !== r; ++i) n[i] = t[e++]; + this.targetObject.matrixWorldNeedsUpdate = !0; + } + _setValue_arrayElement(t, e) { + this.resolvedProperty[this.propertyIndex] = t[e]; + } + _setValue_arrayElement_setNeedsUpdate(t, e) { + (this.resolvedProperty[this.propertyIndex] = t[e]), + (this.targetObject.needsUpdate = !0); + } + _setValue_arrayElement_setMatrixWorldNeedsUpdate(t, e) { + (this.resolvedProperty[this.propertyIndex] = t[e]), + (this.targetObject.matrixWorldNeedsUpdate = !0); + } + _setValue_fromArray(t, e) { + this.resolvedProperty.fromArray(t, e); + } + _setValue_fromArray_setNeedsUpdate(t, e) { + this.resolvedProperty.fromArray(t, e), + (this.targetObject.needsUpdate = !0); + } + _setValue_fromArray_setMatrixWorldNeedsUpdate(t, e) { + this.resolvedProperty.fromArray(t, e), + (this.targetObject.matrixWorldNeedsUpdate = !0); + } + _getValue_unbound(t, e) { + this.bind(), this.getValue(t, e); + } + _setValue_unbound(t, e) { + this.bind(), this.setValue(t, e); + } + bind() { + let t = this.node; + const e = this.parsedPath, + n = e.objectName, + i = e.propertyName; + let r = e.propertyIndex; + if ( + (t || + ((t = jc.findNode(this.rootNode, e.nodeName) || this.rootNode), + (this.node = t)), + (this.getValue = this._getValue_unavailable), + (this.setValue = this._setValue_unavailable), + !t) + ) + return void console.error( + 'THREE.PropertyBinding: Trying to update node for track: ' + + this.path + + " but it wasn't found." + ); + if (n) { + let i = e.objectIndex; + switch (n) { + case 'materials': + if (!t.material) + return void console.error( + 'THREE.PropertyBinding: Can not bind to material as node does not have a material.', + this + ); + if (!t.material.materials) + return void console.error( + 'THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.', + this + ); + t = t.material.materials; + break; + case 'bones': + if (!t.skeleton) + return void console.error( + 'THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.', + this + ); + t = t.skeleton.bones; + for (let e = 0; e < t.length; e++) + if (t[e].name === i) { + i = e; + break; + } + break; + default: + if (void 0 === t[n]) + return void console.error( + 'THREE.PropertyBinding: Can not bind to objectName of node undefined.', + this + ); + t = t[n]; + } + if (void 0 !== i) { + if (void 0 === t[i]) + return void console.error( + 'THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.', + this, + t + ); + t = t[i]; + } + } + const s = t[i]; + if (void 0 === s) { + const n = e.nodeName; + return void console.error( + 'THREE.PropertyBinding: Trying to update property for track: ' + + n + + '.' + + i + + " but it wasn't found.", + t + ); + } + let a = this.Versioning.None; + (this.targetObject = t), + void 0 !== t.needsUpdate + ? (a = this.Versioning.NeedsUpdate) + : void 0 !== t.matrixWorldNeedsUpdate && + (a = this.Versioning.MatrixWorldNeedsUpdate); + let o = this.BindingType.Direct; + if (void 0 !== r) { + if ('morphTargetInfluences' === i) { + if (!t.geometry) + return void console.error( + 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.', + this + ); + if (!t.geometry.isBufferGeometry) + return void console.error( + 'THREE.PropertyBinding: Can not bind to morphTargetInfluences on THREE.Geometry. Use THREE.BufferGeometry instead.', + this + ); + if (!t.geometry.morphAttributes) + return void console.error( + 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.', + this + ); + void 0 !== t.morphTargetDictionary[r] && + (r = t.morphTargetDictionary[r]); + } + (o = this.BindingType.ArrayElement), + (this.resolvedProperty = s), + (this.propertyIndex = r); + } else + void 0 !== s.fromArray && void 0 !== s.toArray + ? ((o = this.BindingType.HasFromToArray), (this.resolvedProperty = s)) + : Array.isArray(s) + ? ((o = this.BindingType.EntireArray), (this.resolvedProperty = s)) + : (this.propertyName = i); + (this.getValue = this.GetterByBindingType[o]), + (this.setValue = this.SetterByBindingTypeAndVersioning[o][a]); + } + unbind() { + (this.node = null), + (this.getValue = this._getValue_unbound), + (this.setValue = this._setValue_unbound); + } + } + (jc.Composite = class { + constructor(t, e, n) { + const i = n || jc.parseTrackName(e); + (this._targetGroup = t), (this._bindings = t.subscribe_(e, i)); + } + getValue(t, e) { + this.bind(); + const n = this._targetGroup.nCachedObjects_, + i = this._bindings[n]; + void 0 !== i && i.getValue(t, e); + } + setValue(t, e) { + const n = this._bindings; + for ( + let i = this._targetGroup.nCachedObjects_, r = n.length; + i !== r; + ++i + ) + n[i].setValue(t, e); + } + bind() { + const t = this._bindings; + for ( + let e = this._targetGroup.nCachedObjects_, n = t.length; + e !== n; + ++e + ) + t[e].bind(); + } + unbind() { + const t = this._bindings; + for ( + let e = this._targetGroup.nCachedObjects_, n = t.length; + e !== n; + ++e + ) + t[e].unbind(); + } + }), + (jc.prototype.BindingType = { + Direct: 0, + EntireArray: 1, + ArrayElement: 2, + HasFromToArray: 3, + }), + (jc.prototype.Versioning = { + None: 0, + NeedsUpdate: 1, + MatrixWorldNeedsUpdate: 2, + }), + (jc.prototype.GetterByBindingType = [ + jc.prototype._getValue_direct, + jc.prototype._getValue_array, + jc.prototype._getValue_arrayElement, + jc.prototype._getValue_toArray, + ]), + (jc.prototype.SetterByBindingTypeAndVersioning = [ + [ + jc.prototype._setValue_direct, + jc.prototype._setValue_direct_setNeedsUpdate, + jc.prototype._setValue_direct_setMatrixWorldNeedsUpdate, + ], + [ + jc.prototype._setValue_array, + jc.prototype._setValue_array_setNeedsUpdate, + jc.prototype._setValue_array_setMatrixWorldNeedsUpdate, + ], + [ + jc.prototype._setValue_arrayElement, + jc.prototype._setValue_arrayElement_setNeedsUpdate, + jc.prototype._setValue_arrayElement_setMatrixWorldNeedsUpdate, + ], + [ + jc.prototype._setValue_fromArray, + jc.prototype._setValue_fromArray_setNeedsUpdate, + jc.prototype._setValue_fromArray_setMatrixWorldNeedsUpdate, + ], + ]); + class qc { + constructor() { + (this.uuid = ct()), + (this._objects = Array.prototype.slice.call(arguments)), + (this.nCachedObjects_ = 0); + const t = {}; + this._indicesByUUID = t; + for (let e = 0, n = arguments.length; e !== n; ++e) + t[arguments[e].uuid] = e; + (this._paths = []), + (this._parsedPaths = []), + (this._bindings = []), + (this._bindingsIndicesByPath = {}); + const e = this; + this.stats = { + objects: { + get total() { + return e._objects.length; + }, + get inUse() { + return this.total - e.nCachedObjects_; + }, + }, + get bindingsPerObject() { + return e._bindings.length; + }, + }; + } + add() { + const t = this._objects, + e = this._indicesByUUID, + n = this._paths, + i = this._parsedPaths, + r = this._bindings, + s = r.length; + let a, + o = t.length, + l = this.nCachedObjects_; + for (let c = 0, h = arguments.length; c !== h; ++c) { + const h = arguments[c], + u = h.uuid; + let d = e[u]; + if (void 0 === d) { + (d = o++), (e[u] = d), t.push(h); + for (let t = 0, e = s; t !== e; ++t) r[t].push(new jc(h, n[t], i[t])); + } else if (d < l) { + a = t[d]; + const o = --l, + c = t[o]; + (e[c.uuid] = d), (t[d] = c), (e[u] = o), (t[o] = h); + for (let t = 0, e = s; t !== e; ++t) { + const e = r[t], + s = e[o]; + let a = e[d]; + (e[d] = s), void 0 === a && (a = new jc(h, n[t], i[t])), (e[o] = a); + } + } else + t[d] !== a && + console.error( + 'THREE.AnimationObjectGroup: Different objects with the same UUID detected. Clean the caches or recreate your infrastructure when reloading scenes.' + ); + } + this.nCachedObjects_ = l; + } + remove() { + const t = this._objects, + e = this._indicesByUUID, + n = this._bindings, + i = n.length; + let r = this.nCachedObjects_; + for (let s = 0, a = arguments.length; s !== a; ++s) { + const a = arguments[s], + o = a.uuid, + l = e[o]; + if (void 0 !== l && l >= r) { + const s = r++, + c = t[s]; + (e[c.uuid] = l), (t[l] = c), (e[o] = s), (t[s] = a); + for (let t = 0, e = i; t !== e; ++t) { + const e = n[t], + i = e[s], + r = e[l]; + (e[l] = i), (e[s] = r); + } + } + } + this.nCachedObjects_ = r; + } + uncache() { + const t = this._objects, + e = this._indicesByUUID, + n = this._bindings, + i = n.length; + let r = this.nCachedObjects_, + s = t.length; + for (let a = 0, o = arguments.length; a !== o; ++a) { + const o = arguments[a].uuid, + l = e[o]; + if (void 0 !== l) + if ((delete e[o], l < r)) { + const a = --r, + o = t[a], + c = --s, + h = t[c]; + (e[o.uuid] = l), (t[l] = o), (e[h.uuid] = a), (t[a] = h), t.pop(); + for (let t = 0, e = i; t !== e; ++t) { + const e = n[t], + i = e[a], + r = e[c]; + (e[l] = i), (e[a] = r), e.pop(); + } + } else { + const r = --s, + a = t[r]; + r > 0 && (e[a.uuid] = l), (t[l] = a), t.pop(); + for (let t = 0, e = i; t !== e; ++t) { + const e = n[t]; + (e[l] = e[r]), e.pop(); + } + } + } + this.nCachedObjects_ = r; + } + subscribe_(t, e) { + const n = this._bindingsIndicesByPath; + let i = n[t]; + const r = this._bindings; + if (void 0 !== i) return r[i]; + const s = this._paths, + a = this._parsedPaths, + o = this._objects, + l = o.length, + c = this.nCachedObjects_, + h = new Array(l); + (i = r.length), (n[t] = i), s.push(t), a.push(e), r.push(h); + for (let n = c, i = o.length; n !== i; ++n) { + const i = o[n]; + h[n] = new jc(i, t, e); + } + return h; + } + unsubscribe_(t) { + const e = this._bindingsIndicesByPath, + n = e[t]; + if (void 0 !== n) { + const i = this._paths, + r = this._parsedPaths, + s = this._bindings, + a = s.length - 1, + o = s[a]; + (e[t[a]] = n), + (s[n] = o), + s.pop(), + (r[n] = r[a]), + r.pop(), + (i[n] = i[a]), + i.pop(); + } + } + } + qc.prototype.isAnimationObjectGroup = !0; + class Xc { + constructor(t, e, n = null, i = e.blendMode) { + (this._mixer = t), + (this._clip = e), + (this._localRoot = n), + (this.blendMode = i); + const r = e.tracks, + s = r.length, + a = new Array(s), + o = { endingStart: k, endingEnd: k }; + for (let t = 0; t !== s; ++t) { + const e = r[t].createInterpolant(null); + (a[t] = e), (e.settings = o); + } + (this._interpolantSettings = o), + (this._interpolants = a), + (this._propertyBindings = new Array(s)), + (this._cacheIndex = null), + (this._byClipCacheIndex = null), + (this._timeScaleInterpolant = null), + (this._weightInterpolant = null), + (this.loop = 2201), + (this._loopCount = -1), + (this._startTime = null), + (this.time = 0), + (this.timeScale = 1), + (this._effectiveTimeScale = 1), + (this.weight = 1), + (this._effectiveWeight = 1), + (this.repetitions = 1 / 0), + (this.paused = !1), + (this.enabled = !0), + (this.clampWhenFinished = !1), + (this.zeroSlopeAtStart = !0), + (this.zeroSlopeAtEnd = !0); + } + play() { + return this._mixer._activateAction(this), this; + } + stop() { + return this._mixer._deactivateAction(this), this.reset(); + } + reset() { + return ( + (this.paused = !1), + (this.enabled = !0), + (this.time = 0), + (this._loopCount = -1), + (this._startTime = null), + this.stopFading().stopWarping() + ); + } + isRunning() { + return ( + this.enabled && + !this.paused && + 0 !== this.timeScale && + null === this._startTime && + this._mixer._isActiveAction(this) + ); + } + isScheduled() { + return this._mixer._isActiveAction(this); + } + startAt(t) { + return (this._startTime = t), this; + } + setLoop(t, e) { + return (this.loop = t), (this.repetitions = e), this; + } + setEffectiveWeight(t) { + return ( + (this.weight = t), + (this._effectiveWeight = this.enabled ? t : 0), + this.stopFading() + ); + } + getEffectiveWeight() { + return this._effectiveWeight; + } + fadeIn(t) { + return this._scheduleFading(t, 0, 1); + } + fadeOut(t) { + return this._scheduleFading(t, 1, 0); + } + crossFadeFrom(t, e, n) { + if ((t.fadeOut(e), this.fadeIn(e), n)) { + const n = this._clip.duration, + i = t._clip.duration, + r = i / n, + s = n / i; + t.warp(1, r, e), this.warp(s, 1, e); + } + return this; + } + crossFadeTo(t, e, n) { + return t.crossFadeFrom(this, e, n); + } + stopFading() { + const t = this._weightInterpolant; + return ( + null !== t && + ((this._weightInterpolant = null), + this._mixer._takeBackControlInterpolant(t)), + this + ); + } + setEffectiveTimeScale(t) { + return ( + (this.timeScale = t), + (this._effectiveTimeScale = this.paused ? 0 : t), + this.stopWarping() + ); + } + getEffectiveTimeScale() { + return this._effectiveTimeScale; + } + setDuration(t) { + return (this.timeScale = this._clip.duration / t), this.stopWarping(); + } + syncWith(t) { + return ( + (this.time = t.time), (this.timeScale = t.timeScale), this.stopWarping() + ); + } + halt(t) { + return this.warp(this._effectiveTimeScale, 0, t); + } + warp(t, e, n) { + const i = this._mixer, + r = i.time, + s = this.timeScale; + let a = this._timeScaleInterpolant; + null === a && + ((a = i._lendControlInterpolant()), (this._timeScaleInterpolant = a)); + const o = a.parameterPositions, + l = a.sampleValues; + return (o[0] = r), (o[1] = r + n), (l[0] = t / s), (l[1] = e / s), this; + } + stopWarping() { + const t = this._timeScaleInterpolant; + return ( + null !== t && + ((this._timeScaleInterpolant = null), + this._mixer._takeBackControlInterpolant(t)), + this + ); + } + getMixer() { + return this._mixer; + } + getClip() { + return this._clip; + } + getRoot() { + return this._localRoot || this._mixer._root; + } + _update(t, e, n, i) { + if (!this.enabled) return void this._updateWeight(t); + const r = this._startTime; + if (null !== r) { + const i = (t - r) * n; + if (i < 0 || 0 === n) return; + (this._startTime = null), (e = n * i); + } + e *= this._updateTimeScale(t); + const s = this._updateTime(e), + a = this._updateWeight(t); + if (a > 0) { + const t = this._interpolants, + e = this._propertyBindings; + switch (this.blendMode) { + case q: + for (let n = 0, i = t.length; n !== i; ++n) + t[n].evaluate(s), e[n].accumulateAdditive(a); + break; + case j: + default: + for (let n = 0, r = t.length; n !== r; ++n) + t[n].evaluate(s), e[n].accumulate(i, a); + } + } + } + _updateWeight(t) { + let e = 0; + if (this.enabled) { + e = this.weight; + const n = this._weightInterpolant; + if (null !== n) { + const i = n.evaluate(t)[0]; + (e *= i), + t > n.parameterPositions[1] && + (this.stopFading(), 0 === i && (this.enabled = !1)); + } + } + return (this._effectiveWeight = e), e; + } + _updateTimeScale(t) { + let e = 0; + if (!this.paused) { + e = this.timeScale; + const n = this._timeScaleInterpolant; + if (null !== n) { + (e *= n.evaluate(t)[0]), + t > n.parameterPositions[1] && + (this.stopWarping(), + 0 === e ? (this.paused = !0) : (this.timeScale = e)); + } + } + return (this._effectiveTimeScale = e), e; + } + _updateTime(t) { + const e = this._clip.duration, + n = this.loop; + let i = this.time + t, + r = this._loopCount; + const s = 2202 === n; + if (0 === t) return -1 === r ? i : s && 1 == (1 & r) ? e - i : i; + if (2200 === n) { + -1 === r && ((this._loopCount = 0), this._setEndings(!0, !0, !1)); + t: { + if (i >= e) i = e; + else { + if (!(i < 0)) { + this.time = i; + break t; + } + i = 0; + } + this.clampWhenFinished ? (this.paused = !0) : (this.enabled = !1), + (this.time = i), + this._mixer.dispatchEvent({ + type: 'finished', + action: this, + direction: t < 0 ? -1 : 1, + }); + } + } else { + if ( + (-1 === r && + (t >= 0 + ? ((r = 0), this._setEndings(!0, 0 === this.repetitions, s)) + : this._setEndings(0 === this.repetitions, !0, s)), + i >= e || i < 0) + ) { + const n = Math.floor(i / e); + (i -= e * n), (r += Math.abs(n)); + const a = this.repetitions - r; + if (a <= 0) + this.clampWhenFinished ? (this.paused = !0) : (this.enabled = !1), + (i = t > 0 ? e : 0), + (this.time = i), + this._mixer.dispatchEvent({ + type: 'finished', + action: this, + direction: t > 0 ? 1 : -1, + }); + else { + if (1 === a) { + const e = t < 0; + this._setEndings(e, !e, s); + } else this._setEndings(!1, !1, s); + (this._loopCount = r), + (this.time = i), + this._mixer.dispatchEvent({ + type: 'loop', + action: this, + loopDelta: n, + }); + } + } else this.time = i; + if (s && 1 == (1 & r)) return e - i; + } + return i; + } + _setEndings(t, e, n) { + const i = this._interpolantSettings; + n + ? ((i.endingStart = V), (i.endingEnd = V)) + : ((i.endingStart = t ? (this.zeroSlopeAtStart ? V : k) : W), + (i.endingEnd = e ? (this.zeroSlopeAtEnd ? V : k) : W)); + } + _scheduleFading(t, e, n) { + const i = this._mixer, + r = i.time; + let s = this._weightInterpolant; + null === s && + ((s = i._lendControlInterpolant()), (this._weightInterpolant = s)); + const a = s.parameterPositions, + o = s.sampleValues; + return (a[0] = r), (o[0] = e), (a[1] = r + t), (o[1] = n), this; + } + } + class Yc extends rt { + constructor(t) { + super(), + (this._root = t), + this._initMemoryManager(), + (this._accuIndex = 0), + (this.time = 0), + (this.timeScale = 1); + } + _bindAction(t, e) { + const n = t._localRoot || this._root, + i = t._clip.tracks, + r = i.length, + s = t._propertyBindings, + a = t._interpolants, + o = n.uuid, + l = this._bindingsByRootAndName; + let c = l[o]; + void 0 === c && ((c = {}), (l[o] = c)); + for (let t = 0; t !== r; ++t) { + const r = i[t], + l = r.name; + let h = c[l]; + if (void 0 !== h) s[t] = h; + else { + if (((h = s[t]), void 0 !== h)) { + null === h._cacheIndex && + (++h.referenceCount, this._addInactiveBinding(h, o, l)); + continue; + } + const i = e && e._propertyBindings[t].binding.parsedPath; + (h = new Nc(jc.create(n, l, i), r.ValueTypeName, r.getValueSize())), + ++h.referenceCount, + this._addInactiveBinding(h, o, l), + (s[t] = h); + } + a[t].resultBuffer = h.buffer; + } + } + _activateAction(t) { + if (!this._isActiveAction(t)) { + if (null === t._cacheIndex) { + const e = (t._localRoot || this._root).uuid, + n = t._clip.uuid, + i = this._actionsByClip[n]; + this._bindAction(t, i && i.knownActions[0]), + this._addInactiveAction(t, n, e); + } + const e = t._propertyBindings; + for (let t = 0, n = e.length; t !== n; ++t) { + const n = e[t]; + 0 == n.useCount++ && (this._lendBinding(n), n.saveOriginalState()); + } + this._lendAction(t); + } + } + _deactivateAction(t) { + if (this._isActiveAction(t)) { + const e = t._propertyBindings; + for (let t = 0, n = e.length; t !== n; ++t) { + const n = e[t]; + 0 == --n.useCount && + (n.restoreOriginalState(), this._takeBackBinding(n)); + } + this._takeBackAction(t); + } + } + _initMemoryManager() { + (this._actions = []), + (this._nActiveActions = 0), + (this._actionsByClip = {}), + (this._bindings = []), + (this._nActiveBindings = 0), + (this._bindingsByRootAndName = {}), + (this._controlInterpolants = []), + (this._nActiveControlInterpolants = 0); + const t = this; + this.stats = { + actions: { + get total() { + return t._actions.length; + }, + get inUse() { + return t._nActiveActions; + }, + }, + bindings: { + get total() { + return t._bindings.length; + }, + get inUse() { + return t._nActiveBindings; + }, + }, + controlInterpolants: { + get total() { + return t._controlInterpolants.length; + }, + get inUse() { + return t._nActiveControlInterpolants; + }, + }, + }; + } + _isActiveAction(t) { + const e = t._cacheIndex; + return null !== e && e < this._nActiveActions; + } + _addInactiveAction(t, e, n) { + const i = this._actions, + r = this._actionsByClip; + let s = r[e]; + if (void 0 === s) + (s = { knownActions: [t], actionByRoot: {} }), + (t._byClipCacheIndex = 0), + (r[e] = s); + else { + const e = s.knownActions; + (t._byClipCacheIndex = e.length), e.push(t); + } + (t._cacheIndex = i.length), i.push(t), (s.actionByRoot[n] = t); + } + _removeInactiveAction(t) { + const e = this._actions, + n = e[e.length - 1], + i = t._cacheIndex; + (n._cacheIndex = i), (e[i] = n), e.pop(), (t._cacheIndex = null); + const r = t._clip.uuid, + s = this._actionsByClip, + a = s[r], + o = a.knownActions, + l = o[o.length - 1], + c = t._byClipCacheIndex; + (l._byClipCacheIndex = c), + (o[c] = l), + o.pop(), + (t._byClipCacheIndex = null); + delete a.actionByRoot[(t._localRoot || this._root).uuid], + 0 === o.length && delete s[r], + this._removeInactiveBindingsForAction(t); + } + _removeInactiveBindingsForAction(t) { + const e = t._propertyBindings; + for (let t = 0, n = e.length; t !== n; ++t) { + const n = e[t]; + 0 == --n.referenceCount && this._removeInactiveBinding(n); + } + } + _lendAction(t) { + const e = this._actions, + n = t._cacheIndex, + i = this._nActiveActions++, + r = e[i]; + (t._cacheIndex = i), (e[i] = t), (r._cacheIndex = n), (e[n] = r); + } + _takeBackAction(t) { + const e = this._actions, + n = t._cacheIndex, + i = --this._nActiveActions, + r = e[i]; + (t._cacheIndex = i), (e[i] = t), (r._cacheIndex = n), (e[n] = r); + } + _addInactiveBinding(t, e, n) { + const i = this._bindingsByRootAndName, + r = this._bindings; + let s = i[e]; + void 0 === s && ((s = {}), (i[e] = s)), + (s[n] = t), + (t._cacheIndex = r.length), + r.push(t); + } + _removeInactiveBinding(t) { + const e = this._bindings, + n = t.binding, + i = n.rootNode.uuid, + r = n.path, + s = this._bindingsByRootAndName, + a = s[i], + o = e[e.length - 1], + l = t._cacheIndex; + (o._cacheIndex = l), + (e[l] = o), + e.pop(), + delete a[r], + 0 === Object.keys(a).length && delete s[i]; + } + _lendBinding(t) { + const e = this._bindings, + n = t._cacheIndex, + i = this._nActiveBindings++, + r = e[i]; + (t._cacheIndex = i), (e[i] = t), (r._cacheIndex = n), (e[n] = r); + } + _takeBackBinding(t) { + const e = this._bindings, + n = t._cacheIndex, + i = --this._nActiveBindings, + r = e[i]; + (t._cacheIndex = i), (e[i] = t), (r._cacheIndex = n), (e[n] = r); + } + _lendControlInterpolant() { + const t = this._controlInterpolants, + e = this._nActiveControlInterpolants++; + let n = t[e]; + return ( + void 0 === n && + ((n = new qo( + new Float32Array(2), + new Float32Array(2), + 1, + this._controlInterpolantsResultBuffer + )), + (n.__cacheIndex = e), + (t[e] = n)), + n + ); + } + _takeBackControlInterpolant(t) { + const e = this._controlInterpolants, + n = t.__cacheIndex, + i = --this._nActiveControlInterpolants, + r = e[i]; + (t.__cacheIndex = i), (e[i] = t), (r.__cacheIndex = n), (e[n] = r); + } + clipAction(t, e, n) { + const i = e || this._root, + r = i.uuid; + let s = 'string' == typeof t ? nl.findByName(i, t) : t; + const a = null !== s ? s.uuid : t, + o = this._actionsByClip[a]; + let l = null; + if ((void 0 === n && (n = null !== s ? s.blendMode : j), void 0 !== o)) { + const t = o.actionByRoot[r]; + if (void 0 !== t && t.blendMode === n) return t; + (l = o.knownActions[0]), null === s && (s = l._clip); + } + if (null === s) return null; + const c = new Xc(this, s, e, n); + return this._bindAction(c, l), this._addInactiveAction(c, a, r), c; + } + existingAction(t, e) { + const n = e || this._root, + i = n.uuid, + r = 'string' == typeof t ? nl.findByName(n, t) : t, + s = r ? r.uuid : t, + a = this._actionsByClip[s]; + return (void 0 !== a && a.actionByRoot[i]) || null; + } + stopAllAction() { + const t = this._actions; + for (let e = this._nActiveActions - 1; e >= 0; --e) t[e].stop(); + return this; + } + update(t) { + t *= this.timeScale; + const e = this._actions, + n = this._nActiveActions, + i = (this.time += t), + r = Math.sign(t), + s = (this._accuIndex ^= 1); + for (let a = 0; a !== n; ++a) { + e[a]._update(i, t, r, s); + } + const a = this._bindings, + o = this._nActiveBindings; + for (let t = 0; t !== o; ++t) a[t].apply(s); + return this; + } + setTime(t) { + this.time = 0; + for (let t = 0; t < this._actions.length; t++) this._actions[t].time = 0; + return this.update(t); + } + getRoot() { + return this._root; + } + uncacheClip(t) { + const e = this._actions, + n = t.uuid, + i = this._actionsByClip, + r = i[n]; + if (void 0 !== r) { + const t = r.knownActions; + for (let n = 0, i = t.length; n !== i; ++n) { + const i = t[n]; + this._deactivateAction(i); + const r = i._cacheIndex, + s = e[e.length - 1]; + (i._cacheIndex = null), + (i._byClipCacheIndex = null), + (s._cacheIndex = r), + (e[r] = s), + e.pop(), + this._removeInactiveBindingsForAction(i); + } + delete i[n]; + } + } + uncacheRoot(t) { + const e = t.uuid, + n = this._actionsByClip; + for (const t in n) { + const i = n[t].actionByRoot[e]; + void 0 !== i && + (this._deactivateAction(i), this._removeInactiveAction(i)); + } + const i = this._bindingsByRootAndName[e]; + if (void 0 !== i) + for (const t in i) { + const e = i[t]; + e.restoreOriginalState(), this._removeInactiveBinding(e); + } + } + uncacheAction(t, e) { + const n = this.existingAction(t, e); + null !== n && (this._deactivateAction(n), this._removeInactiveAction(n)); + } + } + Yc.prototype._controlInterpolantsResultBuffer = new Float32Array(1); + class Zc { + constructor(t) { + 'string' == typeof t && + (console.warn('THREE.Uniform: Type parameter is no longer needed.'), + (t = arguments[1])), + (this.value = t); + } + clone() { + return new Zc( + void 0 === this.value.clone ? this.value : this.value.clone() + ); + } + } + class Jc extends Es { + constructor(t, e, n = 1) { + super(t, e), (this.meshPerAttribute = n || 1); + } + copy(t) { + return super.copy(t), (this.meshPerAttribute = t.meshPerAttribute), this; + } + clone(t) { + const e = super.clone(t); + return (e.meshPerAttribute = this.meshPerAttribute), e; + } + toJSON(t) { + const e = super.toJSON(t); + return ( + (e.isInstancedInterleavedBuffer = !0), + (e.meshPerAttribute = this.meshPerAttribute), + e + ); + } + } + Jc.prototype.isInstancedInterleavedBuffer = !0; + class Qc { + constructor(t, e, n, i, r) { + (this.buffer = t), + (this.type = e), + (this.itemSize = n), + (this.elementSize = i), + (this.count = r), + (this.version = 0); + } + set needsUpdate(t) { + !0 === t && this.version++; + } + setBuffer(t) { + return (this.buffer = t), this; + } + setType(t, e) { + return (this.type = t), (this.elementSize = e), this; + } + setItemSize(t) { + return (this.itemSize = t), this; + } + setCount(t) { + return (this.count = t), this; + } + } + Qc.prototype.isGLBufferAttribute = !0; + function Kc(t, e) { + return t.distance - e.distance; + } + function $c(t, e, n, i) { + if ((t.layers.test(e.layers) && t.raycast(e, n), !0 === i)) { + const i = t.children; + for (let t = 0, r = i.length; t < r; t++) $c(i[t], e, n, !0); + } + } + const th = new vt(); + class eh { + constructor(t = new vt(1 / 0, 1 / 0), e = new vt(-1 / 0, -1 / 0)) { + (this.min = t), (this.max = e); + } + set(t, e) { + return this.min.copy(t), this.max.copy(e), this; + } + setFromPoints(t) { + this.makeEmpty(); + for (let e = 0, n = t.length; e < n; e++) this.expandByPoint(t[e]); + return this; + } + setFromCenterAndSize(t, e) { + const n = th.copy(e).multiplyScalar(0.5); + return this.min.copy(t).sub(n), this.max.copy(t).add(n), this; + } + clone() { + return new this.constructor().copy(this); + } + copy(t) { + return this.min.copy(t.min), this.max.copy(t.max), this; + } + makeEmpty() { + return ( + (this.min.x = this.min.y = 1 / 0), + (this.max.x = this.max.y = -1 / 0), + this + ); + } + isEmpty() { + return this.max.x < this.min.x || this.max.y < this.min.y; + } + getCenter(t) { + return ( + void 0 === t && + (console.warn('THREE.Box2: .getCenter() target is now required'), + (t = new vt())), + this.isEmpty() + ? t.set(0, 0) + : t.addVectors(this.min, this.max).multiplyScalar(0.5) + ); + } + getSize(t) { + return ( + void 0 === t && + (console.warn('THREE.Box2: .getSize() target is now required'), + (t = new vt())), + this.isEmpty() ? t.set(0, 0) : t.subVectors(this.max, this.min) + ); + } + expandByPoint(t) { + return this.min.min(t), this.max.max(t), this; + } + expandByVector(t) { + return this.min.sub(t), this.max.add(t), this; + } + expandByScalar(t) { + return this.min.addScalar(-t), this.max.addScalar(t), this; + } + containsPoint(t) { + return !( + t.x < this.min.x || + t.x > this.max.x || + t.y < this.min.y || + t.y > this.max.y + ); + } + containsBox(t) { + return ( + this.min.x <= t.min.x && + t.max.x <= this.max.x && + this.min.y <= t.min.y && + t.max.y <= this.max.y + ); + } + getParameter(t, e) { + return ( + void 0 === e && + (console.warn('THREE.Box2: .getParameter() target is now required'), + (e = new vt())), + e.set( + (t.x - this.min.x) / (this.max.x - this.min.x), + (t.y - this.min.y) / (this.max.y - this.min.y) + ) + ); + } + intersectsBox(t) { + return !( + t.max.x < this.min.x || + t.min.x > this.max.x || + t.max.y < this.min.y || + t.min.y > this.max.y + ); + } + clampPoint(t, e) { + return ( + void 0 === e && + (console.warn('THREE.Box2: .clampPoint() target is now required'), + (e = new vt())), + e.copy(t).clamp(this.min, this.max) + ); + } + distanceToPoint(t) { + return th.copy(t).clamp(this.min, this.max).sub(t).length(); + } + intersect(t) { + return this.min.max(t.min), this.max.min(t.max), this; + } + union(t) { + return this.min.min(t.min), this.max.max(t.max), this; + } + translate(t) { + return this.min.add(t), this.max.add(t), this; + } + equals(t) { + return t.min.equals(this.min) && t.max.equals(this.max); + } + } + eh.prototype.isBox2 = !0; + const nh = new Lt(), + ih = new Lt(); + class rh { + constructor(t = new Lt(), e = new Lt()) { + (this.start = t), (this.end = e); + } + set(t, e) { + return this.start.copy(t), this.end.copy(e), this; + } + copy(t) { + return this.start.copy(t.start), this.end.copy(t.end), this; + } + getCenter(t) { + return ( + void 0 === t && + (console.warn('THREE.Line3: .getCenter() target is now required'), + (t = new Lt())), + t.addVectors(this.start, this.end).multiplyScalar(0.5) + ); + } + delta(t) { + return ( + void 0 === t && + (console.warn('THREE.Line3: .delta() target is now required'), + (t = new Lt())), + t.subVectors(this.end, this.start) + ); + } + distanceSq() { + return this.start.distanceToSquared(this.end); + } + distance() { + return this.start.distanceTo(this.end); + } + at(t, e) { + return ( + void 0 === e && + (console.warn('THREE.Line3: .at() target is now required'), + (e = new Lt())), + this.delta(e).multiplyScalar(t).add(this.start) + ); + } + closestPointToPointParameter(t, e) { + nh.subVectors(t, this.start), ih.subVectors(this.end, this.start); + const n = ih.dot(ih); + let i = ih.dot(nh) / n; + return e && (i = ht(i, 0, 1)), i; + } + closestPointToPoint(t, e, n) { + const i = this.closestPointToPointParameter(t, e); + return ( + void 0 === n && + (console.warn( + 'THREE.Line3: .closestPointToPoint() target is now required' + ), + (n = new Lt())), + this.delta(n).multiplyScalar(i).add(this.start) + ); + } + applyMatrix4(t) { + return this.start.applyMatrix4(t), this.end.applyMatrix4(t), this; + } + equals(t) { + return t.start.equals(this.start) && t.end.equals(this.end); + } + clone() { + return new this.constructor().copy(this); + } + } + class sh extends Ce { + constructor(t) { + super(), + (this.material = t), + (this.render = function () {}), + (this.hasPositions = !1), + (this.hasNormals = !1), + (this.hasColors = !1), + (this.hasUvs = !1), + (this.positionArray = null), + (this.normalArray = null), + (this.colorArray = null), + (this.uvArray = null), + (this.count = 0); + } + } + sh.prototype.isImmediateRenderObject = !0; + const ah = new Lt(); + const oh = new Lt(), + lh = new se(), + ch = new se(); + class hh extends ya { + constructor(t) { + const e = uh(t), + n = new En(), + i = [], + r = [], + s = new tn(0, 0, 1), + a = new tn(0, 1, 0); + for (let t = 0; t < e.length; t++) { + const n = e[t]; + n.parent && + n.parent.isBone && + (i.push(0, 0, 0), + i.push(0, 0, 0), + r.push(s.r, s.g, s.b), + r.push(a.r, a.g, a.b)); + } + n.setAttribute('position', new mn(i, 3)), + n.setAttribute('color', new mn(r, 3)); + super( + n, + new ca({ + vertexColors: !0, + depthTest: !1, + depthWrite: !1, + toneMapped: !1, + transparent: !0, + }) + ), + (this.type = 'SkeletonHelper'), + (this.isSkeletonHelper = !0), + (this.root = t), + (this.bones = e), + (this.matrix = t.matrixWorld), + (this.matrixAutoUpdate = !1); + } + updateMatrixWorld(t) { + const e = this.bones, + n = this.geometry, + i = n.getAttribute('position'); + ch.copy(this.root.matrixWorld).invert(); + for (let t = 0, n = 0; t < e.length; t++) { + const r = e[t]; + r.parent && + r.parent.isBone && + (lh.multiplyMatrices(ch, r.matrixWorld), + oh.setFromMatrixPosition(lh), + i.setXYZ(n, oh.x, oh.y, oh.z), + lh.multiplyMatrices(ch, r.parent.matrixWorld), + oh.setFromMatrixPosition(lh), + i.setXYZ(n + 1, oh.x, oh.y, oh.z), + (n += 2)); + } + (n.getAttribute('position').needsUpdate = !0), super.updateMatrixWorld(t); + } + } + function uh(t) { + const e = []; + t && t.isBone && e.push(t); + for (let n = 0; n < t.children.length; n++) + e.push.apply(e, uh(t.children[n])); + return e; + } + const dh = new Lt(), + ph = new tn(), + mh = new tn(); + class fh extends ya { + constructor(t = 10, e = 10, n = 4473924, i = 8947848) { + (n = new tn(n)), (i = new tn(i)); + const r = e / 2, + s = t / e, + a = t / 2, + o = [], + l = []; + for (let t = 0, c = 0, h = -a; t <= e; t++, h += s) { + o.push(-a, 0, h, a, 0, h), o.push(h, 0, -a, h, 0, a); + const e = t === r ? n : i; + e.toArray(l, c), + (c += 3), + e.toArray(l, c), + (c += 3), + e.toArray(l, c), + (c += 3), + e.toArray(l, c), + (c += 3); + } + const c = new En(); + c.setAttribute('position', new mn(o, 3)), + c.setAttribute('color', new mn(l, 3)); + super(c, new ca({ vertexColors: !0, toneMapped: !1 })), + (this.type = 'GridHelper'); + } + } + const gh = new Lt(), + vh = new Lt(), + yh = new Lt(); + const xh = new Lt(), + _h = new Qn(); + function wh(t, e, n, i, r, s, a) { + xh.set(r, s, a).unproject(i); + const o = e[t]; + if (void 0 !== o) { + const t = n.getAttribute('position'); + for (let e = 0, n = o.length; e < n; e++) + t.setXYZ(o[e], xh.x, xh.y, xh.z); + } + } + const bh = new Pt(); + class Mh extends ya { + constructor(t, e = 16776960) { + const n = new Uint16Array([ + 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, + 7, + ]), + i = new Float32Array(24), + r = new En(); + r.setIndex(new sn(n, 1)), + r.setAttribute('position', new sn(i, 3)), + super(r, new ca({ color: e, toneMapped: !1 })), + (this.object = t), + (this.type = 'BoxHelper'), + (this.matrixAutoUpdate = !1), + this.update(); + } + update(t) { + if ( + (void 0 !== t && + console.warn('THREE.BoxHelper: .update() has no longer arguments.'), + void 0 !== this.object && bh.setFromObject(this.object), + bh.isEmpty()) + ) + return; + const e = bh.min, + n = bh.max, + i = this.geometry.attributes.position, + r = i.array; + (r[0] = n.x), + (r[1] = n.y), + (r[2] = n.z), + (r[3] = e.x), + (r[4] = n.y), + (r[5] = n.z), + (r[6] = e.x), + (r[7] = e.y), + (r[8] = n.z), + (r[9] = n.x), + (r[10] = e.y), + (r[11] = n.z), + (r[12] = n.x), + (r[13] = n.y), + (r[14] = e.z), + (r[15] = e.x), + (r[16] = n.y), + (r[17] = e.z), + (r[18] = e.x), + (r[19] = e.y), + (r[20] = e.z), + (r[21] = n.x), + (r[22] = e.y), + (r[23] = e.z), + (i.needsUpdate = !0), + this.geometry.computeBoundingSphere(); + } + setFromObject(t) { + return (this.object = t), this.update(), this; + } + copy(t) { + return ya.prototype.copy.call(this, t), (this.object = t.object), this; + } + } + const Sh = new Lt(); + let Th, Eh; + class Ah extends ya { + constructor(t = 1) { + const e = [0, 0, 0, t, 0, 0, 0, 0, 0, 0, t, 0, 0, 0, 0, 0, 0, t], + n = new En(); + n.setAttribute('position', new mn(e, 3)), + n.setAttribute( + 'color', + new mn( + [1, 0, 0, 1, 0.6, 0, 0, 1, 0, 0.6, 1, 0, 0, 0, 1, 0, 0.6, 1], + 3 + ) + ); + super(n, new ca({ vertexColors: !0, toneMapped: !1 })), + (this.type = 'AxesHelper'); + } + dispose() { + this.geometry.dispose(), this.material.dispose(); + } + } + const Lh = new Float32Array(1), + Rh = new Int32Array(Lh.buffer); + const Ch = Math.pow(2, 8), + Ph = [0.125, 0.215, 0.35, 0.446, 0.526, 0.582], + Dh = 5 + Ph.length, + Ih = 20, + Nh = { [X]: 0, [Y]: 1, [J]: 2, [Q]: 3, [K]: 4, [$]: 5, [Z]: 6 }, + Bh = new en({ side: 1, depthWrite: !1, depthTest: !1 }), + zh = new Wn(new qn(), Bh), + Fh = new Jl(), + { _lodPlanes: Oh, _sizeLods: Hh, _sigmas: Gh } = Yh(), + Uh = new tn(); + let kh = null; + const Vh = (1 + Math.sqrt(5)) / 2, + Wh = 1 / Vh, + jh = [ + new Lt(1, 1, 1), + new Lt(-1, 1, 1), + new Lt(1, 1, -1), + new Lt(-1, 1, -1), + new Lt(0, Vh, Wh), + new Lt(0, Vh, -Wh), + new Lt(Wh, 0, Vh), + new Lt(-Wh, 0, Vh), + new Lt(Vh, Wh, 0), + new Lt(-Vh, Wh, 0), + ]; + function qh(t) { + const e = Math.max(t.r, t.g, t.b), + n = Math.min(Math.max(Math.ceil(Math.log2(e)), -128), 127); + t.multiplyScalar(Math.pow(2, -n)); + return (n + 128) / 255; + } + function Xh(t) { + return ( + void 0 !== t && + t.type === x && + (t.encoding === X || t.encoding === Y || t.encoding === Z) + ); + } + function Yh() { + const t = [], + e = [], + n = []; + let i = 8; + for (let r = 0; r < Dh; r++) { + const s = Math.pow(2, i); + e.push(s); + let a = 1 / s; + r > 4 ? (a = Ph[r - 8 + 4 - 1]) : 0 == r && (a = 0), n.push(a); + const o = 1 / (s - 1), + l = -o / 2, + c = 1 + o / 2, + h = [l, l, c, l, c, c, l, l, c, c, l, c], + u = 6, + d = 6, + p = 3, + m = 2, + f = 1, + g = new Float32Array(p * d * u), + v = new Float32Array(m * d * u), + y = new Float32Array(f * d * u); + for (let t = 0; t < u; t++) { + const e = ((t % 3) * 2) / 3 - 1, + n = t > 2 ? 0 : -1, + i = [ + e, + n, + 0, + e + 2 / 3, + n, + 0, + e + 2 / 3, + n + 1, + 0, + e, + n, + 0, + e + 2 / 3, + n + 1, + 0, + e, + n + 1, + 0, + ]; + g.set(i, p * d * t), v.set(h, m * d * t); + const r = [t, t, t, t, t, t]; + y.set(r, f * d * t); + } + const x = new En(); + x.setAttribute('position', new sn(g, p)), + x.setAttribute('uv', new sn(v, m)), + x.setAttribute('faceIndex', new sn(y, f)), + t.push(x), + i > 4 && i--; + } + return { _lodPlanes: t, _sizeLods: e, _sigmas: n }; + } + function Zh(t) { + const e = new Tt(3 * Ch, 3 * Ch, t); + return ( + (e.texture.mapping = l), + (e.texture.name = 'PMREM.cubeUv'), + (e.scissorTest = !0), + e + ); + } + function Jh(t, e, n, i, r) { + t.viewport.set(e, n, i, r), t.scissor.set(e, n, i, r); + } + function Qh() { + const t = new vt(1, 1); + return new Io({ + name: 'EquirectangularToCubeUV', + uniforms: { + envMap: { value: null }, + texelSize: { value: t }, + inputEncoding: { value: Nh[3e3] }, + outputEncoding: { value: Nh[3e3] }, + }, + vertexShader: $h(), + fragmentShader: `\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform vec2 texelSize;\n\n\t\t\t${tu()}\n\n\t\t\t#include \n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\n\t\t\t\tvec3 outputDirection = normalize( vOutputDirection );\n\t\t\t\tvec2 uv = equirectUv( outputDirection );\n\n\t\t\t\tvec2 f = fract( uv / texelSize - 0.5 );\n\t\t\t\tuv -= f * texelSize;\n\t\t\t\tvec3 tl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.x += texelSize.x;\n\t\t\t\tvec3 tr = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.y += texelSize.y;\n\t\t\t\tvec3 br = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.x -= texelSize.x;\n\t\t\t\tvec3 bl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\n\t\t\t\tvec3 tm = mix( tl, tr, f.x );\n\t\t\t\tvec3 bm = mix( bl, br, f.x );\n\t\t\t\tgl_FragColor.rgb = mix( tm, bm, f.y );\n\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t`, + blending: 0, + depthTest: !1, + depthWrite: !1, + }); + } + function Kh() { + return new Io({ + name: 'CubemapToCubeUV', + uniforms: { + envMap: { value: null }, + inputEncoding: { value: Nh[3e3] }, + outputEncoding: { value: Nh[3e3] }, + }, + vertexShader: $h(), + fragmentShader: `\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform samplerCube envMap;\n\n\t\t\t${tu()}\n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb = envMapTexelToLinear( textureCube( envMap, vec3( - vOutputDirection.x, vOutputDirection.yz ) ) ).rgb;\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t`, + blending: 0, + depthTest: !1, + depthWrite: !1, + }); + } + function $h() { + return '\n\n\t\tprecision mediump float;\n\t\tprecision mediump int;\n\n\t\tattribute vec3 position;\n\t\tattribute vec2 uv;\n\t\tattribute float faceIndex;\n\n\t\tvarying vec3 vOutputDirection;\n\n\t\t// RH coordinate system; PMREM face-indexing convention\n\t\tvec3 getDirection( vec2 uv, float face ) {\n\n\t\t\tuv = 2.0 * uv - 1.0;\n\n\t\t\tvec3 direction = vec3( uv, 1.0 );\n\n\t\t\tif ( face == 0.0 ) {\n\n\t\t\t\tdirection = direction.zyx; // ( 1, v, u ) pos x\n\n\t\t\t} else if ( face == 1.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\n\n\t\t\t} else if ( face == 2.0 ) {\n\n\t\t\t\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\n\n\t\t\t} else if ( face == 3.0 ) {\n\n\t\t\t\tdirection = direction.zyx;\n\t\t\t\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\n\n\t\t\t} else if ( face == 4.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\n\n\t\t\t} else if ( face == 5.0 ) {\n\n\t\t\t\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\n\n\t\t\t}\n\n\t\t\treturn direction;\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvOutputDirection = getDirection( uv, faceIndex );\n\t\t\tgl_Position = vec4( position, 1.0 );\n\n\t\t}\n\t'; + } + function tu() { + return '\n\n\t\tuniform int inputEncoding;\n\t\tuniform int outputEncoding;\n\n\t\t#include \n\n\t\tvec4 inputTexelToLinear( vec4 value ) {\n\n\t\t\tif ( inputEncoding == 0 ) {\n\n\t\t\t\treturn value;\n\n\t\t\t} else if ( inputEncoding == 1 ) {\n\n\t\t\t\treturn sRGBToLinear( value );\n\n\t\t\t} else if ( inputEncoding == 2 ) {\n\n\t\t\t\treturn RGBEToLinear( value );\n\n\t\t\t} else if ( inputEncoding == 3 ) {\n\n\t\t\t\treturn RGBMToLinear( value, 7.0 );\n\n\t\t\t} else if ( inputEncoding == 4 ) {\n\n\t\t\t\treturn RGBMToLinear( value, 16.0 );\n\n\t\t\t} else if ( inputEncoding == 5 ) {\n\n\t\t\t\treturn RGBDToLinear( value, 256.0 );\n\n\t\t\t} else {\n\n\t\t\t\treturn GammaToLinear( value, 2.2 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvec4 linearToOutputTexel( vec4 value ) {\n\n\t\t\tif ( outputEncoding == 0 ) {\n\n\t\t\t\treturn value;\n\n\t\t\t} else if ( outputEncoding == 1 ) {\n\n\t\t\t\treturn LinearTosRGB( value );\n\n\t\t\t} else if ( outputEncoding == 2 ) {\n\n\t\t\t\treturn LinearToRGBE( value );\n\n\t\t\t} else if ( outputEncoding == 3 ) {\n\n\t\t\t\treturn LinearToRGBM( value, 7.0 );\n\n\t\t\t} else if ( outputEncoding == 4 ) {\n\n\t\t\t\treturn LinearToRGBM( value, 16.0 );\n\n\t\t\t} else if ( outputEncoding == 5 ) {\n\n\t\t\t\treturn LinearToRGBD( value, 256.0 );\n\n\t\t\t} else {\n\n\t\t\t\treturn LinearToGamma( value, 2.2 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvec4 envMapTexelToLinear( vec4 color ) {\n\n\t\t\treturn inputTexelToLinear( color );\n\n\t\t}\n\t'; + } + (ml.create = function (t, e) { + return ( + console.log('THREE.Curve.create() has been deprecated'), + (t.prototype = Object.create(ml.prototype)), + (t.prototype.constructor = t), + (t.prototype.getPoint = e), + t + ); + }), + (Bl.prototype.fromPoints = function (t) { + return ( + console.warn( + 'THREE.Path: .fromPoints() has been renamed to .setFromPoints().' + ), + this.setFromPoints(t) + ); + }), + (fh.prototype.setColors = function () { + console.error( + 'THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.' + ); + }), + (hh.prototype.update = function () { + console.error( + 'THREE.SkeletonHelper: update() no longer needs to be called.' + ); + }), + (ol.prototype.extractUrlBase = function (t) { + return ( + console.warn( + 'THREE.Loader: .extractUrlBase() has been deprecated. Use THREE.LoaderUtils.extractUrlBase() instead.' + ), + rc.extractUrlBase(t) + ); + }), + (ol.Handlers = { + add: function () { + console.error( + 'THREE.Loader: Handlers.add() has been removed. Use LoadingManager.addHandler() instead.' + ); + }, + get: function () { + console.error( + 'THREE.Loader: Handlers.get() has been removed. Use LoadingManager.getHandler() instead.' + ); + }, + }), + (eh.prototype.center = function (t) { + return ( + console.warn('THREE.Box2: .center() has been renamed to .getCenter().'), + this.getCenter(t) + ); + }), + (eh.prototype.empty = function () { + return ( + console.warn('THREE.Box2: .empty() has been renamed to .isEmpty().'), + this.isEmpty() + ); + }), + (eh.prototype.isIntersectionBox = function (t) { + return ( + console.warn( + 'THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox().' + ), + this.intersectsBox(t) + ); + }), + (eh.prototype.size = function (t) { + return ( + console.warn('THREE.Box2: .size() has been renamed to .getSize().'), + this.getSize(t) + ); + }), + (Pt.prototype.center = function (t) { + return ( + console.warn('THREE.Box3: .center() has been renamed to .getCenter().'), + this.getCenter(t) + ); + }), + (Pt.prototype.empty = function () { + return ( + console.warn('THREE.Box3: .empty() has been renamed to .isEmpty().'), + this.isEmpty() + ); + }), + (Pt.prototype.isIntersectionBox = function (t) { + return ( + console.warn( + 'THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox().' + ), + this.intersectsBox(t) + ); + }), + (Pt.prototype.isIntersectionSphere = function (t) { + return ( + console.warn( + 'THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere().' + ), + this.intersectsSphere(t) + ); + }), + (Pt.prototype.size = function (t) { + return ( + console.warn('THREE.Box3: .size() has been renamed to .getSize().'), + this.getSize(t) + ); + }), + (Jt.prototype.empty = function () { + return ( + console.warn('THREE.Sphere: .empty() has been renamed to .isEmpty().'), + this.isEmpty() + ); + }), + (ai.prototype.setFromMatrix = function (t) { + return ( + console.warn( + 'THREE.Frustum: .setFromMatrix() has been renamed to .setFromProjectionMatrix().' + ), + this.setFromProjectionMatrix(t) + ); + }), + (rh.prototype.center = function (t) { + return ( + console.warn( + 'THREE.Line3: .center() has been renamed to .getCenter().' + ), + this.getCenter(t) + ); + }), + (yt.prototype.flattenToArrayOffset = function (t, e) { + return ( + console.warn( + 'THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.' + ), + this.toArray(t, e) + ); + }), + (yt.prototype.multiplyVector3 = function (t) { + return ( + console.warn( + 'THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead.' + ), + t.applyMatrix3(this) + ); + }), + (yt.prototype.multiplyVector3Array = function () { + console.error('THREE.Matrix3: .multiplyVector3Array() has been removed.'); + }), + (yt.prototype.applyToBufferAttribute = function (t) { + return ( + console.warn( + 'THREE.Matrix3: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix3( matrix ) instead.' + ), + t.applyMatrix3(this) + ); + }), + (yt.prototype.applyToVector3Array = function () { + console.error('THREE.Matrix3: .applyToVector3Array() has been removed.'); + }), + (yt.prototype.getInverse = function (t) { + return ( + console.warn( + 'THREE.Matrix3: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead.' + ), + this.copy(t).invert() + ); + }), + (se.prototype.extractPosition = function (t) { + return ( + console.warn( + 'THREE.Matrix4: .extractPosition() has been renamed to .copyPosition().' + ), + this.copyPosition(t) + ); + }), + (se.prototype.flattenToArrayOffset = function (t, e) { + return ( + console.warn( + 'THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.' + ), + this.toArray(t, e) + ); + }), + (se.prototype.getPosition = function () { + return ( + console.warn( + 'THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead.' + ), + new Lt().setFromMatrixColumn(this, 3) + ); + }), + (se.prototype.setRotationFromQuaternion = function (t) { + return ( + console.warn( + 'THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion().' + ), + this.makeRotationFromQuaternion(t) + ); + }), + (se.prototype.multiplyToArray = function () { + console.warn('THREE.Matrix4: .multiplyToArray() has been removed.'); + }), + (se.prototype.multiplyVector3 = function (t) { + return ( + console.warn( + 'THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead.' + ), + t.applyMatrix4(this) + ); + }), + (se.prototype.multiplyVector4 = function (t) { + return ( + console.warn( + 'THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.' + ), + t.applyMatrix4(this) + ); + }), + (se.prototype.multiplyVector3Array = function () { + console.error('THREE.Matrix4: .multiplyVector3Array() has been removed.'); + }), + (se.prototype.rotateAxis = function (t) { + console.warn( + 'THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead.' + ), + t.transformDirection(this); + }), + (se.prototype.crossVector = function (t) { + return ( + console.warn( + 'THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead.' + ), + t.applyMatrix4(this) + ); + }), + (se.prototype.translate = function () { + console.error('THREE.Matrix4: .translate() has been removed.'); + }), + (se.prototype.rotateX = function () { + console.error('THREE.Matrix4: .rotateX() has been removed.'); + }), + (se.prototype.rotateY = function () { + console.error('THREE.Matrix4: .rotateY() has been removed.'); + }), + (se.prototype.rotateZ = function () { + console.error('THREE.Matrix4: .rotateZ() has been removed.'); + }), + (se.prototype.rotateByAxis = function () { + console.error('THREE.Matrix4: .rotateByAxis() has been removed.'); + }), + (se.prototype.applyToBufferAttribute = function (t) { + return ( + console.warn( + 'THREE.Matrix4: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix4( matrix ) instead.' + ), + t.applyMatrix4(this) + ); + }), + (se.prototype.applyToVector3Array = function () { + console.error('THREE.Matrix4: .applyToVector3Array() has been removed.'); + }), + (se.prototype.makeFrustum = function (t, e, n, i, r, s) { + return ( + console.warn( + 'THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead.' + ), + this.makePerspective(t, e, i, n, r, s) + ); + }), + (se.prototype.getInverse = function (t) { + return ( + console.warn( + 'THREE.Matrix4: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead.' + ), + this.copy(t).invert() + ); + }), + (Ne.prototype.isIntersectionLine = function (t) { + return ( + console.warn( + 'THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine().' + ), + this.intersectsLine(t) + ); + }), + (At.prototype.multiplyVector3 = function (t) { + return ( + console.warn( + 'THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead.' + ), + t.applyQuaternion(this) + ); + }), + (At.prototype.inverse = function () { + return ( + console.warn( + 'THREE.Quaternion: .inverse() has been renamed to invert().' + ), + this.invert() + ); + }), + (re.prototype.isIntersectionBox = function (t) { + return ( + console.warn( + 'THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox().' + ), + this.intersectsBox(t) + ); + }), + (re.prototype.isIntersectionPlane = function (t) { + return ( + console.warn( + 'THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane().' + ), + this.intersectsPlane(t) + ); + }), + (re.prototype.isIntersectionSphere = function (t) { + return ( + console.warn( + 'THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere().' + ), + this.intersectsSphere(t) + ); + }), + (je.prototype.area = function () { + return ( + console.warn('THREE.Triangle: .area() has been renamed to .getArea().'), + this.getArea() + ); + }), + (je.prototype.barycoordFromPoint = function (t, e) { + return ( + console.warn( + 'THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().' + ), + this.getBarycoord(t, e) + ); + }), + (je.prototype.midpoint = function (t) { + return ( + console.warn( + 'THREE.Triangle: .midpoint() has been renamed to .getMidpoint().' + ), + this.getMidpoint(t) + ); + }), + (je.prototypenormal = function (t) { + return ( + console.warn( + 'THREE.Triangle: .normal() has been renamed to .getNormal().' + ), + this.getNormal(t) + ); + }), + (je.prototype.plane = function (t) { + return ( + console.warn( + 'THREE.Triangle: .plane() has been renamed to .getPlane().' + ), + this.getPlane(t) + ); + }), + (je.barycoordFromPoint = function (t, e, n, i, r) { + return ( + console.warn( + 'THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().' + ), + je.getBarycoord(t, e, n, i, r) + ); + }), + (je.normal = function (t, e, n, i) { + return ( + console.warn( + 'THREE.Triangle: .normal() has been renamed to .getNormal().' + ), + je.getNormal(t, e, n, i) + ); + }), + (zl.prototype.extractAllPoints = function (t) { + return ( + console.warn( + 'THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead.' + ), + this.extractPoints(t) + ); + }), + (zl.prototype.extrude = function (t) { + return ( + console.warn( + 'THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead.' + ), + new go(this, t) + ); + }), + (zl.prototype.makeGeometry = function (t) { + return ( + console.warn( + 'THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead.' + ), + new Mo(this, t) + ); + }), + (vt.prototype.fromAttribute = function (t, e, n) { + return ( + console.warn( + 'THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute().' + ), + this.fromBufferAttribute(t, e, n) + ); + }), + (vt.prototype.distanceToManhattan = function (t) { + return ( + console.warn( + 'THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo().' + ), + this.manhattanDistanceTo(t) + ); + }), + (vt.prototype.lengthManhattan = function () { + return ( + console.warn( + 'THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength().' + ), + this.manhattanLength() + ); + }), + (Lt.prototype.setEulerFromRotationMatrix = function () { + console.error( + 'THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.' + ); + }), + (Lt.prototype.setEulerFromQuaternion = function () { + console.error( + 'THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.' + ); + }), + (Lt.prototype.getPositionFromMatrix = function (t) { + return ( + console.warn( + 'THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition().' + ), + this.setFromMatrixPosition(t) + ); + }), + (Lt.prototype.getScaleFromMatrix = function (t) { + return ( + console.warn( + 'THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale().' + ), + this.setFromMatrixScale(t) + ); + }), + (Lt.prototype.getColumnFromMatrix = function (t, e) { + return ( + console.warn( + 'THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn().' + ), + this.setFromMatrixColumn(e, t) + ); + }), + (Lt.prototype.applyProjection = function (t) { + return ( + console.warn( + 'THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead.' + ), + this.applyMatrix4(t) + ); + }), + (Lt.prototype.fromAttribute = function (t, e, n) { + return ( + console.warn( + 'THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute().' + ), + this.fromBufferAttribute(t, e, n) + ); + }), + (Lt.prototype.distanceToManhattan = function (t) { + return ( + console.warn( + 'THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo().' + ), + this.manhattanDistanceTo(t) + ); + }), + (Lt.prototype.lengthManhattan = function () { + return ( + console.warn( + 'THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength().' + ), + this.manhattanLength() + ); + }), + (St.prototype.fromAttribute = function (t, e, n) { + return ( + console.warn( + 'THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute().' + ), + this.fromBufferAttribute(t, e, n) + ); + }), + (St.prototype.lengthManhattan = function () { + return ( + console.warn( + 'THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength().' + ), + this.manhattanLength() + ); + }), + (Ce.prototype.getChildByName = function (t) { + return ( + console.warn( + 'THREE.Object3D: .getChildByName() has been renamed to .getObjectByName().' + ), + this.getObjectByName(t) + ); + }), + (Ce.prototype.renderDepth = function () { + console.warn( + 'THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.' + ); + }), + (Ce.prototype.translate = function (t, e) { + return ( + console.warn( + 'THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead.' + ), + this.translateOnAxis(e, t) + ); + }), + (Ce.prototype.getWorldRotation = function () { + console.error( + 'THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.' + ); + }), + (Ce.prototype.applyMatrix = function (t) { + return ( + console.warn( + 'THREE.Object3D: .applyMatrix() has been renamed to .applyMatrix4().' + ), + this.applyMatrix4(t) + ); + }), + Object.defineProperties(Ce.prototype, { + eulerOrder: { + get: function () { + return ( + console.warn('THREE.Object3D: .eulerOrder is now .rotation.order.'), + this.rotation.order + ); + }, + set: function (t) { + console.warn('THREE.Object3D: .eulerOrder is now .rotation.order.'), + (this.rotation.order = t); + }, + }, + useQuaternion: { + get: function () { + console.warn( + 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.' + ); + }, + set: function () { + console.warn( + 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.' + ); + }, + }, + }), + (Wn.prototype.setDrawMode = function () { + console.error( + 'THREE.Mesh: .setDrawMode() has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.' + ); + }), + Object.defineProperties(Wn.prototype, { + drawMode: { + get: function () { + return ( + console.error( + 'THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode.' + ), + 0 + ); + }, + set: function () { + console.error( + 'THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.' + ); + }, + }, + }), + ($s.prototype.initBones = function () { + console.error('THREE.SkinnedMesh: initBones() has been removed.'); + }), + (Kn.prototype.setLens = function (t, e) { + console.warn( + 'THREE.PerspectiveCamera.setLens is deprecated. Use .setFocalLength and .filmGauge for a photographic setup.' + ), + void 0 !== e && (this.filmGauge = e), + this.setFocalLength(t); + }), + Object.defineProperties(Fl.prototype, { + onlyShadow: { + set: function () { + console.warn('THREE.Light: .onlyShadow has been removed.'); + }, + }, + shadowCameraFov: { + set: function (t) { + console.warn( + 'THREE.Light: .shadowCameraFov is now .shadow.camera.fov.' + ), + (this.shadow.camera.fov = t); + }, + }, + shadowCameraLeft: { + set: function (t) { + console.warn( + 'THREE.Light: .shadowCameraLeft is now .shadow.camera.left.' + ), + (this.shadow.camera.left = t); + }, + }, + shadowCameraRight: { + set: function (t) { + console.warn( + 'THREE.Light: .shadowCameraRight is now .shadow.camera.right.' + ), + (this.shadow.camera.right = t); + }, + }, + shadowCameraTop: { + set: function (t) { + console.warn( + 'THREE.Light: .shadowCameraTop is now .shadow.camera.top.' + ), + (this.shadow.camera.top = t); + }, + }, + shadowCameraBottom: { + set: function (t) { + console.warn( + 'THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom.' + ), + (this.shadow.camera.bottom = t); + }, + }, + shadowCameraNear: { + set: function (t) { + console.warn( + 'THREE.Light: .shadowCameraNear is now .shadow.camera.near.' + ), + (this.shadow.camera.near = t); + }, + }, + shadowCameraFar: { + set: function (t) { + console.warn( + 'THREE.Light: .shadowCameraFar is now .shadow.camera.far.' + ), + (this.shadow.camera.far = t); + }, + }, + shadowCameraVisible: { + set: function () { + console.warn( + 'THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.' + ); + }, + }, + shadowBias: { + set: function (t) { + console.warn('THREE.Light: .shadowBias is now .shadow.bias.'), + (this.shadow.bias = t); + }, + }, + shadowDarkness: { + set: function () { + console.warn('THREE.Light: .shadowDarkness has been removed.'); + }, + }, + shadowMapWidth: { + set: function (t) { + console.warn( + 'THREE.Light: .shadowMapWidth is now .shadow.mapSize.width.' + ), + (this.shadow.mapSize.width = t); + }, + }, + shadowMapHeight: { + set: function (t) { + console.warn( + 'THREE.Light: .shadowMapHeight is now .shadow.mapSize.height.' + ), + (this.shadow.mapSize.height = t); + }, + }, + }), + Object.defineProperties(sn.prototype, { + length: { + get: function () { + return ( + console.warn( + 'THREE.BufferAttribute: .length has been deprecated. Use .count instead.' + ), + this.array.length + ); + }, + }, + dynamic: { + get: function () { + return ( + console.warn( + 'THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead.' + ), + this.usage === nt + ); + }, + set: function () { + console.warn( + 'THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead.' + ), + this.setUsage(nt); + }, + }, + }), + (sn.prototype.setDynamic = function (t) { + return ( + console.warn( + 'THREE.BufferAttribute: .setDynamic() has been deprecated. Use .setUsage() instead.' + ), + this.setUsage(!0 === t ? nt : et), + this + ); + }), + (sn.prototype.copyIndicesArray = function () { + console.error( + 'THREE.BufferAttribute: .copyIndicesArray() has been removed.' + ); + }), + (sn.prototype.setArray = function () { + console.error( + 'THREE.BufferAttribute: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers' + ); + }), + (En.prototype.addIndex = function (t) { + console.warn( + 'THREE.BufferGeometry: .addIndex() has been renamed to .setIndex().' + ), + this.setIndex(t); + }), + (En.prototype.addAttribute = function (t, e) { + return ( + console.warn( + 'THREE.BufferGeometry: .addAttribute() has been renamed to .setAttribute().' + ), + (e && e.isBufferAttribute) || (e && e.isInterleavedBufferAttribute) + ? 'index' === t + ? (console.warn( + 'THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute.' + ), + this.setIndex(e), + this) + : this.setAttribute(t, e) + : (console.warn( + 'THREE.BufferGeometry: .addAttribute() now expects ( name, attribute ).' + ), + this.setAttribute(t, new sn(arguments[1], arguments[2]))) + ); + }), + (En.prototype.addDrawCall = function (t, e, n) { + void 0 !== n && + console.warn( + 'THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset.' + ), + console.warn( + 'THREE.BufferGeometry: .addDrawCall() is now .addGroup().' + ), + this.addGroup(t, e); + }), + (En.prototype.clearDrawCalls = function () { + console.warn( + 'THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups().' + ), + this.clearGroups(); + }), + (En.prototype.computeOffsets = function () { + console.warn('THREE.BufferGeometry: .computeOffsets() has been removed.'); + }), + (En.prototype.removeAttribute = function (t) { + return ( + console.warn( + 'THREE.BufferGeometry: .removeAttribute() has been renamed to .deleteAttribute().' + ), + this.deleteAttribute(t) + ); + }), + (En.prototype.applyMatrix = function (t) { + return ( + console.warn( + 'THREE.BufferGeometry: .applyMatrix() has been renamed to .applyMatrix4().' + ), + this.applyMatrix4(t) + ); + }), + Object.defineProperties(En.prototype, { + drawcalls: { + get: function () { + return ( + console.error( + 'THREE.BufferGeometry: .drawcalls has been renamed to .groups.' + ), + this.groups + ); + }, + }, + offsets: { + get: function () { + return ( + console.warn( + 'THREE.BufferGeometry: .offsets has been renamed to .groups.' + ), + this.groups + ); + }, + }, + }), + (Es.prototype.setDynamic = function (t) { + return ( + console.warn( + 'THREE.InterleavedBuffer: .setDynamic() has been deprecated. Use .setUsage() instead.' + ), + this.setUsage(!0 === t ? nt : et), + this + ); + }), + (Es.prototype.setArray = function () { + console.error( + 'THREE.InterleavedBuffer: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers' + ); + }), + (go.prototype.getArrays = function () { + console.error('THREE.ExtrudeGeometry: .getArrays() has been removed.'); + }), + (go.prototype.addShapeList = function () { + console.error('THREE.ExtrudeGeometry: .addShapeList() has been removed.'); + }), + (go.prototype.addShape = function () { + console.error('THREE.ExtrudeGeometry: .addShape() has been removed.'); + }), + (Ts.prototype.dispose = function () { + console.error('THREE.Scene: .dispose() has been removed.'); + }), + (Zc.prototype.onUpdate = function () { + return ( + console.warn( + 'THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead.' + ), + this + ); + }), + Object.defineProperties(Xe.prototype, { + wrapAround: { + get: function () { + console.warn('THREE.Material: .wrapAround has been removed.'); + }, + set: function () { + console.warn('THREE.Material: .wrapAround has been removed.'); + }, + }, + overdraw: { + get: function () { + console.warn('THREE.Material: .overdraw has been removed.'); + }, + set: function () { + console.warn('THREE.Material: .overdraw has been removed.'); + }, + }, + wrapRGB: { + get: function () { + return ( + console.warn('THREE.Material: .wrapRGB has been removed.'), new tn() + ); + }, + }, + shading: { + get: function () { + console.error( + 'THREE.' + + this.type + + ': .shading has been removed. Use the boolean .flatShading instead.' + ); + }, + set: function (t) { + console.warn( + 'THREE.' + + this.type + + ': .shading has been removed. Use the boolean .flatShading instead.' + ), + (this.flatShading = 1 === t); + }, + }, + stencilMask: { + get: function () { + return ( + console.warn( + 'THREE.' + + this.type + + ': .stencilMask has been removed. Use .stencilFuncMask instead.' + ), + this.stencilFuncMask + ); + }, + set: function (t) { + console.warn( + 'THREE.' + + this.type + + ': .stencilMask has been removed. Use .stencilFuncMask instead.' + ), + (this.stencilFuncMask = t); + }, + }, + }), + Object.defineProperties(Jn.prototype, { + derivatives: { + get: function () { + return ( + console.warn( + 'THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives.' + ), + this.extensions.derivatives + ); + }, + set: function (t) { + console.warn( + 'THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives.' + ), + (this.extensions.derivatives = t); + }, + }, + }), + (ws.prototype.clearTarget = function (t, e, n, i) { + console.warn( + 'THREE.WebGLRenderer: .clearTarget() has been deprecated. Use .setRenderTarget() and .clear() instead.' + ), + this.setRenderTarget(t), + this.clear(e, n, i); + }), + (ws.prototype.animate = function (t) { + console.warn( + 'THREE.WebGLRenderer: .animate() is now .setAnimationLoop().' + ), + this.setAnimationLoop(t); + }), + (ws.prototype.getCurrentRenderTarget = function () { + return ( + console.warn( + 'THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget().' + ), + this.getRenderTarget() + ); + }), + (ws.prototype.getMaxAnisotropy = function () { + return ( + console.warn( + 'THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy().' + ), + this.capabilities.getMaxAnisotropy() + ); + }), + (ws.prototype.getPrecision = function () { + return ( + console.warn( + 'THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision.' + ), + this.capabilities.precision + ); + }), + (ws.prototype.resetGLState = function () { + return ( + console.warn( + 'THREE.WebGLRenderer: .resetGLState() is now .state.reset().' + ), + this.state.reset() + ); + }), + (ws.prototype.supportsFloatTextures = function () { + return ( + console.warn( + "THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( 'OES_texture_float' )." + ), + this.extensions.get('OES_texture_float') + ); + }), + (ws.prototype.supportsHalfFloatTextures = function () { + return ( + console.warn( + "THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( 'OES_texture_half_float' )." + ), + this.extensions.get('OES_texture_half_float') + ); + }), + (ws.prototype.supportsStandardDerivatives = function () { + return ( + console.warn( + "THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( 'OES_standard_derivatives' )." + ), + this.extensions.get('OES_standard_derivatives') + ); + }), + (ws.prototype.supportsCompressedTextureS3TC = function () { + return ( + console.warn( + "THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( 'WEBGL_compressed_texture_s3tc' )." + ), + this.extensions.get('WEBGL_compressed_texture_s3tc') + ); + }), + (ws.prototype.supportsCompressedTexturePVRTC = function () { + return ( + console.warn( + "THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( 'WEBGL_compressed_texture_pvrtc' )." + ), + this.extensions.get('WEBGL_compressed_texture_pvrtc') + ); + }), + (ws.prototype.supportsBlendMinMax = function () { + return ( + console.warn( + "THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( 'EXT_blend_minmax' )." + ), + this.extensions.get('EXT_blend_minmax') + ); + }), + (ws.prototype.supportsVertexTextures = function () { + return ( + console.warn( + 'THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures.' + ), + this.capabilities.vertexTextures + ); + }), + (ws.prototype.supportsInstancedArrays = function () { + return ( + console.warn( + "THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( 'ANGLE_instanced_arrays' )." + ), + this.extensions.get('ANGLE_instanced_arrays') + ); + }), + (ws.prototype.enableScissorTest = function (t) { + console.warn( + 'THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest().' + ), + this.setScissorTest(t); + }), + (ws.prototype.initMaterial = function () { + console.warn('THREE.WebGLRenderer: .initMaterial() has been removed.'); + }), + (ws.prototype.addPrePlugin = function () { + console.warn('THREE.WebGLRenderer: .addPrePlugin() has been removed.'); + }), + (ws.prototype.addPostPlugin = function () { + console.warn('THREE.WebGLRenderer: .addPostPlugin() has been removed.'); + }), + (ws.prototype.updateShadowMap = function () { + console.warn('THREE.WebGLRenderer: .updateShadowMap() has been removed.'); + }), + (ws.prototype.setFaceCulling = function () { + console.warn('THREE.WebGLRenderer: .setFaceCulling() has been removed.'); + }), + (ws.prototype.allocTextureUnit = function () { + console.warn( + 'THREE.WebGLRenderer: .allocTextureUnit() has been removed.' + ); + }), + (ws.prototype.setTexture = function () { + console.warn('THREE.WebGLRenderer: .setTexture() has been removed.'); + }), + (ws.prototype.setTexture2D = function () { + console.warn('THREE.WebGLRenderer: .setTexture2D() has been removed.'); + }), + (ws.prototype.setTextureCube = function () { + console.warn('THREE.WebGLRenderer: .setTextureCube() has been removed.'); + }), + (ws.prototype.getActiveMipMapLevel = function () { + return ( + console.warn( + 'THREE.WebGLRenderer: .getActiveMipMapLevel() is now .getActiveMipmapLevel().' + ), + this.getActiveMipmapLevel() + ); + }), + Object.defineProperties(ws.prototype, { + shadowMapEnabled: { + get: function () { + return this.shadowMap.enabled; + }, + set: function (t) { + console.warn( + 'THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled.' + ), + (this.shadowMap.enabled = t); + }, + }, + shadowMapType: { + get: function () { + return this.shadowMap.type; + }, + set: function (t) { + console.warn( + 'THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type.' + ), + (this.shadowMap.type = t); + }, + }, + shadowMapCullFace: { + get: function () { + console.warn( + 'THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.' + ); + }, + set: function () { + console.warn( + 'THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.' + ); + }, + }, + context: { + get: function () { + return ( + console.warn( + 'THREE.WebGLRenderer: .context has been removed. Use .getContext() instead.' + ), + this.getContext() + ); + }, + }, + vr: { + get: function () { + return ( + console.warn('THREE.WebGLRenderer: .vr has been renamed to .xr'), + this.xr + ); + }, + }, + gammaInput: { + get: function () { + return ( + console.warn( + 'THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.' + ), + !1 + ); + }, + set: function () { + console.warn( + 'THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.' + ); + }, + }, + gammaOutput: { + get: function () { + return ( + console.warn( + 'THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead.' + ), + !1 + ); + }, + set: function (t) { + console.warn( + 'THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead.' + ), + (this.outputEncoding = !0 === t ? Y : X); + }, + }, + toneMappingWhitePoint: { + get: function () { + return ( + console.warn( + 'THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.' + ), + 1 + ); + }, + set: function () { + console.warn( + 'THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.' + ); + }, + }, + }), + Object.defineProperties(us.prototype, { + cullFace: { + get: function () { + console.warn( + 'THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.' + ); + }, + set: function () { + console.warn( + 'THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.' + ); + }, + }, + renderReverseSided: { + get: function () { + console.warn( + 'THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.' + ); + }, + set: function () { + console.warn( + 'THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.' + ); + }, + }, + renderSingleSided: { + get: function () { + console.warn( + 'THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.' + ); + }, + set: function () { + console.warn( + 'THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.' + ); + }, + }, + }), + Object.defineProperties(Tt.prototype, { + wrapS: { + get: function () { + return ( + console.warn( + 'THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.' + ), + this.texture.wrapS + ); + }, + set: function (t) { + console.warn( + 'THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.' + ), + (this.texture.wrapS = t); + }, + }, + wrapT: { + get: function () { + return ( + console.warn( + 'THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.' + ), + this.texture.wrapT + ); + }, + set: function (t) { + console.warn( + 'THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.' + ), + (this.texture.wrapT = t); + }, + }, + magFilter: { + get: function () { + return ( + console.warn( + 'THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.' + ), + this.texture.magFilter + ); + }, + set: function (t) { + console.warn( + 'THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.' + ), + (this.texture.magFilter = t); + }, + }, + minFilter: { + get: function () { + return ( + console.warn( + 'THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.' + ), + this.texture.minFilter + ); + }, + set: function (t) { + console.warn( + 'THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.' + ), + (this.texture.minFilter = t); + }, + }, + anisotropy: { + get: function () { + return ( + console.warn( + 'THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.' + ), + this.texture.anisotropy + ); + }, + set: function (t) { + console.warn( + 'THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.' + ), + (this.texture.anisotropy = t); + }, + }, + offset: { + get: function () { + return ( + console.warn( + 'THREE.WebGLRenderTarget: .offset is now .texture.offset.' + ), + this.texture.offset + ); + }, + set: function (t) { + console.warn( + 'THREE.WebGLRenderTarget: .offset is now .texture.offset.' + ), + (this.texture.offset = t); + }, + }, + repeat: { + get: function () { + return ( + console.warn( + 'THREE.WebGLRenderTarget: .repeat is now .texture.repeat.' + ), + this.texture.repeat + ); + }, + set: function (t) { + console.warn( + 'THREE.WebGLRenderTarget: .repeat is now .texture.repeat.' + ), + (this.texture.repeat = t); + }, + }, + format: { + get: function () { + return ( + console.warn( + 'THREE.WebGLRenderTarget: .format is now .texture.format.' + ), + this.texture.format + ); + }, + set: function (t) { + console.warn( + 'THREE.WebGLRenderTarget: .format is now .texture.format.' + ), + (this.texture.format = t); + }, + }, + type: { + get: function () { + return ( + console.warn( + 'THREE.WebGLRenderTarget: .type is now .texture.type.' + ), + this.texture.type + ); + }, + set: function (t) { + console.warn('THREE.WebGLRenderTarget: .type is now .texture.type.'), + (this.texture.type = t); + }, + }, + generateMipmaps: { + get: function () { + return ( + console.warn( + 'THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.' + ), + this.texture.generateMipmaps + ); + }, + set: function (t) { + console.warn( + 'THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.' + ), + (this.texture.generateMipmaps = t); + }, + }, + }), + (Lc.prototype.load = function (t) { + console.warn( + 'THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead.' + ); + const e = this; + return ( + new vc().load(t, function (t) { + e.setBuffer(t); + }), + this + ); + }), + (Ic.prototype.getData = function () { + return ( + console.warn( + 'THREE.AudioAnalyser: .getData() is now .getFrequencyData().' + ), + this.getFrequencyData() + ); + }), + (ti.prototype.updateCubeMap = function (t, e) { + return ( + console.warn('THREE.CubeCamera: .updateCubeMap() is now .update().'), + this.update(t, e) + ); + }), + (ti.prototype.clear = function (t, e, n, i) { + return ( + console.warn( + 'THREE.CubeCamera: .clear() is now .renderTarget.clear().' + ), + this.renderTarget.clear(t, e, n, i) + ); + }), + (_t.crossOrigin = void 0), + (_t.loadTexture = function (t, e, n, i) { + console.warn( + 'THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead.' + ); + const r = new pl(); + r.setCrossOrigin(this.crossOrigin); + const s = r.load(t, n, void 0, i); + return e && (s.mapping = e), s; + }), + (_t.loadTextureCube = function (t, e, n, i) { + console.warn( + 'THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead.' + ); + const r = new ul(); + r.setCrossOrigin(this.crossOrigin); + const s = r.load(t, n, void 0, i); + return e && (s.mapping = e), s; + }), + (_t.loadCompressedTexture = function () { + console.error( + 'THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.' + ); + }), + (_t.loadCompressedTextureCube = function () { + console.error( + 'THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.' + ); + }); + const eu = { + createMultiMaterialObject: function () { + console.error( + 'THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js' + ); + }, + detach: function () { + console.error( + 'THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js' + ); + }, + attach: function () { + console.error( + 'THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js' + ); + }, + }; + 'undefined' != typeof __THREE_DEVTOOLS__ && + __THREE_DEVTOOLS__.dispatchEvent( + new CustomEvent('register', { detail: { revision: e } }) + ), + 'undefined' != typeof window && + (window.__THREE__ + ? console.warn( + 'WARNING: Multiple instances of Three.js being imported.' + ) + : (window.__THREE__ = e)), + (t.ACESFilmicToneMapping = 4), + (t.AddEquation = n), + (t.AddOperation = 2), + (t.AdditiveAnimationBlendMode = q), + (t.AdditiveBlending = 2), + (t.AlphaFormat = 1021), + (t.AlwaysDepth = 1), + (t.AlwaysStencilFunc = 519), + (t.AmbientLight = $l), + (t.AmbientLightProbe = xc), + (t.AnimationClip = nl), + (t.AnimationLoader = class extends ol { + constructor(t) { + super(t); + } + load(t, e, n, i) { + const r = this, + s = new cl(this.manager); + s.setPath(this.path), + s.setRequestHeader(this.requestHeader), + s.setWithCredentials(this.withCredentials), + s.load( + t, + function (n) { + try { + e(r.parse(JSON.parse(n))); + } catch (e) { + i ? i(e) : console.error(e), r.manager.itemError(t); + } + }, + n, + i + ); + } + parse(t) { + const e = []; + for (let n = 0; n < t.length; n++) { + const i = nl.parse(t[n]); + e.push(i); + } + return e; + } + }), + (t.AnimationMixer = Yc), + (t.AnimationObjectGroup = qc), + (t.AnimationUtils = Vo), + (t.ArcCurve = gl), + (t.ArrayCamera = fs), + (t.ArrowHelper = class extends Ce { + constructor( + t = new Lt(0, 0, 1), + e = new Lt(0, 0, 0), + n = 1, + i = 16776960, + r = 0.2 * n, + s = 0.2 * r + ) { + super(), + (this.type = 'ArrowHelper'), + void 0 === Th && + ((Th = new En()), + Th.setAttribute('position', new mn([0, 0, 0, 0, 1, 0], 3)), + (Eh = new Da(0, 0.5, 1, 5, 1)), + Eh.translate(0, -0.5, 0)), + this.position.copy(e), + (this.line = new fa(Th, new ca({ color: i, toneMapped: !1 }))), + (this.line.matrixAutoUpdate = !1), + this.add(this.line), + (this.cone = new Wn(Eh, new en({ color: i, toneMapped: !1 }))), + (this.cone.matrixAutoUpdate = !1), + this.add(this.cone), + this.setDirection(t), + this.setLength(n, r, s); + } + setDirection(t) { + if (t.y > 0.99999) this.quaternion.set(0, 0, 0, 1); + else if (t.y < -0.99999) this.quaternion.set(1, 0, 0, 0); + else { + Sh.set(t.z, 0, -t.x).normalize(); + const e = Math.acos(t.y); + this.quaternion.setFromAxisAngle(Sh, e); + } + } + setLength(t, e = 0.2 * t, n = 0.2 * e) { + this.line.scale.set(1, Math.max(1e-4, t - e), 1), + this.line.updateMatrix(), + this.cone.scale.set(n, e, n), + (this.cone.position.y = t), + this.cone.updateMatrix(); + } + setColor(t) { + this.line.material.color.set(t), this.cone.material.color.set(t); + } + copy(t) { + return ( + super.copy(t, !1), + this.line.copy(t.line), + this.cone.copy(t.cone), + this + ); + } + }), + (t.Audio = Lc), + (t.AudioAnalyser = Ic), + (t.AudioContext = gc), + (t.AudioListener = class extends Ce { + constructor() { + super(), + (this.type = 'AudioListener'), + (this.context = gc.getContext()), + (this.gain = this.context.createGain()), + this.gain.connect(this.context.destination), + (this.filter = null), + (this.timeDelta = 0), + (this._clock = new bc()); + } + getInput() { + return this.gain; + } + removeFilter() { + return ( + null !== this.filter && + (this.gain.disconnect(this.filter), + this.filter.disconnect(this.context.destination), + this.gain.connect(this.context.destination), + (this.filter = null)), + this + ); + } + getFilter() { + return this.filter; + } + setFilter(t) { + return ( + null !== this.filter + ? (this.gain.disconnect(this.filter), + this.filter.disconnect(this.context.destination)) + : this.gain.disconnect(this.context.destination), + (this.filter = t), + this.gain.connect(this.filter), + this.filter.connect(this.context.destination), + this + ); + } + getMasterVolume() { + return this.gain.gain.value; + } + setMasterVolume(t) { + return ( + this.gain.gain.setTargetAtTime(t, this.context.currentTime, 0.01), + this + ); + } + updateMatrixWorld(t) { + super.updateMatrixWorld(t); + const e = this.context.listener, + n = this.up; + if ( + ((this.timeDelta = this._clock.getDelta()), + this.matrixWorld.decompose(Sc, Tc, Ec), + Ac.set(0, 0, -1).applyQuaternion(Tc), + e.positionX) + ) { + const t = this.context.currentTime + this.timeDelta; + e.positionX.linearRampToValueAtTime(Sc.x, t), + e.positionY.linearRampToValueAtTime(Sc.y, t), + e.positionZ.linearRampToValueAtTime(Sc.z, t), + e.forwardX.linearRampToValueAtTime(Ac.x, t), + e.forwardY.linearRampToValueAtTime(Ac.y, t), + e.forwardZ.linearRampToValueAtTime(Ac.z, t), + e.upX.linearRampToValueAtTime(n.x, t), + e.upY.linearRampToValueAtTime(n.y, t), + e.upZ.linearRampToValueAtTime(n.z, t); + } else + e.setPosition(Sc.x, Sc.y, Sc.z), + e.setOrientation(Ac.x, Ac.y, Ac.z, n.x, n.y, n.z); + } + }), + (t.AudioLoader = vc), + (t.AxesHelper = Ah), + (t.AxisHelper = function (t) { + return ( + console.warn('THREE.AxisHelper has been renamed to THREE.AxesHelper.'), + new Ah(t) + ); + }), + (t.BackSide = 1), + (t.BasicDepthPacking = 3200), + (t.BasicShadowMap = 0), + (t.BinaryTextureLoader = function (t) { + return ( + console.warn( + 'THREE.BinaryTextureLoader has been renamed to THREE.DataTextureLoader.' + ), + new dl(t) + ); + }), + (t.Bone = ta), + (t.BooleanKeyframeTrack = Zo), + (t.BoundingBoxHelper = function (t, e) { + return ( + console.warn( + 'THREE.BoundingBoxHelper has been deprecated. Creating a THREE.BoxHelper instead.' + ), + new Mh(t, e) + ); + }), + (t.Box2 = eh), + (t.Box3 = Pt), + (t.Box3Helper = class extends ya { + constructor(t, e = 16776960) { + const n = new Uint16Array([ + 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, + 7, + ]), + i = new En(); + i.setIndex(new sn(n, 1)), + i.setAttribute( + 'position', + new mn( + [ + 1, 1, 1, -1, 1, 1, -1, -1, 1, 1, -1, 1, 1, 1, -1, -1, 1, -1, -1, + -1, -1, 1, -1, -1, + ], + 3 + ) + ), + super(i, new ca({ color: e, toneMapped: !1 })), + (this.box = t), + (this.type = 'Box3Helper'), + this.geometry.computeBoundingSphere(); + } + updateMatrixWorld(t) { + const e = this.box; + e.isEmpty() || + (e.getCenter(this.position), + e.getSize(this.scale), + this.scale.multiplyScalar(0.5), + super.updateMatrixWorld(t)); + } + }), + (t.BoxBufferGeometry = qn), + (t.BoxGeometry = qn), + (t.BoxHelper = Mh), + (t.BufferAttribute = sn), + (t.BufferGeometry = En), + (t.BufferGeometryLoader = oc), + (t.ByteType = 1010), + (t.Cache = rl), + (t.Camera = Qn), + (t.CameraHelper = class extends ya { + constructor(t) { + const e = new En(), + n = new ca({ color: 16777215, vertexColors: !0, toneMapped: !1 }), + i = [], + r = [], + s = {}, + a = new tn(16755200), + o = new tn(16711680), + l = new tn(43775), + c = new tn(16777215), + h = new tn(3355443); + function u(t, e, n) { + d(t, n), d(e, n); + } + function d(t, e) { + i.push(0, 0, 0), + r.push(e.r, e.g, e.b), + void 0 === s[t] && (s[t] = []), + s[t].push(i.length / 3 - 1); + } + u('n1', 'n2', a), + u('n2', 'n4', a), + u('n4', 'n3', a), + u('n3', 'n1', a), + u('f1', 'f2', a), + u('f2', 'f4', a), + u('f4', 'f3', a), + u('f3', 'f1', a), + u('n1', 'f1', a), + u('n2', 'f2', a), + u('n3', 'f3', a), + u('n4', 'f4', a), + u('p', 'n1', o), + u('p', 'n2', o), + u('p', 'n3', o), + u('p', 'n4', o), + u('u1', 'u2', l), + u('u2', 'u3', l), + u('u3', 'u1', l), + u('c', 't', c), + u('p', 'c', h), + u('cn1', 'cn2', h), + u('cn3', 'cn4', h), + u('cf1', 'cf2', h), + u('cf3', 'cf4', h), + e.setAttribute('position', new mn(i, 3)), + e.setAttribute('color', new mn(r, 3)), + super(e, n), + (this.type = 'CameraHelper'), + (this.camera = t), + this.camera.updateProjectionMatrix && + this.camera.updateProjectionMatrix(), + (this.matrix = t.matrixWorld), + (this.matrixAutoUpdate = !1), + (this.pointMap = s), + this.update(); + } + update() { + const t = this.geometry, + e = this.pointMap; + _h.projectionMatrixInverse.copy(this.camera.projectionMatrixInverse), + wh('c', e, t, _h, 0, 0, -1), + wh('t', e, t, _h, 0, 0, 1), + wh('n1', e, t, _h, -1, -1, -1), + wh('n2', e, t, _h, 1, -1, -1), + wh('n3', e, t, _h, -1, 1, -1), + wh('n4', e, t, _h, 1, 1, -1), + wh('f1', e, t, _h, -1, -1, 1), + wh('f2', e, t, _h, 1, -1, 1), + wh('f3', e, t, _h, -1, 1, 1), + wh('f4', e, t, _h, 1, 1, 1), + wh('u1', e, t, _h, 0.7, 1.1, -1), + wh('u2', e, t, _h, -0.7, 1.1, -1), + wh('u3', e, t, _h, 0, 2, -1), + wh('cf1', e, t, _h, -1, 0, 1), + wh('cf2', e, t, _h, 1, 0, 1), + wh('cf3', e, t, _h, 0, -1, 1), + wh('cf4', e, t, _h, 0, 1, 1), + wh('cn1', e, t, _h, -1, 0, -1), + wh('cn2', e, t, _h, 1, 0, -1), + wh('cn3', e, t, _h, 0, -1, -1), + wh('cn4', e, t, _h, 0, 1, -1), + (t.getAttribute('position').needsUpdate = !0); + } + dispose() { + this.geometry.dispose(), this.material.dispose(); + } + }), + (t.CanvasRenderer = function () { + console.error('THREE.CanvasRenderer has been removed'); + }), + (t.CanvasTexture = Ra), + (t.CatmullRomCurve3 = bl), + (t.CineonToneMapping = 3), + (t.CircleBufferGeometry = Pa), + (t.CircleGeometry = Pa), + (t.ClampToEdgeWrapping = u), + (t.Clock = bc), + (t.Color = tn), + (t.ColorKeyframeTrack = Jo), + (t.CompressedTexture = La), + (t.CompressedTextureLoader = class extends ol { + constructor(t) { + super(t); + } + load(t, e, n, i) { + const r = this, + s = [], + a = new La(), + o = new cl(this.manager); + o.setPath(this.path), + o.setResponseType('arraybuffer'), + o.setRequestHeader(this.requestHeader), + o.setWithCredentials(r.withCredentials); + let l = 0; + function c(c) { + o.load( + t[c], + function (t) { + const n = r.parse(t, !0); + (s[c] = { + width: n.width, + height: n.height, + format: n.format, + mipmaps: n.mipmaps, + }), + (l += 1), + 6 === l && + (1 === n.mipmapCount && (a.minFilter = g), + (a.image = s), + (a.format = n.format), + (a.needsUpdate = !0), + e && e(a)); + }, + n, + i + ); + } + if (Array.isArray(t)) for (let e = 0, n = t.length; e < n; ++e) c(e); + else + o.load( + t, + function (t) { + const n = r.parse(t, !0); + if (n.isCubemap) { + const t = n.mipmaps.length / n.mipmapCount; + for (let e = 0; e < t; e++) { + s[e] = { mipmaps: [] }; + for (let t = 0; t < n.mipmapCount; t++) + s[e].mipmaps.push(n.mipmaps[e * n.mipmapCount + t]), + (s[e].format = n.format), + (s[e].width = n.width), + (s[e].height = n.height); + } + a.image = s; + } else + (a.image.width = n.width), + (a.image.height = n.height), + (a.mipmaps = n.mipmaps); + 1 === n.mipmapCount && (a.minFilter = g), + (a.format = n.format), + (a.needsUpdate = !0), + e && e(a); + }, + n, + i + ); + return a; + } + }), + (t.ConeBufferGeometry = Ia), + (t.ConeGeometry = Ia), + (t.CubeCamera = ti), + (t.CubeReflectionMapping = r), + (t.CubeRefractionMapping = s), + (t.CubeTexture = ei), + (t.CubeTextureLoader = ul), + (t.CubeUVReflectionMapping = l), + (t.CubeUVRefractionMapping = c), + (t.CubicBezierCurve = El), + (t.CubicBezierCurve3 = Al), + (t.CubicInterpolant = jo), + (t.CullFaceBack = 1), + (t.CullFaceFront = 2), + (t.CullFaceFrontBack = 3), + (t.CullFaceNone = 0), + (t.Curve = ml), + (t.CurvePath = Nl), + (t.CustomBlending = 5), + (t.CustomToneMapping = 5), + (t.CylinderBufferGeometry = Da), + (t.CylinderGeometry = Da), + (t.Cylindrical = class { + constructor(t = 1, e = 0, n = 0) { + return (this.radius = t), (this.theta = e), (this.y = n), this; + } + set(t, e, n) { + return (this.radius = t), (this.theta = e), (this.y = n), this; + } + copy(t) { + return ( + (this.radius = t.radius), (this.theta = t.theta), (this.y = t.y), this + ); + } + setFromVector3(t) { + return this.setFromCartesianCoords(t.x, t.y, t.z); + } + setFromCartesianCoords(t, e, n) { + return ( + (this.radius = Math.sqrt(t * t + n * n)), + (this.theta = Math.atan2(t, n)), + (this.y = e), + this + ); + } + clone() { + return new this.constructor().copy(this); + } + }), + (t.DataTexture = ii), + (t.DataTexture2DArray = Ai), + (t.DataTexture3D = Li), + (t.DataTextureLoader = dl), + (t.DataUtils = class { + static toHalfFloat(t) { + Lh[0] = t; + const e = Rh[0]; + let n = (e >> 16) & 32768, + i = (e >> 12) & 2047; + const r = (e >> 23) & 255; + return r < 103 + ? n + : r > 142 + ? ((n |= 31744), (n |= (255 == r ? 0 : 1) && 8388607 & e), n) + : r < 113 + ? ((i |= 2048), + (n |= (i >> (114 - r)) + ((i >> (113 - r)) & 1)), + n) + : ((n |= ((r - 112) << 10) | (i >> 1)), (n += 1 & i), n); + } + }), + (t.DecrementStencilOp = 7683), + (t.DecrementWrapStencilOp = 34056), + (t.DefaultLoadingManager = al), + (t.DepthFormat = A), + (t.DepthStencilFormat = L), + (t.DepthTexture = Ca), + (t.DirectionalLight = Kl), + (t.DirectionalLightHelper = class extends Ce { + constructor(t, e, n) { + super(), + (this.light = t), + this.light.updateMatrixWorld(), + (this.matrix = t.matrixWorld), + (this.matrixAutoUpdate = !1), + (this.color = n), + void 0 === e && (e = 1); + let i = new En(); + i.setAttribute( + 'position', + new mn([-e, e, 0, e, e, 0, e, -e, 0, -e, -e, 0, -e, e, 0], 3) + ); + const r = new ca({ fog: !1, toneMapped: !1 }); + (this.lightPlane = new fa(i, r)), + this.add(this.lightPlane), + (i = new En()), + i.setAttribute('position', new mn([0, 0, 0, 0, 0, 1], 3)), + (this.targetLine = new fa(i, r)), + this.add(this.targetLine), + this.update(); + } + dispose() { + this.lightPlane.geometry.dispose(), + this.lightPlane.material.dispose(), + this.targetLine.geometry.dispose(), + this.targetLine.material.dispose(); + } + update() { + gh.setFromMatrixPosition(this.light.matrixWorld), + vh.setFromMatrixPosition(this.light.target.matrixWorld), + yh.subVectors(vh, gh), + this.lightPlane.lookAt(vh), + void 0 !== this.color + ? (this.lightPlane.material.color.set(this.color), + this.targetLine.material.color.set(this.color)) + : (this.lightPlane.material.color.copy(this.light.color), + this.targetLine.material.color.copy(this.light.color)), + this.targetLine.lookAt(vh), + (this.targetLine.scale.z = yh.length()); + } + }), + (t.DiscreteInterpolant = Xo), + (t.DodecahedronBufferGeometry = Ba), + (t.DodecahedronGeometry = Ba), + (t.DoubleSide = 2), + (t.DstAlphaFactor = 206), + (t.DstColorFactor = 208), + (t.DynamicBufferAttribute = function (t, e) { + return ( + console.warn( + 'THREE.DynamicBufferAttribute has been removed. Use new THREE.BufferAttribute().setUsage( THREE.DynamicDrawUsage ) instead.' + ), + new sn(t, e).setUsage(nt) + ); + }), + (t.DynamicCopyUsage = 35050), + (t.DynamicDrawUsage = nt), + (t.DynamicReadUsage = 35049), + (t.EdgesGeometry = Ga), + (t.EdgesHelper = function (t, e) { + return ( + console.warn( + 'THREE.EdgesHelper has been removed. Use THREE.EdgesGeometry instead.' + ), + new ya( + new Ga(t.geometry), + new ca({ color: void 0 !== e ? e : 16777215 }) + ) + ); + }), + (t.EllipseCurve = fl), + (t.EqualDepth = 4), + (t.EqualStencilFunc = 514), + (t.EquirectangularReflectionMapping = a), + (t.EquirectangularRefractionMapping = o), + (t.Euler = fe), + (t.EventDispatcher = rt), + (t.ExtrudeBufferGeometry = go), + (t.ExtrudeGeometry = go), + (t.FaceColors = 1), + (t.FileLoader = cl), + (t.FlatShading = 1), + (t.Float16BufferAttribute = pn), + (t.Float32Attribute = function (t, e) { + return ( + console.warn( + 'THREE.Float32Attribute has been removed. Use new THREE.Float32BufferAttribute() instead.' + ), + new mn(t, e) + ); + }), + (t.Float32BufferAttribute = mn), + (t.Float64Attribute = function (t, e) { + return ( + console.warn( + 'THREE.Float64Attribute has been removed. Use new THREE.Float64BufferAttribute() instead.' + ), + new fn(t, e) + ); + }), + (t.Float64BufferAttribute = fn), + (t.FloatType = b), + (t.Fog = Ss), + (t.FogExp2 = Ms), + (t.Font = pc), + (t.FontLoader = class extends ol { + constructor(t) { + super(t); + } + load(t, e, n, i) { + const r = this, + s = new cl(this.manager); + s.setPath(this.path), + s.setRequestHeader(this.requestHeader), + s.setWithCredentials(r.withCredentials), + s.load( + t, + function (t) { + let n; + try { + n = JSON.parse(t); + } catch (e) { + console.warn( + 'THREE.FontLoader: typeface.js support is being deprecated. Use typeface.json instead.' + ), + (n = JSON.parse(t.substring(65, t.length - 2))); + } + const i = r.parse(n); + e && e(i); + }, + n, + i + ); + } + parse(t) { + return new pc(t); + } + }), + (t.FrontSide = 0), + (t.Frustum = ai), + (t.GLBufferAttribute = Qc), + (t.GLSL1 = '100'), + (t.GLSL3 = it), + (t.GammaEncoding = Z), + (t.GreaterDepth = 6), + (t.GreaterEqualDepth = 5), + (t.GreaterEqualStencilFunc = 518), + (t.GreaterStencilFunc = 516), + (t.GridHelper = fh), + (t.Group = gs), + (t.HalfFloatType = M), + (t.HemisphereLight = Ol), + (t.HemisphereLightHelper = class extends Ce { + constructor(t, e, n) { + super(), + (this.light = t), + this.light.updateMatrixWorld(), + (this.matrix = t.matrixWorld), + (this.matrixAutoUpdate = !1), + (this.color = n); + const i = new _o(e); + i.rotateY(0.5 * Math.PI), + (this.material = new en({ wireframe: !0, fog: !1, toneMapped: !1 })), + void 0 === this.color && (this.material.vertexColors = !0); + const r = i.getAttribute('position'), + s = new Float32Array(3 * r.count); + i.setAttribute('color', new sn(s, 3)), + this.add(new Wn(i, this.material)), + this.update(); + } + dispose() { + this.children[0].geometry.dispose(), + this.children[0].material.dispose(); + } + update() { + const t = this.children[0]; + if (void 0 !== this.color) this.material.color.set(this.color); + else { + const e = t.geometry.getAttribute('color'); + ph.copy(this.light.color), mh.copy(this.light.groundColor); + for (let t = 0, n = e.count; t < n; t++) { + const i = t < n / 2 ? ph : mh; + e.setXYZ(t, i.r, i.g, i.b); + } + e.needsUpdate = !0; + } + t.lookAt(dh.setFromMatrixPosition(this.light.matrixWorld).negate()); + } + }), + (t.HemisphereLightProbe = yc), + (t.IcosahedronBufferGeometry = yo), + (t.IcosahedronGeometry = yo), + (t.ImageBitmapLoader = uc), + (t.ImageLoader = hl), + (t.ImageUtils = _t), + (t.ImmediateRenderObject = sh), + (t.IncrementStencilOp = 7682), + (t.IncrementWrapStencilOp = 34055), + (t.InstancedBufferAttribute = ac), + (t.InstancedBufferGeometry = sc), + (t.InstancedInterleavedBuffer = Jc), + (t.InstancedMesh = la), + (t.Int16Attribute = function (t, e) { + return ( + console.warn( + 'THREE.Int16Attribute has been removed. Use new THREE.Int16BufferAttribute() instead.' + ), + new cn(t, e) + ); + }), + (t.Int16BufferAttribute = cn), + (t.Int32Attribute = function (t, e) { + return ( + console.warn( + 'THREE.Int32Attribute has been removed. Use new THREE.Int32BufferAttribute() instead.' + ), + new un(t, e) + ); + }), + (t.Int32BufferAttribute = un), + (t.Int8Attribute = function (t, e) { + return ( + console.warn( + 'THREE.Int8Attribute has been removed. Use new THREE.Int8BufferAttribute() instead.' + ), + new an(t, e) + ); + }), + (t.Int8BufferAttribute = an), + (t.IntType = 1013), + (t.InterleavedBuffer = Es), + (t.InterleavedBufferAttribute = Ls), + (t.Interpolant = Wo), + (t.InterpolateDiscrete = H), + (t.InterpolateLinear = G), + (t.InterpolateSmooth = U), + (t.InvertStencilOp = 5386), + (t.JSONLoader = function () { + console.error('THREE.JSONLoader has been removed.'); + }), + (t.KeepStencilOp = tt), + (t.KeyframeTrack = Yo), + (t.LOD = Xs), + (t.LatheBufferGeometry = xo), + (t.LatheGeometry = xo), + (t.Layers = ge), + (t.LensFlare = function () { + console.error( + 'THREE.LensFlare has been moved to /examples/jsm/objects/Lensflare.js' + ); + }), + (t.LessDepth = 2), + (t.LessEqualDepth = 3), + (t.LessEqualStencilFunc = 515), + (t.LessStencilFunc = 513), + (t.Light = Fl), + (t.LightProbe = nc), + (t.Line = fa), + (t.Line3 = rh), + (t.LineBasicMaterial = ca), + (t.LineCurve = Ll), + (t.LineCurve3 = Rl), + (t.LineDashedMaterial = Uo), + (t.LineLoop = xa), + (t.LinePieces = 1), + (t.LineSegments = ya), + (t.LineStrip = 0), + (t.LinearEncoding = X), + (t.LinearFilter = g), + (t.LinearInterpolant = qo), + (t.LinearMipMapLinearFilter = 1008), + (t.LinearMipMapNearestFilter = 1007), + (t.LinearMipmapLinearFilter = y), + (t.LinearMipmapNearestFilter = v), + (t.LinearToneMapping = 1), + (t.Loader = ol), + (t.LoaderUtils = rc), + (t.LoadingManager = sl), + (t.LogLuvEncoding = 3003), + (t.LoopOnce = 2200), + (t.LoopPingPong = 2202), + (t.LoopRepeat = 2201), + (t.LuminanceAlphaFormat = 1025), + (t.LuminanceFormat = 1024), + (t.MOUSE = { LEFT: 0, MIDDLE: 1, RIGHT: 2, ROTATE: 0, DOLLY: 1, PAN: 2 }), + (t.Material = Xe), + (t.MaterialLoader = ic), + (t.Math = gt), + (t.MathUtils = gt), + (t.Matrix3 = yt), + (t.Matrix4 = se), + (t.MaxEquation = 104), + (t.Mesh = Wn), + (t.MeshBasicMaterial = en), + (t.MeshDepthMaterial = cs), + (t.MeshDistanceMaterial = hs), + (t.MeshFaceMaterial = function (t) { + return ( + console.warn( + 'THREE.MeshFaceMaterial has been removed. Use an Array instead.' + ), + t + ); + }), + (t.MeshLambertMaterial = Ho), + (t.MeshMatcapMaterial = Go), + (t.MeshNormalMaterial = Oo), + (t.MeshPhongMaterial = zo), + (t.MeshPhysicalMaterial = Bo), + (t.MeshStandardMaterial = No), + (t.MeshToonMaterial = Fo), + (t.MinEquation = 103), + (t.MirroredRepeatWrapping = d), + (t.MixOperation = 1), + (t.MultiMaterial = function (t = []) { + return ( + console.warn( + 'THREE.MultiMaterial has been removed. Use an Array instead.' + ), + (t.isMultiMaterial = !0), + (t.materials = t), + (t.clone = function () { + return t.slice(); + }), + t + ); + }), + (t.MultiplyBlending = 4), + (t.MultiplyOperation = 0), + (t.NearestFilter = p), + (t.NearestMipMapLinearFilter = 1005), + (t.NearestMipMapNearestFilter = 1004), + (t.NearestMipmapLinearFilter = f), + (t.NearestMipmapNearestFilter = m), + (t.NeverDepth = 0), + (t.NeverStencilFunc = 512), + (t.NoBlending = 0), + (t.NoColors = 0), + (t.NoToneMapping = 0), + (t.NormalAnimationBlendMode = j), + (t.NormalBlending = 1), + (t.NotEqualDepth = 7), + (t.NotEqualStencilFunc = 517), + (t.NumberKeyframeTrack = Qo), + (t.Object3D = Ce), + (t.ObjectLoader = class extends ol { + constructor(t) { + super(t); + } + load(t, e, n, i) { + const r = this, + s = '' === this.path ? rc.extractUrlBase(t) : this.path; + this.resourcePath = this.resourcePath || s; + const a = new cl(this.manager); + a.setPath(this.path), + a.setRequestHeader(this.requestHeader), + a.setWithCredentials(this.withCredentials), + a.load( + t, + function (n) { + let s = null; + try { + s = JSON.parse(n); + } catch (e) { + return ( + void 0 !== i && i(e), + void console.error( + "THREE:ObjectLoader: Can't parse " + t + '.', + e.message + ) + ); + } + const a = s.metadata; + void 0 !== a && + void 0 !== a.type && + 'geometry' !== a.type.toLowerCase() + ? r.parse(s, e) + : console.error("THREE.ObjectLoader: Can't load " + t); + }, + n, + i + ); + } + parse(t, e) { + const n = this.parseAnimations(t.animations), + i = this.parseShapes(t.shapes), + r = this.parseGeometries(t.geometries, i), + s = this.parseImages(t.images, function () { + void 0 !== e && e(l); + }), + a = this.parseTextures(t.textures, s), + o = this.parseMaterials(t.materials, a), + l = this.parseObject(t.object, r, o, n), + c = this.parseSkeletons(t.skeletons, l); + if ((this.bindSkeletons(l, c), void 0 !== e)) { + let t = !1; + for (const e in s) + if (s[e] instanceof HTMLImageElement) { + t = !0; + break; + } + !1 === t && e(l); + } + return l; + } + parseShapes(t) { + const e = {}; + if (void 0 !== t) + for (let n = 0, i = t.length; n < i; n++) { + const i = new zl().fromJSON(t[n]); + e[i.uuid] = i; + } + return e; + } + parseSkeletons(t, e) { + const n = {}, + i = {}; + if ( + (e.traverse(function (t) { + t.isBone && (i[t.uuid] = t); + }), + void 0 !== t) + ) + for (let e = 0, r = t.length; e < r; e++) { + const r = new ia().fromJSON(t[e], i); + n[r.uuid] = r; + } + return n; + } + parseGeometries(t, e) { + const n = {}; + let i; + if (void 0 !== t) { + const r = new oc(); + for (let s = 0, a = t.length; s < a; s++) { + let a; + const o = t[s]; + switch (o.type) { + case 'PlaneGeometry': + case 'PlaneBufferGeometry': + a = new Po[o.type]( + o.width, + o.height, + o.widthSegments, + o.heightSegments + ); + break; + case 'BoxGeometry': + case 'BoxBufferGeometry': + a = new Po[o.type]( + o.width, + o.height, + o.depth, + o.widthSegments, + o.heightSegments, + o.depthSegments + ); + break; + case 'CircleGeometry': + case 'CircleBufferGeometry': + a = new Po[o.type]( + o.radius, + o.segments, + o.thetaStart, + o.thetaLength + ); + break; + case 'CylinderGeometry': + case 'CylinderBufferGeometry': + a = new Po[o.type]( + o.radiusTop, + o.radiusBottom, + o.height, + o.radialSegments, + o.heightSegments, + o.openEnded, + o.thetaStart, + o.thetaLength + ); + break; + case 'ConeGeometry': + case 'ConeBufferGeometry': + a = new Po[o.type]( + o.radius, + o.height, + o.radialSegments, + o.heightSegments, + o.openEnded, + o.thetaStart, + o.thetaLength + ); + break; + case 'SphereGeometry': + case 'SphereBufferGeometry': + a = new Po[o.type]( + o.radius, + o.widthSegments, + o.heightSegments, + o.phiStart, + o.phiLength, + o.thetaStart, + o.thetaLength + ); + break; + case 'DodecahedronGeometry': + case 'DodecahedronBufferGeometry': + case 'IcosahedronGeometry': + case 'IcosahedronBufferGeometry': + case 'OctahedronGeometry': + case 'OctahedronBufferGeometry': + case 'TetrahedronGeometry': + case 'TetrahedronBufferGeometry': + a = new Po[o.type](o.radius, o.detail); + break; + case 'RingGeometry': + case 'RingBufferGeometry': + a = new Po[o.type]( + o.innerRadius, + o.outerRadius, + o.thetaSegments, + o.phiSegments, + o.thetaStart, + o.thetaLength + ); + break; + case 'TorusGeometry': + case 'TorusBufferGeometry': + a = new Po[o.type]( + o.radius, + o.tube, + o.radialSegments, + o.tubularSegments, + o.arc + ); + break; + case 'TorusKnotGeometry': + case 'TorusKnotBufferGeometry': + a = new Po[o.type]( + o.radius, + o.tube, + o.tubularSegments, + o.radialSegments, + o.p, + o.q + ); + break; + case 'TubeGeometry': + case 'TubeBufferGeometry': + a = new Po[o.type]( + new Il[o.path.type]().fromJSON(o.path), + o.tubularSegments, + o.radius, + o.radialSegments, + o.closed + ); + break; + case 'LatheGeometry': + case 'LatheBufferGeometry': + a = new Po[o.type]( + o.points, + o.segments, + o.phiStart, + o.phiLength + ); + break; + case 'PolyhedronGeometry': + case 'PolyhedronBufferGeometry': + a = new Po[o.type](o.vertices, o.indices, o.radius, o.details); + break; + case 'ShapeGeometry': + case 'ShapeBufferGeometry': + i = []; + for (let t = 0, n = o.shapes.length; t < n; t++) { + const n = e[o.shapes[t]]; + i.push(n); + } + a = new Po[o.type](i, o.curveSegments); + break; + case 'ExtrudeGeometry': + case 'ExtrudeBufferGeometry': + i = []; + for (let t = 0, n = o.shapes.length; t < n; t++) { + const n = e[o.shapes[t]]; + i.push(n); + } + const t = o.options.extrudePath; + void 0 !== t && + (o.options.extrudePath = new Il[t.type]().fromJSON(t)), + (a = new Po[o.type](i, o.options)); + break; + case 'BufferGeometry': + case 'InstancedBufferGeometry': + a = r.parse(o); + break; + case 'Geometry': + console.error( + 'THREE.ObjectLoader: Loading "Geometry" is not supported anymore.' + ); + break; + default: + console.warn( + 'THREE.ObjectLoader: Unsupported geometry type "' + + o.type + + '"' + ); + continue; + } + (a.uuid = o.uuid), + void 0 !== o.name && (a.name = o.name), + !0 === a.isBufferGeometry && + void 0 !== o.userData && + (a.userData = o.userData), + (n[o.uuid] = a); + } + } + return n; + } + parseMaterials(t, e) { + const n = {}, + i = {}; + if (void 0 !== t) { + const r = new ic(); + r.setTextures(e); + for (let e = 0, s = t.length; e < s; e++) { + const s = t[e]; + if ('MultiMaterial' === s.type) { + const t = []; + for (let e = 0; e < s.materials.length; e++) { + const i = s.materials[e]; + void 0 === n[i.uuid] && (n[i.uuid] = r.parse(i)), + t.push(n[i.uuid]); + } + i[s.uuid] = t; + } else + void 0 === n[s.uuid] && (n[s.uuid] = r.parse(s)), + (i[s.uuid] = n[s.uuid]); + } + } + return i; + } + parseAnimations(t) { + const e = {}; + if (void 0 !== t) + for (let n = 0; n < t.length; n++) { + const i = t[n], + r = nl.parse(i); + e[r.uuid] = r; + } + return e; + } + parseImages(t, e) { + const n = this, + i = {}; + let r; + function s(t) { + if ('string' == typeof t) { + const e = t; + return (function (t) { + return ( + n.manager.itemStart(t), + r.load( + t, + function () { + n.manager.itemEnd(t); + }, + void 0, + function () { + n.manager.itemError(t), n.manager.itemEnd(t); + } + ) + ); + })(/^(\/\/)|([a-z]+:(\/\/)?)/i.test(e) ? e : n.resourcePath + e); + } + return t.data + ? { data: yn(t.type, t.data), width: t.width, height: t.height } + : null; + } + if (void 0 !== t && t.length > 0) { + const n = new sl(e); + (r = new hl(n)), r.setCrossOrigin(this.crossOrigin); + for (let e = 0, n = t.length; e < n; e++) { + const n = t[e], + r = n.url; + if (Array.isArray(r)) { + i[n.uuid] = []; + for (let t = 0, e = r.length; t < e; t++) { + const e = s(r[t]); + null !== e && + (e instanceof HTMLImageElement + ? i[n.uuid].push(e) + : i[n.uuid].push(new ii(e.data, e.width, e.height))); + } + } else { + const t = s(n.url); + null !== t && (i[n.uuid] = t); + } + } + } + return i; + } + parseTextures(t, e) { + function n(t, e) { + return 'number' == typeof t + ? t + : (console.warn( + 'THREE.ObjectLoader.parseTexture: Constant should be in numeric form.', + t + ), + e[t]); + } + const i = {}; + if (void 0 !== t) + for (let r = 0, s = t.length; r < s; r++) { + const s = t[r]; + let a; + void 0 === s.image && + console.warn( + 'THREE.ObjectLoader: No "image" specified for', + s.uuid + ), + void 0 === e[s.image] && + console.warn('THREE.ObjectLoader: Undefined image', s.image); + const o = e[s.image]; + Array.isArray(o) + ? ((a = new ei(o)), 6 === o.length && (a.needsUpdate = !0)) + : ((a = + o && o.data ? new ii(o.data, o.width, o.height) : new bt(o)), + o && (a.needsUpdate = !0)), + (a.uuid = s.uuid), + void 0 !== s.name && (a.name = s.name), + void 0 !== s.mapping && (a.mapping = n(s.mapping, lc)), + void 0 !== s.offset && a.offset.fromArray(s.offset), + void 0 !== s.repeat && a.repeat.fromArray(s.repeat), + void 0 !== s.center && a.center.fromArray(s.center), + void 0 !== s.rotation && (a.rotation = s.rotation), + void 0 !== s.wrap && + ((a.wrapS = n(s.wrap[0], cc)), (a.wrapT = n(s.wrap[1], cc))), + void 0 !== s.format && (a.format = s.format), + void 0 !== s.type && (a.type = s.type), + void 0 !== s.encoding && (a.encoding = s.encoding), + void 0 !== s.minFilter && (a.minFilter = n(s.minFilter, hc)), + void 0 !== s.magFilter && (a.magFilter = n(s.magFilter, hc)), + void 0 !== s.anisotropy && (a.anisotropy = s.anisotropy), + void 0 !== s.flipY && (a.flipY = s.flipY), + void 0 !== s.premultiplyAlpha && + (a.premultiplyAlpha = s.premultiplyAlpha), + void 0 !== s.unpackAlignment && + (a.unpackAlignment = s.unpackAlignment), + (i[s.uuid] = a); + } + return i; + } + parseObject(t, e, n, i) { + let r, s, a; + function o(t) { + return ( + void 0 === e[t] && + console.warn('THREE.ObjectLoader: Undefined geometry', t), + e[t] + ); + } + function l(t) { + if (void 0 !== t) { + if (Array.isArray(t)) { + const e = []; + for (let i = 0, r = t.length; i < r; i++) { + const r = t[i]; + void 0 === n[r] && + console.warn('THREE.ObjectLoader: Undefined material', r), + e.push(n[r]); + } + return e; + } + return ( + void 0 === n[t] && + console.warn('THREE.ObjectLoader: Undefined material', t), + n[t] + ); + } + } + switch (t.type) { + case 'Scene': + (r = new Ts()), + void 0 !== t.background && + Number.isInteger(t.background) && + (r.background = new tn(t.background)), + void 0 !== t.fog && + ('Fog' === t.fog.type + ? (r.fog = new Ss(t.fog.color, t.fog.near, t.fog.far)) + : 'FogExp2' === t.fog.type && + (r.fog = new Ms(t.fog.color, t.fog.density))); + break; + case 'PerspectiveCamera': + (r = new Kn(t.fov, t.aspect, t.near, t.far)), + void 0 !== t.focus && (r.focus = t.focus), + void 0 !== t.zoom && (r.zoom = t.zoom), + void 0 !== t.filmGauge && (r.filmGauge = t.filmGauge), + void 0 !== t.filmOffset && (r.filmOffset = t.filmOffset), + void 0 !== t.view && (r.view = Object.assign({}, t.view)); + break; + case 'OrthographicCamera': + (r = new Jl(t.left, t.right, t.top, t.bottom, t.near, t.far)), + void 0 !== t.zoom && (r.zoom = t.zoom), + void 0 !== t.view && (r.view = Object.assign({}, t.view)); + break; + case 'AmbientLight': + r = new $l(t.color, t.intensity); + break; + case 'DirectionalLight': + r = new Kl(t.color, t.intensity); + break; + case 'PointLight': + r = new Zl(t.color, t.intensity, t.distance, t.decay); + break; + case 'RectAreaLight': + r = new tc(t.color, t.intensity, t.width, t.height); + break; + case 'SpotLight': + r = new Wl( + t.color, + t.intensity, + t.distance, + t.angle, + t.penumbra, + t.decay + ); + break; + case 'HemisphereLight': + r = new Ol(t.color, t.groundColor, t.intensity); + break; + case 'LightProbe': + r = new nc().fromJSON(t); + break; + case 'SkinnedMesh': + (s = o(t.geometry)), + (a = l(t.material)), + (r = new $s(s, a)), + void 0 !== t.bindMode && (r.bindMode = t.bindMode), + void 0 !== t.bindMatrix && r.bindMatrix.fromArray(t.bindMatrix), + void 0 !== t.skeleton && (r.skeleton = t.skeleton); + break; + case 'Mesh': + (s = o(t.geometry)), (a = l(t.material)), (r = new Wn(s, a)); + break; + case 'InstancedMesh': + (s = o(t.geometry)), (a = l(t.material)); + const e = t.count, + n = t.instanceMatrix, + i = t.instanceColor; + (r = new la(s, a, e)), + (r.instanceMatrix = new sn(new Float32Array(n.array), 16)), + void 0 !== i && + (r.instanceColor = new sn( + new Float32Array(i.array), + i.itemSize + )); + break; + case 'LOD': + r = new Xs(); + break; + case 'Line': + r = new fa(o(t.geometry), l(t.material)); + break; + case 'LineLoop': + r = new xa(o(t.geometry), l(t.material)); + break; + case 'LineSegments': + r = new ya(o(t.geometry), l(t.material)); + break; + case 'PointCloud': + case 'Points': + r = new Ta(o(t.geometry), l(t.material)); + break; + case 'Sprite': + r = new Vs(l(t.material)); + break; + case 'Group': + r = new gs(); + break; + case 'Bone': + r = new ta(); + break; + default: + r = new Ce(); + } + if ( + ((r.uuid = t.uuid), + void 0 !== t.name && (r.name = t.name), + void 0 !== t.matrix + ? (r.matrix.fromArray(t.matrix), + void 0 !== t.matrixAutoUpdate && + (r.matrixAutoUpdate = t.matrixAutoUpdate), + r.matrixAutoUpdate && + r.matrix.decompose(r.position, r.quaternion, r.scale)) + : (void 0 !== t.position && r.position.fromArray(t.position), + void 0 !== t.rotation && r.rotation.fromArray(t.rotation), + void 0 !== t.quaternion && r.quaternion.fromArray(t.quaternion), + void 0 !== t.scale && r.scale.fromArray(t.scale)), + void 0 !== t.castShadow && (r.castShadow = t.castShadow), + void 0 !== t.receiveShadow && (r.receiveShadow = t.receiveShadow), + t.shadow && + (void 0 !== t.shadow.bias && (r.shadow.bias = t.shadow.bias), + void 0 !== t.shadow.normalBias && + (r.shadow.normalBias = t.shadow.normalBias), + void 0 !== t.shadow.radius && (r.shadow.radius = t.shadow.radius), + void 0 !== t.shadow.mapSize && + r.shadow.mapSize.fromArray(t.shadow.mapSize), + void 0 !== t.shadow.camera && + (r.shadow.camera = this.parseObject(t.shadow.camera))), + void 0 !== t.visible && (r.visible = t.visible), + void 0 !== t.frustumCulled && (r.frustumCulled = t.frustumCulled), + void 0 !== t.renderOrder && (r.renderOrder = t.renderOrder), + void 0 !== t.userData && (r.userData = t.userData), + void 0 !== t.layers && (r.layers.mask = t.layers), + void 0 !== t.children) + ) { + const s = t.children; + for (let t = 0; t < s.length; t++) + r.add(this.parseObject(s[t], e, n, i)); + } + if (void 0 !== t.animations) { + const e = t.animations; + for (let t = 0; t < e.length; t++) { + const n = e[t]; + r.animations.push(i[n]); + } + } + if ('LOD' === t.type) { + void 0 !== t.autoUpdate && (r.autoUpdate = t.autoUpdate); + const e = t.levels; + for (let t = 0; t < e.length; t++) { + const n = e[t], + i = r.getObjectByProperty('uuid', n.object); + void 0 !== i && r.addLevel(i, n.distance); + } + } + return r; + } + bindSkeletons(t, e) { + 0 !== Object.keys(e).length && + t.traverse(function (t) { + if (!0 === t.isSkinnedMesh && void 0 !== t.skeleton) { + const n = e[t.skeleton]; + void 0 === n + ? console.warn( + 'THREE.ObjectLoader: No skeleton found with UUID:', + t.skeleton + ) + : t.bind(n, t.bindMatrix); + } + }); + } + setTexturePath(t) { + return ( + console.warn( + 'THREE.ObjectLoader: .setTexturePath() has been renamed to .setResourcePath().' + ), + this.setResourcePath(t) + ); + } + }), + (t.ObjectSpaceNormalMap = 1), + (t.OctahedronBufferGeometry = _o), + (t.OctahedronGeometry = _o), + (t.OneFactor = 201), + (t.OneMinusDstAlphaFactor = 207), + (t.OneMinusDstColorFactor = 209), + (t.OneMinusSrcAlphaFactor = 205), + (t.OneMinusSrcColorFactor = 203), + (t.OrthographicCamera = Jl), + (t.PCFShadowMap = 1), + (t.PCFSoftShadowMap = 2), + (t.PMREMGenerator = class { + constructor(t) { + (this._renderer = t), + (this._pingPongRenderTarget = null), + (this._blurMaterial = (function (t) { + const e = new Float32Array(t), + n = new Lt(0, 1, 0); + return new Io({ + name: 'SphericalGaussianBlur', + defines: { n: t }, + uniforms: { + envMap: { value: null }, + samples: { value: 1 }, + weights: { value: e }, + latitudinal: { value: !1 }, + dTheta: { value: 0 }, + mipInt: { value: 0 }, + poleAxis: { value: n }, + inputEncoding: { value: Nh[3e3] }, + outputEncoding: { value: Nh[3e3] }, + }, + vertexShader: $h(), + fragmentShader: `\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform int samples;\n\t\t\tuniform float weights[ n ];\n\t\t\tuniform bool latitudinal;\n\t\t\tuniform float dTheta;\n\t\t\tuniform float mipInt;\n\t\t\tuniform vec3 poleAxis;\n\n\t\t\t${tu()}\n\n\t\t\t#define ENVMAP_TYPE_CUBE_UV\n\t\t\t#include \n\n\t\t\tvec3 getSample( float theta, vec3 axis ) {\n\n\t\t\t\tfloat cosTheta = cos( theta );\n\t\t\t\t// Rodrigues' axis-angle rotation\n\t\t\t\tvec3 sampleDirection = vOutputDirection * cosTheta\n\t\t\t\t\t+ cross( axis, vOutputDirection ) * sin( theta )\n\t\t\t\t\t+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );\n\n\t\t\t\treturn bilinearCubeUV( envMap, sampleDirection, mipInt );\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );\n\n\t\t\t\tif ( all( equal( axis, vec3( 0.0 ) ) ) ) {\n\n\t\t\t\t\taxis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );\n\n\t\t\t\t}\n\n\t\t\t\taxis = normalize( axis );\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );\n\n\t\t\t\tfor ( int i = 1; i < n; i++ ) {\n\n\t\t\t\t\tif ( i >= samples ) {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfloat theta = dTheta * float( i );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( theta, axis );\n\n\t\t\t\t}\n\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t`, + blending: 0, + depthTest: !1, + depthWrite: !1, + }); + })(Ih)), + (this._equirectShader = null), + (this._cubemapShader = null), + this._compileMaterial(this._blurMaterial); + } + fromScene(t, e = 0, n = 0.1, i = 100) { + kh = this._renderer.getRenderTarget(); + const r = this._allocateTargets(); + return ( + this._sceneToCubeUV(t, n, i, r), + e > 0 && this._blur(r, 0, 0, e), + this._applyPMREM(r), + this._cleanup(r), + r + ); + } + fromEquirectangular(t) { + return this._fromTexture(t); + } + fromCubemap(t) { + return this._fromTexture(t); + } + compileCubemapShader() { + null === this._cubemapShader && + ((this._cubemapShader = Kh()), + this._compileMaterial(this._cubemapShader)); + } + compileEquirectangularShader() { + null === this._equirectShader && + ((this._equirectShader = Qh()), + this._compileMaterial(this._equirectShader)); + } + dispose() { + this._blurMaterial.dispose(), + null !== this._cubemapShader && this._cubemapShader.dispose(), + null !== this._equirectShader && this._equirectShader.dispose(); + for (let t = 0; t < Oh.length; t++) Oh[t].dispose(); + } + _cleanup(t) { + this._pingPongRenderTarget.dispose(), + this._renderer.setRenderTarget(kh), + (t.scissorTest = !1), + Jh(t, 0, 0, t.width, t.height); + } + _fromTexture(t) { + kh = this._renderer.getRenderTarget(); + const e = this._allocateTargets(t); + return ( + this._textureToCubeUV(t, e), this._applyPMREM(e), this._cleanup(e), e + ); + } + _allocateTargets(t) { + const e = { + magFilter: p, + minFilter: p, + generateMipmaps: !1, + type: x, + format: 1023, + encoding: Xh(t) ? t.encoding : J, + depthBuffer: !1, + }, + n = Zh(e); + return (n.depthBuffer = !t), (this._pingPongRenderTarget = Zh(e)), n; + } + _compileMaterial(t) { + const e = new Wn(Oh[0], t); + this._renderer.compile(e, Fh); + } + _sceneToCubeUV(t, e, n, i) { + const r = new Kn(90, 1, e, n), + s = [1, -1, 1, 1, 1, 1], + a = [1, 1, 1, -1, -1, -1], + o = this._renderer, + l = o.autoClear, + c = o.outputEncoding, + h = o.toneMapping; + o.getClearColor(Uh), + (o.toneMapping = 0), + (o.outputEncoding = X), + (o.autoClear = !1); + let u = !1; + const d = t.background; + if (d) { + if (d.isColor) { + Bh.color.copy(d).convertSRGBToLinear(), (t.background = null); + const e = qh(Bh.color); + (Bh.opacity = e), (u = !0); + } + } else { + Bh.color.copy(Uh).convertSRGBToLinear(); + const t = qh(Bh.color); + (Bh.opacity = t), (u = !0); + } + for (let e = 0; e < 6; e++) { + const n = e % 3; + 0 == n + ? (r.up.set(0, s[e], 0), r.lookAt(a[e], 0, 0)) + : 1 == n + ? (r.up.set(0, 0, s[e]), r.lookAt(0, a[e], 0)) + : (r.up.set(0, s[e], 0), r.lookAt(0, 0, a[e])), + Jh(i, n * Ch, e > 2 ? Ch : 0, Ch, Ch), + o.setRenderTarget(i), + u && o.render(zh, r), + o.render(t, r); + } + (o.toneMapping = h), (o.outputEncoding = c), (o.autoClear = l); + } + _textureToCubeUV(t, e) { + const n = this._renderer; + t.isCubeTexture + ? null == this._cubemapShader && (this._cubemapShader = Kh()) + : null == this._equirectShader && (this._equirectShader = Qh()); + const i = t.isCubeTexture ? this._cubemapShader : this._equirectShader, + r = new Wn(Oh[0], i), + s = i.uniforms; + (s.envMap.value = t), + t.isCubeTexture || + s.texelSize.value.set(1 / t.image.width, 1 / t.image.height), + (s.inputEncoding.value = Nh[t.encoding]), + (s.outputEncoding.value = Nh[e.texture.encoding]), + Jh(e, 0, 0, 3 * Ch, 2 * Ch), + n.setRenderTarget(e), + n.render(r, Fh); + } + _applyPMREM(t) { + const e = this._renderer, + n = e.autoClear; + e.autoClear = !1; + for (let e = 1; e < Dh; e++) { + const n = Math.sqrt(Gh[e] * Gh[e] - Gh[e - 1] * Gh[e - 1]), + i = jh[(e - 1) % jh.length]; + this._blur(t, e - 1, e, n, i); + } + e.autoClear = n; + } + _blur(t, e, n, i, r) { + const s = this._pingPongRenderTarget; + this._halfBlur(t, s, e, n, i, 'latitudinal', r), + this._halfBlur(s, t, n, n, i, 'longitudinal', r); + } + _halfBlur(t, e, n, i, r, s, a) { + const o = this._renderer, + l = this._blurMaterial; + 'latitudinal' !== s && + 'longitudinal' !== s && + console.error( + 'blur direction must be either latitudinal or longitudinal!' + ); + const c = new Wn(Oh[i], l), + h = l.uniforms, + u = Hh[n] - 1, + d = isFinite(r) ? Math.PI / (2 * u) : (2 * Math.PI) / 39, + p = r / d, + m = isFinite(r) ? 1 + Math.floor(3 * p) : Ih; + m > Ih && + console.warn( + `sigmaRadians, ${r}, is too large and will clip, as it requested ${m} samples when the maximum is set to 20` + ); + const f = []; + let g = 0; + for (let t = 0; t < Ih; ++t) { + const e = t / p, + n = Math.exp((-e * e) / 2); + f.push(n), 0 == t ? (g += n) : t < m && (g += 2 * n); + } + for (let t = 0; t < f.length; t++) f[t] = f[t] / g; + (h.envMap.value = t.texture), + (h.samples.value = m), + (h.weights.value = f), + (h.latitudinal.value = 'latitudinal' === s), + a && (h.poleAxis.value = a), + (h.dTheta.value = d), + (h.mipInt.value = 8 - n), + (h.inputEncoding.value = Nh[t.texture.encoding]), + (h.outputEncoding.value = Nh[t.texture.encoding]); + const v = Hh[i]; + Jh( + e, + 3 * Math.max(0, Ch - 2 * v), + (0 === i ? 0 : 2 * Ch) + 2 * v * (i > 4 ? i - 8 + 4 : 0), + 3 * v, + 2 * v + ), + o.setRenderTarget(e), + o.render(c, Fh); + } + }), + (t.ParametricBufferGeometry = wo), + (t.ParametricGeometry = wo), + (t.Particle = function (t) { + return ( + console.warn('THREE.Particle has been renamed to THREE.Sprite.'), + new Vs(t) + ); + }), + (t.ParticleBasicMaterial = function (t) { + return ( + console.warn( + 'THREE.ParticleBasicMaterial has been renamed to THREE.PointsMaterial.' + ), + new _a(t) + ); + }), + (t.ParticleSystem = function (t, e) { + return ( + console.warn('THREE.ParticleSystem has been renamed to THREE.Points.'), + new Ta(t, e) + ); + }), + (t.ParticleSystemMaterial = function (t) { + return ( + console.warn( + 'THREE.ParticleSystemMaterial has been renamed to THREE.PointsMaterial.' + ), + new _a(t) + ); + }), + (t.Path = Bl), + (t.PerspectiveCamera = Kn), + (t.Plane = Ne), + (t.PlaneBufferGeometry = ci), + (t.PlaneGeometry = ci), + (t.PlaneHelper = class extends fa { + constructor(t, e = 1, n = 16776960) { + const i = n, + r = new En(); + r.setAttribute( + 'position', + new mn( + [ + 1, -1, 1, -1, 1, 1, -1, -1, 1, 1, 1, 1, -1, 1, 1, -1, -1, 1, 1, + -1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, + ], + 3 + ) + ), + r.computeBoundingSphere(), + super(r, new ca({ color: i, toneMapped: !1 })), + (this.type = 'PlaneHelper'), + (this.plane = t), + (this.size = e); + const s = new En(); + s.setAttribute( + 'position', + new mn( + [1, 1, 1, -1, 1, 1, -1, -1, 1, 1, 1, 1, -1, -1, 1, 1, -1, 1], + 3 + ) + ), + s.computeBoundingSphere(), + this.add( + new Wn( + s, + new en({ + color: i, + opacity: 0.2, + transparent: !0, + depthWrite: !1, + toneMapped: !1, + }) + ) + ); + } + updateMatrixWorld(t) { + let e = -this.plane.constant; + Math.abs(e) < 1e-8 && (e = 1e-8), + this.scale.set(0.5 * this.size, 0.5 * this.size, e), + (this.children[0].material.side = e < 0 ? 1 : 0), + this.lookAt(this.plane.normal), + super.updateMatrixWorld(t); + } + }), + (t.PointCloud = function (t, e) { + return ( + console.warn('THREE.PointCloud has been renamed to THREE.Points.'), + new Ta(t, e) + ); + }), + (t.PointCloudMaterial = function (t) { + return ( + console.warn( + 'THREE.PointCloudMaterial has been renamed to THREE.PointsMaterial.' + ), + new _a(t) + ); + }), + (t.PointLight = Zl), + (t.PointLightHelper = class extends Wn { + constructor(t, e, n) { + super( + new So(e, 4, 2), + new en({ wireframe: !0, fog: !1, toneMapped: !1 }) + ), + (this.light = t), + this.light.updateMatrixWorld(), + (this.color = n), + (this.type = 'PointLightHelper'), + (this.matrix = this.light.matrixWorld), + (this.matrixAutoUpdate = !1), + this.update(); + } + dispose() { + this.geometry.dispose(), this.material.dispose(); + } + update() { + void 0 !== this.color + ? this.material.color.set(this.color) + : this.material.color.copy(this.light.color); + } + }), + (t.Points = Ta), + (t.PointsMaterial = _a), + (t.PolarGridHelper = class extends ya { + constructor(t = 10, e = 16, n = 8, i = 64, r = 4473924, s = 8947848) { + (r = new tn(r)), (s = new tn(s)); + const a = [], + o = []; + for (let n = 0; n <= e; n++) { + const i = (n / e) * (2 * Math.PI), + l = Math.sin(i) * t, + c = Math.cos(i) * t; + a.push(0, 0, 0), a.push(l, 0, c); + const h = 1 & n ? r : s; + o.push(h.r, h.g, h.b), o.push(h.r, h.g, h.b); + } + for (let e = 0; e <= n; e++) { + const l = 1 & e ? r : s, + c = t - (t / n) * e; + for (let t = 0; t < i; t++) { + let e = (t / i) * (2 * Math.PI), + n = Math.sin(e) * c, + r = Math.cos(e) * c; + a.push(n, 0, r), + o.push(l.r, l.g, l.b), + (e = ((t + 1) / i) * (2 * Math.PI)), + (n = Math.sin(e) * c), + (r = Math.cos(e) * c), + a.push(n, 0, r), + o.push(l.r, l.g, l.b); + } + } + const l = new En(); + l.setAttribute('position', new mn(a, 3)), + l.setAttribute('color', new mn(o, 3)); + super(l, new ca({ vertexColors: !0, toneMapped: !1 })), + (this.type = 'PolarGridHelper'); + } + }), + (t.PolyhedronBufferGeometry = Na), + (t.PolyhedronGeometry = Na), + (t.PositionalAudio = class extends Lc { + constructor(t) { + super(t), + (this.panner = this.context.createPanner()), + (this.panner.panningModel = 'HRTF'), + this.panner.connect(this.gain); + } + getOutput() { + return this.panner; + } + getRefDistance() { + return this.panner.refDistance; + } + setRefDistance(t) { + return (this.panner.refDistance = t), this; + } + getRolloffFactor() { + return this.panner.rolloffFactor; + } + setRolloffFactor(t) { + return (this.panner.rolloffFactor = t), this; + } + getDistanceModel() { + return this.panner.distanceModel; + } + setDistanceModel(t) { + return (this.panner.distanceModel = t), this; + } + getMaxDistance() { + return this.panner.maxDistance; + } + setMaxDistance(t) { + return (this.panner.maxDistance = t), this; + } + setDirectionalCone(t, e, n) { + return ( + (this.panner.coneInnerAngle = t), + (this.panner.coneOuterAngle = e), + (this.panner.coneOuterGain = n), + this + ); + } + updateMatrixWorld(t) { + if ( + (super.updateMatrixWorld(t), + !0 === this.hasPlaybackControl && !1 === this.isPlaying) + ) + return; + this.matrixWorld.decompose(Rc, Cc, Pc), + Dc.set(0, 0, 1).applyQuaternion(Cc); + const e = this.panner; + if (e.positionX) { + const t = this.context.currentTime + this.listener.timeDelta; + e.positionX.linearRampToValueAtTime(Rc.x, t), + e.positionY.linearRampToValueAtTime(Rc.y, t), + e.positionZ.linearRampToValueAtTime(Rc.z, t), + e.orientationX.linearRampToValueAtTime(Dc.x, t), + e.orientationY.linearRampToValueAtTime(Dc.y, t), + e.orientationZ.linearRampToValueAtTime(Dc.z, t); + } else + e.setPosition(Rc.x, Rc.y, Rc.z), e.setOrientation(Dc.x, Dc.y, Dc.z); + } + }), + (t.PropertyBinding = jc), + (t.PropertyMixer = Nc), + (t.QuadraticBezierCurve = Cl), + (t.QuadraticBezierCurve3 = Pl), + (t.Quaternion = At), + (t.QuaternionKeyframeTrack = $o), + (t.QuaternionLinearInterpolant = Ko), + (t.REVISION = e), + (t.RGBADepthPacking = 3201), + (t.RGBAFormat = E), + (t.RGBAIntegerFormat = 1033), + (t.RGBA_ASTC_10x10_Format = 37819), + (t.RGBA_ASTC_10x5_Format = 37816), + (t.RGBA_ASTC_10x6_Format = 37817), + (t.RGBA_ASTC_10x8_Format = 37818), + (t.RGBA_ASTC_12x10_Format = 37820), + (t.RGBA_ASTC_12x12_Format = 37821), + (t.RGBA_ASTC_4x4_Format = 37808), + (t.RGBA_ASTC_5x4_Format = 37809), + (t.RGBA_ASTC_5x5_Format = 37810), + (t.RGBA_ASTC_6x5_Format = 37811), + (t.RGBA_ASTC_6x6_Format = 37812), + (t.RGBA_ASTC_8x5_Format = 37813), + (t.RGBA_ASTC_8x6_Format = 37814), + (t.RGBA_ASTC_8x8_Format = 37815), + (t.RGBA_BPTC_Format = 36492), + (t.RGBA_ETC2_EAC_Format = O), + (t.RGBA_PVRTC_2BPPV1_Format = z), + (t.RGBA_PVRTC_4BPPV1_Format = B), + (t.RGBA_S3TC_DXT1_Format = C), + (t.RGBA_S3TC_DXT3_Format = P), + (t.RGBA_S3TC_DXT5_Format = D), + (t.RGBDEncoding = $), + (t.RGBEEncoding = J), + (t.RGBEFormat = 1023), + (t.RGBFormat = T), + (t.RGBIntegerFormat = 1032), + (t.RGBM16Encoding = K), + (t.RGBM7Encoding = Q), + (t.RGB_ETC1_Format = 36196), + (t.RGB_ETC2_Format = F), + (t.RGB_PVRTC_2BPPV1_Format = N), + (t.RGB_PVRTC_4BPPV1_Format = I), + (t.RGB_S3TC_DXT1_Format = R), + (t.RGFormat = 1030), + (t.RGIntegerFormat = 1031), + (t.RawShaderMaterial = Io), + (t.Ray = re), + (t.Raycaster = class { + constructor(t, e, n = 0, i = 1 / 0) { + (this.ray = new re(t, e)), + (this.near = n), + (this.far = i), + (this.camera = null), + (this.layers = new ge()), + (this.params = { + Mesh: {}, + Line: { threshold: 1 }, + LOD: {}, + Points: { threshold: 1 }, + Sprite: {}, + }); + } + set(t, e) { + this.ray.set(t, e); + } + setFromCamera(t, e) { + e && e.isPerspectiveCamera + ? (this.ray.origin.setFromMatrixPosition(e.matrixWorld), + this.ray.direction + .set(t.x, t.y, 0.5) + .unproject(e) + .sub(this.ray.origin) + .normalize(), + (this.camera = e)) + : e && e.isOrthographicCamera + ? (this.ray.origin + .set(t.x, t.y, (e.near + e.far) / (e.near - e.far)) + .unproject(e), + this.ray.direction + .set(0, 0, -1) + .transformDirection(e.matrixWorld), + (this.camera = e)) + : console.error( + 'THREE.Raycaster: Unsupported camera type: ' + e.type + ); + } + intersectObject(t, e = !1, n = []) { + return $c(t, this, n, e), n.sort(Kc), n; + } + intersectObjects(t, e = !1, n = []) { + for (let i = 0, r = t.length; i < r; i++) $c(t[i], this, n, e); + return n.sort(Kc), n; + } + }), + (t.RectAreaLight = tc), + (t.RedFormat = 1028), + (t.RedIntegerFormat = 1029), + (t.ReinhardToneMapping = 2), + (t.RepeatWrapping = h), + (t.ReplaceStencilOp = 7681), + (t.ReverseSubtractEquation = 102), + (t.RingBufferGeometry = bo), + (t.RingGeometry = bo), + (t.SRGB8_ALPHA8_ASTC_10x10_Format = 37851), + (t.SRGB8_ALPHA8_ASTC_10x5_Format = 37848), + (t.SRGB8_ALPHA8_ASTC_10x6_Format = 37849), + (t.SRGB8_ALPHA8_ASTC_10x8_Format = 37850), + (t.SRGB8_ALPHA8_ASTC_12x10_Format = 37852), + (t.SRGB8_ALPHA8_ASTC_12x12_Format = 37853), + (t.SRGB8_ALPHA8_ASTC_4x4_Format = 37840), + (t.SRGB8_ALPHA8_ASTC_5x4_Format = 37841), + (t.SRGB8_ALPHA8_ASTC_5x5_Format = 37842), + (t.SRGB8_ALPHA8_ASTC_6x5_Format = 37843), + (t.SRGB8_ALPHA8_ASTC_6x6_Format = 37844), + (t.SRGB8_ALPHA8_ASTC_8x5_Format = 37845), + (t.SRGB8_ALPHA8_ASTC_8x6_Format = 37846), + (t.SRGB8_ALPHA8_ASTC_8x8_Format = 37847), + (t.Scene = Ts), + (t.SceneUtils = eu), + (t.ShaderChunk = hi), + (t.ShaderLib = di), + (t.ShaderMaterial = Jn), + (t.ShadowMaterial = Do), + (t.Shape = zl), + (t.ShapeBufferGeometry = Mo), + (t.ShapeGeometry = Mo), + (t.ShapePath = dc), + (t.ShapeUtils = po), + (t.ShortType = 1011), + (t.Skeleton = ia), + (t.SkeletonHelper = hh), + (t.SkinnedMesh = $s), + (t.SmoothShading = 2), + (t.Sphere = Jt), + (t.SphereBufferGeometry = So), + (t.SphereGeometry = So), + (t.Spherical = class { + constructor(t = 1, e = 0, n = 0) { + return (this.radius = t), (this.phi = e), (this.theta = n), this; + } + set(t, e, n) { + return (this.radius = t), (this.phi = e), (this.theta = n), this; + } + copy(t) { + return ( + (this.radius = t.radius), + (this.phi = t.phi), + (this.theta = t.theta), + this + ); + } + makeSafe() { + const t = 1e-6; + return (this.phi = Math.max(t, Math.min(Math.PI - t, this.phi))), this; + } + setFromVector3(t) { + return this.setFromCartesianCoords(t.x, t.y, t.z); + } + setFromCartesianCoords(t, e, n) { + return ( + (this.radius = Math.sqrt(t * t + e * e + n * n)), + 0 === this.radius + ? ((this.theta = 0), (this.phi = 0)) + : ((this.theta = Math.atan2(t, n)), + (this.phi = Math.acos(ht(e / this.radius, -1, 1)))), + this + ); + } + clone() { + return new this.constructor().copy(this); + } + }), + (t.SphericalHarmonics3 = ec), + (t.SplineCurve = Dl), + (t.SpotLight = Wl), + (t.SpotLightHelper = class extends Ce { + constructor(t, e) { + super(), + (this.light = t), + this.light.updateMatrixWorld(), + (this.matrix = t.matrixWorld), + (this.matrixAutoUpdate = !1), + (this.color = e); + const n = new En(), + i = [ + 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, -1, 0, 1, 0, 0, 0, 0, + 1, 1, 0, 0, 0, 0, -1, 1, + ]; + for (let t = 0, e = 1, n = 32; t < n; t++, e++) { + const r = (t / n) * Math.PI * 2, + s = (e / n) * Math.PI * 2; + i.push(Math.cos(r), Math.sin(r), 1, Math.cos(s), Math.sin(s), 1); + } + n.setAttribute('position', new mn(i, 3)); + const r = new ca({ fog: !1, toneMapped: !1 }); + (this.cone = new ya(n, r)), this.add(this.cone), this.update(); + } + dispose() { + this.cone.geometry.dispose(), this.cone.material.dispose(); + } + update() { + this.light.updateMatrixWorld(); + const t = this.light.distance ? this.light.distance : 1e3, + e = t * Math.tan(this.light.angle); + this.cone.scale.set(e, e, t), + ah.setFromMatrixPosition(this.light.target.matrixWorld), + this.cone.lookAt(ah), + void 0 !== this.color + ? this.cone.material.color.set(this.color) + : this.cone.material.color.copy(this.light.color); + } + }), + (t.Sprite = Vs), + (t.SpriteMaterial = Rs), + (t.SrcAlphaFactor = 204), + (t.SrcAlphaSaturateFactor = 210), + (t.SrcColorFactor = 202), + (t.StaticCopyUsage = 35046), + (t.StaticDrawUsage = et), + (t.StaticReadUsage = 35045), + (t.StereoCamera = class { + constructor() { + (this.type = 'StereoCamera'), + (this.aspect = 1), + (this.eyeSep = 0.064), + (this.cameraL = new Kn()), + this.cameraL.layers.enable(1), + (this.cameraL.matrixAutoUpdate = !1), + (this.cameraR = new Kn()), + this.cameraR.layers.enable(2), + (this.cameraR.matrixAutoUpdate = !1), + (this._cache = { + focus: null, + fov: null, + aspect: null, + near: null, + far: null, + zoom: null, + eyeSep: null, + }); + } + update(t) { + const e = this._cache; + if ( + e.focus !== t.focus || + e.fov !== t.fov || + e.aspect !== t.aspect * this.aspect || + e.near !== t.near || + e.far !== t.far || + e.zoom !== t.zoom || + e.eyeSep !== this.eyeSep + ) { + (e.focus = t.focus), + (e.fov = t.fov), + (e.aspect = t.aspect * this.aspect), + (e.near = t.near), + (e.far = t.far), + (e.zoom = t.zoom), + (e.eyeSep = this.eyeSep); + const n = t.projectionMatrix.clone(), + i = e.eyeSep / 2, + r = (i * e.near) / e.focus, + s = (e.near * Math.tan(ot * e.fov * 0.5)) / e.zoom; + let a, o; + (wc.elements[12] = -i), + (_c.elements[12] = i), + (a = -s * e.aspect + r), + (o = s * e.aspect + r), + (n.elements[0] = (2 * e.near) / (o - a)), + (n.elements[8] = (o + a) / (o - a)), + this.cameraL.projectionMatrix.copy(n), + (a = -s * e.aspect - r), + (o = s * e.aspect - r), + (n.elements[0] = (2 * e.near) / (o - a)), + (n.elements[8] = (o + a) / (o - a)), + this.cameraR.projectionMatrix.copy(n); + } + this.cameraL.matrixWorld.copy(t.matrixWorld).multiply(wc), + this.cameraR.matrixWorld.copy(t.matrixWorld).multiply(_c); + } + }), + (t.StreamCopyUsage = 35042), + (t.StreamDrawUsage = 35040), + (t.StreamReadUsage = 35041), + (t.StringKeyframeTrack = tl), + (t.SubtractEquation = 101), + (t.SubtractiveBlending = 3), + (t.TOUCH = { ROTATE: 0, PAN: 1, DOLLY_PAN: 2, DOLLY_ROTATE: 3 }), + (t.TangentSpaceNormalMap = 0), + (t.TetrahedronBufferGeometry = To), + (t.TetrahedronGeometry = To), + (t.TextBufferGeometry = Eo), + (t.TextGeometry = Eo), + (t.Texture = bt), + (t.TextureLoader = pl), + (t.TorusBufferGeometry = Ao), + (t.TorusGeometry = Ao), + (t.TorusKnotBufferGeometry = Lo), + (t.TorusKnotGeometry = Lo), + (t.Triangle = je), + (t.TriangleFanDrawMode = 2), + (t.TriangleStripDrawMode = 1), + (t.TrianglesDrawMode = 0), + (t.TubeBufferGeometry = Ro), + (t.TubeGeometry = Ro), + (t.UVMapping = i), + (t.Uint16Attribute = function (t, e) { + return ( + console.warn( + 'THREE.Uint16Attribute has been removed. Use new THREE.Uint16BufferAttribute() instead.' + ), + new hn(t, e) + ); + }), + (t.Uint16BufferAttribute = hn), + (t.Uint32Attribute = function (t, e) { + return ( + console.warn( + 'THREE.Uint32Attribute has been removed. Use new THREE.Uint32BufferAttribute() instead.' + ), + new dn(t, e) + ); + }), + (t.Uint32BufferAttribute = dn), + (t.Uint8Attribute = function (t, e) { + return ( + console.warn( + 'THREE.Uint8Attribute has been removed. Use new THREE.Uint8BufferAttribute() instead.' + ), + new on(t, e) + ); + }), + (t.Uint8BufferAttribute = on), + (t.Uint8ClampedAttribute = function (t, e) { + return ( + console.warn( + 'THREE.Uint8ClampedAttribute has been removed. Use new THREE.Uint8ClampedBufferAttribute() instead.' + ), + new ln(t, e) + ); + }), + (t.Uint8ClampedBufferAttribute = ln), + (t.Uniform = Zc), + (t.UniformsLib = ui), + (t.UniformsUtils = Zn), + (t.UnsignedByteType = x), + (t.UnsignedInt248Type = S), + (t.UnsignedIntType = w), + (t.UnsignedShort4444Type = 1017), + (t.UnsignedShort5551Type = 1018), + (t.UnsignedShort565Type = 1019), + (t.UnsignedShortType = _), + (t.VSMShadowMap = 3), + (t.Vector2 = vt), + (t.Vector3 = Lt), + (t.Vector4 = St), + (t.VectorKeyframeTrack = el), + (t.Vertex = function (t, e, n) { + return ( + console.warn( + 'THREE.Vertex has been removed. Use THREE.Vector3 instead.' + ), + new Lt(t, e, n) + ); + }), + (t.VertexColors = 2), + (t.VideoTexture = Aa), + (t.WebGL1Renderer = bs), + (t.WebGLCubeRenderTarget = ni), + (t.WebGLMultisampleRenderTarget = Et), + (t.WebGLRenderTarget = Tt), + (t.WebGLRenderTargetCube = function (t, e, n) { + return ( + console.warn( + 'THREE.WebGLRenderTargetCube( width, height, options ) is now WebGLCubeRenderTarget( size, options ).' + ), + new ni(t, n) + ); + }), + (t.WebGLRenderer = ws), + (t.WebGLUtils = ms), + (t.WireframeGeometry = Co), + (t.WireframeHelper = function (t, e) { + return ( + console.warn( + 'THREE.WireframeHelper has been removed. Use THREE.WireframeGeometry instead.' + ), + new ya( + new Co(t.geometry), + new ca({ color: void 0 !== e ? e : 16777215 }) + ) + ); + }), + (t.WrapAroundEnding = W), + (t.XHRLoader = function (t) { + return ( + console.warn('THREE.XHRLoader has been renamed to THREE.FileLoader.'), + new cl(t) + ); + }), + (t.ZeroCurvatureEnding = k), + (t.ZeroFactor = 200), + (t.ZeroSlopeEnding = V), + (t.ZeroStencilOp = 0), + (t.sRGBEncoding = Y), + Object.defineProperty(t, '__esModule', { value: !0 }); +}); diff --git a/frontend/src/main.ts b/frontend/apps/crawlab/src/main.ts similarity index 100% rename from frontend/src/main.ts rename to frontend/apps/crawlab/src/main.ts diff --git a/frontend/src/shims-vue.d.ts b/frontend/apps/crawlab/src/shims-vue.d.ts similarity index 100% rename from frontend/src/shims-vue.d.ts rename to frontend/apps/crawlab/src/shims-vue.d.ts diff --git a/frontend/apps/crawlab/tsconfig.json b/frontend/apps/crawlab/tsconfig.json new file mode 100644 index 000000000..3b5835ebd --- /dev/null +++ b/frontend/apps/crawlab/tsconfig.json @@ -0,0 +1,41 @@ +{ + "compilerOptions": { + "declaration": true, + "target": "esnext", + "module": "esnext", + "strict": true, + "jsx": "preserve", + "importHelpers": true, + "moduleResolution": "node", + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "sourceMap": true, + "baseUrl": ".", + "paths": { + "@/*": [ + "src/*" + ] + }, + "lib": [ + "esnext", + "dom", + "dom.iterable", + "scripthost" + ], + "typeRoots": [ + "src/interfaces" + ] + }, + "include": [ + "src/shims-vue.d.ts", + "src/**/*.ts", + "src/**/*.tsx", + "src/**/*.vue", + "__test__/**/*.spec.ts" + ], + "exclude": [ + "node_modules", + "src/**/*.js" + ] +} diff --git a/frontend/apps/crawlab/vite.config.ts b/frontend/apps/crawlab/vite.config.ts new file mode 100644 index 000000000..180ffd21f --- /dev/null +++ b/frontend/apps/crawlab/vite.config.ts @@ -0,0 +1,46 @@ +import { resolve } from 'path'; +import { defineConfig, UserConfig } from 'vite'; +import vue from '@vitejs/plugin-vue'; +import dynamicImport from 'vite-plugin-dynamic-import'; +import { visualizer } from 'rollup-plugin-visualizer'; + +export default defineConfig(({ mode }) => { + const config: UserConfig = { + build: { + rollupOptions: { + output: { + manualChunks(id, meta) { + if (id.includes('node_modules')) { + const arr = id.toString().split('node_modules/'); + const modulePath = arr[arr.length - 1]; + return modulePath?.split('/')?.[0]; + } + if (id.includes('three.min.js')) { + return 'three'; + } + }, + }, + }, + }, + optimizeDeps: { + include: ['element-plus', 'axios'], + }, + resolve: { + dedupe: ['vue', 'vue-router', 'vuex', 'axios', 'element-plus'], + alias: { + '@': resolve(__dirname, 'src'), + }, + extensions: ['.js', '.ts', '.jsx', '.tsx', '.json', '.vue', '.scss'], + }, + plugins: [vue(), dynamicImport()], + server: { + cors: true, + }, + }; + + if (mode === 'analyze') { + config.plugins.push(visualizer({ open: true, gzipSize: true })); + } + + return config; +}); diff --git a/frontend/babel.config.js b/frontend/babel.config.js deleted file mode 100644 index ce6ed5cf7..000000000 --- a/frontend/babel.config.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - presets: [ - '@vue/cli-plugin-babel/preset', - '@babel/preset-typescript' - ] -} diff --git a/frontend/index.html b/frontend/index.html deleted file mode 100644 index c42f06c83..000000000 --- a/frontend/index.html +++ /dev/null @@ -1,222 +0,0 @@ - - - - - - - - Crawlab - - - - - - - - - - - -
-
-
-

- C - R - A - W - L - A - B -

-
-
- Easy Crawling - Better Management - Gain Data Value - Good Scalability -
-
- Loading... -
-
-
-
- - - - diff --git a/frontend/jest.config.ts b/frontend/jest.config.ts deleted file mode 100644 index 1ceea5131..000000000 --- a/frontend/jest.config.ts +++ /dev/null @@ -1,194 +0,0 @@ -/* - * For a detailed explanation regarding each configuration property and type check, visit: - * https://jestjs.io/docs/en/configuration.html - */ - -export default { - // All imported modules in your tests should be mocked automatically - // automock: false, - - // Stop running tests after `n` failures - // bail: 0, - - // The directory where Jest should store its cached dependency information - // cacheDirectory: "/private/var/folders/r0/jl9gx1m97tb2qpggj961z3n40000gn/T/jest_dx", - - // Automatically clear mock calls and instances between every test - clearMocks: true, - - // Indicates whether the coverage information should be collected while executing the test - // collectCoverage: false, - - // An array of glob patterns indicating a set of files for which coverage information should be collected - // collectCoverageFrom: undefined, - - // The directory where Jest should output its coverage files - coverageDirectory: 'coverage', - - // An array of regexp pattern strings used to skip coverage collection - // coveragePathIgnorePatterns: [ - // "/node_modules/" - // ], - - // Indicates which provider should be used to instrument code for coverage - coverageProvider: 'v8', - - // A list of reporter names that Jest uses when writing coverage reports - // coverageReporters: [ - // "json", - // "text", - // "lcov", - // "clover" - // ], - - // An object that configures minimum threshold enforcement for coverage results - // coverageThreshold: undefined, - - // A path to a custom dependency extractor - // dependencyExtractor: undefined, - - // Make calling deprecated APIs throw helpful error messages - // errorOnDeprecated: false, - - // Force coverage collection from ignored files using an array of glob patterns - // forceCoverageMatch: [], - - // A path to a module which exports an async function that is triggered once before all test suites - // globalSetup: undefined, - - // A path to a module which exports an async function that is triggered once after all test suites - // globalTeardown: undefined, - - // A set of global variables that need to be available in all test environments - // globals: {}, - - // The maximum amount of workers used to run your tests. Can be specified as % or a number. E.g. maxWorkers: 10% will use 10% of your CPU amount + 1 as the maximum worker number. maxWorkers: 2 will use a maximum of 2 workers. - // maxWorkers: "50%", - - // An array of directory names to be searched recursively up from the requiring module's location - // moduleDirectories: [ - // "node_modules" - // ], - - // An array of file extensions your modules use - // moduleFileExtensions: [ - // "js", - // "json", - // "jsx", - // "ts", - // "tsx", - // "node" - // ], - - // A map from regular expressions to module names or to arrays of module names that allow to stub out resources with a single module - // moduleNameMapper: {}, - - // An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader - // modulePathIgnorePatterns: [], - - // Activates notifications for test results - // notify: false, - - // An enum that specifies notification mode. Requires { notify: true } - // notifyMode: "failure-change", - - // A preset that is used as a base for Jest's configuration - // preset: undefined, - - // Run tests from one or more projects - // projects: undefined, - - // Use this configuration option to add custom reporters to Jest - // reporters: undefined, - - // Automatically reset mock state between every test - // resetMocks: false, - - // Reset the module registry before running each individual test - // resetModules: false, - - // A path to a custom resolver - // resolver: undefined, - - // Automatically restore mock state between every test - // restoreMocks: false, - - // The root directory that Jest should scan for tests and modules within - // rootDir: undefined, - - // A list of paths to directories that Jest should use to search for files in - // roots: [ - // "" - // ], - - // Allows you to use a custom runner instead of Jest's default test runner - // runner: "jest-runner", - - // The paths to modules that run some code to configure or set up the testing environment before each test - // setupFiles: [], - - // A list of paths to modules that run some code to configure or set up the testing framework before each test - // setupFilesAfterEnv: [], - - // The number of seconds after which a test is considered as slow and reported as such in the results. - // slowTestThreshold: 5, - - // A list of paths to snapshot serializer modules Jest should use for snapshot testing - // snapshotSerializers: [], - - // The test environment that will be used for testing - testEnvironment: 'node', - - // Options that will be passed to the testEnvironment - // testEnvironmentOptions: {}, - - // Adds a location field to test results - // testLocationInResults: false, - - // The glob patterns Jest uses to detect test files - // testMatch: [ - // "**/__tests__/**/*.[jt]s?(x)", - // "**/?(*.)+(spec|test).[tj]s?(x)" - // ], - - // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped - // testPathIgnorePatterns: [ - // "/node_modules/" - // ], - - // The regexp pattern or array of patterns that Jest uses to detect test files - // testRegex: [], - - // This option allows the use of a custom results processor - // testResultsProcessor: undefined, - - // This option allows use of a custom test runner - // testRunner: "jasmine2", - - // This option sets the URL for the jsdom environment. It is reflected in properties such as location.href - // testURL: "http://localhost", - - // Setting this value to "fake" allows the use of fake timers for functions such as "setTimeout" - // timers: "real", - - // A map from regular expressions to paths to transformers - // transform: undefined, - - // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation - // transformIgnorePatterns: [ - // "/node_modules/", - // "\\.pnp\\.[^\\/]+$" - // ], - - // An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them - // unmockedModulePathPatterns: undefined, - - // Indicates whether each individual test should be reported during the run - // verbose: undefined, - - // An array of regexp patterns that are matched against all source file paths before re-running tests in watch mode - // watchPathIgnorePatterns: [], - - // Whether to use watchman for file crawling - // watchman: true, -}; diff --git a/frontend/package.json b/frontend/package.json index ad3072f7d..0f9006a05 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,43 +1,62 @@ { - "name": "@crawlab/app", - "version": "0.6.3", + "name": "crawlab", + "version": "0.7.0-rc7", "scripts": { - "serve": "vite", - "serve:dist": "serve dist", - "build": "vite build", - "build:docker": "vite build --mode docker" + "dev": "turbo run dev", + "test": "turbo run test", + "build": "turbo run build" }, - "author": { - "name": "Marvin Zhang", - "email": "tikazyq@163.com" + "devDependencies": { + "@types/node": "^20.14.8", + "@vue/language-server": "^2.0.24", + "pnpm": "^9.5.0", + "turbo": "^2.0.6", + "typescript": "^5", + "vite": "^5.4.6", + "vue-tsc": "^2.0.24" }, - "license": "BSD-3-Clause", + "packageManager": "pnpm@9.4.0", "dependencies": { - "@element-plus/icons": "^0.0.11", - "@fortawesome/fontawesome-svg-core": "^1.3.0", - "@fortawesome/free-brands-svg-icons": "^6.0.0", - "@fortawesome/free-regular-svg-icons": "^6.0.0", - "@fortawesome/free-solid-svg-icons": "^6.0.0", - "@fortawesome/vue-fontawesome": "^3.0.0-5", + "@element-plus/icons-vue": "^2.3.1", + "@fortawesome/fontawesome-common-types": "^6.5.2", + "@fortawesome/fontawesome-svg-core": "^6.5.2", + "@fortawesome/free-brands-svg-icons": "^6.5.2", + "@fortawesome/free-regular-svg-icons": "^6.5.2", + "@fortawesome/free-solid-svg-icons": "^6.5.2", + "@fortawesome/vue-fontawesome": "^3.0.8", + "@popperjs/core": "^2.11.8", + "@types/getos": "^3.0.4", + "@types/humanize-duration": "^3.27.4", + "@types/javascript-time-ago": "^2.0.8", + "@types/md5": "^2.3.5", + "@types/pinyin": "^2.10.2", + "@types/showdown": "^2.0.6", + "@types/url-join": "^4.0.3", + "async-validator": "^4.2.5", "atom-material-icons": "^3.0.0", - "codemirror": "^5.59.1", - "crawlab-ui": "0.6.3", - "echarts": "^5.1.2", - "element-plus": "^1.3.0-beta.10", - "vue": "^3.2", - "vue-router": "^4.0.11" - }, - "devDependencies": { - "@types/node": "^18.11.10", - "@vitejs/plugin-vue": "^3.2.0", - "@vue/compiler-sfc": "^3.2.45", - "rollup-plugin-external-globals": "^0.8.0", - "rollup-plugin-visualizer": "^5.9.2", - "typescript": "^4.6.4", - "vite": "^3.2.4", - "vite-aliases": "^0.9.7", - "vite-plugin-dynamic-import": "^1.2.4", - "vite-plugin-externalize-deps": "^0.7.0", - "vue-tsc": "^1.0.9" + "axios": "^1.7.4", + "core-js": "^3.37.1", + "crawlab-vue3-dropzone": "3.0.3", + "cron-parser": "^4.9.0", + "cronstrue": "^2.50.0", + "dayjs": "^1.11.11", + "element-plus": "^2.7.6", + "font-awesome": "^4.7.0", + "humanize-duration": "^3.32.1", + "javascript-time-ago": "^2.5.10", + "md5": "^2.3.0", + "monaco-editor": "^0.50.0", + "normalize.css": "^8.0.1", + "os-name": "^5.0.1", + "pinyin": "^2.10.2", + "point-cluster": "^3.1.8", + "showdown": "^2.1.0", + "three": "^0.166.0", + "url-join": "^4.0.1", + "vue": "^3.4", + "vue-clipboard3": "^2.0.0", + "vue-i18n": "9.13.1", + "vue-router": "4.4.0", + "vuex": "^4.1.0" } -} \ No newline at end of file +} diff --git a/frontend/packages/crawlab-ui b/frontend/packages/crawlab-ui new file mode 160000 index 000000000..1b60483ed --- /dev/null +++ b/frontend/packages/crawlab-ui @@ -0,0 +1 @@ +Subproject commit 1b60483eda8490d108d0d8e2d175ff7c74e6bc71 diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml index cc1a16bab..bb1c473c0 100644 --- a/frontend/pnpm-lock.yaml +++ b/frontend/pnpm-lock.yaml @@ -1,1844 +1,7394 @@ -lockfileVersion: '6.0' +lockfileVersion: '9.0' settings: autoInstallPeers: true excludeLinksFromLockfile: false -dependencies: - '@element-plus/icons': - specifier: ^0.0.11 - version: registry.npmmirror.com/@element-plus/icons@0.0.11 - '@fortawesome/fontawesome-svg-core': - specifier: ^1.3.0 - version: registry.npmmirror.com/@fortawesome/fontawesome-svg-core@1.3.0 - '@fortawesome/free-brands-svg-icons': - specifier: ^6.0.0 - version: registry.npmmirror.com/@fortawesome/free-brands-svg-icons@6.2.1 - '@fortawesome/free-regular-svg-icons': - specifier: ^6.0.0 - version: registry.npmmirror.com/@fortawesome/free-regular-svg-icons@6.2.1 - '@fortawesome/free-solid-svg-icons': - specifier: ^6.0.0 - version: registry.npmmirror.com/@fortawesome/free-solid-svg-icons@6.2.1 - '@fortawesome/vue-fontawesome': - specifier: ^3.0.0-5 - version: registry.npmmirror.com/@fortawesome/vue-fontawesome@3.0.2(@fortawesome/fontawesome-svg-core@1.3.0)(vue@3.2.45) - atom-material-icons: - specifier: ^3.0.0 - version: registry.npmmirror.com/atom-material-icons@3.0.0 - codemirror: - specifier: ^5.59.1 - version: registry.npmmirror.com/codemirror@5.65.10 - crawlab-ui: - specifier: 0.6.3 - version: 0.6.3 - echarts: - specifier: ^5.1.2 - version: registry.npmmirror.com/echarts@5.4.0 - element-plus: - specifier: ^1.3.0-beta.10 - version: registry.npmmirror.com/element-plus@1.3.0-beta.10(vue@3.2.45) - vue: - specifier: ^3.2 - version: registry.npmmirror.com/vue@3.2.45 - vue-router: - specifier: ^4.0.11 - version: registry.npmmirror.com/vue-router@4.1.6(vue@3.2.45) - -devDependencies: - '@types/node': - specifier: ^18.11.10 - version: registry.npmmirror.com/@types/node@18.11.10 - '@vitejs/plugin-vue': - specifier: ^3.2.0 - version: registry.npmmirror.com/@vitejs/plugin-vue@3.2.0(vite@3.2.4)(vue@3.2.45) - '@vue/compiler-sfc': - specifier: ^3.2.45 - version: registry.npmmirror.com/@vue/compiler-sfc@3.2.45 - rollup-plugin-external-globals: - specifier: ^0.8.0 - version: 0.8.0(rollup@3.26.2) - rollup-plugin-visualizer: - specifier: ^5.9.2 - version: 5.9.2(rollup@3.26.2) - typescript: - specifier: ^4.6.4 - version: registry.npmmirror.com/typescript@4.9.3 - vite: - specifier: ^3.2.4 - version: registry.npmmirror.com/vite@3.2.4(@types/node@18.11.10) - vite-aliases: - specifier: ^0.9.7 - version: registry.npmmirror.com/vite-aliases@0.9.7(@types/node@18.11.10) - vite-plugin-dynamic-import: - specifier: ^1.2.4 - version: registry.npmmirror.com/vite-plugin-dynamic-import@1.2.4 - vite-plugin-externalize-deps: - specifier: ^0.7.0 - version: 0.7.0(vite@3.2.4) - vue-tsc: - specifier: ^1.0.9 - version: registry.npmmirror.com/vue-tsc@1.0.11(typescript@4.9.3) +importers: + + .: + dependencies: + '@element-plus/icons-vue': + specifier: ^2.3.1 + version: 2.3.1(vue@3.5.12(typescript@5.6.3)) + '@fortawesome/fontawesome-common-types': + specifier: ^6.5.2 + version: 6.6.0 + '@fortawesome/fontawesome-svg-core': + specifier: ^6.5.2 + version: 6.6.0 + '@fortawesome/free-brands-svg-icons': + specifier: ^6.5.2 + version: 6.6.0 + '@fortawesome/free-regular-svg-icons': + specifier: ^6.5.2 + version: 6.6.0 + '@fortawesome/free-solid-svg-icons': + specifier: ^6.5.2 + version: 6.6.0 + '@fortawesome/vue-fontawesome': + specifier: ^3.0.8 + version: 3.0.8(@fortawesome/fontawesome-svg-core@6.6.0)(vue@3.5.12(typescript@5.6.3)) + '@popperjs/core': + specifier: ^2.11.8 + version: 2.11.8 + '@types/getos': + specifier: ^3.0.4 + version: 3.0.4 + '@types/humanize-duration': + specifier: ^3.27.4 + version: 3.27.4 + '@types/javascript-time-ago': + specifier: ^2.0.8 + version: 2.0.8 + '@types/md5': + specifier: ^2.3.5 + version: 2.3.5 + '@types/pinyin': + specifier: ^2.10.2 + version: 2.10.2 + '@types/showdown': + specifier: ^2.0.6 + version: 2.0.6 + '@types/url-join': + specifier: ^4.0.3 + version: 4.0.3 + async-validator: + specifier: ^4.2.5 + version: 4.2.5 + atom-material-icons: + specifier: ^3.0.0 + version: 3.0.0 + axios: + specifier: ^1.7.4 + version: 1.7.7 + core-js: + specifier: ^3.37.1 + version: 3.38.1 + crawlab-vue3-dropzone: + specifier: 3.0.3 + version: 3.0.3(vue@3.5.12(typescript@5.6.3)) + cron-parser: + specifier: ^4.9.0 + version: 4.9.0 + cronstrue: + specifier: ^2.50.0 + version: 2.50.0 + dayjs: + specifier: ^1.11.11 + version: 1.11.13 + element-plus: + specifier: ^2.7.6 + version: 2.8.5(vue@3.5.12(typescript@5.6.3)) + font-awesome: + specifier: ^4.7.0 + version: 4.7.0 + humanize-duration: + specifier: ^3.32.1 + version: 3.32.1 + javascript-time-ago: + specifier: ^2.5.10 + version: 2.5.11 + md5: + specifier: ^2.3.0 + version: 2.3.0 + monaco-editor: + specifier: ^0.50.0 + version: 0.50.0 + normalize.css: + specifier: ^8.0.1 + version: 8.0.1 + os-name: + specifier: ^5.0.1 + version: 5.0.1 + pinyin: + specifier: ^2.10.2 + version: 2.11.2 + point-cluster: + specifier: ^3.1.8 + version: 3.1.8 + showdown: + specifier: ^2.1.0 + version: 2.1.0 + three: + specifier: ^0.166.0 + version: 0.166.1 + url-join: + specifier: ^4.0.1 + version: 4.0.1 + vue: + specifier: ^3.4 + version: 3.5.12(typescript@5.6.3) + vue-clipboard3: + specifier: ^2.0.0 + version: 2.0.0 + vue-i18n: + specifier: 9.13.1 + version: 9.13.1(vue@3.5.12(typescript@5.6.3)) + vue-router: + specifier: 4.4.0 + version: 4.4.0(vue@3.5.12(typescript@5.6.3)) + vuex: + specifier: ^4.1.0 + version: 4.1.0(vue@3.5.12(typescript@5.6.3)) + devDependencies: + '@types/node': + specifier: ^20.14.8 + version: 20.17.0 + '@vue/language-server': + specifier: ^2.0.24 + version: 2.1.6(typescript@5.6.3) + pnpm: + specifier: ^9.5.0 + version: 9.12.2 + turbo: + specifier: ^2.0.6 + version: 2.2.3 + typescript: + specifier: ^5 + version: 5.6.3 + vite: + specifier: ^5.4.6 + version: 5.4.10(@types/node@20.17.0)(sass@1.80.4) + vue-tsc: + specifier: ^2.0.24 + version: 2.1.6(typescript@5.6.3) + + apps/crawlab: + dependencies: + crawlab-ui: + specifier: workspace:crawlab-ui + version: link:../../packages/crawlab-ui + devDependencies: + '@types/node': + specifier: ^20.14.8 + version: 20.17.0 + '@vitejs/plugin-vue': + specifier: ^5.0.5 + version: 5.0.5(vite@5.4.10(@types/node@20.17.0)(sass@1.80.1))(vue@3.5.12(typescript@5.6.3)) + '@vue/compiler-sfc': + specifier: ^3.2.45 + version: 3.5.12 + pnpm: + specifier: ^9 + version: 9.12.2 + rollup-plugin-external-globals: + specifier: ^0.10.0 + version: 0.10.0(rollup@4.24.0) + rollup-plugin-visualizer: + specifier: ^5.12.0 + version: 5.12.0(rollup@4.24.0) + sass: + specifier: ^1.56.1 + version: 1.80.1 + typescript: + specifier: ^5 + version: 5.6.3 + vite: + specifier: ^5.4.6 + version: 5.4.10(@types/node@20.17.0)(sass@1.80.1) + vite-aliases: + specifier: ^0.11.7 + version: 0.11.7(vite@5.4.10(@types/node@20.17.0)(sass@1.80.1)) + vite-plugin-dynamic-import: + specifier: ^1.5.0 + version: 1.6.0 + vite-plugin-externalize-deps: + specifier: ^0.8.0 + version: 0.8.0(vite@5.4.10(@types/node@20.17.0)(sass@1.80.1)) + vue-tsc: + specifier: ^2.0.22 + version: 2.1.6(typescript@5.6.3) + + packages/crawlab-ui: + dependencies: + '@element-plus/icons-vue': + specifier: ^2.3.1 + version: 2.3.1(vue@3.5.12(typescript@5.6.3)) + '@fortawesome/fontawesome-common-types': + specifier: ^6.5.2 + version: 6.6.0 + '@fortawesome/fontawesome-svg-core': + specifier: ^6.5.2 + version: 6.6.0 + '@fortawesome/free-brands-svg-icons': + specifier: ^6.5.2 + version: 6.6.0 + '@fortawesome/free-regular-svg-icons': + specifier: ^6.5.2 + version: 6.6.0 + '@fortawesome/free-solid-svg-icons': + specifier: ^6.5.2 + version: 6.6.0 + '@fortawesome/vue-fontawesome': + specifier: ^3.0.8 + version: 3.0.8(@fortawesome/fontawesome-svg-core@6.6.0)(vue@3.5.12(typescript@5.6.3)) + '@lexical/history': + specifier: ^0.16.1 + version: 0.16.1 + '@lexical/rich-text': + specifier: ^0.16.1 + version: 0.16.1 + '@lexical/text': + specifier: ^0.16.1 + version: 0.16.1 + '@lexical/utils': + specifier: ^0.16.1 + version: 0.16.1 + '@popperjs/core': + specifier: ^2.11.8 + version: 2.11.8 + '@types/getos': + specifier: ^3.0.4 + version: 3.0.4 + '@types/humanize-duration': + specifier: ^3.27.4 + version: 3.27.4 + '@types/javascript-time-ago': + specifier: ^2.0.8 + version: 2.0.8 + '@types/lodash': + specifier: ^4.17.6 + version: 4.17.10 + '@types/md5': + specifier: ^2.3.5 + version: 2.3.5 + '@types/pinyin': + specifier: ^2.10.2 + version: 2.10.2 + '@types/showdown': + specifier: ^2.0.6 + version: 2.0.6 + '@types/url-join': + specifier: ^4.0.3 + version: 4.0.3 + async-validator: + specifier: ^4.2.5 + version: 4.2.5 + atom-material-icons: + specifier: ^3.0.0 + version: 3.0.0 + axios: + specifier: ^1.7.2 + version: 1.7.7 + chalk: + specifier: ^5.3.0 + version: 5.3.0 + chart.js: + specifier: ^4.4.3 + version: 4.4.5 + clipboard: + specifier: ^2.0.11 + version: 2.0.11 + core-js: + specifier: ^3.37.1 + version: 3.38.1 + crawlab-vue3-dropzone: + specifier: 3.0.3 + version: 3.0.3(vue@3.5.12(typescript@5.6.3)) + cron-parser: + specifier: ^4.9.0 + version: 4.9.0 + cronstrue: + specifier: ^2.50.0 + version: 2.50.0 + dayjs: + specifier: ^1.11.11 + version: 1.11.13 + element-plus: + specifier: ^2.7.6 + version: 2.8.5(vue@3.5.12(typescript@5.6.3)) + font-awesome: + specifier: ^4.7.0 + version: 4.7.0 + humanize-duration: + specifier: ^3.32.1 + version: 3.32.1 + javascript-time-ago: + specifier: ^2.5.10 + version: 2.5.11 + json-editor-vue: + specifier: ^0.17.0 + version: 0.17.2(@lezer/common@1.2.3)(vue@3.5.12(typescript@5.6.3)) + lexical: + specifier: ^0.16.1 + version: 0.16.1 + lodash: + specifier: ^4.17.21 + version: 4.17.21 + md5: + specifier: ^2.3.0 + version: 2.3.0 + monaco-editor: + specifier: ^0.50.0 + version: 0.50.0 + normalize.css: + specifier: ^8.0.1 + version: 8.0.1 + os-name: + specifier: ^5.0.1 + version: 5.0.1 + pinyin: + specifier: ^2.10.2 + version: 2.11.2 + point-cluster: + specifier: ^3.1.8 + version: 3.1.8 + showdown: + specifier: ^2.1.0 + version: 2.1.0 + three: + specifier: ^0.166.1 + version: 0.166.1 + tiny-invariant: + specifier: ^1.3.3 + version: 1.3.3 + url-join: + specifier: ^4.0.1 + version: 4.0.1 + url-regex: + specifier: ^5.0.0 + version: 5.0.0 + uuid: + specifier: ^10.0.0 + version: 10.0.0 + vue: + specifier: ^3.4 + version: 3.5.12(typescript@5.6.3) + vue-clipboard3: + specifier: ^2.0.0 + version: 2.0.0 + vue-i18n: + specifier: 9.13.1 + version: 9.13.1(vue@3.5.12(typescript@5.6.3)) + vue-router: + specifier: ^4.4.0 + version: 4.4.0(vue@3.5.12(typescript@5.6.3)) + vuex: + specifier: ^4.1.0 + version: 4.1.0(vue@3.5.12(typescript@5.6.3)) + devDependencies: + '@lexical/code': + specifier: ^0.16.1 + version: 0.16.1 + '@lexical/html': + specifier: ^0.16.1 + version: 0.16.1 + '@lexical/link': + specifier: ^0.16.1 + version: 0.16.1 + '@lexical/list': + specifier: ^0.16.1 + version: 0.16.1 + '@lexical/markdown': + specifier: ^0.16.1 + version: 0.16.1 + '@lexical/selection': + specifier: ^0.16.1 + version: 0.16.1 + '@lexical/table': + specifier: ^0.16.1 + version: 0.16.1 + '@types/jest': + specifier: ^29.5.12 + version: 29.5.14 + '@types/node': + specifier: ^20.14.9 + version: 20.17.0 + '@types/node-os-utils': + specifier: ^1.3.4 + version: 1.3.4 + '@types/three': + specifier: ^0.166.0 + version: 0.166.0 + '@vitejs/plugin-vue': + specifier: 5.0.5 + version: 5.0.5(vite@5.4.10(@types/node@20.17.0)(sass@1.80.4))(vue@3.5.12(typescript@5.6.3)) + '@vitejs/plugin-vue-jsx': + specifier: ^4.0.0 + version: 4.0.1(vite@5.4.10(@types/node@20.17.0)(sass@1.80.4))(vue@3.5.12(typescript@5.6.3)) + '@vue/compiler-sfc': + specifier: ^3.4.31 + version: 3.5.12 + autoprefixer: + specifier: ^10.4.19 + version: 10.4.20(postcss@8.4.47) + base64-img: + specifier: ^1.0.4 + version: 1.0.4 + chartjs-adapter-date-fns: + specifier: ^3.0.0 + version: 3.0.0(chart.js@4.4.5)(date-fns@4.1.0) + cross-env: + specifier: ^7.0.3 + version: 7.0.3 + esno: + specifier: ^4.7.0 + version: 4.8.0 + fast-glob: + specifier: ^3.3.2 + version: 3.3.2 + fs-extra: + specifier: ^11.2.0 + version: 11.2.0 + globals: + specifier: ^15.8.0 + version: 15.11.0 + increase-memory-limit: + specifier: ^1.0.7 + version: 1.0.7 + jest: + specifier: ^29.7.0 + version: 29.7.0(@types/node@20.17.0) + klaw-sync: + specifier: ^6.0.0 + version: 6.0.0 + mitt: + specifier: ^3.0.1 + version: 3.0.1 + postcss: + specifier: ^8.4.39 + version: 8.4.47 + prettier: + specifier: ^3.3.2 + version: 3.3.3 + prismjs: + specifier: ^1.29.0 + version: 1.29.0 + rollup-plugin-external-globals: + specifier: ^0.10.0 + version: 0.10.0(rollup@4.24.0) + rollup-plugin-visualizer: + specifier: ^5.12.0 + version: 5.12.0(rollup@4.24.0) + sass: + specifier: ^1.80.4 + version: 1.80.4 + serve: + specifier: ^14.2.3 + version: 14.2.4 + tailwindcss: + specifier: ^3.4.4 + version: 3.4.14 + typescript: + specifier: ^5.5.3 + version: 5.6.3 + vite: + specifier: ^5.3.2 + version: 5.4.10(@types/node@20.17.0)(sass@1.80.4) + vite-plugin-dynamic-import: + specifier: ^1.5.0 + version: 1.6.0 + vite-svg-loader: + specifier: ^5.1.0 + version: 5.1.0(vue@3.5.12(typescript@5.6.3)) + vue-chartjs: + specifier: ^5.3.1 + version: 5.3.1(chart.js@4.4.5)(vue@3.5.12(typescript@5.6.3)) + vue-tsc: + specifier: ^2.0.24 + version: 2.1.6(typescript@5.6.3) packages: - /@arr/every@1.0.1: + '@alloc/quick-lru@5.2.0': + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + + '@arr/every@1.0.1': resolution: {integrity: sha512-UQFQ6SgyJ6LX42W8rHCs8KVc0JS0tzVL9ct4XYedJukskYVWTo49tNiMEK9C2HTyarbNiT/RVIRSY82vH+6sTg==} engines: {node: '>=4'} - dev: false - /@babel/helper-string-parser@7.19.4: - resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==} + '@babel/code-frame@7.25.9': + resolution: {integrity: sha512-z88xeGxnzehn2sqZ8UdGQEvYErF1odv2CftxInpSYJt6uHuPe9YjahKZITGs3l5LeI9d2ROG+obuDAoSlqbNfQ==} engines: {node: '>=6.9.0'} - dev: false - /@babel/helper-validator-identifier@7.19.1: - resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} + '@babel/compat-data@7.25.9': + resolution: {integrity: sha512-yD+hEuJ/+wAJ4Ox2/rpNv5HIuPG82x3ZlQvYVn8iYCprdxzE7P1udpGF1jyjQVBU4dgznN+k2h103vxZ7NdPyw==} engines: {node: '>=6.9.0'} - dev: false - - /@babel/parser@7.20.5: - resolution: {integrity: sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==} - engines: {node: '>=6.0.0'} - hasBin: true - dependencies: - '@babel/types': 7.20.5 - dev: false - /@babel/types@7.20.5: - resolution: {integrity: sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==} + '@babel/core@7.25.9': + resolution: {integrity: sha512-WYvQviPw+Qyib0v92AwNIrdLISTp7RfDkM7bPqBvpbnhY4wq8HvHBZREVdYDXk98C8BkOIVnHAY3yvj7AVISxQ==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-string-parser': 7.19.4 - '@babel/helper-validator-identifier': 7.19.1 - to-fast-properties: 2.0.0 - dev: false - - /@ctrl/tinycolor@3.4.1: - resolution: {integrity: sha512-ej5oVy6lykXsvieQtqZxCOaLT+xD4+QNarq78cIYISHmZXshCvROLudpQN3lfL8G0NL7plMSSK+zlyvCaIJ4Iw==} - engines: {node: '>=10'} - dev: false - /@element-plus/icons-vue@0.2.7(vue@3.2.45): - resolution: {integrity: sha512-S8kDbfVaWkQvbUYQE1ui448tzaHfUvyESCep9J6uPRlViyQPXjdIfwLBhV6AmQSOfFS8rL+xehJGhvzPXLrSBg==} - peerDependencies: - vue: ^3.2.0 - dependencies: - vue: 3.2.45 - dev: false + '@babel/generator@7.25.9': + resolution: {integrity: sha512-omlUGkr5EaoIJrhLf9CJ0TvjBRpd9+AXRG//0GEQ9THSo8wPiTlbpy1/Ow8ZTrbXpjd9FHXfbFQx32I04ht0FA==} + engines: {node: '>=6.9.0'} - /@element-plus/icons@0.0.11: - resolution: {integrity: sha512-iKQXSxXu131Ai+I9Ymtcof9WId7kaXvB1+WRfAfpQCW7UiAMYgdNDqb/u0hgTo2Yq3MwC4MWJnNuTBEpG8r7+A==} - deprecated: Please use @element-plus/icons-vue instead. - dev: false + '@babel/helper-annotate-as-pure@7.25.9': + resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} + engines: {node: '>=6.9.0'} - /@esbuild/android-arm@0.15.16: - resolution: {integrity: sha512-nyB6CH++2mSgx3GbnrJsZSxzne5K0HMyNIWafDHqYy7IwxFc4fd/CgHVZXr8Eh+Q3KbIAcAe3vGyqIPhGblvMQ==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true + '@babel/helper-compilation-targets@7.25.9': + resolution: {integrity: sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==} + engines: {node: '>=6.9.0'} - /@esbuild/linux-loong64@0.15.16: - resolution: {integrity: sha512-SDLfP1uoB0HZ14CdVYgagllgrG7Mdxhkt4jDJOKl/MldKrkQ6vDJMZKl2+5XsEY/Lzz37fjgLQoJBGuAw/x8kQ==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - requiresBuild: true - dev: true - optional: true + '@babel/helper-create-class-features-plugin@7.25.9': + resolution: {integrity: sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 - /@fortawesome/fontawesome-common-types@6.2.1: - resolution: {integrity: sha512-Sz07mnQrTekFWLz5BMjOzHl/+NooTdW8F8kDQxjWwbpOJcnoSg4vUDng8d/WR1wOxM0O+CY9Zw0nR054riNYtQ==} - engines: {node: '>=6'} - requiresBuild: true - dev: false + '@babel/helper-member-expression-to-functions@7.25.9': + resolution: {integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==} + engines: {node: '>=6.9.0'} - /@fortawesome/fontawesome-svg-core@6.2.1: - resolution: {integrity: sha512-HELwwbCz6C1XEcjzyT1Jugmz2NNklMrSPjZOWMlc+ZsHIVk+XOvOXLGGQtFBwSyqfJDNgRq4xBCwWOaZ/d9DEA==} - engines: {node: '>=6'} - requiresBuild: true - dependencies: - '@fortawesome/fontawesome-common-types': 6.2.1 - dev: false + '@babel/helper-module-imports@7.25.9': + resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} + engines: {node: '>=6.9.0'} - /@fortawesome/free-brands-svg-icons@6.2.1: - resolution: {integrity: sha512-L8l4MfdHPmZlJ72PvzdfwOwbwcCAL0vx48tJRnI6u1PJXh+j2f3yDoKyQgO3qjEsgD5Fr2tQV/cPP8F/k6aUig==} - engines: {node: '>=6'} - requiresBuild: true - dependencies: - '@fortawesome/fontawesome-common-types': 6.2.1 - dev: false + '@babel/helper-module-transforms@7.25.9': + resolution: {integrity: sha512-TvLZY/F3+GvdRYFZFyxMvnsKi+4oJdgZzU3BoGN9Uc2d9C6zfNwJcKKhjqLAhK8i46mv93jsO74fDh3ih6rpHA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 - /@fortawesome/free-regular-svg-icons@6.2.1: - resolution: {integrity: sha512-wiqcNDNom75x+pe88FclpKz7aOSqS2lOivZeicMV5KRwOAeypxEYWAK/0v+7r+LrEY30+qzh8r2XDaEHvoLsMA==} - engines: {node: '>=6'} - requiresBuild: true - dependencies: - '@fortawesome/fontawesome-common-types': 6.2.1 - dev: false + '@babel/helper-optimise-call-expression@7.25.9': + resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==} + engines: {node: '>=6.9.0'} - /@fortawesome/free-solid-svg-icons@6.2.1: - resolution: {integrity: sha512-oKuqrP5jbfEPJWTij4sM+/RvgX+RMFwx3QZCZcK9PrBDgxC35zuc7AOFsyMjMd/PIFPeB2JxyqDr5zs/DZFPPw==} - engines: {node: '>=6'} - requiresBuild: true - dependencies: - '@fortawesome/fontawesome-common-types': 6.2.1 - dev: false + '@babel/helper-plugin-utils@7.25.9': + resolution: {integrity: sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==} + engines: {node: '>=6.9.0'} - /@fortawesome/vue-fontawesome@3.0.2(@fortawesome/fontawesome-svg-core@6.2.1)(vue@3.2.45): - resolution: {integrity: sha512-xHVtVY8ASUeEvgcA/7vULUesENhD+pi/EirRHdMBqooHlXBqK+yrV6d8tUye1m5UKQKVgYAHMhUBfOnoiwvc8Q==} + '@babel/helper-replace-supers@7.25.9': + resolution: {integrity: sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==} + engines: {node: '>=6.9.0'} peerDependencies: - '@fortawesome/fontawesome-svg-core': ~1 || ~6 - vue: '>= 3.0.0 < 4' - dependencies: - '@fortawesome/fontawesome-svg-core': 6.2.1 - vue: 3.2.45 - dev: false + '@babel/core': ^7.0.0 - /@intlify/core-base@9.1.9: - resolution: {integrity: sha512-x5T0p/Ja0S8hs5xs+ImKyYckVkL4CzcEXykVYYV6rcbXxJTe2o58IquSqX9bdncVKbRZP7GlBU1EcRaQEEJ+vw==} - engines: {node: '>= 10'} - dependencies: - '@intlify/devtools-if': 9.1.9 - '@intlify/message-compiler': 9.1.9 - '@intlify/message-resolver': 9.1.9 - '@intlify/runtime': 9.1.9 - '@intlify/shared': 9.1.9 - '@intlify/vue-devtools': 9.1.9 - dev: false + '@babel/helper-simple-access@7.25.9': + resolution: {integrity: sha512-c6WHXuiaRsJTyHYLJV75t9IqsmTbItYfdj99PnzYGQZkYKvan5/2jKJ7gu31J3/BJ/A18grImSPModuyG/Eo0Q==} + engines: {node: '>=6.9.0'} - /@intlify/devtools-if@9.1.9: - resolution: {integrity: sha512-oKSMKjttG3Ut/1UGEZjSdghuP3fwA15zpDPcjkf/1FjlOIm6uIBGMNS5jXzsZy593u+P/YcnrZD6cD3IVFz9vQ==} - engines: {node: '>= 10'} - dependencies: - '@intlify/shared': 9.1.9 - dev: false + '@babel/helper-skip-transparent-expression-wrappers@7.25.9': + resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==} + engines: {node: '>=6.9.0'} - /@intlify/message-compiler@9.1.9: - resolution: {integrity: sha512-6YgCMF46Xd0IH2hMRLCssZI3gFG4aywidoWQ3QP4RGYQXQYYfFC54DxhSgfIPpVoPLQ+4AD29eoYmhiHZ+qLFQ==} - engines: {node: '>= 10'} - dependencies: - '@intlify/message-resolver': 9.1.9 - '@intlify/shared': 9.1.9 - source-map: 0.6.1 - dev: false + '@babel/helper-string-parser@7.25.7': + resolution: {integrity: sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==} + engines: {node: '>=6.9.0'} - /@intlify/message-resolver@9.1.9: - resolution: {integrity: sha512-Lx/DBpigeK0sz2BBbzv5mu9/dAlt98HxwbG7xLawC3O2xMF9MNWU5FtOziwYG6TDIjNq0O/3ZbOJAxwITIWXEA==} - engines: {node: '>= 10'} - dev: false + '@babel/helper-string-parser@7.25.9': + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} + engines: {node: '>=6.9.0'} - /@intlify/runtime@9.1.9: - resolution: {integrity: sha512-XgPw8+UlHCiie3fI41HPVa/VDJb3/aSH7bLhY1hJvlvNV713PFtb4p4Jo+rlE0gAoMsMCGcsiT982fImolSltg==} - engines: {node: '>= 10'} - dependencies: - '@intlify/message-compiler': 9.1.9 - '@intlify/message-resolver': 9.1.9 - '@intlify/shared': 9.1.9 - dev: false + '@babel/helper-validator-identifier@7.25.7': + resolution: {integrity: sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==} + engines: {node: '>=6.9.0'} - /@intlify/shared@9.1.9: - resolution: {integrity: sha512-xKGM1d0EAxdDFCWedcYXOm6V5Pfw/TMudd6/qCdEb4tv0hk9EKeg7lwQF1azE0dP2phvx0yXxrt7UQK+IZjNdw==} - engines: {node: '>= 10'} - dev: false + '@babel/helper-validator-identifier@7.25.9': + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} + engines: {node: '>=6.9.0'} - /@intlify/vue-devtools@9.1.9: - resolution: {integrity: sha512-YPehH9uL4vZcGXky4Ev5qQIITnHKIvsD2GKGXgqf+05osMUI6WSEQHaN9USRa318Rs8RyyPCiDfmA0hRu3k7og==} - engines: {node: '>= 10'} - dependencies: - '@intlify/message-resolver': 9.1.9 - '@intlify/runtime': 9.1.9 - '@intlify/shared': 9.1.9 - dev: false + '@babel/helper-validator-option@7.25.9': + resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.25.9': + resolution: {integrity: sha512-oKWp3+usOJSzDZOucZUAMayhPz/xVjzymyDzUN8dk0Wd3RWMlGLXi07UCQ/CgQVb8LvXx3XBajJH4XGgkt7H7g==} + engines: {node: '>=6.9.0'} - /@jridgewell/sourcemap-codec@1.4.15: - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - dev: true + '@babel/highlight@7.25.9': + resolution: {integrity: sha512-llL88JShoCsth8fF8R4SJnIn+WLvR6ccFxu1H3FlMhDontdcmZWf2HgIZ7AIqV3Xcck1idlohrN4EUBQz6klbw==} + engines: {node: '>=6.9.0'} - /@mapbox/node-pre-gyp@1.0.10: - resolution: {integrity: sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA==} + '@babel/parser@7.25.8': + resolution: {integrity: sha512-HcttkxzdPucv3nNFmfOOMfFf64KgdJVqm1KaCm25dPGMLElo9nsLvXeJECQg8UzPuBGLyTSA0ZzqCtDSzKTEoQ==} + engines: {node: '>=6.0.0'} hasBin: true - dependencies: - detect-libc: 2.0.1 - https-proxy-agent: 5.0.1 - make-dir: 3.1.0 - node-fetch: 2.6.7 - nopt: 5.0.0 - npmlog: 5.0.1 - rimraf: 3.0.2 - semver: 7.3.8 - tar: 6.1.12 - transitivePeerDependencies: - - encoding - - supports-color - dev: false - optional: true - /@polka/url@0.5.0: - resolution: {integrity: sha512-oZLYFEAzUKyi3SKnXvj32ZCEGH6RDnao7COuCVhDydMS9NrCSVXhM79VaKyP5+Zc33m0QXEd2DN3UkU7OsHcfw==} - dev: false + '@babel/parser@7.25.9': + resolution: {integrity: sha512-aI3jjAAO1fh7vY/pBGsn1i9LDbRP43+asrRlkPuTXW5yHXtd1NgTEMudbBoDDxrf1daEEfPJqR+JBMakzrR4Dg==} + engines: {node: '>=6.0.0'} + hasBin: true - /@polka/url@1.0.0-next.21: - resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==} - dev: false + '@babel/plugin-syntax-async-generators@7.8.4': + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 - /@popperjs/core@2.11.6: - resolution: {integrity: sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==} - dev: false + '@babel/plugin-syntax-bigint@7.8.3': + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + peerDependencies: + '@babel/core': ^7.0.0-0 - /@rollup/pluginutils@5.0.2(rollup@3.26.2): - resolution: {integrity: sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==} - engines: {node: '>=14.0.0'} + '@babel/plugin-syntax-class-properties@7.12.13': + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0 - peerDependenciesMeta: - rollup: - optional: true - dependencies: - '@types/estree': 1.0.0 - estree-walker: 2.0.2 - picomatch: 2.3.1 - rollup: 3.26.2 - dev: true + '@babel/core': ^7.0.0-0 - /@types/codemirror@0.0.103: - resolution: {integrity: sha512-dYQTrIcZal0pnYz/ODjpJB+yadKJhGHywylAlHKjE8VSzGiw2A+6S+hD6jfyXw02ToFR9DO52X+O1pvHn31sbg==} - dependencies: - '@types/tern': 0.23.4 - dev: false + '@babel/plugin-syntax-class-static-block@7.14.5': + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - /@types/echarts@4.9.16: - resolution: {integrity: sha512-bfiagfPw3dWauAIJ9fgoJQoL4hLWlGcltqwbE6LGye0NIY5xnbZau+mDmadCzGojic3MWuFDCUiO25kl4sRGeA==} - dependencies: - '@types/zrender': 4.0.3 - dev: false + '@babel/plugin-syntax-import-attributes@7.25.9': + resolution: {integrity: sha512-u3EN9ub8LyYvgTnrgp8gboElouayiwPdnM7x5tcnW3iSt09/lQYPwMNK40I9IUxo7QOZhAsPHCmmuO7EPdruqg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - /@types/estree@1.0.0: - resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==} + '@babel/plugin-syntax-import-meta@7.10.4': + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 - /@types/getos@3.0.1: - resolution: {integrity: sha512-igBIU7ZwzRrVGYf0nQyISMJZjuDF+5T2v8gnqXGpIbMN7j/pk6s4uSHXfolXPMUZET6aCfG9xoPDT47oM9RN6A==} - dev: false + '@babel/plugin-syntax-json-strings@7.8.3': + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 - /@types/humanize-duration@3.27.1: - resolution: {integrity: sha512-K3e+NZlpCKd6Bd/EIdqjFJRFHbrq5TzPPLwREk5Iv/YoIjQrs6ljdAUCo+Lb2xFlGNOjGSE0dqsVD19cZL137w==} - dev: false + '@babel/plugin-syntax-jsx@7.25.9': + resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - /@types/javascript-time-ago@2.0.3: - resolution: {integrity: sha512-G6SdYh6gHxgCTU0s4cMIRHwRO4p3f7jQSZbDPfUOZpUAG1od3rTjT0e8rxGThUiTTWQHwpBRws8eHO8D2QqfkA==} - dev: false + '@babel/plugin-syntax-logical-assignment-operators@7.10.4': + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 - /@types/md5@2.3.2: - resolution: {integrity: sha512-v+JFDu96+UYJ3/UWzB0mEglIS//MZXgRaJ4ubUPwOM0gvLc/kcQ3TWNYwENEK7/EcXGQVrW8h/XqednSjBd/Og==} - dev: false + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 - /@types/pinyin@2.10.0: - resolution: {integrity: sha512-YLty6FPYiBgxNbQNaTRJquvflRdG026jjOpjNXR7HdGEJPGtmPBp1x9LkWePCNA/ClaTT0hYem080TbRCMLbew==} - dev: false + '@babel/plugin-syntax-numeric-separator@7.10.4': + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 - /@types/showdown@1.9.4: - resolution: {integrity: sha512-50ehC3IAijfkvoNqmQ+VL73S7orOxmAK8ljQAFBv8o7G66lAZyxQj1L3BAv2dD86myLXI+sgKP1kcxAaxW356w==} - dev: false + '@babel/plugin-syntax-object-rest-spread@7.8.3': + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 - /@types/simplemde@1.11.8: - resolution: {integrity: sha512-NF3MJ1jdP5nJB5DH2HNmGQK61mRr6Rxoe+EWboxR0XBrIS95/PgHuP+Ry6rCJ63DMMX70OKxvJ4bCP4IIvLhPg==} - dev: false + '@babel/plugin-syntax-optional-catch-binding@7.8.3': + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 - /@types/tern@0.23.4: - resolution: {integrity: sha512-JAUw1iXGO1qaWwEOzxTKJZ/5JxVeON9kvGZ/osgZaJImBnyjyn0cjovPsf6FNLmyGY8Vw9DoXZCMlfMkMwHRWg==} - dependencies: - '@types/estree': 1.0.0 - dev: false + '@babel/plugin-syntax-optional-chaining@7.8.3': + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 - /@types/url-join@4.0.1: - resolution: {integrity: sha512-wDXw9LEEUHyV+7UWy7U315nrJGJ7p1BzaCxDpEoLr789Dk1WDVMMlf3iBfbG2F8NdWnYyFbtTxUn2ZNbm1Q4LQ==} - dev: false + '@babel/plugin-syntax-private-property-in-object@7.14.5': + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - /@types/zrender@4.0.3: - resolution: {integrity: sha512-EPI269lkHNsObwILJ1k1z7znLjKyePuWRy/XKK0shSGpBb9cIX307arcwJV4+2NeZj5wEjN06r4D8yFv7sI06g==} - dev: false + '@babel/plugin-syntax-top-level-await@7.14.5': + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - /@vue/compiler-core@3.2.45: - resolution: {integrity: sha512-rcMj7H+PYe5wBV3iYeUgbCglC+pbpN8hBLTJvRiK2eKQiWqu+fG9F+8sW99JdL4LQi7Re178UOxn09puSXvn4A==} - dependencies: - '@babel/parser': 7.20.5 - '@vue/shared': 3.2.45 - estree-walker: 2.0.2 - source-map: 0.6.1 - dev: false + '@babel/plugin-syntax-typescript@7.25.9': + resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - /@vue/compiler-dom@3.2.45: - resolution: {integrity: sha512-tyYeUEuKqqZO137WrZkpwfPCdiiIeXYCcJ8L4gWz9vqaxzIQRccTSwSWZ/Axx5YR2z+LvpUbmPNXxuBU45lyRw==} - dependencies: - '@vue/compiler-core': 3.2.45 - '@vue/shared': 3.2.45 - dev: false + '@babel/plugin-transform-typescript@7.25.9': + resolution: {integrity: sha512-7PbZQZP50tzv2KGGnhh82GSyMB01yKY9scIjf1a+GfZCtInOWqUH5+1EBU4t9fyR5Oykkkc9vFTs4OHrhHXljQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - /@vue/compiler-sfc@3.2.45: - resolution: {integrity: sha512-1jXDuWah1ggsnSAOGsec8cFjT/K6TMZ0sPL3o3d84Ft2AYZi2jWJgRMjw4iaK0rBfA89L5gw427H4n1RZQBu6Q==} - dependencies: - '@babel/parser': 7.20.5 - '@vue/compiler-core': 3.2.45 - '@vue/compiler-dom': 3.2.45 - '@vue/compiler-ssr': 3.2.45 - '@vue/reactivity-transform': 3.2.45 - '@vue/shared': 3.2.45 - estree-walker: 2.0.2 - magic-string: 0.25.9 - postcss: 8.4.19 - source-map: 0.6.1 - dev: false + '@babel/template@7.25.9': + resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} + engines: {node: '>=6.9.0'} - /@vue/compiler-ssr@3.2.45: - resolution: {integrity: sha512-6BRaggEGqhWht3lt24CrIbQSRD5O07MTmd+LjAn5fJj568+R9eUD2F7wMQJjX859seSlrYog7sUtrZSd7feqrQ==} - dependencies: - '@vue/compiler-dom': 3.2.45 - '@vue/shared': 3.2.45 - dev: false + '@babel/traverse@7.25.9': + resolution: {integrity: sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==} + engines: {node: '>=6.9.0'} - /@vue/devtools-api@6.4.5: - resolution: {integrity: sha512-JD5fcdIuFxU4fQyXUu3w2KpAJHzTVdN+p4iOX2lMWSHMOoQdMAcpFLZzm9Z/2nmsoZ1a96QEhZ26e50xLBsgOQ==} - dev: false + '@babel/types@7.25.8': + resolution: {integrity: sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg==} + engines: {node: '>=6.9.0'} - /@vue/reactivity-transform@3.2.45: - resolution: {integrity: sha512-BHVmzYAvM7vcU5WmuYqXpwaBHjsS8T63jlKGWVtHxAHIoMIlmaMyurUSEs1Zcg46M4AYT5MtB1U274/2aNzjJQ==} - dependencies: - '@babel/parser': 7.20.5 - '@vue/compiler-core': 3.2.45 - '@vue/shared': 3.2.45 - estree-walker: 2.0.2 - magic-string: 0.25.9 - dev: false + '@babel/types@7.25.9': + resolution: {integrity: sha512-OwS2CM5KocvQ/k7dFJa8i5bNGJP0hXWfVCfDkqRFP1IreH1JDC7wG6eCYCi0+McbfT8OR/kNqsI0UU0xP9H6PQ==} + engines: {node: '>=6.9.0'} - /@vue/reactivity@3.2.45: - resolution: {integrity: sha512-PRvhCcQcyEVohW0P8iQ7HDcIOXRjZfAsOds3N99X/Dzewy8TVhTCT4uXpAHfoKjVTJRA0O0K+6QNkDIZAxNi3A==} - dependencies: - '@vue/shared': 3.2.45 - dev: false + '@bcoe/v8-coverage@0.2.3': + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - /@vue/runtime-core@3.2.45: - resolution: {integrity: sha512-gzJiTA3f74cgARptqzYswmoQx0fIA+gGYBfokYVhF8YSXjWTUA2SngRzZRku2HbGbjzB6LBYSbKGIaK8IW+s0A==} - dependencies: - '@vue/reactivity': 3.2.45 - '@vue/shared': 3.2.45 - dev: false + '@codemirror/autocomplete@6.18.1': + resolution: {integrity: sha512-iWHdj/B1ethnHRTwZj+C1obmmuCzquH29EbcKr0qIjA9NfDeBDJ7vs+WOHsFeLeflE4o+dHfYndJloMKHUkWUA==} + peerDependencies: + '@codemirror/language': ^6.0.0 + '@codemirror/state': ^6.0.0 + '@codemirror/view': ^6.0.0 + '@lezer/common': ^1.0.0 - /@vue/runtime-dom@3.2.45: - resolution: {integrity: sha512-cy88YpfP5Ue2bDBbj75Cb4bIEZUMM/mAkDMfqDTpUYVgTf/kuQ2VQ8LebuZ8k6EudgH8pYhsGWHlY0lcxlvTwA==} - dependencies: - '@vue/runtime-core': 3.2.45 - '@vue/shared': 3.2.45 - csstype: 2.6.21 - dev: false + '@codemirror/commands@6.7.0': + resolution: {integrity: sha512-+cduIZ2KbesDhbykV02K25A5xIVrquSPz4UxxYBemRlAT2aW8dhwUgLDwej7q/RJUHKk4nALYcR1puecDvbdqw==} - /@vue/server-renderer@3.2.45(vue@3.2.45): - resolution: {integrity: sha512-ebiMq7q24WBU1D6uhPK//2OTR1iRIyxjF5iVq/1a5I1SDMDyDu4Ts6fJaMnjrvD3MqnaiFkKQj+LKAgz5WIK3g==} - peerDependencies: - vue: 3.2.45 - dependencies: - '@vue/compiler-ssr': 3.2.45 - '@vue/shared': 3.2.45 - vue: 3.2.45 - dev: false + '@codemirror/lang-json@6.0.1': + resolution: {integrity: sha512-+T1flHdgpqDDlJZ2Lkil/rLiRy684WMLc74xUnjJH48GQdfJo/pudlTRreZmKwzP8/tGdKf83wlbAdOCzlJOGQ==} - /@vue/shared@3.2.45: - resolution: {integrity: sha512-Ewzq5Yhimg7pSztDV+RH1UDKBzmtqieXQlpTVm2AwraoRL/Rks96mvd8Vgi7Lj+h+TH8dv7mXD3FRZR3TUvbSg==} - dev: false + '@codemirror/language@6.10.3': + resolution: {integrity: sha512-kDqEU5sCP55Oabl6E7m5N+vZRoc0iWqgDVhEKifcHzPzjqCegcO4amfrYVL9PmPZpl4G0yjkpTpUO/Ui8CzO8A==} - /@vueuse/core@7.7.1(vue@3.2.45): - resolution: {integrity: sha512-PRRgbATMpoeUmkCEBtUeJgOwtew8s+4UsEd+Pm7MhkjL2ihCNrSqxNVtM6NFE4uP2sWnkGcZpCjPuNSxowJ1Ow==} - peerDependencies: - '@vue/composition-api': ^1.1.0 - vue: ^2.6.0 || ^3.2.0 - peerDependenciesMeta: - '@vue/composition-api': - optional: true - vue: - optional: true - dependencies: - '@vueuse/shared': 7.7.1(vue@3.2.45) - vue: 3.2.45 - vue-demi: 0.13.11(vue@3.2.45) - dev: false + '@codemirror/lint@6.8.2': + resolution: {integrity: sha512-PDFG5DjHxSEjOXk9TQYYVjZDqlZTFaDBfhQixHnQOEVDDNHUbEh/hstAjcQJaA6FQdZTD1hquXTK0rVBLADR1g==} - /@vueuse/shared@7.7.1(vue@3.2.45): - resolution: {integrity: sha512-rN2qd22AUl7VdBxihagWyhUNHCyVk9IpvBTTfHoLH9G7rGE552X1f+zeCfehuno0zXif13jPw+icW/wn2a0rnQ==} - peerDependencies: - '@vue/composition-api': ^1.1.0 - vue: ^2.6.0 || ^3.2.0 - peerDependenciesMeta: - '@vue/composition-api': - optional: true - vue: - optional: true - dependencies: - vue: 3.2.45 - vue-demi: 0.13.11(vue@3.2.45) - dev: false + '@codemirror/search@6.5.6': + resolution: {integrity: sha512-rpMgcsh7o0GuCDUXKPvww+muLA1pDJaFrpq/CCHtpQJYz8xopu4D1hPcKRoDD0YlF8gZaqTNIRa4VRBWyhyy7Q==} - /abbrev@1.1.1: - resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} - dev: false - optional: true + '@codemirror/state@6.4.1': + resolution: {integrity: sha512-QkEyUiLhsJoZkbumGZlswmAhA7CBU02Wrz7zvH4SrcifbsqwlXShVXg65f3v/ts57W3dqyamEriMhij1Z3Zz4A==} - /accepts@1.3.8: - resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} - engines: {node: '>= 0.6'} - dependencies: - mime-types: 2.1.35 - negotiator: 0.6.3 - dev: false + '@codemirror/view@6.34.1': + resolution: {integrity: sha512-t1zK/l9UiRqwUNPm+pdIT0qzJlzuVckbTEMVNFhfWkGiBQClstzg+78vedCvLSX0xJEZ6lwZbPpnljL7L6iwMQ==} - /acorn-dynamic-import@4.0.0(acorn@6.4.2): - resolution: {integrity: sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==} - deprecated: This is probably built in to whatever tool you're using. If you still need it... idk - peerDependencies: - acorn: ^6.0.0 - dependencies: - acorn: 6.4.2 - dev: false + '@ctrl/tinycolor@3.4.1': + resolution: {integrity: sha512-ej5oVy6lykXsvieQtqZxCOaLT+xD4+QNarq78cIYISHmZXshCvROLudpQN3lfL8G0NL7plMSSK+zlyvCaIJ4Iw==} + engines: {node: '>=10'} - /acorn-jsx@5.3.2(acorn@6.4.2): - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + '@element-plus/icons-vue@2.3.1': + resolution: {integrity: sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg==} peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - acorn: 6.4.2 - dev: false + vue: ^3.2.0 - /acorn@6.4.2: - resolution: {integrity: sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: false + '@emmetio/abbreviation@2.3.3': + resolution: {integrity: sha512-mgv58UrU3rh4YgbE/TzgLQwJ3pFsHHhCLqY20aJq+9comytTXUDNGG/SMtSeMJdkpxgXSXunBGLD8Boka3JyVA==} - /agent-base@6.0.2: - resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} - engines: {node: '>= 6.0.0'} - dependencies: - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: false - optional: true + '@emmetio/css-abbreviation@2.1.8': + resolution: {integrity: sha512-s9yjhJ6saOO/uk1V74eifykk2CBYi01STTK3WlXWGOepyKa23ymJ053+DNQjpFcy1ingpaO7AxCcwLvHFY9tuw==} - /ansi-regex@4.1.1: - resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==} - engines: {node: '>=6'} - dev: false + '@emmetio/css-parser@0.4.0': + resolution: {integrity: sha512-z7wkxRSZgrQHXVzObGkXG+Vmj3uRlpM11oCZ9pbaz0nFejvCDmAiNDpY75+wgXOcffKpj4rzGtwGaZxfJKsJxw==} - /ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} + '@emmetio/html-matcher@1.3.0': + resolution: {integrity: sha512-NTbsvppE5eVyBMuyGfVu2CRrLvo7J4YHb6t9sBFLyY03WYhXET37qA4zOYUjBWFCRHO7pS1B9khERtY0f5JXPQ==} - /ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} - dependencies: - color-convert: 1.9.3 - dev: false + '@emmetio/scanner@1.0.4': + resolution: {integrity: sha512-IqRuJtQff7YHHBk4G8YZ45uB9BaAGcwQeVzgj/zj8/UdOhtQpEIupUhSk8dys6spFIWVZVeK20CzGEnqR5SbqA==} - /ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - dependencies: - color-convert: 2.0.1 - dev: true + '@emmetio/stream-reader-utils@0.1.0': + resolution: {integrity: sha512-ZsZ2I9Vzso3Ho/pjZFsmmZ++FWeEd/txqybHTm4OgaZzdS8V9V/YYWQwg5TC38Z7uLWUV1vavpLLbjJtKubR1A==} - /aproba@2.0.0: - resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} - dev: false - optional: true + '@emmetio/stream-reader@2.2.0': + resolution: {integrity: sha512-fXVXEyFA5Yv3M3n8sUGT7+fvecGrZP4k6FnWWMSZVQf69kAq0LLpaBQLGcPR30m3zMmKYhECP4k/ZkzvhEW5kw==} - /are-we-there-yet@2.0.0: - resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} - engines: {node: '>=10'} - dependencies: - delegates: 1.0.0 - readable-stream: 3.6.0 - dev: false - optional: true + '@esbuild/aix-ppc64@0.21.5': + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] - /argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} - dependencies: - sprintf-js: 1.0.3 - dev: false + '@esbuild/aix-ppc64@0.23.1': + resolution: {integrity: sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] - /array-bounds@1.0.1: - resolution: {integrity: sha512-8wdW3ZGk6UjMPJx/glyEt0sLzzwAE1bhToPsO1W2pbpR2gULyxe3BjSiuJFheP50T/GgODVPz2fuMUmIywt8cQ==} - dev: false + '@esbuild/android-arm64@0.21.5': + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] - /array-normalize@1.1.4: - resolution: {integrity: sha512-fCp0wKFLjvSPmCn4F5Tiw4M3lpMZoHlCjfcs7nNzuj3vqQQ1/a8cgB9DXcpDSn18c+coLnaW7rqfcYCvKbyJXg==} - dependencies: - array-bounds: 1.0.1 - dev: false + '@esbuild/android-arm64@0.23.1': + resolution: {integrity: sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] - /async-validator@4.2.5: - resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==} - dev: false + '@esbuild/android-arm@0.21.5': + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] - /atom-material-icons@3.0.0: - resolution: {integrity: sha512-qtMR5KxQh82iLIFOdrQZViq21GTNT+/mccrVAg41hIlrhpwHAEjCeGj91Iyas9GL28ld0D0hagHv6ipGWlLZHw==} - dependencies: - compression: 1.7.4 - js-yaml: 3.14.1 - polka: 0.5.2 - select-dom: 6.0.2 - sirv: 1.0.19 - sirv-cli: 1.0.14 - optionalDependencies: - lodash.template: 4.5.0 - minimist: 1.2.7 - transitivePeerDependencies: - - supports-color - dev: false + '@esbuild/android-arm@0.23.1': + resolution: {integrity: sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] - /attr-accept@2.2.2: - resolution: {integrity: sha512-7prDjvt9HmqiZ0cl5CRjtS84sEyhsHP2coDkaZKRKVfCDo9s7iw7ChVmar78Gu9pC4SoR/28wFu/G5JJhTnqEg==} + '@esbuild/android-x64@0.21.5': + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/android-x64@0.23.1': + resolution: {integrity: sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.21.5': + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-arm64@0.23.1': + resolution: {integrity: sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.21.5': + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/darwin-x64@0.23.1': + resolution: {integrity: sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.21.5': + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-arm64@0.23.1': + resolution: {integrity: sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.21.5': + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.23.1': + resolution: {integrity: sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.21.5': + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm64@0.23.1': + resolution: {integrity: sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.21.5': + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-arm@0.23.1': + resolution: {integrity: sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.21.5': + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-ia32@0.23.1': + resolution: {integrity: sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.21.5': + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-loong64@0.23.1': + resolution: {integrity: sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.21.5': + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-mips64el@0.23.1': + resolution: {integrity: sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.21.5': + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-ppc64@0.23.1': + resolution: {integrity: sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.21.5': + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-riscv64@0.23.1': + resolution: {integrity: sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.21.5': + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-s390x@0.23.1': + resolution: {integrity: sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.21.5': + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/linux-x64@0.23.1': + resolution: {integrity: sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-x64@0.21.5': + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.23.1': + resolution: {integrity: sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.23.1': + resolution: {integrity: sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.21.5': + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.23.1': + resolution: {integrity: sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.21.5': + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/sunos-x64@0.23.1': + resolution: {integrity: sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.21.5': + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-arm64@0.23.1': + resolution: {integrity: sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.21.5': + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-ia32@0.23.1': + resolution: {integrity: sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.21.5': + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@esbuild/win32-x64@0.23.1': + resolution: {integrity: sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@floating-ui/core@1.6.8': + resolution: {integrity: sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==} + + '@floating-ui/dom@1.6.11': + resolution: {integrity: sha512-qkMCxSR24v2vGkhYDo/UzxfJN3D4syqSjyuTFz6C7XcpU1pASPRieNI0Kj5VP3/503mOfYiGY891ugBX1GlABQ==} + + '@floating-ui/utils@0.2.8': + resolution: {integrity: sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==} + + '@fortawesome/fontawesome-common-types@6.6.0': + resolution: {integrity: sha512-xyX0X9mc0kyz9plIyryrRbl7ngsA9jz77mCZJsUkLl+ZKs0KWObgaEBoSgQiYWAsSmjz/yjl0F++Got0Mdp4Rw==} + engines: {node: '>=6'} + + '@fortawesome/fontawesome-svg-core@6.6.0': + resolution: {integrity: sha512-KHwPkCk6oRT4HADE7smhfsKudt9N/9lm6EJ5BVg0tD1yPA5hht837fB87F8pn15D8JfTqQOjhKTktwmLMiD7Kg==} + engines: {node: '>=6'} + + '@fortawesome/free-brands-svg-icons@6.6.0': + resolution: {integrity: sha512-1MPD8lMNW/earme4OQi1IFHtmHUwAKgghXlNwWi9GO7QkTfD+IIaYpIai4m2YJEzqfEji3jFHX1DZI5pbY/biQ==} + engines: {node: '>=6'} + + '@fortawesome/free-regular-svg-icons@6.6.0': + resolution: {integrity: sha512-Yv9hDzL4aI73BEwSEh20clrY8q/uLxawaQ98lekBx6t9dQKDHcDzzV1p2YtBGTtolYtNqcWdniOnhzB+JPnQEQ==} + engines: {node: '>=6'} + + '@fortawesome/free-solid-svg-icons@6.6.0': + resolution: {integrity: sha512-IYv/2skhEDFc2WGUcqvFJkeK39Q+HyPf5GHUrT/l2pKbtgEIv1al1TKd6qStR5OIwQdN1GZP54ci3y4mroJWjA==} + engines: {node: '>=6'} + + '@fortawesome/vue-fontawesome@3.0.8': + resolution: {integrity: sha512-yyHHAj4G8pQIDfaIsMvQpwKMboIZtcHTUvPqXjOHyldh1O1vZfH4W03VDPv5RvI9P6DLTzJQlmVgj9wCf7c2Fw==} + peerDependencies: + '@fortawesome/fontawesome-svg-core': ~1 || ~6 + vue: '>= 3.0.0 < 4' + + '@intlify/core-base@9.13.1': + resolution: {integrity: sha512-+bcQRkJO9pcX8d0gel9ZNfrzU22sZFSA0WVhfXrf5jdJOS24a+Bp8pozuS9sBI9Hk/tGz83pgKfmqcn/Ci7/8w==} + engines: {node: '>= 16'} + + '@intlify/message-compiler@9.13.1': + resolution: {integrity: sha512-SKsVa4ajYGBVm7sHMXd5qX70O2XXjm55zdZB3VeMFCvQyvLew/dLvq3MqnaIsTMF1VkkOb9Ttr6tHcMlyPDL9w==} + engines: {node: '>= 16'} + + '@intlify/shared@9.13.1': + resolution: {integrity: sha512-u3b6BKGhE6j/JeRU6C/RL2FgyJfy6LakbtfeVF8fJXURpZZTzfh3e05J0bu0XPw447Q6/WUp3C4ajv4TMS4YsQ==} + engines: {node: '>= 16'} + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@istanbuljs/load-nyc-config@1.1.0': + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} + engines: {node: '>=8'} + + '@istanbuljs/schema@0.1.3': + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + + '@jest/console@29.7.0': + resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/core@29.7.0': + resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + '@jest/environment@29.7.0': + resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/expect-utils@29.7.0': + resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/expect@29.7.0': + resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/fake-timers@29.7.0': + resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/globals@29.7.0': + resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/reporters@29.7.0': + resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + '@jest/schemas@29.6.3': + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/source-map@29.6.3': + resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/test-result@29.7.0': + resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/test-sequencer@29.7.0': + resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/transform@29.7.0': + resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/types@29.6.3': + resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@johnsoncodehk/pug-beautify@0.2.2': + resolution: {integrity: sha512-qqNS/YD0Nck5wtQLCPHAfGVgWbbGafxSPjNh0ekYPFSNNqnDH2kamnduzYly8IiADmeVx/MfAE1njMEjVeHTMA==} + + '@jridgewell/gen-mapping@0.3.5': + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@jsep-plugin/assignment@1.2.1': + resolution: {integrity: sha512-gaHqbubTi29aZpVbBlECRpmdia+L5/lh2BwtIJTmtxdbecEyyX/ejAOg7eQDGNvGOUmPY7Z2Yxdy9ioyH/VJeA==} + engines: {node: '>= 10.16.0'} + peerDependencies: + jsep: ^0.4.0||^1.0.0 + + '@jsep-plugin/regex@1.0.3': + resolution: {integrity: sha512-XfZgry4DwEZvSFtS/6Y+R48D7qJYJK6R9/yJFyUFHCIUMEEHuJ4X95TDgJp5QkmzfLYvapMPzskV5HpIDrREug==} + engines: {node: '>= 10.16.0'} + peerDependencies: + jsep: ^0.4.0||^1.0.0 + + '@jsonquerylang/jsonquery@3.1.1': + resolution: {integrity: sha512-P6Qo5egd3W8TBpqQsqaZtZ9lPO7oXBM21QdkYamCAYZHv9VCPXiI8NeIuSoXdoe5zKVZPUWmqaI14uacJLmcNw==} + hasBin: true + + '@kurkle/color@0.3.2': + resolution: {integrity: sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==} + + '@lexical/clipboard@0.16.1': + resolution: {integrity: sha512-0dWs/SwKS5KPpuf6fUVVt9vSCl6HAqcDGhSITw/okv0rrIlXTUT6WhVsMJtXfFxTyVvwMeOecJHvQH3i/jRQtA==} + + '@lexical/code@0.16.1': + resolution: {integrity: sha512-pOC28rRZ2XkmI2nIJm50DbKaCJtk5D0o7r6nORYp4i0z+lxt5Sf2m82DL9ksUHJRqKy87pwJDpoWvJ2SAI0ohw==} + + '@lexical/history@0.16.1': + resolution: {integrity: sha512-WQhScx0TJeKSQAnEkRpIaWdUXqirrNrom2MxbBUc/32zEUMm9FzV7nRGknvUabEFUo7vZq6xTZpOExQJqHInQA==} + + '@lexical/html@0.16.1': + resolution: {integrity: sha512-vbtAdCvQ3PaAqa5mFmtmrvbiAvjCu1iXBAJ0bsHqFXCF2Sba5LwHVe8dUAOTpfEZEMbiHfjul6b5fj4vNPGF2A==} + + '@lexical/link@0.16.1': + resolution: {integrity: sha512-zG36gEnEqbIe6tK/MhXi7wn/XMY/zdivnPcOY5WyC3derkEezeLSSIFsC1u5UNeK5pbpNMSy4LDpLhi1Ww4Y5w==} + + '@lexical/list@0.16.1': + resolution: {integrity: sha512-i9YhLAh5N6YO9dP+R1SIL9WEdCKeTiQQYVUzj84vDvX5DIBxMPUjTmMn3LXu9T+QO3h1s2L/vJusZASrl45eAw==} + + '@lexical/markdown@0.16.1': + resolution: {integrity: sha512-0sBLttMvfQO/hVaIqpHdvDowpgV2CoRuWo2CNwvRLZPPWvPVjL4Nkb73wmi8zAZsAOTbX2aw+g4m/+k5oJqNig==} + + '@lexical/rich-text@0.16.1': + resolution: {integrity: sha512-4uEVXJur7tdSbqbmsToCW4YVm0AMh4y9LK077Yq2O9hSuA5dqpI8UbTDnxZN2D7RfahNvwlqp8eZKFB1yeiJGQ==} + + '@lexical/selection@0.16.1': + resolution: {integrity: sha512-+nK3RvXtyQvQDq7AZ46JpphmM33pwuulwiRfeXR5T9iFQTtgWOEjsAi/KKX7vGm70BxACfiSxy5QCOgBWFwVJg==} + + '@lexical/table@0.16.1': + resolution: {integrity: sha512-GWb0/MM1sVXpi1p2HWWOBldZXASMQ4c6WRNYnRmq7J/aB5N66HqQgJGKp3m66Kz4k1JjhmZfPs7F018qIBhnFQ==} + + '@lexical/text@0.16.1': + resolution: {integrity: sha512-Os/nKQegORTrKKN6vL3/FMVszyzyqaotlisPynvTaHTUC+yY4uyjM2hlF93i5a2ixxyiPLF9bDroxUP96TMPXg==} + + '@lexical/utils@0.16.1': + resolution: {integrity: sha512-BVyJxDQi/rIxFTDjf2zE7rMDKSuEaeJ4dybHRa/hRERt85gavGByQawSLeQlTjLaYLVsy+x7wCcqh2fNhlLf0g==} + + '@lezer/common@1.2.3': + resolution: {integrity: sha512-w7ojc8ejBqr2REPsWxJjrMFsA/ysDCFICn8zEOR9mrqzOu2amhITYuLD8ag6XZf0CFXDrhKqw7+tW8cX66NaDA==} + + '@lezer/highlight@1.2.1': + resolution: {integrity: sha512-Z5duk4RN/3zuVO7Jq0pGLJ3qynpxUVsh7IbUbGj88+uV2ApSAn6kWg2au3iJb+0Zi7kKtqffIESgNcRXWZWmSA==} + + '@lezer/json@1.0.2': + resolution: {integrity: sha512-xHT2P4S5eeCYECyKNPhr4cbEL9tc8w83SPwRC373o9uEdrvGKTZoJVAGxpOsZckMlEh9W23Pc72ew918RWQOBQ==} + + '@lezer/lr@1.4.2': + resolution: {integrity: sha512-pu0K1jCIdnQ12aWNaAVU5bzi7Bd1w54J3ECgANPmYLtQKP0HBj2cE/5coBD66MT10xbtIuUr7tg0Shbsvk0mDA==} + + '@mapbox/node-pre-gyp@1.0.10': + resolution: {integrity: sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA==} + hasBin: true + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@parcel/watcher-android-arm64@2.4.1': + resolution: {integrity: sha512-LOi/WTbbh3aTn2RYddrO8pnapixAziFl6SMxHM69r3tvdSm94JtCenaKgk1GRg5FJ5wpMCpHeW+7yqPlvZv7kg==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [android] + + '@parcel/watcher-darwin-arm64@2.4.1': + resolution: {integrity: sha512-ln41eihm5YXIY043vBrrHfn94SIBlqOWmoROhsMVTSXGh0QahKGy77tfEywQ7v3NywyxBBkGIfrWRHm0hsKtzA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [darwin] + + '@parcel/watcher-darwin-x64@2.4.1': + resolution: {integrity: sha512-yrw81BRLjjtHyDu7J61oPuSoeYWR3lDElcPGJyOvIXmor6DEo7/G2u1o7I38cwlcoBHQFULqF6nesIX3tsEXMg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [darwin] + + '@parcel/watcher-freebsd-x64@2.4.1': + resolution: {integrity: sha512-TJa3Pex/gX3CWIx/Co8k+ykNdDCLx+TuZj3f3h7eOjgpdKM+Mnix37RYsYU4LHhiYJz3DK5nFCCra81p6g050w==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [freebsd] + + '@parcel/watcher-linux-arm-glibc@2.4.1': + resolution: {integrity: sha512-4rVYDlsMEYfa537BRXxJ5UF4ddNwnr2/1O4MHM5PjI9cvV2qymvhwZSFgXqbS8YoTk5i/JR0L0JDs69BUn45YA==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + + '@parcel/watcher-linux-arm64-glibc@2.4.1': + resolution: {integrity: sha512-BJ7mH985OADVLpbrzCLgrJ3TOpiZggE9FMblfO65PlOCdG++xJpKUJ0Aol74ZUIYfb8WsRlUdgrZxKkz3zXWYA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + + '@parcel/watcher-linux-arm64-musl@2.4.1': + resolution: {integrity: sha512-p4Xb7JGq3MLgAfYhslU2SjoV9G0kI0Xry0kuxeG/41UfpjHGOhv7UoUDAz/jb1u2elbhazy4rRBL8PegPJFBhA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + + '@parcel/watcher-linux-x64-glibc@2.4.1': + resolution: {integrity: sha512-s9O3fByZ/2pyYDPoLM6zt92yu6P4E39a03zvO0qCHOTjxmt3GHRMLuRZEWhWLASTMSrrnVNWdVI/+pUElJBBBg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + + '@parcel/watcher-linux-x64-musl@2.4.1': + resolution: {integrity: sha512-L2nZTYR1myLNST0O632g0Dx9LyMNHrn6TOt76sYxWLdff3cB22/GZX2UPtJnaqQPdCRoszoY5rcOj4oMTtp5fQ==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + + '@parcel/watcher-win32-arm64@2.4.1': + resolution: {integrity: sha512-Uq2BPp5GWhrq/lcuItCHoqxjULU1QYEcyjSO5jqqOK8RNFDBQnenMMx4gAl3v8GiWa59E9+uDM7yZ6LxwUIfRg==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [win32] + + '@parcel/watcher-win32-ia32@2.4.1': + resolution: {integrity: sha512-maNRit5QQV2kgHFSYwftmPBxiuK5u4DXjbXx7q6eKjq5dsLXZ4FJiVvlcw35QXzk0KrUecJmuVFbj4uV9oYrcw==} + engines: {node: '>= 10.0.0'} + cpu: [ia32] + os: [win32] + + '@parcel/watcher-win32-x64@2.4.1': + resolution: {integrity: sha512-+DvS92F9ezicfswqrvIRM2njcYJbd5mb9CUgtrHCHmvn7pPPa+nMDRu1o1bYYz/l5IB2NVGNJWiH7h1E58IF2A==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [win32] + + '@parcel/watcher@2.4.1': + resolution: {integrity: sha512-HNjmfLQEVRZmHRET336f20H/8kOozUGwk7yajvsonjNxbj2wBTK1WsQuHkD5yYh9RxFGL2EyDHryOihOwUoKDA==} + engines: {node: '>= 10.0.0'} + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@polka/url@0.5.0': + resolution: {integrity: sha512-oZLYFEAzUKyi3SKnXvj32ZCEGH6RDnao7COuCVhDydMS9NrCSVXhM79VaKyP5+Zc33m0QXEd2DN3UkU7OsHcfw==} + + '@polka/url@1.0.0-next.21': + resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==} + + '@popperjs/core@2.11.8': + resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} + + '@replit/codemirror-indentation-markers@6.5.3': + resolution: {integrity: sha512-hL5Sfvw3C1vgg7GolLe/uxX5T3tmgOA3ZzqlMv47zjU1ON51pzNWiVbS22oh6crYhtVhv8b3gdXwoYp++2ilHw==} + peerDependencies: + '@codemirror/language': ^6.0.0 + '@codemirror/state': ^6.0.0 + '@codemirror/view': ^6.0.0 + + '@rollup/pluginutils@5.1.3': + resolution: {integrity: sha512-Pnsb6f32CD2W3uCaLZIzDmeFyQ2b8UWMFI7xtwUezpcGBDVDW6y9XgAWIlARiGAo6eNF5FK5aQTr0LFyNyqq5A==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/rollup-android-arm-eabi@4.24.0': + resolution: {integrity: sha512-Q6HJd7Y6xdB48x8ZNVDOqsbh2uByBhgK8PiQgPhwkIw/HC/YX5Ghq2mQY5sRMZWHb3VsFkWooUVOZHKr7DmDIA==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.24.0': + resolution: {integrity: sha512-ijLnS1qFId8xhKjT81uBHuuJp2lU4x2yxa4ctFPtG+MqEE6+C5f/+X/bStmxapgmwLwiL3ih122xv8kVARNAZA==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.24.0': + resolution: {integrity: sha512-bIv+X9xeSs1XCk6DVvkO+S/z8/2AMt/2lMqdQbMrmVpgFvXlmde9mLcbQpztXm1tajC3raFDqegsH18HQPMYtA==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.24.0': + resolution: {integrity: sha512-X6/nOwoFN7RT2svEQWUsW/5C/fYMBe4fnLK9DQk4SX4mgVBiTA9h64kjUYPvGQ0F/9xwJ5U5UfTbl6BEjaQdBQ==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-linux-arm-gnueabihf@4.24.0': + resolution: {integrity: sha512-0KXvIJQMOImLCVCz9uvvdPgfyWo93aHHp8ui3FrtOP57svqrF/roSSR5pjqL2hcMp0ljeGlU4q9o/rQaAQ3AYA==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.24.0': + resolution: {integrity: sha512-it2BW6kKFVh8xk/BnHfakEeoLPv8STIISekpoF+nBgWM4d55CZKc7T4Dx1pEbTnYm/xEKMgy1MNtYuoA8RFIWw==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.24.0': + resolution: {integrity: sha512-i0xTLXjqap2eRfulFVlSnM5dEbTVque/3Pi4g2y7cxrs7+a9De42z4XxKLYJ7+OhE3IgxvfQM7vQc43bwTgPwA==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.24.0': + resolution: {integrity: sha512-9E6MKUJhDuDh604Qco5yP/3qn3y7SLXYuiC0Rpr89aMScS2UAmK1wHP2b7KAa1nSjWJc/f/Lc0Wl1L47qjiyQw==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-powerpc64le-gnu@4.24.0': + resolution: {integrity: sha512-2XFFPJ2XMEiF5Zi2EBf4h73oR1V/lycirxZxHZNc93SqDN/IWhYYSYj8I9381ikUFXZrz2v7r2tOVk2NBwxrWw==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.24.0': + resolution: {integrity: sha512-M3Dg4hlwuntUCdzU7KjYqbbd+BLq3JMAOhCKdBE3TcMGMZbKkDdJ5ivNdehOssMCIokNHFOsv7DO4rlEOfyKpg==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.24.0': + resolution: {integrity: sha512-mjBaoo4ocxJppTorZVKWFpy1bfFj9FeCMJqzlMQGjpNPY9JwQi7OuS1axzNIk0nMX6jSgy6ZURDZ2w0QW6D56g==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.24.0': + resolution: {integrity: sha512-ZXFk7M72R0YYFN5q13niV0B7G8/5dcQ9JDp8keJSfr3GoZeXEoMHP/HlvqROA3OMbMdfr19IjCeNAnPUG93b6A==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.24.0': + resolution: {integrity: sha512-w1i+L7kAXZNdYl+vFvzSZy8Y1arS7vMgIy8wusXJzRrPyof5LAb02KGr1PD2EkRcl73kHulIID0M501lN+vobQ==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-win32-arm64-msvc@4.24.0': + resolution: {integrity: sha512-VXBrnPWgBpVDCVY6XF3LEW0pOU51KbaHhccHw6AS6vBWIC60eqsH19DAeeObl+g8nKAz04QFdl/Cefta0xQtUQ==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.24.0': + resolution: {integrity: sha512-xrNcGDU0OxVcPTH/8n/ShH4UevZxKIO6HJFK0e15XItZP2UcaiLFd5kiX7hJnqCbSztUF8Qot+JWBC/QXRPYWQ==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.24.0': + resolution: {integrity: sha512-fbMkAF7fufku0N2dE5TBXcNlg0pt0cJue4xBRE2Qc5Vqikxr4VCgKj/ht6SMdFcOacVA9rqF70APJ8RN/4vMJw==} + cpu: [x64] + os: [win32] + + '@sinclair/typebox@0.27.8': + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + + '@sinonjs/commons@3.0.1': + resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} + + '@sinonjs/fake-timers@10.3.0': + resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} + + '@sphinxxxx/color-conversion@2.2.2': + resolution: {integrity: sha512-XExJS3cLqgrmNBIP3bBw6+1oQ1ksGjFh0+oClDKFYpCCqx/hlqwWO5KO/S63fzUo67SxI9dMrF0y5T/Ey7h8Zw==} + + '@sxzz/popperjs-es@2.11.7': + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + + '@trysound/sax@0.2.0': + resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} + engines: {node: '>=10.13.0'} + + '@tweenjs/tween.js@23.1.3': + resolution: {integrity: sha512-vJmvvwFxYuGnF2axRtPYocag6Clbb5YS7kLL+SO/TeVFzHqDIWrNKYtcsPMibjDx9O+bu+psAy9NKfWklassUA==} + + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.6.8': + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.20.6': + resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + + '@types/estree@1.0.0': + resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==} + + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + + '@types/getos@3.0.4': + resolution: {integrity: sha512-OsNVsuGEBd5QoeXTgjPmA89a465hjQithLMImsiJlIi0aYP8axKWtWrsmEMfm50w6EL2oRzCz+cLkZmp9/LfZw==} + + '@types/graceful-fs@4.1.9': + resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} + + '@types/humanize-duration@3.27.4': + resolution: {integrity: sha512-yaf7kan2Sq0goxpbcwTQ+8E9RP6HutFBPv74T/IA/ojcHKhuKVlk2YFYyHhWZeLvZPzzLE3aatuQB4h0iqyyUA==} + + '@types/istanbul-lib-coverage@2.0.6': + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} + + '@types/istanbul-lib-report@3.0.3': + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} + + '@types/istanbul-reports@3.0.4': + resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} + + '@types/javascript-time-ago@2.0.8': + resolution: {integrity: sha512-X77q3xUzWVn0qohgurKE1G5NiXZjee8VbLqaukW/HXVkz7bdCFJgOPQ3JVB4IkrDhMS4CviFTmpZuNVg0i2QFA==} + + '@types/jest@29.5.14': + resolution: {integrity: sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==} + + '@types/lodash-es@4.17.12': + resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==} + + '@types/lodash@4.17.10': + resolution: {integrity: sha512-YpS0zzoduEhuOWjAotS6A5AVCva7X4lVlYLF0FYHAY9sdraBfnatttHItlWeZdGhuEkf+OzMNg2ZYAx8t+52uQ==} + + '@types/md5@2.3.5': + resolution: {integrity: sha512-/i42wjYNgE6wf0j2bcTX6kuowmdL/6PE4IVitMpm2eYKBUuYCprdcWVK+xEF0gcV6ufMCRhtxmReGfc6hIK7Jw==} + + '@types/node-os-utils@1.3.4': + resolution: {integrity: sha512-BCUYrbdoO4FUbx6MB9atLNFnkxdliFaxdiTJMIPPiecXIApc5zf4NIqV5G1jWv/ReZvtYyHLs40RkBjHX+vykA==} + + '@types/node@20.17.0': + resolution: {integrity: sha512-a7zRo0f0eLo9K5X9Wp5cAqTUNGzuFLDG2R7C4HY2BhcMAsxgSPuRvAC1ZB6QkuUQXf0YZAgfOX2ZyrBa2n4nHQ==} + + '@types/pinyin@2.10.2': + resolution: {integrity: sha512-jLzlRkaLRLg+lgYPjOuP3HX2cozUkhXls5GTXopsKuKJ9lDGlIAb88OoIztH6TbNUsoJnl/7e/kjaumA5IKKJg==} + + '@types/showdown@2.0.6': + resolution: {integrity: sha512-pTvD/0CIeqe4x23+YJWlX2gArHa8G0J0Oh6GKaVXV7TAeickpkkZiNOgFcFcmLQ5lB/K0qBJL1FtRYltBfbGCQ==} + + '@types/stack-utils@2.0.3': + resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} + + '@types/stats.js@0.17.3': + resolution: {integrity: sha512-pXNfAD3KHOdif9EQXZ9deK82HVNaXP5ZIF5RP2QG6OQFNTaY2YIetfrE9t528vEreGQvEPRDDc8muaoYeK0SxQ==} + + '@types/three@0.166.0': + resolution: {integrity: sha512-FHMnpcdhdbdOOIYbfkTkUVpYMW53odxbTRwd0/xJpYnTzEsjnVnondGAvHZb4z06UW0vo6WPVuvH0/9qrxKx7g==} + + '@types/url-join@4.0.3': + resolution: {integrity: sha512-3l1qMm3wqO0iyC5gkADzT95UVW7C/XXcdvUcShOideKF0ddgVRErEQQJXBd2kvQm+aSgqhBGHGB38TgMeT57Ww==} + + '@types/web-bluetooth@0.0.16': + resolution: {integrity: sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==} + + '@types/webxr@0.5.20': + resolution: {integrity: sha512-JGpU6qiIJQKUuVSKx1GtQnHJGxRjtfGIhzO2ilq43VZZS//f1h1Sgexbdk+Lq+7569a6EYhOWrUpIruR/1Enmg==} + + '@types/yargs-parser@21.0.3': + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + + '@types/yargs@17.0.33': + resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} + + '@vitejs/plugin-vue-jsx@4.0.1': + resolution: {integrity: sha512-7mg9HFGnFHMEwCdB6AY83cVK4A6sCqnrjFYF4WIlebYAQVVJ/sC/CiTruVdrRlhrFoeZ8rlMxY9wYpPTIRhhAg==} + engines: {node: ^18.0.0 || >=20.0.0} + peerDependencies: + vite: ^5.0.0 + vue: ^3.0.0 + + '@vitejs/plugin-vue@5.0.5': + resolution: {integrity: sha512-LOjm7XeIimLBZyzinBQ6OSm3UBCNVCpLkxGC0oWmm2YPzVZoxMsdvNVimLTBzpAnR9hl/yn1SHGuRfe6/Td9rQ==} + engines: {node: ^18.0.0 || >=20.0.0} + peerDependencies: + vite: ^5.0.0 + vue: ^3.2.25 + + '@volar/language-core@2.4.6': + resolution: {integrity: sha512-FxUfxaB8sCqvY46YjyAAV6c3mMIq/NWQMVvJ+uS4yxr1KzOvyg61gAuOnNvgCvO4TZ7HcLExBEsWcDu4+K4E8A==} + + '@volar/language-server@2.4.6': + resolution: {integrity: sha512-ARIbMXapEUPj9UFbZqWqw/iZ+ZuxUcY+vY212+2uutZVo/jrdzhLPu2TfZd9oB9akX8XXuslinT3051DyHLLRA==} + + '@volar/language-service@2.4.6': + resolution: {integrity: sha512-wNeEVBgBKgpP1MfMYPrgTf1K8nhOGEh3ac0+9n6ECyk2N03+j0pWCpQ2i99mRWT/POvo1PgizDmYFH8S67bZOA==} + + '@volar/source-map@2.4.6': + resolution: {integrity: sha512-Nsh7UW2ruK+uURIPzjJgF0YRGP5CX9nQHypA2OMqdM2FKy7rh+uv3XgPnWPw30JADbKvZ5HuBzG4gSbVDYVtiw==} + + '@volar/test-utils@2.4.6': + resolution: {integrity: sha512-QIW5BeYvsY4QPRCaRp6ewb/L9i+NZFJTY1fYsbQe4Hi4k7Zqs+Mu4Hz21nbGWTWIF2wHeX6gGMWfJjhR7jFtvw==} + + '@volar/typescript@2.4.6': + resolution: {integrity: sha512-NMIrA7y5OOqddL9VtngPWYmdQU03htNKFtAYidbYfWA0TOhyGVd9tfcP4TsLWQ+RBWDZCbBqsr8xzU0ZOxYTCQ==} + + '@vscode/emmet-helper@2.9.3': + resolution: {integrity: sha512-rB39LHWWPQYYlYfpv9qCoZOVioPCftKXXqrsyqN1mTWZM6dTnONT63Db+03vgrBbHzJN45IrgS/AGxw9iiqfEw==} + + '@vscode/l10n@0.0.18': + resolution: {integrity: sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ==} + + '@vue/babel-helper-vue-transform-on@1.2.5': + resolution: {integrity: sha512-lOz4t39ZdmU4DJAa2hwPYmKc8EsuGa2U0L9KaZaOJUt0UwQNjNA3AZTq6uEivhOKhhG1Wvy96SvYBoFmCg3uuw==} + + '@vue/babel-plugin-jsx@1.2.5': + resolution: {integrity: sha512-zTrNmOd4939H9KsRIGmmzn3q2zvv1mjxkYZHgqHZgDrXz5B1Q3WyGEjO2f+JrmKghvl1JIRcvo63LgM1kH5zFg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + peerDependenciesMeta: + '@babel/core': + optional: true + + '@vue/babel-plugin-resolve-type@1.2.5': + resolution: {integrity: sha512-U/ibkQrf5sx0XXRnUZD1mo5F7PkpKyTbfXM3a3rC4YnUz6crHEz9Jg09jzzL6QYlXNto/9CePdOg/c87O4Nlfg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@vue/compiler-core@3.5.12': + resolution: {integrity: sha512-ISyBTRMmMYagUxhcpyEH0hpXRd/KqDU4ymofPgl2XAkY9ZhQ+h0ovEZJIiPop13UmR/54oA2cgMDjgroRelaEw==} + + '@vue/compiler-dom@3.5.12': + resolution: {integrity: sha512-9G6PbJ03uwxLHKQ3P42cMTi85lDRvGLB2rSGOiQqtXELat6uI4n8cNz9yjfVHRPIu+MsK6TE418Giruvgptckg==} + + '@vue/compiler-sfc@3.5.12': + resolution: {integrity: sha512-2k973OGo2JuAa5+ZlekuQJtitI5CgLMOwgl94BzMCsKZCX/xiqzJYzapl4opFogKHqwJk34vfsaKpfEhd1k5nw==} + + '@vue/compiler-ssr@3.5.12': + resolution: {integrity: sha512-eLwc7v6bfGBSM7wZOGPmRavSWzNFF6+PdRhE+VFJhNCgHiF8AM7ccoqcv5kBXA2eWUfigD7byekvf/JsOfKvPA==} + + '@vue/compiler-vue2@2.7.16': + resolution: {integrity: sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==} + + '@vue/devtools-api@6.4.5': + resolution: {integrity: sha512-JD5fcdIuFxU4fQyXUu3w2KpAJHzTVdN+p4iOX2lMWSHMOoQdMAcpFLZzm9Z/2nmsoZ1a96QEhZ26e50xLBsgOQ==} + + '@vue/devtools-api@6.6.4': + resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==} + + '@vue/language-core@2.1.6': + resolution: {integrity: sha512-MW569cSky9R/ooKMh6xa2g1D0AtRKbL56k83dzus/bx//RDJk24RHWkMzbAlXjMdDNyxAaagKPRquBIxkxlCkg==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@vue/language-server@2.1.6': + resolution: {integrity: sha512-xRtugvuwFs9KqJ5JMmO9q2b5IrhNLaj/+iqrnBEfWPFRCsywzFABrZFgI7huqsndSdO5uiBkkOkJVcruB0ULFw==} + hasBin: true + + '@vue/language-service@2.1.6': + resolution: {integrity: sha512-FZ3Fn0MslS/fdBm0U2A/JUmq0HBtvkm/6OcHfw23mE7olm0yCAOV0i8xKqqbrwZeSDoEfk48zzTSEE9Zj6RmBg==} + + '@vue/reactivity@3.5.12': + resolution: {integrity: sha512-UzaN3Da7xnJXdz4Okb/BGbAaomRHc3RdoWqTzlvd9+WBR5m3J39J1fGcHes7U3za0ruYn/iYy/a1euhMEHvTAg==} + + '@vue/runtime-core@3.5.12': + resolution: {integrity: sha512-hrMUYV6tpocr3TL3Ad8DqxOdpDe4zuQY4HPY3X/VRh+L2myQO8MFXPAMarIOSGNu0bFAjh1yBkMPXZBqCk62Uw==} + + '@vue/runtime-dom@3.5.12': + resolution: {integrity: sha512-q8VFxR9A2MRfBr6/55Q3umyoN7ya836FzRXajPB6/Vvuv0zOPL+qltd9rIMzG/DbRLAIlREmnLsplEF/kotXKA==} + + '@vue/server-renderer@3.5.12': + resolution: {integrity: sha512-I3QoeDDeEPZm8yR28JtY+rk880Oqmj43hreIBVTicisFTx/Dl7JpG72g/X7YF8hnQD3IFhkky5i2bPonwrTVPg==} + peerDependencies: + vue: 3.5.12 + + '@vue/shared@3.5.12': + resolution: {integrity: sha512-L2RPSAwUFbgZH20etwrXyVyCBu9OxRSi8T/38QsvnkJyvq2LufW2lDCOzm7t/U9C1mkhJGWYfCuFBCmIuNivrg==} + + '@vue/typescript-plugin@2.1.6': + resolution: {integrity: sha512-FGwinnIuwZPELbRPZmtA+G4YyLT+lxjGSZQpNvgrzvy3MZBJZzm4UU87DIA7Lb2xbbYpTMAM6P6TAWwioCNZIg==} + + '@vueuse/core@9.13.0': + resolution: {integrity: sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==} + + '@vueuse/metadata@9.13.0': + resolution: {integrity: sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==} + + '@vueuse/shared@9.13.0': + resolution: {integrity: sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==} + + '@zeit/schemas@2.36.0': + resolution: {integrity: sha512-7kjMwcChYEzMKjeex9ZFXkt1AyNov9R5HZtjBKVsmVpw7pa7ZtlCGvCBC2vnnXctaYN+aRI61HjIqeetZW5ROg==} + + abbrev@1.1.1: + resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} + + accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + + acorn-dynamic-import@4.0.0: + resolution: {integrity: sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==} + deprecated: This is probably built in to whatever tool you're using. If you still need it... idk + peerDependencies: + acorn: ^6.0.0 + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@6.4.2: + resolution: {integrity: sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==} + engines: {node: '>=0.4.0'} + hasBin: true + + acorn@7.4.1: + resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} + engines: {node: '>=0.4.0'} + hasBin: true + + acorn@8.13.0: + resolution: {integrity: sha512-8zSiw54Oxrdym50NlZ9sUusyO1Z1ZchgRLWRaK6c86XJFClyCgFKetdowBg5bKxyp/u+CDBJG4Mpp0m3HLZl9w==} + engines: {node: '>=0.4.0'} + hasBin: true + + agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + + ajax-request@1.2.3: + resolution: {integrity: sha512-1o4a9TxDmET7NmU8eIeIsV8t1SD7dooKT7wVFgoKDJC++zljg0vLhcPsoBA3Za2bD5A5LJJBMlGoglsTHa517w==} + + ajv@8.12.0: + resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + + ansi-align@3.0.1: + resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + engines: {node: '>=12'} + + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + aproba@2.0.0: + resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} + + arch@2.2.0: + resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==} + + are-we-there-yet@2.0.0: + resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} + engines: {node: '>=10'} + deprecated: This package is no longer supported. + + arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + + aria-query@5.3.2: + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} + engines: {node: '>= 0.4'} + + array-bounds@1.0.1: + resolution: {integrity: sha512-8wdW3ZGk6UjMPJx/glyEt0sLzzwAE1bhToPsO1W2pbpR2gULyxe3BjSiuJFheP50T/GgODVPz2fuMUmIywt8cQ==} + + array-normalize@1.1.4: + resolution: {integrity: sha512-fCp0wKFLjvSPmCn4F5Tiw4M3lpMZoHlCjfcs7nNzuj3vqQQ1/a8cgB9DXcpDSn18c+coLnaW7rqfcYCvKbyJXg==} + + array-timsort@1.0.3: + resolution: {integrity: sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==} + + async-validator@4.2.5: + resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + atom-material-icons@3.0.0: + resolution: {integrity: sha512-qtMR5KxQh82iLIFOdrQZViq21GTNT+/mccrVAg41hIlrhpwHAEjCeGj91Iyas9GL28ld0D0hagHv6ipGWlLZHw==} + + attr-accept@2.2.2: + resolution: {integrity: sha512-7prDjvt9HmqiZ0cl5CRjtS84sEyhsHP2coDkaZKRKVfCDo9s7iw7ChVmar78Gu9pC4SoR/28wFu/G5JJhTnqEg==} + engines: {node: '>=4'} + + autoprefixer@10.4.20: + resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + + axios@1.7.7: + resolution: {integrity: sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==} + + axobject-query@4.1.0: + resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} + engines: {node: '>= 0.4'} + + babel-jest@29.7.0: + resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.8.0 + + babel-plugin-istanbul@6.1.1: + resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} + engines: {node: '>=8'} + + babel-plugin-jest-hoist@29.6.3: + resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + babel-preset-current-node-syntax@1.1.0: + resolution: {integrity: sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==} + peerDependencies: + '@babel/core': ^7.0.0 + + babel-preset-jest@29.6.3: + resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.0.0 + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base64-img@1.0.4: + resolution: {integrity: sha512-5RVat9C4bkht6kf4nrQy5gDhiLPs6Iq2sptiR8C6DV0yQ+oeo+oydDFEUgbBAW2yTwQNkthtOlAPG50gjUHaTA==} + + binary-extensions@2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + + binary-search-bounds@2.0.5: + resolution: {integrity: sha512-H0ea4Fd3lS1+sTEB2TgcLoK21lLhwEJzlQv3IN47pJS976Gx4zoWe0ak3q+uYh60ppQxg9F16Ri4tS1sfD4+jA==} + + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + + boxen@7.0.0: + resolution: {integrity: sha512-j//dBVuyacJbvW+tvZ9HuH03fZ46QcaKvvhZickZqtB271DxJ7SNRSNxrV/dZX0085m7hISRZWbzWlJvx/rHSg==} + engines: {node: '>=14.16'} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + + browserslist@4.24.2: + resolution: {integrity: sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + bser@2.1.1: + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + + buble@0.19.8: + resolution: {integrity: sha512-IoGZzrUTY5fKXVkgGHw3QeXFMUNBFv+9l8a4QJKG1JhG3nCMHTdEX1DCOg8568E2Q9qvAQIiSokv6Jsgx8p2cA==} + hasBin: true + + bubleify@1.2.1: + resolution: {integrity: sha512-vp3NHmaQVoKaKWvi15FTMinPNjfp+47+/kFJ9ifezdMF/CBLArCxDVUh+FQE3qRxCRj1qyjJqilTBHHqlM8MaQ==} + engines: {node: '>=4.0.0'} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + bytes@3.0.0: + resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} + engines: {node: '>= 0.8'} + + call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + + camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + camelcase@7.0.1: + resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==} + engines: {node: '>=14.16'} + + caniuse-lite@1.0.30001669: + resolution: {integrity: sha512-DlWzFDJqstqtIVx1zeSpIMLjunf5SmwOw0N2Ck/QSQdS8PLS4+9HrLaYei4w8BIAL7IB/UEDu889d8vhCTPA0w==} + + chalk-template@0.4.0: + resolution: {integrity: sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==} + engines: {node: '>=12'} + + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.0.1: + resolution: {integrity: sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + char-regex@1.0.2: + resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} + engines: {node: '>=10'} + + character-parser@2.2.0: + resolution: {integrity: sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==} + + charenc@0.0.2: + resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} + + chart.js@4.4.5: + resolution: {integrity: sha512-CVVjg1RYTJV9OCC8WeJPMx8gsV8K6WIyIEQUE3ui4AR9Hfgls9URri6Ja3hyMVBbTF8Q2KFa19PE815gWcWhng==} + engines: {pnpm: '>=8'} + + chartjs-adapter-date-fns@3.0.0: + resolution: {integrity: sha512-Rs3iEB3Q5pJ973J93OBTpnP7qoGwvq3nUnoMdtxO+9aoJof7UFcRbWcIDteXuYd1fgAvct/32T9qaLyLuZVwCg==} + peerDependencies: + chart.js: '>=2.8.0' + date-fns: '>=2.0.0' + + chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + chokidar@4.0.1: + resolution: {integrity: sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==} + engines: {node: '>= 14.16.0'} + + chownr@2.0.0: + resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} + engines: {node: '>=10'} + + ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + + cjs-module-lexer@1.4.1: + resolution: {integrity: sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==} + + clamp@1.0.1: + resolution: {integrity: sha512-kgMuFyE78OC6Dyu3Dy7vcx4uy97EIbVxJB/B0eJ3bUNAkwdNcxYzgKltnyADiYwsR7SEqkkUPsEUT//OVS6XMA==} + + cli-boxes@3.0.0: + resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} + engines: {node: '>=10'} + + clipboard@2.0.11: + resolution: {integrity: sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==} + + clipboardy@3.0.0: + resolution: {integrity: sha512-Su+uU5sr1jkUy1sGRpLKjKrvEOVXgSgiSInwa/qeID6aJ07yh+5NWc3h2QfjHjBnfX4LhtFcuAWKUsJ3r+fjbg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + co@4.6.0: + resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + + code-red@1.0.4: + resolution: {integrity: sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==} + + codemirror-wrapped-line-indent@1.0.8: + resolution: {integrity: sha512-5UwuHCz4oAZuvot1DbfFxSxJacTESdNGa/KpJD7HfpVpDAJdgB1vV9OG4b4pkJqPWuOfIpFLTQEKS85kTpV+XA==} + peerDependencies: + '@codemirror/language': ^6.9.0 + '@codemirror/state': ^6.2.1 + '@codemirror/view': ^6.17.1 + + collect-v8-coverage@1.0.2: + resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} + + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + color-support@1.1.3: + resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} + hasBin: true + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + commander@1.1.1: + resolution: {integrity: sha512-71Rod2AhcH3JhkBikVpNd0pA+fWsmAaVoti6OR38T76chA7vE3pSerS0Jor4wDw+tOueD2zLVvFOw5H0Rcj7rA==} + engines: {node: '>= 0.6.x'} + + commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + + commander@7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + + commander@9.5.0: + resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} + engines: {node: ^12.20.0 || >=14} + + comment-json@4.2.5: + resolution: {integrity: sha512-bKw/r35jR3HGt5PEPm1ljsQQGyCrR8sFGNiN5L+ykDHdpO8Smxkrkla9Yi6NkQyUrb8V54PGhfMs6NrIwtxtdw==} + engines: {node: '>= 6'} + + compressible@2.0.18: + resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} + engines: {node: '>= 0.6'} + + compression@1.7.4: + resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==} + engines: {node: '>= 0.8.0'} + + computeds@0.0.1: + resolution: {integrity: sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + confbox@0.1.8: + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + + consola@3.2.3: + resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} + engines: {node: ^14.18.0 || >=16.10.0} + + console-clear@1.1.1: + resolution: {integrity: sha512-pMD+MVR538ipqkG5JXeOEbKWS5um1H4LUUccUQG68qpeqBYbzYy79Gh55jkd2TtPdRfUaLWdv6LPP//5Zt0aPQ==} + engines: {node: '>=4'} + + console-control-strings@1.1.0: + resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} + + content-disposition@0.5.2: + resolution: {integrity: sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==} + engines: {node: '>= 0.6'} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + core-js@3.38.1: + resolution: {integrity: sha512-OP35aUorbU3Zvlx7pjsFdu1rGNnD4pgw/CWoYzRY3t2EzoVT7shKHY1dlAy3f41cGIO7ZDPQimhGFTlEYkG/Hw==} + + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + + crawlab-vue3-dropzone@3.0.3: + resolution: {integrity: sha512-s/GHSTteFqJcMk14Xkp1imwEyrOCa+uwwH1eCsTAxVzaYocpiDpbDjQ3u3vrMyws9InsqqgtmAJhy2vGHEsk/Q==} + peerDependencies: + vue: '>=3.2.45' + + create-jest@29.7.0: + resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + + crelt@1.0.6: + resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==} + + cron-parser@4.9.0: + resolution: {integrity: sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==} + engines: {node: '>=12.0.0'} + + cronstrue@2.50.0: + resolution: {integrity: sha512-ULYhWIonJzlScCCQrPUG5uMXzXxSixty4djud9SS37DoNxDdkeRocxzHuAo4ImRBUK+mAuU5X9TSwEDccnnuPg==} + hasBin: true + + cross-env@7.0.3: + resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} + engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} + hasBin: true + + cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + + crypt@0.0.2: + resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==} + + css-select@5.1.0: + resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} + + css-tree@2.2.1: + resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + + css-tree@2.3.1: + resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + + css-what@6.1.0: + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + csso@5.0.5: + resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + date-fns@4.1.0: + resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==} + + dayjs@1.11.13: + resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==} + + de-indent@1.0.2: + resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} + + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + dedent@1.5.3: + resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==} + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + + deep-extend@0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-lazy-prop@2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} + + defined@1.0.1: + resolution: {integrity: sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + delegate@3.2.0: + resolution: {integrity: sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==} + + delegates@1.0.0: + resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} + + detect-libc@1.0.3: + resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} + engines: {node: '>=0.10'} + hasBin: true + + detect-libc@2.0.1: + resolution: {integrity: sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==} + engines: {node: '>=8'} + + detect-newline@3.1.0: + resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} + engines: {node: '>=8'} + + didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + + diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + + dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + + domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + + domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + + domutils@3.1.0: + resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} + + dtype@2.0.0: + resolution: {integrity: sha512-s2YVcLKdFGS0hpFqJaTwscsyt0E8nNFdmo73Ocd81xNPj4URI4rj6D60A+vFMIw7BXWlb4yRkEwfBqcZzPGiZg==} + engines: {node: '>= 0.8.0'} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + electron-to-chromium@1.5.45: + resolution: {integrity: sha512-vOzZS6uZwhhbkZbcRyiy99Wg+pYFV5hk+5YaECvx0+Z31NR3Tt5zS6dze2OepT6PCTzVzT0dIJItti+uAW5zmw==} + + element-plus@2.8.5: + resolution: {integrity: sha512-Px+kPbRTVvn5oa5+9saa7QEOnUweKXm0JVI7yJHzKF/doQGixwcFMsQEF2+3Fy62EA/7dRRKVuhsNGGZYNk3cw==} + peerDependencies: + vue: ^3.2.0 + + emittery@0.13.1: + resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} + engines: {node: '>=12'} + + emmet@2.4.11: + resolution: {integrity: sha512-23QPJB3moh/U9sT4rQzGgeyyGIrcM+GH5uVYg2C6wZIxAIJq7Ng3QLT79tl8FUwDXhyq9SusfknOrofAKqvgyQ==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + + es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-module-lexer@1.5.4: + resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} + + esbuild@0.21.5: + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} + engines: {node: '>=12'} + hasBin: true + + esbuild@0.23.1: + resolution: {integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==} + engines: {node: '>=18'} + hasBin: true + + escalade@3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + escape-string-regexp@2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + + esno@4.8.0: + resolution: {integrity: sha512-acMtooReAQGzLU0zcuEDHa8S62meh5aIyi8jboYxyvAePdmuWx2Mpwmt0xjwO0bs9/SXf+dvXJ0QJoDWw814Iw==} + hasBin: true + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + + exit@0.1.2: + resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} + engines: {node: '>= 0.8.0'} + + expect@29.7.0: + resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-uri@3.0.3: + resolution: {integrity: sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==} + + fastq@1.14.0: + resolution: {integrity: sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg==} + + fb-watchman@2.0.2: + resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + + fflate@0.8.2: + resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} + + file-match@1.0.2: + resolution: {integrity: sha512-g9p6bZV3HlSUM35QPvFWiP/PckDVe5jLPDhx6PfMuy06o+htesJTyDu7zRdXnOm3BY8pXmxb+QY5qIcsoWMGNg==} + + file-selector@0.2.4: + resolution: {integrity: sha512-ZDsQNbrv6qRi1YTDOEWzf5J2KjZ9KMI1Q2SGeTkCJmNNW25Jg4TW4UMcmoqcg4WrAyKRcpBXdbWRxkfrOzVRbA==} + engines: {node: '>= 10'} + + file-system@2.2.2: + resolution: {integrity: sha512-YgbXEVCu21CfmoeJ1rFLVLPGhW9o7iCzVFqk7ydy2TxF7rXH2YB68CFgDXLOvTD2pMLtg8paVqurzVjxGRdYmw==} + + fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + + find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + + flatten-vertex-data@1.0.2: + resolution: {integrity: sha512-BvCBFK2NZqerFTdMDgqfHBwxYWnxeCkwONsw6PvBMcUXqo8U/KDWwmXhqx1x2kLIg7DqIsJfOaJFOmlua3Lxuw==} + + follow-redirects@1.15.9: + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + font-awesome@4.7.0: + resolution: {integrity: sha512-U6kGnykA/6bFmg1M/oT9EkFeIYv7JlX3bozwQJWiiLz6L0w3F5vBVPxHlwyX/vtNq1ckcpRKOB9f2Qal/VtFpg==} + engines: {node: '>=0.10.3'} + + foreground-child@3.3.0: + resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} + engines: {node: '>=14'} + + form-data@4.0.1: + resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} + engines: {node: '>= 6'} + + fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + + fs-extra@11.2.0: + resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} + engines: {node: '>=14.14'} + + fs-minipass@2.1.0: + resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} + engines: {node: '>= 8'} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.1: + resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + gauge@3.0.2: + resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==} + engines: {node: '>=10'} + deprecated: This package is no longer supported. + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + + get-package-type@0.1.0: + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} + + get-port@3.2.0: + resolution: {integrity: sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==} + engines: {node: '>=4'} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + get-tsconfig@4.8.1: + resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + globals@15.11.0: + resolution: {integrity: sha512-yeyNSjdbyVaWurlwCpcA6XNBrHTMIeDdj0/hnvX/OLJ9ekOXYbLsLinH/MucQyGvNnXhidTdNhTtJaffL2sMfw==} + engines: {node: '>=18'} + + good-listener@1.2.2: + resolution: {integrity: sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==} + + gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-own-prop@2.0.0: + resolution: {integrity: sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + + has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + has-unicode@2.0.1: + resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} + + has@1.0.3: + resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} + engines: {node: '>= 0.4.0'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + + html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + + html-tags@3.3.1: + resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} + engines: {node: '>=8'} + + https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + + humanize-duration@3.32.1: + resolution: {integrity: sha512-inh5wue5XdfObhu/IGEMiA1nUXigSGcaKNemcbLRKa7jXYGDZXr3LoT9pTIzq2hPEbld7w/qv9h+ikWGz8fL1g==} + + immutable-json-patch@6.0.1: + resolution: {integrity: sha512-BHL/cXMjwFZlTOffiWNdY8ZTvNyYLrutCnWxrcKPHr5FqpAb6vsO6WWSPnVSys3+DruFN6lhHJJPHi8uELQL5g==} + + immutable@4.3.7: + resolution: {integrity: sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==} + + import-local@3.2.0: + resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} + engines: {node: '>=8'} + hasBin: true + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + increase-memory-limit@1.0.7: + resolution: {integrity: sha512-ozyn+HHAPD9VxMT1U50A7G8XXlktUWhnnEDYSeDYnQjKsNrBWHqq6XfEA0uhMdDPD+q/7rXWlzF1CbXX/c1LiQ==} + hasBin: true + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + + ip-regex@4.3.0: + resolution: {integrity: sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==} + engines: {node: '>=8'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-buffer@1.1.6: + resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} + + is-core-module@2.11.0: + resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} + + is-core-module@2.15.1: + resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} + engines: {node: '>= 0.4'} + + is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + + is-expression@4.0.0: + resolution: {integrity: sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-generator-fn@2.1.0: + resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} + engines: {node: '>=6'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-obj@1.0.1: + resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==} + engines: {node: '>=0.10.0'} + + is-port-reachable@4.0.0: + resolution: {integrity: sha512-9UoipoxYmSk6Xy7QFgRv2HDyaysmgSG75TFQs6S+3pDM7ZhKTF/bskZV+0UlABHzKjNVhPjYCLfeZUEg1wXxig==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + is-reference@3.0.1: + resolution: {integrity: sha512-baJJdQLiYaJdvFbJqXrcGv3WU3QCzBlUcI5QhbesIm6/xPsvmO+2CDoi/GMOFBQEQm+PXkwOPrp9KK5ozZsp2w==} + + is-reference@3.0.2: + resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==} + + is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + + istanbul-lib-instrument@5.2.1: + resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} + engines: {node: '>=8'} + + istanbul-lib-instrument@6.0.3: + resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} + engines: {node: '>=10'} + + istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + + istanbul-lib-source-maps@4.0.1: + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} + engines: {node: '>=10'} + + istanbul-reports@3.1.7: + resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} + engines: {node: '>=8'} + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + javascript-time-ago@2.5.11: + resolution: {integrity: sha512-Zeyf5R7oM1fSMW9zsU3YgAYwE0bimEeF54Udn2ixGd8PUwu+z1Yc5t4Y8YScJDMHD6uCx6giLt3VJR5K4CMwbg==} + + jest-changed-files@29.7.0: + resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-circus@29.7.0: + resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-cli@29.7.0: + resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + jest-config@29.7.0: + resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@types/node': '*' + ts-node: '>=9.0.0' + peerDependenciesMeta: + '@types/node': + optional: true + ts-node: + optional: true + + jest-diff@29.7.0: + resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-docblock@29.7.0: + resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-each@29.7.0: + resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-environment-node@29.7.0: + resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-get-type@29.6.3: + resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-haste-map@29.7.0: + resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-leak-detector@29.7.0: + resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-matcher-utils@29.7.0: + resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-message-util@29.7.0: + resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-mock@29.7.0: + resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-pnp-resolver@1.2.3: + resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} + engines: {node: '>=6'} + peerDependencies: + jest-resolve: '*' + peerDependenciesMeta: + jest-resolve: + optional: true + + jest-regex-util@29.6.3: + resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-resolve-dependencies@29.7.0: + resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-resolve@29.7.0: + resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-runner@29.7.0: + resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-runtime@29.7.0: + resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-snapshot@29.7.0: + resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-util@29.7.0: + resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-validate@29.7.0: + resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-watcher@29.7.0: + resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-worker@29.7.0: + resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest@29.7.0: + resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + jiti@1.21.6: + resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} + hasBin: true + + jmespath@0.16.0: + resolution: {integrity: sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==} + engines: {node: '>= 0.6.0'} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + + jsep@1.3.9: + resolution: {integrity: sha512-i1rBX5N7VPl0eYb6+mHNp52sEuaS2Wi8CDYx1X5sn9naevL78+265XJqy1qENEk7mRKwS06NHpUqiBwR7qeodw==} + engines: {node: '>= 10.16.0'} + + jsesc@0.5.0: + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} + hasBin: true + + jsesc@3.0.2: + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + engines: {node: '>=6'} + hasBin: true + + json-editor-vue@0.17.2: + resolution: {integrity: sha512-P38IvEwQJe4IHFpZe1YG2CWOK6pCjeHmPu2tLs01IiV0kz8QBoHYC7N5ZORlGTL4tQFVOosmnI1gjXztywHtig==} + peerDependencies: + '@vue/composition-api': '>=1' + vue: 2||3 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + json-source-map@0.6.1: + resolution: {integrity: sha512-1QoztHPsMQqhDq0hlXY5ZqcEdUzxQEIxgFkKl4WUp2pgShObl+9ovi4kRh2TfvAfxAoHOJ9vIMEqk3k4iex7tg==} + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonc-parser@2.3.1: + resolution: {integrity: sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg==} + + jsonc-parser@3.3.1: + resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} + + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + + jsonpath-plus@10.0.1: + resolution: {integrity: sha512-30DeH2QD4nL1IpDLPIFz09G5XyLvh+oNMUI2Zxf4tbrlsVHs0e3VPnwpOnSTFb4yM0dfQK2WGKLsSaAS8V62rw==} + engines: {node: '>=18.0.0'} + hasBin: true + + jsonrepair@3.8.1: + resolution: {integrity: sha512-5wnjaO53EJOhfLFY92nvBz2B9gqF9ql/D4HKUb1WOSBaqtVcAifFfmurblnhCJn/ySqKFA8U3n7nhGMAu/hEjQ==} + hasBin: true + + keypress@0.1.0: + resolution: {integrity: sha512-x0yf9PL/nx9Nw9oLL8ZVErFAk85/lslwEP7Vz7s5SI1ODXZIgit3C5qyWjw4DxOuO/3Hb4866SQh28a1V1d+WA==} + + klaw-sync@6.0.0: + resolution: {integrity: sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==} + + kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + + leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + + lexical@0.16.1: + resolution: {integrity: sha512-+R05d3+N945OY8pTUjTqQrWoApjC+ctzvjnmNETtx9WmVAaiW0tQVG+AYLt5pDGY8dQXtd4RPorvnxBTECt9SA==} + + lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + + lilconfig@3.1.2: + resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==} + engines: {node: '>=14'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + local-access@1.1.0: + resolution: {integrity: sha512-XfegD5pyTAfb+GY6chk283Ox5z8WexG56OvM06RWLpAc/UHozO8X6xAxEkIitZOtsSMM1Yr3DkHgW5W+onLhCw==} + engines: {node: '>=6'} + + local-pkg@0.5.0: + resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} + engines: {node: '>=14'} + + locate-character@3.0.0: + resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} + + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + + lodash-es@4.17.21: + resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + + lodash-unified@1.0.3: + resolution: {integrity: sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==} + peerDependencies: + '@types/lodash-es': '*' + lodash: '*' + lodash-es: '*' + + lodash._reinterpolate@3.0.0: + resolution: {integrity: sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA==} + + lodash.template@4.5.0: + resolution: {integrity: sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==} + + lodash.templatesettings@4.2.0: + resolution: {integrity: sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + + luxon@3.5.0: + resolution: {integrity: sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ==} + engines: {node: '>=12'} + + macos-release@3.1.0: + resolution: {integrity: sha512-/M/R0gCDgM+Cv1IuBG1XGdfTFnMEG6PZeT+KGWHO/OG+imqmaD9CH5vHBTycEM3+Kc4uG2Il+tFAuUWLqQOeUA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + magic-string@0.25.9: + resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} + + magic-string@0.30.12: + resolution: {integrity: sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==} + + make-dir@3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} + + make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + + makeerror@1.0.12: + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + + matchit@1.1.0: + resolution: {integrity: sha512-+nGYoOlfHmxe5BW5tE0EMJppXEwdSf8uBA1GTZC7Q77kbT35+VKLYJMzVNWCHSsga1ps1tPYFtFyvxvKzWVmMA==} + engines: {node: '>=6'} + + math-log2@1.0.1: + resolution: {integrity: sha512-9W0yGtkaMAkf74XGYVy4Dqw3YUMnTNB2eeiw9aQbUl4A3KmuCEHTt2DgAB07ENzOYAjsYSAYufkAq0Zd+jU7zA==} + engines: {node: '>=0.10.0'} + + md5@2.3.0: + resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==} + + mdn-data@2.0.28: + resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} + + mdn-data@2.0.30: + resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} + + memoize-one@6.0.0: + resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + meshoptimizer@0.18.1: + resolution: {integrity: sha512-ZhoIoL7TNV4s5B6+rx5mC//fw8/POGyNxS/DZyCJeiZ12ScLfVwRE/GfsxwiTkMYYD5DmK2/JXnEVXqL4rF+Sw==} + + micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + + mime-db@1.33.0: + resolution: {integrity: sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==} + engines: {node: '>= 0.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.18: + resolution: {integrity: sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minimist@1.2.7: + resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==} + + minipass@3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} + engines: {node: '>=8'} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + minizlib@2.1.2: + resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} + engines: {node: '>= 8'} + + mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + + mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + + mlly@1.7.2: + resolution: {integrity: sha512-tN3dvVHYVz4DhSXinXIk7u9syPYaJvio118uomkovAtWBT+RdbP6Lfh/5Lvo519YMmwBafwlh20IPTXIStscpA==} + + monaco-editor@0.50.0: + resolution: {integrity: sha512-8CclLCmrRRh+sul7C08BmPBP3P8wVWfBHomsTcndxg5NRCEPfu/mc2AGU8k37ajjDVXcXFc12ORAMUkmk+lkFA==} + + mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + + mrmime@1.0.1: + resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==} + engines: {node: '>=10'} + + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + muggle-string@0.4.1: + resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} + + mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + + nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + natural-compare-lite@1.4.0: + resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + + node-addon-api@3.2.1: + resolution: {integrity: sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==} + + node-addon-api@7.1.1: + resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} + + node-fetch@2.6.7: + resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-int64@0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + + node-releases@2.0.18: + resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} + + nodejieba@2.5.2: + resolution: {integrity: sha512-ByskJvaBrQ2eV+5M0OeD80S5NKoGaHc9zi3Z/PTKl/95eac2YF8RmWduq9AknLpkQLrLAIcqurrtC6BzjpKwwg==} + engines: {node: '>= 10.20.0'} + + nopt@5.0.0: + resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} + engines: {node: '>=6'} + hasBin: true + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + + normalize-wheel-es@1.2.0: + resolution: {integrity: sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==} + + normalize.css@8.0.1: + resolution: {integrity: sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg==} + + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + + npmlog@5.0.1: + resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} + deprecated: This package is no longer supported. + + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + + on-headers@1.0.2: + resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} + engines: {node: '>= 0.8'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + open@8.4.2: + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} + + os-homedir@2.0.0: + resolution: {integrity: sha512-saRNz0DSC5C/I++gFIaJTXoFJMRwiP5zHar5vV3xQ2TkgEw6hDCcU5F272JjUylpiVgBrZNQHnfjkLabTfb92Q==} + engines: {node: '>=0.10.0'} + deprecated: This is not needed anymore. Use `require('os').homedir()` instead. + + os-name@5.0.1: + resolution: {integrity: sha512-0EQpaHUHq7olp2/YFUr+0vZi9tMpDTblHGz+Ch5RntKxiRXOAY0JOz1UlxhSjMSksHvkm13eD6elJj3M8Ht/kw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + parse-rect@1.2.0: + resolution: {integrity: sha512-4QZ6KYbnE6RTwg9E0HpLchUM9EZt6DnDxajFZZDSV4p/12ZJEvPO702DZpGvRYEPo00yKDys7jASi+/w7aO8LA==} + + path-browserify@1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-is-inside@1.0.2: + resolution: {integrity: sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + path-to-regexp@3.3.0: + resolution: {integrity: sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==} + + pathe@1.1.2: + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + + periscopic@3.1.0: + resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} + + pick-by-alias@1.2.0: + resolution: {integrity: sha512-ESj2+eBxhGrcA1azgHs7lARG5+5iLakc/6nlfbpjcLl00HuuUOIuORhYXN4D1HfvMSKuVtFQjAlnwi1JHEeDIw==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + picomatch@4.0.2: + resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + engines: {node: '>=12'} + + pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + + pinyin@2.11.2: + resolution: {integrity: sha512-tAWDBcowj09j/vLUjty98nVqrbTVNhutf1VcyID4p0sxTFPzRyXw7n7Ic0HQwBdWFIWrrDP8bYiT64gaT6h3gA==} + hasBin: true + + pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + + pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + + pkg-types@1.2.1: + resolution: {integrity: sha512-sQoqa8alT3nHjGuTjuKgOnvjo4cljkufdtLMnO2LBP/wRwuDlo1tkaEdMxCRhyGRPacv/ztlZgDPm2b7FAmEvw==} + + pnpm@9.12.2: + resolution: {integrity: sha512-InIbOhH4FmGuHsaM4ae4eUJaHKW5kcl1sHSsIgsYfOVscI/l22n0yWLJiUUu7nbIKHf07oD0dM69Ye4TRhtiKA==} + engines: {node: '>=18.12'} + hasBin: true + + point-cluster@3.1.8: + resolution: {integrity: sha512-7klIr45dpMeZuqjIK9+qBg3m2IhyZJNJkdqjJFw0Olq75FM8ojrTMjClVUrMjNYRVqtwztxCHH71Fyjhg+YwyQ==} + + polka@0.5.2: + resolution: {integrity: sha512-FVg3vDmCqP80tOrs+OeNlgXYmFppTXdjD5E7I4ET1NjvtNmQrb1/mJibybKkb/d4NA7YWAr1ojxuhpL3FHqdlw==} + + postcss-import@15.1.0: + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: ^8.0.0 + + postcss-js@4.0.1: + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + + postcss-load-config@4.0.2: + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + + postcss-nested@6.2.0: + resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + + postcss-selector-parser@6.1.2: + resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} + engines: {node: '>=4'} + + postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + postcss@8.4.47: + resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} + engines: {node: ^10 || ^12 || >=14} + + prettier@3.3.3: + resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} + engines: {node: '>=14'} + hasBin: true + + pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + prismjs@1.29.0: + resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==} + engines: {node: '>=6'} + + prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + pug-error@2.1.0: + resolution: {integrity: sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg==} + + pug-lexer@5.0.1: + resolution: {integrity: sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==} + + pug-parser@6.0.0: + resolution: {integrity: sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + pure-rand@6.1.0: + resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + range-parser@1.2.0: + resolution: {integrity: sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==} + engines: {node: '>= 0.6'} + + rc@1.2.8: + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true + + react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + + read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + + readable-stream@3.6.0: + resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} + engines: {node: '>= 6'} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + readdirp@4.0.2: + resolution: {integrity: sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==} + engines: {node: '>= 14.16.0'} + + regenerate-unicode-properties@9.0.0: + resolution: {integrity: sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA==} + engines: {node: '>=4'} + + regenerate@1.4.2: + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + + regexpu-core@4.8.0: + resolution: {integrity: sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg==} + engines: {node: '>=4'} + + registry-auth-token@3.3.2: + resolution: {integrity: sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==} + + registry-url@3.1.0: + resolution: {integrity: sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==} + engines: {node: '>=0.10.0'} + + regjsgen@0.5.2: + resolution: {integrity: sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==} + + regjsparser@0.7.0: + resolution: {integrity: sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ==} + hasBin: true + + relative-time-format@1.1.6: + resolution: {integrity: sha512-aCv3juQw4hT1/P/OrVltKWLlp15eW1GRcwP1XdxHrPdZE9MtgqFpegjnTjLhi2m2WI9MT/hQQtE+tjEWG1hgkQ==} + + repeat-string@1.6.1: + resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} + engines: {node: '>=0.10'} + + request-light@0.7.0: + resolution: {integrity: sha512-lMbBMrDoxgsyO+yB3sDcrDuX85yYt7sS8BfQd11jtbW/z5ZWgLZRcEGLsLoYw7I0WSUGQBs8CC8ScIxkTX1+6Q==} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + resolve-cwd@3.0.0: + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + resolve.exports@2.0.2: + resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} + engines: {node: '>=10'} + + resolve@1.22.1: + resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} + hasBin: true + + resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + + rollup-plugin-external-globals@0.10.0: + resolution: {integrity: sha512-RXlupZrmn97AaaS5dWnktkjM+Iy+od0E+8L0mUkMIs3iuoUXNJebueQocQKV7Ircd54fSGGmkBaXwNzY05J1yQ==} + peerDependencies: + rollup: ^2.25.0 || ^3.3.0 || ^4.1.4 + + rollup-plugin-visualizer@5.12.0: + resolution: {integrity: sha512-8/NU9jXcHRs7Nnj07PF2o4gjxmm9lXIrZ8r175bT9dK8qoLlvKTwRMArRCMgpMGlq8CTLugRvEmyMeMXIU2pNQ==} + engines: {node: '>=14'} + hasBin: true + peerDependencies: + rollup: 2.x || 3.x || 4.x + peerDependenciesMeta: + rollup: + optional: true + + rollup@4.24.0: + resolution: {integrity: sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + sade@1.8.1: + resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} + engines: {node: '>=6'} + + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + sass@1.80.1: + resolution: {integrity: sha512-9lBwDZ7j3y/1DKj5Ec249EVGo5CVpwnzIyIj+cqlCjKkApLnzsJ/l9SnV4YnORvW9dQwQN+gQvh/mFZ8CnDs7Q==} + engines: {node: '>=14.0.0'} + hasBin: true + + sass@1.80.4: + resolution: {integrity: sha512-rhMQ2tSF5CsuuspvC94nPM9rToiAFw2h3JTrLlgmNw1MH79v8Cr3DH6KF6o6r+8oofY3iYVPUf66KzC8yuVN1w==} + engines: {node: '>=14.0.0'} + hasBin: true + + select-dom@6.0.2: + resolution: {integrity: sha512-fnRexLCjOE1XtMiV0xGACx4GJFMs/eatOQM0LWL9lxWB8DJ/FeXO39ztqUh6dZCOdoFo/g6jGJIIqNWoMsNLPA==} + + select@1.1.2: + resolution: {integrity: sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==} + + semiver@1.1.0: + resolution: {integrity: sha512-QNI2ChmuioGC1/xjyYwyZYADILWyW6AmS1UH6gDj/SFUUUS4MBAWs/7mxnkRPc/F4iHezDP+O8t0dO8WHiEOdg==} + engines: {node: '>=6'} + + semver@6.3.0: + resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} + hasBin: true + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.3.8: + resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==} + engines: {node: '>=10'} + hasBin: true + + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + + serve-handler@6.1.6: + resolution: {integrity: sha512-x5RL9Y2p5+Sh3D38Fh9i/iQ5ZK+e4xuXRd/pGbM4D13tgo/MGwbttUk8emytcr1YYzBYs+apnUngBDFYfpjPuQ==} + + serve@14.2.4: + resolution: {integrity: sha512-qy1S34PJ/fcY8gjVGszDB3EXiPSk5FKhUa7tQe0UPRddxRidc2V6cNHPNewbE1D7MAkgLuWEt3Vw56vYy73tzQ==} + engines: {node: '>= 14'} + hasBin: true + + set-blocking@2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + showdown@2.1.0: + resolution: {integrity: sha512-/6NVYu4U819R2pUIk79n67SYgJHWCce0a5xTP979WbNp0FL9MN1I1QK662IDU1b6JzKTvmhgI7T7JYIxBi3kMQ==} + hasBin: true + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + sirv-cli@1.0.14: + resolution: {integrity: sha512-yyUTNr984ANKDloqepkYbBSqvx3buwYg2sQKPWjSU+IBia5loaoka2If8N9CMwt8AfP179cdEl7kYJ//iWJHjQ==} + engines: {node: '>= 10'} + hasBin: true + + sirv@1.0.19: + resolution: {integrity: sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==} + engines: {node: '>= 10'} + + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + source-map-js@1.0.2: + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map-support@0.5.13: + resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + source-map@0.7.4: + resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} + engines: {node: '>= 8'} + + sourcemap-codec@1.4.8: + resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + deprecated: Please use @jridgewell/sourcemap-codec instead + + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + + stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} + + string-length@4.0.2: + resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} + engines: {node: '>=10'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-bom@4.0.0: + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} + + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + strip-json-comments@2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + style-mod@4.1.2: + resolution: {integrity: sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==} + + sucrase@3.35.0: + resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + svelte@4.2.19: + resolution: {integrity: sha512-IY1rnGr6izd10B0A8LqsBfmlT5OILVuZ7XsI0vdGPEvuonFV7NYEUK4dAkm9Zg2q0Um92kYjTpS1CAP3Nh/KWw==} + engines: {node: '>=16'} + + svg-tags@1.0.0: + resolution: {integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==} + + svgo@3.3.2: + resolution: {integrity: sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==} + engines: {node: '>=14.0.0'} + hasBin: true + + tailwindcss@3.4.14: + resolution: {integrity: sha512-IcSvOcTRcUtQQ7ILQL5quRDg7Xs93PdJEk1ZLbhhvJc7uj/OAhYOnruEiwnGgBvUtaUAJ8/mhSw1o8L2jCiENA==} + engines: {node: '>=14.0.0'} + hasBin: true + + tar@6.1.12: + resolution: {integrity: sha512-jU4TdemS31uABHd+Lt5WEYJuzn+TJTCBLljvIAHZOz6M9Os5pJ4dD+vRFLxPa/n3T0iEFzpi+0x1UfuDZYbRMw==} + engines: {node: '>=10'} + + test-exclude@6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} + + thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + + thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + + three@0.166.1: + resolution: {integrity: sha512-LtuafkKHHzm61AQA1be2MAYIw1IjmhOUxhBa0prrLpEMWbV7ijvxCRHjSgHPGp2493wLBzwKV46tA9nivLEgKg==} + + tiny-emitter@2.1.0: + resolution: {integrity: sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==} + + tiny-invariant@1.3.3: + resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} + + tinydate@1.3.0: + resolution: {integrity: sha512-7cR8rLy2QhYHpsBDBVYnnWXm8uRTr38RoZakFSW7Bs7PzfMPNZthuMLkwqZv7MTu8lhQ91cOFYS5a7iFj2oR3w==} + engines: {node: '>=4'} + + tlds@1.255.0: + resolution: {integrity: sha512-tcwMRIioTcF/FcxLev8MJWxCp+GUALRhFEqbDoZrnowmKSGqPrl5pqS+Sut2m8BgJ6S4FExCSSpGffZ0Tks6Aw==} + hasBin: true + + tmpl@1.0.5: + resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} + + to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + token-stream@1.0.0: + resolution: {integrity: sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==} + + totalist@1.1.0: + resolution: {integrity: sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==} + engines: {node: '>=6'} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + trouter@2.0.1: + resolution: {integrity: sha512-kr8SKKw94OI+xTGOkfsvwZQ8mWoikZDd2n8XZHjJVZUARZT+4/VV6cacRS6CLsH9bNm+HFIPU1Zx4CnNnb4qlQ==} + engines: {node: '>=6'} + + ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + + tslib@2.4.1: + resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} + + tsx@4.19.1: + resolution: {integrity: sha512-0flMz1lh74BR4wOvBjuh9olbnwqCPc35OOlfyzHba0Dc+QNUeWX/Gq2YTbnwcWPO3BMd8fkzRVrHcsR+a7z7rA==} + engines: {node: '>=18.0.0'} + hasBin: true + + turbo-darwin-64@2.2.3: + resolution: {integrity: sha512-Rcm10CuMKQGcdIBS3R/9PMeuYnv6beYIHqfZFeKWVYEWH69sauj4INs83zKMTUiZJ3/hWGZ4jet9AOwhsssLyg==} + cpu: [x64] + os: [darwin] + + turbo-darwin-arm64@2.2.3: + resolution: {integrity: sha512-+EIMHkuLFqUdJYsA3roj66t9+9IciCajgj+DVek+QezEdOJKcRxlvDOS2BUaeN8kEzVSsNiAGnoysFWYw4K0HA==} + cpu: [arm64] + os: [darwin] + + turbo-linux-64@2.2.3: + resolution: {integrity: sha512-UBhJCYnqtaeOBQLmLo8BAisWbc9v9daL9G8upLR+XGj6vuN/Nz6qUAhverN4Pyej1g4Nt1BhROnj6GLOPYyqxQ==} + cpu: [x64] + os: [linux] + + turbo-linux-arm64@2.2.3: + resolution: {integrity: sha512-hJYT9dN06XCQ3jBka/EWvvAETnHRs3xuO/rb5bESmDfG+d9yQjeTMlhRXKrr4eyIMt6cLDt1LBfyi+6CQ+VAwQ==} + cpu: [arm64] + os: [linux] + + turbo-windows-64@2.2.3: + resolution: {integrity: sha512-NPrjacrZypMBF31b4HE4ROg4P3nhMBPHKS5WTpMwf7wydZ8uvdEHpESVNMOtqhlp857zbnKYgP+yJF30H3N2dQ==} + cpu: [x64] + os: [win32] + + turbo-windows-arm64@2.2.3: + resolution: {integrity: sha512-fnNrYBCqn6zgKPKLHu4sOkihBI/+0oYFr075duRxqUZ+1aLWTAGfHZLgjVeLh3zR37CVzuerGIPWAEkNhkWEIw==} + cpu: [arm64] + os: [win32] + + turbo@2.2.3: + resolution: {integrity: sha512-5lDvSqIxCYJ/BAd6rQGK/AzFRhBkbu4JHVMLmGh/hCb7U3CqSnr5Tjwfy9vc+/5wG2DJ6wttgAaA7MoCgvBKZQ==} + hasBin: true + + type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + type-fest@2.19.0: + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} + + typescript-auto-import-cache@0.3.3: + resolution: {integrity: sha512-ojEC7+Ci1ij9eE6hp8Jl9VUNnsEKzztktP5gtYNRMrTmfXVwA1PITYYAkpxCvvupdSYa/Re51B6KMcv1CTZEUA==} + + typescript@5.6.3: + resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} + engines: {node: '>=14.17'} + hasBin: true + + ufo@1.5.4: + resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} + + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + + unicode-canonical-property-names-ecmascript@2.0.0: + resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} + engines: {node: '>=4'} + + unicode-match-property-ecmascript@2.0.0: + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} + + unicode-match-property-value-ecmascript@2.1.0: + resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} + engines: {node: '>=4'} + + unicode-property-aliases-ecmascript@2.1.0: + resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} engines: {node: '>=4'} - dev: false - /axios@0.21.4: - resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==} + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + update-browserslist-db@1.1.1: + resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + update-check@1.5.4: + resolution: {integrity: sha512-5YHsflzHP4t1G+8WGPlvKbJEbAJGCgw+Em+dGR1KmBUbr1J36SJBqlHLjR7oob7sco5hWHGQVcr9B2poIVDDTQ==} + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + url-join@4.0.1: + resolution: {integrity: sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==} + + url-regex@5.0.0: + resolution: {integrity: sha512-O08GjTiAFNsSlrUWfqF1jH0H1W3m35ZyadHrGv5krdnmPPoxP27oDTqux/579PtaroiSGm5yma6KT1mHFH6Y/g==} + engines: {node: '>=8'} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + utils-extend@1.0.8: + resolution: {integrity: sha512-+VzQieEAijyCFGqnGAWIy7Em1dFGdgf1w+orKwmTWHyaGL19aw9Oq5e5ZZaxgcS777AkPYEsbgWqpz5E6KniPg==} + + uuid@10.0.0: + resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} + hasBin: true + + v8-to-istanbul@9.3.0: + resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} + engines: {node: '>=10.12.0'} + + vanilla-jsoneditor@1.0.8: + resolution: {integrity: sha512-5tKODR6J3IbGoMeBv4DEEU/Dlam4bPunOarIJKfrd5xs4bUife59Lp8Psjf86Y8OAM9mvxkrwR275XsBnvtO9A==} + + vanilla-picker@2.12.3: + resolution: {integrity: sha512-qVkT1E7yMbUsB2mmJNFmaXMWE2hF8ffqzMMwe9zdAikd8u2VfnsVY2HQcOUi2F38bgbxzlJBEdS1UUhOXdF9GQ==} + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + vite-aliases@0.11.7: + resolution: {integrity: sha512-2hbJKs9QazE2V9+tNHg5hdLQHDnrsysjoGse66iG4A7eM8FuAXaz5dkocWQ79oFLq5QG0h4sFxnCI8QQV1zOtQ==} + engines: {node: '>=16.6.0'} + peerDependencies: + vite: 5.x + + vite-plugin-dynamic-import@1.6.0: + resolution: {integrity: sha512-TM0sz70wfzTIo9YCxVFwS8OA9lNREsh+0vMHGSkWDTZ7bgd1Yjs5RV8EgB634l/91IsXJReg0xtmuQqP0mf+rg==} + + vite-plugin-externalize-deps@0.8.0: + resolution: {integrity: sha512-MdC8kRNQ1ZjhUicU2HcqGVhL0UUFqv83Zp1JZdHjE82PoPR8wsSWZ3axpot7B6img3sW6g8shYJikE0CKA0chA==} + peerDependencies: + vite: ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 + + vite-svg-loader@5.1.0: + resolution: {integrity: sha512-M/wqwtOEjgb956/+m5ZrYT/Iq6Hax0OakWbokj8+9PXOnB7b/4AxESHieEtnNEy7ZpjsjYW1/5nK8fATQMmRxw==} + peerDependencies: + vue: '>=3.2.13' + + vite@5.4.10: + resolution: {integrity: sha512-1hvaPshuPUtxeQ0hsVH3Mud0ZanOLwVTneA1EgbAM5LhaZEqyPWGRQ7BtaMvUrTDeEaC8pxtj6a6jku3x4z6SQ==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + + volar-service-css@0.0.62: + resolution: {integrity: sha512-JwNyKsH3F8PuzZYuqPf+2e+4CTU8YoyUHEHVnoXNlrLe7wy9U3biomZ56llN69Ris7TTy/+DEX41yVxQpM4qvg==} + peerDependencies: + '@volar/language-service': ~2.4.0 + peerDependenciesMeta: + '@volar/language-service': + optional: true + + volar-service-emmet@0.0.62: + resolution: {integrity: sha512-U4dxWDBWz7Pi4plpbXf4J4Z/ss6kBO3TYrACxWNsE29abu75QzVS0paxDDhI6bhqpbDFXlpsDhZ9aXVFpnfGRQ==} + peerDependencies: + '@volar/language-service': ~2.4.0 + peerDependenciesMeta: + '@volar/language-service': + optional: true + + volar-service-html@0.0.62: + resolution: {integrity: sha512-Zw01aJsZRh4GTGUjveyfEzEqpULQUdQH79KNEiKVYHZyuGtdBRYCHlrus1sueSNMxwwkuF5WnOHfvBzafs8yyQ==} + peerDependencies: + '@volar/language-service': ~2.4.0 + peerDependenciesMeta: + '@volar/language-service': + optional: true + + volar-service-json@0.0.62: + resolution: {integrity: sha512-Ot+jP+/LzKcaGF7nzrn+gwpzAleb4ej5buO05M8KxfwfODte7o1blARKRoJ3Nv7ls0DBM38Dd5vjzvA9c/9Jtg==} + peerDependencies: + '@volar/language-service': ~2.4.0 + peerDependenciesMeta: + '@volar/language-service': + optional: true + + volar-service-pug-beautify@0.0.62: + resolution: {integrity: sha512-dAFNuNEwTnnVthYoNJhoStwhf/PojzglwCrdhOb2nBegTG3xXMWRFmQzb0JfIlt2wq2wfUq5j+JJswgSD3KluQ==} + peerDependencies: + '@volar/language-service': ~2.4.0 + peerDependenciesMeta: + '@volar/language-service': + optional: true + + volar-service-pug@0.0.62: + resolution: {integrity: sha512-C0/O8uGnRfijWKE0zFXxJ/o7BbLebzretsEaiMkvBDIxm5oe7HRDzQr6CgknV/WVgiohZ74v+0CwBPl2YmcPUQ==} + + volar-service-typescript-twoslash-queries@0.0.62: + resolution: {integrity: sha512-KxFt4zydyJYYI0kFAcWPTh4u0Ha36TASPZkAnNY784GtgajerUqM80nX/W1d0wVhmcOFfAxkVsf/Ed+tiYU7ng==} + peerDependencies: + '@volar/language-service': ~2.4.0 + peerDependenciesMeta: + '@volar/language-service': + optional: true + + volar-service-typescript@0.0.62: + resolution: {integrity: sha512-p7MPi71q7KOsH0eAbZwPBiKPp9B2+qrdHAd6VY5oTo9BUXatsOAdakTm9Yf0DUj6uWBAaOT01BSeVOPwucMV1g==} + peerDependencies: + '@volar/language-service': ~2.4.0 + peerDependenciesMeta: + '@volar/language-service': + optional: true + + vscode-css-languageservice@6.3.1: + resolution: {integrity: sha512-1BzTBuJfwMc3A0uX4JBdJgoxp74cjj4q2mDJdp49yD/GuAq4X0k5WtK6fNcMYr+FfJ9nqgR6lpfCSZDkARJ5qQ==} + + vscode-html-languageservice@5.3.1: + resolution: {integrity: sha512-ysUh4hFeW/WOWz/TO9gm08xigiSsV/FOAZ+DolgJfeLftna54YdmZ4A+lIn46RbdO3/Qv5QHTn1ZGqmrXQhZyA==} + + vscode-json-languageservice@5.4.1: + resolution: {integrity: sha512-5czFGNyVPxz3ZJYl8R3a3SuIj5gjhmGF4Wv05MRPvD4DEnHK6b8km4VbNMJNHBlTCh7A0aHzUbPVzo+0C18mCA==} + + vscode-jsonrpc@8.2.0: + resolution: {integrity: sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==} + engines: {node: '>=14.0.0'} + + vscode-languageserver-protocol@3.17.5: + resolution: {integrity: sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==} + + vscode-languageserver-textdocument@1.0.12: + resolution: {integrity: sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==} + + vscode-languageserver-types@3.17.5: + resolution: {integrity: sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==} + + vscode-languageserver@9.0.1: + resolution: {integrity: sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==} + hasBin: true + + vscode-nls@5.2.0: + resolution: {integrity: sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==} + + vscode-uri@2.1.2: + resolution: {integrity: sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A==} + + vscode-uri@3.0.8: + resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==} + + vue-chartjs@5.3.1: + resolution: {integrity: sha512-rZjqcHBxKiHrBl0CIvcOlVEBwRhpWAVf6rDU3vUfa7HuSRmGtCslc0Oc8m16oAVuk0erzc1FCtH1VCriHsrz+A==} + peerDependencies: + chart.js: ^4.1.1 + vue: ^3.0.0-0 || ^2.7.0 + + vue-clipboard3@2.0.0: + resolution: {integrity: sha512-Q9S7dzWGax7LN5iiSPcu/K1GGm2gcBBlYwmMsUc5/16N6w90cbKow3FnPmPs95sungns4yvd9/+JhbAznECS2A==} + + vue-demi@0.14.10: + resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==} + engines: {node: '>=12'} + hasBin: true + peerDependencies: + '@vue/composition-api': ^1.0.0-rc.1 + vue: ^3.0.0-0 || ^2.6.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + + vue-i18n@9.13.1: + resolution: {integrity: sha512-mh0GIxx0wPtPlcB1q4k277y0iKgo25xmDPWioVVYanjPufDBpvu5ySTjP5wOrSvlYQ2m1xI+CFhGdauv/61uQg==} + engines: {node: '>= 16'} + peerDependencies: + vue: ^3.0.0 + + vue-router@4.4.0: + resolution: {integrity: sha512-HB+t2p611aIZraV2aPSRNXf0Z/oLZFrlygJm+sZbdJaW6lcFqEDQwnzUBXn+DApw+/QzDU/I9TeWx9izEjTmsA==} + peerDependencies: + vue: ^3.2.0 + + vue-tsc@2.1.6: + resolution: {integrity: sha512-f98dyZp5FOukcYmbFpuSCJ4Z0vHSOSmxGttZJCsFeX0M4w/Rsq0s4uKXjcSRsZqsRgQa6z7SfuO+y0HVICE57Q==} + hasBin: true + peerDependencies: + typescript: '>=5.0.0' + + vue@3.5.12: + resolution: {integrity: sha512-CLVZtXtn2ItBIi/zHZ0Sg1Xkb7+PU32bJJ8Bmy7ts3jxXTcbfsEfBivFYYWz1Hur+lalqGAh65Coin0r+HRUfg==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + vuex@4.1.0: + resolution: {integrity: sha512-hmV6UerDrPcgbSy9ORAtNXDr9M4wlNP4pEFKye4ujJF8oqgFFuxDCdOLS3eNoRTtq5O3hoBDh9Doj1bQMYHRbQ==} + peerDependencies: + vue: ^3.2.0 + + w3c-keyname@2.2.8: + resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} + + walker@1.0.8: + resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + wide-align@1.1.5: + resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} + + widest-line@4.0.1: + resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==} + engines: {node: '>=12'} + + windows-release@5.0.1: + resolution: {integrity: sha512-y1xFdFvdMiDXI3xiOhMbJwt1Y7dUxidha0CWPs1NgjZIjZANTcX7+7bMqNjuezhzb8s5JGEiBAbQjQQYYy7ulw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + write-file-atomic@4.0.2: + resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + yaml@2.6.0: + resolution: {integrity: sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==} + engines: {node: '>= 14'} + hasBin: true + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + +snapshots: + + '@alloc/quick-lru@5.2.0': {} + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + + '@arr/every@1.0.1': {} + + '@babel/code-frame@7.25.9': + dependencies: + '@babel/highlight': 7.25.9 + picocolors: 1.1.1 + + '@babel/compat-data@7.25.9': {} + + '@babel/core@7.25.9': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.25.9 + '@babel/generator': 7.25.9 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-module-transforms': 7.25.9(@babel/core@7.25.9) + '@babel/helpers': 7.25.9 + '@babel/parser': 7.25.9 + '@babel/template': 7.25.9 + '@babel/traverse': 7.25.9 + '@babel/types': 7.25.9 + convert-source-map: 2.0.0 + debug: 4.3.4 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.25.9': + dependencies: + '@babel/types': 7.25.9 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.0.2 + + '@babel/helper-annotate-as-pure@7.25.9': + dependencies: + '@babel/types': 7.25.9 + + '@babel/helper-compilation-targets@7.25.9': + dependencies: + '@babel/compat-data': 7.25.9 + '@babel/helper-validator-option': 7.25.9 + browserslist: 4.24.2 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-create-class-features-plugin@7.25.9(@babel/core@7.25.9)': + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-member-expression-to-functions': 7.25.9 + '@babel/helper-optimise-call-expression': 7.25.9 + '@babel/helper-replace-supers': 7.25.9(@babel/core@7.25.9) + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/traverse': 7.25.9 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-member-expression-to-functions@7.25.9': + dependencies: + '@babel/traverse': 7.25.9 + '@babel/types': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-imports@7.25.9': + dependencies: + '@babel/traverse': 7.25.9 + '@babel/types': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.25.9(@babel/core@7.25.9)': + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-simple-access': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/helper-optimise-call-expression@7.25.9': + dependencies: + '@babel/types': 7.25.9 + + '@babel/helper-plugin-utils@7.25.9': {} + + '@babel/helper-replace-supers@7.25.9(@babel/core@7.25.9)': + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-member-expression-to-functions': 7.25.9 + '@babel/helper-optimise-call-expression': 7.25.9 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/helper-simple-access@7.25.9': + dependencies: + '@babel/traverse': 7.25.9 + '@babel/types': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/helper-skip-transparent-expression-wrappers@7.25.9': + dependencies: + '@babel/traverse': 7.25.9 + '@babel/types': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/helper-string-parser@7.25.7': {} + + '@babel/helper-string-parser@7.25.9': {} + + '@babel/helper-validator-identifier@7.25.7': {} + + '@babel/helper-validator-identifier@7.25.9': {} + + '@babel/helper-validator-option@7.25.9': {} + + '@babel/helpers@7.25.9': + dependencies: + '@babel/template': 7.25.9 + '@babel/types': 7.25.9 + + '@babel/highlight@7.25.9': + dependencies: + '@babel/helper-validator-identifier': 7.25.9 + chalk: 2.4.2 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/parser@7.25.8': + dependencies: + '@babel/types': 7.25.8 + + '@babel/parser@7.25.9': + dependencies: + '@babel/types': 7.25.9 + + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.25.9)': + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.25.9)': + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.25.9)': + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.25.9)': + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-import-attributes@7.25.9(@babel/core@7.25.9)': + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.25.9)': + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.25.9)': + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.25.9)': + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.25.9)': + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.25.9)': + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.25.9)': + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.25.9)': + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.25.9)': + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.25.9)': + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.25.9)': + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.25.9)': + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.25.9)': + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-typescript@7.25.9(@babel/core@7.25.9)': + dependencies: + '@babel/core': 7.25.9 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.25.9) + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.25.9) + transitivePeerDependencies: + - supports-color + + '@babel/template@7.25.9': + dependencies: + '@babel/code-frame': 7.25.9 + '@babel/parser': 7.25.9 + '@babel/types': 7.25.9 + + '@babel/traverse@7.25.9': + dependencies: + '@babel/code-frame': 7.25.9 + '@babel/generator': 7.25.9 + '@babel/parser': 7.25.9 + '@babel/template': 7.25.9 + '@babel/types': 7.25.9 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.25.8': + dependencies: + '@babel/helper-string-parser': 7.25.7 + '@babel/helper-validator-identifier': 7.25.7 + to-fast-properties: 2.0.0 + + '@babel/types@7.25.9': + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + + '@bcoe/v8-coverage@0.2.3': {} + + '@codemirror/autocomplete@6.18.1(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)(@lezer/common@1.2.3)': + dependencies: + '@codemirror/language': 6.10.3 + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.34.1 + '@lezer/common': 1.2.3 + + '@codemirror/commands@6.7.0': + dependencies: + '@codemirror/language': 6.10.3 + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.34.1 + '@lezer/common': 1.2.3 + + '@codemirror/lang-json@6.0.1': + dependencies: + '@codemirror/language': 6.10.3 + '@lezer/json': 1.0.2 + + '@codemirror/language@6.10.3': + dependencies: + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.34.1 + '@lezer/common': 1.2.3 + '@lezer/highlight': 1.2.1 + '@lezer/lr': 1.4.2 + style-mod: 4.1.2 + + '@codemirror/lint@6.8.2': + dependencies: + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.34.1 + crelt: 1.0.6 + + '@codemirror/search@6.5.6': + dependencies: + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.34.1 + crelt: 1.0.6 + + '@codemirror/state@6.4.1': {} + + '@codemirror/view@6.34.1': + dependencies: + '@codemirror/state': 6.4.1 + style-mod: 4.1.2 + w3c-keyname: 2.2.8 + + '@ctrl/tinycolor@3.4.1': {} + + '@element-plus/icons-vue@2.3.1(vue@3.5.12(typescript@5.6.3))': + dependencies: + vue: 3.5.12(typescript@5.6.3) + + '@emmetio/abbreviation@2.3.3': + dependencies: + '@emmetio/scanner': 1.0.4 + + '@emmetio/css-abbreviation@2.1.8': + dependencies: + '@emmetio/scanner': 1.0.4 + + '@emmetio/css-parser@0.4.0': + dependencies: + '@emmetio/stream-reader': 2.2.0 + '@emmetio/stream-reader-utils': 0.1.0 + + '@emmetio/html-matcher@1.3.0': + dependencies: + '@emmetio/scanner': 1.0.4 + + '@emmetio/scanner@1.0.4': {} + + '@emmetio/stream-reader-utils@0.1.0': {} + + '@emmetio/stream-reader@2.2.0': {} + + '@esbuild/aix-ppc64@0.21.5': + optional: true + + '@esbuild/aix-ppc64@0.23.1': + optional: true + + '@esbuild/android-arm64@0.21.5': + optional: true + + '@esbuild/android-arm64@0.23.1': + optional: true + + '@esbuild/android-arm@0.21.5': + optional: true + + '@esbuild/android-arm@0.23.1': + optional: true + + '@esbuild/android-x64@0.21.5': + optional: true + + '@esbuild/android-x64@0.23.1': + optional: true + + '@esbuild/darwin-arm64@0.21.5': + optional: true + + '@esbuild/darwin-arm64@0.23.1': + optional: true + + '@esbuild/darwin-x64@0.21.5': + optional: true + + '@esbuild/darwin-x64@0.23.1': + optional: true + + '@esbuild/freebsd-arm64@0.21.5': + optional: true + + '@esbuild/freebsd-arm64@0.23.1': + optional: true + + '@esbuild/freebsd-x64@0.21.5': + optional: true + + '@esbuild/freebsd-x64@0.23.1': + optional: true + + '@esbuild/linux-arm64@0.21.5': + optional: true + + '@esbuild/linux-arm64@0.23.1': + optional: true + + '@esbuild/linux-arm@0.21.5': + optional: true + + '@esbuild/linux-arm@0.23.1': + optional: true + + '@esbuild/linux-ia32@0.21.5': + optional: true + + '@esbuild/linux-ia32@0.23.1': + optional: true + + '@esbuild/linux-loong64@0.21.5': + optional: true + + '@esbuild/linux-loong64@0.23.1': + optional: true + + '@esbuild/linux-mips64el@0.21.5': + optional: true + + '@esbuild/linux-mips64el@0.23.1': + optional: true + + '@esbuild/linux-ppc64@0.21.5': + optional: true + + '@esbuild/linux-ppc64@0.23.1': + optional: true + + '@esbuild/linux-riscv64@0.21.5': + optional: true + + '@esbuild/linux-riscv64@0.23.1': + optional: true + + '@esbuild/linux-s390x@0.21.5': + optional: true + + '@esbuild/linux-s390x@0.23.1': + optional: true + + '@esbuild/linux-x64@0.21.5': + optional: true + + '@esbuild/linux-x64@0.23.1': + optional: true + + '@esbuild/netbsd-x64@0.21.5': + optional: true + + '@esbuild/netbsd-x64@0.23.1': + optional: true + + '@esbuild/openbsd-arm64@0.23.1': + optional: true + + '@esbuild/openbsd-x64@0.21.5': + optional: true + + '@esbuild/openbsd-x64@0.23.1': + optional: true + + '@esbuild/sunos-x64@0.21.5': + optional: true + + '@esbuild/sunos-x64@0.23.1': + optional: true + + '@esbuild/win32-arm64@0.21.5': + optional: true + + '@esbuild/win32-arm64@0.23.1': + optional: true + + '@esbuild/win32-ia32@0.21.5': + optional: true + + '@esbuild/win32-ia32@0.23.1': + optional: true + + '@esbuild/win32-x64@0.21.5': + optional: true + + '@esbuild/win32-x64@0.23.1': + optional: true + + '@floating-ui/core@1.6.8': + dependencies: + '@floating-ui/utils': 0.2.8 + + '@floating-ui/dom@1.6.11': + dependencies: + '@floating-ui/core': 1.6.8 + '@floating-ui/utils': 0.2.8 + + '@floating-ui/utils@0.2.8': {} + + '@fortawesome/fontawesome-common-types@6.6.0': {} + + '@fortawesome/fontawesome-svg-core@6.6.0': + dependencies: + '@fortawesome/fontawesome-common-types': 6.6.0 + + '@fortawesome/free-brands-svg-icons@6.6.0': + dependencies: + '@fortawesome/fontawesome-common-types': 6.6.0 + + '@fortawesome/free-regular-svg-icons@6.6.0': + dependencies: + '@fortawesome/fontawesome-common-types': 6.6.0 + + '@fortawesome/free-solid-svg-icons@6.6.0': + dependencies: + '@fortawesome/fontawesome-common-types': 6.6.0 + + '@fortawesome/vue-fontawesome@3.0.8(@fortawesome/fontawesome-svg-core@6.6.0)(vue@3.5.12(typescript@5.6.3))': + dependencies: + '@fortawesome/fontawesome-svg-core': 6.6.0 + vue: 3.5.12(typescript@5.6.3) + + '@intlify/core-base@9.13.1': + dependencies: + '@intlify/message-compiler': 9.13.1 + '@intlify/shared': 9.13.1 + + '@intlify/message-compiler@9.13.1': + dependencies: + '@intlify/shared': 9.13.1 + source-map-js: 1.0.2 + + '@intlify/shared@9.13.1': {} + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@istanbuljs/load-nyc-config@1.1.0': + dependencies: + camelcase: 5.3.1 + find-up: 4.1.0 + get-package-type: 0.1.0 + js-yaml: 3.14.1 + resolve-from: 5.0.0 + + '@istanbuljs/schema@0.1.3': {} + + '@jest/console@29.7.0': + dependencies: + '@jest/types': 29.6.3 + '@types/node': 20.17.0 + chalk: 4.1.2 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + slash: 3.0.0 + + '@jest/core@29.7.0': + dependencies: + '@jest/console': 29.7.0 + '@jest/reporters': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.17.0 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + ci-info: 3.9.0 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-changed-files: 29.7.0 + jest-config: 29.7.0(@types/node@20.17.0) + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-resolve-dependencies: 29.7.0 + jest-runner: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + jest-watcher: 29.7.0 + micromatch: 4.0.5 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + - ts-node + + '@jest/environment@29.7.0': + dependencies: + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.17.0 + jest-mock: 29.7.0 + + '@jest/expect-utils@29.7.0': + dependencies: + jest-get-type: 29.6.3 + + '@jest/expect@29.7.0': + dependencies: + expect: 29.7.0 + jest-snapshot: 29.7.0 + transitivePeerDependencies: + - supports-color + + '@jest/fake-timers@29.7.0': + dependencies: + '@jest/types': 29.6.3 + '@sinonjs/fake-timers': 10.3.0 + '@types/node': 20.17.0 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-util: 29.7.0 + + '@jest/globals@29.7.0': + dependencies: + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0 + '@jest/types': 29.6.3 + jest-mock: 29.7.0 + transitivePeerDependencies: + - supports-color + + '@jest/reporters@29.7.0': + dependencies: + '@bcoe/v8-coverage': 0.2.3 + '@jest/console': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.25 + '@types/node': 20.17.0 + chalk: 4.1.2 + collect-v8-coverage: 1.0.2 + exit: 0.1.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-instrument: 6.0.3 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 4.0.1 + istanbul-reports: 3.1.7 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + jest-worker: 29.7.0 + slash: 3.0.0 + string-length: 4.0.2 + strip-ansi: 6.0.1 + v8-to-istanbul: 9.3.0 + transitivePeerDependencies: + - supports-color + + '@jest/schemas@29.6.3': + dependencies: + '@sinclair/typebox': 0.27.8 + + '@jest/source-map@29.6.3': + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + callsites: 3.1.0 + graceful-fs: 4.2.11 + + '@jest/test-result@29.7.0': + dependencies: + '@jest/console': 29.7.0 + '@jest/types': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + collect-v8-coverage: 1.0.2 + + '@jest/test-sequencer@29.7.0': + dependencies: + '@jest/test-result': 29.7.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + slash: 3.0.0 + + '@jest/transform@29.7.0': + dependencies: + '@babel/core': 7.25.9 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.25 + babel-plugin-istanbul: 6.1.1 + chalk: 4.1.2 + convert-source-map: 2.0.0 + fast-json-stable-stringify: 2.1.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + micromatch: 4.0.5 + pirates: 4.0.6 + slash: 3.0.0 + write-file-atomic: 4.0.2 + transitivePeerDependencies: + - supports-color + + '@jest/types@29.6.3': + dependencies: + '@jest/schemas': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 20.17.0 + '@types/yargs': 17.0.33 + chalk: 4.1.2 + + '@johnsoncodehk/pug-beautify@0.2.2': {} + + '@jridgewell/gen-mapping@0.3.5': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@jsep-plugin/assignment@1.2.1(jsep@1.3.9)': + dependencies: + jsep: 1.3.9 + + '@jsep-plugin/regex@1.0.3(jsep@1.3.9)': + dependencies: + jsep: 1.3.9 + + '@jsonquerylang/jsonquery@3.1.1': {} + + '@kurkle/color@0.3.2': {} + + '@lexical/clipboard@0.16.1': + dependencies: + '@lexical/html': 0.16.1 + '@lexical/list': 0.16.1 + '@lexical/selection': 0.16.1 + '@lexical/utils': 0.16.1 + lexical: 0.16.1 + + '@lexical/code@0.16.1': + dependencies: + '@lexical/utils': 0.16.1 + lexical: 0.16.1 + prismjs: 1.29.0 + + '@lexical/history@0.16.1': + dependencies: + '@lexical/utils': 0.16.1 + lexical: 0.16.1 + + '@lexical/html@0.16.1': + dependencies: + '@lexical/selection': 0.16.1 + '@lexical/utils': 0.16.1 + lexical: 0.16.1 + + '@lexical/link@0.16.1': + dependencies: + '@lexical/utils': 0.16.1 + lexical: 0.16.1 + + '@lexical/list@0.16.1': + dependencies: + '@lexical/utils': 0.16.1 + lexical: 0.16.1 + + '@lexical/markdown@0.16.1': + dependencies: + '@lexical/code': 0.16.1 + '@lexical/link': 0.16.1 + '@lexical/list': 0.16.1 + '@lexical/rich-text': 0.16.1 + '@lexical/text': 0.16.1 + '@lexical/utils': 0.16.1 + lexical: 0.16.1 + + '@lexical/rich-text@0.16.1': + dependencies: + '@lexical/clipboard': 0.16.1 + '@lexical/selection': 0.16.1 + '@lexical/utils': 0.16.1 + lexical: 0.16.1 + + '@lexical/selection@0.16.1': + dependencies: + lexical: 0.16.1 + + '@lexical/table@0.16.1': + dependencies: + '@lexical/utils': 0.16.1 + lexical: 0.16.1 + + '@lexical/text@0.16.1': + dependencies: + lexical: 0.16.1 + + '@lexical/utils@0.16.1': + dependencies: + '@lexical/list': 0.16.1 + '@lexical/selection': 0.16.1 + '@lexical/table': 0.16.1 + lexical: 0.16.1 + + '@lezer/common@1.2.3': {} + + '@lezer/highlight@1.2.1': + dependencies: + '@lezer/common': 1.2.3 + + '@lezer/json@1.0.2': + dependencies: + '@lezer/common': 1.2.3 + '@lezer/highlight': 1.2.1 + '@lezer/lr': 1.4.2 + + '@lezer/lr@1.4.2': + dependencies: + '@lezer/common': 1.2.3 + + '@mapbox/node-pre-gyp@1.0.10': + dependencies: + detect-libc: 2.0.1 + https-proxy-agent: 5.0.1 + make-dir: 3.1.0 + node-fetch: 2.6.7 + nopt: 5.0.0 + npmlog: 5.0.1 + rimraf: 3.0.2 + semver: 7.3.8 + tar: 6.1.12 + transitivePeerDependencies: + - encoding + - supports-color + optional: true + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.14.0 + + '@parcel/watcher-android-arm64@2.4.1': + optional: true + + '@parcel/watcher-darwin-arm64@2.4.1': + optional: true + + '@parcel/watcher-darwin-x64@2.4.1': + optional: true + + '@parcel/watcher-freebsd-x64@2.4.1': + optional: true + + '@parcel/watcher-linux-arm-glibc@2.4.1': + optional: true + + '@parcel/watcher-linux-arm64-glibc@2.4.1': + optional: true + + '@parcel/watcher-linux-arm64-musl@2.4.1': + optional: true + + '@parcel/watcher-linux-x64-glibc@2.4.1': + optional: true + + '@parcel/watcher-linux-x64-musl@2.4.1': + optional: true + + '@parcel/watcher-win32-arm64@2.4.1': + optional: true + + '@parcel/watcher-win32-ia32@2.4.1': + optional: true + + '@parcel/watcher-win32-x64@2.4.1': + optional: true + + '@parcel/watcher@2.4.1': + dependencies: + detect-libc: 1.0.3 + is-glob: 4.0.3 + micromatch: 4.0.5 + node-addon-api: 7.1.1 + optionalDependencies: + '@parcel/watcher-android-arm64': 2.4.1 + '@parcel/watcher-darwin-arm64': 2.4.1 + '@parcel/watcher-darwin-x64': 2.4.1 + '@parcel/watcher-freebsd-x64': 2.4.1 + '@parcel/watcher-linux-arm-glibc': 2.4.1 + '@parcel/watcher-linux-arm64-glibc': 2.4.1 + '@parcel/watcher-linux-arm64-musl': 2.4.1 + '@parcel/watcher-linux-x64-glibc': 2.4.1 + '@parcel/watcher-linux-x64-musl': 2.4.1 + '@parcel/watcher-win32-arm64': 2.4.1 + '@parcel/watcher-win32-ia32': 2.4.1 + '@parcel/watcher-win32-x64': 2.4.1 + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@polka/url@0.5.0': {} + + '@polka/url@1.0.0-next.21': {} + + '@popperjs/core@2.11.8': {} + + '@replit/codemirror-indentation-markers@6.5.3(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)': + dependencies: + '@codemirror/language': 6.10.3 + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.34.1 + + '@rollup/pluginutils@5.1.3(rollup@4.24.0)': + dependencies: + '@types/estree': 1.0.6 + estree-walker: 2.0.2 + picomatch: 4.0.2 + optionalDependencies: + rollup: 4.24.0 + + '@rollup/rollup-android-arm-eabi@4.24.0': + optional: true + + '@rollup/rollup-android-arm64@4.24.0': + optional: true + + '@rollup/rollup-darwin-arm64@4.24.0': + optional: true + + '@rollup/rollup-darwin-x64@4.24.0': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.24.0': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.24.0': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.24.0': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.24.0': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.24.0': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.24.0': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.24.0': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.24.0': + optional: true + + '@rollup/rollup-linux-x64-musl@4.24.0': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.24.0': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.24.0': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.24.0': + optional: true + + '@sinclair/typebox@0.27.8': {} + + '@sinonjs/commons@3.0.1': + dependencies: + type-detect: 4.0.8 + + '@sinonjs/fake-timers@10.3.0': + dependencies: + '@sinonjs/commons': 3.0.1 + + '@sphinxxxx/color-conversion@2.2.2': {} + + '@sxzz/popperjs-es@2.11.7': {} + + '@trysound/sax@0.2.0': {} + + '@tweenjs/tween.js@23.1.3': {} + + '@types/babel__core@7.20.5': + dependencies: + '@babel/parser': 7.25.8 + '@babel/types': 7.25.8 + '@types/babel__generator': 7.6.8 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.20.6 + + '@types/babel__generator@7.6.8': + dependencies: + '@babel/types': 7.25.8 + + '@types/babel__template@7.4.4': + dependencies: + '@babel/parser': 7.25.8 + '@babel/types': 7.25.8 + + '@types/babel__traverse@7.20.6': + dependencies: + '@babel/types': 7.25.8 + + '@types/estree@1.0.0': {} + + '@types/estree@1.0.6': {} + + '@types/getos@3.0.4': {} + + '@types/graceful-fs@4.1.9': + dependencies: + '@types/node': 20.17.0 + + '@types/humanize-duration@3.27.4': {} + + '@types/istanbul-lib-coverage@2.0.6': {} + + '@types/istanbul-lib-report@3.0.3': + dependencies: + '@types/istanbul-lib-coverage': 2.0.6 + + '@types/istanbul-reports@3.0.4': + dependencies: + '@types/istanbul-lib-report': 3.0.3 + + '@types/javascript-time-ago@2.0.8': {} + + '@types/jest@29.5.14': + dependencies: + expect: 29.7.0 + pretty-format: 29.7.0 + + '@types/lodash-es@4.17.12': + dependencies: + '@types/lodash': 4.17.10 + + '@types/lodash@4.17.10': {} + + '@types/md5@2.3.5': {} + + '@types/node-os-utils@1.3.4': {} + + '@types/node@20.17.0': + dependencies: + undici-types: 6.19.8 + + '@types/pinyin@2.10.2': {} + + '@types/showdown@2.0.6': {} + + '@types/stack-utils@2.0.3': {} + + '@types/stats.js@0.17.3': {} + + '@types/three@0.166.0': + dependencies: + '@tweenjs/tween.js': 23.1.3 + '@types/stats.js': 0.17.3 + '@types/webxr': 0.5.20 + fflate: 0.8.2 + meshoptimizer: 0.18.1 + + '@types/url-join@4.0.3': {} + + '@types/web-bluetooth@0.0.16': {} + + '@types/webxr@0.5.20': {} + + '@types/yargs-parser@21.0.3': {} + + '@types/yargs@17.0.33': + dependencies: + '@types/yargs-parser': 21.0.3 + + '@vitejs/plugin-vue-jsx@4.0.1(vite@5.4.10(@types/node@20.17.0)(sass@1.80.4))(vue@3.5.12(typescript@5.6.3))': + dependencies: + '@babel/core': 7.25.9 + '@babel/plugin-transform-typescript': 7.25.9(@babel/core@7.25.9) + '@vue/babel-plugin-jsx': 1.2.5(@babel/core@7.25.9) + vite: 5.4.10(@types/node@20.17.0)(sass@1.80.4) + vue: 3.5.12(typescript@5.6.3) + transitivePeerDependencies: + - supports-color + + '@vitejs/plugin-vue@5.0.5(vite@5.4.10(@types/node@20.17.0)(sass@1.80.1))(vue@3.5.12(typescript@5.6.3))': + dependencies: + vite: 5.4.10(@types/node@20.17.0)(sass@1.80.1) + vue: 3.5.12(typescript@5.6.3) + + '@vitejs/plugin-vue@5.0.5(vite@5.4.10(@types/node@20.17.0)(sass@1.80.4))(vue@3.5.12(typescript@5.6.3))': + dependencies: + vite: 5.4.10(@types/node@20.17.0)(sass@1.80.4) + vue: 3.5.12(typescript@5.6.3) + + '@volar/language-core@2.4.6': + dependencies: + '@volar/source-map': 2.4.6 + + '@volar/language-server@2.4.6': + dependencies: + '@volar/language-core': 2.4.6 + '@volar/language-service': 2.4.6 + '@volar/typescript': 2.4.6 + path-browserify: 1.0.1 + request-light: 0.7.0 + vscode-languageserver: 9.0.1 + vscode-languageserver-protocol: 3.17.5 + vscode-languageserver-textdocument: 1.0.12 + vscode-uri: 3.0.8 + + '@volar/language-service@2.4.6': + dependencies: + '@volar/language-core': 2.4.6 + vscode-languageserver-protocol: 3.17.5 + vscode-languageserver-textdocument: 1.0.12 + vscode-uri: 3.0.8 + + '@volar/source-map@2.4.6': {} + + '@volar/test-utils@2.4.6': + dependencies: + '@volar/language-core': 2.4.6 + '@volar/language-server': 2.4.6 + vscode-languageserver-textdocument: 1.0.12 + vscode-uri: 3.0.8 + + '@volar/typescript@2.4.6': + dependencies: + '@volar/language-core': 2.4.6 + path-browserify: 1.0.1 + vscode-uri: 3.0.8 + + '@vscode/emmet-helper@2.9.3': + dependencies: + emmet: 2.4.11 + jsonc-parser: 2.3.1 + vscode-languageserver-textdocument: 1.0.12 + vscode-languageserver-types: 3.17.5 + vscode-uri: 2.1.2 + + '@vscode/l10n@0.0.18': {} + + '@vue/babel-helper-vue-transform-on@1.2.5': {} + + '@vue/babel-plugin-jsx@1.2.5(@babel/core@7.25.9)': + dependencies: + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.25.9) + '@babel/template': 7.25.9 + '@babel/traverse': 7.25.9 + '@babel/types': 7.25.8 + '@vue/babel-helper-vue-transform-on': 1.2.5 + '@vue/babel-plugin-resolve-type': 1.2.5(@babel/core@7.25.9) + html-tags: 3.3.1 + svg-tags: 1.0.0 + optionalDependencies: + '@babel/core': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@vue/babel-plugin-resolve-type@1.2.5(@babel/core@7.25.9)': + dependencies: + '@babel/code-frame': 7.25.9 + '@babel/core': 7.25.9 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/parser': 7.25.8 + '@vue/compiler-sfc': 3.5.12 + transitivePeerDependencies: + - supports-color + + '@vue/compiler-core@3.5.12': + dependencies: + '@babel/parser': 7.25.8 + '@vue/shared': 3.5.12 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + + '@vue/compiler-dom@3.5.12': + dependencies: + '@vue/compiler-core': 3.5.12 + '@vue/shared': 3.5.12 + + '@vue/compiler-sfc@3.5.12': + dependencies: + '@babel/parser': 7.25.8 + '@vue/compiler-core': 3.5.12 + '@vue/compiler-dom': 3.5.12 + '@vue/compiler-ssr': 3.5.12 + '@vue/shared': 3.5.12 + estree-walker: 2.0.2 + magic-string: 0.30.12 + postcss: 8.4.47 + source-map-js: 1.2.1 + + '@vue/compiler-ssr@3.5.12': + dependencies: + '@vue/compiler-dom': 3.5.12 + '@vue/shared': 3.5.12 + + '@vue/compiler-vue2@2.7.16': + dependencies: + de-indent: 1.0.2 + he: 1.2.0 + + '@vue/devtools-api@6.4.5': {} + + '@vue/devtools-api@6.6.4': {} + + '@vue/language-core@2.1.6(typescript@5.6.3)': + dependencies: + '@volar/language-core': 2.4.6 + '@vue/compiler-dom': 3.5.12 + '@vue/compiler-vue2': 2.7.16 + '@vue/shared': 3.5.12 + computeds: 0.0.1 + minimatch: 9.0.5 + muggle-string: 0.4.1 + path-browserify: 1.0.1 + optionalDependencies: + typescript: 5.6.3 + + '@vue/language-server@2.1.6(typescript@5.6.3)': + dependencies: + '@volar/language-core': 2.4.6 + '@volar/language-server': 2.4.6 + '@volar/test-utils': 2.4.6 + '@vue/language-core': 2.1.6(typescript@5.6.3) + '@vue/language-service': 2.1.6(typescript@5.6.3) + '@vue/typescript-plugin': 2.1.6(typescript@5.6.3) + vscode-languageserver-protocol: 3.17.5 + vscode-uri: 3.0.8 + transitivePeerDependencies: + - typescript + + '@vue/language-service@2.1.6(typescript@5.6.3)': + dependencies: + '@volar/language-core': 2.4.6 + '@volar/language-service': 2.4.6 + '@volar/typescript': 2.4.6 + '@vue/compiler-dom': 3.5.12 + '@vue/language-core': 2.1.6(typescript@5.6.3) + '@vue/shared': 3.5.12 + '@vue/typescript-plugin': 2.1.6(typescript@5.6.3) + computeds: 0.0.1 + path-browserify: 1.0.1 + volar-service-css: 0.0.62(@volar/language-service@2.4.6) + volar-service-emmet: 0.0.62(@volar/language-service@2.4.6) + volar-service-html: 0.0.62(@volar/language-service@2.4.6) + volar-service-json: 0.0.62(@volar/language-service@2.4.6) + volar-service-pug: 0.0.62 + volar-service-pug-beautify: 0.0.62(@volar/language-service@2.4.6) + volar-service-typescript: 0.0.62(@volar/language-service@2.4.6) + volar-service-typescript-twoslash-queries: 0.0.62(@volar/language-service@2.4.6) + vscode-html-languageservice: 5.3.1 + vscode-languageserver-textdocument: 1.0.12 + vscode-uri: 3.0.8 + transitivePeerDependencies: + - typescript + + '@vue/reactivity@3.5.12': + dependencies: + '@vue/shared': 3.5.12 + + '@vue/runtime-core@3.5.12': + dependencies: + '@vue/reactivity': 3.5.12 + '@vue/shared': 3.5.12 + + '@vue/runtime-dom@3.5.12': + dependencies: + '@vue/reactivity': 3.5.12 + '@vue/runtime-core': 3.5.12 + '@vue/shared': 3.5.12 + csstype: 3.1.3 + + '@vue/server-renderer@3.5.12(vue@3.5.12(typescript@5.6.3))': + dependencies: + '@vue/compiler-ssr': 3.5.12 + '@vue/shared': 3.5.12 + vue: 3.5.12(typescript@5.6.3) + + '@vue/shared@3.5.12': {} + + '@vue/typescript-plugin@2.1.6(typescript@5.6.3)': + dependencies: + '@volar/typescript': 2.4.6 + '@vue/language-core': 2.1.6(typescript@5.6.3) + '@vue/shared': 3.5.12 + transitivePeerDependencies: + - typescript + + '@vueuse/core@9.13.0(vue@3.5.12(typescript@5.6.3))': + dependencies: + '@types/web-bluetooth': 0.0.16 + '@vueuse/metadata': 9.13.0 + '@vueuse/shared': 9.13.0(vue@3.5.12(typescript@5.6.3)) + vue-demi: 0.14.10(vue@3.5.12(typescript@5.6.3)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + '@vueuse/metadata@9.13.0': {} + + '@vueuse/shared@9.13.0(vue@3.5.12(typescript@5.6.3))': + dependencies: + vue-demi: 0.14.10(vue@3.5.12(typescript@5.6.3)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + '@zeit/schemas@2.36.0': {} + + abbrev@1.1.1: + optional: true + + accepts@1.3.8: + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + + acorn-dynamic-import@4.0.0(acorn@6.4.2): + dependencies: + acorn: 6.4.2 + + acorn-jsx@5.3.2(acorn@6.4.2): + dependencies: + acorn: 6.4.2 + + acorn@6.4.2: {} + + acorn@7.4.1: {} + + acorn@8.13.0: {} + + agent-base@6.0.2: + dependencies: + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + optional: true + + ajax-request@1.2.3: + dependencies: + file-system: 2.2.2 + utils-extend: 1.0.8 + + ajv@8.12.0: + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + + ajv@8.17.1: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.0.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + + ansi-align@3.0.1: + dependencies: + string-width: 4.2.3 + + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 + + ansi-regex@5.0.1: {} + + ansi-regex@6.1.0: {} + + ansi-styles@3.2.1: + dependencies: + color-convert: 1.9.3 + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@5.2.0: {} + + ansi-styles@6.2.1: {} + + any-promise@1.3.0: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + aproba@2.0.0: + optional: true + + arch@2.2.0: {} + + are-we-there-yet@2.0.0: + dependencies: + delegates: 1.0.0 + readable-stream: 3.6.0 + optional: true + + arg@5.0.2: {} + + argparse@1.0.10: + dependencies: + sprintf-js: 1.0.3 + + aria-query@5.3.2: {} + + array-bounds@1.0.1: {} + + array-normalize@1.1.4: + dependencies: + array-bounds: 1.0.1 + + array-timsort@1.0.3: {} + + async-validator@4.2.5: {} + + asynckit@0.4.0: {} + + atom-material-icons@3.0.0: + dependencies: + compression: 1.7.4 + js-yaml: 3.14.1 + polka: 0.5.2 + select-dom: 6.0.2 + sirv: 1.0.19 + sirv-cli: 1.0.14 + optionalDependencies: + lodash.template: 4.5.0 + minimist: 1.2.7 + transitivePeerDependencies: + - supports-color + + attr-accept@2.2.2: {} + + autoprefixer@10.4.20(postcss@8.4.47): + dependencies: + browserslist: 4.24.2 + caniuse-lite: 1.0.30001669 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.1.1 + postcss: 8.4.47 + postcss-value-parser: 4.2.0 + + axios@1.7.7: + dependencies: + follow-redirects: 1.15.9 + form-data: 4.0.1 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + axobject-query@4.1.0: {} + + babel-jest@29.7.0(@babel/core@7.25.9): + dependencies: + '@babel/core': 7.25.9 + '@jest/transform': 29.7.0 + '@types/babel__core': 7.20.5 + babel-plugin-istanbul: 6.1.1 + babel-preset-jest: 29.6.3(@babel/core@7.25.9) + chalk: 4.1.2 + graceful-fs: 4.2.11 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-istanbul@6.1.1: + dependencies: + '@babel/helper-plugin-utils': 7.25.9 + '@istanbuljs/load-nyc-config': 1.1.0 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-instrument: 5.2.1 + test-exclude: 6.0.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-jest-hoist@29.6.3: + dependencies: + '@babel/template': 7.25.9 + '@babel/types': 7.25.8 + '@types/babel__core': 7.20.5 + '@types/babel__traverse': 7.20.6 + + babel-preset-current-node-syntax@1.1.0(@babel/core@7.25.9): + dependencies: + '@babel/core': 7.25.9 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.9) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.25.9) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.25.9) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.25.9) + '@babel/plugin-syntax-import-attributes': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.25.9) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.9) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.9) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.9) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.9) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.9) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.9) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.9) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.25.9) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.25.9) + + babel-preset-jest@29.6.3(@babel/core@7.25.9): + dependencies: + '@babel/core': 7.25.9 + babel-plugin-jest-hoist: 29.6.3 + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.25.9) + + balanced-match@1.0.2: {} + + base64-img@1.0.4: + dependencies: + ajax-request: 1.2.3 + file-system: 2.2.2 + + binary-extensions@2.2.0: {} + + binary-search-bounds@2.0.5: {} + + boolbase@1.0.0: {} + + boxen@7.0.0: + dependencies: + ansi-align: 3.0.1 + camelcase: 7.0.1 + chalk: 5.3.0 + cli-boxes: 3.0.0 + string-width: 5.1.2 + type-fest: 2.19.0 + widest-line: 4.0.1 + wrap-ansi: 8.1.0 + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.2: + dependencies: + fill-range: 7.0.1 + + browserslist@4.24.2: + dependencies: + caniuse-lite: 1.0.30001669 + electron-to-chromium: 1.5.45 + node-releases: 2.0.18 + update-browserslist-db: 1.1.1(browserslist@4.24.2) + + bser@2.1.1: + dependencies: + node-int64: 0.4.0 + + buble@0.19.8: + dependencies: + acorn: 6.4.2 + acorn-dynamic-import: 4.0.0(acorn@6.4.2) + acorn-jsx: 5.3.2(acorn@6.4.2) + chalk: 2.4.2 + magic-string: 0.25.9 + minimist: 1.2.7 + os-homedir: 2.0.0 + regexpu-core: 4.8.0 + + bubleify@1.2.1: + dependencies: + buble: 0.19.8 + + buffer-from@1.1.2: {} + + bytes@3.0.0: {} + + call-bind@1.0.7: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 + + callsites@3.1.0: {} + + camelcase-css@2.0.1: {} + + camelcase@5.3.1: {} + + camelcase@6.3.0: {} + + camelcase@7.0.1: {} + + caniuse-lite@1.0.30001669: {} + + chalk-template@0.4.0: + dependencies: + chalk: 4.1.2 + + chalk@2.4.2: + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@5.0.1: {} + + chalk@5.3.0: {} + + char-regex@1.0.2: {} + + character-parser@2.2.0: + dependencies: + is-regex: 1.1.4 + + charenc@0.0.2: {} + + chart.js@4.4.5: + dependencies: + '@kurkle/color': 0.3.2 + + chartjs-adapter-date-fns@3.0.0(chart.js@4.4.5)(date-fns@4.1.0): + dependencies: + chart.js: 4.4.5 + date-fns: 4.1.0 + + chokidar@3.5.3: + dependencies: + anymatch: 3.1.3 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.2 + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + chokidar@4.0.1: + dependencies: + readdirp: 4.0.2 + + chownr@2.0.0: + optional: true + + ci-info@3.9.0: {} + + cjs-module-lexer@1.4.1: {} + + clamp@1.0.1: {} + + cli-boxes@3.0.0: {} + + clipboard@2.0.11: + dependencies: + good-listener: 1.2.2 + select: 1.1.2 + tiny-emitter: 2.1.0 + + clipboardy@3.0.0: + dependencies: + arch: 2.2.0 + execa: 5.1.1 + is-wsl: 2.2.0 + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + co@4.6.0: {} + + code-red@1.0.4: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + '@types/estree': 1.0.6 + acorn: 8.13.0 + estree-walker: 3.0.3 + periscopic: 3.1.0 + + codemirror-wrapped-line-indent@1.0.8(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1): + dependencies: + '@codemirror/language': 6.10.3 + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.34.1 + + collect-v8-coverage@1.0.2: {} + + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.3: {} + + color-name@1.1.4: {} + + color-support@1.1.3: + optional: true + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + commander@1.1.1: + dependencies: + keypress: 0.1.0 + + commander@4.1.1: {} + + commander@7.2.0: {} + + commander@9.5.0: {} + + comment-json@4.2.5: + dependencies: + array-timsort: 1.0.3 + core-util-is: 1.0.3 + esprima: 4.0.1 + has-own-prop: 2.0.0 + repeat-string: 1.6.1 + + compressible@2.0.18: + dependencies: + mime-db: 1.52.0 + + compression@1.7.4: + dependencies: + accepts: 1.3.8 + bytes: 3.0.0 + compressible: 2.0.18 + debug: 2.6.9 + on-headers: 1.0.2 + safe-buffer: 5.1.2 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + + computeds@0.0.1: {} + + concat-map@0.0.1: {} + + confbox@0.1.8: {} + + consola@3.2.3: {} + + console-clear@1.1.1: {} + + console-control-strings@1.1.0: + optional: true + + content-disposition@0.5.2: {} + + convert-source-map@2.0.0: {} + + core-js@3.38.1: {} + + core-util-is@1.0.3: {} + + crawlab-vue3-dropzone@3.0.3(vue@3.5.12(typescript@5.6.3)): + dependencies: + attr-accept: 2.2.2 + file-selector: 0.2.4 + vue: 3.5.12(typescript@5.6.3) + + create-jest@29.7.0(@types/node@20.17.0): + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-config: 29.7.0(@types/node@20.17.0) + jest-util: 29.7.0 + prompts: 2.4.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + crelt@1.0.6: {} + + cron-parser@4.9.0: + dependencies: + luxon: 3.5.0 + + cronstrue@2.50.0: {} + + cross-env@7.0.3: + dependencies: + cross-spawn: 7.0.3 + + cross-spawn@7.0.3: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + crypt@0.0.2: {} + + css-select@5.1.0: + dependencies: + boolbase: 1.0.0 + css-what: 6.1.0 + domhandler: 5.0.3 + domutils: 3.1.0 + nth-check: 2.1.1 + + css-tree@2.2.1: + dependencies: + mdn-data: 2.0.28 + source-map-js: 1.2.1 + + css-tree@2.3.1: + dependencies: + mdn-data: 2.0.30 + source-map-js: 1.2.1 + + css-what@6.1.0: {} + + cssesc@3.0.0: {} + + csso@5.0.5: + dependencies: + css-tree: 2.2.1 + + csstype@3.1.3: {} + + date-fns@4.1.0: {} + + dayjs@1.11.13: {} + + de-indent@1.0.2: {} + + debug@2.6.9: + dependencies: + ms: 2.0.0 + + debug@4.3.4: + dependencies: + ms: 2.1.2 + + dedent@1.5.3: {} + + deep-extend@0.6.0: {} + + deepmerge@4.3.1: {} + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 + + define-lazy-prop@2.0.0: {} + + defined@1.0.1: {} + + delayed-stream@1.0.0: {} + + delegate@3.2.0: {} + + delegates@1.0.0: + optional: true + + detect-libc@1.0.3: {} + + detect-libc@2.0.1: + optional: true + + detect-newline@3.1.0: {} + + didyoumean@1.2.2: {} + + diff-sequences@29.6.3: {} + + dlv@1.1.3: {} + + dom-serializer@2.0.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + entities: 4.5.0 + + domelementtype@2.3.0: {} + + domhandler@5.0.3: + dependencies: + domelementtype: 2.3.0 + + domutils@3.1.0: + dependencies: + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + + dtype@2.0.0: {} + + eastasianwidth@0.2.0: {} + + electron-to-chromium@1.5.45: {} + + element-plus@2.8.5(vue@3.5.12(typescript@5.6.3)): dependencies: - follow-redirects: 1.15.2 + '@ctrl/tinycolor': 3.4.1 + '@element-plus/icons-vue': 2.3.1(vue@3.5.12(typescript@5.6.3)) + '@floating-ui/dom': 1.6.11 + '@popperjs/core': '@sxzz/popperjs-es@2.11.7' + '@types/lodash': 4.17.10 + '@types/lodash-es': 4.17.12 + '@vueuse/core': 9.13.0(vue@3.5.12(typescript@5.6.3)) + async-validator: 4.2.5 + dayjs: 1.11.13 + escape-html: 1.0.3 + lodash: 4.17.21 + lodash-es: 4.17.21 + lodash-unified: 1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.17.21)(lodash@4.17.21) + memoize-one: 6.0.0 + normalize-wheel-es: 1.2.0 + vue: 3.5.12(typescript@5.6.3) transitivePeerDependencies: - - debug - dev: false + - '@vue/composition-api' - /balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: false - optional: true + emittery@0.13.1: {} - /binary-search-bounds@2.0.5: - resolution: {integrity: sha512-H0ea4Fd3lS1+sTEB2TgcLoK21lLhwEJzlQv3IN47pJS976Gx4zoWe0ak3q+uYh60ppQxg9F16Ri4tS1sfD4+jA==} - dev: false + emmet@2.4.11: + dependencies: + '@emmetio/abbreviation': 2.3.3 + '@emmetio/css-abbreviation': 2.1.8 - /brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + entities@4.5.0: {} + + error-ex@1.3.2: dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - dev: false - optional: true + is-arrayish: 0.2.1 - /buble@0.19.8: - resolution: {integrity: sha512-IoGZzrUTY5fKXVkgGHw3QeXFMUNBFv+9l8a4QJKG1JhG3nCMHTdEX1DCOg8568E2Q9qvAQIiSokv6Jsgx8p2cA==} - hasBin: true + es-define-property@1.0.0: dependencies: - acorn: 6.4.2 - acorn-dynamic-import: 4.0.0(acorn@6.4.2) - acorn-jsx: 5.3.2(acorn@6.4.2) - chalk: 2.4.2 - magic-string: 0.25.9 - minimist: 1.2.7 - os-homedir: 2.0.0 - regexpu-core: 4.8.0 - dev: false + get-intrinsic: 1.2.4 - /bubleify@1.2.1: - resolution: {integrity: sha512-vp3NHmaQVoKaKWvi15FTMinPNjfp+47+/kFJ9ifezdMF/CBLArCxDVUh+FQE3qRxCRj1qyjJqilTBHHqlM8MaQ==} - engines: {node: '>=4.0.0'} + es-errors@1.3.0: {} + + es-module-lexer@1.5.4: {} + + esbuild@0.21.5: + optionalDependencies: + '@esbuild/aix-ppc64': 0.21.5 + '@esbuild/android-arm': 0.21.5 + '@esbuild/android-arm64': 0.21.5 + '@esbuild/android-x64': 0.21.5 + '@esbuild/darwin-arm64': 0.21.5 + '@esbuild/darwin-x64': 0.21.5 + '@esbuild/freebsd-arm64': 0.21.5 + '@esbuild/freebsd-x64': 0.21.5 + '@esbuild/linux-arm': 0.21.5 + '@esbuild/linux-arm64': 0.21.5 + '@esbuild/linux-ia32': 0.21.5 + '@esbuild/linux-loong64': 0.21.5 + '@esbuild/linux-mips64el': 0.21.5 + '@esbuild/linux-ppc64': 0.21.5 + '@esbuild/linux-riscv64': 0.21.5 + '@esbuild/linux-s390x': 0.21.5 + '@esbuild/linux-x64': 0.21.5 + '@esbuild/netbsd-x64': 0.21.5 + '@esbuild/openbsd-x64': 0.21.5 + '@esbuild/sunos-x64': 0.21.5 + '@esbuild/win32-arm64': 0.21.5 + '@esbuild/win32-ia32': 0.21.5 + '@esbuild/win32-x64': 0.21.5 + + esbuild@0.23.1: + optionalDependencies: + '@esbuild/aix-ppc64': 0.23.1 + '@esbuild/android-arm': 0.23.1 + '@esbuild/android-arm64': 0.23.1 + '@esbuild/android-x64': 0.23.1 + '@esbuild/darwin-arm64': 0.23.1 + '@esbuild/darwin-x64': 0.23.1 + '@esbuild/freebsd-arm64': 0.23.1 + '@esbuild/freebsd-x64': 0.23.1 + '@esbuild/linux-arm': 0.23.1 + '@esbuild/linux-arm64': 0.23.1 + '@esbuild/linux-ia32': 0.23.1 + '@esbuild/linux-loong64': 0.23.1 + '@esbuild/linux-mips64el': 0.23.1 + '@esbuild/linux-ppc64': 0.23.1 + '@esbuild/linux-riscv64': 0.23.1 + '@esbuild/linux-s390x': 0.23.1 + '@esbuild/linux-x64': 0.23.1 + '@esbuild/netbsd-x64': 0.23.1 + '@esbuild/openbsd-arm64': 0.23.1 + '@esbuild/openbsd-x64': 0.23.1 + '@esbuild/sunos-x64': 0.23.1 + '@esbuild/win32-arm64': 0.23.1 + '@esbuild/win32-ia32': 0.23.1 + '@esbuild/win32-x64': 0.23.1 + + escalade@3.1.1: {} + + escalade@3.2.0: {} + + escape-html@1.0.3: {} + + escape-string-regexp@1.0.5: {} + + escape-string-regexp@2.0.0: {} + + esno@4.8.0: dependencies: - buble: 0.19.8 - dev: false + tsx: 4.19.1 - /bytes@3.0.0: - resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} - engines: {node: '>= 0.8'} - dev: false + esprima@4.0.1: {} + + estree-walker@2.0.2: {} - /call-bind@1.0.2: - resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} + estree-walker@3.0.3: dependencies: - function-bind: 1.1.1 - get-intrinsic: 1.1.3 - dev: false + '@types/estree': 1.0.0 - /camelcase@5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} - engines: {node: '>=6'} - dev: false + execa@5.1.1: + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 - /chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} + exit@0.1.2: {} + + expect@29.7.0: dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 - dev: false + '@jest/expect-utils': 29.7.0 + jest-get-type: 29.6.3 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 - /charenc@0.0.2: - resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} - dev: false + fast-deep-equal@3.1.3: {} - /chownr@2.0.0: - resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} - engines: {node: '>=10'} - dev: false - optional: true + fast-glob@3.3.2: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 - /clamp@1.0.1: - resolution: {integrity: sha512-kgMuFyE78OC6Dyu3Dy7vcx4uy97EIbVxJB/B0eJ3bUNAkwdNcxYzgKltnyADiYwsR7SEqkkUPsEUT//OVS6XMA==} - dev: false + fast-json-stable-stringify@2.1.0: {} - /clipboard@2.0.11: - resolution: {integrity: sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==} + fast-uri@3.0.3: {} + + fastq@1.14.0: dependencies: - good-listener: 1.2.2 - select: 1.1.2 - tiny-emitter: 2.1.0 - dev: false + reusify: 1.0.4 - /cliui@5.0.0: - resolution: {integrity: sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==} + fb-watchman@2.0.2: dependencies: - string-width: 3.1.0 - strip-ansi: 5.2.0 - wrap-ansi: 5.1.0 - dev: false + bser: 2.1.1 - /cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} + fflate@0.8.2: {} + + file-match@1.0.2: dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - dev: true + utils-extend: 1.0.8 - /codemirror-spell-checker@1.1.2: - resolution: {integrity: sha512-2Tl6n0v+GJRsC9K3MLCdLaMOmvWL0uukajNJseorZJsslaxZyZMgENocPU8R0DyoTAiKsyqiemSOZo7kjGV0LQ==} + file-selector@0.2.4: dependencies: - typo-js: 1.2.2 - dev: false + tslib: 2.4.1 - /codemirror@5.65.10: - resolution: {integrity: sha512-IXAG5wlhbgcTJ6rZZcmi4+sjWIbJqIGfeg3tNa3yX84Jb3T4huS5qzQAo/cUisc1l3bI47WZodpyf7cYcocDKg==} - dev: false + file-system@2.2.2: + dependencies: + file-match: 1.0.2 + utils-extend: 1.0.8 - /color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + fill-range@7.0.1: dependencies: - color-name: 1.1.3 - dev: false + to-regex-range: 5.0.1 - /color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} + find-up@4.1.0: dependencies: - color-name: 1.1.4 - dev: true + locate-path: 5.0.0 + path-exists: 4.0.0 - /color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - dev: false + flatten-vertex-data@1.0.2: + dependencies: + dtype: 2.0.0 - /color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: true + follow-redirects@1.15.9: {} - /color-support@1.1.3: - resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} - hasBin: true - dev: false - optional: true + font-awesome@4.7.0: {} - /commander@1.1.1: - resolution: {integrity: sha512-71Rod2AhcH3JhkBikVpNd0pA+fWsmAaVoti6OR38T76chA7vE3pSerS0Jor4wDw+tOueD2zLVvFOw5H0Rcj7rA==} - engines: {node: '>= 0.6.x'} + foreground-child@3.3.0: dependencies: - keypress: 0.1.0 - dev: false + cross-spawn: 7.0.3 + signal-exit: 4.1.0 - /compressible@2.0.18: - resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} - engines: {node: '>= 0.6'} + form-data@4.0.1: dependencies: - mime-db: 1.52.0 - dev: false + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 - /compression@1.7.4: - resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==} - engines: {node: '>= 0.8.0'} + fraction.js@4.3.7: {} + + fs-extra@11.2.0: dependencies: - accepts: 1.3.8 - bytes: 3.0.0 - compressible: 2.0.18 - debug: 2.6.9 - on-headers: 1.0.2 - safe-buffer: 5.1.2 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - dev: false + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 - /concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - dev: false + fs-minipass@2.1.0: + dependencies: + minipass: 3.3.6 optional: true - /console-clear@1.1.1: - resolution: {integrity: sha512-pMD+MVR538ipqkG5JXeOEbKWS5um1H4LUUccUQG68qpeqBYbzYy79Gh55jkd2TtPdRfUaLWdv6LPP//5Zt0aPQ==} - engines: {node: '>=4'} - dev: false + fs.realpath@1.0.0: {} - /console-control-strings@1.1.0: - resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} - dev: false - optional: true - - /core-js@3.26.1: - resolution: {integrity: sha512-21491RRQVzUn0GGM9Z1Jrpr6PNPxPi+Za8OM9q4tksTSnlbXXGKK1nXNg/QvwFYettXvSX6zWKCtHHfjN4puyA==} - requiresBuild: true - dev: false - - /crawlab-ui@0.6.3: - resolution: {integrity: sha512-7TMYzG8eETiHVPXD2jeih2eVGJUCYw2nQW6Mx9678YP82e+9If1cwX+bVDJbrjJjnYmfsxMZuFp3kVw1XVmaxg==} - dependencies: - '@element-plus/icons': 0.0.11 - '@fortawesome/fontawesome-common-types': 6.2.1 - '@fortawesome/fontawesome-svg-core': 6.2.1 - '@fortawesome/free-brands-svg-icons': 6.2.1 - '@fortawesome/free-regular-svg-icons': 6.2.1 - '@fortawesome/free-solid-svg-icons': 6.2.1 - '@fortawesome/vue-fontawesome': 3.0.2(@fortawesome/fontawesome-svg-core@6.2.1)(vue@3.2.45) - '@popperjs/core': 2.11.6 - '@types/codemirror': 0.0.103 - '@types/echarts': 4.9.16 - '@types/getos': 3.0.1 - '@types/humanize-duration': 3.27.1 - '@types/javascript-time-ago': 2.0.3 - '@types/md5': 2.3.2 - '@types/pinyin': 2.10.0 - '@types/showdown': 1.9.4 - '@types/simplemde': 1.11.8 - '@types/url-join': 4.0.1 - async-validator: 4.2.5 - atom-material-icons: 3.0.0 - axios: 0.21.4 - codemirror: 5.65.10 - core-js: 3.26.1 - crawlab-vue3-dropzone: 3.0.3(vue@3.2.45) - cron-parser: 3.5.0 - cronstrue: 1.125.0 - dayjs: 1.11.6 - echarts: 5.4.0 - element-plus: 1.3.0-beta.10(vue@3.2.45) - file-selector: 0.6.0 - font-awesome: 4.7.0 - humanize-duration: 3.27.3 - javascript-time-ago: 2.5.9 - md5: 2.3.0 - normalize.css: 8.0.1 - os-name: 5.0.1 - pinyin: 2.11.2 - point-cluster: 3.1.8 - showdown: 1.9.1 - simplemde: 1.11.2 - url-join: 4.0.1 - vue: 3.2.45 - vue-clipboard3: 2.0.0 - vue-debounce: 4.0.0(vue@3.2.45) - vue-i18n: 9.1.9(vue@3.2.45) - vue-router: 4.0.11(vue@3.2.45) - vuex: 4.1.0(vue@3.2.45) - transitivePeerDependencies: - - '@vue/composition-api' - - debug - - encoding - - supports-color - dev: false + fsevents@2.3.2: + optional: true - /crawlab-vue3-dropzone@3.0.3(vue@3.2.45): - resolution: {integrity: sha512-s/GHSTteFqJcMk14Xkp1imwEyrOCa+uwwH1eCsTAxVzaYocpiDpbDjQ3u3vrMyws9InsqqgtmAJhy2vGHEsk/Q==} - peerDependencies: - vue: '>=3.2.45' + fsevents@2.3.3: + optional: true + + function-bind@1.1.1: {} + + function-bind@1.1.2: {} + + gauge@3.0.2: dependencies: - attr-accept: 2.2.2 - file-selector: 0.2.4 - vue: 3.2.45 - dev: false + aproba: 2.0.0 + color-support: 1.1.3 + console-control-strings: 1.1.0 + has-unicode: 2.0.1 + object-assign: 4.1.1 + signal-exit: 3.0.7 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wide-align: 1.1.5 + optional: true - /cron-parser@3.5.0: - resolution: {integrity: sha512-wyVZtbRs6qDfFd8ap457w3XVntdvqcwBGxBoTvJQH9KGVKL/fB+h2k3C8AqiVxvUQKN1Ps/Ns46CNViOpVDhfQ==} - engines: {node: '>=0.8'} + gensync@1.0.0-beta.2: {} + + get-caller-file@2.0.5: {} + + get-intrinsic@1.2.4: dependencies: - is-nan: 1.3.2 - luxon: 1.28.0 - dev: false + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 - /cronstrue@1.125.0: - resolution: {integrity: sha512-qkC5mVbVGuuyBVXmam5anaRtbLcgfBUKajoyZqCdf/XBdgF43PsLSEm8eEi2dsI3YbqDPbLSH2mWNzM1dVqHgQ==} - dev: false + get-package-type@0.1.0: {} - /cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} + get-port@3.2.0: {} + + get-stream@6.0.1: {} + + get-tsconfig@4.8.1: dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - dev: false + resolve-pkg-maps: 1.0.0 - /crypt@0.0.2: - resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==} - dev: false + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 - /csstype@2.6.21: - resolution: {integrity: sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==} - dev: false + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 - /dayjs@1.11.6: - resolution: {integrity: sha512-zZbY5giJAinCG+7AGaw0wIhNZ6J8AhWuSXKvuc1KAyMiRsvGQWqh4L+MomvhdAYjN+lqvVCMq1I41e3YHvXkyQ==} - dev: false + glob@10.4.5: + dependencies: + foreground-child: 3.3.0 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 - /debug@2.6.9: - resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + glob@7.2.3: dependencies: - ms: 2.0.0 - dev: false + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 - /debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + globals@11.12.0: {} + + globals@15.11.0: {} + + good-listener@1.2.2: dependencies: - ms: 2.1.2 - dev: false + delegate: 3.2.0 + + gopd@1.0.1: + dependencies: + get-intrinsic: 1.2.4 + + graceful-fs@4.2.11: {} + + has-flag@3.0.0: {} + + has-flag@4.0.0: {} + + has-own-prop@2.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.0 + + has-proto@1.0.3: {} + + has-symbols@1.0.3: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.0.3 + + has-unicode@2.0.1: optional: true - /decamelize@1.2.0: - resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} - engines: {node: '>=0.10.0'} - dev: false + has@1.0.3: + dependencies: + function-bind: 1.1.1 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + he@1.2.0: {} + + html-escaper@2.0.2: {} + + html-tags@3.3.1: {} + + https-proxy-agent@5.0.1: + dependencies: + agent-base: 6.0.2 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + optional: true + + human-signals@2.1.0: {} + + humanize-duration@3.32.1: {} + + immutable-json-patch@6.0.1: {} + + immutable@4.3.7: {} + + import-local@3.2.0: + dependencies: + pkg-dir: 4.2.0 + resolve-cwd: 3.0.0 + + imurmurhash@0.1.4: {} + + increase-memory-limit@1.0.7: + dependencies: + glob: 7.2.3 + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + ini@1.3.8: {} + + ip-regex@4.3.0: {} + + is-arrayish@0.2.1: {} + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.2.0 - /define-lazy-prop@2.0.0: - resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} - engines: {node: '>=8'} - dev: true + is-buffer@1.1.6: {} - /define-properties@1.1.4: - resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==} - engines: {node: '>= 0.4'} + is-core-module@2.11.0: dependencies: - has-property-descriptors: 1.0.0 - object-keys: 1.1.1 - dev: false + has: 1.0.3 - /defined@1.0.1: - resolution: {integrity: sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==} - dev: false + is-core-module@2.15.1: + dependencies: + hasown: 2.0.2 - /delegate@3.2.0: - resolution: {integrity: sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==} - dev: false + is-docker@2.2.1: {} - /delegates@1.0.0: - resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} - dev: false - optional: true + is-expression@4.0.0: + dependencies: + acorn: 7.4.1 + object-assign: 4.1.1 - /detect-libc@2.0.1: - resolution: {integrity: sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==} - engines: {node: '>=8'} - dev: false - optional: true + is-extglob@2.1.1: {} - /dtype@2.0.0: - resolution: {integrity: sha512-s2YVcLKdFGS0hpFqJaTwscsyt0E8nNFdmo73Ocd81xNPj4URI4rj6D60A+vFMIw7BXWlb4yRkEwfBqcZzPGiZg==} - engines: {node: '>= 0.8.0'} - dev: false + is-fullwidth-code-point@3.0.0: {} - /echarts@5.4.0: - resolution: {integrity: sha512-uPsO9VRUIKAdFOoH3B0aNg7NRVdN7aM39/OjovjO9MwmWsAkfGyeXJhK+dbRi51iDrQWliXV60/XwLA7kg3z0w==} - dependencies: - tslib: 2.3.0 - zrender: 5.4.0 - dev: false + is-generator-fn@2.1.0: {} - /element-plus@1.3.0-beta.10(vue@3.2.45): - resolution: {integrity: sha512-uPcre5liDfYvGbfaBDN2K7K5x6egBFdDQz0sv2cupcqzepUQoTMpq+mdTnHXzHChHhVwcLGp95kLYLL9yMkT8g==} - peerDependencies: - vue: ^3.2.0 + is-glob@4.0.3: dependencies: - '@ctrl/tinycolor': 3.4.1 - '@element-plus/icons-vue': 0.2.7(vue@3.2.45) - '@popperjs/core': 2.11.6 - '@vueuse/core': 7.7.1(vue@3.2.45) - async-validator: 4.2.5 - dayjs: 1.11.6 - lodash: 4.17.21 - memoize-one: 6.0.0 - normalize-wheel-es: 1.2.0 - vue: 3.2.45 - transitivePeerDependencies: - - '@vue/composition-api' - dev: false - - /emoji-regex@7.0.3: - resolution: {integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==} - dev: false + is-extglob: 2.1.1 - /emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + is-number@7.0.0: {} - /esbuild-android-64@0.15.16: - resolution: {integrity: sha512-Vwkv/sT0zMSgPSVO3Jlt1pUbnZuOgtOQJkJkyyJFAlLe7BiT8e9ESzo0zQSx4c3wW4T6kGChmKDPMbWTgtliQA==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true + is-obj@1.0.1: {} - /esbuild-android-arm64@0.15.16: - resolution: {integrity: sha512-lqfKuofMExL5niNV3gnhMUYacSXfsvzTa/58sDlBET/hCOG99Zmeh+lz6kvdgvGOsImeo6J9SW21rFCogNPLxg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true + is-port-reachable@4.0.0: {} - /esbuild-darwin-64@0.15.16: - resolution: {integrity: sha512-wo2VWk/n/9V2TmqUZ/KpzRjCEcr00n7yahEdmtzlrfQ3lfMCf3Wa+0sqHAbjk3C6CKkR3WKK/whkMq5Gj4Da9g==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true + is-reference@3.0.1: + dependencies: + '@types/estree': 1.0.0 - /esbuild-darwin-arm64@0.15.16: - resolution: {integrity: sha512-fMXaUr5ou0M4WnewBKsspMtX++C1yIa3nJ5R2LSbLCfJT3uFdcRoU/NZjoM4kOMKyOD9Sa/2vlgN8G07K3SJnw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true + is-reference@3.0.2: + dependencies: + '@types/estree': 1.0.6 - /esbuild-freebsd-64@0.15.16: - resolution: {integrity: sha512-UzIc0xlRx5x9kRuMr+E3+hlSOxa/aRqfuMfiYBXu2jJ8Mzej4lGL7+o6F5hzhLqWfWm1GWHNakIdlqg1ayaTNQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true + is-regex@1.1.4: + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 - /esbuild-freebsd-arm64@0.15.16: - resolution: {integrity: sha512-8xyiYuGc0DLZphFQIiYaLHlfoP+hAN9RHbE+Ibh8EUcDNHAqbQgUrQg7pE7Bo00rXmQ5Ap6KFgcR0b4ALZls1g==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true + is-stream@2.0.1: {} - /esbuild-linux-32@0.15.16: - resolution: {integrity: sha512-iGijUTV+0kIMyUVoynK0v+32Oi8yyp0xwMzX69GX+5+AniNy/C/AL1MjFTsozRp/3xQPl7jVux/PLe2ds10/2w==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true + is-wsl@2.2.0: + dependencies: + is-docker: 2.2.1 - /esbuild-linux-64@0.15.16: - resolution: {integrity: sha512-tuSOjXdLw7VzaUj89fIdAaQT7zFGbKBcz4YxbWrOiXkwscYgE7HtTxUavreBbnRkGxKwr9iT/gmeJWNm4djy/g==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true + isexe@2.0.0: {} - /esbuild-linux-arm64@0.15.16: - resolution: {integrity: sha512-mPYksnfHnemNrvjrDhZyixL/AfbJN0Xn9S34ZOHYdh6/jJcNd8iTsv3JwJoEvTJqjMggjMhGUPJAdjnFBHoH8A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true + istanbul-lib-coverage@3.2.2: {} - /esbuild-linux-arm@0.15.16: - resolution: {integrity: sha512-XKcrxCEXDTOuoRj5l12tJnkvuxXBMKwEC5j0JISw3ziLf0j4zIwXbKbTmUrKFWbo6ZgvNpa7Y5dnbsjVvH39bQ==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true + istanbul-lib-instrument@5.2.1: + dependencies: + '@babel/core': 7.25.9 + '@babel/parser': 7.25.8 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.2 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color - /esbuild-linux-mips64le@0.15.16: - resolution: {integrity: sha512-kSJO2PXaxfm0pWY39+YX+QtpFqyyrcp0ZeI8QPTrcFVQoWEPiPVtOfTZeS3ZKedfH+Ga38c4DSzmKMQJocQv6A==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true + istanbul-lib-instrument@6.0.3: + dependencies: + '@babel/core': 7.25.9 + '@babel/parser': 7.25.8 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.2 + semver: 7.6.3 + transitivePeerDependencies: + - supports-color - /esbuild-linux-ppc64le@0.15.16: - resolution: {integrity: sha512-NimPikwkBY0yGABw6SlhKrtT35sU4O23xkhlrTT/O6lSxv3Pm5iSc6OYaqVAHWkLdVf31bF4UDVFO+D990WpAA==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true + istanbul-lib-report@3.0.1: + dependencies: + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 + supports-color: 7.2.0 - /esbuild-linux-riscv64@0.15.16: - resolution: {integrity: sha512-ty2YUHZlwFOwp7pR+J87M4CVrXJIf5ZZtU/umpxgVJBXvWjhziSLEQxvl30SYfUPq0nzeWKBGw5i/DieiHeKfw==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true + istanbul-lib-source-maps@4.0.1: + dependencies: + debug: 4.3.4 + istanbul-lib-coverage: 3.2.2 + source-map: 0.6.1 + transitivePeerDependencies: + - supports-color - /esbuild-linux-s390x@0.15.16: - resolution: {integrity: sha512-VkZaGssvPDQtx4fvVdZ9czezmyWyzpQhEbSNsHZZN0BHvxRLOYAQ7sjay8nMQwYswP6O2KlZluRMNPYefFRs+w==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true + istanbul-reports@3.1.7: + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 - /esbuild-netbsd-64@0.15.16: - resolution: {integrity: sha512-ElQ9rhdY51et6MJTWrCPbqOd/YuPowD7Cxx3ee8wlmXQQVW7UvQI6nSprJ9uVFQISqSF5e5EWpwWqXZsECLvXg==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 - /esbuild-openbsd-64@0.15.16: - resolution: {integrity: sha512-KgxMHyxMCT+NdLQE1zVJEsLSt2QQBAvJfmUGDmgEq8Fvjrf6vSKB00dVHUEDKcJwMID6CdgCpvYNt999tIYhqA==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true + javascript-time-ago@2.5.11: + dependencies: + relative-time-format: 1.1.6 - /esbuild-sunos-64@0.15.16: - resolution: {integrity: sha512-exSAx8Phj7QylXHlMfIyEfNrmqnLxFqLxdQF6MBHPdHAjT7fsKaX6XIJn+aQEFiOcE4X8e7VvdMCJ+WDZxjSRQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true + jest-changed-files@29.7.0: + dependencies: + execa: 5.1.1 + jest-util: 29.7.0 + p-limit: 3.1.0 + + jest-circus@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.17.0 + chalk: 4.1.2 + co: 4.6.0 + dedent: 1.5.3 + is-generator-fn: 2.1.0 + jest-each: 29.7.0 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + p-limit: 3.1.0 + pretty-format: 29.7.0 + pure-rand: 6.1.0 + slash: 3.0.0 + stack-utils: 2.0.6 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color - /esbuild-windows-32@0.15.16: - resolution: {integrity: sha512-zQgWpY5pUCSTOwqKQ6/vOCJfRssTvxFuEkpB4f2VUGPBpdddZfdj8hbZuFRdZRPIVHvN7juGcpgCA/XCF37mAQ==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true + jest-cli@29.7.0(@types/node@20.17.0): + dependencies: + '@jest/core': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + chalk: 4.1.2 + create-jest: 29.7.0(@types/node@20.17.0) + exit: 0.1.2 + import-local: 3.2.0 + jest-config: 29.7.0(@types/node@20.17.0) + jest-util: 29.7.0 + jest-validate: 29.7.0 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node - /esbuild-windows-64@0.15.16: - resolution: {integrity: sha512-HjW1hHRLSncnM3MBCP7iquatHVJq9l0S2xxsHHj4yzf4nm9TU4Z7k4NkeMlD/dHQ4jPlQQhwcMvwbJiOefSuZw==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true + jest-config@29.7.0(@types/node@20.17.0): + dependencies: + '@babel/core': 7.25.9 + '@jest/test-sequencer': 29.7.0 + '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.25.9) + chalk: 4.1.2 + ci-info: 3.9.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 29.7.0 + jest-environment-node: 29.7.0 + jest-get-type: 29.6.3 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-runner: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + micromatch: 4.0.5 + parse-json: 5.2.0 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + optionalDependencies: + '@types/node': 20.17.0 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color - /esbuild-windows-arm64@0.15.16: - resolution: {integrity: sha512-oCcUKrJaMn04Vxy9Ekd8x23O8LoU01+4NOkQ2iBToKgnGj5eo1vU9i27NQZ9qC8NFZgnQQZg5oZWAejmbsppNA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true + jest-diff@29.7.0: + dependencies: + chalk: 4.1.2 + diff-sequences: 29.6.3 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 - /escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} - engines: {node: '>=6'} - dev: true + jest-docblock@29.7.0: + dependencies: + detect-newline: 3.1.0 - /escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - dev: false + jest-each@29.7.0: + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + jest-get-type: 29.6.3 + jest-util: 29.7.0 + pretty-format: 29.7.0 - /esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - dev: false + jest-environment-node@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.17.0 + jest-mock: 29.7.0 + jest-util: 29.7.0 - /estree-walker@2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + jest-get-type@29.6.3: {} - /estree-walker@3.0.3: - resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + jest-haste-map@29.7.0: dependencies: - '@types/estree': 1.0.0 - dev: true + '@jest/types': 29.6.3 + '@types/graceful-fs': 4.1.9 + '@types/node': 20.17.0 + anymatch: 3.1.3 + fb-watchman: 2.0.2 + graceful-fs: 4.2.11 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + jest-worker: 29.7.0 + micromatch: 4.0.5 + walker: 1.0.8 + optionalDependencies: + fsevents: 2.3.2 - /execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} + jest-leak-detector@29.7.0: dependencies: - cross-spawn: 7.0.3 - get-stream: 6.0.1 - human-signals: 2.1.0 - is-stream: 2.0.1 - merge-stream: 2.0.0 - npm-run-path: 4.0.1 - onetime: 5.1.2 - signal-exit: 3.0.7 - strip-final-newline: 2.0.0 - dev: false + jest-get-type: 29.6.3 + pretty-format: 29.7.0 - /file-selector@0.2.4: - resolution: {integrity: sha512-ZDsQNbrv6qRi1YTDOEWzf5J2KjZ9KMI1Q2SGeTkCJmNNW25Jg4TW4UMcmoqcg4WrAyKRcpBXdbWRxkfrOzVRbA==} - engines: {node: '>= 10'} + jest-matcher-utils@29.7.0: dependencies: - tslib: 2.4.1 - dev: false + chalk: 4.1.2 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 - /file-selector@0.6.0: - resolution: {integrity: sha512-QlZ5yJC0VxHxQQsQhXvBaC7VRJ2uaxTf+Tfpu4Z/OcVQJVpZO+DGU0rkoVW5ce2SccxugvpBJoMvUs59iILYdw==} - engines: {node: '>= 12'} + jest-message-util@29.7.0: dependencies: - tslib: 2.4.1 - dev: false + '@babel/code-frame': 7.25.9 + '@jest/types': 29.6.3 + '@types/stack-utils': 2.0.3 + chalk: 4.1.2 + graceful-fs: 4.2.11 + micromatch: 4.0.5 + pretty-format: 29.7.0 + slash: 3.0.0 + stack-utils: 2.0.6 - /find-up@3.0.0: - resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} - engines: {node: '>=6'} + jest-mock@29.7.0: dependencies: - locate-path: 3.0.0 - dev: false + '@jest/types': 29.6.3 + '@types/node': 20.17.0 + jest-util: 29.7.0 - /flatten-vertex-data@1.0.2: - resolution: {integrity: sha512-BvCBFK2NZqerFTdMDgqfHBwxYWnxeCkwONsw6PvBMcUXqo8U/KDWwmXhqx1x2kLIg7DqIsJfOaJFOmlua3Lxuw==} + jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): + optionalDependencies: + jest-resolve: 29.7.0 + + jest-regex-util@29.6.3: {} + + jest-resolve-dependencies@29.7.0: dependencies: - dtype: 2.0.0 - dev: false + jest-regex-util: 29.6.3 + jest-snapshot: 29.7.0 + transitivePeerDependencies: + - supports-color - /follow-redirects@1.15.2: - resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - dev: false + jest-resolve@29.7.0: + dependencies: + chalk: 4.1.2 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) + jest-util: 29.7.0 + jest-validate: 29.7.0 + resolve: 1.22.1 + resolve.exports: 2.0.2 + slash: 3.0.0 + + jest-runner@29.7.0: + dependencies: + '@jest/console': 29.7.0 + '@jest/environment': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.17.0 + chalk: 4.1.2 + emittery: 0.13.1 + graceful-fs: 4.2.11 + jest-docblock: 29.7.0 + jest-environment-node: 29.7.0 + jest-haste-map: 29.7.0 + jest-leak-detector: 29.7.0 + jest-message-util: 29.7.0 + jest-resolve: 29.7.0 + jest-runtime: 29.7.0 + jest-util: 29.7.0 + jest-watcher: 29.7.0 + jest-worker: 29.7.0 + p-limit: 3.1.0 + source-map-support: 0.5.13 + transitivePeerDependencies: + - supports-color - /font-awesome@4.7.0: - resolution: {integrity: sha512-U6kGnykA/6bFmg1M/oT9EkFeIYv7JlX3bozwQJWiiLz6L0w3F5vBVPxHlwyX/vtNq1ckcpRKOB9f2Qal/VtFpg==} - engines: {node: '>=0.10.3'} - dev: false + jest-runtime@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/globals': 29.7.0 + '@jest/source-map': 29.6.3 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.17.0 + chalk: 4.1.2 + cjs-module-lexer: 1.4.1 + collect-v8-coverage: 1.0.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + slash: 3.0.0 + strip-bom: 4.0.0 + transitivePeerDependencies: + - supports-color - /fs-minipass@2.1.0: - resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} - engines: {node: '>= 8'} + jest-snapshot@29.7.0: + dependencies: + '@babel/core': 7.25.9 + '@babel/generator': 7.25.9 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.25.9) + '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.25.9) + '@babel/types': 7.25.8 + '@jest/expect-utils': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.25.9) + chalk: 4.1.2 + expect: 29.7.0 + graceful-fs: 4.2.11 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + natural-compare: 1.4.0 + pretty-format: 29.7.0 + semver: 7.6.3 + transitivePeerDependencies: + - supports-color + + jest-util@29.7.0: dependencies: - minipass: 3.3.6 - dev: false - optional: true + '@jest/types': 29.6.3 + '@types/node': 20.17.0 + chalk: 4.1.2 + ci-info: 3.9.0 + graceful-fs: 4.2.11 + picomatch: 2.3.1 - /fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - dev: false - optional: true + jest-validate@29.7.0: + dependencies: + '@jest/types': 29.6.3 + camelcase: 6.3.0 + chalk: 4.1.2 + jest-get-type: 29.6.3 + leven: 3.1.0 + pretty-format: 29.7.0 - /fsevents@2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true - dev: true - optional: true + jest-watcher@29.7.0: + dependencies: + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.17.0 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + emittery: 0.13.1 + jest-util: 29.7.0 + string-length: 4.0.2 - /function-bind@1.1.1: - resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} - dev: false + jest-worker@29.7.0: + dependencies: + '@types/node': 20.17.0 + jest-util: 29.7.0 + merge-stream: 2.0.0 + supports-color: 8.1.1 - /gauge@3.0.2: - resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==} - engines: {node: '>=10'} + jest@29.7.0(@types/node@20.17.0): dependencies: - aproba: 2.0.0 - color-support: 1.1.3 - console-control-strings: 1.1.0 - has-unicode: 2.0.1 - object-assign: 4.1.1 - signal-exit: 3.0.7 - string-width: 4.2.3 - strip-ansi: 6.0.1 - wide-align: 1.1.5 - dev: false - optional: true + '@jest/core': 29.7.0 + '@jest/types': 29.6.3 + import-local: 3.2.0 + jest-cli: 29.7.0(@types/node@20.17.0) + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node - /get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} + jiti@1.21.6: {} + + jmespath@0.16.0: {} + + js-tokens@4.0.0: {} - /get-intrinsic@1.1.3: - resolution: {integrity: sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==} + js-yaml@3.14.1: dependencies: - function-bind: 1.1.1 - has: 1.0.3 - has-symbols: 1.0.3 - dev: false + argparse: 1.0.10 + esprima: 4.0.1 - /get-port@3.2.0: - resolution: {integrity: sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==} - engines: {node: '>=4'} - dev: false + jsep@1.3.9: {} - /get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - dev: false + jsesc@0.5.0: {} - /glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + jsesc@3.0.2: {} + + json-editor-vue@0.17.2(@lezer/common@1.2.3)(vue@3.5.12(typescript@5.6.3)): dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - dev: false - optional: true + vanilla-jsoneditor: 1.0.8(@lezer/common@1.2.3) + vue: 3.5.12(typescript@5.6.3) + vue-demi: 0.14.10(vue@3.5.12(typescript@5.6.3)) + transitivePeerDependencies: + - '@lezer/common' + + json-parse-even-better-errors@2.3.1: {} - /good-listener@1.2.2: - resolution: {integrity: sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==} - dependencies: - delegate: 3.2.0 - dev: false + json-schema-traverse@1.0.0: {} - /has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - dev: false + json-source-map@0.6.1: {} - /has-property-descriptors@1.0.0: - resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} - dependencies: - get-intrinsic: 1.1.3 - dev: false + json5@2.2.3: {} - /has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - dev: false + jsonc-parser@2.3.1: {} - /has-unicode@2.0.1: - resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} - dev: false - optional: true + jsonc-parser@3.3.1: {} - /has@1.0.3: - resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} - engines: {node: '>= 0.4.0'} + jsonfile@6.1.0: dependencies: - function-bind: 1.1.1 - dev: false + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 - /https-proxy-agent@5.0.1: - resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} - engines: {node: '>= 6'} + jsonpath-plus@10.0.1: dependencies: - agent-base: 6.0.2 - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: false - optional: true + '@jsep-plugin/assignment': 1.2.1(jsep@1.3.9) + '@jsep-plugin/regex': 1.0.3(jsep@1.3.9) + jsep: 1.3.9 - /human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - dev: false + jsonrepair@3.8.1: {} - /humanize-duration@3.27.3: - resolution: {integrity: sha512-iimHkHPfIAQ8zCDQLgn08pRqSVioyWvnGfaQ8gond2wf7Jq2jJ+24ykmnRyiz3fIldcn4oUuQXpjqKLhSVR7lw==} - dev: false + keypress@0.1.0: {} - /inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + klaw-sync@6.0.0: dependencies: - once: 1.4.0 - wrappy: 1.0.2 - dev: false - optional: true + graceful-fs: 4.2.11 - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: false - optional: true + kleur@3.0.3: {} - /is-buffer@1.1.6: - resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} - dev: false + leven@3.1.0: {} - /is-docker@2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} - hasBin: true - dev: true + lexical@0.16.1: {} - /is-fullwidth-code-point@2.0.0: - resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==} - engines: {node: '>=4'} - dev: false + lilconfig@2.1.0: {} - /is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} + lilconfig@3.1.2: {} - /is-nan@1.3.2: - resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - dev: false + lines-and-columns@1.2.4: {} - /is-obj@1.0.1: - resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==} - engines: {node: '>=0.10.0'} - dev: false + local-access@1.1.0: {} - /is-reference@3.0.1: - resolution: {integrity: sha512-baJJdQLiYaJdvFbJqXrcGv3WU3QCzBlUcI5QhbesIm6/xPsvmO+2CDoi/GMOFBQEQm+PXkwOPrp9KK5ozZsp2w==} + local-pkg@0.5.0: dependencies: - '@types/estree': 1.0.0 - dev: true + mlly: 1.7.2 + pkg-types: 1.2.1 - /is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - dev: false + locate-character@3.0.0: {} - /is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} + locate-path@5.0.0: dependencies: - is-docker: 2.2.1 - dev: true - - /isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - dev: false + p-locate: 4.1.0 - /javascript-time-ago@2.5.9: - resolution: {integrity: sha512-pQ8mNco/9g9TqWXWWjP0EWl6i/lAQScOyEeXy5AB+f7MfLSdgyV9BJhiOD1zrIac/lrxPYOWNbyl/IW8CW5n0A==} - dependencies: - relative-time-format: 1.1.6 - dev: false + lodash-es@4.17.21: {} - /js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true + lodash-unified@1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.17.21)(lodash@4.17.21): dependencies: - argparse: 1.0.10 - esprima: 4.0.1 - dev: false - - /jsesc@0.5.0: - resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} - hasBin: true - dev: false - - /keypress@0.1.0: - resolution: {integrity: sha512-x0yf9PL/nx9Nw9oLL8ZVErFAk85/lslwEP7Vz7s5SI1ODXZIgit3C5qyWjw4DxOuO/3Hb4866SQh28a1V1d+WA==} - dev: false - - /kleur@3.0.3: - resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} - engines: {node: '>=6'} - dev: false + '@types/lodash-es': 4.17.12 + lodash: 4.17.21 + lodash-es: 4.17.21 - /local-access@1.1.0: - resolution: {integrity: sha512-XfegD5pyTAfb+GY6chk283Ox5z8WexG56OvM06RWLpAc/UHozO8X6xAxEkIitZOtsSMM1Yr3DkHgW5W+onLhCw==} - engines: {node: '>=6'} - dev: false + lodash._reinterpolate@3.0.0: + optional: true - /locate-path@3.0.0: - resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} - engines: {node: '>=6'} + lodash.template@4.5.0: dependencies: - p-locate: 3.0.0 - path-exists: 3.0.0 - dev: false + lodash._reinterpolate: 3.0.0 + lodash.templatesettings: 4.2.0 + optional: true - /lodash.template@4.5.0: - resolution: {integrity: sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==} - requiresBuild: true + lodash.templatesettings@4.2.0: dependencies: - lodash._reinterpolate: registry.npmmirror.com/lodash._reinterpolate@3.0.0 - lodash.templatesettings: registry.npmmirror.com/lodash.templatesettings@4.2.0 - dev: false + lodash._reinterpolate: 3.0.0 optional: true - /lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - dev: false + lodash@4.17.21: {} - /lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} + lru-cache@10.4.3: {} + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + lru-cache@6.0.0: dependencies: yallist: 4.0.0 - dev: false optional: true - /luxon@1.28.0: - resolution: {integrity: sha512-TfTiyvZhwBYM/7QdAVDh+7dBTBA29v4ik0Ce9zda3Mnf8on1S5KJI8P2jKFZ8+5C0jhmr0KwJEO/Wdpm0VeWJQ==} - dev: false + luxon@3.5.0: {} - /macos-release@3.1.0: - resolution: {integrity: sha512-/M/R0gCDgM+Cv1IuBG1XGdfTFnMEG6PZeT+KGWHO/OG+imqmaD9CH5vHBTycEM3+Kc4uG2Il+tFAuUWLqQOeUA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: false + macos-release@3.1.0: {} - /magic-string@0.25.9: - resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} + magic-string@0.25.9: dependencies: sourcemap-codec: 1.4.8 - dev: false - /magic-string@0.30.1: - resolution: {integrity: sha512-mbVKXPmS0z0G4XqFDCTllmDQ6coZzn94aMlb0o/A4HEHJCKcanlDZwYJgwnkmgD3jyWhUgj9VsPrfd972yPffA==} - engines: {node: '>=12'} + magic-string@0.30.12: dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 - dev: true + '@jridgewell/sourcemap-codec': 1.5.0 - /make-dir@3.1.0: - resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} - engines: {node: '>=8'} + make-dir@3.1.0: dependencies: semver: 6.3.0 - dev: false optional: true - /marked@4.2.3: - resolution: {integrity: sha512-slWRdJkbTZ+PjkyJnE30Uid64eHwbwa1Q25INCAYfZlK4o6ylagBy/Le9eWntqJFoFT93ikUKMv47GZ4gTwHkw==} - engines: {node: '>= 12'} - hasBin: true - dev: false + make-dir@4.0.0: + dependencies: + semver: 7.6.3 - /matchit@1.1.0: - resolution: {integrity: sha512-+nGYoOlfHmxe5BW5tE0EMJppXEwdSf8uBA1GTZC7Q77kbT35+VKLYJMzVNWCHSsga1ps1tPYFtFyvxvKzWVmMA==} - engines: {node: '>=6'} + makeerror@1.0.12: + dependencies: + tmpl: 1.0.5 + + matchit@1.1.0: dependencies: '@arr/every': 1.0.1 - dev: false - /math-log2@1.0.1: - resolution: {integrity: sha512-9W0yGtkaMAkf74XGYVy4Dqw3YUMnTNB2eeiw9aQbUl4A3KmuCEHTt2DgAB07ENzOYAjsYSAYufkAq0Zd+jU7zA==} - engines: {node: '>=0.10.0'} - dev: false + math-log2@1.0.1: {} - /md5@2.3.0: - resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==} + md5@2.3.0: dependencies: charenc: 0.0.2 crypt: 0.0.2 is-buffer: 1.1.6 - dev: false - /memoize-one@6.0.0: - resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==} - dev: false + mdn-data@2.0.28: {} - /merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - dev: false + mdn-data@2.0.30: {} - /mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - dev: false + memoize-one@6.0.0: {} - /mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} + merge-stream@2.0.0: {} + + merge2@1.4.1: {} + + meshoptimizer@0.18.1: {} + + micromatch@4.0.5: + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + + mime-db@1.33.0: {} + + mime-db@1.52.0: {} + + mime-types@2.1.18: + dependencies: + mime-db: 1.33.0 + + mime-types@2.1.35: dependencies: mime-db: 1.52.0 - dev: false - /mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - dev: false + mimic-fn@2.1.0: {} - /minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 - dev: false - optional: true - /minimist@1.2.7: - resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==} - dev: false + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.1 - /minipass@3.3.6: - resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} - engines: {node: '>=8'} + minimist@1.2.7: {} + + minipass@3.3.6: dependencies: yallist: 4.0.0 - dev: false optional: true - /minizlib@2.1.2: - resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} - engines: {node: '>= 8'} + minipass@7.1.2: {} + + minizlib@2.1.2: dependencies: minipass: 3.3.6 yallist: 4.0.0 - dev: false optional: true - /mkdirp@1.0.4: - resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} - engines: {node: '>=10'} - hasBin: true - dev: false + mitt@3.0.1: {} + + mkdirp@1.0.4: optional: true - /mri@1.2.0: - resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} - engines: {node: '>=4'} - dev: false + mlly@1.7.2: + dependencies: + acorn: 8.13.0 + pathe: 1.1.2 + pkg-types: 1.2.1 + ufo: 1.5.4 - /mrmime@1.0.1: - resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==} - engines: {node: '>=10'} - dev: false + monaco-editor@0.50.0: {} - /ms@2.0.0: - resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} - dev: false + mri@1.2.0: {} - /ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: false - optional: true + mrmime@1.0.1: {} - /nanoid@3.3.4: - resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - dev: false + ms@2.0.0: {} - /negotiator@0.6.3: - resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} - engines: {node: '>= 0.6'} - dev: false + ms@2.1.2: {} - /node-addon-api@3.2.1: - resolution: {integrity: sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==} - dev: false + muggle-string@0.4.1: {} + + mz@2.7.0: + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + + nanoid@3.3.7: {} + + natural-compare-lite@1.4.0: {} + + natural-compare@1.4.0: {} + + negotiator@0.6.3: {} + + node-addon-api@3.2.1: optional: true - /node-fetch@2.6.7: - resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true + node-addon-api@7.1.1: {} + + node-fetch@2.6.7: dependencies: whatwg-url: 5.0.0 - dev: false optional: true - /nodejieba@2.5.2: - resolution: {integrity: sha512-ByskJvaBrQ2eV+5M0OeD80S5NKoGaHc9zi3Z/PTKl/95eac2YF8RmWduq9AknLpkQLrLAIcqurrtC6BzjpKwwg==} - engines: {node: '>= 10.20.0'} - requiresBuild: true + node-int64@0.4.0: {} + + node-releases@2.0.18: {} + + nodejieba@2.5.2: dependencies: '@mapbox/node-pre-gyp': 1.0.10 node-addon-api: 3.2.1 transitivePeerDependencies: - encoding - supports-color - dev: false optional: true - /nopt@5.0.0: - resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} - engines: {node: '>=6'} - hasBin: true + nopt@5.0.0: dependencies: abbrev: 1.1.1 - dev: false optional: true - /normalize-wheel-es@1.2.0: - resolution: {integrity: sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==} - dev: false + normalize-path@3.0.0: {} - /normalize.css@8.0.1: - resolution: {integrity: sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg==} - dev: false + normalize-range@0.1.2: {} - /npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} + normalize-wheel-es@1.2.0: {} + + normalize.css@8.0.1: {} + + npm-run-path@4.0.1: dependencies: path-key: 3.1.1 - dev: false - /npmlog@5.0.1: - resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} + npmlog@5.0.1: dependencies: are-we-there-yet: 2.0.0 console-control-strings: 1.1.0 gauge: 3.0.2 set-blocking: 2.0.0 - dev: false optional: true - /object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - dev: false + nth-check@2.1.1: + dependencies: + boolbase: 1.0.0 - /object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - dev: false + object-assign@4.1.1: {} - /on-headers@1.0.2: - resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} - engines: {node: '>= 0.8'} - dev: false + object-hash@3.0.0: {} - /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + on-headers@1.0.2: {} + + once@1.4.0: dependencies: wrappy: 1.0.2 - dev: false - optional: true - /onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} + onetime@5.1.2: dependencies: mimic-fn: 2.1.0 - dev: false - /open@8.4.2: - resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} - engines: {node: '>=12'} + open@8.4.2: dependencies: define-lazy-prop: 2.0.0 is-docker: 2.2.1 is-wsl: 2.2.0 - dev: true - /os-homedir@2.0.0: - resolution: {integrity: sha512-saRNz0DSC5C/I++gFIaJTXoFJMRwiP5zHar5vV3xQ2TkgEw6hDCcU5F272JjUylpiVgBrZNQHnfjkLabTfb92Q==} - engines: {node: '>=0.10.0'} - deprecated: This is not needed anymore. Use `require('os').homedir()` instead. - dev: false + os-homedir@2.0.0: {} - /os-name@5.0.1: - resolution: {integrity: sha512-0EQpaHUHq7olp2/YFUr+0vZi9tMpDTblHGz+Ch5RntKxiRXOAY0JOz1UlxhSjMSksHvkm13eD6elJj3M8Ht/kw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + os-name@5.0.1: dependencies: macos-release: 3.1.0 windows-release: 5.0.1 - dev: false - /p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} + p-limit@2.3.0: dependencies: p-try: 2.2.0 - dev: false - /p-locate@3.0.0: - resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} - engines: {node: '>=6'} + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@4.1.0: dependencies: p-limit: 2.3.0 - dev: false - /p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} - dev: false + p-try@2.2.0: {} - /parse-rect@1.2.0: - resolution: {integrity: sha512-4QZ6KYbnE6RTwg9E0HpLchUM9EZt6DnDxajFZZDSV4p/12ZJEvPO702DZpGvRYEPo00yKDys7jASi+/w7aO8LA==} + package-json-from-dist@1.0.1: {} + + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.25.9 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + parse-rect@1.2.0: dependencies: pick-by-alias: 1.2.0 - dev: false - /path-exists@3.0.0: - resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} - engines: {node: '>=4'} - dev: false + path-browserify@1.0.1: {} - /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - dev: false - optional: true + path-exists@4.0.0: {} - /path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - dev: false + path-is-absolute@1.0.1: {} - /pick-by-alias@1.2.0: - resolution: {integrity: sha512-ESj2+eBxhGrcA1azgHs7lARG5+5iLakc/6nlfbpjcLl00HuuUOIuORhYXN4D1HfvMSKuVtFQjAlnwi1JHEeDIw==} - dev: false + path-is-inside@1.0.2: {} - /picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - dev: false + path-key@3.1.1: {} - /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - dev: true + path-parse@1.0.7: {} - /pinyin@2.11.2: - resolution: {integrity: sha512-tAWDBcowj09j/vLUjty98nVqrbTVNhutf1VcyID4p0sxTFPzRyXw7n7Ic0HQwBdWFIWrrDP8bYiT64gaT6h3gA==} - hasBin: true + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + + path-to-regexp@3.3.0: {} + + pathe@1.1.2: {} + + periscopic@3.1.0: + dependencies: + '@types/estree': 1.0.6 + estree-walker: 3.0.3 + is-reference: 3.0.1 + + pick-by-alias@1.2.0: {} + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + picomatch@4.0.2: {} + + pify@2.3.0: {} + + pinyin@2.11.2: dependencies: commander: 1.1.1 object-assign: 4.1.1 @@ -1847,10 +7397,22 @@ packages: transitivePeerDependencies: - encoding - supports-color - dev: false - /point-cluster@3.1.8: - resolution: {integrity: sha512-7klIr45dpMeZuqjIK9+qBg3m2IhyZJNJkdqjJFw0Olq75FM8ojrTMjClVUrMjNYRVqtwztxCHH71Fyjhg+YwyQ==} + pirates@4.0.6: {} + + pkg-dir@4.2.0: + dependencies: + find-up: 4.1.0 + + pkg-types@1.2.1: + dependencies: + confbox: 0.1.8 + mlly: 1.7.2 + pathe: 1.1.2 + + pnpm@9.12.2: {} + + point-cluster@3.1.8: dependencies: array-bounds: 1.0.1 array-normalize: 1.1.4 @@ -1864,48 +7426,120 @@ packages: math-log2: 1.0.1 parse-rect: 1.2.0 pick-by-alias: 1.2.0 - dev: false - /polka@0.5.2: - resolution: {integrity: sha512-FVg3vDmCqP80tOrs+OeNlgXYmFppTXdjD5E7I4ET1NjvtNmQrb1/mJibybKkb/d4NA7YWAr1ojxuhpL3FHqdlw==} + polka@0.5.2: + dependencies: + '@polka/url': 0.5.0 + trouter: 2.0.1 + + postcss-import@15.1.0(postcss@8.4.47): + dependencies: + postcss: 8.4.47 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.8 + + postcss-js@4.0.1(postcss@8.4.47): + dependencies: + camelcase-css: 2.0.1 + postcss: 8.4.47 + + postcss-load-config@4.0.2(postcss@8.4.47): + dependencies: + lilconfig: 3.1.2 + yaml: 2.6.0 + optionalDependencies: + postcss: 8.4.47 + + postcss-nested@6.2.0(postcss@8.4.47): + dependencies: + postcss: 8.4.47 + postcss-selector-parser: 6.1.2 + + postcss-selector-parser@6.1.2: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-value-parser@4.2.0: {} + + postcss@8.4.47: + dependencies: + nanoid: 3.3.7 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + prettier@3.3.3: {} + + pretty-format@29.7.0: + dependencies: + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.3.1 + + prismjs@1.29.0: {} + + prompts@2.4.2: + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + + proxy-from-env@1.1.0: {} + + pug-error@2.1.0: {} + + pug-lexer@5.0.1: + dependencies: + character-parser: 2.2.0 + is-expression: 4.0.0 + pug-error: 2.1.0 + + pug-parser@6.0.0: dependencies: - '@polka/url': 0.5.0 - trouter: 2.0.1 - dev: false + pug-error: 2.1.0 + token-stream: 1.0.0 - /postcss@8.4.19: - resolution: {integrity: sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==} - engines: {node: ^10 || ^12 || >=14} + punycode@2.3.1: {} + + pure-rand@6.1.0: {} + + queue-microtask@1.2.3: {} + + range-parser@1.2.0: {} + + rc@1.2.8: dependencies: - nanoid: 3.3.4 - picocolors: 1.0.0 - source-map-js: 1.0.2 - dev: false + deep-extend: 0.6.0 + ini: 1.3.8 + minimist: 1.2.7 + strip-json-comments: 2.0.1 - /readable-stream@3.6.0: - resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} - engines: {node: '>= 6'} + react-is@18.3.1: {} + + read-cache@1.0.0: + dependencies: + pify: 2.3.0 + + readable-stream@3.6.0: dependencies: inherits: 2.0.4 string_decoder: 1.3.0 util-deprecate: 1.0.2 - dev: false optional: true - /regenerate-unicode-properties@9.0.0: - resolution: {integrity: sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA==} - engines: {node: '>=4'} + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + readdirp@4.0.2: {} + + regenerate-unicode-properties@9.0.0: dependencies: regenerate: 1.4.2 - dev: false - /regenerate@1.4.2: - resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} - dev: false + regenerate@1.4.2: {} - /regexpu-core@4.8.0: - resolution: {integrity: sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg==} - engines: {node: '>=4'} + regexpu-core@4.8.0: dependencies: regenerate: 1.4.2 regenerate-unicode-properties: 9.0.0 @@ -1913,159 +7547,196 @@ packages: regjsparser: 0.7.0 unicode-match-property-ecmascript: 2.0.0 unicode-match-property-value-ecmascript: 2.1.0 - dev: false - /regjsgen@0.5.2: - resolution: {integrity: sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==} - dev: false + registry-auth-token@3.3.2: + dependencies: + rc: 1.2.8 + safe-buffer: 5.2.1 - /regjsparser@0.7.0: - resolution: {integrity: sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ==} - hasBin: true + registry-url@3.1.0: + dependencies: + rc: 1.2.8 + + regjsgen@0.5.2: {} + + regjsparser@0.7.0: dependencies: jsesc: 0.5.0 - dev: false - /relative-time-format@1.1.6: - resolution: {integrity: sha512-aCv3juQw4hT1/P/OrVltKWLlp15eW1GRcwP1XdxHrPdZE9MtgqFpegjnTjLhi2m2WI9MT/hQQtE+tjEWG1hgkQ==} - dev: false + relative-time-format@1.1.6: {} - /require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} + repeat-string@1.6.1: {} - /require-main-filename@2.0.0: - resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} - dev: false + request-light@0.7.0: {} - /rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - hasBin: true + require-directory@2.1.1: {} + + require-from-string@2.0.2: {} + + resolve-cwd@3.0.0: + dependencies: + resolve-from: 5.0.0 + + resolve-from@5.0.0: {} + + resolve-pkg-maps@1.0.0: {} + + resolve.exports@2.0.2: {} + + resolve@1.22.1: + dependencies: + is-core-module: 2.11.0 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + resolve@1.22.8: + dependencies: + is-core-module: 2.15.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + reusify@1.0.4: {} + + rimraf@3.0.2: dependencies: glob: 7.2.3 - dev: false optional: true - /rollup-plugin-external-globals@0.8.0(rollup@3.26.2): - resolution: {integrity: sha512-c65c7hPMCE//cLzC4dLVE25XkuHsBqSkZp+/5pvtZ1MFwqgQLRRkIfuCvI3PnI7Yj8HoXqYtdsRN9gYF5a4tVQ==} - peerDependencies: - rollup: ^2.25.0 || ^3.3.0 + rollup-plugin-external-globals@0.10.0(rollup@4.24.0): dependencies: - '@rollup/pluginutils': 5.0.2(rollup@3.26.2) + '@rollup/pluginutils': 5.1.3(rollup@4.24.0) estree-walker: 3.0.3 - is-reference: 3.0.1 - magic-string: 0.30.1 - rollup: 3.26.2 - dev: true + is-reference: 3.0.2 + magic-string: 0.30.12 + rollup: 4.24.0 - /rollup-plugin-visualizer@5.9.2(rollup@3.26.2): - resolution: {integrity: sha512-waHktD5mlWrYFrhOLbti4YgQCn1uR24nYsNuXxg7LkPH8KdTXVWR9DNY1WU0QqokyMixVXJS4J04HNrVTMP01A==} - engines: {node: '>=14'} - hasBin: true - peerDependencies: - rollup: 2.x || 3.x - peerDependenciesMeta: - rollup: - optional: true + rollup-plugin-visualizer@5.12.0(rollup@4.24.0): dependencies: open: 8.4.2 picomatch: 2.3.1 - rollup: 3.26.2 source-map: 0.7.4 yargs: 17.7.2 - dev: true - - /rollup@3.26.2: - resolution: {integrity: sha512-6umBIGVz93er97pMgQO08LuH3m6PUb3jlDUUGFsNJB6VgTCUaDFpupf5JfU30529m/UKOgmiX+uY6Sx8cOYpLA==} - engines: {node: '>=14.18.0', npm: '>=8.0.0'} - hasBin: true optionalDependencies: - fsevents: 2.3.2 - dev: true + rollup: 4.24.0 - /sade@1.8.1: - resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} - engines: {node: '>=6'} + rollup@4.24.0: + dependencies: + '@types/estree': 1.0.6 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.24.0 + '@rollup/rollup-android-arm64': 4.24.0 + '@rollup/rollup-darwin-arm64': 4.24.0 + '@rollup/rollup-darwin-x64': 4.24.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.24.0 + '@rollup/rollup-linux-arm-musleabihf': 4.24.0 + '@rollup/rollup-linux-arm64-gnu': 4.24.0 + '@rollup/rollup-linux-arm64-musl': 4.24.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.24.0 + '@rollup/rollup-linux-riscv64-gnu': 4.24.0 + '@rollup/rollup-linux-s390x-gnu': 4.24.0 + '@rollup/rollup-linux-x64-gnu': 4.24.0 + '@rollup/rollup-linux-x64-musl': 4.24.0 + '@rollup/rollup-win32-arm64-msvc': 4.24.0 + '@rollup/rollup-win32-ia32-msvc': 4.24.0 + '@rollup/rollup-win32-x64-msvc': 4.24.0 + fsevents: 2.3.3 + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + sade@1.8.1: dependencies: mri: 1.2.0 - dev: false - /safe-buffer@5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - dev: false + safe-buffer@5.1.2: {} - /safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - dev: false - optional: true + safe-buffer@5.2.1: {} - /select-dom@6.0.2: - resolution: {integrity: sha512-fnRexLCjOE1XtMiV0xGACx4GJFMs/eatOQM0LWL9lxWB8DJ/FeXO39ztqUh6dZCOdoFo/g6jGJIIqNWoMsNLPA==} - dev: false + sass@1.80.1: + dependencies: + '@parcel/watcher': 2.4.1 + chokidar: 4.0.1 + immutable: 4.3.7 + source-map-js: 1.2.1 - /select@1.1.2: - resolution: {integrity: sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==} - dev: false + sass@1.80.4: + dependencies: + '@parcel/watcher': 2.4.1 + chokidar: 4.0.1 + immutable: 4.3.7 + source-map-js: 1.2.1 - /semiver@1.1.0: - resolution: {integrity: sha512-QNI2ChmuioGC1/xjyYwyZYADILWyW6AmS1UH6gDj/SFUUUS4MBAWs/7mxnkRPc/F4iHezDP+O8t0dO8WHiEOdg==} - engines: {node: '>=6'} - dev: false + select-dom@6.0.2: {} - /semver@6.3.0: - resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} - hasBin: true - dev: false - optional: true + select@1.1.2: {} - /semver@7.3.8: - resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==} - engines: {node: '>=10'} - hasBin: true + semiver@1.1.0: {} + + semver@6.3.0: {} + + semver@6.3.1: {} + + semver@7.3.8: dependencies: lru-cache: 6.0.0 - dev: false optional: true - /set-blocking@2.0.0: - resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - dev: false + semver@7.6.3: {} - /shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} + serve-handler@6.1.6: dependencies: - shebang-regex: 3.0.0 - dev: false + bytes: 3.0.0 + content-disposition: 0.5.2 + mime-types: 2.1.18 + minimatch: 3.1.2 + path-is-inside: 1.0.2 + path-to-regexp: 3.3.0 + range-parser: 1.2.0 + + serve@14.2.4: + dependencies: + '@zeit/schemas': 2.36.0 + ajv: 8.12.0 + arg: 5.0.2 + boxen: 7.0.0 + chalk: 5.0.1 + chalk-template: 0.4.0 + clipboardy: 3.0.0 + compression: 1.7.4 + is-port-reachable: 4.0.0 + serve-handler: 6.1.6 + update-check: 1.5.4 + transitivePeerDependencies: + - supports-color - /shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - dev: false + set-blocking@2.0.0: + optional: true - /showdown@1.9.1: - resolution: {integrity: sha512-9cGuS382HcvExtf5AHk7Cb4pAeQQ+h0eTr33V1mu+crYWV4KvWAw6el92bDrqGEk5d46Ai/fhbEUwqJ/mTCNEA==} - hasBin: true + set-function-length@1.2.2: dependencies: - yargs: 14.2.3 - dev: false + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 - /signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - dev: false + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 - /simplemde@1.11.2: - resolution: {integrity: sha512-AUXuHJ/tEEDEcN/MTitHIw3AuBcheizJt7SVwtyn00B0UK5RKZ3GB+JndmRcJ5wfYGCIL0O2yJm/uz0sJOFSLg==} + shebang-regex@3.0.0: {} + + showdown@2.1.0: dependencies: - codemirror: 5.65.10 - codemirror-spell-checker: 1.1.2 - marked: 4.2.3 - dev: false + commander: 9.5.0 - /sirv-cli@1.0.14: - resolution: {integrity: sha512-yyUTNr984ANKDloqepkYbBSqvx3buwYg2sQKPWjSU+IBia5loaoka2If8N9CMwt8AfP179cdEl7kYJ//iWJHjQ==} - engines: {node: '>= 10'} - hasBin: true + signal-exit@3.0.7: {} + + signal-exit@4.1.0: {} + + sirv-cli@1.0.14: dependencies: console-clear: 1.1.1 get-port: 3.2.0 @@ -2075,1710 +7746,620 @@ packages: semiver: 1.1.0 sirv: 1.0.19 tinydate: 1.3.0 - dev: false - /sirv@1.0.19: - resolution: {integrity: sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==} - engines: {node: '>= 10'} + sirv@1.0.19: dependencies: '@polka/url': 1.0.0-next.21 mrmime: 1.0.1 totalist: 1.1.0 - dev: false - /source-map-js@1.0.2: - resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} - engines: {node: '>=0.10.0'} - dev: false + sisteransi@1.0.5: {} - /source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - dev: false + slash@3.0.0: {} - /source-map@0.7.4: - resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} - engines: {node: '>= 8'} - dev: true + source-map-js@1.0.2: {} - /sourcemap-codec@1.4.8: - resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} - deprecated: Please use @jridgewell/sourcemap-codec instead - dev: false + source-map-js@1.2.1: {} - /sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - dev: false + source-map-support@0.5.13: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 - /string-width@3.1.0: - resolution: {integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==} - engines: {node: '>=6'} + source-map@0.6.1: {} + + source-map@0.7.4: {} + + sourcemap-codec@1.4.8: {} + + sprintf-js@1.0.3: {} + + stack-utils@2.0.6: dependencies: - emoji-regex: 7.0.3 - is-fullwidth-code-point: 2.0.0 - strip-ansi: 5.2.0 - dev: false + escape-string-regexp: 2.0.0 - /string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} + string-length@4.0.2: + dependencies: + char-regex: 1.0.2 + strip-ansi: 6.0.1 + + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - /string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + string-width@5.1.2: dependencies: - safe-buffer: 5.2.1 - dev: false - optional: true + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 - /strip-ansi@5.2.0: - resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==} - engines: {node: '>=6'} + string_decoder@1.3.0: dependencies: - ansi-regex: 4.1.1 - dev: false + safe-buffer: 5.2.1 + optional: true - /strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 - /strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - dev: false - - /supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} - dependencies: - has-flag: 3.0.0 - dev: false - - /tar@6.1.12: - resolution: {integrity: sha512-jU4TdemS31uABHd+Lt5WEYJuzn+TJTCBLljvIAHZOz6M9Os5pJ4dD+vRFLxPa/n3T0iEFzpi+0x1UfuDZYbRMw==} - engines: {node: '>=10'} + strip-ansi@7.1.0: dependencies: - chownr: 2.0.0 - fs-minipass: 2.1.0 - minipass: 3.3.6 - minizlib: 2.1.2 - mkdirp: 1.0.4 - yallist: 4.0.0 - dev: false - optional: true + ansi-regex: 6.1.0 - /tiny-emitter@2.1.0: - resolution: {integrity: sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==} - dev: false + strip-bom@4.0.0: {} - /tinydate@1.3.0: - resolution: {integrity: sha512-7cR8rLy2QhYHpsBDBVYnnWXm8uRTr38RoZakFSW7Bs7PzfMPNZthuMLkwqZv7MTu8lhQ91cOFYS5a7iFj2oR3w==} - engines: {node: '>=4'} - dev: false + strip-final-newline@2.0.0: {} - /to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} - dev: false + strip-json-comments@2.0.1: {} - /totalist@1.1.0: - resolution: {integrity: sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==} - engines: {node: '>=6'} - dev: false + strip-json-comments@3.1.1: {} - /tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - dev: false - optional: true + style-mod@4.1.2: {} - /trouter@2.0.1: - resolution: {integrity: sha512-kr8SKKw94OI+xTGOkfsvwZQ8mWoikZDd2n8XZHjJVZUARZT+4/VV6cacRS6CLsH9bNm+HFIPU1Zx4CnNnb4qlQ==} - engines: {node: '>=6'} + sucrase@3.35.0: dependencies: - matchit: 1.1.0 - dev: false - - /tslib@2.3.0: - resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==} - dev: false - - /tslib@2.4.1: - resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} - dev: false - - /typo-js@1.2.2: - resolution: {integrity: sha512-C7pYBQK17EjSg8tVNY91KHdUt5Nf6FMJ+c3js076quPmBML57PmNMzAcIq/2kf/hSYtFABNDIYNYlJRl5BJhGw==} - dev: false + '@jridgewell/gen-mapping': 0.3.5 + commander: 4.1.1 + glob: 10.4.5 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.6 + ts-interface-checker: 0.1.13 - /unicode-canonical-property-names-ecmascript@2.0.0: - resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} - engines: {node: '>=4'} - dev: false + supports-color@5.5.0: + dependencies: + has-flag: 3.0.0 - /unicode-match-property-ecmascript@2.0.0: - resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} - engines: {node: '>=4'} + supports-color@7.2.0: dependencies: - unicode-canonical-property-names-ecmascript: 2.0.0 - unicode-property-aliases-ecmascript: 2.1.0 - dev: false + has-flag: 4.0.0 - /unicode-match-property-value-ecmascript@2.1.0: - resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} - engines: {node: '>=4'} - dev: false + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 - /unicode-property-aliases-ecmascript@2.1.0: - resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} - engines: {node: '>=4'} - dev: false + supports-preserve-symlinks-flag@1.0.0: {} - /url-join@4.0.1: - resolution: {integrity: sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==} - dev: false + svelte@4.2.19: + dependencies: + '@ampproject/remapping': 2.3.0 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + '@types/estree': 1.0.6 + acorn: 8.13.0 + aria-query: 5.3.2 + axobject-query: 4.1.0 + code-red: 1.0.4 + css-tree: 2.3.1 + estree-walker: 3.0.3 + is-reference: 3.0.1 + locate-character: 3.0.0 + magic-string: 0.30.12 + periscopic: 3.1.0 + + svg-tags@1.0.0: {} + + svgo@3.3.2: + dependencies: + '@trysound/sax': 0.2.0 + commander: 7.2.0 + css-select: 5.1.0 + css-tree: 2.3.1 + css-what: 6.1.0 + csso: 5.0.5 + picocolors: 1.1.1 + + tailwindcss@3.4.14: + dependencies: + '@alloc/quick-lru': 5.2.0 + arg: 5.0.2 + chokidar: 3.5.3 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.2 + glob-parent: 6.0.2 + is-glob: 4.0.3 + jiti: 1.21.6 + lilconfig: 2.1.0 + micromatch: 4.0.5 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.1.1 + postcss: 8.4.47 + postcss-import: 15.1.0(postcss@8.4.47) + postcss-js: 4.0.1(postcss@8.4.47) + postcss-load-config: 4.0.2(postcss@8.4.47) + postcss-nested: 6.2.0(postcss@8.4.47) + postcss-selector-parser: 6.1.2 + resolve: 1.22.8 + sucrase: 3.35.0 + transitivePeerDependencies: + - ts-node - /util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - dev: false + tar@6.1.12: + dependencies: + chownr: 2.0.0 + fs-minipass: 2.1.0 + minipass: 3.3.6 + minizlib: 2.1.2 + mkdirp: 1.0.4 + yallist: 4.0.0 optional: true - /vary@1.1.2: - resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} - engines: {node: '>= 0.8'} - dev: false - - /vite-plugin-externalize-deps@0.7.0(vite@3.2.4): - resolution: {integrity: sha512-do2gPrR79Tm8UKcqsw3RTAtN4YO8GkVRBckWdJWINZ3Qdp3KN9S1oyUZxKszTB/iyg4zdOUweLOeBI8t86QVow==} - peerDependencies: - vite: ^2.0.0 || ^3.0.0 || ^4.0.0 + test-exclude@6.0.0: dependencies: - vite: registry.npmmirror.com/vite@3.2.4(@types/node@18.11.10) - dev: true + '@istanbuljs/schema': 0.1.3 + glob: 7.2.3 + minimatch: 3.1.2 - /vue-clipboard3@2.0.0: - resolution: {integrity: sha512-Q9S7dzWGax7LN5iiSPcu/K1GGm2gcBBlYwmMsUc5/16N6w90cbKow3FnPmPs95sungns4yvd9/+JhbAznECS2A==} + thenify-all@1.6.0: dependencies: - clipboard: 2.0.11 - dev: false + thenify: 3.3.1 - /vue-debounce@4.0.0(vue@3.2.45): - resolution: {integrity: sha512-+BrcKfLpyDpUJ58ZrAvI35irRCgYHFpnF3NJZwwaz8/kkKmEq6TWPXBIhLh2HQAsUZNwo52K/vQyiEFsJ/1RYA==} - peerDependencies: - vue: '>= 2.0.0' + thenify@3.3.1: dependencies: - vue: 3.2.45 - dev: false + any-promise: 1.3.0 - /vue-demi@0.13.11(vue@3.2.45): - resolution: {integrity: sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true - peerDependencies: - '@vue/composition-api': ^1.0.0-rc.1 - vue: ^3.0.0-0 || ^2.6.0 - peerDependenciesMeta: - '@vue/composition-api': - optional: true - dependencies: - vue: 3.2.45 - dev: false + three@0.166.1: {} - /vue-i18n@9.1.9(vue@3.2.45): - resolution: {integrity: sha512-JeRdNVxS2OGp1E+pye5XB6+M6BBkHwAv9C80Q7+kzoMdUDGRna06tjC0vCB/jDX9aWrl5swxOMFcyAr7or8XTA==} - engines: {node: '>= 10'} - peerDependencies: - vue: ^3.0.0 - dependencies: - '@intlify/core-base': 9.1.9 - '@intlify/shared': 9.1.9 - '@intlify/vue-devtools': 9.1.9 - '@vue/devtools-api': 6.4.5 - vue: 3.2.45 - dev: false + tiny-emitter@2.1.0: {} - /vue-router@4.0.11(vue@3.2.45): - resolution: {integrity: sha512-sha6I8fx9HWtvTrFZfxZkiQQBpqSeT+UCwauYjkdOQYRvwsGwimlQQE2ayqUwuuXGzquFpCPoXzYKWlzL4OuXg==} - peerDependencies: - vue: ^3.0.0 - dependencies: - '@vue/devtools-api': 6.4.5 - vue: 3.2.45 - dev: false + tiny-invariant@1.3.3: {} - /vue@3.2.45: - resolution: {integrity: sha512-9Nx/Mg2b2xWlXykmCwiTUCWHbWIj53bnkizBxKai1g61f2Xit700A1ljowpTIM11e3uipOeiPcSqnmBg6gyiaA==} - dependencies: - '@vue/compiler-dom': 3.2.45 - '@vue/compiler-sfc': 3.2.45 - '@vue/runtime-dom': 3.2.45 - '@vue/server-renderer': 3.2.45(vue@3.2.45) - '@vue/shared': 3.2.45 - dev: false + tinydate@1.3.0: {} - /vuex@4.1.0(vue@3.2.45): - resolution: {integrity: sha512-hmV6UerDrPcgbSy9ORAtNXDr9M4wlNP4pEFKye4ujJF8oqgFFuxDCdOLS3eNoRTtq5O3hoBDh9Doj1bQMYHRbQ==} - peerDependencies: - vue: ^3.2.0 - dependencies: - '@vue/devtools-api': 6.4.5 - vue: 3.2.45 - dev: false + tlds@1.255.0: {} - /webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - dev: false - optional: true + tmpl@1.0.5: {} - /whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + to-fast-properties@2.0.0: {} + + to-regex-range@5.0.1: dependencies: - tr46: 0.0.3 - webidl-conversions: 3.0.1 - dev: false - optional: true + is-number: 7.0.0 - /which-module@2.0.0: - resolution: {integrity: sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==} - dev: false + token-stream@1.0.0: {} - /which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - dependencies: - isexe: 2.0.0 - dev: false + totalist@1.1.0: {} - /wide-align@1.1.5: - resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} - dependencies: - string-width: 4.2.3 - dev: false + tr46@0.0.3: optional: true - /windows-release@5.0.1: - resolution: {integrity: sha512-y1xFdFvdMiDXI3xiOhMbJwt1Y7dUxidha0CWPs1NgjZIjZANTcX7+7bMqNjuezhzb8s5JGEiBAbQjQQYYy7ulw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + trouter@2.0.1: dependencies: - execa: 5.1.1 - dev: false + matchit: 1.1.0 - /wrap-ansi@5.1.0: - resolution: {integrity: sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==} - engines: {node: '>=6'} - dependencies: - ansi-styles: 3.2.1 - string-width: 3.1.0 - strip-ansi: 5.2.0 - dev: false + ts-interface-checker@0.1.13: {} - /wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - dev: true + tslib@2.4.1: {} + + tsx@4.19.1: + dependencies: + esbuild: 0.23.1 + get-tsconfig: 4.8.1 + optionalDependencies: + fsevents: 2.3.3 - /wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - dev: false + turbo-darwin-64@2.2.3: optional: true - /y18n@4.0.3: - resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} - dev: false + turbo-darwin-arm64@2.2.3: + optional: true - /y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - dev: true + turbo-linux-64@2.2.3: + optional: true - /yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - dev: false + turbo-linux-arm64@2.2.3: optional: true - /yargs-parser@15.0.3: - resolution: {integrity: sha512-/MVEVjTXy/cGAjdtQf8dW3V9b97bPN7rNn8ETj6BmAQL7ibC7O1Q9SPJbGjgh3SlwoBNXMzj/ZGIj8mBgl12YA==} - dependencies: - camelcase: 5.3.1 - decamelize: 1.2.0 - dev: false + turbo-windows-64@2.2.3: + optional: true - /yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - dev: true + turbo-windows-arm64@2.2.3: + optional: true - /yargs@14.2.3: - resolution: {integrity: sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==} - dependencies: - cliui: 5.0.0 - decamelize: 1.2.0 - find-up: 3.0.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - require-main-filename: 2.0.0 - set-blocking: 2.0.0 - string-width: 3.1.0 - which-module: 2.0.0 - y18n: 4.0.3 - yargs-parser: 15.0.3 - dev: false + turbo@2.2.3: + optionalDependencies: + turbo-darwin-64: 2.2.3 + turbo-darwin-arm64: 2.2.3 + turbo-linux-64: 2.2.3 + turbo-linux-arm64: 2.2.3 + turbo-windows-64: 2.2.3 + turbo-windows-arm64: 2.2.3 - /yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} - dependencies: - cliui: 8.0.1 - escalade: 3.1.1 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 21.1.1 - dev: true + type-detect@4.0.8: {} + + type-fest@0.21.3: {} - /zrender@5.4.0: - resolution: {integrity: sha512-rOS09Z2HSVGFs2dn/TuYk5BlCaZcVe8UDLLjj1ySYF828LATKKdxuakSZMvrDz54yiKPDYVfjdKqcX8Jky3BIA==} + type-fest@2.19.0: {} + + typescript-auto-import-cache@0.3.3: dependencies: - tslib: 2.3.0 - dev: false + semver: 7.6.3 - registry.npmmirror.com/@arr/every@1.0.1: - resolution: {integrity: sha512-UQFQ6SgyJ6LX42W8rHCs8KVc0JS0tzVL9ct4XYedJukskYVWTo49tNiMEK9C2HTyarbNiT/RVIRSY82vH+6sTg==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@arr/every/-/every-1.0.1.tgz} - name: '@arr/every' - version: 1.0.1 - engines: {node: '>=4'} - dev: false + typescript@5.6.3: {} - registry.npmmirror.com/@babel/helper-string-parser@7.19.4: - resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz} - name: '@babel/helper-string-parser' - version: 7.19.4 - engines: {node: '>=6.9.0'} + ufo@1.5.4: {} - registry.npmmirror.com/@babel/helper-validator-identifier@7.19.1: - resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz} - name: '@babel/helper-validator-identifier' - version: 7.19.1 - engines: {node: '>=6.9.0'} + undici-types@6.19.8: {} - registry.npmmirror.com/@babel/parser@7.20.5: - resolution: {integrity: sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@babel/parser/-/parser-7.20.5.tgz} - name: '@babel/parser' - version: 7.20.5 - engines: {node: '>=6.0.0'} - hasBin: true - dependencies: - '@babel/types': registry.npmmirror.com/@babel/types@7.20.5 + unicode-canonical-property-names-ecmascript@2.0.0: {} - registry.npmmirror.com/@babel/types@7.20.5: - resolution: {integrity: sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@babel/types/-/types-7.20.5.tgz} - name: '@babel/types' - version: 7.20.5 - engines: {node: '>=6.9.0'} + unicode-match-property-ecmascript@2.0.0: dependencies: - '@babel/helper-string-parser': registry.npmmirror.com/@babel/helper-string-parser@7.19.4 - '@babel/helper-validator-identifier': registry.npmmirror.com/@babel/helper-validator-identifier@7.19.1 - to-fast-properties: registry.npmmirror.com/to-fast-properties@2.0.0 + unicode-canonical-property-names-ecmascript: 2.0.0 + unicode-property-aliases-ecmascript: 2.1.0 - registry.npmmirror.com/@ctrl/tinycolor@3.4.1: - resolution: {integrity: sha512-ej5oVy6lykXsvieQtqZxCOaLT+xD4+QNarq78cIYISHmZXshCvROLudpQN3lfL8G0NL7plMSSK+zlyvCaIJ4Iw==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.4.1.tgz} - name: '@ctrl/tinycolor' - version: 3.4.1 - engines: {node: '>=10'} - dev: false + unicode-match-property-value-ecmascript@2.1.0: {} - registry.npmmirror.com/@element-plus/icons-vue@0.2.7(vue@3.2.45): - resolution: {integrity: sha512-S8kDbfVaWkQvbUYQE1ui448tzaHfUvyESCep9J6uPRlViyQPXjdIfwLBhV6AmQSOfFS8rL+xehJGhvzPXLrSBg==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-0.2.7.tgz} - id: registry.npmmirror.com/@element-plus/icons-vue/0.2.7 - name: '@element-plus/icons-vue' - version: 0.2.7 - peerDependencies: - vue: ^3.2.0 - dependencies: - vue: registry.npmmirror.com/vue@3.2.45 - dev: false + unicode-property-aliases-ecmascript@2.1.0: {} - registry.npmmirror.com/@element-plus/icons@0.0.11: - resolution: {integrity: sha512-iKQXSxXu131Ai+I9Ymtcof9WId7kaXvB1+WRfAfpQCW7UiAMYgdNDqb/u0hgTo2Yq3MwC4MWJnNuTBEpG8r7+A==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@element-plus/icons/-/icons-0.0.11.tgz} - name: '@element-plus/icons' - version: 0.0.11 - deprecated: Please use @element-plus/icons-vue instead. - dev: false + universalify@2.0.1: {} - registry.npmmirror.com/@fortawesome/fontawesome-common-types@0.3.0: - resolution: {integrity: sha512-CA3MAZBTxVsF6SkfkHXDerkhcQs0QPofy43eFdbWJJkZiq3SfiaH1msOkac59rQaqto5EqWnASboY1dBuKen5w==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.3.0.tgz} - name: '@fortawesome/fontawesome-common-types' - version: 0.3.0 - engines: {node: '>=6'} - deprecated: Please upgrade to 6.1.0. https://fontawesome.com/docs/changelog/ - requiresBuild: true - dev: false - - registry.npmmirror.com/@fortawesome/fontawesome-common-types@6.2.1: - resolution: {integrity: sha512-Sz07mnQrTekFWLz5BMjOzHl/+NooTdW8F8kDQxjWwbpOJcnoSg4vUDng8d/WR1wOxM0O+CY9Zw0nR054riNYtQ==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.2.1.tgz} - name: '@fortawesome/fontawesome-common-types' - version: 6.2.1 - engines: {node: '>=6'} - requiresBuild: true - dev: false + update-browserslist-db@1.1.1(browserslist@4.24.2): + dependencies: + browserslist: 4.24.2 + escalade: 3.2.0 + picocolors: 1.1.1 - registry.npmmirror.com/@fortawesome/fontawesome-svg-core@1.3.0: - resolution: {integrity: sha512-UIL6crBWhjTNQcONt96ExjUnKt1D68foe3xjEensLDclqQ6YagwCRYVQdrp/hW0ALRp/5Fv/VKw+MqTUWYYvPg==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.3.0.tgz} - name: '@fortawesome/fontawesome-svg-core' - version: 1.3.0 - engines: {node: '>=6'} - deprecated: Please upgrade to 6.1.0. https://fontawesome.com/docs/changelog/ - requiresBuild: true + update-check@1.5.4: dependencies: - '@fortawesome/fontawesome-common-types': registry.npmmirror.com/@fortawesome/fontawesome-common-types@0.3.0 - dev: false + registry-auth-token: 3.3.2 + registry-url: 3.1.0 - registry.npmmirror.com/@fortawesome/free-brands-svg-icons@6.2.1: - resolution: {integrity: sha512-L8l4MfdHPmZlJ72PvzdfwOwbwcCAL0vx48tJRnI6u1PJXh+j2f3yDoKyQgO3qjEsgD5Fr2tQV/cPP8F/k6aUig==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@fortawesome/free-brands-svg-icons/-/free-brands-svg-icons-6.2.1.tgz} - name: '@fortawesome/free-brands-svg-icons' - version: 6.2.1 - engines: {node: '>=6'} - requiresBuild: true + uri-js@4.4.1: dependencies: - '@fortawesome/fontawesome-common-types': registry.npmmirror.com/@fortawesome/fontawesome-common-types@6.2.1 - dev: false + punycode: 2.3.1 - registry.npmmirror.com/@fortawesome/free-regular-svg-icons@6.2.1: - resolution: {integrity: sha512-wiqcNDNom75x+pe88FclpKz7aOSqS2lOivZeicMV5KRwOAeypxEYWAK/0v+7r+LrEY30+qzh8r2XDaEHvoLsMA==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-6.2.1.tgz} - name: '@fortawesome/free-regular-svg-icons' - version: 6.2.1 - engines: {node: '>=6'} - requiresBuild: true + url-join@4.0.1: {} + + url-regex@5.0.0: dependencies: - '@fortawesome/fontawesome-common-types': registry.npmmirror.com/@fortawesome/fontawesome-common-types@6.2.1 - dev: false + ip-regex: 4.3.0 + tlds: 1.255.0 - registry.npmmirror.com/@fortawesome/free-solid-svg-icons@6.2.1: - resolution: {integrity: sha512-oKuqrP5jbfEPJWTij4sM+/RvgX+RMFwx3QZCZcK9PrBDgxC35zuc7AOFsyMjMd/PIFPeB2JxyqDr5zs/DZFPPw==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.2.1.tgz} - name: '@fortawesome/free-solid-svg-icons' - version: 6.2.1 - engines: {node: '>=6'} - requiresBuild: true + util-deprecate@1.0.2: {} + + utils-extend@1.0.8: {} + + uuid@10.0.0: {} + + v8-to-istanbul@9.3.0: dependencies: - '@fortawesome/fontawesome-common-types': registry.npmmirror.com/@fortawesome/fontawesome-common-types@6.2.1 - dev: false + '@jridgewell/trace-mapping': 0.3.25 + '@types/istanbul-lib-coverage': 2.0.6 + convert-source-map: 2.0.0 - registry.npmmirror.com/@fortawesome/vue-fontawesome@3.0.2(@fortawesome/fontawesome-svg-core@1.3.0)(vue@3.2.45): - resolution: {integrity: sha512-xHVtVY8ASUeEvgcA/7vULUesENhD+pi/EirRHdMBqooHlXBqK+yrV6d8tUye1m5UKQKVgYAHMhUBfOnoiwvc8Q==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@fortawesome/vue-fontawesome/-/vue-fontawesome-3.0.2.tgz} - id: registry.npmmirror.com/@fortawesome/vue-fontawesome/3.0.2 - name: '@fortawesome/vue-fontawesome' - version: 3.0.2 - peerDependencies: - '@fortawesome/fontawesome-svg-core': ~1 || ~6 - vue: '>= 3.0.0 < 4' + vanilla-jsoneditor@1.0.8(@lezer/common@1.2.3): dependencies: - '@fortawesome/fontawesome-svg-core': registry.npmmirror.com/@fortawesome/fontawesome-svg-core@1.3.0 - vue: registry.npmmirror.com/vue@3.2.45 - dev: false + '@codemirror/autocomplete': 6.18.1(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)(@lezer/common@1.2.3) + '@codemirror/commands': 6.7.0 + '@codemirror/lang-json': 6.0.1 + '@codemirror/language': 6.10.3 + '@codemirror/lint': 6.8.2 + '@codemirror/search': 6.5.6 + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.34.1 + '@fortawesome/free-regular-svg-icons': 6.6.0 + '@fortawesome/free-solid-svg-icons': 6.6.0 + '@jsonquerylang/jsonquery': 3.1.1 + '@lezer/highlight': 1.2.1 + '@replit/codemirror-indentation-markers': 6.5.3(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1) + ajv: 8.17.1 + codemirror-wrapped-line-indent: 1.0.8(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1) + diff-sequences: 29.6.3 + immutable-json-patch: 6.0.1 + jmespath: 0.16.0 + json-source-map: 0.6.1 + jsonpath-plus: 10.0.1 + jsonrepair: 3.8.1 + lodash-es: 4.17.21 + memoize-one: 6.0.0 + natural-compare-lite: 1.4.0 + sass: 1.80.4 + svelte: 4.2.19 + vanilla-picker: 2.12.3 + transitivePeerDependencies: + - '@lezer/common' - registry.npmmirror.com/@nodelib/fs.scandir@2.1.5: - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz} - name: '@nodelib/fs.scandir' - version: 2.1.5 - engines: {node: '>= 8'} + vanilla-picker@2.12.3: dependencies: - '@nodelib/fs.stat': registry.npmmirror.com/@nodelib/fs.stat@2.0.5 - run-parallel: registry.npmmirror.com/run-parallel@1.2.0 - dev: true + '@sphinxxxx/color-conversion': 2.2.2 - registry.npmmirror.com/@nodelib/fs.stat@2.0.5: - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz} - name: '@nodelib/fs.stat' - version: 2.0.5 - engines: {node: '>= 8'} - dev: true + vary@1.1.2: {} - registry.npmmirror.com/@nodelib/fs.walk@1.2.8: - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz} - name: '@nodelib/fs.walk' - version: 1.2.8 - engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.scandir': registry.npmmirror.com/@nodelib/fs.scandir@2.1.5 - fastq: registry.npmmirror.com/fastq@1.14.0 - dev: true - - registry.npmmirror.com/@polka/url@0.5.0: - resolution: {integrity: sha512-oZLYFEAzUKyi3SKnXvj32ZCEGH6RDnao7COuCVhDydMS9NrCSVXhM79VaKyP5+Zc33m0QXEd2DN3UkU7OsHcfw==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@polka/url/-/url-0.5.0.tgz} - name: '@polka/url' - version: 0.5.0 - dev: false - - registry.npmmirror.com/@polka/url@1.0.0-next.21: - resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@polka/url/-/url-1.0.0-next.21.tgz} - name: '@polka/url' - version: 1.0.0-next.21 - dev: false - - registry.npmmirror.com/@popperjs/core@2.11.6: - resolution: {integrity: sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@popperjs/core/-/core-2.11.6.tgz} - name: '@popperjs/core' - version: 2.11.6 - dev: false - - registry.npmmirror.com/@types/node@18.11.10: - resolution: {integrity: sha512-juG3RWMBOqcOuXC643OAdSA525V44cVgGV6dUDuiFtss+8Fk5x1hI93Rsld43VeJVIeqlP9I7Fn9/qaVqoEAuQ==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@types/node/-/node-18.11.10.tgz} - name: '@types/node' - version: 18.11.10 - dev: true - - registry.npmmirror.com/@vitejs/plugin-vue@3.2.0(vite@3.2.4)(vue@3.2.45): - resolution: {integrity: sha512-E0tnaL4fr+qkdCNxJ+Xd0yM31UwMkQje76fsDVBBUCoGOUPexu2VDUYHL8P4CwV+zMvWw6nlRw19OnRKmYAJpw==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-3.2.0.tgz} - id: registry.npmmirror.com/@vitejs/plugin-vue/3.2.0 - name: '@vitejs/plugin-vue' - version: 3.2.0 - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - vite: ^3.0.0 - vue: ^3.2.25 + vite-aliases@0.11.7(vite@5.4.10(@types/node@20.17.0)(sass@1.80.1)): dependencies: - vite: registry.npmmirror.com/vite@3.2.4(@types/node@18.11.10) - vue: registry.npmmirror.com/vue@3.2.45 - dev: true - - registry.npmmirror.com/@volar/language-core@1.0.11: - resolution: {integrity: sha512-YwUYKxIyDc+Fq3kQ6BGGfkrKCG5JzE2Yr6vMxrxEXW2rg/gsq3JgMk/4sI8ybRsaTirhCB4V8+AIVYsvcRxgig==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@volar/language-core/-/language-core-1.0.11.tgz} - name: '@volar/language-core' - version: 1.0.11 - dependencies: - '@volar/source-map': registry.npmmirror.com/@volar/source-map@1.0.11 - '@vue/reactivity': registry.npmmirror.com/@vue/reactivity@3.2.45 - muggle-string: registry.npmmirror.com/muggle-string@0.1.0 - dev: true - - registry.npmmirror.com/@volar/source-map@1.0.11: - resolution: {integrity: sha512-tkuV9MD+OuiZfHA0qZXrPdW6F7TvnpnuTan6Qe7UGUs9+sflezlMJdjaYdGgQObfP+06pcT1E3xdkOoi08ZyyQ==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@volar/source-map/-/source-map-1.0.11.tgz} - name: '@volar/source-map' - version: 1.0.11 - dependencies: - muggle-string: registry.npmmirror.com/muggle-string@0.1.0 - dev: true - - registry.npmmirror.com/@volar/typescript@1.0.11: - resolution: {integrity: sha512-mq7wDDAs0Eb43jev2FxbowuiwWqvL3kb+tar1we8VQbdabpyQ5dmbWPwo/IglevMmW3SKo1Et+6rqAeZpXNnPQ==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@volar/typescript/-/typescript-1.0.11.tgz} - name: '@volar/typescript' - version: 1.0.11 - dependencies: - '@volar/language-core': registry.npmmirror.com/@volar/language-core@1.0.11 - dev: true - - registry.npmmirror.com/@volar/vue-language-core@1.0.11: - resolution: {integrity: sha512-A3ODs0/ua7BcpSSnE7KtO8bzWsYsbOJRyW2Q/2uktxlfHj8srln3JdgK/mNlIgfnWtACbE5K+EfMJOgJKv864A==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@volar/vue-language-core/-/vue-language-core-1.0.11.tgz} - name: '@volar/vue-language-core' - version: 1.0.11 - dependencies: - '@volar/language-core': registry.npmmirror.com/@volar/language-core@1.0.11 - '@volar/source-map': registry.npmmirror.com/@volar/source-map@1.0.11 - '@vue/compiler-dom': registry.npmmirror.com/@vue/compiler-dom@3.2.45 - '@vue/compiler-sfc': registry.npmmirror.com/@vue/compiler-sfc@3.2.45 - '@vue/reactivity': registry.npmmirror.com/@vue/reactivity@3.2.45 - '@vue/shared': registry.npmmirror.com/@vue/shared@3.2.45 - minimatch: registry.npmmirror.com/minimatch@5.1.1 - vue-template-compiler: registry.npmmirror.com/vue-template-compiler@2.7.14 - dev: true - - registry.npmmirror.com/@volar/vue-typescript@1.0.11: - resolution: {integrity: sha512-jlnFPvBcTyPiAbGlgjhKK7fp3Q+Z7Z5eU1NTbTSS0lQC8Gog3sh2UxLAFG5Voe1gHIxasoOEPXzMR0CWF4bKbA==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@volar/vue-typescript/-/vue-typescript-1.0.11.tgz} - name: '@volar/vue-typescript' - version: 1.0.11 - dependencies: - '@volar/typescript': registry.npmmirror.com/@volar/typescript@1.0.11 - '@volar/vue-language-core': registry.npmmirror.com/@volar/vue-language-core@1.0.11 - dev: true - - registry.npmmirror.com/@vue/compiler-core@3.2.45: - resolution: {integrity: sha512-rcMj7H+PYe5wBV3iYeUgbCglC+pbpN8hBLTJvRiK2eKQiWqu+fG9F+8sW99JdL4LQi7Re178UOxn09puSXvn4A==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.2.45.tgz} - name: '@vue/compiler-core' - version: 3.2.45 - dependencies: - '@babel/parser': registry.npmmirror.com/@babel/parser@7.20.5 - '@vue/shared': registry.npmmirror.com/@vue/shared@3.2.45 - estree-walker: registry.npmmirror.com/estree-walker@2.0.2 - source-map: registry.npmmirror.com/source-map@0.6.1 - - registry.npmmirror.com/@vue/compiler-dom@3.2.45: - resolution: {integrity: sha512-tyYeUEuKqqZO137WrZkpwfPCdiiIeXYCcJ8L4gWz9vqaxzIQRccTSwSWZ/Axx5YR2z+LvpUbmPNXxuBU45lyRw==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.45.tgz} - name: '@vue/compiler-dom' - version: 3.2.45 - dependencies: - '@vue/compiler-core': registry.npmmirror.com/@vue/compiler-core@3.2.45 - '@vue/shared': registry.npmmirror.com/@vue/shared@3.2.45 - - registry.npmmirror.com/@vue/compiler-sfc@3.2.45: - resolution: {integrity: sha512-1jXDuWah1ggsnSAOGsec8cFjT/K6TMZ0sPL3o3d84Ft2AYZi2jWJgRMjw4iaK0rBfA89L5gw427H4n1RZQBu6Q==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.2.45.tgz} - name: '@vue/compiler-sfc' - version: 3.2.45 - dependencies: - '@babel/parser': registry.npmmirror.com/@babel/parser@7.20.5 - '@vue/compiler-core': registry.npmmirror.com/@vue/compiler-core@3.2.45 - '@vue/compiler-dom': registry.npmmirror.com/@vue/compiler-dom@3.2.45 - '@vue/compiler-ssr': registry.npmmirror.com/@vue/compiler-ssr@3.2.45 - '@vue/reactivity-transform': registry.npmmirror.com/@vue/reactivity-transform@3.2.45 - '@vue/shared': registry.npmmirror.com/@vue/shared@3.2.45 - estree-walker: registry.npmmirror.com/estree-walker@2.0.2 - magic-string: registry.npmmirror.com/magic-string@0.25.9 - postcss: registry.npmmirror.com/postcss@8.4.19 - source-map: registry.npmmirror.com/source-map@0.6.1 - - registry.npmmirror.com/@vue/compiler-ssr@3.2.45: - resolution: {integrity: sha512-6BRaggEGqhWht3lt24CrIbQSRD5O07MTmd+LjAn5fJj568+R9eUD2F7wMQJjX859seSlrYog7sUtrZSd7feqrQ==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.2.45.tgz} - name: '@vue/compiler-ssr' - version: 3.2.45 - dependencies: - '@vue/compiler-dom': registry.npmmirror.com/@vue/compiler-dom@3.2.45 - '@vue/shared': registry.npmmirror.com/@vue/shared@3.2.45 - - registry.npmmirror.com/@vue/devtools-api@6.4.5: - resolution: {integrity: sha512-JD5fcdIuFxU4fQyXUu3w2KpAJHzTVdN+p4iOX2lMWSHMOoQdMAcpFLZzm9Z/2nmsoZ1a96QEhZ26e50xLBsgOQ==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.4.5.tgz} - name: '@vue/devtools-api' - version: 6.4.5 - dev: false - - registry.npmmirror.com/@vue/reactivity-transform@3.2.45: - resolution: {integrity: sha512-BHVmzYAvM7vcU5WmuYqXpwaBHjsS8T63jlKGWVtHxAHIoMIlmaMyurUSEs1Zcg46M4AYT5MtB1U274/2aNzjJQ==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.2.45.tgz} - name: '@vue/reactivity-transform' - version: 3.2.45 - dependencies: - '@babel/parser': registry.npmmirror.com/@babel/parser@7.20.5 - '@vue/compiler-core': registry.npmmirror.com/@vue/compiler-core@3.2.45 - '@vue/shared': registry.npmmirror.com/@vue/shared@3.2.45 - estree-walker: registry.npmmirror.com/estree-walker@2.0.2 - magic-string: registry.npmmirror.com/magic-string@0.25.9 - - registry.npmmirror.com/@vue/reactivity@3.2.45: - resolution: {integrity: sha512-PRvhCcQcyEVohW0P8iQ7HDcIOXRjZfAsOds3N99X/Dzewy8TVhTCT4uXpAHfoKjVTJRA0O0K+6QNkDIZAxNi3A==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.45.tgz} - name: '@vue/reactivity' - version: 3.2.45 - dependencies: - '@vue/shared': registry.npmmirror.com/@vue/shared@3.2.45 - - registry.npmmirror.com/@vue/runtime-core@3.2.45: - resolution: {integrity: sha512-gzJiTA3f74cgARptqzYswmoQx0fIA+gGYBfokYVhF8YSXjWTUA2SngRzZRku2HbGbjzB6LBYSbKGIaK8IW+s0A==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.2.45.tgz} - name: '@vue/runtime-core' - version: 3.2.45 - dependencies: - '@vue/reactivity': registry.npmmirror.com/@vue/reactivity@3.2.45 - '@vue/shared': registry.npmmirror.com/@vue/shared@3.2.45 - - registry.npmmirror.com/@vue/runtime-dom@3.2.45: - resolution: {integrity: sha512-cy88YpfP5Ue2bDBbj75Cb4bIEZUMM/mAkDMfqDTpUYVgTf/kuQ2VQ8LebuZ8k6EudgH8pYhsGWHlY0lcxlvTwA==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.2.45.tgz} - name: '@vue/runtime-dom' - version: 3.2.45 - dependencies: - '@vue/runtime-core': registry.npmmirror.com/@vue/runtime-core@3.2.45 - '@vue/shared': registry.npmmirror.com/@vue/shared@3.2.45 - csstype: registry.npmmirror.com/csstype@2.6.21 - - registry.npmmirror.com/@vue/server-renderer@3.2.45(vue@3.2.45): - resolution: {integrity: sha512-ebiMq7q24WBU1D6uhPK//2OTR1iRIyxjF5iVq/1a5I1SDMDyDu4Ts6fJaMnjrvD3MqnaiFkKQj+LKAgz5WIK3g==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.2.45.tgz} - id: registry.npmmirror.com/@vue/server-renderer/3.2.45 - name: '@vue/server-renderer' - version: 3.2.45 - peerDependencies: - vue: 3.2.45 - dependencies: - '@vue/compiler-ssr': registry.npmmirror.com/@vue/compiler-ssr@3.2.45 - '@vue/shared': registry.npmmirror.com/@vue/shared@3.2.45 - vue: registry.npmmirror.com/vue@3.2.45 - - registry.npmmirror.com/@vue/shared@3.2.45: - resolution: {integrity: sha512-Ewzq5Yhimg7pSztDV+RH1UDKBzmtqieXQlpTVm2AwraoRL/Rks96mvd8Vgi7Lj+h+TH8dv7mXD3FRZR3TUvbSg==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@vue/shared/-/shared-3.2.45.tgz} - name: '@vue/shared' - version: 3.2.45 - - registry.npmmirror.com/@vueuse/core@7.7.1(vue@3.2.45): - resolution: {integrity: sha512-PRRgbATMpoeUmkCEBtUeJgOwtew8s+4UsEd+Pm7MhkjL2ihCNrSqxNVtM6NFE4uP2sWnkGcZpCjPuNSxowJ1Ow==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@vueuse/core/-/core-7.7.1.tgz} - id: registry.npmmirror.com/@vueuse/core/7.7.1 - name: '@vueuse/core' - version: 7.7.1 - peerDependencies: - '@vue/composition-api': ^1.1.0 - vue: ^2.6.0 || ^3.2.0 - peerDependenciesMeta: - '@vue/composition-api': - optional: true - vue: - optional: true + chokidar: 3.6.0 + comment-json: 4.2.5 + consola: 3.2.3 + fast-glob: 3.3.2 + local-pkg: 0.5.0 + vite: 5.4.10(@types/node@20.17.0)(sass@1.80.1) + + vite-plugin-dynamic-import@1.6.0: dependencies: - '@vueuse/shared': registry.npmmirror.com/@vueuse/shared@7.7.1(vue@3.2.45) - vue: registry.npmmirror.com/vue@3.2.45 - vue-demi: registry.npmmirror.com/vue-demi@0.13.11(vue@3.2.45) - dev: false + acorn: 8.13.0 + es-module-lexer: 1.5.4 + fast-glob: 3.3.2 + magic-string: 0.30.12 - registry.npmmirror.com/@vueuse/shared@7.7.1(vue@3.2.45): - resolution: {integrity: sha512-rN2qd22AUl7VdBxihagWyhUNHCyVk9IpvBTTfHoLH9G7rGE552X1f+zeCfehuno0zXif13jPw+icW/wn2a0rnQ==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@vueuse/shared/-/shared-7.7.1.tgz} - id: registry.npmmirror.com/@vueuse/shared/7.7.1 - name: '@vueuse/shared' - version: 7.7.1 - peerDependencies: - '@vue/composition-api': ^1.1.0 - vue: ^2.6.0 || ^3.2.0 - peerDependenciesMeta: - '@vue/composition-api': - optional: true - vue: - optional: true + vite-plugin-externalize-deps@0.8.0(vite@5.4.10(@types/node@20.17.0)(sass@1.80.1)): dependencies: - vue: registry.npmmirror.com/vue@3.2.45 - vue-demi: registry.npmmirror.com/vue-demi@0.13.11(vue@3.2.45) - dev: false + vite: 5.4.10(@types/node@20.17.0)(sass@1.80.1) - registry.npmmirror.com/accepts@1.3.8: - resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/accepts/-/accepts-1.3.8.tgz} - name: accepts - version: 1.3.8 - engines: {node: '>= 0.6'} + vite-svg-loader@5.1.0(vue@3.5.12(typescript@5.6.3)): dependencies: - mime-types: registry.npmmirror.com/mime-types@2.1.35 - negotiator: registry.npmmirror.com/negotiator@0.6.3 - dev: false + svgo: 3.3.2 + vue: 3.5.12(typescript@5.6.3) - registry.npmmirror.com/anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz} - name: anymatch - version: 3.1.3 - engines: {node: '>= 8'} + vite@5.4.10(@types/node@20.17.0)(sass@1.80.1): dependencies: - normalize-path: registry.npmmirror.com/normalize-path@3.0.0 - picomatch: registry.npmmirror.com/picomatch@2.3.1 - dev: true - - registry.npmmirror.com/argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/argparse/-/argparse-1.0.10.tgz} - name: argparse - version: 1.0.10 - dependencies: - sprintf-js: registry.npmmirror.com/sprintf-js@1.0.3 - dev: false - - registry.npmmirror.com/array-timsort@1.0.3: - resolution: {integrity: sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/array-timsort/-/array-timsort-1.0.3.tgz} - name: array-timsort - version: 1.0.3 - dev: true - - registry.npmmirror.com/async-validator@4.2.5: - resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz} - name: async-validator - version: 4.2.5 - dev: false - - registry.npmmirror.com/atom-material-icons@3.0.0: - resolution: {integrity: sha512-qtMR5KxQh82iLIFOdrQZViq21GTNT+/mccrVAg41hIlrhpwHAEjCeGj91Iyas9GL28ld0D0hagHv6ipGWlLZHw==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/atom-material-icons/-/atom-material-icons-3.0.0.tgz} - name: atom-material-icons - version: 3.0.0 - dependencies: - compression: registry.npmmirror.com/compression@1.7.4 - js-yaml: registry.npmmirror.com/js-yaml@3.14.1 - polka: registry.npmmirror.com/polka@0.5.2 - select-dom: registry.npmmirror.com/select-dom@6.0.2 - sirv: registry.npmmirror.com/sirv@1.0.19 - sirv-cli: registry.npmmirror.com/sirv-cli@1.0.14 + esbuild: 0.21.5 + postcss: 8.4.47 + rollup: 4.24.0 optionalDependencies: - lodash.template: 4.5.0 - minimist: 1.2.7 - transitivePeerDependencies: - - supports-color - dev: false - - registry.npmmirror.com/balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz} - name: balanced-match - version: 1.0.2 - dev: true - - registry.npmmirror.com/binary-extensions@2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz} - name: binary-extensions - version: 2.2.0 - engines: {node: '>=8'} - dev: true + '@types/node': 20.17.0 + fsevents: 2.3.3 + sass: 1.80.1 - registry.npmmirror.com/brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz} - name: brace-expansion - version: 2.0.1 + vite@5.4.10(@types/node@20.17.0)(sass@1.80.4): dependencies: - balanced-match: registry.npmmirror.com/balanced-match@1.0.2 - dev: true + esbuild: 0.21.5 + postcss: 8.4.47 + rollup: 4.24.0 + optionalDependencies: + '@types/node': 20.17.0 + fsevents: 2.3.3 + sass: 1.80.4 - registry.npmmirror.com/braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz} - name: braces - version: 3.0.2 - engines: {node: '>=8'} + volar-service-css@0.0.62(@volar/language-service@2.4.6): dependencies: - fill-range: registry.npmmirror.com/fill-range@7.0.1 - dev: true - - registry.npmmirror.com/bytes@3.0.0: - resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/bytes/-/bytes-3.0.0.tgz} - name: bytes - version: 3.0.0 - engines: {node: '>= 0.8'} - dev: false + vscode-css-languageservice: 6.3.1 + vscode-languageserver-textdocument: 1.0.12 + vscode-uri: 3.0.8 + optionalDependencies: + '@volar/language-service': 2.4.6 - registry.npmmirror.com/chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz} - name: chokidar - version: 3.5.3 - engines: {node: '>= 8.10.0'} + volar-service-emmet@0.0.62(@volar/language-service@2.4.6): dependencies: - anymatch: registry.npmmirror.com/anymatch@3.1.3 - braces: registry.npmmirror.com/braces@3.0.2 - glob-parent: registry.npmmirror.com/glob-parent@5.1.2 - is-binary-path: registry.npmmirror.com/is-binary-path@2.1.0 - is-glob: registry.npmmirror.com/is-glob@4.0.3 - normalize-path: registry.npmmirror.com/normalize-path@3.0.0 - readdirp: registry.npmmirror.com/readdirp@3.6.0 + '@emmetio/css-parser': 0.4.0 + '@emmetio/html-matcher': 1.3.0 + '@vscode/emmet-helper': 2.9.3 + vscode-uri: 3.0.8 optionalDependencies: - fsevents: 2.3.2 - dev: true - - registry.npmmirror.com/codemirror@5.65.10: - resolution: {integrity: sha512-IXAG5wlhbgcTJ6rZZcmi4+sjWIbJqIGfeg3tNa3yX84Jb3T4huS5qzQAo/cUisc1l3bI47WZodpyf7cYcocDKg==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/codemirror/-/codemirror-5.65.10.tgz} - name: codemirror - version: 5.65.10 - dev: false - - registry.npmmirror.com/comment-json@4.2.3: - resolution: {integrity: sha512-SsxdiOf064DWoZLH799Ata6u7iV658A11PlWtZATDlXPpKGJnbJZ5Z24ybixAi+LUUqJ/GKowAejtC5GFUG7Tw==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/comment-json/-/comment-json-4.2.3.tgz} - name: comment-json - version: 4.2.3 - engines: {node: '>= 6'} - dependencies: - array-timsort: registry.npmmirror.com/array-timsort@1.0.3 - core-util-is: registry.npmmirror.com/core-util-is@1.0.3 - esprima: registry.npmmirror.com/esprima@4.0.1 - has-own-prop: registry.npmmirror.com/has-own-prop@2.0.0 - repeat-string: registry.npmmirror.com/repeat-string@1.6.1 - dev: true - - registry.npmmirror.com/compressible@2.0.18: - resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/compressible/-/compressible-2.0.18.tgz} - name: compressible - version: 2.0.18 - engines: {node: '>= 0.6'} - dependencies: - mime-db: registry.npmmirror.com/mime-db@1.52.0 - dev: false + '@volar/language-service': 2.4.6 - registry.npmmirror.com/compression@1.7.4: - resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/compression/-/compression-1.7.4.tgz} - name: compression - version: 1.7.4 - engines: {node: '>= 0.8.0'} + volar-service-html@0.0.62(@volar/language-service@2.4.6): dependencies: - accepts: registry.npmmirror.com/accepts@1.3.8 - bytes: registry.npmmirror.com/bytes@3.0.0 - compressible: registry.npmmirror.com/compressible@2.0.18 - debug: registry.npmmirror.com/debug@2.6.9 - on-headers: registry.npmmirror.com/on-headers@1.0.2 - safe-buffer: registry.npmmirror.com/safe-buffer@5.1.2 - vary: registry.npmmirror.com/vary@1.1.2 - transitivePeerDependencies: - - supports-color - dev: false - - registry.npmmirror.com/consola@2.15.3: - resolution: {integrity: sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/consola/-/consola-2.15.3.tgz} - name: consola - version: 2.15.3 - dev: true - - registry.npmmirror.com/console-clear@1.1.1: - resolution: {integrity: sha512-pMD+MVR538ipqkG5JXeOEbKWS5um1H4LUUccUQG68qpeqBYbzYy79Gh55jkd2TtPdRfUaLWdv6LPP//5Zt0aPQ==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/console-clear/-/console-clear-1.1.1.tgz} - name: console-clear - version: 1.1.1 - engines: {node: '>=4'} - dev: false - - registry.npmmirror.com/core-util-is@1.0.3: - resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz} - name: core-util-is - version: 1.0.3 - dev: true - - registry.npmmirror.com/csstype@2.6.21: - resolution: {integrity: sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/csstype/-/csstype-2.6.21.tgz} - name: csstype - version: 2.6.21 - - registry.npmmirror.com/dayjs@1.11.6: - resolution: {integrity: sha512-zZbY5giJAinCG+7AGaw0wIhNZ6J8AhWuSXKvuc1KAyMiRsvGQWqh4L+MomvhdAYjN+lqvVCMq1I41e3YHvXkyQ==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/dayjs/-/dayjs-1.11.6.tgz} - name: dayjs - version: 1.11.6 - dev: false - - registry.npmmirror.com/de-indent@1.0.2: - resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/de-indent/-/de-indent-1.0.2.tgz} - name: de-indent - version: 1.0.2 - dev: true - - registry.npmmirror.com/debug@2.6.9: - resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz} - name: debug - version: 2.6.9 - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: registry.npmmirror.com/ms@2.0.0 - dev: false + vscode-html-languageservice: 5.3.1 + vscode-languageserver-textdocument: 1.0.12 + vscode-uri: 3.0.8 + optionalDependencies: + '@volar/language-service': 2.4.6 - registry.npmmirror.com/echarts@5.4.0: - resolution: {integrity: sha512-uPsO9VRUIKAdFOoH3B0aNg7NRVdN7aM39/OjovjO9MwmWsAkfGyeXJhK+dbRi51iDrQWliXV60/XwLA7kg3z0w==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/echarts/-/echarts-5.4.0.tgz} - name: echarts - version: 5.4.0 + volar-service-json@0.0.62(@volar/language-service@2.4.6): dependencies: - tslib: registry.npmmirror.com/tslib@2.3.0 - zrender: registry.npmmirror.com/zrender@5.4.0 - dev: false + vscode-json-languageservice: 5.4.1 + vscode-uri: 3.0.8 + optionalDependencies: + '@volar/language-service': 2.4.6 - registry.npmmirror.com/element-plus@1.3.0-beta.10(vue@3.2.45): - resolution: {integrity: sha512-uPcre5liDfYvGbfaBDN2K7K5x6egBFdDQz0sv2cupcqzepUQoTMpq+mdTnHXzHChHhVwcLGp95kLYLL9yMkT8g==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/element-plus/-/element-plus-1.3.0-beta.10.tgz} - id: registry.npmmirror.com/element-plus/1.3.0-beta.10 - name: element-plus - version: 1.3.0-beta.10 - peerDependencies: - vue: ^3.2.0 + volar-service-pug-beautify@0.0.62(@volar/language-service@2.4.6): dependencies: - '@ctrl/tinycolor': registry.npmmirror.com/@ctrl/tinycolor@3.4.1 - '@element-plus/icons-vue': registry.npmmirror.com/@element-plus/icons-vue@0.2.7(vue@3.2.45) - '@popperjs/core': registry.npmmirror.com/@popperjs/core@2.11.6 - '@vueuse/core': registry.npmmirror.com/@vueuse/core@7.7.1(vue@3.2.45) - async-validator: registry.npmmirror.com/async-validator@4.2.5 - dayjs: registry.npmmirror.com/dayjs@1.11.6 - lodash: registry.npmmirror.com/lodash@4.17.21 - memoize-one: registry.npmmirror.com/memoize-one@6.0.0 - normalize-wheel-es: registry.npmmirror.com/normalize-wheel-es@1.2.0 - vue: registry.npmmirror.com/vue@3.2.45 - transitivePeerDependencies: - - '@vue/composition-api' - dev: false - - registry.npmmirror.com/esbuild@0.15.16: - resolution: {integrity: sha512-o6iS9zxdHrrojjlj6pNGC2NAg86ECZqIETswTM5KmJitq+R1YmahhWtMumeQp9lHqJaROGnsBi2RLawGnfo5ZQ==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/esbuild/-/esbuild-0.15.16.tgz} - name: esbuild - version: 0.15.16 - engines: {node: '>=12'} - hasBin: true - requiresBuild: true + '@johnsoncodehk/pug-beautify': 0.2.2 optionalDependencies: - '@esbuild/android-arm': 0.15.16 - '@esbuild/linux-loong64': 0.15.16 - esbuild-android-64: 0.15.16 - esbuild-android-arm64: 0.15.16 - esbuild-darwin-64: 0.15.16 - esbuild-darwin-arm64: 0.15.16 - esbuild-freebsd-64: 0.15.16 - esbuild-freebsd-arm64: 0.15.16 - esbuild-linux-32: 0.15.16 - esbuild-linux-64: 0.15.16 - esbuild-linux-arm: 0.15.16 - esbuild-linux-arm64: 0.15.16 - esbuild-linux-mips64le: 0.15.16 - esbuild-linux-ppc64le: 0.15.16 - esbuild-linux-riscv64: 0.15.16 - esbuild-linux-s390x: 0.15.16 - esbuild-netbsd-64: 0.15.16 - esbuild-openbsd-64: 0.15.16 - esbuild-sunos-64: 0.15.16 - esbuild-windows-32: 0.15.16 - esbuild-windows-64: 0.15.16 - esbuild-windows-arm64: 0.15.16 - dev: true - - registry.npmmirror.com/esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/esprima/-/esprima-4.0.1.tgz} - name: esprima - version: 4.0.1 - engines: {node: '>=4'} - hasBin: true + '@volar/language-service': 2.4.6 - registry.npmmirror.com/estree-walker@2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz} - name: estree-walker - version: 2.0.2 - - registry.npmmirror.com/fast-glob@3.2.12: - resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/fast-glob/-/fast-glob-3.2.12.tgz} - name: fast-glob - version: 3.2.12 - engines: {node: '>=8.6.0'} - dependencies: - '@nodelib/fs.stat': registry.npmmirror.com/@nodelib/fs.stat@2.0.5 - '@nodelib/fs.walk': registry.npmmirror.com/@nodelib/fs.walk@1.2.8 - glob-parent: registry.npmmirror.com/glob-parent@5.1.2 - merge2: registry.npmmirror.com/merge2@1.4.1 - micromatch: registry.npmmirror.com/micromatch@4.0.5 - dev: true - - registry.npmmirror.com/fastq@1.14.0: - resolution: {integrity: sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/fastq/-/fastq-1.14.0.tgz} - name: fastq - version: 1.14.0 - dependencies: - reusify: registry.npmmirror.com/reusify@1.0.4 - dev: true - - registry.npmmirror.com/fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz} - name: fill-range - version: 7.0.1 - engines: {node: '>=8'} + volar-service-pug@0.0.62: dependencies: - to-regex-range: registry.npmmirror.com/to-regex-range@5.0.1 - dev: true + '@volar/language-service': 2.4.6 + muggle-string: 0.4.1 + pug-lexer: 5.0.1 + pug-parser: 6.0.0 + volar-service-html: 0.0.62(@volar/language-service@2.4.6) + vscode-html-languageservice: 5.3.1 + vscode-languageserver-textdocument: 1.0.12 - registry.npmmirror.com/function-bind@1.1.1: - resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz} - name: function-bind - version: 1.1.1 - dev: true - - registry.npmmirror.com/get-port@3.2.0: - resolution: {integrity: sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/get-port/-/get-port-3.2.0.tgz} - name: get-port - version: 3.2.0 - engines: {node: '>=4'} - dev: false - - registry.npmmirror.com/glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz} - name: glob-parent - version: 5.1.2 - engines: {node: '>= 6'} + volar-service-typescript-twoslash-queries@0.0.62(@volar/language-service@2.4.6): dependencies: - is-glob: registry.npmmirror.com/is-glob@4.0.3 - dev: true - - registry.npmmirror.com/has-own-prop@2.0.0: - resolution: {integrity: sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/has-own-prop/-/has-own-prop-2.0.0.tgz} - name: has-own-prop - version: 2.0.0 - engines: {node: '>=8'} - dev: true + vscode-uri: 3.0.8 + optionalDependencies: + '@volar/language-service': 2.4.6 - registry.npmmirror.com/has@1.0.3: - resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/has/-/has-1.0.3.tgz} - name: has - version: 1.0.3 - engines: {node: '>= 0.4.0'} + volar-service-typescript@0.0.62(@volar/language-service@2.4.6): dependencies: - function-bind: registry.npmmirror.com/function-bind@1.1.1 - dev: true + path-browserify: 1.0.1 + semver: 7.6.3 + typescript-auto-import-cache: 0.3.3 + vscode-languageserver-textdocument: 1.0.12 + vscode-nls: 5.2.0 + vscode-uri: 3.0.8 + optionalDependencies: + '@volar/language-service': 2.4.6 - registry.npmmirror.com/he@1.2.0: - resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/he/-/he-1.2.0.tgz} - name: he - version: 1.2.0 - hasBin: true - dev: true + vscode-css-languageservice@6.3.1: + dependencies: + '@vscode/l10n': 0.0.18 + vscode-languageserver-textdocument: 1.0.12 + vscode-languageserver-types: 3.17.5 + vscode-uri: 3.0.8 - registry.npmmirror.com/is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz} - name: is-binary-path - version: 2.1.0 - engines: {node: '>=8'} + vscode-html-languageservice@5.3.1: dependencies: - binary-extensions: registry.npmmirror.com/binary-extensions@2.2.0 - dev: true + '@vscode/l10n': 0.0.18 + vscode-languageserver-textdocument: 1.0.12 + vscode-languageserver-types: 3.17.5 + vscode-uri: 3.0.8 - registry.npmmirror.com/is-core-module@2.11.0: - resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/is-core-module/-/is-core-module-2.11.0.tgz} - name: is-core-module - version: 2.11.0 + vscode-json-languageservice@5.4.1: dependencies: - has: registry.npmmirror.com/has@1.0.3 - dev: true + '@vscode/l10n': 0.0.18 + jsonc-parser: 3.3.1 + vscode-languageserver-textdocument: 1.0.12 + vscode-languageserver-types: 3.17.5 + vscode-uri: 3.0.8 - registry.npmmirror.com/is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz} - name: is-extglob - version: 2.1.1 - engines: {node: '>=0.10.0'} - dev: true + vscode-jsonrpc@8.2.0: {} - registry.npmmirror.com/is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz} - name: is-glob - version: 4.0.3 - engines: {node: '>=0.10.0'} + vscode-languageserver-protocol@3.17.5: dependencies: - is-extglob: registry.npmmirror.com/is-extglob@2.1.1 - dev: true + vscode-jsonrpc: 8.2.0 + vscode-languageserver-types: 3.17.5 - registry.npmmirror.com/is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz} - name: is-number - version: 7.0.0 - engines: {node: '>=0.12.0'} - dev: true + vscode-languageserver-textdocument@1.0.12: {} - registry.npmmirror.com/js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/js-yaml/-/js-yaml-3.14.1.tgz} - name: js-yaml - version: 3.14.1 - hasBin: true + vscode-languageserver-types@3.17.5: {} + + vscode-languageserver@9.0.1: dependencies: - argparse: registry.npmmirror.com/argparse@1.0.10 - esprima: registry.npmmirror.com/esprima@4.0.1 - dev: false + vscode-languageserver-protocol: 3.17.5 - registry.npmmirror.com/kleur@3.0.3: - resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/kleur/-/kleur-3.0.3.tgz} - name: kleur - version: 3.0.3 - engines: {node: '>=6'} - dev: false + vscode-nls@5.2.0: {} - registry.npmmirror.com/local-access@1.1.0: - resolution: {integrity: sha512-XfegD5pyTAfb+GY6chk283Ox5z8WexG56OvM06RWLpAc/UHozO8X6xAxEkIitZOtsSMM1Yr3DkHgW5W+onLhCw==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/local-access/-/local-access-1.1.0.tgz} - name: local-access - version: 1.1.0 - engines: {node: '>=6'} - dev: false + vscode-uri@2.1.2: {} - registry.npmmirror.com/lodash._reinterpolate@3.0.0: - resolution: {integrity: sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz} - name: lodash._reinterpolate - version: 3.0.0 - dev: false - optional: true + vscode-uri@3.0.8: {} - registry.npmmirror.com/lodash.templatesettings@4.2.0: - resolution: {integrity: sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz} - name: lodash.templatesettings - version: 4.2.0 + vue-chartjs@5.3.1(chart.js@4.4.5)(vue@3.5.12(typescript@5.6.3)): dependencies: - lodash._reinterpolate: registry.npmmirror.com/lodash._reinterpolate@3.0.0 - dev: false - optional: true - - registry.npmmirror.com/lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz} - name: lodash - version: 4.17.21 - dev: false + chart.js: 4.4.5 + vue: 3.5.12(typescript@5.6.3) - registry.npmmirror.com/magic-string@0.25.9: - resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz} - name: magic-string - version: 0.25.9 + vue-clipboard3@2.0.0: dependencies: - sourcemap-codec: registry.npmmirror.com/sourcemap-codec@1.4.8 + clipboard: 2.0.11 - registry.npmmirror.com/matchit@1.1.0: - resolution: {integrity: sha512-+nGYoOlfHmxe5BW5tE0EMJppXEwdSf8uBA1GTZC7Q77kbT35+VKLYJMzVNWCHSsga1ps1tPYFtFyvxvKzWVmMA==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/matchit/-/matchit-1.1.0.tgz} - name: matchit - version: 1.1.0 - engines: {node: '>=6'} + vue-demi@0.14.10(vue@3.5.12(typescript@5.6.3)): dependencies: - '@arr/every': registry.npmmirror.com/@arr/every@1.0.1 - dev: false + vue: 3.5.12(typescript@5.6.3) - registry.npmmirror.com/memoize-one@6.0.0: - resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/memoize-one/-/memoize-one-6.0.0.tgz} - name: memoize-one - version: 6.0.0 - dev: false - - registry.npmmirror.com/merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz} - name: merge2 - version: 1.4.1 - engines: {node: '>= 8'} - dev: true - - registry.npmmirror.com/micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz} - name: micromatch - version: 4.0.5 - engines: {node: '>=8.6'} + vue-i18n@9.13.1(vue@3.5.12(typescript@5.6.3)): dependencies: - braces: registry.npmmirror.com/braces@3.0.2 - picomatch: registry.npmmirror.com/picomatch@2.3.1 - dev: true + '@intlify/core-base': 9.13.1 + '@intlify/shared': 9.13.1 + '@vue/devtools-api': 6.6.4 + vue: 3.5.12(typescript@5.6.3) - registry.npmmirror.com/mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz} - name: mime-db - version: 1.52.0 - engines: {node: '>= 0.6'} - dev: false - - registry.npmmirror.com/mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz} - name: mime-types - version: 2.1.35 - engines: {node: '>= 0.6'} + vue-router@4.4.0(vue@3.5.12(typescript@5.6.3)): dependencies: - mime-db: registry.npmmirror.com/mime-db@1.52.0 - dev: false + '@vue/devtools-api': 6.6.4 + vue: 3.5.12(typescript@5.6.3) - registry.npmmirror.com/minimatch@5.1.1: - resolution: {integrity: sha512-362NP+zlprccbEt/SkxKfRMHnNY85V74mVnpUpNyr3F35covl09Kec7/sEFLt3RA4oXmewtoaanoIf67SE5Y5g==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/minimatch/-/minimatch-5.1.1.tgz} - name: minimatch - version: 5.1.1 - engines: {node: '>=10'} + vue-tsc@2.1.6(typescript@5.6.3): dependencies: - brace-expansion: registry.npmmirror.com/brace-expansion@2.0.1 - dev: true - - registry.npmmirror.com/mri@1.2.0: - resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/mri/-/mri-1.2.0.tgz} - name: mri - version: 1.2.0 - engines: {node: '>=4'} - dev: false - - registry.npmmirror.com/mrmime@1.0.1: - resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/mrmime/-/mrmime-1.0.1.tgz} - name: mrmime - version: 1.0.1 - engines: {node: '>=10'} - dev: false - - registry.npmmirror.com/ms@2.0.0: - resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz} - name: ms - version: 2.0.0 - dev: false - - registry.npmmirror.com/muggle-string@0.1.0: - resolution: {integrity: sha512-Tr1knR3d2mKvvWthlk7202rywKbiOm4rVFLsfAaSIhJ6dt9o47W4S+JMtWhd/PW9Wrdew2/S2fSvhz3E2gkfEg==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/muggle-string/-/muggle-string-0.1.0.tgz} - name: muggle-string - version: 0.1.0 - dev: true - - registry.npmmirror.com/nanoid@3.3.4: - resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/nanoid/-/nanoid-3.3.4.tgz} - name: nanoid - version: 3.3.4 - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - - registry.npmmirror.com/negotiator@0.6.3: - resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/negotiator/-/negotiator-0.6.3.tgz} - name: negotiator - version: 0.6.3 - engines: {node: '>= 0.6'} - dev: false + '@volar/typescript': 2.4.6 + '@vue/language-core': 2.1.6(typescript@5.6.3) + semver: 7.6.3 + typescript: 5.6.3 - registry.npmmirror.com/normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz} - name: normalize-path - version: 3.0.0 - engines: {node: '>=0.10.0'} - dev: true - - registry.npmmirror.com/normalize-wheel-es@1.2.0: - resolution: {integrity: sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz} - name: normalize-wheel-es - version: 1.2.0 - dev: false - - registry.npmmirror.com/on-headers@1.0.2: - resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/on-headers/-/on-headers-1.0.2.tgz} - name: on-headers - version: 1.0.2 - engines: {node: '>= 0.8'} - dev: false - - registry.npmmirror.com/path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz} - name: path-parse - version: 1.0.7 - dev: true - - registry.npmmirror.com/picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz} - name: picocolors - version: 1.0.0 - - registry.npmmirror.com/picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz} - name: picomatch - version: 2.3.1 - engines: {node: '>=8.6'} - dev: true - - registry.npmmirror.com/polka@0.5.2: - resolution: {integrity: sha512-FVg3vDmCqP80tOrs+OeNlgXYmFppTXdjD5E7I4ET1NjvtNmQrb1/mJibybKkb/d4NA7YWAr1ojxuhpL3FHqdlw==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/polka/-/polka-0.5.2.tgz} - name: polka - version: 0.5.2 + vue@3.5.12(typescript@5.6.3): dependencies: - '@polka/url': registry.npmmirror.com/@polka/url@0.5.0 - trouter: registry.npmmirror.com/trouter@2.0.1 - dev: false + '@vue/compiler-dom': 3.5.12 + '@vue/compiler-sfc': 3.5.12 + '@vue/runtime-dom': 3.5.12 + '@vue/server-renderer': 3.5.12(vue@3.5.12(typescript@5.6.3)) + '@vue/shared': 3.5.12 + optionalDependencies: + typescript: 5.6.3 - registry.npmmirror.com/postcss@8.4.19: - resolution: {integrity: sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/postcss/-/postcss-8.4.19.tgz} - name: postcss - version: 8.4.19 - engines: {node: ^10 || ^12 || >=14} + vuex@4.1.0(vue@3.5.12(typescript@5.6.3)): dependencies: - nanoid: registry.npmmirror.com/nanoid@3.3.4 - picocolors: registry.npmmirror.com/picocolors@1.0.0 - source-map-js: registry.npmmirror.com/source-map-js@1.0.2 + '@vue/devtools-api': 6.4.5 + vue: 3.5.12(typescript@5.6.3) - registry.npmmirror.com/queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz} - name: queue-microtask - version: 1.2.3 - dev: true + w3c-keyname@2.2.8: {} - registry.npmmirror.com/readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz} - name: readdirp - version: 3.6.0 - engines: {node: '>=8.10.0'} + walker@1.0.8: dependencies: - picomatch: registry.npmmirror.com/picomatch@2.3.1 - dev: true + makeerror: 1.0.12 - registry.npmmirror.com/repeat-string@1.6.1: - resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/repeat-string/-/repeat-string-1.6.1.tgz} - name: repeat-string - version: 1.6.1 - engines: {node: '>=0.10'} - dev: true + webidl-conversions@3.0.1: + optional: true - registry.npmmirror.com/resolve@1.22.1: - resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/resolve/-/resolve-1.22.1.tgz} - name: resolve - version: 1.22.1 - hasBin: true + whatwg-url@5.0.0: dependencies: - is-core-module: registry.npmmirror.com/is-core-module@2.11.0 - path-parse: registry.npmmirror.com/path-parse@1.0.7 - supports-preserve-symlinks-flag: registry.npmmirror.com/supports-preserve-symlinks-flag@1.0.0 - dev: true - - registry.npmmirror.com/reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz} - name: reusify - version: 1.0.4 - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - dev: true - - registry.npmmirror.com/rollup@2.79.1: - resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/rollup/-/rollup-2.79.1.tgz} - name: rollup - version: 2.79.1 - engines: {node: '>=10.0.0'} - hasBin: true - optionalDependencies: - fsevents: 2.3.2 - dev: true + tr46: 0.0.3 + webidl-conversions: 3.0.1 + optional: true - registry.npmmirror.com/run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz} - name: run-parallel - version: 1.2.0 + which@2.0.2: dependencies: - queue-microtask: registry.npmmirror.com/queue-microtask@1.2.3 - dev: true + isexe: 2.0.0 - registry.npmmirror.com/sade@1.8.1: - resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/sade/-/sade-1.8.1.tgz} - name: sade - version: 1.8.1 - engines: {node: '>=6'} + wide-align@1.1.5: dependencies: - mri: registry.npmmirror.com/mri@1.2.0 - dev: false - - registry.npmmirror.com/safe-buffer@5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz} - name: safe-buffer - version: 5.1.2 - dev: false - - registry.npmmirror.com/select-dom@6.0.2: - resolution: {integrity: sha512-fnRexLCjOE1XtMiV0xGACx4GJFMs/eatOQM0LWL9lxWB8DJ/FeXO39ztqUh6dZCOdoFo/g6jGJIIqNWoMsNLPA==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/select-dom/-/select-dom-6.0.2.tgz} - name: select-dom - version: 6.0.2 - dev: false - - registry.npmmirror.com/semiver@1.1.0: - resolution: {integrity: sha512-QNI2ChmuioGC1/xjyYwyZYADILWyW6AmS1UH6gDj/SFUUUS4MBAWs/7mxnkRPc/F4iHezDP+O8t0dO8WHiEOdg==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/semiver/-/semiver-1.1.0.tgz} - name: semiver - version: 1.1.0 - engines: {node: '>=6'} - dev: false + string-width: 4.2.3 + optional: true - registry.npmmirror.com/sirv-cli@1.0.14: - resolution: {integrity: sha512-yyUTNr984ANKDloqepkYbBSqvx3buwYg2sQKPWjSU+IBia5loaoka2If8N9CMwt8AfP179cdEl7kYJ//iWJHjQ==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/sirv-cli/-/sirv-cli-1.0.14.tgz} - name: sirv-cli - version: 1.0.14 - engines: {node: '>= 10'} - hasBin: true - dependencies: - console-clear: registry.npmmirror.com/console-clear@1.1.1 - get-port: registry.npmmirror.com/get-port@3.2.0 - kleur: registry.npmmirror.com/kleur@3.0.3 - local-access: registry.npmmirror.com/local-access@1.1.0 - sade: registry.npmmirror.com/sade@1.8.1 - semiver: registry.npmmirror.com/semiver@1.1.0 - sirv: registry.npmmirror.com/sirv@1.0.19 - tinydate: registry.npmmirror.com/tinydate@1.3.0 - dev: false - - registry.npmmirror.com/sirv@1.0.19: - resolution: {integrity: sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/sirv/-/sirv-1.0.19.tgz} - name: sirv - version: 1.0.19 - engines: {node: '>= 10'} + widest-line@4.0.1: dependencies: - '@polka/url': registry.npmmirror.com/@polka/url@1.0.0-next.21 - mrmime: registry.npmmirror.com/mrmime@1.0.1 - totalist: registry.npmmirror.com/totalist@1.1.0 - dev: false - - registry.npmmirror.com/source-map-js@1.0.2: - resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz} - name: source-map-js - version: 1.0.2 - engines: {node: '>=0.10.0'} - - registry.npmmirror.com/source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz} - name: source-map - version: 0.6.1 - engines: {node: '>=0.10.0'} - - registry.npmmirror.com/sourcemap-codec@1.4.8: - resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz} - name: sourcemap-codec - version: 1.4.8 - - registry.npmmirror.com/sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/sprintf-js/-/sprintf-js-1.0.3.tgz} - name: sprintf-js - version: 1.0.3 - dev: false - - registry.npmmirror.com/supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz} - name: supports-preserve-symlinks-flag - version: 1.0.0 - engines: {node: '>= 0.4'} - dev: true + string-width: 5.1.2 - registry.npmmirror.com/tinydate@1.3.0: - resolution: {integrity: sha512-7cR8rLy2QhYHpsBDBVYnnWXm8uRTr38RoZakFSW7Bs7PzfMPNZthuMLkwqZv7MTu8lhQ91cOFYS5a7iFj2oR3w==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/tinydate/-/tinydate-1.3.0.tgz} - name: tinydate - version: 1.3.0 - engines: {node: '>=4'} - dev: false + windows-release@5.0.1: + dependencies: + execa: 5.1.1 - registry.npmmirror.com/to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz} - name: to-fast-properties - version: 2.0.0 - engines: {node: '>=4'} + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 - registry.npmmirror.com/to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz} - name: to-regex-range - version: 5.0.1 - engines: {node: '>=8.0'} + wrap-ansi@8.1.0: dependencies: - is-number: registry.npmmirror.com/is-number@7.0.0 - dev: true + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 - registry.npmmirror.com/totalist@1.1.0: - resolution: {integrity: sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/totalist/-/totalist-1.1.0.tgz} - name: totalist - version: 1.1.0 - engines: {node: '>=6'} - dev: false + wrappy@1.0.2: {} - registry.npmmirror.com/trouter@2.0.1: - resolution: {integrity: sha512-kr8SKKw94OI+xTGOkfsvwZQ8mWoikZDd2n8XZHjJVZUARZT+4/VV6cacRS6CLsH9bNm+HFIPU1Zx4CnNnb4qlQ==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/trouter/-/trouter-2.0.1.tgz} - name: trouter - version: 2.0.1 - engines: {node: '>=6'} + write-file-atomic@4.0.2: dependencies: - matchit: registry.npmmirror.com/matchit@1.1.0 - dev: false + imurmurhash: 0.1.4 + signal-exit: 3.0.7 - registry.npmmirror.com/tslib@2.3.0: - resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz} - name: tslib - version: 2.3.0 - dev: false + y18n@5.0.8: {} - registry.npmmirror.com/typescript@4.9.3: - resolution: {integrity: sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz} - name: typescript - version: 4.9.3 - engines: {node: '>=4.2.0'} - hasBin: true - dev: true + yallist@3.1.1: {} - registry.npmmirror.com/vary@1.1.2: - resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz} - name: vary - version: 1.1.2 - engines: {node: '>= 0.8'} - dev: false - - registry.npmmirror.com/vite-aliases@0.9.7(@types/node@18.11.10): - resolution: {integrity: sha512-MiqZx5NJQDn/I7gYzovop8GzlEDYCxR3i3JCCNap5OWEfBmo4b+jIfpmal22IoBREgx1TtkmwRkHJCBUhnL6jA==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/vite-aliases/-/vite-aliases-0.9.7.tgz} - id: registry.npmmirror.com/vite-aliases/0.9.7 - name: vite-aliases - version: 0.9.7 - engines: {node: '>=16.6.0', npm: '>=7.0.0'} - dependencies: - chokidar: registry.npmmirror.com/chokidar@3.5.3 - comment-json: registry.npmmirror.com/comment-json@4.2.3 - consola: registry.npmmirror.com/consola@2.15.3 - fast-glob: registry.npmmirror.com/fast-glob@3.2.12 - vite: registry.npmmirror.com/vite@3.2.4(@types/node@18.11.10) - transitivePeerDependencies: - - '@types/node' - - less - - sass - - stylus - - sugarss - - terser - dev: true - - registry.npmmirror.com/vite-plugin-dynamic-import@1.2.4: - resolution: {integrity: sha512-R6spqDhDm8VxaUNyEkybh9PM262ReO8WXJ6rjtyJ/H8Y4b+pq2uM9Xz5DMu7N7OxUGlqo9HSzT3VjhpbySXrng==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/vite-plugin-dynamic-import/-/vite-plugin-dynamic-import-1.2.4.tgz} - name: vite-plugin-dynamic-import - version: 1.2.4 - dependencies: - fast-glob: registry.npmmirror.com/fast-glob@3.2.12 - dev: true - - registry.npmmirror.com/vite@3.2.4(@types/node@18.11.10): - resolution: {integrity: sha512-Z2X6SRAffOUYTa+sLy3NQ7nlHFU100xwanq1WDwqaiFiCe+25zdxP1TfCS5ojPV2oDDcXudHIoPnI1Z/66B7Yw==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/vite/-/vite-3.2.4.tgz} - id: registry.npmmirror.com/vite/3.2.4 - name: vite - version: 3.2.4 - engines: {node: ^14.18.0 || >=16.0.0} - hasBin: true - peerDependencies: - '@types/node': '>= 14' - less: '*' - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - dependencies: - '@types/node': registry.npmmirror.com/@types/node@18.11.10 - esbuild: registry.npmmirror.com/esbuild@0.15.16 - postcss: registry.npmmirror.com/postcss@8.4.19 - resolve: registry.npmmirror.com/resolve@1.22.1 - rollup: registry.npmmirror.com/rollup@2.79.1 - optionalDependencies: - fsevents: 2.3.2 - dev: true + yallist@4.0.0: + optional: true - registry.npmmirror.com/vue-demi@0.13.11(vue@3.2.45): - resolution: {integrity: sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/vue-demi/-/vue-demi-0.13.11.tgz} - id: registry.npmmirror.com/vue-demi/0.13.11 - name: vue-demi - version: 0.13.11 - engines: {node: '>=12'} - hasBin: true - requiresBuild: true - peerDependencies: - '@vue/composition-api': ^1.0.0-rc.1 - vue: ^3.0.0-0 || ^2.6.0 - peerDependenciesMeta: - '@vue/composition-api': - optional: true - dependencies: - vue: registry.npmmirror.com/vue@3.2.45 - dev: false + yaml@2.6.0: {} - registry.npmmirror.com/vue-router@4.1.6(vue@3.2.45): - resolution: {integrity: sha512-DYWYwsG6xNPmLq/FmZn8Ip+qrhFEzA14EI12MsMgVxvHFDYvlr4NXpVF5hrRH1wVcDP8fGi5F4rxuJSl8/r+EQ==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/vue-router/-/vue-router-4.1.6.tgz} - id: registry.npmmirror.com/vue-router/4.1.6 - name: vue-router - version: 4.1.6 - peerDependencies: - vue: ^3.2.0 - dependencies: - '@vue/devtools-api': registry.npmmirror.com/@vue/devtools-api@6.4.5 - vue: registry.npmmirror.com/vue@3.2.45 - dev: false + yargs-parser@21.1.1: {} - registry.npmmirror.com/vue-template-compiler@2.7.14: - resolution: {integrity: sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/vue-template-compiler/-/vue-template-compiler-2.7.14.tgz} - name: vue-template-compiler - version: 2.7.14 + yargs@17.7.2: dependencies: - de-indent: registry.npmmirror.com/de-indent@1.0.2 - he: registry.npmmirror.com/he@1.2.0 - dev: true + cliui: 8.0.1 + escalade: 3.1.1 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 - registry.npmmirror.com/vue-tsc@1.0.11(typescript@4.9.3): - resolution: {integrity: sha512-lj+6dEroPsE4wmQOPtjCzAf8x363Km5/tuEvMEoQaoRnzs9myBM46FNvCGIIPStYUGuaqF1W1bORmP2KDQEORA==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/vue-tsc/-/vue-tsc-1.0.11.tgz} - id: registry.npmmirror.com/vue-tsc/1.0.11 - name: vue-tsc - version: 1.0.11 - hasBin: true - peerDependencies: - typescript: '*' - dependencies: - '@volar/vue-language-core': registry.npmmirror.com/@volar/vue-language-core@1.0.11 - '@volar/vue-typescript': registry.npmmirror.com/@volar/vue-typescript@1.0.11 - typescript: registry.npmmirror.com/typescript@4.9.3 - dev: true - - registry.npmmirror.com/vue@3.2.45: - resolution: {integrity: sha512-9Nx/Mg2b2xWlXykmCwiTUCWHbWIj53bnkizBxKai1g61f2Xit700A1ljowpTIM11e3uipOeiPcSqnmBg6gyiaA==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/vue/-/vue-3.2.45.tgz} - name: vue - version: 3.2.45 - dependencies: - '@vue/compiler-dom': registry.npmmirror.com/@vue/compiler-dom@3.2.45 - '@vue/compiler-sfc': registry.npmmirror.com/@vue/compiler-sfc@3.2.45 - '@vue/runtime-dom': registry.npmmirror.com/@vue/runtime-dom@3.2.45 - '@vue/server-renderer': registry.npmmirror.com/@vue/server-renderer@3.2.45(vue@3.2.45) - '@vue/shared': registry.npmmirror.com/@vue/shared@3.2.45 - - registry.npmmirror.com/zrender@5.4.0: - resolution: {integrity: sha512-rOS09Z2HSVGFs2dn/TuYk5BlCaZcVe8UDLLjj1ySYF828LATKKdxuakSZMvrDz54yiKPDYVfjdKqcX8Jky3BIA==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/zrender/-/zrender-5.4.0.tgz} - name: zrender - version: 5.4.0 - dependencies: - tslib: registry.npmmirror.com/tslib@2.3.0 - dev: false + yocto-queue@0.1.0: {} diff --git a/frontend/pnpm-workspace.yaml b/frontend/pnpm-workspace.yaml new file mode 100644 index 000000000..c53e5397b --- /dev/null +++ b/frontend/pnpm-workspace.yaml @@ -0,0 +1,3 @@ +packages: + - 'apps/*' + - 'packages/*' \ No newline at end of file diff --git a/frontend/public/favicon.ico b/frontend/public/favicon.ico deleted file mode 100644 index 3fb253bdb..000000000 Binary files a/frontend/public/favicon.ico and /dev/null differ diff --git a/frontend/public/font-awesome.min.css b/frontend/public/font-awesome.min.css deleted file mode 100644 index 540440ce8..000000000 --- a/frontend/public/font-awesome.min.css +++ /dev/null @@ -1,4 +0,0 @@ -/*! - * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.7.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-vcard:before,.fa-address-card:before{content:"\f2bb"}.fa-vcard-o:before,.fa-address-card-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto} diff --git a/frontend/public/fonts/FontAwesome.otf b/frontend/public/fonts/FontAwesome.otf deleted file mode 100644 index 401ec0f36..000000000 Binary files a/frontend/public/fonts/FontAwesome.otf and /dev/null differ diff --git a/frontend/public/fonts/fontawesome-webfont.eot b/frontend/public/fonts/fontawesome-webfont.eot deleted file mode 100644 index e9f60ca95..000000000 Binary files a/frontend/public/fonts/fontawesome-webfont.eot and /dev/null differ diff --git a/frontend/public/fonts/fontawesome-webfont.svg b/frontend/public/fonts/fontawesome-webfont.svg deleted file mode 100644 index 855c845e5..000000000 --- a/frontend/public/fonts/fontawesome-webfont.svg +++ /dev/null @@ -1,2671 +0,0 @@ - - - - -Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 - By ,,, -Copyright Dave Gandy 2016. All rights reserved. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/frontend/public/fonts/fontawesome-webfont.ttf b/frontend/public/fonts/fontawesome-webfont.ttf deleted file mode 100644 index 35acda2fa..000000000 Binary files a/frontend/public/fonts/fontawesome-webfont.ttf and /dev/null differ diff --git a/frontend/public/fonts/fontawesome-webfont.woff b/frontend/public/fonts/fontawesome-webfont.woff deleted file mode 100644 index 400014a4b..000000000 Binary files a/frontend/public/fonts/fontawesome-webfont.woff and /dev/null differ diff --git a/frontend/public/fonts/fontawesome-webfont.woff2 b/frontend/public/fonts/fontawesome-webfont.woff2 deleted file mode 100644 index 4d13fc604..000000000 Binary files a/frontend/public/fonts/fontawesome-webfont.woff2 and /dev/null differ diff --git a/frontend/public/js/login-canvas.js b/frontend/public/js/login-canvas.js deleted file mode 100644 index 73bd1d153..000000000 --- a/frontend/public/js/login-canvas.js +++ /dev/null @@ -1,258 +0,0 @@ -function initCanvas() { - let canvas, ctx, circ, nodes, mouse, SENSITIVITY, SIBLINGS_LIMIT, DENSITY, NODES_QTY, ANCHOR_LENGTH, MOUSE_RADIUS, - TURBULENCE, MOUSE_MOVING_TURBULENCE, MOUSE_ANGLE_TURBULENCE, MOUSE_MOVING_RADIUS, BASE_BRIGHTNESS, RADIUS_DEGRADE, - SAMPLE_SIZE - - let handle - - // how close next node must be to activate connection (in px) - // shorter distance == better connection (line width) - SENSITIVITY = 200 - // note that siblings limit is not 'accurate' as the node can actually have more connections than this value that's because the node accepts sibling nodes with no regard to their current connections this is acceptable because potential fix would not result in significant visual difference - // more siblings == bigger node - SIBLINGS_LIMIT = 10 - // default node margin - DENSITY = 100 - // total number of nodes used (incremented after creation) - NODES_QTY = 0 - // avoid nodes spreading - ANCHOR_LENGTH = 100 - // highlight radius - MOUSE_RADIUS = 200 - // turbulence of randomness - TURBULENCE = 3 - // turbulence of mouse moving - MOUSE_MOVING_TURBULENCE = 50 - // turbulence of mouse moving angle - MOUSE_ANGLE_TURBULENCE = 0.002 - // moving radius of mouse - MOUSE_MOVING_RADIUS = 600 - // base brightness - BASE_BRIGHTNESS = 0.12 - // radius degrade - RADIUS_DEGRADE = 0.4 - // sample size - SAMPLE_SIZE = 0.5 - - circ = 2 * Math.PI - nodes = [] - - canvas = document.querySelector('#canvas') - if (!canvas) return; - resizeWindow() - ctx = canvas.getContext('2d') - if (!ctx) { - alert('Ooops! Your browser does not support canvas :\'(') - } - - function Mouse(x, y) { - this.anchorX = x - this.anchorY = y - this.x = x - this.y = y - MOUSE_RADIUS / 2 - this.angle = 0 - } - - Mouse.prototype.computePosition = function () { - // this.x = this.anchorX + MOUSE_MOVING_RADIUS / 2 * Math.sin(this.angle) - // this.y = this.anchorY - MOUSE_MOVING_RADIUS / 2 * Math.cos(this.angle) - } - - Mouse.prototype.move = function () { - let vx = Math.random() * MOUSE_MOVING_TURBULENCE - let vy = Math.random() * MOUSE_MOVING_TURBULENCE - if (this.x + vx + MOUSE_RADIUS / 2 > window.innerWidth || this.x + vx - MOUSE_RADIUS / 2 < 0) { - vx = -vx - } - if (this.y + vy + MOUSE_RADIUS / 2 > window.innerHeight || this.y + vy - MOUSE_RADIUS / 2 < 0) { - vy = -vy - } - this.x += vx - this.y += vy - // this.angle += Math.random() * MOUSE_ANGLE_TURBULENCE * 2 * Math.PI - // this.angle -= Math.floor(this.angle / (2 * Math.PI)) * 2 * Math.PI - // this.computePosition() - } - - function Node(x, y) { - this.anchorX = x - this.anchorY = y - this.x = Math.random() * (x - (x - ANCHOR_LENGTH)) + (x - ANCHOR_LENGTH) - this.y = Math.random() * (y - (y - ANCHOR_LENGTH)) + (y - ANCHOR_LENGTH) - this.vx = Math.random() * TURBULENCE - 1 - this.vy = Math.random() * TURBULENCE - 1 - this.energy = Math.random() * 100 - this.radius = Math.random() - this.siblings = [] - this.brightness = 0 - } - - Node.prototype.drawNode = function () { - let color = 'rgba(64, 156, 255, ' + this.brightness + ')' - ctx.beginPath() - ctx.arc(this.x, this.y, 2 * this.radius + 2 * this.siblings.length / SIBLINGS_LIMIT / 1.5, 0, circ) - ctx.fillStyle = color - ctx.fill() - } - - Node.prototype.drawConnections = function () { - for (let i = 0; i < this.siblings.length; i++) { - let color = 'rgba(64, 156, 255, ' + this.brightness + ')' - ctx.beginPath() - ctx.moveTo(this.x, this.y) - ctx.lineTo(this.siblings[i].x, this.siblings[i].y) - ctx.lineWidth = 1 - calcDistance(this, this.siblings[i]) / SENSITIVITY - ctx.strokeStyle = color - ctx.stroke() - } - } - - Node.prototype.moveNode = function () { - this.energy -= 2 - if (this.energy < 1) { - this.energy = Math.random() * 100 - if (this.x - this.anchorX < -ANCHOR_LENGTH) { - this.vx = Math.random() * TURBULENCE - } else if (this.x - this.anchorX > ANCHOR_LENGTH) { - this.vx = Math.random() * -TURBULENCE - } else { - this.vx = Math.random() * 2 * TURBULENCE - TURBULENCE - } - if (this.y - this.anchorY < -ANCHOR_LENGTH) { - this.vy = Math.random() * TURBULENCE - } else if (this.y - this.anchorY > ANCHOR_LENGTH) { - this.vy = Math.random() * -TURBULENCE - } else { - this.vy = Math.random() * 2 * TURBULENCE - TURBULENCE - } - } - this.x += this.vx * this.energy / 100 - this.y += this.vy * this.energy / 100 - } - - function Handle() { - this.isStopped = false - } - - Handle.prototype.stop = function () { - this.isStopped = true - } - - function initNodes() { - ctx.clearRect(0, 0, canvas.width, canvas.height) - nodes = [] - for (let i = DENSITY; i < canvas.width; i += DENSITY) { - for (let j = DENSITY; j < canvas.height; j += DENSITY) { - nodes.push(new Node(i, j)) - NODES_QTY++ - } - } - } - - function initMouse() { - mouse = new Mouse(canvas.width / 2, canvas.height / 2) - } - - function initHandle() { - handle = new Handle() - } - - function calcDistance(node1, node2) { - return Math.sqrt(Math.pow(node1.x - node2.x, 2) + (Math.pow(node1.y - node2.y, 2))) - } - - function findSiblings() { - let node1, node2, distance - for (let i = 0; i < NODES_QTY; i++) { - node1 = nodes[i] - node1.siblings = [] - for (let j = 0; j < NODES_QTY; j++) { - node2 = nodes[j] - if (node1 !== node2) { - distance = calcDistance(node1, node2) - if (distance < SENSITIVITY) { - if (node1.siblings.length < SIBLINGS_LIMIT) { - node1.siblings.push(node2) - } else { - let node_sibling_distance = 0 - let max_distance = 0 - let s - for (let k = 0; k < SIBLINGS_LIMIT; k++) { - node_sibling_distance = calcDistance(node1, node1.siblings[k]) - if (node_sibling_distance > max_distance) { - max_distance = node_sibling_distance - s = k - } - } - if (distance < max_distance) { - node1.siblings.splice(s, 1) - node1.siblings.push(node2) - } - } - } - } - } - } - } - - function redrawScene() { - if (handle && handle.isStopped) { - return - } - resizeWindow() - ctx.clearRect(0, 0, canvas.width, canvas.height) - findSiblings() - let i, node, distance - for (i = 0; i < NODES_QTY; i++) { - node = nodes[i] - distance = calcDistance({ - x: mouse.x, - y: mouse.y - }, node) - node.brightness = (1 - Math.log(distance / MOUSE_RADIUS * RADIUS_DEGRADE)) * BASE_BRIGHTNESS - } - for (i = 0; i < NODES_QTY; i++) { - node = nodes[i] - if (node.brightness) { - node.drawNode() - node.drawConnections() - } - node.moveNode() - } - // mouse.move() - setTimeout(() => { - requestAnimationFrame(redrawScene) - }, 50) - } - - function initHandlers() { - document.addEventListener('resize', resizeWindow, {passive: true}) - // canvas.addEventListener('mousemove', mousemoveHandler, false) - } - - function resizeWindow() { - canvas.width = window.innerWidth - canvas.height = window.innerHeight - } - - function mousemoveHandler(e) { - mouse.x = e.clientX - mouse.y = e.clientY - } - - function init() { - initHandlers() - initNodes() - initMouse() - initHandle() - redrawScene() - } - - function reset() { - handle.isStopped = true - } - - init() - - window.resetCanvas = reset -} diff --git a/frontend/public/js/vue3-sfc-loader.js b/frontend/public/js/vue3-sfc-loader.js deleted file mode 100644 index aa8907670..000000000 --- a/frontend/public/js/vue3-sfc-loader.js +++ /dev/null @@ -1,2006 +0,0 @@ -/*! - * vue3-sfc-loader v0.8.4 for vue3 - * - * @description Vue3 Single File Component loader. - * @author Franck FREIBURGER - * @license MIT - * @sources https://github.com/FranckFreiburger/vue3-sfc-loader - */ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports["vue3-sfc-loader"]=t():e["vue3-sfc-loader"]=t()}(self,(function(){return(()=>{var e=[(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n={react:!0,assertNode:!0,createTypeAnnotationBasedOnTypeof:!0,createUnionTypeAnnotation:!0,createFlowUnionType:!0,createTSUnionType:!0,cloneNode:!0,clone:!0,cloneDeep:!0,cloneDeepWithoutLoc:!0,cloneWithoutLoc:!0,addComment:!0,addComments:!0,inheritInnerComments:!0,inheritLeadingComments:!0,inheritsComments:!0,inheritTrailingComments:!0,removeComments:!0,ensureBlock:!0,toBindingIdentifierName:!0,toBlock:!0,toComputedKey:!0,toExpression:!0,toIdentifier:!0,toKeyAlias:!0,toSequenceExpression:!0,toStatement:!0,valueToNode:!0,appendToMemberExpression:!0,inherits:!0,prependToMemberExpression:!0,removeProperties:!0,removePropertiesDeep:!0,removeTypeDuplicates:!0,getBindingIdentifiers:!0,getOuterBindingIdentifiers:!0,traverse:!0,traverseFast:!0,shallowEqual:!0,is:!0,isBinding:!0,isBlockScoped:!0,isImmutable:!0,isLet:!0,isNode:!0,isNodesEquivalent:!0,isPlaceholderType:!0,isReferenced:!0,isScope:!0,isSpecifierDefault:!0,isType:!0,isValidES3Identifier:!0,isValidIdentifier:!0,isVar:!0,matchesPattern:!0,validate:!0,buildMatchMemberExpression:!0};Object.defineProperty(t,"assertNode",{enumerable:!0,get:function(){return a.default}}),Object.defineProperty(t,"createTypeAnnotationBasedOnTypeof",{enumerable:!0,get:function(){return c.default}}),Object.defineProperty(t,"createUnionTypeAnnotation",{enumerable:!0,get:function(){return u.default}}),Object.defineProperty(t,"createFlowUnionType",{enumerable:!0,get:function(){return u.default}}),Object.defineProperty(t,"createTSUnionType",{enumerable:!0,get:function(){return p.default}}),Object.defineProperty(t,"cloneNode",{enumerable:!0,get:function(){return h.default}}),Object.defineProperty(t,"clone",{enumerable:!0,get:function(){return m.default}}),Object.defineProperty(t,"cloneDeep",{enumerable:!0,get:function(){return y.default}}),Object.defineProperty(t,"cloneDeepWithoutLoc",{enumerable:!0,get:function(){return g.default}}),Object.defineProperty(t,"cloneWithoutLoc",{enumerable:!0,get:function(){return b.default}}),Object.defineProperty(t,"addComment",{enumerable:!0,get:function(){return v.default}}),Object.defineProperty(t,"addComments",{enumerable:!0,get:function(){return E.default}}),Object.defineProperty(t,"inheritInnerComments",{enumerable:!0,get:function(){return x.default}}),Object.defineProperty(t,"inheritLeadingComments",{enumerable:!0,get:function(){return S.default}}),Object.defineProperty(t,"inheritsComments",{enumerable:!0,get:function(){return T.default}}),Object.defineProperty(t,"inheritTrailingComments",{enumerable:!0,get:function(){return w.default}}),Object.defineProperty(t,"removeComments",{enumerable:!0,get:function(){return P.default}}),Object.defineProperty(t,"ensureBlock",{enumerable:!0,get:function(){return C.default}}),Object.defineProperty(t,"toBindingIdentifierName",{enumerable:!0,get:function(){return I.default}}),Object.defineProperty(t,"toBlock",{enumerable:!0,get:function(){return k.default}}),Object.defineProperty(t,"toComputedKey",{enumerable:!0,get:function(){return N.default}}),Object.defineProperty(t,"toExpression",{enumerable:!0,get:function(){return _.default}}),Object.defineProperty(t,"toIdentifier",{enumerable:!0,get:function(){return j.default}}),Object.defineProperty(t,"toKeyAlias",{enumerable:!0,get:function(){return D.default}}),Object.defineProperty(t,"toSequenceExpression",{enumerable:!0,get:function(){return L.default}}),Object.defineProperty(t,"toStatement",{enumerable:!0,get:function(){return M.default}}),Object.defineProperty(t,"valueToNode",{enumerable:!0,get:function(){return B.default}}),Object.defineProperty(t,"appendToMemberExpression",{enumerable:!0,get:function(){return F.default}}),Object.defineProperty(t,"inherits",{enumerable:!0,get:function(){return U.default}}),Object.defineProperty(t,"prependToMemberExpression",{enumerable:!0,get:function(){return $.default}}),Object.defineProperty(t,"removeProperties",{enumerable:!0,get:function(){return q.default}}),Object.defineProperty(t,"removePropertiesDeep",{enumerable:!0,get:function(){return V.default}}),Object.defineProperty(t,"removeTypeDuplicates",{enumerable:!0,get:function(){return W.default}}),Object.defineProperty(t,"getBindingIdentifiers",{enumerable:!0,get:function(){return K.default}}),Object.defineProperty(t,"getOuterBindingIdentifiers",{enumerable:!0,get:function(){return G.default}}),Object.defineProperty(t,"traverse",{enumerable:!0,get:function(){return H.default}}),Object.defineProperty(t,"traverseFast",{enumerable:!0,get:function(){return J.default}}),Object.defineProperty(t,"shallowEqual",{enumerable:!0,get:function(){return Y.default}}),Object.defineProperty(t,"is",{enumerable:!0,get:function(){return X.default}}),Object.defineProperty(t,"isBinding",{enumerable:!0,get:function(){return z.default}}),Object.defineProperty(t,"isBlockScoped",{enumerable:!0,get:function(){return Q.default}}),Object.defineProperty(t,"isImmutable",{enumerable:!0,get:function(){return Z.default}}),Object.defineProperty(t,"isLet",{enumerable:!0,get:function(){return ee.default}}),Object.defineProperty(t,"isNode",{enumerable:!0,get:function(){return te.default}}),Object.defineProperty(t,"isNodesEquivalent",{enumerable:!0,get:function(){return re.default}}),Object.defineProperty(t,"isPlaceholderType",{enumerable:!0,get:function(){return ne.default}}),Object.defineProperty(t,"isReferenced",{enumerable:!0,get:function(){return se.default}}),Object.defineProperty(t,"isScope",{enumerable:!0,get:function(){return ie.default}}),Object.defineProperty(t,"isSpecifierDefault",{enumerable:!0,get:function(){return oe.default}}),Object.defineProperty(t,"isType",{enumerable:!0,get:function(){return ae.default}}),Object.defineProperty(t,"isValidES3Identifier",{enumerable:!0,get:function(){return le.default}}),Object.defineProperty(t,"isValidIdentifier",{enumerable:!0,get:function(){return ce.default}}),Object.defineProperty(t,"isVar",{enumerable:!0,get:function(){return ue.default}}),Object.defineProperty(t,"matchesPattern",{enumerable:!0,get:function(){return pe.default}}),Object.defineProperty(t,"validate",{enumerable:!0,get:function(){return fe.default}}),Object.defineProperty(t,"buildMatchMemberExpression",{enumerable:!0,get:function(){return de.default}}),t.react=void 0;var s=r(363),i=r(364),o=r(365),a=r(375),l=r(376);Object.keys(l).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(n,e)||e in t&&t[e]===l[e]||Object.defineProperty(t,e,{enumerable:!0,get:function(){return l[e]}}))}));var c=r(377),u=r(378),p=r(379),f=r(6);Object.keys(f).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(n,e)||e in t&&t[e]===f[e]||Object.defineProperty(t,e,{enumerable:!0,get:function(){return f[e]}}))}));var d=r(381);Object.keys(d).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(n,e)||e in t&&t[e]===d[e]||Object.defineProperty(t,e,{enumerable:!0,get:function(){return d[e]}}))}));var h=r(26),m=r(382),y=r(383),g=r(384),b=r(385),v=r(386),E=r(220),x=r(221),S=r(222),T=r(223),w=r(224),P=r(387),A=r(388);Object.keys(A).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(n,e)||e in t&&t[e]===A[e]||Object.defineProperty(t,e,{enumerable:!0,get:function(){return A[e]}}))}));var O=r(25);Object.keys(O).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(n,e)||e in t&&t[e]===O[e]||Object.defineProperty(t,e,{enumerable:!0,get:function(){return O[e]}}))}));var C=r(389),I=r(390),k=r(225),N=r(391),_=r(392),j=r(226),D=r(393),L=r(394),M=r(396),B=r(397),R=r(11);Object.keys(R).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(n,e)||e in t&&t[e]===R[e]||Object.defineProperty(t,e,{enumerable:!0,get:function(){return R[e]}}))}));var F=r(398),U=r(399),$=r(400),q=r(229),V=r(227),W=r(219),K=r(64),G=r(401),H=r(402);Object.keys(H).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(n,e)||e in t&&t[e]===H[e]||Object.defineProperty(t,e,{enumerable:!0,get:function(){return H[e]}}))}));var J=r(228),Y=r(127),X=r(62),z=r(403),Q=r(404),Z=r(405),ee=r(230),te=r(218),re=r(406),ne=r(216),se=r(407),ie=r(408),oe=r(409),ae=r(129),le=r(410),ce=r(38),ue=r(411),pe=r(214),fe=r(130),de=r(213),he=r(1);Object.keys(he).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(n,e)||e in t&&t[e]===he[e]||Object.defineProperty(t,e,{enumerable:!0,get:function(){return he[e]}}))}));var me=r(412);Object.keys(me).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(n,e)||e in t&&t[e]===me[e]||Object.defineProperty(t,e,{enumerable:!0,get:function(){return me[e]}}))}));const ye={isReactComponent:s.default,isCompatTag:i.default,buildChildren:o.default};t.react=ye},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isArrayExpression=function(e,t){return!!e&&("ArrayExpression"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isAssignmentExpression=function(e,t){return!!e&&("AssignmentExpression"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isBinaryExpression=function(e,t){return!!e&&("BinaryExpression"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isInterpreterDirective=function(e,t){return!!e&&("InterpreterDirective"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isDirective=function(e,t){return!!e&&("Directive"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isDirectiveLiteral=function(e,t){return!!e&&("DirectiveLiteral"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isBlockStatement=function(e,t){return!!e&&("BlockStatement"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isBreakStatement=function(e,t){return!!e&&("BreakStatement"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isCallExpression=function(e,t){return!!e&&("CallExpression"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isCatchClause=function(e,t){return!!e&&("CatchClause"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isConditionalExpression=function(e,t){return!!e&&("ConditionalExpression"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isContinueStatement=function(e,t){return!!e&&("ContinueStatement"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isDebuggerStatement=function(e,t){return!!e&&("DebuggerStatement"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isDoWhileStatement=function(e,t){return!!e&&("DoWhileStatement"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isEmptyStatement=function(e,t){return!!e&&("EmptyStatement"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isExpressionStatement=function(e,t){return!!e&&("ExpressionStatement"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isFile=function(e,t){return!!e&&("File"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isForInStatement=function(e,t){return!!e&&("ForInStatement"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isForStatement=function(e,t){return!!e&&("ForStatement"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isFunctionDeclaration=function(e,t){return!!e&&("FunctionDeclaration"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isFunctionExpression=function(e,t){return!!e&&("FunctionExpression"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isIdentifier=function(e,t){return!!e&&("Identifier"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isIfStatement=function(e,t){return!!e&&("IfStatement"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isLabeledStatement=function(e,t){return!!e&&("LabeledStatement"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isStringLiteral=function(e,t){return!!e&&("StringLiteral"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isNumericLiteral=function(e,t){return!!e&&("NumericLiteral"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isNullLiteral=function(e,t){return!!e&&("NullLiteral"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isBooleanLiteral=function(e,t){return!!e&&("BooleanLiteral"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isRegExpLiteral=function(e,t){return!!e&&("RegExpLiteral"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isLogicalExpression=function(e,t){return!!e&&("LogicalExpression"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isMemberExpression=function(e,t){return!!e&&("MemberExpression"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isNewExpression=function(e,t){return!!e&&("NewExpression"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isProgram=function(e,t){return!!e&&("Program"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isObjectExpression=function(e,t){return!!e&&("ObjectExpression"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isObjectMethod=function(e,t){return!!e&&("ObjectMethod"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isObjectProperty=function(e,t){return!!e&&("ObjectProperty"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isRestElement=function(e,t){return!!e&&("RestElement"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isReturnStatement=function(e,t){return!!e&&("ReturnStatement"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isSequenceExpression=function(e,t){return!!e&&("SequenceExpression"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isParenthesizedExpression=function(e,t){return!!e&&("ParenthesizedExpression"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isSwitchCase=function(e,t){return!!e&&("SwitchCase"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isSwitchStatement=function(e,t){return!!e&&("SwitchStatement"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isThisExpression=function(e,t){return!!e&&("ThisExpression"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isThrowStatement=function(e,t){return!!e&&("ThrowStatement"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTryStatement=function(e,t){return!!e&&("TryStatement"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isUnaryExpression=function(e,t){return!!e&&("UnaryExpression"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isUpdateExpression=function(e,t){return!!e&&("UpdateExpression"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isVariableDeclaration=function(e,t){return!!e&&("VariableDeclaration"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isVariableDeclarator=function(e,t){return!!e&&("VariableDeclarator"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isWhileStatement=function(e,t){return!!e&&("WhileStatement"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isWithStatement=function(e,t){return!!e&&("WithStatement"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isAssignmentPattern=function(e,t){return!!e&&("AssignmentPattern"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isArrayPattern=function(e,t){return!!e&&("ArrayPattern"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isArrowFunctionExpression=function(e,t){return!!e&&("ArrowFunctionExpression"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isClassBody=function(e,t){return!!e&&("ClassBody"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isClassExpression=function(e,t){return!!e&&("ClassExpression"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isClassDeclaration=function(e,t){return!!e&&("ClassDeclaration"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isExportAllDeclaration=function(e,t){return!!e&&("ExportAllDeclaration"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isExportDefaultDeclaration=function(e,t){return!!e&&("ExportDefaultDeclaration"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isExportNamedDeclaration=function(e,t){return!!e&&("ExportNamedDeclaration"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isExportSpecifier=function(e,t){return!!e&&("ExportSpecifier"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isForOfStatement=function(e,t){return!!e&&("ForOfStatement"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isImportDeclaration=function(e,t){return!!e&&("ImportDeclaration"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isImportDefaultSpecifier=function(e,t){return!!e&&("ImportDefaultSpecifier"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isImportNamespaceSpecifier=function(e,t){return!!e&&("ImportNamespaceSpecifier"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isImportSpecifier=function(e,t){return!!e&&("ImportSpecifier"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isMetaProperty=function(e,t){return!!e&&("MetaProperty"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isClassMethod=function(e,t){return!!e&&("ClassMethod"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isObjectPattern=function(e,t){return!!e&&("ObjectPattern"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isSpreadElement=function(e,t){return!!e&&("SpreadElement"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isSuper=function(e,t){return!!e&&("Super"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTaggedTemplateExpression=function(e,t){return!!e&&("TaggedTemplateExpression"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTemplateElement=function(e,t){return!!e&&("TemplateElement"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTemplateLiteral=function(e,t){return!!e&&("TemplateLiteral"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isYieldExpression=function(e,t){return!!e&&("YieldExpression"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isAwaitExpression=function(e,t){return!!e&&("AwaitExpression"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isImport=function(e,t){return!!e&&("Import"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isBigIntLiteral=function(e,t){return!!e&&("BigIntLiteral"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isExportNamespaceSpecifier=function(e,t){return!!e&&("ExportNamespaceSpecifier"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isOptionalMemberExpression=function(e,t){return!!e&&("OptionalMemberExpression"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isOptionalCallExpression=function(e,t){return!!e&&("OptionalCallExpression"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isAnyTypeAnnotation=function(e,t){return!!e&&("AnyTypeAnnotation"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isArrayTypeAnnotation=function(e,t){return!!e&&("ArrayTypeAnnotation"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isBooleanTypeAnnotation=function(e,t){return!!e&&("BooleanTypeAnnotation"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isBooleanLiteralTypeAnnotation=function(e,t){return!!e&&("BooleanLiteralTypeAnnotation"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isNullLiteralTypeAnnotation=function(e,t){return!!e&&("NullLiteralTypeAnnotation"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isClassImplements=function(e,t){return!!e&&("ClassImplements"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isDeclareClass=function(e,t){return!!e&&("DeclareClass"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isDeclareFunction=function(e,t){return!!e&&("DeclareFunction"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isDeclareInterface=function(e,t){return!!e&&("DeclareInterface"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isDeclareModule=function(e,t){return!!e&&("DeclareModule"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isDeclareModuleExports=function(e,t){return!!e&&("DeclareModuleExports"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isDeclareTypeAlias=function(e,t){return!!e&&("DeclareTypeAlias"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isDeclareOpaqueType=function(e,t){return!!e&&("DeclareOpaqueType"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isDeclareVariable=function(e,t){return!!e&&("DeclareVariable"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isDeclareExportDeclaration=function(e,t){return!!e&&("DeclareExportDeclaration"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isDeclareExportAllDeclaration=function(e,t){return!!e&&("DeclareExportAllDeclaration"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isDeclaredPredicate=function(e,t){return!!e&&("DeclaredPredicate"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isExistsTypeAnnotation=function(e,t){return!!e&&("ExistsTypeAnnotation"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isFunctionTypeAnnotation=function(e,t){return!!e&&("FunctionTypeAnnotation"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isFunctionTypeParam=function(e,t){return!!e&&("FunctionTypeParam"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isGenericTypeAnnotation=function(e,t){return!!e&&("GenericTypeAnnotation"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isInferredPredicate=function(e,t){return!!e&&("InferredPredicate"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isInterfaceExtends=function(e,t){return!!e&&("InterfaceExtends"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isInterfaceDeclaration=function(e,t){return!!e&&("InterfaceDeclaration"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isInterfaceTypeAnnotation=function(e,t){return!!e&&("InterfaceTypeAnnotation"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isIntersectionTypeAnnotation=function(e,t){return!!e&&("IntersectionTypeAnnotation"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isMixedTypeAnnotation=function(e,t){return!!e&&("MixedTypeAnnotation"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isEmptyTypeAnnotation=function(e,t){return!!e&&("EmptyTypeAnnotation"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isNullableTypeAnnotation=function(e,t){return!!e&&("NullableTypeAnnotation"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isNumberLiteralTypeAnnotation=function(e,t){return!!e&&("NumberLiteralTypeAnnotation"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isNumberTypeAnnotation=function(e,t){return!!e&&("NumberTypeAnnotation"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isObjectTypeAnnotation=function(e,t){return!!e&&("ObjectTypeAnnotation"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isObjectTypeInternalSlot=function(e,t){return!!e&&("ObjectTypeInternalSlot"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isObjectTypeCallProperty=function(e,t){return!!e&&("ObjectTypeCallProperty"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isObjectTypeIndexer=function(e,t){return!!e&&("ObjectTypeIndexer"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isObjectTypeProperty=function(e,t){return!!e&&("ObjectTypeProperty"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isObjectTypeSpreadProperty=function(e,t){return!!e&&("ObjectTypeSpreadProperty"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isOpaqueType=function(e,t){return!!e&&("OpaqueType"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isQualifiedTypeIdentifier=function(e,t){return!!e&&("QualifiedTypeIdentifier"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isStringLiteralTypeAnnotation=function(e,t){return!!e&&("StringLiteralTypeAnnotation"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isStringTypeAnnotation=function(e,t){return!!e&&("StringTypeAnnotation"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isSymbolTypeAnnotation=function(e,t){return!!e&&("SymbolTypeAnnotation"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isThisTypeAnnotation=function(e,t){return!!e&&("ThisTypeAnnotation"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTupleTypeAnnotation=function(e,t){return!!e&&("TupleTypeAnnotation"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTypeofTypeAnnotation=function(e,t){return!!e&&("TypeofTypeAnnotation"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTypeAlias=function(e,t){return!!e&&("TypeAlias"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTypeAnnotation=function(e,t){return!!e&&("TypeAnnotation"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTypeCastExpression=function(e,t){return!!e&&("TypeCastExpression"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTypeParameter=function(e,t){return!!e&&("TypeParameter"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTypeParameterDeclaration=function(e,t){return!!e&&("TypeParameterDeclaration"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTypeParameterInstantiation=function(e,t){return!!e&&("TypeParameterInstantiation"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isUnionTypeAnnotation=function(e,t){return!!e&&("UnionTypeAnnotation"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isVariance=function(e,t){return!!e&&("Variance"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isVoidTypeAnnotation=function(e,t){return!!e&&("VoidTypeAnnotation"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isEnumDeclaration=function(e,t){return!!e&&("EnumDeclaration"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isEnumBooleanBody=function(e,t){return!!e&&("EnumBooleanBody"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isEnumNumberBody=function(e,t){return!!e&&("EnumNumberBody"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isEnumStringBody=function(e,t){return!!e&&("EnumStringBody"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isEnumSymbolBody=function(e,t){return!!e&&("EnumSymbolBody"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isEnumBooleanMember=function(e,t){return!!e&&("EnumBooleanMember"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isEnumNumberMember=function(e,t){return!!e&&("EnumNumberMember"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isEnumStringMember=function(e,t){return!!e&&("EnumStringMember"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isEnumDefaultedMember=function(e,t){return!!e&&("EnumDefaultedMember"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isIndexedAccessType=function(e,t){return!!e&&("IndexedAccessType"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isOptionalIndexedAccessType=function(e,t){return!!e&&("OptionalIndexedAccessType"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isJSXAttribute=function(e,t){return!!e&&("JSXAttribute"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isJSXClosingElement=function(e,t){return!!e&&("JSXClosingElement"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isJSXElement=function(e,t){return!!e&&("JSXElement"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isJSXEmptyExpression=function(e,t){return!!e&&("JSXEmptyExpression"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isJSXExpressionContainer=function(e,t){return!!e&&("JSXExpressionContainer"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isJSXSpreadChild=function(e,t){return!!e&&("JSXSpreadChild"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isJSXIdentifier=function(e,t){return!!e&&("JSXIdentifier"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isJSXMemberExpression=function(e,t){return!!e&&("JSXMemberExpression"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isJSXNamespacedName=function(e,t){return!!e&&("JSXNamespacedName"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isJSXOpeningElement=function(e,t){return!!e&&("JSXOpeningElement"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isJSXSpreadAttribute=function(e,t){return!!e&&("JSXSpreadAttribute"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isJSXText=function(e,t){return!!e&&("JSXText"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isJSXFragment=function(e,t){return!!e&&("JSXFragment"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isJSXOpeningFragment=function(e,t){return!!e&&("JSXOpeningFragment"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isJSXClosingFragment=function(e,t){return!!e&&("JSXClosingFragment"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isNoop=function(e,t){return!!e&&("Noop"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isPlaceholder=function(e,t){return!!e&&("Placeholder"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isV8IntrinsicIdentifier=function(e,t){return!!e&&("V8IntrinsicIdentifier"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isArgumentPlaceholder=function(e,t){return!!e&&("ArgumentPlaceholder"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isBindExpression=function(e,t){return!!e&&("BindExpression"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isClassProperty=function(e,t){return!!e&&("ClassProperty"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isPipelineTopicExpression=function(e,t){return!!e&&("PipelineTopicExpression"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isPipelineBareFunction=function(e,t){return!!e&&("PipelineBareFunction"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isPipelinePrimaryTopicReference=function(e,t){return!!e&&("PipelinePrimaryTopicReference"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isClassPrivateProperty=function(e,t){return!!e&&("ClassPrivateProperty"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isClassPrivateMethod=function(e,t){return!!e&&("ClassPrivateMethod"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isImportAttribute=function(e,t){return!!e&&("ImportAttribute"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isDecorator=function(e,t){return!!e&&("Decorator"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isDoExpression=function(e,t){return!!e&&("DoExpression"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isExportDefaultSpecifier=function(e,t){return!!e&&("ExportDefaultSpecifier"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isPrivateName=function(e,t){return!!e&&("PrivateName"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isRecordExpression=function(e,t){return!!e&&("RecordExpression"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTupleExpression=function(e,t){return!!e&&("TupleExpression"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isDecimalLiteral=function(e,t){return!!e&&("DecimalLiteral"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isStaticBlock=function(e,t){return!!e&&("StaticBlock"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isModuleExpression=function(e,t){return!!e&&("ModuleExpression"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSParameterProperty=function(e,t){return!!e&&("TSParameterProperty"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSDeclareFunction=function(e,t){return!!e&&("TSDeclareFunction"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSDeclareMethod=function(e,t){return!!e&&("TSDeclareMethod"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSQualifiedName=function(e,t){return!!e&&("TSQualifiedName"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSCallSignatureDeclaration=function(e,t){return!!e&&("TSCallSignatureDeclaration"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSConstructSignatureDeclaration=function(e,t){return!!e&&("TSConstructSignatureDeclaration"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSPropertySignature=function(e,t){return!!e&&("TSPropertySignature"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSMethodSignature=function(e,t){return!!e&&("TSMethodSignature"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSIndexSignature=function(e,t){return!!e&&("TSIndexSignature"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSAnyKeyword=function(e,t){return!!e&&("TSAnyKeyword"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSBooleanKeyword=function(e,t){return!!e&&("TSBooleanKeyword"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSBigIntKeyword=function(e,t){return!!e&&("TSBigIntKeyword"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSIntrinsicKeyword=function(e,t){return!!e&&("TSIntrinsicKeyword"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSNeverKeyword=function(e,t){return!!e&&("TSNeverKeyword"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSNullKeyword=function(e,t){return!!e&&("TSNullKeyword"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSNumberKeyword=function(e,t){return!!e&&("TSNumberKeyword"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSObjectKeyword=function(e,t){return!!e&&("TSObjectKeyword"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSStringKeyword=function(e,t){return!!e&&("TSStringKeyword"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSSymbolKeyword=function(e,t){return!!e&&("TSSymbolKeyword"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSUndefinedKeyword=function(e,t){return!!e&&("TSUndefinedKeyword"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSUnknownKeyword=function(e,t){return!!e&&("TSUnknownKeyword"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSVoidKeyword=function(e,t){return!!e&&("TSVoidKeyword"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSThisType=function(e,t){return!!e&&("TSThisType"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSFunctionType=function(e,t){return!!e&&("TSFunctionType"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSConstructorType=function(e,t){return!!e&&("TSConstructorType"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSTypeReference=function(e,t){return!!e&&("TSTypeReference"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSTypePredicate=function(e,t){return!!e&&("TSTypePredicate"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSTypeQuery=function(e,t){return!!e&&("TSTypeQuery"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSTypeLiteral=function(e,t){return!!e&&("TSTypeLiteral"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSArrayType=function(e,t){return!!e&&("TSArrayType"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSTupleType=function(e,t){return!!e&&("TSTupleType"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSOptionalType=function(e,t){return!!e&&("TSOptionalType"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSRestType=function(e,t){return!!e&&("TSRestType"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSNamedTupleMember=function(e,t){return!!e&&("TSNamedTupleMember"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSUnionType=function(e,t){return!!e&&("TSUnionType"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSIntersectionType=function(e,t){return!!e&&("TSIntersectionType"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSConditionalType=function(e,t){return!!e&&("TSConditionalType"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSInferType=function(e,t){return!!e&&("TSInferType"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSParenthesizedType=function(e,t){return!!e&&("TSParenthesizedType"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSTypeOperator=function(e,t){return!!e&&("TSTypeOperator"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSIndexedAccessType=function(e,t){return!!e&&("TSIndexedAccessType"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSMappedType=function(e,t){return!!e&&("TSMappedType"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSLiteralType=function(e,t){return!!e&&("TSLiteralType"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSExpressionWithTypeArguments=function(e,t){return!!e&&("TSExpressionWithTypeArguments"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSInterfaceDeclaration=function(e,t){return!!e&&("TSInterfaceDeclaration"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSInterfaceBody=function(e,t){return!!e&&("TSInterfaceBody"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSTypeAliasDeclaration=function(e,t){return!!e&&("TSTypeAliasDeclaration"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSAsExpression=function(e,t){return!!e&&("TSAsExpression"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSTypeAssertion=function(e,t){return!!e&&("TSTypeAssertion"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSEnumDeclaration=function(e,t){return!!e&&("TSEnumDeclaration"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSEnumMember=function(e,t){return!!e&&("TSEnumMember"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSModuleDeclaration=function(e,t){return!!e&&("TSModuleDeclaration"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSModuleBlock=function(e,t){return!!e&&("TSModuleBlock"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSImportType=function(e,t){return!!e&&("TSImportType"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSImportEqualsDeclaration=function(e,t){return!!e&&("TSImportEqualsDeclaration"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSExternalModuleReference=function(e,t){return!!e&&("TSExternalModuleReference"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSNonNullExpression=function(e,t){return!!e&&("TSNonNullExpression"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSExportAssignment=function(e,t){return!!e&&("TSExportAssignment"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSNamespaceExportDeclaration=function(e,t){return!!e&&("TSNamespaceExportDeclaration"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSTypeAnnotation=function(e,t){return!!e&&("TSTypeAnnotation"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSTypeParameterInstantiation=function(e,t){return!!e&&("TSTypeParameterInstantiation"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSTypeParameterDeclaration=function(e,t){return!!e&&("TSTypeParameterDeclaration"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isTSTypeParameter=function(e,t){return!!e&&("TSTypeParameter"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isExpression=function(e,t){if(!e)return!1;const r=e.type;return("ArrayExpression"===r||"AssignmentExpression"===r||"BinaryExpression"===r||"CallExpression"===r||"ConditionalExpression"===r||"FunctionExpression"===r||"Identifier"===r||"StringLiteral"===r||"NumericLiteral"===r||"NullLiteral"===r||"BooleanLiteral"===r||"RegExpLiteral"===r||"LogicalExpression"===r||"MemberExpression"===r||"NewExpression"===r||"ObjectExpression"===r||"SequenceExpression"===r||"ParenthesizedExpression"===r||"ThisExpression"===r||"UnaryExpression"===r||"UpdateExpression"===r||"ArrowFunctionExpression"===r||"ClassExpression"===r||"MetaProperty"===r||"Super"===r||"TaggedTemplateExpression"===r||"TemplateLiteral"===r||"YieldExpression"===r||"AwaitExpression"===r||"Import"===r||"BigIntLiteral"===r||"OptionalMemberExpression"===r||"OptionalCallExpression"===r||"TypeCastExpression"===r||"JSXElement"===r||"JSXFragment"===r||"BindExpression"===r||"PipelinePrimaryTopicReference"===r||"DoExpression"===r||"RecordExpression"===r||"TupleExpression"===r||"DecimalLiteral"===r||"ModuleExpression"===r||"TSAsExpression"===r||"TSTypeAssertion"===r||"TSNonNullExpression"===r||"Placeholder"===r&&("Expression"===e.expectedNode||"Identifier"===e.expectedNode||"StringLiteral"===e.expectedNode))&&(void 0===t||(0,n.default)(e,t))},t.isBinary=function(e,t){if(!e)return!1;const r=e.type;return("BinaryExpression"===r||"LogicalExpression"===r)&&(void 0===t||(0,n.default)(e,t))},t.isScopable=function(e,t){if(!e)return!1;const r=e.type;return("BlockStatement"===r||"CatchClause"===r||"DoWhileStatement"===r||"ForInStatement"===r||"ForStatement"===r||"FunctionDeclaration"===r||"FunctionExpression"===r||"Program"===r||"ObjectMethod"===r||"SwitchStatement"===r||"WhileStatement"===r||"ArrowFunctionExpression"===r||"ClassExpression"===r||"ClassDeclaration"===r||"ForOfStatement"===r||"ClassMethod"===r||"ClassPrivateMethod"===r||"StaticBlock"===r||"TSModuleBlock"===r||"Placeholder"===r&&"BlockStatement"===e.expectedNode)&&(void 0===t||(0,n.default)(e,t))},t.isBlockParent=function(e,t){if(!e)return!1;const r=e.type;return("BlockStatement"===r||"CatchClause"===r||"DoWhileStatement"===r||"ForInStatement"===r||"ForStatement"===r||"FunctionDeclaration"===r||"FunctionExpression"===r||"Program"===r||"ObjectMethod"===r||"SwitchStatement"===r||"WhileStatement"===r||"ArrowFunctionExpression"===r||"ForOfStatement"===r||"ClassMethod"===r||"ClassPrivateMethod"===r||"StaticBlock"===r||"TSModuleBlock"===r||"Placeholder"===r&&"BlockStatement"===e.expectedNode)&&(void 0===t||(0,n.default)(e,t))},t.isBlock=function(e,t){if(!e)return!1;const r=e.type;return("BlockStatement"===r||"Program"===r||"TSModuleBlock"===r||"Placeholder"===r&&"BlockStatement"===e.expectedNode)&&(void 0===t||(0,n.default)(e,t))},t.isStatement=function(e,t){if(!e)return!1;const r=e.type;return("BlockStatement"===r||"BreakStatement"===r||"ContinueStatement"===r||"DebuggerStatement"===r||"DoWhileStatement"===r||"EmptyStatement"===r||"ExpressionStatement"===r||"ForInStatement"===r||"ForStatement"===r||"FunctionDeclaration"===r||"IfStatement"===r||"LabeledStatement"===r||"ReturnStatement"===r||"SwitchStatement"===r||"ThrowStatement"===r||"TryStatement"===r||"VariableDeclaration"===r||"WhileStatement"===r||"WithStatement"===r||"ClassDeclaration"===r||"ExportAllDeclaration"===r||"ExportDefaultDeclaration"===r||"ExportNamedDeclaration"===r||"ForOfStatement"===r||"ImportDeclaration"===r||"DeclareClass"===r||"DeclareFunction"===r||"DeclareInterface"===r||"DeclareModule"===r||"DeclareModuleExports"===r||"DeclareTypeAlias"===r||"DeclareOpaqueType"===r||"DeclareVariable"===r||"DeclareExportDeclaration"===r||"DeclareExportAllDeclaration"===r||"InterfaceDeclaration"===r||"OpaqueType"===r||"TypeAlias"===r||"EnumDeclaration"===r||"TSDeclareFunction"===r||"TSInterfaceDeclaration"===r||"TSTypeAliasDeclaration"===r||"TSEnumDeclaration"===r||"TSModuleDeclaration"===r||"TSImportEqualsDeclaration"===r||"TSExportAssignment"===r||"TSNamespaceExportDeclaration"===r||"Placeholder"===r&&("Statement"===e.expectedNode||"Declaration"===e.expectedNode||"BlockStatement"===e.expectedNode))&&(void 0===t||(0,n.default)(e,t))},t.isTerminatorless=function(e,t){if(!e)return!1;const r=e.type;return("BreakStatement"===r||"ContinueStatement"===r||"ReturnStatement"===r||"ThrowStatement"===r||"YieldExpression"===r||"AwaitExpression"===r)&&(void 0===t||(0,n.default)(e,t))},t.isCompletionStatement=function(e,t){if(!e)return!1;const r=e.type;return("BreakStatement"===r||"ContinueStatement"===r||"ReturnStatement"===r||"ThrowStatement"===r)&&(void 0===t||(0,n.default)(e,t))},t.isConditional=function(e,t){if(!e)return!1;const r=e.type;return("ConditionalExpression"===r||"IfStatement"===r)&&(void 0===t||(0,n.default)(e,t))},t.isLoop=function(e,t){if(!e)return!1;const r=e.type;return("DoWhileStatement"===r||"ForInStatement"===r||"ForStatement"===r||"WhileStatement"===r||"ForOfStatement"===r)&&(void 0===t||(0,n.default)(e,t))},t.isWhile=function(e,t){if(!e)return!1;const r=e.type;return("DoWhileStatement"===r||"WhileStatement"===r)&&(void 0===t||(0,n.default)(e,t))},t.isExpressionWrapper=function(e,t){if(!e)return!1;const r=e.type;return("ExpressionStatement"===r||"ParenthesizedExpression"===r||"TypeCastExpression"===r)&&(void 0===t||(0,n.default)(e,t))},t.isFor=function(e,t){if(!e)return!1;const r=e.type;return("ForInStatement"===r||"ForStatement"===r||"ForOfStatement"===r)&&(void 0===t||(0,n.default)(e,t))},t.isForXStatement=function(e,t){if(!e)return!1;const r=e.type;return("ForInStatement"===r||"ForOfStatement"===r)&&(void 0===t||(0,n.default)(e,t))},t.isFunction=function(e,t){if(!e)return!1;const r=e.type;return("FunctionDeclaration"===r||"FunctionExpression"===r||"ObjectMethod"===r||"ArrowFunctionExpression"===r||"ClassMethod"===r||"ClassPrivateMethod"===r)&&(void 0===t||(0,n.default)(e,t))},t.isFunctionParent=function(e,t){if(!e)return!1;const r=e.type;return("FunctionDeclaration"===r||"FunctionExpression"===r||"ObjectMethod"===r||"ArrowFunctionExpression"===r||"ClassMethod"===r||"ClassPrivateMethod"===r)&&(void 0===t||(0,n.default)(e,t))},t.isPureish=function(e,t){if(!e)return!1;const r=e.type;return("FunctionDeclaration"===r||"FunctionExpression"===r||"StringLiteral"===r||"NumericLiteral"===r||"NullLiteral"===r||"BooleanLiteral"===r||"RegExpLiteral"===r||"ArrowFunctionExpression"===r||"BigIntLiteral"===r||"DecimalLiteral"===r||"Placeholder"===r&&"StringLiteral"===e.expectedNode)&&(void 0===t||(0,n.default)(e,t))},t.isDeclaration=function(e,t){if(!e)return!1;const r=e.type;return("FunctionDeclaration"===r||"VariableDeclaration"===r||"ClassDeclaration"===r||"ExportAllDeclaration"===r||"ExportDefaultDeclaration"===r||"ExportNamedDeclaration"===r||"ImportDeclaration"===r||"DeclareClass"===r||"DeclareFunction"===r||"DeclareInterface"===r||"DeclareModule"===r||"DeclareModuleExports"===r||"DeclareTypeAlias"===r||"DeclareOpaqueType"===r||"DeclareVariable"===r||"DeclareExportDeclaration"===r||"DeclareExportAllDeclaration"===r||"InterfaceDeclaration"===r||"OpaqueType"===r||"TypeAlias"===r||"EnumDeclaration"===r||"TSDeclareFunction"===r||"TSInterfaceDeclaration"===r||"TSTypeAliasDeclaration"===r||"TSEnumDeclaration"===r||"TSModuleDeclaration"===r||"Placeholder"===r&&"Declaration"===e.expectedNode)&&(void 0===t||(0,n.default)(e,t))},t.isPatternLike=function(e,t){if(!e)return!1;const r=e.type;return("Identifier"===r||"RestElement"===r||"AssignmentPattern"===r||"ArrayPattern"===r||"ObjectPattern"===r||"Placeholder"===r&&("Pattern"===e.expectedNode||"Identifier"===e.expectedNode))&&(void 0===t||(0,n.default)(e,t))},t.isLVal=function(e,t){if(!e)return!1;const r=e.type;return("Identifier"===r||"MemberExpression"===r||"RestElement"===r||"AssignmentPattern"===r||"ArrayPattern"===r||"ObjectPattern"===r||"TSParameterProperty"===r||"Placeholder"===r&&("Pattern"===e.expectedNode||"Identifier"===e.expectedNode))&&(void 0===t||(0,n.default)(e,t))},t.isTSEntityName=function(e,t){if(!e)return!1;const r=e.type;return("Identifier"===r||"TSQualifiedName"===r||"Placeholder"===r&&"Identifier"===e.expectedNode)&&(void 0===t||(0,n.default)(e,t))},t.isLiteral=function(e,t){if(!e)return!1;const r=e.type;return("StringLiteral"===r||"NumericLiteral"===r||"NullLiteral"===r||"BooleanLiteral"===r||"RegExpLiteral"===r||"TemplateLiteral"===r||"BigIntLiteral"===r||"DecimalLiteral"===r||"Placeholder"===r&&"StringLiteral"===e.expectedNode)&&(void 0===t||(0,n.default)(e,t))},t.isImmutable=function(e,t){if(!e)return!1;const r=e.type;return("StringLiteral"===r||"NumericLiteral"===r||"NullLiteral"===r||"BooleanLiteral"===r||"BigIntLiteral"===r||"JSXAttribute"===r||"JSXClosingElement"===r||"JSXElement"===r||"JSXExpressionContainer"===r||"JSXSpreadChild"===r||"JSXOpeningElement"===r||"JSXText"===r||"JSXFragment"===r||"JSXOpeningFragment"===r||"JSXClosingFragment"===r||"DecimalLiteral"===r||"Placeholder"===r&&"StringLiteral"===e.expectedNode)&&(void 0===t||(0,n.default)(e,t))},t.isUserWhitespacable=function(e,t){if(!e)return!1;const r=e.type;return("ObjectMethod"===r||"ObjectProperty"===r||"ObjectTypeInternalSlot"===r||"ObjectTypeCallProperty"===r||"ObjectTypeIndexer"===r||"ObjectTypeProperty"===r||"ObjectTypeSpreadProperty"===r)&&(void 0===t||(0,n.default)(e,t))},t.isMethod=function(e,t){if(!e)return!1;const r=e.type;return("ObjectMethod"===r||"ClassMethod"===r||"ClassPrivateMethod"===r)&&(void 0===t||(0,n.default)(e,t))},t.isObjectMember=function(e,t){if(!e)return!1;const r=e.type;return("ObjectMethod"===r||"ObjectProperty"===r)&&(void 0===t||(0,n.default)(e,t))},t.isProperty=function(e,t){if(!e)return!1;const r=e.type;return("ObjectProperty"===r||"ClassProperty"===r||"ClassPrivateProperty"===r)&&(void 0===t||(0,n.default)(e,t))},t.isUnaryLike=function(e,t){if(!e)return!1;const r=e.type;return("UnaryExpression"===r||"SpreadElement"===r)&&(void 0===t||(0,n.default)(e,t))},t.isPattern=function(e,t){if(!e)return!1;const r=e.type;return("AssignmentPattern"===r||"ArrayPattern"===r||"ObjectPattern"===r||"Placeholder"===r&&"Pattern"===e.expectedNode)&&(void 0===t||(0,n.default)(e,t))},t.isClass=function(e,t){if(!e)return!1;const r=e.type;return("ClassExpression"===r||"ClassDeclaration"===r)&&(void 0===t||(0,n.default)(e,t))},t.isModuleDeclaration=function(e,t){if(!e)return!1;const r=e.type;return("ExportAllDeclaration"===r||"ExportDefaultDeclaration"===r||"ExportNamedDeclaration"===r||"ImportDeclaration"===r)&&(void 0===t||(0,n.default)(e,t))},t.isExportDeclaration=function(e,t){if(!e)return!1;const r=e.type;return("ExportAllDeclaration"===r||"ExportDefaultDeclaration"===r||"ExportNamedDeclaration"===r)&&(void 0===t||(0,n.default)(e,t))},t.isModuleSpecifier=function(e,t){if(!e)return!1;const r=e.type;return("ExportSpecifier"===r||"ImportDefaultSpecifier"===r||"ImportNamespaceSpecifier"===r||"ImportSpecifier"===r||"ExportNamespaceSpecifier"===r||"ExportDefaultSpecifier"===r)&&(void 0===t||(0,n.default)(e,t))},t.isFlow=function(e,t){if(!e)return!1;const r=e.type;return("AnyTypeAnnotation"===r||"ArrayTypeAnnotation"===r||"BooleanTypeAnnotation"===r||"BooleanLiteralTypeAnnotation"===r||"NullLiteralTypeAnnotation"===r||"ClassImplements"===r||"DeclareClass"===r||"DeclareFunction"===r||"DeclareInterface"===r||"DeclareModule"===r||"DeclareModuleExports"===r||"DeclareTypeAlias"===r||"DeclareOpaqueType"===r||"DeclareVariable"===r||"DeclareExportDeclaration"===r||"DeclareExportAllDeclaration"===r||"DeclaredPredicate"===r||"ExistsTypeAnnotation"===r||"FunctionTypeAnnotation"===r||"FunctionTypeParam"===r||"GenericTypeAnnotation"===r||"InferredPredicate"===r||"InterfaceExtends"===r||"InterfaceDeclaration"===r||"InterfaceTypeAnnotation"===r||"IntersectionTypeAnnotation"===r||"MixedTypeAnnotation"===r||"EmptyTypeAnnotation"===r||"NullableTypeAnnotation"===r||"NumberLiteralTypeAnnotation"===r||"NumberTypeAnnotation"===r||"ObjectTypeAnnotation"===r||"ObjectTypeInternalSlot"===r||"ObjectTypeCallProperty"===r||"ObjectTypeIndexer"===r||"ObjectTypeProperty"===r||"ObjectTypeSpreadProperty"===r||"OpaqueType"===r||"QualifiedTypeIdentifier"===r||"StringLiteralTypeAnnotation"===r||"StringTypeAnnotation"===r||"SymbolTypeAnnotation"===r||"ThisTypeAnnotation"===r||"TupleTypeAnnotation"===r||"TypeofTypeAnnotation"===r||"TypeAlias"===r||"TypeAnnotation"===r||"TypeCastExpression"===r||"TypeParameter"===r||"TypeParameterDeclaration"===r||"TypeParameterInstantiation"===r||"UnionTypeAnnotation"===r||"Variance"===r||"VoidTypeAnnotation"===r||"IndexedAccessType"===r||"OptionalIndexedAccessType"===r)&&(void 0===t||(0,n.default)(e,t))},t.isFlowType=function(e,t){if(!e)return!1;const r=e.type;return("AnyTypeAnnotation"===r||"ArrayTypeAnnotation"===r||"BooleanTypeAnnotation"===r||"BooleanLiteralTypeAnnotation"===r||"NullLiteralTypeAnnotation"===r||"ExistsTypeAnnotation"===r||"FunctionTypeAnnotation"===r||"GenericTypeAnnotation"===r||"InterfaceTypeAnnotation"===r||"IntersectionTypeAnnotation"===r||"MixedTypeAnnotation"===r||"EmptyTypeAnnotation"===r||"NullableTypeAnnotation"===r||"NumberLiteralTypeAnnotation"===r||"NumberTypeAnnotation"===r||"ObjectTypeAnnotation"===r||"StringLiteralTypeAnnotation"===r||"StringTypeAnnotation"===r||"SymbolTypeAnnotation"===r||"ThisTypeAnnotation"===r||"TupleTypeAnnotation"===r||"TypeofTypeAnnotation"===r||"UnionTypeAnnotation"===r||"VoidTypeAnnotation"===r||"IndexedAccessType"===r||"OptionalIndexedAccessType"===r)&&(void 0===t||(0,n.default)(e,t))},t.isFlowBaseAnnotation=function(e,t){if(!e)return!1;const r=e.type;return("AnyTypeAnnotation"===r||"BooleanTypeAnnotation"===r||"NullLiteralTypeAnnotation"===r||"MixedTypeAnnotation"===r||"EmptyTypeAnnotation"===r||"NumberTypeAnnotation"===r||"StringTypeAnnotation"===r||"SymbolTypeAnnotation"===r||"ThisTypeAnnotation"===r||"VoidTypeAnnotation"===r)&&(void 0===t||(0,n.default)(e,t))},t.isFlowDeclaration=function(e,t){if(!e)return!1;const r=e.type;return("DeclareClass"===r||"DeclareFunction"===r||"DeclareInterface"===r||"DeclareModule"===r||"DeclareModuleExports"===r||"DeclareTypeAlias"===r||"DeclareOpaqueType"===r||"DeclareVariable"===r||"DeclareExportDeclaration"===r||"DeclareExportAllDeclaration"===r||"InterfaceDeclaration"===r||"OpaqueType"===r||"TypeAlias"===r)&&(void 0===t||(0,n.default)(e,t))},t.isFlowPredicate=function(e,t){if(!e)return!1;const r=e.type;return("DeclaredPredicate"===r||"InferredPredicate"===r)&&(void 0===t||(0,n.default)(e,t))},t.isEnumBody=function(e,t){if(!e)return!1;const r=e.type;return("EnumBooleanBody"===r||"EnumNumberBody"===r||"EnumStringBody"===r||"EnumSymbolBody"===r)&&(void 0===t||(0,n.default)(e,t))},t.isEnumMember=function(e,t){if(!e)return!1;const r=e.type;return("EnumBooleanMember"===r||"EnumNumberMember"===r||"EnumStringMember"===r||"EnumDefaultedMember"===r)&&(void 0===t||(0,n.default)(e,t))},t.isJSX=function(e,t){if(!e)return!1;const r=e.type;return("JSXAttribute"===r||"JSXClosingElement"===r||"JSXElement"===r||"JSXEmptyExpression"===r||"JSXExpressionContainer"===r||"JSXSpreadChild"===r||"JSXIdentifier"===r||"JSXMemberExpression"===r||"JSXNamespacedName"===r||"JSXOpeningElement"===r||"JSXSpreadAttribute"===r||"JSXText"===r||"JSXFragment"===r||"JSXOpeningFragment"===r||"JSXClosingFragment"===r)&&(void 0===t||(0,n.default)(e,t))},t.isPrivate=function(e,t){if(!e)return!1;const r=e.type;return("ClassPrivateProperty"===r||"ClassPrivateMethod"===r||"PrivateName"===r)&&(void 0===t||(0,n.default)(e,t))},t.isTSTypeElement=function(e,t){if(!e)return!1;const r=e.type;return("TSCallSignatureDeclaration"===r||"TSConstructSignatureDeclaration"===r||"TSPropertySignature"===r||"TSMethodSignature"===r||"TSIndexSignature"===r)&&(void 0===t||(0,n.default)(e,t))},t.isTSType=function(e,t){if(!e)return!1;const r=e.type;return("TSAnyKeyword"===r||"TSBooleanKeyword"===r||"TSBigIntKeyword"===r||"TSIntrinsicKeyword"===r||"TSNeverKeyword"===r||"TSNullKeyword"===r||"TSNumberKeyword"===r||"TSObjectKeyword"===r||"TSStringKeyword"===r||"TSSymbolKeyword"===r||"TSUndefinedKeyword"===r||"TSUnknownKeyword"===r||"TSVoidKeyword"===r||"TSThisType"===r||"TSFunctionType"===r||"TSConstructorType"===r||"TSTypeReference"===r||"TSTypePredicate"===r||"TSTypeQuery"===r||"TSTypeLiteral"===r||"TSArrayType"===r||"TSTupleType"===r||"TSOptionalType"===r||"TSRestType"===r||"TSUnionType"===r||"TSIntersectionType"===r||"TSConditionalType"===r||"TSInferType"===r||"TSParenthesizedType"===r||"TSTypeOperator"===r||"TSIndexedAccessType"===r||"TSMappedType"===r||"TSLiteralType"===r||"TSExpressionWithTypeArguments"===r||"TSImportType"===r)&&(void 0===t||(0,n.default)(e,t))},t.isTSBaseType=function(e,t){if(!e)return!1;const r=e.type;return("TSAnyKeyword"===r||"TSBooleanKeyword"===r||"TSBigIntKeyword"===r||"TSIntrinsicKeyword"===r||"TSNeverKeyword"===r||"TSNullKeyword"===r||"TSNumberKeyword"===r||"TSObjectKeyword"===r||"TSStringKeyword"===r||"TSSymbolKeyword"===r||"TSUndefinedKeyword"===r||"TSUnknownKeyword"===r||"TSVoidKeyword"===r||"TSThisType"===r||"TSLiteralType"===r)&&(void 0===t||(0,n.default)(e,t))},t.isNumberLiteral=function(e,t){return!!e&&("NumberLiteral"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isRegexLiteral=function(e,t){return!!e&&("RegexLiteral"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isRestProperty=function(e,t){return!!e&&("RestProperty"===e.type&&(void 0===t||(0,n.default)(e,t)))},t.isSpreadProperty=function(e,t){return!!e&&("SpreadProperty"===e.type&&(void 0===t||(0,n.default)(e,t)))};var n=r(127)},(e,t,r)=>{var n=function(e){return e&&e.Math==Math&&e};e.exports=n("object"==typeof globalThis&&globalThis)||n("object"==typeof window&&window)||n("object"==typeof self&&self)||n("object"==typeof r.g&&r.g)||function(){return this}()||Function("return this")()},(e,t,r)=>{const n=r(42),{MAX_LENGTH:s,MAX_SAFE_INTEGER:i}=r(41),{re:o,t:a}=r(23),l=r(43),{compareIdentifiers:c}=r(94);class u{constructor(e,t){if(t=l(t),e instanceof u){if(e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease)return e;e=e.version}else if("string"!=typeof e)throw new TypeError(`Invalid Version: ${e}`);if(e.length>s)throw new TypeError(`version is longer than ${s} characters`);n("SemVer",e,t),this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease;const r=e.trim().match(t.loose?o[a.LOOSE]:o[a.FULL]);if(!r)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+r[1],this.minor=+r[2],this.patch=+r[3],this.major>i||this.major<0)throw new TypeError("Invalid major version");if(this.minor>i||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>i||this.patch<0)throw new TypeError("Invalid patch version");r[4]?this.prerelease=r[4].split(".").map((e=>{if(/^[0-9]+$/.test(e)){const t=+e;if(t>=0&&t=0;)"number"==typeof this.prerelease[e]&&(this.prerelease[e]++,e=-2);-1===e&&this.prerelease.push(0)}t&&(this.prerelease[0]===t?isNaN(this.prerelease[1])&&(this.prerelease=[t,0]):this.prerelease=[t,0]);break;default:throw new Error(`invalid increment argument: ${e}`)}return this.format(),this.raw=this.version,this}}e.exports=u},(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.declare=function(e){return(t,s,i)=>{var o;let a;for(const e of Object.keys(r)){var l;t[e]||(a=null!=(l=a)?l:n(t),a[e]=r[e](a))}return e(null!=(o=a)?o:t,s||{},i)}};const r={assertVersion:e=>t=>{!function(e,t){if("number"==typeof e){if(!Number.isInteger(e))throw new Error("Expected string or integer value.");e=`^${e}.0.0-0`}if("string"!=typeof e)throw new Error("Expected string or integer value.");const r=Error.stackTraceLimit;let n;throw"number"==typeof r&&r<25&&(Error.stackTraceLimit=25),n="7."===t.slice(0,2)?new Error(`Requires Babel "^7.0.0-beta.41", but was loaded with "${t}". You'll need to update your @babel/core version.`):new Error(`Requires Babel "${e}", but was loaded with "${t}". If you are sure you have a compatible version of @babel/core, it is likely that something in your build process is loading the wrong version. Inspect the stack trace of this error to look for the first entry that doesn't mention "@babel/core" or "babel-core" to see what is calling Babel.`),"number"==typeof r&&(Error.stackTraceLimit=r),Object.assign(n,{code:"BABEL_VERSION_UNSUPPORTED",version:t,range:e})}(t,e.version)},targets:()=>()=>({}),assumption:()=>()=>{}};function n(e){let t=null;return"string"==typeof e.version&&/^7\./.test(e.version)&&(t=Object.getPrototypeOf(e),!t||s(t,"version")&&s(t,"transform")&&s(t,"template")&&s(t,"types")||(t=null)),Object.assign({},t,e)}function s(e,t){return Object.prototype.hasOwnProperty.call(e,t)}},(e,t)=>{"use strict";t.__esModule=!0,t.UNIVERSAL=t.ATTRIBUTE=t.CLASS=t.COMBINATOR=t.COMMENT=t.ID=t.NESTING=t.PSEUDO=t.ROOT=t.SELECTOR=t.STRING=t.TAG=void 0,t.TAG="tag",t.STRING="string",t.SELECTOR="selector",t.ROOT="root",t.PSEUDO="pseudo",t.NESTING="nesting",t.ID="id",t.COMMENT="comment",t.COMBINATOR="combinator",t.CLASS="class",t.ATTRIBUTE="attribute",t.UNIVERSAL="universal"},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.arrayExpression=function(e){return(0,n.default)("ArrayExpression",...arguments)},t.assignmentExpression=function(e,t,r){return(0,n.default)("AssignmentExpression",...arguments)},t.binaryExpression=function(e,t,r){return(0,n.default)("BinaryExpression",...arguments)},t.interpreterDirective=function(e){return(0,n.default)("InterpreterDirective",...arguments)},t.directive=function(e){return(0,n.default)("Directive",...arguments)},t.directiveLiteral=function(e){return(0,n.default)("DirectiveLiteral",...arguments)},t.blockStatement=function(e,t){return(0,n.default)("BlockStatement",...arguments)},t.breakStatement=function(e){return(0,n.default)("BreakStatement",...arguments)},t.callExpression=function(e,t){return(0,n.default)("CallExpression",...arguments)},t.catchClause=function(e,t){return(0,n.default)("CatchClause",...arguments)},t.conditionalExpression=function(e,t,r){return(0,n.default)("ConditionalExpression",...arguments)},t.continueStatement=function(e){return(0,n.default)("ContinueStatement",...arguments)},t.debuggerStatement=function(){return(0,n.default)("DebuggerStatement",...arguments)},t.doWhileStatement=function(e,t){return(0,n.default)("DoWhileStatement",...arguments)},t.emptyStatement=function(){return(0,n.default)("EmptyStatement",...arguments)},t.expressionStatement=function(e){return(0,n.default)("ExpressionStatement",...arguments)},t.file=function(e,t,r){return(0,n.default)("File",...arguments)},t.forInStatement=function(e,t,r){return(0,n.default)("ForInStatement",...arguments)},t.forStatement=function(e,t,r,s){return(0,n.default)("ForStatement",...arguments)},t.functionDeclaration=function(e,t,r,s,i){return(0,n.default)("FunctionDeclaration",...arguments)},t.functionExpression=function(e,t,r,s,i){return(0,n.default)("FunctionExpression",...arguments)},t.identifier=function(e){return(0,n.default)("Identifier",...arguments)},t.ifStatement=function(e,t,r){return(0,n.default)("IfStatement",...arguments)},t.labeledStatement=function(e,t){return(0,n.default)("LabeledStatement",...arguments)},t.stringLiteral=function(e){return(0,n.default)("StringLiteral",...arguments)},t.numericLiteral=function(e){return(0,n.default)("NumericLiteral",...arguments)},t.nullLiteral=function(){return(0,n.default)("NullLiteral",...arguments)},t.booleanLiteral=function(e){return(0,n.default)("BooleanLiteral",...arguments)},t.regExpLiteral=function(e,t){return(0,n.default)("RegExpLiteral",...arguments)},t.logicalExpression=function(e,t,r){return(0,n.default)("LogicalExpression",...arguments)},t.memberExpression=function(e,t,r,s){return(0,n.default)("MemberExpression",...arguments)},t.newExpression=function(e,t){return(0,n.default)("NewExpression",...arguments)},t.program=function(e,t,r,s){return(0,n.default)("Program",...arguments)},t.objectExpression=function(e){return(0,n.default)("ObjectExpression",...arguments)},t.objectMethod=function(e,t,r,s,i,o,a){return(0,n.default)("ObjectMethod",...arguments)},t.objectProperty=function(e,t,r,s,i){return(0,n.default)("ObjectProperty",...arguments)},t.restElement=function(e){return(0,n.default)("RestElement",...arguments)},t.returnStatement=function(e){return(0,n.default)("ReturnStatement",...arguments)},t.sequenceExpression=function(e){return(0,n.default)("SequenceExpression",...arguments)},t.parenthesizedExpression=function(e){return(0,n.default)("ParenthesizedExpression",...arguments)},t.switchCase=function(e,t){return(0,n.default)("SwitchCase",...arguments)},t.switchStatement=function(e,t){return(0,n.default)("SwitchStatement",...arguments)},t.thisExpression=function(){return(0,n.default)("ThisExpression",...arguments)},t.throwStatement=function(e){return(0,n.default)("ThrowStatement",...arguments)},t.tryStatement=function(e,t,r){return(0,n.default)("TryStatement",...arguments)},t.unaryExpression=function(e,t,r){return(0,n.default)("UnaryExpression",...arguments)},t.updateExpression=function(e,t,r){return(0,n.default)("UpdateExpression",...arguments)},t.variableDeclaration=function(e,t){return(0,n.default)("VariableDeclaration",...arguments)},t.variableDeclarator=function(e,t){return(0,n.default)("VariableDeclarator",...arguments)},t.whileStatement=function(e,t){return(0,n.default)("WhileStatement",...arguments)},t.withStatement=function(e,t){return(0,n.default)("WithStatement",...arguments)},t.assignmentPattern=function(e,t){return(0,n.default)("AssignmentPattern",...arguments)},t.arrayPattern=function(e){return(0,n.default)("ArrayPattern",...arguments)},t.arrowFunctionExpression=function(e,t,r){return(0,n.default)("ArrowFunctionExpression",...arguments)},t.classBody=function(e){return(0,n.default)("ClassBody",...arguments)},t.classExpression=function(e,t,r,s){return(0,n.default)("ClassExpression",...arguments)},t.classDeclaration=function(e,t,r,s){return(0,n.default)("ClassDeclaration",...arguments)},t.exportAllDeclaration=function(e){return(0,n.default)("ExportAllDeclaration",...arguments)},t.exportDefaultDeclaration=function(e){return(0,n.default)("ExportDefaultDeclaration",...arguments)},t.exportNamedDeclaration=function(e,t,r){return(0,n.default)("ExportNamedDeclaration",...arguments)},t.exportSpecifier=function(e,t){return(0,n.default)("ExportSpecifier",...arguments)},t.forOfStatement=function(e,t,r,s){return(0,n.default)("ForOfStatement",...arguments)},t.importDeclaration=function(e,t){return(0,n.default)("ImportDeclaration",...arguments)},t.importDefaultSpecifier=function(e){return(0,n.default)("ImportDefaultSpecifier",...arguments)},t.importNamespaceSpecifier=function(e){return(0,n.default)("ImportNamespaceSpecifier",...arguments)},t.importSpecifier=function(e,t){return(0,n.default)("ImportSpecifier",...arguments)},t.metaProperty=function(e,t){return(0,n.default)("MetaProperty",...arguments)},t.classMethod=function(e,t,r,s,i,o,a,l){return(0,n.default)("ClassMethod",...arguments)},t.objectPattern=function(e){return(0,n.default)("ObjectPattern",...arguments)},t.spreadElement=function(e){return(0,n.default)("SpreadElement",...arguments)},t.super=function(){return(0,n.default)("Super",...arguments)},t.taggedTemplateExpression=function(e,t){return(0,n.default)("TaggedTemplateExpression",...arguments)},t.templateElement=function(e,t){return(0,n.default)("TemplateElement",...arguments)},t.templateLiteral=function(e,t){return(0,n.default)("TemplateLiteral",...arguments)},t.yieldExpression=function(e,t){return(0,n.default)("YieldExpression",...arguments)},t.awaitExpression=function(e){return(0,n.default)("AwaitExpression",...arguments)},t.import=function(){return(0,n.default)("Import",...arguments)},t.bigIntLiteral=function(e){return(0,n.default)("BigIntLiteral",...arguments)},t.exportNamespaceSpecifier=function(e){return(0,n.default)("ExportNamespaceSpecifier",...arguments)},t.optionalMemberExpression=function(e,t,r,s){return(0,n.default)("OptionalMemberExpression",...arguments)},t.optionalCallExpression=function(e,t,r){return(0,n.default)("OptionalCallExpression",...arguments)},t.anyTypeAnnotation=function(){return(0,n.default)("AnyTypeAnnotation",...arguments)},t.arrayTypeAnnotation=function(e){return(0,n.default)("ArrayTypeAnnotation",...arguments)},t.booleanTypeAnnotation=function(){return(0,n.default)("BooleanTypeAnnotation",...arguments)},t.booleanLiteralTypeAnnotation=function(e){return(0,n.default)("BooleanLiteralTypeAnnotation",...arguments)},t.nullLiteralTypeAnnotation=function(){return(0,n.default)("NullLiteralTypeAnnotation",...arguments)},t.classImplements=function(e,t){return(0,n.default)("ClassImplements",...arguments)},t.declareClass=function(e,t,r,s){return(0,n.default)("DeclareClass",...arguments)},t.declareFunction=function(e){return(0,n.default)("DeclareFunction",...arguments)},t.declareInterface=function(e,t,r,s){return(0,n.default)("DeclareInterface",...arguments)},t.declareModule=function(e,t,r){return(0,n.default)("DeclareModule",...arguments)},t.declareModuleExports=function(e){return(0,n.default)("DeclareModuleExports",...arguments)},t.declareTypeAlias=function(e,t,r){return(0,n.default)("DeclareTypeAlias",...arguments)},t.declareOpaqueType=function(e,t,r){return(0,n.default)("DeclareOpaqueType",...arguments)},t.declareVariable=function(e){return(0,n.default)("DeclareVariable",...arguments)},t.declareExportDeclaration=function(e,t,r){return(0,n.default)("DeclareExportDeclaration",...arguments)},t.declareExportAllDeclaration=function(e){return(0,n.default)("DeclareExportAllDeclaration",...arguments)},t.declaredPredicate=function(e){return(0,n.default)("DeclaredPredicate",...arguments)},t.existsTypeAnnotation=function(){return(0,n.default)("ExistsTypeAnnotation",...arguments)},t.functionTypeAnnotation=function(e,t,r,s){return(0,n.default)("FunctionTypeAnnotation",...arguments)},t.functionTypeParam=function(e,t){return(0,n.default)("FunctionTypeParam",...arguments)},t.genericTypeAnnotation=function(e,t){return(0,n.default)("GenericTypeAnnotation",...arguments)},t.inferredPredicate=function(){return(0,n.default)("InferredPredicate",...arguments)},t.interfaceExtends=function(e,t){return(0,n.default)("InterfaceExtends",...arguments)},t.interfaceDeclaration=function(e,t,r,s){return(0,n.default)("InterfaceDeclaration",...arguments)},t.interfaceTypeAnnotation=function(e,t){return(0,n.default)("InterfaceTypeAnnotation",...arguments)},t.intersectionTypeAnnotation=function(e){return(0,n.default)("IntersectionTypeAnnotation",...arguments)},t.mixedTypeAnnotation=function(){return(0,n.default)("MixedTypeAnnotation",...arguments)},t.emptyTypeAnnotation=function(){return(0,n.default)("EmptyTypeAnnotation",...arguments)},t.nullableTypeAnnotation=function(e){return(0,n.default)("NullableTypeAnnotation",...arguments)},t.numberLiteralTypeAnnotation=function(e){return(0,n.default)("NumberLiteralTypeAnnotation",...arguments)},t.numberTypeAnnotation=function(){return(0,n.default)("NumberTypeAnnotation",...arguments)},t.objectTypeAnnotation=function(e,t,r,s,i){return(0,n.default)("ObjectTypeAnnotation",...arguments)},t.objectTypeInternalSlot=function(e,t,r,s,i){return(0,n.default)("ObjectTypeInternalSlot",...arguments)},t.objectTypeCallProperty=function(e){return(0,n.default)("ObjectTypeCallProperty",...arguments)},t.objectTypeIndexer=function(e,t,r,s){return(0,n.default)("ObjectTypeIndexer",...arguments)},t.objectTypeProperty=function(e,t,r){return(0,n.default)("ObjectTypeProperty",...arguments)},t.objectTypeSpreadProperty=function(e){return(0,n.default)("ObjectTypeSpreadProperty",...arguments)},t.opaqueType=function(e,t,r,s){return(0,n.default)("OpaqueType",...arguments)},t.qualifiedTypeIdentifier=function(e,t){return(0,n.default)("QualifiedTypeIdentifier",...arguments)},t.stringLiteralTypeAnnotation=function(e){return(0,n.default)("StringLiteralTypeAnnotation",...arguments)},t.stringTypeAnnotation=function(){return(0,n.default)("StringTypeAnnotation",...arguments)},t.symbolTypeAnnotation=function(){return(0,n.default)("SymbolTypeAnnotation",...arguments)},t.thisTypeAnnotation=function(){return(0,n.default)("ThisTypeAnnotation",...arguments)},t.tupleTypeAnnotation=function(e){return(0,n.default)("TupleTypeAnnotation",...arguments)},t.typeofTypeAnnotation=function(e){return(0,n.default)("TypeofTypeAnnotation",...arguments)},t.typeAlias=function(e,t,r){return(0,n.default)("TypeAlias",...arguments)},t.typeAnnotation=function(e){return(0,n.default)("TypeAnnotation",...arguments)},t.typeCastExpression=function(e,t){return(0,n.default)("TypeCastExpression",...arguments)},t.typeParameter=function(e,t,r){return(0,n.default)("TypeParameter",...arguments)},t.typeParameterDeclaration=function(e){return(0,n.default)("TypeParameterDeclaration",...arguments)},t.typeParameterInstantiation=function(e){return(0,n.default)("TypeParameterInstantiation",...arguments)},t.unionTypeAnnotation=function(e){return(0,n.default)("UnionTypeAnnotation",...arguments)},t.variance=function(e){return(0,n.default)("Variance",...arguments)},t.voidTypeAnnotation=function(){return(0,n.default)("VoidTypeAnnotation",...arguments)},t.enumDeclaration=function(e,t){return(0,n.default)("EnumDeclaration",...arguments)},t.enumBooleanBody=function(e){return(0,n.default)("EnumBooleanBody",...arguments)},t.enumNumberBody=function(e){return(0,n.default)("EnumNumberBody",...arguments)},t.enumStringBody=function(e){return(0,n.default)("EnumStringBody",...arguments)},t.enumSymbolBody=function(e){return(0,n.default)("EnumSymbolBody",...arguments)},t.enumBooleanMember=function(e){return(0,n.default)("EnumBooleanMember",...arguments)},t.enumNumberMember=function(e,t){return(0,n.default)("EnumNumberMember",...arguments)},t.enumStringMember=function(e,t){return(0,n.default)("EnumStringMember",...arguments)},t.enumDefaultedMember=function(e){return(0,n.default)("EnumDefaultedMember",...arguments)},t.indexedAccessType=function(e,t){return(0,n.default)("IndexedAccessType",...arguments)},t.optionalIndexedAccessType=function(e,t){return(0,n.default)("OptionalIndexedAccessType",...arguments)},t.jSXAttribute=t.jsxAttribute=function(e,t){return(0,n.default)("JSXAttribute",...arguments)},t.jSXClosingElement=t.jsxClosingElement=function(e){return(0,n.default)("JSXClosingElement",...arguments)},t.jSXElement=t.jsxElement=function(e,t,r,s){return(0,n.default)("JSXElement",...arguments)},t.jSXEmptyExpression=t.jsxEmptyExpression=function(){return(0,n.default)("JSXEmptyExpression",...arguments)},t.jSXExpressionContainer=t.jsxExpressionContainer=function(e){return(0,n.default)("JSXExpressionContainer",...arguments)},t.jSXSpreadChild=t.jsxSpreadChild=function(e){return(0,n.default)("JSXSpreadChild",...arguments)},t.jSXIdentifier=t.jsxIdentifier=function(e){return(0,n.default)("JSXIdentifier",...arguments)},t.jSXMemberExpression=t.jsxMemberExpression=function(e,t){return(0,n.default)("JSXMemberExpression",...arguments)},t.jSXNamespacedName=t.jsxNamespacedName=function(e,t){return(0,n.default)("JSXNamespacedName",...arguments)},t.jSXOpeningElement=t.jsxOpeningElement=function(e,t,r){return(0,n.default)("JSXOpeningElement",...arguments)},t.jSXSpreadAttribute=t.jsxSpreadAttribute=function(e){return(0,n.default)("JSXSpreadAttribute",...arguments)},t.jSXText=t.jsxText=function(e){return(0,n.default)("JSXText",...arguments)},t.jSXFragment=t.jsxFragment=function(e,t,r){return(0,n.default)("JSXFragment",...arguments)},t.jSXOpeningFragment=t.jsxOpeningFragment=function(){return(0,n.default)("JSXOpeningFragment",...arguments)},t.jSXClosingFragment=t.jsxClosingFragment=function(){return(0,n.default)("JSXClosingFragment",...arguments)},t.noop=function(){return(0,n.default)("Noop",...arguments)},t.placeholder=function(e,t){return(0,n.default)("Placeholder",...arguments)},t.v8IntrinsicIdentifier=function(e){return(0,n.default)("V8IntrinsicIdentifier",...arguments)},t.argumentPlaceholder=function(){return(0,n.default)("ArgumentPlaceholder",...arguments)},t.bindExpression=function(e,t){return(0,n.default)("BindExpression",...arguments)},t.classProperty=function(e,t,r,s,i,o){return(0,n.default)("ClassProperty",...arguments)},t.pipelineTopicExpression=function(e){return(0,n.default)("PipelineTopicExpression",...arguments)},t.pipelineBareFunction=function(e){return(0,n.default)("PipelineBareFunction",...arguments)},t.pipelinePrimaryTopicReference=function(){return(0,n.default)("PipelinePrimaryTopicReference",...arguments)},t.classPrivateProperty=function(e,t,r,s){return(0,n.default)("ClassPrivateProperty",...arguments)},t.classPrivateMethod=function(e,t,r,s,i){return(0,n.default)("ClassPrivateMethod",...arguments)},t.importAttribute=function(e,t){return(0,n.default)("ImportAttribute",...arguments)},t.decorator=function(e){return(0,n.default)("Decorator",...arguments)},t.doExpression=function(e,t){return(0,n.default)("DoExpression",...arguments)},t.exportDefaultSpecifier=function(e){return(0,n.default)("ExportDefaultSpecifier",...arguments)},t.privateName=function(e){return(0,n.default)("PrivateName",...arguments)},t.recordExpression=function(e){return(0,n.default)("RecordExpression",...arguments)},t.tupleExpression=function(e){return(0,n.default)("TupleExpression",...arguments)},t.decimalLiteral=function(e){return(0,n.default)("DecimalLiteral",...arguments)},t.staticBlock=function(e){return(0,n.default)("StaticBlock",...arguments)},t.moduleExpression=function(e){return(0,n.default)("ModuleExpression",...arguments)},t.tSParameterProperty=t.tsParameterProperty=function(e){return(0,n.default)("TSParameterProperty",...arguments)},t.tSDeclareFunction=t.tsDeclareFunction=function(e,t,r,s){return(0,n.default)("TSDeclareFunction",...arguments)},t.tSDeclareMethod=t.tsDeclareMethod=function(e,t,r,s,i){return(0,n.default)("TSDeclareMethod",...arguments)},t.tSQualifiedName=t.tsQualifiedName=function(e,t){return(0,n.default)("TSQualifiedName",...arguments)},t.tSCallSignatureDeclaration=t.tsCallSignatureDeclaration=function(e,t,r){return(0,n.default)("TSCallSignatureDeclaration",...arguments)},t.tSConstructSignatureDeclaration=t.tsConstructSignatureDeclaration=function(e,t,r){return(0,n.default)("TSConstructSignatureDeclaration",...arguments)},t.tSPropertySignature=t.tsPropertySignature=function(e,t,r){return(0,n.default)("TSPropertySignature",...arguments)},t.tSMethodSignature=t.tsMethodSignature=function(e,t,r,s){return(0,n.default)("TSMethodSignature",...arguments)},t.tSIndexSignature=t.tsIndexSignature=function(e,t){return(0,n.default)("TSIndexSignature",...arguments)},t.tSAnyKeyword=t.tsAnyKeyword=function(){return(0,n.default)("TSAnyKeyword",...arguments)},t.tSBooleanKeyword=t.tsBooleanKeyword=function(){return(0,n.default)("TSBooleanKeyword",...arguments)},t.tSBigIntKeyword=t.tsBigIntKeyword=function(){return(0,n.default)("TSBigIntKeyword",...arguments)},t.tSIntrinsicKeyword=t.tsIntrinsicKeyword=function(){return(0,n.default)("TSIntrinsicKeyword",...arguments)},t.tSNeverKeyword=t.tsNeverKeyword=function(){return(0,n.default)("TSNeverKeyword",...arguments)},t.tSNullKeyword=t.tsNullKeyword=function(){return(0,n.default)("TSNullKeyword",...arguments)},t.tSNumberKeyword=t.tsNumberKeyword=function(){return(0,n.default)("TSNumberKeyword",...arguments)},t.tSObjectKeyword=t.tsObjectKeyword=function(){return(0,n.default)("TSObjectKeyword",...arguments)},t.tSStringKeyword=t.tsStringKeyword=function(){return(0,n.default)("TSStringKeyword",...arguments)},t.tSSymbolKeyword=t.tsSymbolKeyword=function(){return(0,n.default)("TSSymbolKeyword",...arguments)},t.tSUndefinedKeyword=t.tsUndefinedKeyword=function(){return(0,n.default)("TSUndefinedKeyword",...arguments)},t.tSUnknownKeyword=t.tsUnknownKeyword=function(){return(0,n.default)("TSUnknownKeyword",...arguments)},t.tSVoidKeyword=t.tsVoidKeyword=function(){return(0,n.default)("TSVoidKeyword",...arguments)},t.tSThisType=t.tsThisType=function(){return(0,n.default)("TSThisType",...arguments)},t.tSFunctionType=t.tsFunctionType=function(e,t,r){return(0,n.default)("TSFunctionType",...arguments)},t.tSConstructorType=t.tsConstructorType=function(e,t,r){return(0,n.default)("TSConstructorType",...arguments)},t.tSTypeReference=t.tsTypeReference=function(e,t){return(0,n.default)("TSTypeReference",...arguments)},t.tSTypePredicate=t.tsTypePredicate=function(e,t,r){return(0,n.default)("TSTypePredicate",...arguments)},t.tSTypeQuery=t.tsTypeQuery=function(e){return(0,n.default)("TSTypeQuery",...arguments)},t.tSTypeLiteral=t.tsTypeLiteral=function(e){return(0,n.default)("TSTypeLiteral",...arguments)},t.tSArrayType=t.tsArrayType=function(e){return(0,n.default)("TSArrayType",...arguments)},t.tSTupleType=t.tsTupleType=function(e){return(0,n.default)("TSTupleType",...arguments)},t.tSOptionalType=t.tsOptionalType=function(e){return(0,n.default)("TSOptionalType",...arguments)},t.tSRestType=t.tsRestType=function(e){return(0,n.default)("TSRestType",...arguments)},t.tSNamedTupleMember=t.tsNamedTupleMember=function(e,t,r){return(0,n.default)("TSNamedTupleMember",...arguments)},t.tSUnionType=t.tsUnionType=function(e){return(0,n.default)("TSUnionType",...arguments)},t.tSIntersectionType=t.tsIntersectionType=function(e){return(0,n.default)("TSIntersectionType",...arguments)},t.tSConditionalType=t.tsConditionalType=function(e,t,r,s){return(0,n.default)("TSConditionalType",...arguments)},t.tSInferType=t.tsInferType=function(e){return(0,n.default)("TSInferType",...arguments)},t.tSParenthesizedType=t.tsParenthesizedType=function(e){return(0,n.default)("TSParenthesizedType",...arguments)},t.tSTypeOperator=t.tsTypeOperator=function(e){return(0,n.default)("TSTypeOperator",...arguments)},t.tSIndexedAccessType=t.tsIndexedAccessType=function(e,t){return(0,n.default)("TSIndexedAccessType",...arguments)},t.tSMappedType=t.tsMappedType=function(e,t,r){return(0,n.default)("TSMappedType",...arguments)},t.tSLiteralType=t.tsLiteralType=function(e){return(0,n.default)("TSLiteralType",...arguments)},t.tSExpressionWithTypeArguments=t.tsExpressionWithTypeArguments=function(e,t){return(0,n.default)("TSExpressionWithTypeArguments",...arguments)},t.tSInterfaceDeclaration=t.tsInterfaceDeclaration=function(e,t,r,s){return(0,n.default)("TSInterfaceDeclaration",...arguments)},t.tSInterfaceBody=t.tsInterfaceBody=function(e){return(0,n.default)("TSInterfaceBody",...arguments)},t.tSTypeAliasDeclaration=t.tsTypeAliasDeclaration=function(e,t,r){return(0,n.default)("TSTypeAliasDeclaration",...arguments)},t.tSAsExpression=t.tsAsExpression=function(e,t){return(0,n.default)("TSAsExpression",...arguments)},t.tSTypeAssertion=t.tsTypeAssertion=function(e,t){return(0,n.default)("TSTypeAssertion",...arguments)},t.tSEnumDeclaration=t.tsEnumDeclaration=function(e,t){return(0,n.default)("TSEnumDeclaration",...arguments)},t.tSEnumMember=t.tsEnumMember=function(e,t){return(0,n.default)("TSEnumMember",...arguments)},t.tSModuleDeclaration=t.tsModuleDeclaration=function(e,t){return(0,n.default)("TSModuleDeclaration",...arguments)},t.tSModuleBlock=t.tsModuleBlock=function(e){return(0,n.default)("TSModuleBlock",...arguments)},t.tSImportType=t.tsImportType=function(e,t,r){return(0,n.default)("TSImportType",...arguments)},t.tSImportEqualsDeclaration=t.tsImportEqualsDeclaration=function(e,t){return(0,n.default)("TSImportEqualsDeclaration",...arguments)},t.tSExternalModuleReference=t.tsExternalModuleReference=function(e){return(0,n.default)("TSExternalModuleReference",...arguments)},t.tSNonNullExpression=t.tsNonNullExpression=function(e){return(0,n.default)("TSNonNullExpression",...arguments)},t.tSExportAssignment=t.tsExportAssignment=function(e){return(0,n.default)("TSExportAssignment",...arguments)},t.tSNamespaceExportDeclaration=t.tsNamespaceExportDeclaration=function(e){return(0,n.default)("TSNamespaceExportDeclaration",...arguments)},t.tSTypeAnnotation=t.tsTypeAnnotation=function(e){return(0,n.default)("TSTypeAnnotation",...arguments)},t.tSTypeParameterInstantiation=t.tsTypeParameterInstantiation=function(e){return(0,n.default)("TSTypeParameterInstantiation",...arguments)},t.tSTypeParameterDeclaration=t.tsTypeParameterDeclaration=function(e){return(0,n.default)("TSTypeParameterDeclaration",...arguments)},t.tSTypeParameter=t.tsTypeParameter=function(e,t,r){return(0,n.default)("TSTypeParameter",...arguments)},t.numberLiteral=function(...e){return(0,n.default)("NumberLiteral",...e)},t.regexLiteral=function(...e){return(0,n.default)("RegexLiteral",...e)},t.restProperty=function(...e){return(0,n.default)("RestProperty",...e)},t.spreadProperty=function(...e){return(0,n.default)("SpreadProperty",...e)};var n=r(367)},e=>{var t,r,n=e.exports={};function s(){throw new Error("setTimeout has not been defined")}function i(){throw new Error("clearTimeout has not been defined")}function o(e){if(t===setTimeout)return setTimeout(e,0);if((t===s||!t)&&setTimeout)return t=setTimeout,setTimeout(e,0);try{return t(e,0)}catch(r){try{return t.call(null,e,0)}catch(r){return t.call(this,e,0)}}}!function(){try{t="function"==typeof setTimeout?setTimeout:s}catch(e){t=s}try{r="function"==typeof clearTimeout?clearTimeout:i}catch(e){r=i}}();var a,l=[],c=!1,u=-1;function p(){c&&a&&(c=!1,a.length?l=a.concat(l):u=-1,l.length&&f())}function f(){if(!c){var e=o(p);c=!0;for(var t=l.length;t;){for(a=l,l=[];++u1)for(var r=1;r{"use strict";var n=r(7);function s(e){if("string"!=typeof e)throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}function i(e,t){for(var r,n="",s=0,i=-1,o=0,a=0;a<=e.length;++a){if(a2){var l=n.lastIndexOf("/");if(l!==n.length-1){-1===l?(n="",s=0):s=(n=n.slice(0,l)).length-1-n.lastIndexOf("/"),i=a,o=0;continue}}else if(2===n.length||1===n.length){n="",s=0,i=a,o=0;continue}t&&(n.length>0?n+="/..":n="..",s=2)}else n.length>0?n+="/"+e.slice(i+1,a):n=e.slice(i+1,a),s=a-i-1;i=a,o=0}else 46===r&&-1!==o?++o:o=-1}return n}var o={resolve:function(){for(var e,t="",r=!1,o=arguments.length-1;o>=-1&&!r;o--){var a;o>=0?a=arguments[o]:(void 0===e&&(e=n.cwd()),a=e),s(a),0!==a.length&&(t=a+"/"+t,r=47===a.charCodeAt(0))}return t=i(t,!r),r?t.length>0?"/"+t:"/":t.length>0?t:"."},normalize:function(e){if(s(e),0===e.length)return".";var t=47===e.charCodeAt(0),r=47===e.charCodeAt(e.length-1);return 0!==(e=i(e,!t)).length||t||(e="."),e.length>0&&r&&(e+="/"),t?"/"+e:e},isAbsolute:function(e){return s(e),e.length>0&&47===e.charCodeAt(0)},join:function(){if(0===arguments.length)return".";for(var e,t=0;t0&&(void 0===e?e=r:e+="/"+r)}return void 0===e?".":o.normalize(e)},relative:function(e,t){if(s(e),s(t),e===t)return"";if((e=o.resolve(e))===(t=o.resolve(t)))return"";for(var r=1;rc){if(47===t.charCodeAt(a+p))return t.slice(a+p+1);if(0===p)return t.slice(a+p)}else i>c&&(47===e.charCodeAt(r+p)?u=p:0===p&&(u=0));break}var f=e.charCodeAt(r+p);if(f!==t.charCodeAt(a+p))break;47===f&&(u=p)}var d="";for(p=r+u+1;p<=n;++p)p!==n&&47!==e.charCodeAt(p)||(0===d.length?d+="..":d+="/..");return d.length>0?d+t.slice(a+u):(a+=u,47===t.charCodeAt(a)&&++a,t.slice(a))},_makeLong:function(e){return e},dirname:function(e){if(s(e),0===e.length)return".";for(var t=e.charCodeAt(0),r=47===t,n=-1,i=!0,o=e.length-1;o>=1;--o)if(47===(t=e.charCodeAt(o))){if(!i){n=o;break}}else i=!1;return-1===n?r?"/":".":r&&1===n?"//":e.slice(0,n)},basename:function(e,t){if(void 0!==t&&"string"!=typeof t)throw new TypeError('"ext" argument must be a string');s(e);var r,n=0,i=-1,o=!0;if(void 0!==t&&t.length>0&&t.length<=e.length){if(t.length===e.length&&t===e)return"";var a=t.length-1,l=-1;for(r=e.length-1;r>=0;--r){var c=e.charCodeAt(r);if(47===c){if(!o){n=r+1;break}}else-1===l&&(o=!1,l=r+1),a>=0&&(c===t.charCodeAt(a)?-1==--a&&(i=r):(a=-1,i=l))}return n===i?i=l:-1===i&&(i=e.length),e.slice(n,i)}for(r=e.length-1;r>=0;--r)if(47===e.charCodeAt(r)){if(!o){n=r+1;break}}else-1===i&&(o=!1,i=r+1);return-1===i?"":e.slice(n,i)},extname:function(e){s(e);for(var t=-1,r=0,n=-1,i=!0,o=0,a=e.length-1;a>=0;--a){var l=e.charCodeAt(a);if(47!==l)-1===n&&(i=!1,n=a+1),46===l?-1===t?t=a:1!==o&&(o=1):-1!==t&&(o=-1);else if(!i){r=a+1;break}}return-1===t||-1===n||0===o||1===o&&t===n-1&&t===r+1?"":e.slice(t,n)},format:function(e){if(null===e||"object"!=typeof e)throw new TypeError('The "pathObject" argument must be of type Object. Received type '+typeof e);return function(e,t){var r=t.dir||t.root,n=t.base||(t.name||"")+(t.ext||"");return r?r===t.root?r+n:r+"/"+n:n}(0,e)},parse:function(e){s(e);var t={root:"",dir:"",base:"",ext:"",name:""};if(0===e.length)return t;var r,n=e.charCodeAt(0),i=47===n;i?(t.root="/",r=1):r=0;for(var o=-1,a=0,l=-1,c=!0,u=e.length-1,p=0;u>=r;--u)if(47!==(n=e.charCodeAt(u)))-1===l&&(c=!1,l=u+1),46===n?-1===o?o=u:1!==p&&(p=1):-1!==o&&(p=-1);else if(!c){a=u+1;break}return-1===o||-1===l||0===p||1===p&&o===l-1&&o===a+1?-1!==l&&(t.base=t.name=0===a&&i?e.slice(1,l):e.slice(a,l)):(0===a&&i?(t.name=e.slice(1,o),t.base=e.slice(1,l)):(t.name=e.slice(a,o),t.base=e.slice(a,l)),t.ext=e.slice(o,l)),a>0?t.dir=e.slice(0,a-1):i&&(t.dir="/"),t},sep:"/",delimiter:":",win32:null,posix:null};o.posix=o,e.exports=o},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Plugin=function(e){throw new Error(`The (${e}) Babel 5 plugin is being run with an unsupported Babel version.`)},Object.defineProperty(t,"File",{enumerable:!0,get:function(){return n.default}}),Object.defineProperty(t,"buildExternalHelpers",{enumerable:!0,get:function(){return s.default}}),Object.defineProperty(t,"resolvePlugin",{enumerable:!0,get:function(){return i.resolvePlugin}}),Object.defineProperty(t,"resolvePreset",{enumerable:!0,get:function(){return i.resolvePreset}}),Object.defineProperty(t,"getEnv",{enumerable:!0,get:function(){return o.getEnv}}),Object.defineProperty(t,"tokTypes",{enumerable:!0,get:function(){return l().tokTypes}}),Object.defineProperty(t,"traverse",{enumerable:!0,get:function(){return c().default}}),Object.defineProperty(t,"template",{enumerable:!0,get:function(){return u().default}}),Object.defineProperty(t,"createConfigItem",{enumerable:!0,get:function(){return p.createConfigItem}}),Object.defineProperty(t,"createConfigItemSync",{enumerable:!0,get:function(){return p.createConfigItemSync}}),Object.defineProperty(t,"createConfigItemAsync",{enumerable:!0,get:function(){return p.createConfigItemAsync}}),Object.defineProperty(t,"loadPartialConfig",{enumerable:!0,get:function(){return p.loadPartialConfig}}),Object.defineProperty(t,"loadPartialConfigSync",{enumerable:!0,get:function(){return p.loadPartialConfigSync}}),Object.defineProperty(t,"loadPartialConfigAsync",{enumerable:!0,get:function(){return p.loadPartialConfigAsync}}),Object.defineProperty(t,"loadOptions",{enumerable:!0,get:function(){return p.loadOptions}}),Object.defineProperty(t,"loadOptionsSync",{enumerable:!0,get:function(){return p.loadOptionsSync}}),Object.defineProperty(t,"loadOptionsAsync",{enumerable:!0,get:function(){return p.loadOptionsAsync}}),Object.defineProperty(t,"transform",{enumerable:!0,get:function(){return f.transform}}),Object.defineProperty(t,"transformSync",{enumerable:!0,get:function(){return f.transformSync}}),Object.defineProperty(t,"transformAsync",{enumerable:!0,get:function(){return f.transformAsync}}),Object.defineProperty(t,"transformFile",{enumerable:!0,get:function(){return d.transformFile}}),Object.defineProperty(t,"transformFileSync",{enumerable:!0,get:function(){return d.transformFileSync}}),Object.defineProperty(t,"transformFileAsync",{enumerable:!0,get:function(){return d.transformFileAsync}}),Object.defineProperty(t,"transformFromAst",{enumerable:!0,get:function(){return h.transformFromAst}}),Object.defineProperty(t,"transformFromAstSync",{enumerable:!0,get:function(){return h.transformFromAstSync}}),Object.defineProperty(t,"transformFromAstAsync",{enumerable:!0,get:function(){return h.transformFromAstAsync}}),Object.defineProperty(t,"parse",{enumerable:!0,get:function(){return m.parse}}),Object.defineProperty(t,"parseSync",{enumerable:!0,get:function(){return m.parseSync}}),Object.defineProperty(t,"parseAsync",{enumerable:!0,get:function(){return m.parseAsync}}),t.types=t.OptionManager=t.DEFAULT_EXTENSIONS=t.version=void 0;var n=r(126),s=r(465),i=r(77),o=r(286);function a(){const e=r(0);return a=function(){return e},e}function l(){const e=r(27);return l=function(){return e},e}function c(){const e=r(10);return c=function(){return e},e}function u(){const e=r(21);return u=function(){return e},e}Object.defineProperty(t,"types",{enumerable:!0,get:function(){return a()}});var p=r(78),f=r(486),d=r(498),h=r(499),m=r(500);t.version="7.14.6";const y=Object.freeze([".js",".jsx",".es6",".es",".mjs",".cjs"]);t.DEFAULT_EXTENSIONS=y,t.OptionManager=class{init(e){return(0,p.loadOptions)(e)}}},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"NodePath",{enumerable:!0,get:function(){return a.default}}),Object.defineProperty(t,"Scope",{enumerable:!0,get:function(){return l.default}}),Object.defineProperty(t,"Hub",{enumerable:!0,get:function(){return c.default}}),t.visitors=t.default=void 0;var n=r(362),s=r(455);t.visitors=s;var i=r(0),o=r(34),a=r(19),l=r(231),c=r(456);function u(e,t={},r,n,o){if(e){if(!t.noScope&&!r&&"Program"!==e.type&&"File"!==e.type)throw new Error(`You must pass a scope and parentPath unless traversing a Program/File. Instead of that you tried to traverse a ${e.type} node without passing scope and parentPath.`);i.VISITOR_KEYS[e.type]&&(s.explode(t),u.node(e,t,r,n,o))}}var p=u;function f(e,t){e.node.type===t.type&&(t.has=!0,e.stop())}t.default=p,u.visitors=s,u.verify=s.verify,u.explode=s.explode,u.cheap=function(e,t){return i.traverseFast(e,t)},u.node=function(e,t,r,s,o,a){const l=i.VISITOR_KEYS[e.type];if(!l)return;const c=new n.default(r,t,s,o);for(const t of l)if((!a||!a[t])&&c.visit(e,t))return},u.clearNode=function(e,t){i.removeProperties(e,t),o.path.delete(e)},u.removeProperties=function(e,t){return i.traverseFast(e,u.clearNode,t),e},u.hasType=function(e,t,r){if(null!=r&&r.includes(e.type))return!1;if(e.type===t)return!0;const n={has:!1,type:t};return u(e,{noScope:!0,denylist:r,enter:f},null,n),n.has},u.cache=o},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"VISITOR_KEYS",{enumerable:!0,get:function(){return s.VISITOR_KEYS}}),Object.defineProperty(t,"ALIAS_KEYS",{enumerable:!0,get:function(){return s.ALIAS_KEYS}}),Object.defineProperty(t,"FLIPPED_ALIAS_KEYS",{enumerable:!0,get:function(){return s.FLIPPED_ALIAS_KEYS}}),Object.defineProperty(t,"NODE_FIELDS",{enumerable:!0,get:function(){return s.NODE_FIELDS}}),Object.defineProperty(t,"BUILDER_KEYS",{enumerable:!0,get:function(){return s.BUILDER_KEYS}}),Object.defineProperty(t,"DEPRECATED_KEYS",{enumerable:!0,get:function(){return s.DEPRECATED_KEYS}}),Object.defineProperty(t,"NODE_PARENT_VALIDATIONS",{enumerable:!0,get:function(){return s.NODE_PARENT_VALIDATIONS}}),Object.defineProperty(t,"PLACEHOLDERS",{enumerable:!0,get:function(){return i.PLACEHOLDERS}}),Object.defineProperty(t,"PLACEHOLDERS_ALIAS",{enumerable:!0,get:function(){return i.PLACEHOLDERS_ALIAS}}),Object.defineProperty(t,"PLACEHOLDERS_FLIPPED_ALIAS",{enumerable:!0,get:function(){return i.PLACEHOLDERS_FLIPPED_ALIAS}}),t.TYPES=void 0;var n=r(215);r(128),r(370),r(371),r(372),r(373),r(374);var s=r(20),i=r(217);n(s.VISITOR_KEYS),n(s.ALIAS_KEYS),n(s.FLIPPED_ALIAS_KEYS),n(s.NODE_FIELDS),n(s.BUILDER_KEYS),n(s.DEPRECATED_KEYS),n(i.PLACEHOLDERS_ALIAS),n(i.PLACEHOLDERS_FLIPPED_ALIAS);const o=Object.keys(s.VISITOR_KEYS).concat(Object.keys(s.FLIPPED_ALIAS_KEYS)).concat(Object.keys(s.DEPRECATED_KEYS));t.TYPES=o},(e,t,r)=>{const n=r(3);e.exports=(e,t,r)=>new n(e,r).compare(new n(t,r))},(e,t,r)=>{class n{constructor(e,t){if(t=i(t),e instanceof n)return e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease?e:new n(e.raw,t);if(e instanceof o)return this.raw=e.value,this.set=[[e]],this.format(),this;if(this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease,this.raw=e,this.set=e.split(/\s*\|\|\s*/).map((e=>this.parseRange(e.trim()))).filter((e=>e.length)),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${e}`);if(this.set.length>1){const e=this.set[0];if(this.set=this.set.filter((e=>!h(e[0]))),0===this.set.length)this.set=[e];else if(this.set.length>1)for(const e of this.set)if(1===e.length&&m(e[0])){this.set=[e];break}}this.format()}format(){return this.range=this.set.map((e=>e.join(" ").trim())).join("||").trim(),this.range}toString(){return this.range}parseRange(e){e=e.trim();const t=`parseRange:${Object.keys(this.options).join(",")}:${e}`,r=s.get(t);if(r)return r;const n=this.options.loose,i=n?c[u.HYPHENRANGELOOSE]:c[u.HYPHENRANGE];e=e.replace(i,O(this.options.includePrerelease)),a("hyphen replace",e),e=e.replace(c[u.COMPARATORTRIM],p),a("comparator trim",e,c[u.COMPARATORTRIM]),e=(e=(e=e.replace(c[u.TILDETRIM],f)).replace(c[u.CARETTRIM],d)).split(/\s+/).join(" ");const l=n?c[u.COMPARATORLOOSE]:c[u.COMPARATOR],m=e.split(" ").map((e=>g(e,this.options))).join(" ").split(/\s+/).map((e=>A(e,this.options))).filter(this.options.loose?e=>!!e.match(l):()=>!0).map((e=>new o(e,this.options))),y=(m.length,new Map);for(const e of m){if(h(e))return[e];y.set(e.value,e)}y.size>1&&y.has("")&&y.delete("");const b=[...y.values()];return s.set(t,b),b}intersects(e,t){if(!(e instanceof n))throw new TypeError("a Range is required");return this.set.some((r=>y(r,t)&&e.set.some((e=>y(e,t)&&r.every((r=>e.every((e=>r.intersects(e,t)))))))))}test(e){if(!e)return!1;if("string"==typeof e)try{e=new l(e,this.options)}catch(e){return!1}for(let t=0;t"<0.0.0-0"===e.value,m=e=>""===e.value,y=(e,t)=>{let r=!0;const n=e.slice();let s=n.pop();for(;r&&n.length;)r=n.every((e=>s.intersects(e,t))),s=n.pop();return r},g=(e,t)=>(a("comp",e,t),e=x(e,t),a("caret",e),e=v(e,t),a("tildes",e),e=T(e,t),a("xrange",e),e=P(e,t),a("stars",e),e),b=e=>!e||"x"===e.toLowerCase()||"*"===e,v=(e,t)=>e.trim().split(/\s+/).map((e=>E(e,t))).join(" "),E=(e,t)=>{const r=t.loose?c[u.TILDELOOSE]:c[u.TILDE];return e.replace(r,((t,r,n,s,i)=>{let o;return a("tilde",e,t,r,n,s,i),b(r)?o="":b(n)?o=`>=${r}.0.0 <${+r+1}.0.0-0`:b(s)?o=`>=${r}.${n}.0 <${r}.${+n+1}.0-0`:i?(a("replaceTilde pr",i),o=`>=${r}.${n}.${s}-${i} <${r}.${+n+1}.0-0`):o=`>=${r}.${n}.${s} <${r}.${+n+1}.0-0`,a("tilde return",o),o}))},x=(e,t)=>e.trim().split(/\s+/).map((e=>S(e,t))).join(" "),S=(e,t)=>{a("caret",e,t);const r=t.loose?c[u.CARETLOOSE]:c[u.CARET],n=t.includePrerelease?"-0":"";return e.replace(r,((t,r,s,i,o)=>{let l;return a("caret",e,t,r,s,i,o),b(r)?l="":b(s)?l=`>=${r}.0.0${n} <${+r+1}.0.0-0`:b(i)?l="0"===r?`>=${r}.${s}.0${n} <${r}.${+s+1}.0-0`:`>=${r}.${s}.0${n} <${+r+1}.0.0-0`:o?(a("replaceCaret pr",o),l="0"===r?"0"===s?`>=${r}.${s}.${i}-${o} <${r}.${s}.${+i+1}-0`:`>=${r}.${s}.${i}-${o} <${r}.${+s+1}.0-0`:`>=${r}.${s}.${i}-${o} <${+r+1}.0.0-0`):(a("no pr"),l="0"===r?"0"===s?`>=${r}.${s}.${i}${n} <${r}.${s}.${+i+1}-0`:`>=${r}.${s}.${i}${n} <${r}.${+s+1}.0-0`:`>=${r}.${s}.${i} <${+r+1}.0.0-0`),a("caret return",l),l}))},T=(e,t)=>(a("replaceXRanges",e,t),e.split(/\s+/).map((e=>w(e,t))).join(" ")),w=(e,t)=>{e=e.trim();const r=t.loose?c[u.XRANGELOOSE]:c[u.XRANGE];return e.replace(r,((r,n,s,i,o,l)=>{a("xRange",e,r,n,s,i,o,l);const c=b(s),u=c||b(i),p=u||b(o),f=p;return"="===n&&f&&(n=""),l=t.includePrerelease?"-0":"",c?r=">"===n||"<"===n?"<0.0.0-0":"*":n&&f?(u&&(i=0),o=0,">"===n?(n=">=",u?(s=+s+1,i=0,o=0):(i=+i+1,o=0)):"<="===n&&(n="<",u?s=+s+1:i=+i+1),"<"===n&&(l="-0"),r=`${n+s}.${i}.${o}${l}`):u?r=`>=${s}.0.0${l} <${+s+1}.0.0-0`:p&&(r=`>=${s}.${i}.0${l} <${s}.${+i+1}.0-0`),a("xRange return",r),r}))},P=(e,t)=>(a("replaceStars",e,t),e.trim().replace(c[u.STAR],"")),A=(e,t)=>(a("replaceGTE0",e,t),e.trim().replace(c[t.includePrerelease?u.GTE0PRE:u.GTE0],"")),O=e=>(t,r,n,s,i,o,a,l,c,u,p,f,d)=>`${r=b(n)?"":b(s)?`>=${n}.0.0${e?"-0":""}`:b(i)?`>=${n}.${s}.0${e?"-0":""}`:o?`>=${r}`:`>=${r}${e?"-0":""}`} ${l=b(c)?"":b(u)?`<${+c+1}.0.0-0`:b(p)?`<${c}.${+u+1}.0-0`:f?`<=${c}.${u}.${p}-${f}`:e?`<${c}.${u}.${+p+1}-0`:`<=${l}`}`.trim(),C=(e,t,r)=>{for(let r=0;r0){const n=e[r].semver;if(n.major===t.major&&n.minor===t.minor&&n.patch===t.patch)return!0}return!1}return!0}},e=>{"use strict";const t=Symbol.for("gensync:v1:start"),r=Symbol.for("gensync:v1:suspend"),n="GENSYNC_OPTIONS_ERROR",s="GENSYNC_RACE_NONEMPTY";function i(e,t,r,s){if(typeof r===e||s&&void 0===r)return;let i;throw i=s?`Expected opts.${t} to be either a ${e}, or undefined.`:`Expected opts.${t} to be a ${e}.`,o(i,n)}function o(e,t){return Object.assign(new Error(e),{code:t})}function a({name:e,arity:n,sync:s,async:i}){return d(e,n,(function*(...e){const n=yield t;if(!n)return s.call(this,e);let o;try{i.call(this,e,(e=>{o||(o={value:e},n())}),(e=>{o||(o={err:e},n())}))}catch(e){o={err:e},n()}if(yield r,o.hasOwnProperty("err"))throw o.err;return o.value}))}function l(e){let t;for(;!({value:t}=e.next()).done;)u(t,e);return t}function c(e,t,r){!function n(){try{let r;for(;!({value:r}=e.next()).done;){u(r,e);let t=!0,s=!1;const i=e.next((()=>{t?s=!0:n()}));if(t=!1,p(i,e),!s)return}return t(r)}catch(e){return r(e)}}()}function u(e,r){e!==t&&f(r,o(`Got unexpected yielded value in gensync generator: ${JSON.stringify(e)}. Did you perhaps mean to use 'yield*' instead of 'yield'?`,"GENSYNC_EXPECTED_START"))}function p({value:e,done:t},n){(t||e!==r)&&f(n,o(t?"Unexpected generator completion. If you get this, it is probably a gensync bug.":`Expected GENSYNC_SUSPEND, got ${JSON.stringify(e)}. If you get this, it is probably a gensync bug.`,"GENSYNC_EXPECTED_SUSPEND"))}function f(e,t){throw e.throw&&e.throw(t),t}function d(e,t,r){if("string"==typeof e){const t=Object.getOwnPropertyDescriptor(r,"name");t&&!t.configurable||Object.defineProperty(r,"name",Object.assign(t||{},{configurable:!0,value:e}))}if("number"==typeof t){const e=Object.getOwnPropertyDescriptor(r,"length");e&&!e.configurable||Object.defineProperty(r,"length",Object.assign(e||{},{configurable:!0,value:t}))}return r}e.exports=Object.assign((function(e){let t=e;return t="function"!=typeof e?function({name:e,arity:t,sync:r,async:s,errback:l}){if(i("string","name",e,!0),i("number","arity",t,!0),i("function","sync",r),i("function","async",s,!0),i("function","errback",l,!0),s&&l)throw o("Expected one of either opts.async or opts.errback, but got _both_.",n);if("string"!=typeof e){let t;l&&l.name&&"errback"!==l.name&&(t=l.name),s&&s.name&&"async"!==s.name&&(t=s.name.replace(/Async$/,"")),r&&r.name&&"sync"!==r.name&&(t=r.name.replace(/Sync$/,"")),"string"==typeof t&&(e=t)}return"number"!=typeof t&&(t=r.length),a({name:e,arity:t,sync:function(e){return r.apply(this,e)},async:function(e,t,n){s?s.apply(this,e).then(t,n):l?l.call(this,...e,((e,r)=>{null==e?t(r):n(e)})):t(r.apply(this,e))}})}(e):function(e){return d(e.name,e.length,(function(...t){return e.apply(this,t)}))}(e),Object.assign(t,function(e){return{sync:function(...t){return l(e.apply(this,t))},async:function(...t){return new Promise(((r,n)=>{c(e.apply(this,t),r,n)}))},errback:function(...t){const r=t.pop();if("function"!=typeof r)throw o("Asynchronous function called without callback","GENSYNC_ERRBACK_NO_CALLBACK");let n;try{n=e.apply(this,t)}catch(e){return void r(e)}c(n,(e=>r(void 0,e)),(e=>r(e)))}}}(t))}),{all:a({name:"all",arity:1,sync:function(e){return Array.from(e[0]).map((e=>l(e)))},async:function(e,t,r){const n=Array.from(e[0]);if(0===n.length)return void Promise.resolve().then((()=>t([])));let s=0;const i=n.map((()=>{}));n.forEach(((e,n)=>{c(e,(e=>{i[n]=e,s+=1,s===i.length&&t(i)}),r)}))}}),race:a({name:"race",arity:1,sync:function(e){const t=Array.from(e[0]);if(0===t.length)throw o("Must race at least 1 item",s);return l(t[0])},async:function(e,t,r){const n=Array.from(e[0]);if(0===n.length)throw o("Must race at least 1 item",s);for(const e of n)c(e,t,r)}})})},(e,t,r)=>{"use strict";t.__esModule=!0,t.default=void 0;var n=r(91);function s(e,t){for(var r=0;re||this.source.end.linet||this.source.end.line===e&&this.source.end.column{e.exports=function(e){try{return!!e()}catch(e){return!0}}},(e,t,r)=>{var n=r(109),s={}.hasOwnProperty;e.exports=Object.hasOwn||function(e,t){return s.call(n(e),t)}},function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r),Object.defineProperty(e,n,{enumerable:!0,get:function(){return t[r]}})}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),s=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&n(t,e,r);return s(t,e),t},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const a=i(r(0)),l=o(r(21)),c=o(r(531)),u=r(146),p=o(r(167)),f=o(r(170)),d=/\*?\s*@jsx\s+([^\s]+)/;t.default=({types:e})=>({name:"babel-plugin-jsx",inherits:c.default,visitor:Object.assign(Object.assign(Object.assign({},p.default),f.default),{Program:{enter(t,r){if((e=>{let t=!1;return e.traverse({JSXElement(e){t=!0,e.stop()},JSXFragment(e){t=!0,e.stop()}}),t})(t)){const n=["createVNode","Fragment","resolveComponent","withDirectives","vShow","vModelSelect","vModelText","vModelCheckbox","vModelRadio","vModelText","vModelDynamic","resolveDirective","mergeProps","createTextVNode","isVNode"];if(u.isModule(t)){const s={};n.forEach((n=>{r.set(n,(()=>{if(s[n])return e.cloneNode(s[n]);const r=u.addNamed(t,n,"vue",{ensureLiveReference:!0});return s[n]=r,r}))}));const{enableObjectSlots:i=!0}=r.opts;i&&r.set("@vue/babel-plugin-jsx/runtimeIsSlot",(()=>{if(s.runtimeIsSlot)return s.runtimeIsSlot;const{name:e}=r.get("isVNode")(),n=t.scope.generateUidIdentifier("isSlot"),i=l.default.ast` - function ${n.name}(s) { - return typeof s === 'function' || (Object.prototype.toString.call(s) === '[object Object]' && !${e}(s)); - } - `,o=t.get("body").filter((e=>e.isImportDeclaration())).pop();return o&&o.insertAfter(i),s.runtimeIsSlot=n,n}))}else{let e="";n.forEach((n=>{r.set(n,(()=>(e||(e=u.addNamespace(t,"vue",{ensureLiveReference:!0}).name),a.memberExpression(a.identifier(e),a.identifier(n)))))}))}const{opts:{pragma:s=""},file:i}=r;if(s&&r.set("createVNode",(()=>a.identifier(s))),i.ast.comments)for(const e of i.ast.comments){const t=d.exec(e.value);t&&r.set("createVNode",(()=>a.identifier(t[1])))}}},exit(e){const t=e.get("body"),r=new Map;t.filter((e=>a.isImportDeclaration(e.node)&&"vue"===e.node.source.value)).forEach((e=>{const{specifiers:t}=e.node;let n=!1;t.forEach((e=>{!e.loc&&a.isImportSpecifier(e)&&a.isIdentifier(e.imported)&&(r.set(e.imported.name,e),n=!0)})),n&&e.remove()}));const n=[...r.keys()].map((e=>r.get(e)));n.length&&e.unshiftContainer("body",a.importDeclaration(n,a.stringLiteral("vue")))}}})})},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.SHOULD_SKIP=t.SHOULD_STOP=t.REMOVED=void 0;var n=r(212),s=r(65),i=r(10),o=r(231),a=r(0),l=r(34),c=r(133),u=r(433),p=r(434),f=r(437),d=r(440),h=r(441),m=r(447),y=r(448),g=r(449),b=r(451),v=r(453),E=r(454);const x=s("babel");t.REMOVED=1,t.SHOULD_STOP=2,t.SHOULD_SKIP=4;class S{constructor(e,t){this.contexts=[],this.state=null,this.opts=null,this._traverseFlags=0,this.skipKeys=null,this.parentPath=null,this.container=null,this.listKey=null,this.key=null,this.node=null,this.type=null,this.parent=t,this.hub=e,this.data=null,this.context=null,this.scope=null}static get({hub:e,parentPath:t,parent:r,container:n,listKey:s,key:i}){if(!e&&t&&(e=t.hub),!r)throw new Error("To get a node path the parent needs to exist");const o=n[i];let a=l.path.get(r);a||(a=new Map,l.path.set(r,a));let c=a.get(o);return c||(c=new S(e,r),o&&a.set(o,c)),c.setup(t,n,s,i),c}getScope(e){return this.isScope()?new o.default(this):e}setData(e,t){return null==this.data&&(this.data=Object.create(null)),this.data[e]=t}getData(e,t){null==this.data&&(this.data=Object.create(null));let r=this.data[e];return void 0===r&&void 0!==t&&(r=this.data[e]=t),r}buildCodeFrameError(e,t=SyntaxError){return this.hub.buildError(this.node,e,t)}traverse(e,t){(0,i.default)(this.node,e,this.scope,t,this)}set(e,t){a.validate(this.node,e,t),this.node[e]=t}getPathLocation(){const e=[];let t=this;do{let r=t.key;t.inList&&(r=`${t.listKey}[${r}]`),e.unshift(r)}while(t=t.parentPath);return e.join(".")}debug(e){x.enabled&&x(`${this.getPathLocation()} ${this.type}: ${e}`)}toString(){return(0,c.default)(this.node).code}get inList(){return!!this.listKey}set inList(e){e||(this.listKey=null)}get parentKey(){return this.listKey||this.key}get shouldSkip(){return!!(4&this._traverseFlags)}set shouldSkip(e){e?this._traverseFlags|=4:this._traverseFlags&=-5}get shouldStop(){return!!(2&this._traverseFlags)}set shouldStop(e){e?this._traverseFlags|=2:this._traverseFlags&=-3}get removed(){return!!(1&this._traverseFlags)}set removed(e){e?this._traverseFlags|=1:this._traverseFlags&=-2}}Object.assign(S.prototype,u,p,f,d,h,m,y,g,b,v,E);for(const e of a.TYPES){const t=`is${e}`,r=a[t];S.prototype[t]=function(e){return r(this.node,e)},S.prototype[`assert${e}`]=function(t){if(!r(this.node,t))throw new TypeError(`Expected node path of type ${e}`)}}for(const e of Object.keys(n)){if("_"===e[0])continue;a.TYPES.indexOf(e)<0&&a.TYPES.push(e);const t=n[e];S.prototype[`is${e}`]=function(e){return t.checkPath(this,e)}}var T=S;t.default=T},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.validate=d,t.typeIs=h,t.validateType=function(e){return d(h(e))},t.validateOptional=function(e){return{validate:e,optional:!0}},t.validateOptionalType=function(e){return{validate:h(e),optional:!0}},t.arrayOf=m,t.arrayOfType=y,t.validateArrayOfType=function(e){return d(y(e))},t.assertEach=g,t.assertOneOf=function(...e){function t(t,r,n){if(e.indexOf(n)<0)throw new TypeError(`Property ${r} expected value to be one of ${JSON.stringify(e)} but got ${JSON.stringify(n)}`)}return t.oneOf=e,t},t.assertNodeType=b,t.assertNodeOrValueType=function(...e){function t(t,r,i){for(const o of e)if(f(i)===o||(0,n.default)(o,i))return void(0,s.validateChild)(t,r,i);throw new TypeError(`Property ${r} of ${t.type} expected node to be of a type ${JSON.stringify(e)} but instead got ${JSON.stringify(null==i?void 0:i.type)}`)}return t.oneOfNodeOrValueTypes=e,t},t.assertValueType=v,t.assertShape=function(e){function t(t,r,n){const i=[];for(const r of Object.keys(e))try{(0,s.validateField)(t,r,n[r],e[r])}catch(e){if(e instanceof TypeError){i.push(e.message);continue}throw e}if(i.length)throw new TypeError(`Property ${r} of ${t.type} expected to have the following:\n${i.join("\n")}`)}return t.shapeOf=e,t},t.assertOptionalChainStart=function(){return function(e){var t;let r=e;for(;e;){const{type:e}=r;if("OptionalCallExpression"!==e){if("OptionalMemberExpression"!==e)break;if(r.optional)return;r=r.object}else{if(r.optional)return;r=r.callee}}throw new TypeError(`Non-optional ${e.type} must chain from an optional OptionalMemberExpression or OptionalCallExpression. Found chain from ${null==(t=r)?void 0:t.type}`)}},t.chain=E,t.default=function(e,t={}){const r=t.inherits&&T[t.inherits]||{};let n=t.fields;if(!n&&(n={},r.fields)){const e=Object.getOwnPropertyNames(r.fields);for(const t of e){const e=r.fields[t],s=e.default;if(Array.isArray(s)?s.length>0:s&&"object"==typeof s)throw new Error("field defaults can only be primitives or empty arrays currently");n[t]={default:Array.isArray(s)?[]:s,optional:e.optional,validate:e.validate}}}const s=t.visitor||r.visitor||[],d=t.aliases||r.aliases||[],h=t.builder||r.builder||t.visitor||[];for(const r of Object.keys(t))if(-1===x.indexOf(r))throw new Error(`Unknown type option "${r}" on ${e}`);t.deprecatedAlias&&(u[t.deprecatedAlias]=e);for(const e of s.concat(h))n[e]=n[e]||{};for(const t of Object.keys(n)){const r=n[t];void 0!==r.default&&-1===h.indexOf(t)&&(r.optional=!0),void 0===r.default?r.default=null:r.validate||null==r.default||(r.validate=v(f(r.default)));for(const n of Object.keys(r))if(-1===S.indexOf(n))throw new Error(`Unknown field key "${n}" on ${e}.${t}`)}i[e]=t.visitor=s,c[e]=t.builder=h,l[e]=t.fields=n,o[e]=t.aliases=d,d.forEach((t=>{a[t]=a[t]||[],a[t].push(e)})),t.validate&&(p[e]=t.validate),T[e]=t},t.NODE_PARENT_VALIDATIONS=t.DEPRECATED_KEYS=t.BUILDER_KEYS=t.NODE_FIELDS=t.FLIPPED_ALIAS_KEYS=t.ALIAS_KEYS=t.VISITOR_KEYS=void 0;var n=r(62),s=r(130);const i={};t.VISITOR_KEYS=i;const o={};t.ALIAS_KEYS=o;const a={};t.FLIPPED_ALIAS_KEYS=a;const l={};t.NODE_FIELDS=l;const c={};t.BUILDER_KEYS=c;const u={};t.DEPRECATED_KEYS=u;const p={};function f(e){return Array.isArray(e)?"array":null===e?"null":typeof e}function d(e){return{validate:e}}function h(e){return"string"==typeof e?b(e):b(...e)}function m(e){return E(v("array"),g(e))}function y(e){return m(h(e))}function g(e){function t(t,r,n){if(Array.isArray(n))for(let s=0;s=2&&"type"in e[0]&&"array"===e[0].type&&!("each"in e[1]))throw new Error('An assertValueType("array") validator can only be followed by an assertEach(...) validator.');return t}t.NODE_PARENT_VALIDATIONS=p;const x=["aliases","builder","deprecatedAlias","fields","inherits","visitor","validate"],S=["default","optional","validate"],T={}},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.program=t.expression=t.statements=t.statement=t.smart=void 0;var n=r(443),s=r(444);const i=(0,s.default)(n.smart);t.smart=i;const o=(0,s.default)(n.statement);t.statement=o;const a=(0,s.default)(n.statements);t.statements=a;const l=(0,s.default)(n.expression);t.expression=l;const c=(0,s.default)(n.program);t.program=c;var u=Object.assign(i.bind(void 0),{smart:i,statement:o,statements:a,expression:l,program:c,ast:i.ast});t.default=u},(e,t,r)=>{"use strict";let n,s,i,{isClean:o,my:a}=r(154),l=r(47),c=r(49),u=r(48);function p(e){return e.map((e=>(e.nodes&&(e.nodes=p(e.nodes)),delete e.source,e)))}function f(e){if(e[o]=!1,e.proxyOf.nodes)for(let t of e.proxyOf.nodes)f(t)}class d extends u{push(e){return e.parent=this,this.proxyOf.nodes.push(e),this}each(e){if(!this.proxyOf.nodes)return;let t,r,n=this.getIterator();for(;this.indexes[n]{let n;try{n=e(t,r)}catch(e){throw t.addToError(e)}return!1!==n&&t.walk&&(n=t.walk(e)),n}))}walkDecls(e,t){return t?e instanceof RegExp?this.walk(((r,n)=>{if("decl"===r.type&&e.test(r.prop))return t(r,n)})):this.walk(((r,n)=>{if("decl"===r.type&&r.prop===e)return t(r,n)})):(t=e,this.walk(((e,r)=>{if("decl"===e.type)return t(e,r)})))}walkRules(e,t){return t?e instanceof RegExp?this.walk(((r,n)=>{if("rule"===r.type&&e.test(r.selector))return t(r,n)})):this.walk(((r,n)=>{if("rule"===r.type&&r.selector===e)return t(r,n)})):(t=e,this.walk(((e,r)=>{if("rule"===e.type)return t(e,r)})))}walkAtRules(e,t){return t?e instanceof RegExp?this.walk(((r,n)=>{if("atrule"===r.type&&e.test(r.name))return t(r,n)})):this.walk(((r,n)=>{if("atrule"===r.type&&r.name===e)return t(r,n)})):(t=e,this.walk(((e,r)=>{if("atrule"===e.type)return t(e,r)})))}walkComments(e){return this.walk(((t,r)=>{if("comment"===t.type)return e(t,r)}))}append(...e){for(let t of e){let e=this.normalize(t,this.last);for(let t of e)this.proxyOf.nodes.push(t)}return this.markDirty(),this}prepend(...e){e=e.reverse();for(let t of e){let e=this.normalize(t,this.first,"prepend").reverse();for(let t of e)this.proxyOf.nodes.unshift(t);for(let t in this.indexes)this.indexes[t]=this.indexes[t]+e.length}return this.markDirty(),this}cleanRaws(e){if(super.cleanRaws(e),this.nodes)for(let t of this.nodes)t.cleanRaws(e)}insertBefore(e,t){let r,n=0===(e=this.index(e))&&"prepend",s=this.normalize(t,this.proxyOf.nodes[e],n).reverse();for(let t of s)this.proxyOf.nodes.splice(e,0,t);for(let t in this.indexes)r=this.indexes[t],e<=r&&(this.indexes[t]=r+s.length);return this.markDirty(),this}insertAfter(e,t){e=this.index(e);let r,n=this.normalize(t,this.proxyOf.nodes[e]).reverse();for(let t of n)this.proxyOf.nodes.splice(e+1,0,t);for(let t in this.indexes)r=this.indexes[t],e=e&&(this.indexes[r]=t-1);return this.markDirty(),this}removeAll(){for(let e of this.proxyOf.nodes)e.parent=void 0;return this.proxyOf.nodes=[],this.markDirty(),this}replaceValues(e,t,r){return r||(r=t,t={}),this.walkDecls((n=>{t.props&&!t.props.includes(n.prop)||t.fast&&!n.value.includes(t.fast)||(n.value=n.value.replace(e,r))})),this.markDirty(),this}every(e){return this.nodes.every(e)}some(e){return this.nodes.some(e)}index(e){return"number"==typeof e?e:(e.proxyOf&&(e=e.proxyOf),this.proxyOf.nodes.indexOf(e))}get first(){if(this.proxyOf.nodes)return this.proxyOf.nodes[0]}get last(){if(this.proxyOf.nodes)return this.proxyOf.nodes[this.proxyOf.nodes.length-1]}normalize(e,t){if("string"==typeof e)e=p(n(e).nodes);else if(Array.isArray(e)){e=e.slice(0);for(let t of e)t.parent&&t.parent.removeChild(t,"ignore")}else if("root"===e.type&&"document"!==this.type){e=e.nodes.slice(0);for(let t of e)t.parent&&t.parent.removeChild(t,"ignore")}else if(e.type)e=[e];else if(e.prop){if(void 0===e.value)throw new Error("Value field is missed in node creation");"string"!=typeof e.value&&(e.value=String(e.value)),e=[new l(e)]}else if(e.selector)e=[new s(e)];else if(e.name)e=[new i(e)];else{if(!e.text)throw new Error("Unknown node type in node creation");e=[new c(e)]}return e.map((e=>(e[a]||d.rebuild(e),(e=e.proxyOf).parent&&e.parent.removeChild(e),e[o]&&f(e),void 0===e.raws.before&&t&&void 0!==t.raws.before&&(e.raws.before=t.raws.before.replace(/\S/g,"")),e.parent=this,e)))}getProxyProcessor(){return{set:(e,t,r)=>(e[t]===r||(e[t]=r,"name"!==t&&"params"!==t&&"selector"!==t||e.markDirty()),!0),get:(e,t)=>"proxyOf"===t?e:e[t]?"each"===t||"string"==typeof t&&t.startsWith("walk")?(...r)=>e[t](...r.map((e=>"function"==typeof e?(t,r)=>e(t.toProxy(),r):e))):"every"===t||"some"===t?r=>e[t](((e,...t)=>r(e.toProxy(),...t))):"root"===t?()=>e.root().toProxy():"nodes"===t?e.nodes.map((e=>e.toProxy())):"first"===t||"last"===t?e[t].toProxy():e[t]:e[t]}}getIterator(){this.lastEach||(this.lastEach=0),this.indexes||(this.indexes={}),this.lastEach+=1;let e=this.lastEach;return this.indexes[e]=0,e}}d.registerParse=e=>{n=e},d.registerRule=e=>{s=e},d.registerAtRule=e=>{i=e},e.exports=d,d.default=d,d.rebuild=e=>{"atrule"===e.type?Object.setPrototypeOf(e,i.prototype):"rule"===e.type?Object.setPrototypeOf(e,s.prototype):"decl"===e.type?Object.setPrototypeOf(e,l.prototype):"comment"===e.type&&Object.setPrototypeOf(e,c.prototype),e[a]=!0,e.nodes&&e.nodes.forEach((e=>{d.rebuild(e)}))}},(e,t,r)=>{const{MAX_SAFE_COMPONENT_LENGTH:n}=r(41),s=r(42),i=(t=e.exports={}).re=[],o=t.src=[],a=t.t={};let l=0;const c=(e,t,r)=>{const n=l++;s(n,t),a[e]=n,o[n]=t,i[n]=new RegExp(t,r?"g":void 0)};c("NUMERICIDENTIFIER","0|[1-9]\\d*"),c("NUMERICIDENTIFIERLOOSE","[0-9]+"),c("NONNUMERICIDENTIFIER","\\d*[a-zA-Z-][a-zA-Z0-9-]*"),c("MAINVERSION",`(${o[a.NUMERICIDENTIFIER]})\\.(${o[a.NUMERICIDENTIFIER]})\\.(${o[a.NUMERICIDENTIFIER]})`),c("MAINVERSIONLOOSE",`(${o[a.NUMERICIDENTIFIERLOOSE]})\\.(${o[a.NUMERICIDENTIFIERLOOSE]})\\.(${o[a.NUMERICIDENTIFIERLOOSE]})`),c("PRERELEASEIDENTIFIER",`(?:${o[a.NUMERICIDENTIFIER]}|${o[a.NONNUMERICIDENTIFIER]})`),c("PRERELEASEIDENTIFIERLOOSE",`(?:${o[a.NUMERICIDENTIFIERLOOSE]}|${o[a.NONNUMERICIDENTIFIER]})`),c("PRERELEASE",`(?:-(${o[a.PRERELEASEIDENTIFIER]}(?:\\.${o[a.PRERELEASEIDENTIFIER]})*))`),c("PRERELEASELOOSE",`(?:-?(${o[a.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${o[a.PRERELEASEIDENTIFIERLOOSE]})*))`),c("BUILDIDENTIFIER","[0-9A-Za-z-]+"),c("BUILD",`(?:\\+(${o[a.BUILDIDENTIFIER]}(?:\\.${o[a.BUILDIDENTIFIER]})*))`),c("FULLPLAIN",`v?${o[a.MAINVERSION]}${o[a.PRERELEASE]}?${o[a.BUILD]}?`),c("FULL",`^${o[a.FULLPLAIN]}$`),c("LOOSEPLAIN",`[v=\\s]*${o[a.MAINVERSIONLOOSE]}${o[a.PRERELEASELOOSE]}?${o[a.BUILD]}?`),c("LOOSE",`^${o[a.LOOSEPLAIN]}$`),c("GTLT","((?:<|>)?=?)"),c("XRANGEIDENTIFIERLOOSE",`${o[a.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`),c("XRANGEIDENTIFIER",`${o[a.NUMERICIDENTIFIER]}|x|X|\\*`),c("XRANGEPLAIN",`[v=\\s]*(${o[a.XRANGEIDENTIFIER]})(?:\\.(${o[a.XRANGEIDENTIFIER]})(?:\\.(${o[a.XRANGEIDENTIFIER]})(?:${o[a.PRERELEASE]})?${o[a.BUILD]}?)?)?`),c("XRANGEPLAINLOOSE",`[v=\\s]*(${o[a.XRANGEIDENTIFIERLOOSE]})(?:\\.(${o[a.XRANGEIDENTIFIERLOOSE]})(?:\\.(${o[a.XRANGEIDENTIFIERLOOSE]})(?:${o[a.PRERELEASELOOSE]})?${o[a.BUILD]}?)?)?`),c("XRANGE",`^${o[a.GTLT]}\\s*${o[a.XRANGEPLAIN]}$`),c("XRANGELOOSE",`^${o[a.GTLT]}\\s*${o[a.XRANGEPLAINLOOSE]}$`),c("COERCE",`(^|[^\\d])(\\d{1,${n}})(?:\\.(\\d{1,${n}}))?(?:\\.(\\d{1,${n}}))?(?:$|[^\\d])`),c("COERCERTL",o[a.COERCE],!0),c("LONETILDE","(?:~>?)"),c("TILDETRIM",`(\\s*)${o[a.LONETILDE]}\\s+`,!0),t.tildeTrimReplace="$1~",c("TILDE",`^${o[a.LONETILDE]}${o[a.XRANGEPLAIN]}$`),c("TILDELOOSE",`^${o[a.LONETILDE]}${o[a.XRANGEPLAINLOOSE]}$`),c("LONECARET","(?:\\^)"),c("CARETTRIM",`(\\s*)${o[a.LONECARET]}\\s+`,!0),t.caretTrimReplace="$1^",c("CARET",`^${o[a.LONECARET]}${o[a.XRANGEPLAIN]}$`),c("CARETLOOSE",`^${o[a.LONECARET]}${o[a.XRANGEPLAINLOOSE]}$`),c("COMPARATORLOOSE",`^${o[a.GTLT]}\\s*(${o[a.LOOSEPLAIN]})$|^$`),c("COMPARATOR",`^${o[a.GTLT]}\\s*(${o[a.FULLPLAIN]})$|^$`),c("COMPARATORTRIM",`(\\s*)${o[a.GTLT]}\\s*(${o[a.LOOSEPLAIN]}|${o[a.XRANGEPLAIN]})`,!0),t.comparatorTrimReplace="$1$2$3",c("HYPHENRANGE",`^\\s*(${o[a.XRANGEPLAIN]})\\s+-\\s+(${o[a.XRANGEPLAIN]})\\s*$`),c("HYPHENRANGELOOSE",`^\\s*(${o[a.XRANGEPLAINLOOSE]})\\s+-\\s+(${o[a.XRANGEPLAINLOOSE]})\\s*$`),c("STAR","(<|>)?=?\\s*\\*"),c("GTE0","^\\s*>=\\s*0.0.0\\s*$"),c("GTE0PRE","^\\s*>=\\s*0.0.0-0\\s*$")},e=>{e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.NOT_LOCAL_BINDING=t.BLOCK_SCOPED_SYMBOL=t.INHERIT_KEYS=t.UNARY_OPERATORS=t.STRING_UNARY_OPERATORS=t.NUMBER_UNARY_OPERATORS=t.BOOLEAN_UNARY_OPERATORS=t.ASSIGNMENT_OPERATORS=t.BINARY_OPERATORS=t.NUMBER_BINARY_OPERATORS=t.BOOLEAN_BINARY_OPERATORS=t.COMPARISON_BINARY_OPERATORS=t.EQUALITY_BINARY_OPERATORS=t.BOOLEAN_NUMBER_BINARY_OPERATORS=t.UPDATE_OPERATORS=t.LOGICAL_OPERATORS=t.COMMENT_KEYS=t.FOR_INIT_KEYS=t.FLATTENABLE_KEYS=t.STATEMENT_OR_BLOCK_KEYS=void 0,t.STATEMENT_OR_BLOCK_KEYS=["consequent","body","alternate"],t.FLATTENABLE_KEYS=["body","expressions"],t.FOR_INIT_KEYS=["left","init"],t.COMMENT_KEYS=["leadingComments","trailingComments","innerComments"];const r=["||","&&","??"];t.LOGICAL_OPERATORS=r,t.UPDATE_OPERATORS=["++","--"];const n=[">","<",">=","<="];t.BOOLEAN_NUMBER_BINARY_OPERATORS=n;const s=["==","===","!=","!=="];t.EQUALITY_BINARY_OPERATORS=s;const i=[...s,"in","instanceof"];t.COMPARISON_BINARY_OPERATORS=i;const o=[...i,...n];t.BOOLEAN_BINARY_OPERATORS=o;const a=["-","/","%","*","**","&","|",">>",">>>","<<","^"];t.NUMBER_BINARY_OPERATORS=a;const l=["+",...a,...o];t.BINARY_OPERATORS=l;const c=["=","+=",...a.map((e=>e+"=")),...r.map((e=>e+"="))];t.ASSIGNMENT_OPERATORS=c;const u=["delete","!"];t.BOOLEAN_UNARY_OPERATORS=u;const p=["+","-","~"];t.NUMBER_UNARY_OPERATORS=p;const f=["typeof"];t.STRING_UNARY_OPERATORS=f;const d=["void","throw",...u,...p,...f];t.UNARY_OPERATORS=d,t.INHERIT_KEYS={optional:["typeAnnotation","typeParameters","returnType"],force:["start","loc","end"]};const h=Symbol.for("var used to be block scoped");t.BLOCK_SCOPED_SYMBOL=h;const m=Symbol.for("should not be considered a local binding");t.NOT_LOCAL_BINDING=m},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=l;var n=r(11),s=r(1);const i=Function.call.bind(Object.prototype.hasOwnProperty);function o(e,t,r){return e&&"string"==typeof e.type?l(e,t,r):e}function a(e,t,r){return Array.isArray(e)?e.map((e=>o(e,t,r))):o(e,t,r)}function l(e,t=!0,r=!1){if(!e)return e;const{type:o}=e,l={type:e.type};if((0,s.isIdentifier)(e))l.name=e.name,i(e,"optional")&&"boolean"==typeof e.optional&&(l.optional=e.optional),i(e,"typeAnnotation")&&(l.typeAnnotation=t?a(e.typeAnnotation,!0,r):e.typeAnnotation);else{if(!i(n.NODE_FIELDS,o))throw new Error(`Unknown node type: "${o}"`);for(const u of Object.keys(n.NODE_FIELDS[o]))i(e,u)&&(l[u]=t?(0,s.isFile)(e)&&"comments"===u?c(e.comments,t,r):a(e[u],!0,r):e[u])}return i(e,"loc")&&(l.loc=r?null:e.loc),i(e,"leadingComments")&&(l.leadingComments=c(e.leadingComments,t,r)),i(e,"innerComments")&&(l.innerComments=c(e.innerComments,t,r)),i(e,"trailingComments")&&(l.trailingComments=c(e.trailingComments,t,r)),i(e,"extra")&&(l.extra=Object.assign({},e.extra)),l}function c(e,t,r){return e&&t?e.map((({type:e,value:t,loc:n})=>r?{type:e,value:t,loc:null}:{type:e,value:t,loc:n})):e}},(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=!0,n=!0,s=!0,i=!0,o=!0;class a{constructor(e,t={}){this.label=void 0,this.keyword=void 0,this.beforeExpr=void 0,this.startsExpr=void 0,this.rightAssociative=void 0,this.isLoop=void 0,this.isAssign=void 0,this.prefix=void 0,this.postfix=void 0,this.binop=void 0,this.updateContext=void 0,this.label=e,this.keyword=t.keyword,this.beforeExpr=!!t.beforeExpr,this.startsExpr=!!t.startsExpr,this.rightAssociative=!!t.rightAssociative,this.isLoop=!!t.isLoop,this.isAssign=!!t.isAssign,this.prefix=!!t.prefix,this.postfix=!!t.postfix,this.binop=null!=t.binop?t.binop:null,this.updateContext=null}}const l=new Map;function c(e,t={}){t.keyword=e;const r=new a(e,t);return l.set(e,r),r}function u(e,t){return new a(e,{beforeExpr:r,binop:t})}const p={num:new a("num",{startsExpr:n}),bigint:new a("bigint",{startsExpr:n}),decimal:new a("decimal",{startsExpr:n}),regexp:new a("regexp",{startsExpr:n}),string:new a("string",{startsExpr:n}),name:new a("name",{startsExpr:n}),privateName:new a("#name",{startsExpr:n}),eof:new a("eof"),bracketL:new a("[",{beforeExpr:r,startsExpr:n}),bracketHashL:new a("#[",{beforeExpr:r,startsExpr:n}),bracketBarL:new a("[|",{beforeExpr:r,startsExpr:n}),bracketR:new a("]"),bracketBarR:new a("|]"),braceL:new a("{",{beforeExpr:r,startsExpr:n}),braceBarL:new a("{|",{beforeExpr:r,startsExpr:n}),braceHashL:new a("#{",{beforeExpr:r,startsExpr:n}),braceR:new a("}",{beforeExpr:r}),braceBarR:new a("|}"),parenL:new a("(",{beforeExpr:r,startsExpr:n}),parenR:new a(")"),comma:new a(",",{beforeExpr:r}),semi:new a(";",{beforeExpr:r}),colon:new a(":",{beforeExpr:r}),doubleColon:new a("::",{beforeExpr:r}),dot:new a("."),question:new a("?",{beforeExpr:r}),questionDot:new a("?."),arrow:new a("=>",{beforeExpr:r}),template:new a("template"),ellipsis:new a("...",{beforeExpr:r}),backQuote:new a("`",{startsExpr:n}),dollarBraceL:new a("${",{beforeExpr:r,startsExpr:n}),at:new a("@"),hash:new a("#",{startsExpr:n}),interpreterDirective:new a("#!..."),eq:new a("=",{beforeExpr:r,isAssign:i}),assign:new a("_=",{beforeExpr:r,isAssign:i}),slashAssign:new a("_=",{beforeExpr:r,isAssign:i}),incDec:new a("++/--",{prefix:o,postfix:!0,startsExpr:n}),bang:new a("!",{beforeExpr:r,prefix:o,startsExpr:n}),tilde:new a("~",{beforeExpr:r,prefix:o,startsExpr:n}),pipeline:u("|>",0),nullishCoalescing:u("??",1),logicalOR:u("||",1),logicalAND:u("&&",2),bitwiseOR:u("|",3),bitwiseXOR:u("^",4),bitwiseAND:u("&",5),equality:u("==/!=/===/!==",6),relational:u("/<=/>=",7),bitShift:u("<>/>>>",8),plusMin:new a("+/-",{beforeExpr:r,binop:9,prefix:o,startsExpr:n}),modulo:new a("%",{beforeExpr:r,binop:10,startsExpr:n}),star:new a("*",{binop:10}),slash:u("/",10),exponent:new a("**",{beforeExpr:r,binop:11,rightAssociative:!0}),_break:c("break"),_case:c("case",{beforeExpr:r}),_catch:c("catch"),_continue:c("continue"),_debugger:c("debugger"),_default:c("default",{beforeExpr:r}),_do:c("do",{isLoop:s,beforeExpr:r}),_else:c("else",{beforeExpr:r}),_finally:c("finally"),_for:c("for",{isLoop:s}),_function:c("function",{startsExpr:n}),_if:c("if"),_return:c("return",{beforeExpr:r}),_switch:c("switch"),_throw:c("throw",{beforeExpr:r,prefix:o,startsExpr:n}),_try:c("try"),_var:c("var"),_const:c("const"),_while:c("while",{isLoop:s}),_with:c("with"),_new:c("new",{beforeExpr:r,startsExpr:n}),_this:c("this",{startsExpr:n}),_super:c("super",{startsExpr:n}),_class:c("class",{startsExpr:n}),_extends:c("extends",{beforeExpr:r}),_export:c("export"),_import:c("import",{startsExpr:n}),_null:c("null",{startsExpr:n}),_true:c("true",{startsExpr:n}),_false:c("false",{startsExpr:n}),_in:c("in",{beforeExpr:r,binop:7}),_instanceof:c("instanceof",{beforeExpr:r,binop:7}),_typeof:c("typeof",{beforeExpr:r,prefix:o,startsExpr:n}),_void:c("void",{beforeExpr:r,prefix:o,startsExpr:n}),_delete:c("delete",{beforeExpr:r,prefix:o,startsExpr:n})},f=/\r\n?|[\n\u2028\u2029]/,d=new RegExp(f.source,"g");function h(e){switch(e){case 10:case 13:case 8232:case 8233:return!0;default:return!1}}const m=/(?:\s|\/\/.*|\/\*[^]*?\*\/)*/g;function y(e){switch(e){case 9:case 11:case 12:case 32:case 160:case 5760:case 8192:case 8193:case 8194:case 8195:case 8196:case 8197:case 8198:case 8199:case 8200:case 8201:case 8202:case 8239:case 8287:case 12288:case 65279:return!0;default:return!1}}class g{constructor(e,t){this.line=void 0,this.column=void 0,this.line=e,this.column=t}}class b{constructor(e,t){this.start=void 0,this.end=void 0,this.filename=void 0,this.identifierName=void 0,this.start=e,this.end=t}}function v(e){return e[e.length-1]}const E=Object.freeze({SyntaxError:"BABEL_PARSER_SYNTAX_ERROR",SourceTypeModuleError:"BABEL_PARSER_SOURCETYPE_MODULE_REQUIRED"}),x=T({AccessorIsGenerator:"A %0ter cannot be a generator.",ArgumentsInClass:"'arguments' is only allowed in functions and class methods.",AsyncFunctionInSingleStatementContext:"Async functions can only be declared at the top level or inside a block.",AwaitBindingIdentifier:"Can not use 'await' as identifier inside an async function.",AwaitBindingIdentifierInStaticBlock:"Can not use 'await' as identifier inside a static block.",AwaitExpressionFormalParameter:"'await' is not allowed in async function parameters.",AwaitNotInAsyncContext:"'await' is only allowed within async functions and at the top levels of modules.",AwaitNotInAsyncFunction:"'await' is only allowed within async functions.",BadGetterArity:"A 'get' accesor must not have any formal parameters.",BadSetterArity:"A 'set' accesor must have exactly one formal parameter.",BadSetterRestParameter:"A 'set' accesor function argument must not be a rest parameter.",ConstructorClassField:"Classes may not have a field named 'constructor'.",ConstructorClassPrivateField:"Classes may not have a private field named '#constructor'.",ConstructorIsAccessor:"Class constructor may not be an accessor.",ConstructorIsAsync:"Constructor can't be an async function.",ConstructorIsGenerator:"Constructor can't be a generator.",DeclarationMissingInitializer:"'%0' require an initialization value.",DecoratorBeforeExport:"Decorators must be placed *before* the 'export' keyword. You can set the 'decoratorsBeforeExport' option to false to use the 'export @decorator class {}' syntax.",DecoratorConstructor:"Decorators can't be used with a constructor. Did you mean '@dec class { ... }'?",DecoratorExportClass:"Using the export keyword between a decorator and a class is not allowed. Please use `export @dec class` instead.",DecoratorSemicolon:"Decorators must not be followed by a semicolon.",DecoratorStaticBlock:"Decorators can't be used with a static block.",DeletePrivateField:"Deleting a private field is not allowed.",DestructureNamedImport:"ES2015 named imports do not destructure. Use another statement for destructuring after the import.",DuplicateConstructor:"Duplicate constructor in the same class.",DuplicateDefaultExport:"Only one default export allowed per module.",DuplicateExport:"`%0` has already been exported. Exported identifiers must be unique.",DuplicateProto:"Redefinition of __proto__ property.",DuplicateRegExpFlags:"Duplicate regular expression flag.",ElementAfterRest:"Rest element must be last element.",EscapedCharNotAnIdentifier:"Invalid Unicode escape.",ExportBindingIsString:"A string literal cannot be used as an exported binding without `from`.\n- Did you mean `export { '%0' as '%1' } from 'some-module'`?",ExportDefaultFromAsIdentifier:"'from' is not allowed as an identifier after 'export default'.",ForInOfLoopInitializer:"'%0' loop variable declaration may not have an initializer.",ForOfAsync:"The left-hand side of a for-of loop may not be 'async'.",ForOfLet:"The left-hand side of a for-of loop may not start with 'let'.",GeneratorInSingleStatementContext:"Generators can only be declared at the top level or inside a block.",IllegalBreakContinue:"Unsyntactic %0.",IllegalLanguageModeDirective:"Illegal 'use strict' directive in function with non-simple parameter list.",IllegalReturn:"'return' outside of function.",ImportBindingIsString:'A string literal cannot be used as an imported binding.\n- Did you mean `import { "%0" as foo }`?',ImportCallArgumentTrailingComma:"Trailing comma is disallowed inside import(...) arguments.",ImportCallArity:"`import()` requires exactly %0.",ImportCallNotNewExpression:"Cannot use new with import(...).",ImportCallSpreadArgument:"`...` is not allowed in `import()`.",InvalidBigIntLiteral:"Invalid BigIntLiteral.",InvalidCodePoint:"Code point out of bounds.",InvalidDecimal:"Invalid decimal.",InvalidDigit:"Expected number in radix %0.",InvalidEscapeSequence:"Bad character escape sequence.",InvalidEscapeSequenceTemplate:"Invalid escape sequence in template.",InvalidEscapedReservedWord:"Escape sequence in keyword %0.",InvalidIdentifier:"Invalid identifier %0.",InvalidLhs:"Invalid left-hand side in %0.",InvalidLhsBinding:"Binding invalid left-hand side in %0.",InvalidNumber:"Invalid number.",InvalidOrMissingExponent:"Floating-point numbers require a valid exponent after the 'e'.",InvalidOrUnexpectedToken:"Unexpected character '%0'.",InvalidParenthesizedAssignment:"Invalid parenthesized assignment pattern.",InvalidPrivateFieldResolution:"Private name #%0 is not defined.",InvalidPropertyBindingPattern:"Binding member expression.",InvalidRecordProperty:"Only properties and spread elements are allowed in record definitions.",InvalidRestAssignmentPattern:"Invalid rest operator's argument.",LabelRedeclaration:"Label '%0' is already declared.",LetInLexicalBinding:"'let' is not allowed to be used as a name in 'let' or 'const' declarations.",LineTerminatorBeforeArrow:"No line break is allowed before '=>'.",MalformedRegExpFlags:"Invalid regular expression flag.",MissingClassName:"A class name is required.",MissingEqInAssignment:"Only '=' operator can be used for specifying default value.",MissingSemicolon:"Missing semicolon.",MissingUnicodeEscape:"Expecting Unicode escape sequence \\uXXXX.",MixingCoalesceWithLogical:"Nullish coalescing operator(??) requires parens when mixing with logical operators.",ModuleAttributeDifferentFromType:"The only accepted module attribute is `type`.",ModuleAttributeInvalidValue:"Only string literals are allowed as module attribute values.",ModuleAttributesWithDuplicateKeys:'Duplicate key "%0" is not allowed in module attributes.',ModuleExportNameHasLoneSurrogate:"An export name cannot include a lone surrogate, found '\\u%0'.",ModuleExportUndefined:"Export '%0' is not defined.",MultipleDefaultsInSwitch:"Multiple default clauses.",NewlineAfterThrow:"Illegal newline after throw.",NoCatchOrFinally:"Missing catch or finally clause.",NumberIdentifier:"Identifier directly after number.",NumericSeparatorInEscapeSequence:"Numeric separators are not allowed inside unicode escape sequences or hex escape sequences.",ObsoleteAwaitStar:"'await*' has been removed from the async functions proposal. Use Promise.all() instead.",OptionalChainingNoNew:"Constructors in/after an Optional Chain are not allowed.",OptionalChainingNoTemplate:"Tagged Template Literals are not allowed in optionalChain.",OverrideOnConstructor:"'override' modifier cannot appear on a constructor declaration.",ParamDupe:"Argument name clash.",PatternHasAccessor:"Object pattern can't contain getter or setter.",PatternHasMethod:"Object pattern can't contain methods.",PipelineBodyNoArrow:'Unexpected arrow "=>" after pipeline body; arrow function in pipeline body must be parenthesized.',PipelineBodySequenceExpression:"Pipeline body may not be a comma-separated sequence expression.",PipelineHeadSequenceExpression:"Pipeline head should not be a comma-separated sequence expression.",PipelineTopicUnused:"Pipeline is in topic style but does not use topic reference.",PrimaryTopicNotAllowed:"Topic reference was used in a lexical context without topic binding.",PrimaryTopicRequiresSmartPipeline:"Primary Topic Reference found but pipelineOperator not passed 'smart' for 'proposal' option.",PrivateInExpectedIn:"Private names are only allowed in property accesses (`obj.#%0`) or in `in` expressions (`#%0 in obj`).",PrivateNameRedeclaration:"Duplicate private name #%0.",RecordExpressionBarIncorrectEndSyntaxType:"Record expressions ending with '|}' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.",RecordExpressionBarIncorrectStartSyntaxType:"Record expressions starting with '{|' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.",RecordExpressionHashIncorrectStartSyntaxType:"Record expressions starting with '#{' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'hash'.",RecordNoProto:"'__proto__' is not allowed in Record expressions.",RestTrailingComma:"Unexpected trailing comma after rest element.",SloppyFunction:"In non-strict mode code, functions can only be declared at top level, inside a block, or as the body of an if statement.",StaticPrototype:"Classes may not have static property named prototype.",StrictDelete:"Deleting local variable in strict mode.",StrictEvalArguments:"Assigning to '%0' in strict mode.",StrictEvalArgumentsBinding:"Binding '%0' in strict mode.",StrictFunction:"In strict mode code, functions can only be declared at top level or inside a block.",StrictNumericEscape:"The only valid numeric escape in strict mode is '\\0'.",StrictOctalLiteral:"Legacy octal literals are not allowed in strict mode.",StrictWith:"'with' in strict mode.",SuperNotAllowed:"`super()` is only valid inside a class constructor of a subclass. Maybe a typo in the method name ('constructor') or not extending another class?",SuperPrivateField:"Private fields can't be accessed on super.",TrailingDecorator:"Decorators must be attached to a class element.",TupleExpressionBarIncorrectEndSyntaxType:"Tuple expressions ending with '|]' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.",TupleExpressionBarIncorrectStartSyntaxType:"Tuple expressions starting with '[|' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.",TupleExpressionHashIncorrectStartSyntaxType:"Tuple expressions starting with '#[' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'hash'.",UnexpectedArgumentPlaceholder:"Unexpected argument placeholder.",UnexpectedAwaitAfterPipelineBody:'Unexpected "await" after pipeline body; await must have parentheses in minimal proposal.',UnexpectedDigitAfterHash:"Unexpected digit after hash token.",UnexpectedImportExport:"'import' and 'export' may only appear at the top level.",UnexpectedKeyword:"Unexpected keyword '%0'.",UnexpectedLeadingDecorator:"Leading decorators must be attached to a class declaration.",UnexpectedLexicalDeclaration:"Lexical declaration cannot appear in a single-statement context.",UnexpectedNewTarget:"`new.target` can only be used in functions or class properties.",UnexpectedNumericSeparator:"A numeric separator is only allowed between two digits.",UnexpectedPrivateField:"Private names can only be used as the name of a class element (i.e. class C { #p = 42; #m() {} } )\n or a property of member expression (i.e. this.#p).",UnexpectedReservedWord:"Unexpected reserved word '%0'.",UnexpectedSuper:"'super' is only allowed in object methods and classes.",UnexpectedToken:"Unexpected token '%0'.",UnexpectedTokenUnaryExponentiation:"Illegal expression. Wrap left hand side or entire exponentiation in parentheses.",UnsupportedBind:"Binding should be performed on object property.",UnsupportedDecoratorExport:"A decorated export must export a class declaration.",UnsupportedDefaultExport:"Only expressions, functions or classes are allowed as the `default` export.",UnsupportedImport:"`import` can only be used in `import()` or `import.meta`.",UnsupportedMetaProperty:"The only valid meta property for %0 is %0.%1.",UnsupportedParameterDecorator:"Decorators cannot be used to decorate parameters.",UnsupportedPropertyDecorator:"Decorators cannot be used to decorate object literal properties.",UnsupportedSuper:"'super' can only be used with function calls (i.e. super()) or in property accesses (i.e. super.prop or super[prop]).",UnterminatedComment:"Unterminated comment.",UnterminatedRegExp:"Unterminated regular expression.",UnterminatedString:"Unterminated string constant.",UnterminatedTemplate:"Unterminated template.",VarRedeclaration:"Identifier '%0' has already been declared.",YieldBindingIdentifier:"Can not use 'yield' as identifier inside a generator.",YieldInParameter:"Yield expression is not allowed in formal parameters.",ZeroDigitNumericSeparator:"Numeric separator can not be used after leading 0."},E.SyntaxError),S=T({ImportMetaOutsideModule:"import.meta may appear only with 'sourceType: \"module\"'",ImportOutsideModule:"'import' and 'export' may appear only with 'sourceType: \"module\"'"},E.SourceTypeModuleError);function T(e,t){const r={};return Object.keys(e).forEach((n=>{r[n]=Object.freeze({code:t,reasonCode:n,template:e[n]})})),Object.freeze(r)}class w{constructor(e,t){this.token=void 0,this.preserveSpace=void 0,this.token=e,this.preserveSpace=!!t}}const P={brace:new w("{"),template:new w("`",!0)};p.braceR.updateContext=e=>{e.pop()},p.braceL.updateContext=p.braceHashL.updateContext=p.dollarBraceL.updateContext=e=>{e.push(P.brace)},p.backQuote.updateContext=e=>{e[e.length-1]===P.template?e.pop():e.push(P.template)};let A="ªµºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮͰ-ʹͶͷͺ-ͽͿΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁҊ-ԯԱ-Ֆՙՠ-ֈא-תׯ-ײؠ-يٮٯٱ-ۓەۥۦۮۯۺ-ۼۿܐܒ-ܯݍ-ޥޱߊ-ߪߴߵߺࠀ-ࠕࠚࠤࠨࡀ-ࡘࡠ-ࡪࢠ-ࢴࢶ-ࣇऄ-हऽॐक़-ॡॱ-ঀঅ-ঌএঐও-নপ-রলশ-হঽৎড়ঢ়য়-ৡৰৱৼਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਖ਼-ੜਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલળવ-હઽૐૠૡૹଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହଽଡ଼ଢ଼ୟ-ୡୱஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹௐఅ-ఌఎ-ఐఒ-నప-హఽౘ-ౚౠౡಀಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽೞೠೡೱೲഄ-ഌഎ-ഐഒ-ഺഽൎൔ-ൖൟ-ൡൺ-ൿඅ-ඖක-නඳ-රලව-ෆก-ะาำเ-ๆກຂຄຆ-ຊຌ-ຣລວ-ະາຳຽເ-ໄໆໜ-ໟༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿၐ-ၕၚ-ၝၡၥၦၮ-ၰၵ-ႁႎႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᎠ-Ᏽᏸ-ᏽᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛮ-ᛸᜀ-ᜌᜎ-ᜑᜠ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៗៜᠠ-ᡸᢀ-ᢨᢪᢰ-ᣵᤀ-ᤞᥐ-ᥭᥰ-ᥴᦀ-ᦫᦰ-ᧉᨀ-ᨖᨠ-ᩔᪧᬅ-ᬳᭅ-ᭋᮃ-ᮠᮮᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱽᲀ-ᲈᲐ-ᲺᲽ-Ჿᳩ-ᳬᳮ-ᳳᳵᳶᳺᴀ-ᶿḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼⁱⁿₐ-ₜℂℇℊ-ℓℕ℘-ℝℤΩℨK-ℹℼ-ℿⅅ-ⅉⅎⅠ-ↈⰀ-Ⱞⰰ-ⱞⱠ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞ々-〇〡-〩〱-〵〸-〼ぁ-ゖ゛-ゟァ-ヺー-ヿㄅ-ㄯㄱ-ㆎㆠ-ㆿㇰ-ㇿ㐀-䶿一-鿼ꀀ-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪꘫꙀ-ꙮꙿ-ꚝꚠ-ꛯꜗ-ꜟꜢ-ꞈꞋ-ꞿꟂ-ꟊꟵ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻꣽꣾꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧏꧠ-ꧤꧦ-ꧯꧺ-ꧾꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩶꩺꩾ-ꪯꪱꪵꪶꪹ-ꪽꫀꫂꫛ-ꫝꫠ-ꫪꫲ-ꫴꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꬰ-ꭚꭜ-ꭩꭰ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ff-stﬓ-ﬗיִײַ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼA-Za-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ",O="‌‍·̀-ͯ·҃-֑҇-ׇֽֿׁׂׅׄؐ-ًؚ-٩ٰۖ-ۜ۟-۪ۤۧۨ-ۭ۰-۹ܑܰ-݊ަ-ް߀-߉߫-߽߳ࠖ-࠙ࠛ-ࠣࠥ-ࠧࠩ-࡙࠭-࡛࣓-ࣣ࣡-ःऺ-़ा-ॏ॑-ॗॢॣ०-९ঁ-ঃ়া-ৄেৈো-্ৗৢৣ০-৯৾ਁ-ਃ਼ਾ-ੂੇੈੋ-੍ੑ੦-ੱੵઁ-ઃ઼ા-ૅે-ૉો-્ૢૣ૦-૯ૺ-૿ଁ-ଃ଼ା-ୄେୈୋ-୍୕-ୗୢୣ୦-୯ஂா-ூெ-ைொ-்ௗ௦-௯ఀ-ఄా-ౄె-ైొ-్ౕౖౢౣ౦-౯ಁ-ಃ಼ಾ-ೄೆ-ೈೊ-್ೕೖೢೣ೦-೯ഀ-ഃ഻഼ാ-ൄെ-ൈൊ-്ൗൢൣ൦-൯ඁ-ඃ්ා-ුූෘ-ෟ෦-෯ෲෳัิ-ฺ็-๎๐-๙ັິ-ຼ່-ໍ໐-໙༘༙༠-༩༹༵༷༾༿ཱ-྄྆྇ྍ-ྗྙ-ྼ࿆ါ-ှ၀-၉ၖ-ၙၞ-ၠၢ-ၤၧ-ၭၱ-ၴႂ-ႍႏ-ႝ፝-፟፩-፱ᜒ-᜔ᜲ-᜴ᝒᝓᝲᝳ឴-៓៝០-៩᠋-᠍᠐-᠙ᢩᤠ-ᤫᤰ-᤻᥆-᥏᧐-᧚ᨗ-ᨛᩕ-ᩞ᩠-᩿᩼-᪉᪐-᪙᪰-᪽ᪿᫀᬀ-ᬄ᬴-᭄᭐-᭙᭫-᭳ᮀ-ᮂᮡ-ᮭ᮰-᮹᯦-᯳ᰤ-᰷᱀-᱉᱐-᱙᳐-᳔᳒-᳨᳭᳴᳷-᳹᷀-᷹᷻-᷿‿⁀⁔⃐-⃥⃜⃡-⃰⳯-⵿⳱ⷠ-〪ⷿ-゙゚〯꘠-꘩꙯ꙴ-꙽ꚞꚟ꛰꛱ꠂ꠆ꠋꠣ-ꠧ꠬ꢀꢁꢴ-ꣅ꣐-꣙꣠-꣱ꣿ-꤉ꤦ-꤭ꥇ-꥓ꦀ-ꦃ꦳-꧀꧐-꧙ꧥ꧰-꧹ꨩ-ꨶꩃꩌꩍ꩐-꩙ꩻ-ꩽꪰꪲ-ꪴꪷꪸꪾ꪿꫁ꫫ-ꫯꫵ꫶ꯣ-ꯪ꯬꯭꯰-꯹ﬞ︀-️︠-︯︳︴﹍-﹏0-9_";const C=new RegExp("["+A+"]"),I=new RegExp("["+A+O+"]");A=O=null;const k=[0,11,2,25,2,18,2,1,2,14,3,13,35,122,70,52,268,28,4,48,48,31,14,29,6,37,11,29,3,35,5,7,2,4,43,157,19,35,5,35,5,39,9,51,157,310,10,21,11,7,153,5,3,0,2,43,2,1,4,0,3,22,11,22,10,30,66,18,2,1,11,21,11,25,71,55,7,1,65,0,16,3,2,2,2,28,43,28,4,28,36,7,2,27,28,53,11,21,11,18,14,17,111,72,56,50,14,50,14,35,349,41,7,1,79,28,11,0,9,21,107,20,28,22,13,52,76,44,33,24,27,35,30,0,3,0,9,34,4,0,13,47,15,3,22,0,2,0,36,17,2,24,85,6,2,0,2,3,2,14,2,9,8,46,39,7,3,1,3,21,2,6,2,1,2,4,4,0,19,0,13,4,159,52,19,3,21,2,31,47,21,1,2,0,185,46,42,3,37,47,21,0,60,42,14,0,72,26,230,43,117,63,32,7,3,0,3,7,2,1,2,23,16,0,2,0,95,7,3,38,17,0,2,0,29,0,11,39,8,0,22,0,12,45,20,0,35,56,264,8,2,36,18,0,50,29,113,6,2,1,2,37,22,0,26,5,2,1,2,31,15,0,328,18,190,0,80,921,103,110,18,195,2749,1070,4050,582,8634,568,8,30,114,29,19,47,17,3,32,20,6,18,689,63,129,74,6,0,67,12,65,1,2,0,29,6135,9,1237,43,8,8952,286,50,2,18,3,9,395,2309,106,6,12,4,8,8,9,5991,84,2,70,2,1,3,0,3,1,3,3,2,11,2,0,2,6,2,64,2,3,3,7,2,6,2,27,2,3,2,4,2,0,4,6,2,339,3,24,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,7,2357,44,11,6,17,0,370,43,1301,196,60,67,8,0,1205,3,2,26,2,1,2,0,3,0,2,9,2,3,2,0,2,0,7,0,5,0,2,0,2,0,2,2,2,1,2,0,3,0,2,0,2,0,2,0,2,0,2,1,2,0,3,3,2,6,2,3,2,3,2,0,2,9,2,16,6,2,2,4,2,16,4421,42717,35,4148,12,221,3,5761,15,7472,3104,541,1507,4938],N=[509,0,227,0,150,4,294,9,1368,2,2,1,6,3,41,2,5,0,166,1,574,3,9,9,370,1,154,10,176,2,54,14,32,9,16,3,46,10,54,9,7,2,37,13,2,9,6,1,45,0,13,2,49,13,9,3,2,11,83,11,7,0,161,11,6,9,7,3,56,1,2,6,3,1,3,2,10,0,11,1,3,6,4,4,193,17,10,9,5,0,82,19,13,9,214,6,3,8,28,1,83,16,16,9,82,12,9,9,84,14,5,9,243,14,166,9,71,5,2,1,3,3,2,0,2,1,13,9,120,6,3,6,4,0,29,9,41,6,2,3,9,0,10,10,47,15,406,7,2,7,17,9,57,21,2,13,123,5,4,0,2,1,2,6,2,0,9,9,49,4,2,1,2,4,9,9,330,3,19306,9,135,4,60,6,26,9,1014,0,2,54,8,3,82,0,12,1,19628,1,5319,4,4,5,9,7,3,6,31,3,149,2,1418,49,513,54,5,49,9,0,15,0,23,4,2,14,1361,6,2,16,3,6,2,1,2,4,262,6,10,9,419,13,1495,6,110,6,6,9,4759,9,787719,239];function _(e,t){let r=65536;for(let n=0,s=t.length;ne)return!1;if(r+=t[n+1],r>=e)return!0}return!1}function j(e){return e<65?36===e:e<=90||(e<97?95===e:e<=122||(e<=65535?e>=170&&C.test(String.fromCharCode(e)):_(e,k)))}function D(e){return e<48?36===e:e<58||!(e<65)&&(e<=90||(e<97?95===e:e<=122||(e<=65535?e>=170&&I.test(String.fromCharCode(e)):_(e,k)||_(e,N))))}const L=new Set(["break","case","catch","continue","debugger","default","do","else","finally","for","function","if","return","switch","throw","try","var","const","while","with","new","this","super","class","extends","export","import","null","true","false","in","instanceof","typeof","void","delete"]),M=new Set(["implements","interface","let","package","private","protected","public","static","yield"]),B=new Set(["eval","arguments"]);function R(e,t){return t&&"await"===e||"enum"===e}function F(e,t){return R(e,t)||M.has(e)}function U(e){return B.has(e)}function $(e,t){return F(e,t)||U(e)}function q(e){return L.has(e)}const V=new Set(["break","case","catch","continue","debugger","default","do","else","finally","for","function","if","return","switch","throw","try","var","const","while","with","new","this","super","class","extends","export","import","null","true","false","in","instanceof","typeof","void","delete","implements","interface","let","package","private","protected","public","static","yield","eval","arguments","enum","await"]);class W{constructor(e){this.var=new Set,this.lexical=new Set,this.functions=new Set,this.flags=e}}class K{constructor(e,t){this.scopeStack=[],this.undefinedExports=new Map,this.undefinedPrivateNames=new Map,this.raise=e,this.inModule=t}get inFunction(){return(2&this.currentVarScopeFlags())>0}get allowSuper(){return(16&this.currentThisScopeFlags())>0}get allowDirectSuper(){return(32&this.currentThisScopeFlags())>0}get inClass(){return(64&this.currentThisScopeFlags())>0}get inClassAndNotInNonArrowFunction(){const e=this.currentThisScopeFlags();return(64&e)>0&&0==(2&e)}get inStaticBlock(){return(128&this.currentThisScopeFlags())>0}get inNonArrowFunction(){return(2&this.currentThisScopeFlags())>0}get treatFunctionsAsVar(){return this.treatFunctionsAsVarInScope(this.currentScope())}createScope(e){return new W(e)}enter(e){this.scopeStack.push(this.createScope(e))}exit(){this.scopeStack.pop()}treatFunctionsAsVarInScope(e){return!!(2&e.flags||!this.inModule&&1&e.flags)}declareName(e,t,r){let n=this.currentScope();if(8&t||16&t)this.checkRedeclarationInScope(n,e,t,r),16&t?n.functions.add(e):n.lexical.add(e),8&t&&this.maybeExportDefined(n,e);else if(4&t)for(let s=this.scopeStack.length-1;s>=0&&(n=this.scopeStack[s],this.checkRedeclarationInScope(n,e,t,r),n.var.add(e),this.maybeExportDefined(n,e),!(259&n.flags));--s);this.inModule&&1&n.flags&&this.undefinedExports.delete(e)}maybeExportDefined(e,t){this.inModule&&1&e.flags&&this.undefinedExports.delete(t)}checkRedeclarationInScope(e,t,r,n){this.isRedeclaredInScope(e,t,r)&&this.raise(n,x.VarRedeclaration,t)}isRedeclaredInScope(e,t,r){return!!(1&r)&&(8&r?e.lexical.has(t)||e.functions.has(t)||e.var.has(t):16&r?e.lexical.has(t)||!this.treatFunctionsAsVarInScope(e)&&e.var.has(t):e.lexical.has(t)&&!(8&e.flags&&e.lexical.values().next().value===t)||!this.treatFunctionsAsVarInScope(e)&&e.functions.has(t))}checkLocalExport(e){const{name:t}=e,r=this.scopeStack[0];r.lexical.has(t)||r.var.has(t)||r.functions.has(t)||this.undefinedExports.set(t,e.start)}currentScope(){return this.scopeStack[this.scopeStack.length-1]}currentVarScopeFlags(){for(let e=this.scopeStack.length-1;;e--){const{flags:t}=this.scopeStack[e];if(259&t)return t}}currentThisScopeFlags(){for(let e=this.scopeStack.length-1;;e--){const{flags:t}=this.scopeStack[e];if(323&t&&!(4&t))return t}}}class G extends W{constructor(...e){super(...e),this.declareFunctions=new Set}}class H extends K{createScope(e){return new G(e)}declareName(e,t,r){const n=this.currentScope();if(2048&t)return this.checkRedeclarationInScope(n,e,t,r),this.maybeExportDefined(n,e),void n.declareFunctions.add(e);super.declareName(...arguments)}isRedeclaredInScope(e,t,r){return!!super.isRedeclaredInScope(...arguments)||!!(2048&r)&&!e.declareFunctions.has(t)&&(e.lexical.has(t)||e.functions.has(t))}checkLocalExport(e){this.scopeStack[0].declareFunctions.has(e.name)||super.checkLocalExport(e)}}const J=new Set(["_","any","bool","boolean","empty","extends","false","interface","mixed","null","number","static","string","true","typeof","void"]),Y=T({AmbiguousConditionalArrow:"Ambiguous expression: wrap the arrow functions in parentheses to disambiguate.",AmbiguousDeclareModuleKind:"Found both `declare module.exports` and `declare export` in the same module. Modules can only have 1 since they are either an ES module or they are a CommonJS module.",AssignReservedType:"Cannot overwrite reserved type %0.",DeclareClassElement:"The `declare` modifier can only appear on class fields.",DeclareClassFieldInitializer:"Initializers are not allowed in fields with the `declare` modifier.",DuplicateDeclareModuleExports:"Duplicate `declare module.exports` statement.",EnumBooleanMemberNotInitialized:"Boolean enum members need to be initialized. Use either `%0 = true,` or `%0 = false,` in enum `%1`.",EnumDuplicateMemberName:"Enum member names need to be unique, but the name `%0` has already been used before in enum `%1`.",EnumInconsistentMemberValues:"Enum `%0` has inconsistent member initializers. Either use no initializers, or consistently use literals (either booleans, numbers, or strings) for all member initializers.",EnumInvalidExplicitType:"Enum type `%1` is not valid. Use one of `boolean`, `number`, `string`, or `symbol` in enum `%0`.",EnumInvalidExplicitTypeUnknownSupplied:"Supplied enum type is not valid. Use one of `boolean`, `number`, `string`, or `symbol` in enum `%0`.",EnumInvalidMemberInitializerPrimaryType:"Enum `%0` has type `%2`, so the initializer of `%1` needs to be a %2 literal.",EnumInvalidMemberInitializerSymbolType:"Symbol enum members cannot be initialized. Use `%1,` in enum `%0`.",EnumInvalidMemberInitializerUnknownType:"The enum member initializer for `%1` needs to be a literal (either a boolean, number, or string) in enum `%0`.",EnumInvalidMemberName:"Enum member names cannot start with lowercase 'a' through 'z'. Instead of using `%0`, consider using `%1`, in enum `%2`.",EnumNumberMemberNotInitialized:"Number enum members need to be initialized, e.g. `%1 = 1` in enum `%0`.",EnumStringMemberInconsistentlyInitailized:"String enum members need to consistently either all use initializers, or use no initializers, in enum `%0`.",GetterMayNotHaveThisParam:"A getter cannot have a `this` parameter.",ImportTypeShorthandOnlyInPureImport:"The `type` and `typeof` keywords on named imports can only be used on regular `import` statements. It cannot be used with `import type` or `import typeof` statements.",InexactInsideExact:"Explicit inexact syntax cannot appear inside an explicit exact object type.",InexactInsideNonObject:"Explicit inexact syntax cannot appear in class or interface definitions.",InexactVariance:"Explicit inexact syntax cannot have variance.",InvalidNonTypeImportInDeclareModule:"Imports within a `declare module` body must always be `import type` or `import typeof`.",MissingTypeParamDefault:"Type parameter declaration needs a default, since a preceding type parameter declaration has a default.",NestedDeclareModule:"`declare module` cannot be used inside another `declare module`.",NestedFlowComment:"Cannot have a flow comment inside another flow comment.",OptionalBindingPattern:"A binding pattern parameter cannot be optional in an implementation signature.",SetterMayNotHaveThisParam:"A setter cannot have a `this` parameter.",SpreadVariance:"Spread properties cannot have variance.",ThisParamAnnotationRequired:"A type annotation is required for the `this` parameter.",ThisParamBannedInConstructor:"Constructors cannot have a `this` parameter; constructors don't bind `this` like other functions.",ThisParamMayNotBeOptional:"The `this` parameter cannot be optional.",ThisParamMustBeFirst:"The `this` parameter must be the first function parameter.",ThisParamNoDefault:"The `this` parameter may not have a default value.",TypeBeforeInitializer:"Type annotations must come before default assignments, e.g. instead of `age = 25: number` use `age: number = 25`.",TypeCastInPattern:"The type cast expression is expected to be wrapped with parenthesis.",UnexpectedExplicitInexactInObject:"Explicit inexact syntax must appear at the end of an inexact object.",UnexpectedReservedType:"Unexpected reserved type %0.",UnexpectedReservedUnderscore:"`_` is only allowed as a type argument to call or new.",UnexpectedSpaceBetweenModuloChecks:"Spaces between `%` and `checks` are not allowed here.",UnexpectedSpreadType:"Spread operator cannot appear in class or interface definitions.",UnexpectedSubtractionOperand:'Unexpected token, expected "number" or "bigint".',UnexpectedTokenAfterTypeParameter:"Expected an arrow function after this type parameter declaration.",UnexpectedTypeParameterBeforeAsyncArrowFunction:"Type parameters must come after the async keyword, e.g. instead of ` async () => {}`, use `async () => {}`.",UnsupportedDeclareExportKind:"`declare export %0` is not supported. Use `%1` instead.",UnsupportedStatementInDeclareModule:"Only declares and type imports are allowed inside declare module.",UnterminatedFlowComment:"Unterminated flow-comment."},E.SyntaxError);function X(e){return"type"===e.importKind||"typeof"===e.importKind}function z(e){return(e.type===p.name||!!e.type.keyword)&&"from"!==e.value}const Q={const:"declare export var",let:"declare export var",type:"export type",interface:"export interface"},Z=/\*?\s*@((?:no)?flow)\b/,ee={quot:'"',amp:"&",apos:"'",lt:"<",gt:">",nbsp:" ",iexcl:"¡",cent:"¢",pound:"£",curren:"¤",yen:"¥",brvbar:"¦",sect:"§",uml:"¨",copy:"©",ordf:"ª",laquo:"«",not:"¬",shy:"­",reg:"®",macr:"¯",deg:"°",plusmn:"±",sup2:"²",sup3:"³",acute:"´",micro:"µ",para:"¶",middot:"·",cedil:"¸",sup1:"¹",ordm:"º",raquo:"»",frac14:"¼",frac12:"½",frac34:"¾",iquest:"¿",Agrave:"À",Aacute:"Á",Acirc:"Â",Atilde:"Ã",Auml:"Ä",Aring:"Å",AElig:"Æ",Ccedil:"Ç",Egrave:"È",Eacute:"É",Ecirc:"Ê",Euml:"Ë",Igrave:"Ì",Iacute:"Í",Icirc:"Î",Iuml:"Ï",ETH:"Ð",Ntilde:"Ñ",Ograve:"Ò",Oacute:"Ó",Ocirc:"Ô",Otilde:"Õ",Ouml:"Ö",times:"×",Oslash:"Ø",Ugrave:"Ù",Uacute:"Ú",Ucirc:"Û",Uuml:"Ü",Yacute:"Ý",THORN:"Þ",szlig:"ß",agrave:"à",aacute:"á",acirc:"â",atilde:"ã",auml:"ä",aring:"å",aelig:"æ",ccedil:"ç",egrave:"è",eacute:"é",ecirc:"ê",euml:"ë",igrave:"ì",iacute:"í",icirc:"î",iuml:"ï",eth:"ð",ntilde:"ñ",ograve:"ò",oacute:"ó",ocirc:"ô",otilde:"õ",ouml:"ö",divide:"÷",oslash:"ø",ugrave:"ù",uacute:"ú",ucirc:"û",uuml:"ü",yacute:"ý",thorn:"þ",yuml:"ÿ",OElig:"Œ",oelig:"œ",Scaron:"Š",scaron:"š",Yuml:"Ÿ",fnof:"ƒ",circ:"ˆ",tilde:"˜",Alpha:"Α",Beta:"Β",Gamma:"Γ",Delta:"Δ",Epsilon:"Ε",Zeta:"Ζ",Eta:"Η",Theta:"Θ",Iota:"Ι",Kappa:"Κ",Lambda:"Λ",Mu:"Μ",Nu:"Ν",Xi:"Ξ",Omicron:"Ο",Pi:"Π",Rho:"Ρ",Sigma:"Σ",Tau:"Τ",Upsilon:"Υ",Phi:"Φ",Chi:"Χ",Psi:"Ψ",Omega:"Ω",alpha:"α",beta:"β",gamma:"γ",delta:"δ",epsilon:"ε",zeta:"ζ",eta:"η",theta:"θ",iota:"ι",kappa:"κ",lambda:"λ",mu:"μ",nu:"ν",xi:"ξ",omicron:"ο",pi:"π",rho:"ρ",sigmaf:"ς",sigma:"σ",tau:"τ",upsilon:"υ",phi:"φ",chi:"χ",psi:"ψ",omega:"ω",thetasym:"ϑ",upsih:"ϒ",piv:"ϖ",ensp:" ",emsp:" ",thinsp:" ",zwnj:"‌",zwj:"‍",lrm:"‎",rlm:"‏",ndash:"–",mdash:"—",lsquo:"‘",rsquo:"’",sbquo:"‚",ldquo:"“",rdquo:"”",bdquo:"„",dagger:"†",Dagger:"‡",bull:"•",hellip:"…",permil:"‰",prime:"′",Prime:"″",lsaquo:"‹",rsaquo:"›",oline:"‾",frasl:"⁄",euro:"€",image:"ℑ",weierp:"℘",real:"ℜ",trade:"™",alefsym:"ℵ",larr:"←",uarr:"↑",rarr:"→",darr:"↓",harr:"↔",crarr:"↵",lArr:"⇐",uArr:"⇑",rArr:"⇒",dArr:"⇓",hArr:"⇔",forall:"∀",part:"∂",exist:"∃",empty:"∅",nabla:"∇",isin:"∈",notin:"∉",ni:"∋",prod:"∏",sum:"∑",minus:"−",lowast:"∗",radic:"√",prop:"∝",infin:"∞",ang:"∠",and:"∧",or:"∨",cap:"∩",cup:"∪",int:"∫",there4:"∴",sim:"∼",cong:"≅",asymp:"≈",ne:"≠",equiv:"≡",le:"≤",ge:"≥",sub:"⊂",sup:"⊃",nsub:"⊄",sube:"⊆",supe:"⊇",oplus:"⊕",otimes:"⊗",perp:"⊥",sdot:"⋅",lceil:"⌈",rceil:"⌉",lfloor:"⌊",rfloor:"⌋",lang:"〈",rang:"〉",loz:"◊",spades:"♠",clubs:"♣",hearts:"♥",diams:"♦"};class te{constructor(){this.strict=void 0,this.curLine=void 0,this.startLoc=void 0,this.endLoc=void 0,this.errors=[],this.potentialArrowAt=-1,this.noArrowAt=[],this.noArrowParamsConversionAt=[],this.maybeInArrowParameters=!1,this.inPipeline=!1,this.inType=!1,this.noAnonFunctionType=!1,this.inPropertyName=!1,this.hasFlowComment=!1,this.isAmbientContext=!1,this.inAbstractClass=!1,this.topicContext={maxNumOfResolvableTopics:0,maxTopicIndex:null},this.soloAwait=!1,this.inFSharpPipelineDirectBody=!1,this.labels=[],this.decoratorStack=[[]],this.comments=[],this.trailingComments=[],this.leadingComments=[],this.commentStack=[],this.commentPreviousNode=null,this.pos=0,this.lineStart=0,this.type=p.eof,this.value=null,this.start=0,this.end=0,this.lastTokEndLoc=null,this.lastTokStartLoc=null,this.lastTokStart=0,this.lastTokEnd=0,this.context=[P.brace],this.exprAllowed=!0,this.containsEsc=!1,this.strictErrors=new Map,this.tokensLength=0}init(e){this.strict=!1!==e.strictMode&&"module"===e.sourceType,this.curLine=e.startLine,this.startLoc=this.endLoc=this.curPosition()}curPosition(){return new g(this.curLine,this.pos-this.lineStart)}clone(e){const t=new te,r=Object.keys(this);for(let n=0,s=r.length;n.",MissingClosingTagFragment:"Expected corresponding JSX closing tag for <>.",UnexpectedSequenceExpression:"Sequence expressions cannot be directly nested inside JSX. Did you mean to wrap it in parentheses (...)?",UnsupportedJsxValue:"JSX value should be either an expression or a quoted JSX text.",UnterminatedJsxContent:"Unterminated JSX contents.",UnwrappedAdjacentJSXElements:"Adjacent JSX elements must be wrapped in an enclosing tag. Did you want a JSX fragment <>...?"},E.SyntaxError);function ie(e){return!!e&&("JSXOpeningFragment"===e.type||"JSXClosingFragment"===e.type)}function oe(e){if("JSXIdentifier"===e.type)return e.name;if("JSXNamespacedName"===e.type)return e.namespace.name+":"+e.name.name;if("JSXMemberExpression"===e.type)return oe(e.object)+"."+oe(e.property);throw new Error("Node had unexpected type: "+e.type)}P.j_oTag=new w("...",!0),p.jsxName=new a("jsxName"),p.jsxText=new a("jsxText",{beforeExpr:!0}),p.jsxTagStart=new a("jsxTagStart",{startsExpr:!0}),p.jsxTagEnd=new a("jsxTagEnd"),p.jsxTagStart.updateContext=e=>{e.push(P.j_expr,P.j_oTag)};class ae extends W{constructor(...e){super(...e),this.types=new Set,this.enums=new Set,this.constEnums=new Set,this.classes=new Set,this.exportOnlyBindings=new Set}}class le extends K{createScope(e){return new ae(e)}declareName(e,t,r){const n=this.currentScope();if(1024&t)return this.maybeExportDefined(n,e),void n.exportOnlyBindings.add(e);super.declareName(...arguments),2&t&&(1&t||(this.checkRedeclarationInScope(n,e,t,r),this.maybeExportDefined(n,e)),n.types.add(e)),256&t&&n.enums.add(e),512&t&&n.constEnums.add(e),128&t&&n.classes.add(e)}isRedeclaredInScope(e,t,r){return e.enums.has(t)?!(256&r)||!!(512&r)!==e.constEnums.has(t):128&r&&e.classes.has(t)?!!e.lexical.has(t)&&!!(1&r):!!(2&r&&e.types.has(t))||super.isRedeclaredInScope(...arguments)}checkLocalExport(e){const t=this.scopeStack[0],{name:r}=e;t.types.has(r)||t.exportOnlyBindings.has(r)||super.checkLocalExport(e)}}class ce{constructor(){this.stacks=[]}enter(e){this.stacks.push(e)}exit(){this.stacks.pop()}currentFlags(){return this.stacks[this.stacks.length-1]}get hasAwait(){return(2&this.currentFlags())>0}get hasYield(){return(1&this.currentFlags())>0}get hasReturn(){return(4&this.currentFlags())>0}get hasIn(){return(8&this.currentFlags())>0}}function ue(e,t){return(e?2:0)|(t?1:0)}function pe(e){if(null==e)throw new Error(`Unexpected ${e} value.`);return e}function fe(e){if(!e)throw new Error("Assert fail")}const de=T({AbstractMethodHasImplementation:"Method '%0' cannot have an implementation because it is marked abstract.",AccesorCannotDeclareThisParameter:"'get' and 'set' accessors cannot declare 'this' parameters.",AccesorCannotHaveTypeParameters:"An accessor cannot have type parameters.",ClassMethodHasDeclare:"Class methods cannot have the 'declare' modifier.",ClassMethodHasReadonly:"Class methods cannot have the 'readonly' modifier.",ConstructorHasTypeParameters:"Type parameters cannot appear on a constructor declaration.",DeclareAccessor:"'declare' is not allowed in %0ters.",DeclareClassFieldHasInitializer:"Initializers are not allowed in ambient contexts.",DeclareFunctionHasImplementation:"An implementation cannot be declared in ambient contexts.",DuplicateAccessibilityModifier:"Accessibility modifier already seen.",DuplicateModifier:"Duplicate modifier: '%0'.",EmptyHeritageClauseType:"'%0' list cannot be empty.",EmptyTypeArguments:"Type argument list cannot be empty.",EmptyTypeParameters:"Type parameter list cannot be empty.",ExpectedAmbientAfterExportDeclare:"'export declare' must be followed by an ambient declaration.",ImportAliasHasImportType:"An import alias can not use 'import type'.",IncompatibleModifiers:"'%0' modifier cannot be used with '%1' modifier.",IndexSignatureHasAbstract:"Index signatures cannot have the 'abstract' modifier.",IndexSignatureHasAccessibility:"Index signatures cannot have an accessibility modifier ('%0').",IndexSignatureHasDeclare:"Index signatures cannot have the 'declare' modifier.",IndexSignatureHasOverride:"'override' modifier cannot appear on an index signature.",IndexSignatureHasStatic:"Index signatures cannot have the 'static' modifier.",InvalidModifierOnTypeMember:"'%0' modifier cannot appear on a type member.",InvalidModifiersOrder:"'%0' modifier must precede '%1' modifier.",InvalidTupleMemberLabel:"Tuple members must be labeled with a simple identifier.",MixedLabeledAndUnlabeledElements:"Tuple members must all have names or all not have names.",NonAbstractClassHasAbstractMethod:"Abstract methods can only appear within an abstract class.",NonClassMethodPropertyHasAbstractModifer:"'abstract' modifier can only appear on a class, method, or property declaration.",OptionalTypeBeforeRequired:"A required element cannot follow an optional element.",OverrideNotInSubClass:"This member cannot have an 'override' modifier because its containing class does not extend another class.",PatternIsOptional:"A binding pattern parameter cannot be optional in an implementation signature.",PrivateElementHasAbstract:"Private elements cannot have the 'abstract' modifier.",PrivateElementHasAccessibility:"Private elements cannot have an accessibility modifier ('%0').",ReadonlyForMethodSignature:"'readonly' modifier can only appear on a property declaration or index signature.",SetAccesorCannotHaveOptionalParameter:"A 'set' accessor cannot have an optional parameter.",SetAccesorCannotHaveRestParameter:"A 'set' accessor cannot have rest parameter.",SetAccesorCannotHaveReturnType:"A 'set' accessor cannot have a return type annotation.",StaticBlockCannotHaveModifier:"Static class blocks cannot have any modifier.",TypeAnnotationAfterAssign:"Type annotations must come before default assignments, e.g. instead of `age = 25: number` use `age: number = 25`.",TypeImportCannotSpecifyDefaultAndNamed:"A type-only import can specify a default import or named bindings, but not both.",UnexpectedParameterModifier:"A parameter property is only allowed in a constructor implementation.",UnexpectedReadonly:"'readonly' type modifier is only permitted on array and tuple literal types.",UnexpectedTypeAnnotation:"Did not expect a type annotation here.",UnexpectedTypeCastInParameter:"Unexpected type cast in parameter position.",UnsupportedImportTypeArgument:"Argument in a type import must be a string literal.",UnsupportedParameterPropertyKind:"A parameter property may not be declared using a binding pattern.",UnsupportedSignatureParameterKind:"Name in a signature must be an Identifier, ObjectPattern or ArrayPattern, instead got %0."},E.SyntaxError);function he(e){return"private"===e||"public"===e||"protected"===e}p.placeholder=new a("%%",{startsExpr:!0});const me=T({ClassNameIsRequired:"A class name is required."},E.SyntaxError);function ye(e,t){return e.some((e=>Array.isArray(e)?e[0]===t:e===t))}function ge(e,t,r){const n=e.find((e=>Array.isArray(e)?e[0]===t:e===t));return n&&Array.isArray(n)?n[1][r]:null}const be=["minimal","smart","fsharp"],ve=["hash","bar"],Ee={estree:e=>class extends e{parseRegExpLiteral({pattern:e,flags:t}){let r=null;try{r=new RegExp(e,t)}catch(e){}const n=this.estreeParseLiteral(r);return n.regex={pattern:e,flags:t},n}parseBigIntLiteral(e){let t;try{t=BigInt(e)}catch(e){t=null}const r=this.estreeParseLiteral(t);return r.bigint=String(r.value||e),r}parseDecimalLiteral(e){const t=this.estreeParseLiteral(null);return t.decimal=String(t.value||e),t}estreeParseLiteral(e){return this.parseLiteral(e,"Literal")}parseStringLiteral(e){return this.estreeParseLiteral(e)}parseNumericLiteral(e){return this.estreeParseLiteral(e)}parseNullLiteral(){return this.estreeParseLiteral(null)}parseBooleanLiteral(e){return this.estreeParseLiteral(e)}directiveToStmt(e){const t=e.value,r=this.startNodeAt(e.start,e.loc.start),n=this.startNodeAt(t.start,t.loc.start);return n.value=t.extra.expressionValue,n.raw=t.extra.raw,r.expression=this.finishNodeAt(n,"Literal",t.end,t.loc.end),r.directive=t.extra.raw.slice(1,-1),this.finishNodeAt(r,"ExpressionStatement",e.end,e.loc.end)}initFunction(e,t){super.initFunction(e,t),e.expression=!1}checkDeclaration(e){null!=e&&this.isObjectProperty(e)?this.checkDeclaration(e.value):super.checkDeclaration(e)}getObjectOrClassMethodParams(e){return e.value.params}isValidDirective(e){var t;return"ExpressionStatement"===e.type&&"Literal"===e.expression.type&&"string"==typeof e.expression.value&&!(null!=(t=e.expression.extra)&&t.parenthesized)}stmtToDirective(e){const t=super.stmtToDirective(e),r=e.expression.value;return this.addExtra(t.value,"expressionValue",r),t}parseBlockBody(e,...t){super.parseBlockBody(e,...t);const r=e.directives.map((e=>this.directiveToStmt(e)));e.body=r.concat(e.body),delete e.directives}pushClassMethod(e,t,r,n,s,i){this.parseMethod(t,r,n,s,i,"ClassMethod",!0),t.typeParameters&&(t.value.typeParameters=t.typeParameters,delete t.typeParameters),e.body.push(t)}parseMaybePrivateName(...e){const t=super.parseMaybePrivateName(...e);return"PrivateName"===t.type&&this.getPluginOption("estree","classFeatures")?this.convertPrivateNameToPrivateIdentifier(t):t}convertPrivateNameToPrivateIdentifier(e){const t=super.getPrivateNameSV(e);return delete(e=e).id,e.name=t,e.type="PrivateIdentifier",e}isPrivateName(e){return this.getPluginOption("estree","classFeatures")?"PrivateIdentifier"===e.type:super.isPrivateName(e)}getPrivateNameSV(e){return this.getPluginOption("estree","classFeatures")?e.name:super.getPrivateNameSV(e)}parseLiteral(e,t){const r=super.parseLiteral(e,t);return r.raw=r.extra.raw,delete r.extra,r}parseFunctionBody(e,t,r=!1){super.parseFunctionBody(e,t,r),e.expression="BlockStatement"!==e.body.type}parseMethod(e,t,r,n,s,i,o=!1){let a=this.startNode();return a.kind=e.kind,a=super.parseMethod(a,t,r,n,s,i,o),a.type="FunctionExpression",delete a.kind,e.value=a,"ClassPrivateMethod"===i&&(e.computed=!1),i="MethodDefinition",this.finishNode(e,i)}parseClassProperty(...e){const t=super.parseClassProperty(...e);return this.getPluginOption("estree","classFeatures")&&(t.type="PropertyDefinition"),t}parseClassPrivateProperty(...e){const t=super.parseClassPrivateProperty(...e);return this.getPluginOption("estree","classFeatures")&&(t.type="PropertyDefinition",t.computed=!1),t}parseObjectMethod(e,t,r,n,s){const i=super.parseObjectMethod(e,t,r,n,s);return i&&(i.type="Property","method"===i.kind&&(i.kind="init"),i.shorthand=!1),i}parseObjectProperty(e,t,r,n,s){const i=super.parseObjectProperty(e,t,r,n,s);return i&&(i.kind="init",i.type="Property"),i}toAssignable(e,t=!1){return null!=e&&this.isObjectProperty(e)?(this.toAssignable(e.value,t),e):super.toAssignable(e,t)}toAssignableObjectExpressionProp(e,...t){"get"===e.kind||"set"===e.kind?this.raise(e.key.start,x.PatternHasAccessor):e.method?this.raise(e.key.start,x.PatternHasMethod):super.toAssignableObjectExpressionProp(e,...t)}finishCallExpression(e,t){var r;(super.finishCallExpression(e,t),"Import"===e.callee.type)&&(e.type="ImportExpression",e.source=e.arguments[0],this.hasPlugin("importAssertions")&&(e.attributes=null!=(r=e.arguments[1])?r:null),delete e.arguments,delete e.callee);return e}toReferencedArguments(e){"ImportExpression"!==e.type&&super.toReferencedArguments(e)}parseExport(e){switch(super.parseExport(e),e.type){case"ExportAllDeclaration":e.exported=null;break;case"ExportNamedDeclaration":1===e.specifiers.length&&"ExportNamespaceSpecifier"===e.specifiers[0].type&&(e.type="ExportAllDeclaration",e.exported=e.specifiers[0].exported,delete e.specifiers)}return e}parseSubscript(e,t,r,n,s){const i=super.parseSubscript(e,t,r,n,s);if(s.optionalChainMember){if("OptionalMemberExpression"!==i.type&&"OptionalCallExpression"!==i.type||(i.type=i.type.substring(8)),s.stop){const e=this.startNodeAtNode(i);return e.expression=i,this.finishNode(e,"ChainExpression")}}else"MemberExpression"!==i.type&&"CallExpression"!==i.type||(i.optional=!1);return i}hasPropertyAsPrivateName(e){return"ChainExpression"===e.type&&(e=e.expression),super.hasPropertyAsPrivateName(e)}isOptionalChain(e){return"ChainExpression"===e.type}isObjectProperty(e){return"Property"===e.type&&"init"===e.kind&&!e.method}isObjectMethod(e){return e.method||"get"===e.kind||"set"===e.kind}},jsx:e=>class extends e{jsxReadToken(){let e="",t=this.state.pos;for(;;){if(this.state.pos>=this.length)throw this.raise(this.state.start,se.UnterminatedJsxContent);const r=this.input.charCodeAt(this.state.pos);switch(r){case 60:case 123:return this.state.pos===this.state.start?60===r&&this.state.exprAllowed?(++this.state.pos,this.finishToken(p.jsxTagStart)):super.getTokenFromCode(r):(e+=this.input.slice(t,this.state.pos),this.finishToken(p.jsxText,e));case 38:e+=this.input.slice(t,this.state.pos),e+=this.jsxReadEntity(),t=this.state.pos;break;case 62:case 125:default:h(r)?(e+=this.input.slice(t,this.state.pos),e+=this.jsxReadNewLine(!0),t=this.state.pos):++this.state.pos}}}jsxReadNewLine(e){const t=this.input.charCodeAt(this.state.pos);let r;return++this.state.pos,13===t&&10===this.input.charCodeAt(this.state.pos)?(++this.state.pos,r=e?"\n":"\r\n"):r=String.fromCharCode(t),++this.state.curLine,this.state.lineStart=this.state.pos,r}jsxReadString(e){let t="",r=++this.state.pos;for(;;){if(this.state.pos>=this.length)throw this.raise(this.state.start,x.UnterminatedString);const n=this.input.charCodeAt(this.state.pos);if(n===e)break;38===n?(t+=this.input.slice(r,this.state.pos),t+=this.jsxReadEntity(),r=this.state.pos):h(n)?(t+=this.input.slice(r,this.state.pos),t+=this.jsxReadNewLine(!1),r=this.state.pos):++this.state.pos}return t+=this.input.slice(r,this.state.pos++),this.finishToken(p.string,t)}jsxReadEntity(){let e,t="",r=0,n=this.input[this.state.pos];const s=++this.state.pos;for(;this.state.posclass extends e{constructor(...e){super(...e),this.flowPragma=void 0}getScopeHandler(){return H}shouldParseTypes(){return this.getPluginOption("flow","all")||"flow"===this.flowPragma}shouldParseEnums(){return!!this.getPluginOption("flow","enums")}finishToken(e,t){return e!==p.string&&e!==p.semi&&e!==p.interpreterDirective&&void 0===this.flowPragma&&(this.flowPragma=null),super.finishToken(e,t)}addComment(e){if(void 0===this.flowPragma){const t=Z.exec(e.value);if(t)if("flow"===t[1])this.flowPragma="flow";else{if("noflow"!==t[1])throw new Error("Unexpected flow pragma");this.flowPragma="noflow"}}return super.addComment(e)}flowParseTypeInitialiser(e){const t=this.state.inType;this.state.inType=!0,this.expect(e||p.colon);const r=this.flowParseType();return this.state.inType=t,r}flowParsePredicate(){const e=this.startNode(),t=this.state.start;return this.next(),this.expectContextual("checks"),this.state.lastTokStart>t+1&&this.raise(t,Y.UnexpectedSpaceBetweenModuloChecks),this.eat(p.parenL)?(e.value=this.parseExpression(),this.expect(p.parenR),this.finishNode(e,"DeclaredPredicate")):this.finishNode(e,"InferredPredicate")}flowParseTypeAndPredicateInitialiser(){const e=this.state.inType;this.state.inType=!0,this.expect(p.colon);let t=null,r=null;return this.match(p.modulo)?(this.state.inType=e,r=this.flowParsePredicate()):(t=this.flowParseType(),this.state.inType=e,this.match(p.modulo)&&(r=this.flowParsePredicate())),[t,r]}flowParseDeclareClass(e){return this.next(),this.flowParseInterfaceish(e,!0),this.finishNode(e,"DeclareClass")}flowParseDeclareFunction(e){this.next();const t=e.id=this.parseIdentifier(),r=this.startNode(),n=this.startNode();this.isRelational("<")?r.typeParameters=this.flowParseTypeParameterDeclaration():r.typeParameters=null,this.expect(p.parenL);const s=this.flowParseFunctionTypeParams();return r.params=s.params,r.rest=s.rest,r.this=s._this,this.expect(p.parenR),[r.returnType,e.predicate]=this.flowParseTypeAndPredicateInitialiser(),n.typeAnnotation=this.finishNode(r,"FunctionTypeAnnotation"),t.typeAnnotation=this.finishNode(n,"TypeAnnotation"),this.resetEndLocation(t),this.semicolon(),this.scope.declareName(e.id.name,2048,e.id.start),this.finishNode(e,"DeclareFunction")}flowParseDeclare(e,t){if(this.match(p._class))return this.flowParseDeclareClass(e);if(this.match(p._function))return this.flowParseDeclareFunction(e);if(this.match(p._var))return this.flowParseDeclareVariable(e);if(this.eatContextual("module"))return this.match(p.dot)?this.flowParseDeclareModuleExports(e):(t&&this.raise(this.state.lastTokStart,Y.NestedDeclareModule),this.flowParseDeclareModule(e));if(this.isContextual("type"))return this.flowParseDeclareTypeAlias(e);if(this.isContextual("opaque"))return this.flowParseDeclareOpaqueType(e);if(this.isContextual("interface"))return this.flowParseDeclareInterface(e);if(this.match(p._export))return this.flowParseDeclareExportDeclaration(e,t);throw this.unexpected()}flowParseDeclareVariable(e){return this.next(),e.id=this.flowParseTypeAnnotatableIdentifier(!0),this.scope.declareName(e.id.name,5,e.id.start),this.semicolon(),this.finishNode(e,"DeclareVariable")}flowParseDeclareModule(e){this.scope.enter(0),this.match(p.string)?e.id=this.parseExprAtom():e.id=this.parseIdentifier();const t=e.body=this.startNode(),r=t.body=[];for(this.expect(p.braceL);!this.match(p.braceR);){let e=this.startNode();this.match(p._import)?(this.next(),this.isContextual("type")||this.match(p._typeof)||this.raise(this.state.lastTokStart,Y.InvalidNonTypeImportInDeclareModule),this.parseImport(e)):(this.expectContextual("declare",Y.UnsupportedStatementInDeclareModule),e=this.flowParseDeclare(e,!0)),r.push(e)}this.scope.exit(),this.expect(p.braceR),this.finishNode(t,"BlockStatement");let n=null,s=!1;return r.forEach((e=>{!function(e){return"DeclareExportAllDeclaration"===e.type||"DeclareExportDeclaration"===e.type&&(!e.declaration||"TypeAlias"!==e.declaration.type&&"InterfaceDeclaration"!==e.declaration.type)}(e)?"DeclareModuleExports"===e.type&&(s&&this.raise(e.start,Y.DuplicateDeclareModuleExports),"ES"===n&&this.raise(e.start,Y.AmbiguousDeclareModuleKind),n="CommonJS",s=!0):("CommonJS"===n&&this.raise(e.start,Y.AmbiguousDeclareModuleKind),n="ES")})),e.kind=n||"CommonJS",this.finishNode(e,"DeclareModule")}flowParseDeclareExportDeclaration(e,t){if(this.expect(p._export),this.eat(p._default))return this.match(p._function)||this.match(p._class)?e.declaration=this.flowParseDeclare(this.startNode()):(e.declaration=this.flowParseType(),this.semicolon()),e.default=!0,this.finishNode(e,"DeclareExportDeclaration");if(this.match(p._const)||this.isLet()||(this.isContextual("type")||this.isContextual("interface"))&&!t){const e=this.state.value,t=Q[e];throw this.raise(this.state.start,Y.UnsupportedDeclareExportKind,e,t)}if(this.match(p._var)||this.match(p._function)||this.match(p._class)||this.isContextual("opaque"))return e.declaration=this.flowParseDeclare(this.startNode()),e.default=!1,this.finishNode(e,"DeclareExportDeclaration");if(this.match(p.star)||this.match(p.braceL)||this.isContextual("interface")||this.isContextual("type")||this.isContextual("opaque"))return"ExportNamedDeclaration"===(e=this.parseExport(e)).type&&(e.type="ExportDeclaration",e.default=!1,delete e.exportKind),e.type="Declare"+e.type,e;throw this.unexpected()}flowParseDeclareModuleExports(e){return this.next(),this.expectContextual("exports"),e.typeAnnotation=this.flowParseTypeAnnotation(),this.semicolon(),this.finishNode(e,"DeclareModuleExports")}flowParseDeclareTypeAlias(e){return this.next(),this.flowParseTypeAlias(e),e.type="DeclareTypeAlias",e}flowParseDeclareOpaqueType(e){return this.next(),this.flowParseOpaqueType(e,!0),e.type="DeclareOpaqueType",e}flowParseDeclareInterface(e){return this.next(),this.flowParseInterfaceish(e),this.finishNode(e,"DeclareInterface")}flowParseInterfaceish(e,t=!1){if(e.id=this.flowParseRestrictedIdentifier(!t,!0),this.scope.declareName(e.id.name,t?17:9,e.id.start),this.isRelational("<")?e.typeParameters=this.flowParseTypeParameterDeclaration():e.typeParameters=null,e.extends=[],e.implements=[],e.mixins=[],this.eat(p._extends))do{e.extends.push(this.flowParseInterfaceExtends())}while(!t&&this.eat(p.comma));if(this.isContextual("mixins")){this.next();do{e.mixins.push(this.flowParseInterfaceExtends())}while(this.eat(p.comma))}if(this.isContextual("implements")){this.next();do{e.implements.push(this.flowParseInterfaceExtends())}while(this.eat(p.comma))}e.body=this.flowParseObjectType({allowStatic:t,allowExact:!1,allowSpread:!1,allowProto:t,allowInexact:!1})}flowParseInterfaceExtends(){const e=this.startNode();return e.id=this.flowParseQualifiedTypeIdentifier(),this.isRelational("<")?e.typeParameters=this.flowParseTypeParameterInstantiation():e.typeParameters=null,this.finishNode(e,"InterfaceExtends")}flowParseInterface(e){return this.flowParseInterfaceish(e),this.finishNode(e,"InterfaceDeclaration")}checkNotUnderscore(e){"_"===e&&this.raise(this.state.start,Y.UnexpectedReservedUnderscore)}checkReservedType(e,t,r){J.has(e)&&this.raise(t,r?Y.AssignReservedType:Y.UnexpectedReservedType,e)}flowParseRestrictedIdentifier(e,t){return this.checkReservedType(this.state.value,this.state.start,t),this.parseIdentifier(e)}flowParseTypeAlias(e){return e.id=this.flowParseRestrictedIdentifier(!1,!0),this.scope.declareName(e.id.name,9,e.id.start),this.isRelational("<")?e.typeParameters=this.flowParseTypeParameterDeclaration():e.typeParameters=null,e.right=this.flowParseTypeInitialiser(p.eq),this.semicolon(),this.finishNode(e,"TypeAlias")}flowParseOpaqueType(e,t){return this.expectContextual("type"),e.id=this.flowParseRestrictedIdentifier(!0,!0),this.scope.declareName(e.id.name,9,e.id.start),this.isRelational("<")?e.typeParameters=this.flowParseTypeParameterDeclaration():e.typeParameters=null,e.supertype=null,this.match(p.colon)&&(e.supertype=this.flowParseTypeInitialiser(p.colon)),e.impltype=null,t||(e.impltype=this.flowParseTypeInitialiser(p.eq)),this.semicolon(),this.finishNode(e,"OpaqueType")}flowParseTypeParameter(e=!1){const t=this.state.start,r=this.startNode(),n=this.flowParseVariance(),s=this.flowParseTypeAnnotatableIdentifier();return r.name=s.name,r.variance=n,r.bound=s.typeAnnotation,this.match(p.eq)?(this.eat(p.eq),r.default=this.flowParseType()):e&&this.raise(t,Y.MissingTypeParamDefault),this.finishNode(r,"TypeParameter")}flowParseTypeParameterDeclaration(){const e=this.state.inType,t=this.startNode();t.params=[],this.state.inType=!0,this.isRelational("<")||this.match(p.jsxTagStart)?this.next():this.unexpected();let r=!1;do{const e=this.flowParseTypeParameter(r);t.params.push(e),e.default&&(r=!0),this.isRelational(">")||this.expect(p.comma)}while(!this.isRelational(">"));return this.expectRelational(">"),this.state.inType=e,this.finishNode(t,"TypeParameterDeclaration")}flowParseTypeParameterInstantiation(){const e=this.startNode(),t=this.state.inType;e.params=[],this.state.inType=!0,this.expectRelational("<");const r=this.state.noAnonFunctionType;for(this.state.noAnonFunctionType=!1;!this.isRelational(">");)e.params.push(this.flowParseType()),this.isRelational(">")||this.expect(p.comma);return this.state.noAnonFunctionType=r,this.expectRelational(">"),this.state.inType=t,this.finishNode(e,"TypeParameterInstantiation")}flowParseTypeParameterInstantiationCallOrNew(){const e=this.startNode(),t=this.state.inType;for(e.params=[],this.state.inType=!0,this.expectRelational("<");!this.isRelational(">");)e.params.push(this.flowParseTypeOrImplicitInstantiation()),this.isRelational(">")||this.expect(p.comma);return this.expectRelational(">"),this.state.inType=t,this.finishNode(e,"TypeParameterInstantiation")}flowParseInterfaceType(){const e=this.startNode();if(this.expectContextual("interface"),e.extends=[],this.eat(p._extends))do{e.extends.push(this.flowParseInterfaceExtends())}while(this.eat(p.comma));return e.body=this.flowParseObjectType({allowStatic:!1,allowExact:!1,allowSpread:!1,allowProto:!1,allowInexact:!1}),this.finishNode(e,"InterfaceTypeAnnotation")}flowParseObjectPropertyKey(){return this.match(p.num)||this.match(p.string)?this.parseExprAtom():this.parseIdentifier(!0)}flowParseObjectTypeIndexer(e,t,r){return e.static=t,this.lookahead().type===p.colon?(e.id=this.flowParseObjectPropertyKey(),e.key=this.flowParseTypeInitialiser()):(e.id=null,e.key=this.flowParseType()),this.expect(p.bracketR),e.value=this.flowParseTypeInitialiser(),e.variance=r,this.finishNode(e,"ObjectTypeIndexer")}flowParseObjectTypeInternalSlot(e,t){return e.static=t,e.id=this.flowParseObjectPropertyKey(),this.expect(p.bracketR),this.expect(p.bracketR),this.isRelational("<")||this.match(p.parenL)?(e.method=!0,e.optional=!1,e.value=this.flowParseObjectTypeMethodish(this.startNodeAt(e.start,e.loc.start))):(e.method=!1,this.eat(p.question)&&(e.optional=!0),e.value=this.flowParseTypeInitialiser()),this.finishNode(e,"ObjectTypeInternalSlot")}flowParseObjectTypeMethodish(e){for(e.params=[],e.rest=null,e.typeParameters=null,e.this=null,this.isRelational("<")&&(e.typeParameters=this.flowParseTypeParameterDeclaration()),this.expect(p.parenL),this.match(p._this)&&(e.this=this.flowParseFunctionTypeParam(!0),e.this.name=null,this.match(p.parenR)||this.expect(p.comma));!this.match(p.parenR)&&!this.match(p.ellipsis);)e.params.push(this.flowParseFunctionTypeParam(!1)),this.match(p.parenR)||this.expect(p.comma);return this.eat(p.ellipsis)&&(e.rest=this.flowParseFunctionTypeParam(!1)),this.expect(p.parenR),e.returnType=this.flowParseTypeInitialiser(),this.finishNode(e,"FunctionTypeAnnotation")}flowParseObjectTypeCallProperty(e,t){const r=this.startNode();return e.static=t,e.value=this.flowParseObjectTypeMethodish(r),this.finishNode(e,"ObjectTypeCallProperty")}flowParseObjectType({allowStatic:e,allowExact:t,allowSpread:r,allowProto:n,allowInexact:s}){const i=this.state.inType;this.state.inType=!0;const o=this.startNode();let a,l;o.callProperties=[],o.properties=[],o.indexers=[],o.internalSlots=[];let c=!1;for(t&&this.match(p.braceBarL)?(this.expect(p.braceBarL),a=p.braceBarR,l=!0):(this.expect(p.braceL),a=p.braceR,l=!1),o.exact=l;!this.match(a);){let t=!1,i=null,a=null;const u=this.startNode();if(n&&this.isContextual("proto")){const t=this.lookahead();t.type!==p.colon&&t.type!==p.question&&(this.next(),i=this.state.start,e=!1)}if(e&&this.isContextual("static")){const e=this.lookahead();e.type!==p.colon&&e.type!==p.question&&(this.next(),t=!0)}const f=this.flowParseVariance();if(this.eat(p.bracketL))null!=i&&this.unexpected(i),this.eat(p.bracketL)?(f&&this.unexpected(f.start),o.internalSlots.push(this.flowParseObjectTypeInternalSlot(u,t))):o.indexers.push(this.flowParseObjectTypeIndexer(u,t,f));else if(this.match(p.parenL)||this.isRelational("<"))null!=i&&this.unexpected(i),f&&this.unexpected(f.start),o.callProperties.push(this.flowParseObjectTypeCallProperty(u,t));else{let e="init";if(this.isContextual("get")||this.isContextual("set")){const t=this.lookahead();t.type!==p.name&&t.type!==p.string&&t.type!==p.num||(e=this.state.value,this.next())}const n=this.flowParseObjectTypeProperty(u,t,i,f,e,r,null!=s?s:!l);null===n?(c=!0,a=this.state.lastTokStart):o.properties.push(n)}this.flowObjectTypeSemicolon(),!a||this.match(p.braceR)||this.match(p.braceBarR)||this.raise(a,Y.UnexpectedExplicitInexactInObject)}this.expect(a),r&&(o.inexact=c);const u=this.finishNode(o,"ObjectTypeAnnotation");return this.state.inType=i,u}flowParseObjectTypeProperty(e,t,r,n,s,i,o){if(this.eat(p.ellipsis))return this.match(p.comma)||this.match(p.semi)||this.match(p.braceR)||this.match(p.braceBarR)?(i?o||this.raise(this.state.lastTokStart,Y.InexactInsideExact):this.raise(this.state.lastTokStart,Y.InexactInsideNonObject),n&&this.raise(n.start,Y.InexactVariance),null):(i||this.raise(this.state.lastTokStart,Y.UnexpectedSpreadType),null!=r&&this.unexpected(r),n&&this.raise(n.start,Y.SpreadVariance),e.argument=this.flowParseType(),this.finishNode(e,"ObjectTypeSpreadProperty"));{e.key=this.flowParseObjectPropertyKey(),e.static=t,e.proto=null!=r,e.kind=s;let o=!1;return this.isRelational("<")||this.match(p.parenL)?(e.method=!0,null!=r&&this.unexpected(r),n&&this.unexpected(n.start),e.value=this.flowParseObjectTypeMethodish(this.startNodeAt(e.start,e.loc.start)),"get"!==s&&"set"!==s||this.flowCheckGetterSetterParams(e),!i&&"constructor"===e.key.name&&e.value.this&&this.raise(e.value.this.start,Y.ThisParamBannedInConstructor)):("init"!==s&&this.unexpected(),e.method=!1,this.eat(p.question)&&(o=!0),e.value=this.flowParseTypeInitialiser(),e.variance=n),e.optional=o,this.finishNode(e,"ObjectTypeProperty")}}flowCheckGetterSetterParams(e){const t="get"===e.kind?0:1,r=e.start,n=e.value.params.length+(e.value.rest?1:0);e.value.this&&this.raise(e.value.this.start,"get"===e.kind?Y.GetterMayNotHaveThisParam:Y.SetterMayNotHaveThisParam),n!==t&&("get"===e.kind?this.raise(r,x.BadGetterArity):this.raise(r,x.BadSetterArity)),"set"===e.kind&&e.value.rest&&this.raise(r,x.BadSetterRestParameter)}flowObjectTypeSemicolon(){this.eat(p.semi)||this.eat(p.comma)||this.match(p.braceR)||this.match(p.braceBarR)||this.unexpected()}flowParseQualifiedTypeIdentifier(e,t,r){e=e||this.state.start,t=t||this.state.startLoc;let n=r||this.flowParseRestrictedIdentifier(!0);for(;this.eat(p.dot);){const r=this.startNodeAt(e,t);r.qualification=n,r.id=this.flowParseRestrictedIdentifier(!0),n=this.finishNode(r,"QualifiedTypeIdentifier")}return n}flowParseGenericType(e,t,r){const n=this.startNodeAt(e,t);return n.typeParameters=null,n.id=this.flowParseQualifiedTypeIdentifier(e,t,r),this.isRelational("<")&&(n.typeParameters=this.flowParseTypeParameterInstantiation()),this.finishNode(n,"GenericTypeAnnotation")}flowParseTypeofType(){const e=this.startNode();return this.expect(p._typeof),e.argument=this.flowParsePrimaryType(),this.finishNode(e,"TypeofTypeAnnotation")}flowParseTupleType(){const e=this.startNode();for(e.types=[],this.expect(p.bracketL);this.state.possuper.parseFunctionBody(e,!0,r))):super.parseFunctionBody(e,!1,r)}parseFunctionBodyAndFinish(e,t,r=!1){if(this.match(p.colon)){const t=this.startNode();[t.typeAnnotation,e.predicate]=this.flowParseTypeAndPredicateInitialiser(),e.returnType=t.typeAnnotation?this.finishNode(t,"TypeAnnotation"):null}super.parseFunctionBodyAndFinish(e,t,r)}parseStatement(e,t){if(this.state.strict&&this.match(p.name)&&"interface"===this.state.value){const e=this.lookahead();if(e.type===p.name||q(e.value)){const e=this.startNode();return this.next(),this.flowParseInterface(e)}}else if(this.shouldParseEnums()&&this.isContextual("enum")){const e=this.startNode();return this.next(),this.flowParseEnumDeclaration(e)}const r=super.parseStatement(e,t);return void 0!==this.flowPragma||this.isValidDirective(r)||(this.flowPragma=null),r}parseExpressionStatement(e,t){if("Identifier"===t.type)if("declare"===t.name){if(this.match(p._class)||this.match(p.name)||this.match(p._function)||this.match(p._var)||this.match(p._export))return this.flowParseDeclare(e)}else if(this.match(p.name)){if("interface"===t.name)return this.flowParseInterface(e);if("type"===t.name)return this.flowParseTypeAlias(e);if("opaque"===t.name)return this.flowParseOpaqueType(e,!1)}return super.parseExpressionStatement(e,t)}shouldParseExportDeclaration(){return this.isContextual("type")||this.isContextual("interface")||this.isContextual("opaque")||this.shouldParseEnums()&&this.isContextual("enum")||super.shouldParseExportDeclaration()}isExportDefaultSpecifier(){return(!this.match(p.name)||!("type"===this.state.value||"interface"===this.state.value||"opaque"===this.state.value||this.shouldParseEnums()&&"enum"===this.state.value))&&super.isExportDefaultSpecifier()}parseExportDefaultExpression(){if(this.shouldParseEnums()&&this.isContextual("enum")){const e=this.startNode();return this.next(),this.flowParseEnumDeclaration(e)}return super.parseExportDefaultExpression()}parseConditional(e,t,r,n){if(!this.match(p.question))return e;if(this.state.maybeInArrowParameters){const s=this.tryParse((()=>super.parseConditional(e,t,r)));return s.node?(s.error&&(this.state=s.failState),s.node):(s.error&&super.setOptionalParametersError(n,s.error),e)}this.expect(p.question);const s=this.state.clone(),i=this.state.noArrowAt,o=this.startNodeAt(t,r);let{consequent:a,failed:l}=this.tryParseConditionalConsequent(),[c,u]=this.getArrowLikeExpressions(a);if(l||u.length>0){const e=[...i];if(u.length>0){this.state=s,this.state.noArrowAt=e;for(let t=0;t1&&this.raise(s.start,Y.AmbiguousConditionalArrow),l&&1===c.length&&(this.state=s,this.state.noArrowAt=e.concat(c[0].start),({consequent:a,failed:l}=this.tryParseConditionalConsequent()))}return this.getArrowLikeExpressions(a,!0),this.state.noArrowAt=i,this.expect(p.colon),o.test=e,o.consequent=a,o.alternate=this.forwardNoArrowParamsConversionAt(o,(()=>this.parseMaybeAssign(void 0,void 0))),this.finishNode(o,"ConditionalExpression")}tryParseConditionalConsequent(){this.state.noArrowParamsConversionAt.push(this.state.start);const e=this.parseMaybeAssignAllowIn(),t=!this.match(p.colon);return this.state.noArrowParamsConversionAt.pop(),{consequent:e,failed:t}}getArrowLikeExpressions(e,t){const r=[e],n=[];for(;0!==r.length;){const e=r.pop();"ArrowFunctionExpression"===e.type?(e.typeParameters||!e.returnType?this.finishArrowValidation(e):n.push(e),r.push(e.body)):"ConditionalExpression"===e.type&&(r.push(e.consequent),r.push(e.alternate))}return t?(n.forEach((e=>this.finishArrowValidation(e))),[n,[]]):function(e,t){const r=[],n=[];for(let s=0;se.params.every((e=>this.isAssignable(e,!0)))))}finishArrowValidation(e){var t;this.toAssignableList(e.params,null==(t=e.extra)?void 0:t.trailingComma,!1),this.scope.enter(6),super.checkParams(e,!1,!0),this.scope.exit()}forwardNoArrowParamsConversionAt(e,t){let r;return-1!==this.state.noArrowParamsConversionAt.indexOf(e.start)?(this.state.noArrowParamsConversionAt.push(this.state.start),r=t(),this.state.noArrowParamsConversionAt.pop()):r=t(),r}parseParenItem(e,t,r){if(e=super.parseParenItem(e,t,r),this.eat(p.question)&&(e.optional=!0,this.resetEndLocation(e)),this.match(p.colon)){const n=this.startNodeAt(t,r);return n.expression=e,n.typeAnnotation=this.flowParseTypeAnnotation(),this.finishNode(n,"TypeCastExpression")}return e}assertModuleNodeAllowed(e){"ImportDeclaration"===e.type&&("type"===e.importKind||"typeof"===e.importKind)||"ExportNamedDeclaration"===e.type&&"type"===e.exportKind||"ExportAllDeclaration"===e.type&&"type"===e.exportKind||super.assertModuleNodeAllowed(e)}parseExport(e){const t=super.parseExport(e);return"ExportNamedDeclaration"!==t.type&&"ExportAllDeclaration"!==t.type||(t.exportKind=t.exportKind||"value"),t}parseExportDeclaration(e){if(this.isContextual("type")){e.exportKind="type";const t=this.startNode();return this.next(),this.match(p.braceL)?(e.specifiers=this.parseExportSpecifiers(),this.parseExportFrom(e),null):this.flowParseTypeAlias(t)}if(this.isContextual("opaque")){e.exportKind="type";const t=this.startNode();return this.next(),this.flowParseOpaqueType(t,!1)}if(this.isContextual("interface")){e.exportKind="type";const t=this.startNode();return this.next(),this.flowParseInterface(t)}if(this.shouldParseEnums()&&this.isContextual("enum")){e.exportKind="value";const t=this.startNode();return this.next(),this.flowParseEnumDeclaration(t)}return super.parseExportDeclaration(e)}eatExportStar(e){return!!super.eatExportStar(...arguments)||!(!this.isContextual("type")||this.lookahead().type!==p.star)&&(e.exportKind="type",this.next(),this.next(),!0)}maybeParseExportNamespaceSpecifier(e){const t=this.state.start,r=super.maybeParseExportNamespaceSpecifier(e);return r&&"type"===e.exportKind&&this.unexpected(t),r}parseClassId(e,t,r){super.parseClassId(e,t,r),this.isRelational("<")&&(e.typeParameters=this.flowParseTypeParameterDeclaration())}parseClassMember(e,t,r){const n=this.state.start;if(this.isContextual("declare")){if(this.parseClassMemberFromModifier(e,t))return;t.declare=!0}super.parseClassMember(e,t,r),t.declare&&("ClassProperty"!==t.type&&"ClassPrivateProperty"!==t.type&&"PropertyDefinition"!==t.type?this.raise(n,Y.DeclareClassElement):t.value&&this.raise(t.value.start,Y.DeclareClassFieldInitializer))}isIterator(e){return"iterator"===e||"asyncIterator"===e}readIterator(){const e=super.readWord1(),t="@@"+e;this.isIterator(e)&&this.state.inType||this.raise(this.state.pos,x.InvalidIdentifier,t),this.finishToken(p.name,t)}getTokenFromCode(e){const t=this.input.charCodeAt(this.state.pos+1);return 123===e&&124===t?this.finishOp(p.braceBarL,2):!this.state.inType||62!==e&&60!==e?this.state.inType&&63===e?46===t?this.finishOp(p.questionDot,2):this.finishOp(p.question,1):function(e,t){return 64===e&&64===t}(e,t)?(this.state.pos+=2,this.readIterator()):super.getTokenFromCode(e):this.finishOp(p.relational,1)}isAssignable(e,t){switch(e.type){case"Identifier":case"ObjectPattern":case"ArrayPattern":case"AssignmentPattern":return!0;case"ObjectExpression":{const t=e.properties.length-1;return e.properties.every(((e,r)=>"ObjectMethod"!==e.type&&(r===t||"SpreadElement"===e.type)&&this.isAssignable(e)))}case"ObjectProperty":return this.isAssignable(e.value);case"SpreadElement":return this.isAssignable(e.argument);case"ArrayExpression":return e.elements.every((e=>this.isAssignable(e)));case"AssignmentExpression":return"="===e.operator;case"ParenthesizedExpression":case"TypeCastExpression":return this.isAssignable(e.expression);case"MemberExpression":case"OptionalMemberExpression":return!t;default:return!1}}toAssignable(e,t=!1){return"TypeCastExpression"===e.type?super.toAssignable(this.typeCastToParameter(e),t):super.toAssignable(e,t)}toAssignableList(e,t,r){for(let t=0;t1)&&t||this.raise(s.typeAnnotation.start,Y.TypeCastInPattern)}return e}parseArrayLike(e,t,r,n){const s=super.parseArrayLike(e,t,r,n);return t&&!this.state.maybeInArrowParameters&&this.toReferencedList(s.elements),s}checkLVal(e,...t){if("TypeCastExpression"!==e.type)return super.checkLVal(e,...t)}parseClassProperty(e){return this.match(p.colon)&&(e.typeAnnotation=this.flowParseTypeAnnotation()),super.parseClassProperty(e)}parseClassPrivateProperty(e){return this.match(p.colon)&&(e.typeAnnotation=this.flowParseTypeAnnotation()),super.parseClassPrivateProperty(e)}isClassMethod(){return this.isRelational("<")||super.isClassMethod()}isClassProperty(){return this.match(p.colon)||super.isClassProperty()}isNonstaticConstructor(e){return!this.match(p.colon)&&super.isNonstaticConstructor(e)}pushClassMethod(e,t,r,n,s,i){if(t.variance&&this.unexpected(t.variance.start),delete t.variance,this.isRelational("<")&&(t.typeParameters=this.flowParseTypeParameterDeclaration()),super.pushClassMethod(e,t,r,n,s,i),t.params&&s){const e=t.params;e.length>0&&this.isThisParam(e[0])&&this.raise(t.start,Y.ThisParamBannedInConstructor)}else if("MethodDefinition"===t.type&&s&&t.value.params){const e=t.value.params;e.length>0&&this.isThisParam(e[0])&&this.raise(t.start,Y.ThisParamBannedInConstructor)}}pushClassPrivateMethod(e,t,r,n){t.variance&&this.unexpected(t.variance.start),delete t.variance,this.isRelational("<")&&(t.typeParameters=this.flowParseTypeParameterDeclaration()),super.pushClassPrivateMethod(e,t,r,n)}parseClassSuper(e){if(super.parseClassSuper(e),e.superClass&&this.isRelational("<")&&(e.superTypeParameters=this.flowParseTypeParameterInstantiation()),this.isContextual("implements")){this.next();const t=e.implements=[];do{const e=this.startNode();e.id=this.flowParseRestrictedIdentifier(!0),this.isRelational("<")?e.typeParameters=this.flowParseTypeParameterInstantiation():e.typeParameters=null,t.push(this.finishNode(e,"ClassImplements"))}while(this.eat(p.comma))}}checkGetterSetterParams(e){super.checkGetterSetterParams(e);const t=this.getObjectOrClassMethodParams(e);if(t.length>0){const r=t[0];this.isThisParam(r)&&"get"===e.kind?this.raise(r.start,Y.GetterMayNotHaveThisParam):this.isThisParam(r)&&this.raise(r.start,Y.SetterMayNotHaveThisParam)}}parsePropertyName(e,t){const r=this.flowParseVariance(),n=super.parsePropertyName(e,t);return e.variance=r,n}parseObjPropValue(e,t,r,n,s,i,o,a){let l;e.variance&&this.unexpected(e.variance.start),delete e.variance,this.isRelational("<")&&!o&&(l=this.flowParseTypeParameterDeclaration(),this.match(p.parenL)||this.unexpected()),super.parseObjPropValue(e,t,r,n,s,i,o,a),l&&((e.value||e).typeParameters=l)}parseAssignableListItemTypes(e){return this.eat(p.question)&&("Identifier"!==e.type&&this.raise(e.start,Y.OptionalBindingPattern),this.isThisParam(e)&&this.raise(e.start,Y.ThisParamMayNotBeOptional),e.optional=!0),this.match(p.colon)?e.typeAnnotation=this.flowParseTypeAnnotation():this.isThisParam(e)&&this.raise(e.start,Y.ThisParamAnnotationRequired),this.match(p.eq)&&this.isThisParam(e)&&this.raise(e.start,Y.ThisParamNoDefault),this.resetEndLocation(e),e}parseMaybeDefault(e,t,r){const n=super.parseMaybeDefault(e,t,r);return"AssignmentPattern"===n.type&&n.typeAnnotation&&n.right.startsuper.parseMaybeAssign(e,t)),s),!n.error)return n.node;const{context:r}=this.state,i=r[r.length-1];i===P.j_oTag?r.length-=2:i===P.j_expr&&(r.length-=1)}if(null!=(r=n)&&r.error||this.isRelational("<")){var i,o;let r;s=s||this.state.clone();const a=this.tryParse((n=>{var s;r=this.flowParseTypeParameterDeclaration();const i=this.forwardNoArrowParamsConversionAt(r,(()=>{const n=super.parseMaybeAssign(e,t);return this.resetStartLocationFromNode(n,r),n}));"ArrowFunctionExpression"!==i.type&&null!=(s=i.extra)&&s.parenthesized&&n();const o=this.maybeUnwrapTypeCastExpression(i);return o.typeParameters=r,this.resetStartLocationFromNode(o,r),i}),s);let l=null;if(a.node&&"ArrowFunctionExpression"===this.maybeUnwrapTypeCastExpression(a.node).type){if(!a.error&&!a.aborted)return a.node.async&&this.raise(r.start,Y.UnexpectedTypeParameterBeforeAsyncArrowFunction),a.node;l=a.node}if(null!=(i=n)&&i.node)return this.state=n.failState,n.node;if(l)return this.state=a.failState,l;if(null!=(o=n)&&o.thrown)throw n.error;if(a.thrown)throw a.error;throw this.raise(r.start,Y.UnexpectedTokenAfterTypeParameter)}return super.parseMaybeAssign(e,t)}parseArrow(e){if(this.match(p.colon)){const t=this.tryParse((()=>{const t=this.state.noAnonFunctionType;this.state.noAnonFunctionType=!0;const r=this.startNode();return[r.typeAnnotation,e.predicate]=this.flowParseTypeAndPredicateInitialiser(),this.state.noAnonFunctionType=t,this.canInsertSemicolon()&&this.unexpected(),this.match(p.arrow)||this.unexpected(),r}));if(t.thrown)return null;t.error&&(this.state=t.failState),e.returnType=t.node.typeAnnotation?this.finishNode(t.node,"TypeAnnotation"):null}return super.parseArrow(e)}shouldParseArrow(){return this.match(p.colon)||super.shouldParseArrow()}setArrowFunctionParameters(e,t){-1!==this.state.noArrowParamsConversionAt.indexOf(e.start)?e.params=t:super.setArrowFunctionParameters(e,t)}checkParams(e,t,r){if(!r||-1===this.state.noArrowParamsConversionAt.indexOf(e.start)){for(let t=0;t0&&this.raise(e.params[t].start,Y.ThisParamMustBeFirst);return super.checkParams(...arguments)}}parseParenAndDistinguishExpression(e){return super.parseParenAndDistinguishExpression(e&&-1===this.state.noArrowAt.indexOf(this.state.start))}parseSubscripts(e,t,r,n){if("Identifier"===e.type&&"async"===e.name&&-1!==this.state.noArrowAt.indexOf(t)){this.next();const n=this.startNodeAt(t,r);n.callee=e,n.arguments=this.parseCallExpressionArguments(p.parenR,!1),e=this.finishNode(n,"CallExpression")}else if("Identifier"===e.type&&"async"===e.name&&this.isRelational("<")){const s=this.state.clone(),i=this.tryParse((e=>this.parseAsyncArrowWithTypeParameters(t,r)||e()),s);if(!i.error&&!i.aborted)return i.node;const o=this.tryParse((()=>super.parseSubscripts(e,t,r,n)),s);if(o.node&&!o.error)return o.node;if(i.node)return this.state=i.failState,i.node;if(o.node)return this.state=o.failState,o.node;throw i.error||o.error}return super.parseSubscripts(e,t,r,n)}parseSubscript(e,t,r,n,s){if(this.match(p.questionDot)&&this.isLookaheadToken_lt()){if(s.optionalChainMember=!0,n)return s.stop=!0,e;this.next();const i=this.startNodeAt(t,r);return i.callee=e,i.typeArguments=this.flowParseTypeParameterInstantiation(),this.expect(p.parenL),i.arguments=this.parseCallExpressionArguments(p.parenR,!1),i.optional=!0,this.finishCallExpression(i,!0)}if(!n&&this.shouldParseTypes()&&this.isRelational("<")){const n=this.startNodeAt(t,r);n.callee=e;const i=this.tryParse((()=>(n.typeArguments=this.flowParseTypeParameterInstantiationCallOrNew(),this.expect(p.parenL),n.arguments=this.parseCallExpressionArguments(p.parenR,!1),s.optionalChainMember&&(n.optional=!1),this.finishCallExpression(n,s.optionalChainMember))));if(i.node)return i.error&&(this.state=i.failState),i.node}return super.parseSubscript(e,t,r,n,s)}parseNewArguments(e){let t=null;this.shouldParseTypes()&&this.isRelational("<")&&(t=this.tryParse((()=>this.flowParseTypeParameterInstantiationCallOrNew())).node),e.typeArguments=t,super.parseNewArguments(e)}parseAsyncArrowWithTypeParameters(e,t){const r=this.startNodeAt(e,t);if(this.parseFunctionParams(r),this.parseArrow(r))return this.parseArrowExpression(r,void 0,!0)}readToken_mult_modulo(e){const t=this.input.charCodeAt(this.state.pos+1);if(42===e&&47===t&&this.state.hasFlowComment)return this.state.hasFlowComment=!1,this.state.pos+=2,void this.nextToken();super.readToken_mult_modulo(e)}readToken_pipe_amp(e){const t=this.input.charCodeAt(this.state.pos+1);124!==e||125!==t?super.readToken_pipe_amp(e):this.finishOp(p.braceBarR,2)}parseTopLevel(e,t){const r=super.parseTopLevel(e,t);return this.state.hasFlowComment&&this.raise(this.state.pos,Y.UnterminatedFlowComment),r}skipBlockComment(){if(this.hasPlugin("flowComments")&&this.skipFlowComment())return this.state.hasFlowComment&&this.unexpected(null,Y.NestedFlowComment),this.hasFlowCommentCompletion(),this.state.pos+=this.skipFlowComment(),void(this.state.hasFlowComment=!0);if(this.state.hasFlowComment){const e=this.input.indexOf("*-/",this.state.pos+=2);if(-1===e)throw this.raise(this.state.pos-2,x.UnterminatedComment);this.state.pos=e+3}else super.skipBlockComment()}skipFlowComment(){const{pos:e}=this.state;let t=2;for(;[32,9].includes(this.input.charCodeAt(e+t));)t++;const r=this.input.charCodeAt(t+e),n=this.input.charCodeAt(t+e+1);return 58===r&&58===n?t+2:"flow-include"===this.input.slice(t+e,t+e+12)?t+12:58===r&&58!==n&&t}hasFlowCommentCompletion(){if(-1===this.input.indexOf("*/",this.state.pos))throw this.raise(this.state.pos,x.UnterminatedComment)}flowEnumErrorBooleanMemberNotInitialized(e,{enumName:t,memberName:r}){this.raise(e,Y.EnumBooleanMemberNotInitialized,r,t)}flowEnumErrorInvalidMemberName(e,{enumName:t,memberName:r}){const n=r[0].toUpperCase()+r.slice(1);this.raise(e,Y.EnumInvalidMemberName,r,n,t)}flowEnumErrorDuplicateMemberName(e,{enumName:t,memberName:r}){this.raise(e,Y.EnumDuplicateMemberName,r,t)}flowEnumErrorInconsistentMemberValues(e,{enumName:t}){this.raise(e,Y.EnumInconsistentMemberValues,t)}flowEnumErrorInvalidExplicitType(e,{enumName:t,suppliedType:r}){return this.raise(e,null===r?Y.EnumInvalidExplicitTypeUnknownSupplied:Y.EnumInvalidExplicitType,t,r)}flowEnumErrorInvalidMemberInitializer(e,{enumName:t,explicitType:r,memberName:n}){let s=null;switch(r){case"boolean":case"number":case"string":s=Y.EnumInvalidMemberInitializerPrimaryType;break;case"symbol":s=Y.EnumInvalidMemberInitializerSymbolType;break;default:s=Y.EnumInvalidMemberInitializerUnknownType}return this.raise(e,s,t,n,r)}flowEnumErrorNumberMemberNotInitialized(e,{enumName:t,memberName:r}){this.raise(e,Y.EnumNumberMemberNotInitialized,t,r)}flowEnumErrorStringMemberInconsistentlyInitailized(e,{enumName:t}){this.raise(e,Y.EnumStringMemberInconsistentlyInitailized,t)}flowEnumMemberInit(){const e=this.state.start,t=()=>this.match(p.comma)||this.match(p.braceR);switch(this.state.type){case p.num:{const r=this.parseNumericLiteral(this.state.value);return t()?{type:"number",pos:r.start,value:r}:{type:"invalid",pos:e}}case p.string:{const r=this.parseStringLiteral(this.state.value);return t()?{type:"string",pos:r.start,value:r}:{type:"invalid",pos:e}}case p._true:case p._false:{const r=this.parseBooleanLiteral(this.match(p._true));return t()?{type:"boolean",pos:r.start,value:r}:{type:"invalid",pos:e}}default:return{type:"invalid",pos:e}}}flowEnumMemberRaw(){const e=this.state.start;return{id:this.parseIdentifier(!0),init:this.eat(p.eq)?this.flowEnumMemberInit():{type:"none",pos:e}}}flowEnumCheckExplicitTypeMismatch(e,t,r){const{explicitType:n}=t;null!==n&&n!==r&&this.flowEnumErrorInvalidMemberInitializer(e,t)}flowEnumMembers({enumName:e,explicitType:t}){const r=new Set,n={booleanMembers:[],numberMembers:[],stringMembers:[],defaultedMembers:[]};let s=!1;for(;!this.match(p.braceR);){if(this.eat(p.ellipsis)){s=!0;break}const i=this.startNode(),{id:o,init:a}=this.flowEnumMemberRaw(),l=o.name;if(""===l)continue;/^[a-z]/.test(l)&&this.flowEnumErrorInvalidMemberName(o.start,{enumName:e,memberName:l}),r.has(l)&&this.flowEnumErrorDuplicateMemberName(o.start,{enumName:e,memberName:l}),r.add(l);const c={enumName:e,explicitType:t,memberName:l};switch(i.id=o,a.type){case"boolean":this.flowEnumCheckExplicitTypeMismatch(a.pos,c,"boolean"),i.init=a.value,n.booleanMembers.push(this.finishNode(i,"EnumBooleanMember"));break;case"number":this.flowEnumCheckExplicitTypeMismatch(a.pos,c,"number"),i.init=a.value,n.numberMembers.push(this.finishNode(i,"EnumNumberMember"));break;case"string":this.flowEnumCheckExplicitTypeMismatch(a.pos,c,"string"),i.init=a.value,n.stringMembers.push(this.finishNode(i,"EnumStringMember"));break;case"invalid":throw this.flowEnumErrorInvalidMemberInitializer(a.pos,c);case"none":switch(t){case"boolean":this.flowEnumErrorBooleanMemberNotInitialized(a.pos,c);break;case"number":this.flowEnumErrorNumberMemberNotInitialized(a.pos,c);break;default:n.defaultedMembers.push(this.finishNode(i,"EnumDefaultedMember"))}}this.match(p.braceR)||this.expect(p.comma)}return{members:n,hasUnknownMembers:s}}flowEnumStringMembers(e,t,{enumName:r}){if(0===e.length)return t;if(0===t.length)return e;if(t.length>e.length){for(const t of e)this.flowEnumErrorStringMemberInconsistentlyInitailized(t.start,{enumName:r});return t}for(const e of t)this.flowEnumErrorStringMemberInconsistentlyInitailized(e.start,{enumName:r});return e}flowEnumParseExplicitType({enumName:e}){if(this.eatContextual("of")){if(!this.match(p.name))throw this.flowEnumErrorInvalidExplicitType(this.state.start,{enumName:e,suppliedType:null});const{value:t}=this.state;return this.next(),"boolean"!==t&&"number"!==t&&"string"!==t&&"symbol"!==t&&this.flowEnumErrorInvalidExplicitType(this.state.start,{enumName:e,suppliedType:t}),t}return null}flowEnumBody(e,{enumName:t,nameLoc:r}){const n=this.flowEnumParseExplicitType({enumName:t});this.expect(p.braceL);const{members:s,hasUnknownMembers:i}=this.flowEnumMembers({enumName:t,explicitType:n});switch(e.hasUnknownMembers=i,n){case"boolean":return e.explicitType=!0,e.members=s.booleanMembers,this.expect(p.braceR),this.finishNode(e,"EnumBooleanBody");case"number":return e.explicitType=!0,e.members=s.numberMembers,this.expect(p.braceR),this.finishNode(e,"EnumNumberBody");case"string":return e.explicitType=!0,e.members=this.flowEnumStringMembers(s.stringMembers,s.defaultedMembers,{enumName:t}),this.expect(p.braceR),this.finishNode(e,"EnumStringBody");case"symbol":return e.members=s.defaultedMembers,this.expect(p.braceR),this.finishNode(e,"EnumSymbolBody");default:{const n=()=>(e.members=[],this.expect(p.braceR),this.finishNode(e,"EnumStringBody"));e.explicitType=!1;const i=s.booleanMembers.length,o=s.numberMembers.length,a=s.stringMembers.length,l=s.defaultedMembers.length;if(i||o||a||l){if(i||o){if(!o&&!a&&i>=l){for(const e of s.defaultedMembers)this.flowEnumErrorBooleanMemberNotInitialized(e.start,{enumName:t,memberName:e.id.name});return e.members=s.booleanMembers,this.expect(p.braceR),this.finishNode(e,"EnumBooleanBody")}if(!i&&!a&&o>=l){for(const e of s.defaultedMembers)this.flowEnumErrorNumberMemberNotInitialized(e.start,{enumName:t,memberName:e.id.name});return e.members=s.numberMembers,this.expect(p.braceR),this.finishNode(e,"EnumNumberBody")}return this.flowEnumErrorInconsistentMemberValues(r,{enumName:t}),n()}return e.members=this.flowEnumStringMembers(s.stringMembers,s.defaultedMembers,{enumName:t}),this.expect(p.braceR),this.finishNode(e,"EnumStringBody")}return n()}}}flowParseEnumDeclaration(e){const t=this.parseIdentifier();return e.id=t,e.body=this.flowEnumBody(this.startNode(),{enumName:t.name,nameLoc:t.start}),this.finishNode(e,"EnumDeclaration")}isLookaheadToken_lt(){const e=this.nextTokenStart();if(60===this.input.charCodeAt(e)){const t=this.input.charCodeAt(e+1);return 60!==t&&61!==t}return!1}maybeUnwrapTypeCastExpression(e){return"TypeCastExpression"===e.type?e.expression:e}},typescript:e=>class extends e{getScopeHandler(){return le}tsIsIdentifier(){return this.match(p.name)}tsTokenCanFollowModifier(){return(this.match(p.bracketL)||this.match(p.braceL)||this.match(p.star)||this.match(p.ellipsis)||this.match(p.privateName)||this.isLiteralPropertyName())&&!this.hasPrecedingLineBreak()}tsNextTokenCanFollowModifier(){return this.next(),this.tsTokenCanFollowModifier()}tsParseModifier(e){if(!this.match(p.name))return;const t=this.state.value;return-1!==e.indexOf(t)&&this.tsTryParse(this.tsNextTokenCanFollowModifier.bind(this))?t:void 0}tsParseModifiers(e,t,r,n){const s=(t,r,n,s)=>{r===n&&e[s]&&this.raise(t,de.InvalidModifiersOrder,n,s)},i=(t,r,n,s)=>{(e[n]&&r===s||e[s]&&r===n)&&this.raise(t,de.IncompatibleModifiers,n,s)};for(;;){const o=this.state.start,a=this.tsParseModifier(t.concat(null!=r?r:[]));if(!a)break;he(a)?e.accessibility?this.raise(o,de.DuplicateAccessibilityModifier):(s(o,a,a,"override"),s(o,a,a,"static"),s(o,a,a,"readonly"),e.accessibility=a):(Object.hasOwnProperty.call(e,a)?this.raise(o,de.DuplicateModifier,a):(s(o,a,"static","readonly"),s(o,a,"static","override"),s(o,a,"override","readonly"),s(o,a,"abstract","override"),i(o,a,"declare","override"),i(o,a,"static","abstract")),e[a]=!0),null!=r&&r.includes(a)&&this.raise(o,n,a)}}tsIsListTerminator(e){switch(e){case"EnumMembers":case"TypeMembers":return this.match(p.braceR);case"HeritageClauseElement":return this.match(p.braceL);case"TupleElementTypes":return this.match(p.bracketR);case"TypeParametersOrArguments":return this.isRelational(">")}throw new Error("Unreachable")}tsParseList(e,t){const r=[];for(;!this.tsIsListTerminator(e);)r.push(t());return r}tsParseDelimitedList(e,t){return pe(this.tsParseDelimitedListWorker(e,t,!0))}tsParseDelimitedListWorker(e,t,r){const n=[];for(;!this.tsIsListTerminator(e);){const s=t();if(null==s)return;if(n.push(s),!this.eat(p.comma)){if(this.tsIsListTerminator(e))break;return void(r&&this.expect(p.comma))}}return n}tsParseBracketedList(e,t,r,n){n||(r?this.expect(p.bracketL):this.expectRelational("<"));const s=this.tsParseDelimitedList(e,t);return r?this.expect(p.bracketR):this.expectRelational(">"),s}tsParseImportType(){const e=this.startNode();return this.expect(p._import),this.expect(p.parenL),this.match(p.string)||this.raise(this.state.start,de.UnsupportedImportTypeArgument),e.argument=this.parseExprAtom(),this.expect(p.parenR),this.eat(p.dot)&&(e.qualifier=this.tsParseEntityName(!0)),this.isRelational("<")&&(e.typeParameters=this.tsParseTypeArguments()),this.finishNode(e,"TSImportType")}tsParseEntityName(e){let t=this.parseIdentifier();for(;this.eat(p.dot);){const r=this.startNodeAtNode(t);r.left=t,r.right=this.parseIdentifier(e),t=this.finishNode(r,"TSQualifiedName")}return t}tsParseTypeReference(){const e=this.startNode();return e.typeName=this.tsParseEntityName(!1),!this.hasPrecedingLineBreak()&&this.isRelational("<")&&(e.typeParameters=this.tsParseTypeArguments()),this.finishNode(e,"TSTypeReference")}tsParseThisTypePredicate(e){this.next();const t=this.startNodeAtNode(e);return t.parameterName=e,t.typeAnnotation=this.tsParseTypeAnnotation(!1),t.asserts=!1,this.finishNode(t,"TSTypePredicate")}tsParseThisTypeNode(){const e=this.startNode();return this.next(),this.finishNode(e,"TSThisType")}tsParseTypeQuery(){const e=this.startNode();return this.expect(p._typeof),this.match(p._import)?e.exprName=this.tsParseImportType():e.exprName=this.tsParseEntityName(!0),this.finishNode(e,"TSTypeQuery")}tsParseTypeParameter(){const e=this.startNode();return e.name=this.parseIdentifierName(e.start),e.constraint=this.tsEatThenParseType(p._extends),e.default=this.tsEatThenParseType(p.eq),this.finishNode(e,"TSTypeParameter")}tsTryParseTypeParameters(){if(this.isRelational("<"))return this.tsParseTypeParameters()}tsParseTypeParameters(){const e=this.startNode();return this.isRelational("<")||this.match(p.jsxTagStart)?this.next():this.unexpected(),e.params=this.tsParseBracketedList("TypeParametersOrArguments",this.tsParseTypeParameter.bind(this),!1,!0),0===e.params.length&&this.raise(e.start,de.EmptyTypeParameters),this.finishNode(e,"TSTypeParameterDeclaration")}tsTryNextParseConstantContext(){return this.lookahead().type===p._const?(this.next(),this.tsParseTypeReference()):null}tsFillSignature(e,t){const r=e===p.arrow;t.typeParameters=this.tsTryParseTypeParameters(),this.expect(p.parenL),t.parameters=this.tsParseBindingListForSignature(),(r||this.match(e))&&(t.typeAnnotation=this.tsParseTypeOrTypePredicateAnnotation(e))}tsParseBindingListForSignature(){return this.parseBindingList(p.parenR,41).map((e=>("Identifier"!==e.type&&"RestElement"!==e.type&&"ObjectPattern"!==e.type&&"ArrayPattern"!==e.type&&this.raise(e.start,de.UnsupportedSignatureParameterKind,e.type),e)))}tsParseTypeMemberSemicolon(){this.eat(p.comma)||this.isLineTerminator()||this.expect(p.semi)}tsParseSignatureMember(e,t){return this.tsFillSignature(p.colon,t),this.tsParseTypeMemberSemicolon(),this.finishNode(t,e)}tsIsUnambiguouslyIndexSignature(){return this.next(),this.eat(p.name)&&this.match(p.colon)}tsTryParseIndexSignature(e){if(!this.match(p.bracketL)||!this.tsLookAhead(this.tsIsUnambiguouslyIndexSignature.bind(this)))return;this.expect(p.bracketL);const t=this.parseIdentifier();t.typeAnnotation=this.tsParseTypeAnnotation(),this.resetEndLocation(t),this.expect(p.bracketR),e.parameters=[t];const r=this.tsTryParseTypeAnnotation();return r&&(e.typeAnnotation=r),this.tsParseTypeMemberSemicolon(),this.finishNode(e,"TSIndexSignature")}tsParsePropertyOrMethodSignature(e,t){this.eat(p.question)&&(e.optional=!0);const r=e;if(this.match(p.parenL)||this.isRelational("<")){t&&this.raise(e.start,de.ReadonlyForMethodSignature);const n=r;if(n.kind&&this.isRelational("<")&&this.raise(this.state.pos,de.AccesorCannotHaveTypeParameters),this.tsFillSignature(p.colon,n),this.tsParseTypeMemberSemicolon(),"get"===n.kind)n.parameters.length>0&&(this.raise(this.state.pos,x.BadGetterArity),this.isThisParam(n.parameters[0])&&this.raise(this.state.pos,de.AccesorCannotDeclareThisParameter));else if("set"===n.kind){if(1!==n.parameters.length)this.raise(this.state.pos,x.BadSetterArity);else{const e=n.parameters[0];this.isThisParam(e)&&this.raise(this.state.pos,de.AccesorCannotDeclareThisParameter),"Identifier"===e.type&&e.optional&&this.raise(this.state.pos,de.SetAccesorCannotHaveOptionalParameter),"RestElement"===e.type&&this.raise(this.state.pos,de.SetAccesorCannotHaveRestParameter)}n.typeAnnotation&&this.raise(n.typeAnnotation.start,de.SetAccesorCannotHaveReturnType)}else n.kind="method";return this.finishNode(n,"TSMethodSignature")}{const e=r;t&&(e.readonly=!0);const n=this.tsTryParseTypeAnnotation();return n&&(e.typeAnnotation=n),this.tsParseTypeMemberSemicolon(),this.finishNode(e,"TSPropertySignature")}}tsParseTypeMember(){const e=this.startNode();if(this.match(p.parenL)||this.isRelational("<"))return this.tsParseSignatureMember("TSCallSignatureDeclaration",e);if(this.match(p._new)){const t=this.startNode();return this.next(),this.match(p.parenL)||this.isRelational("<")?this.tsParseSignatureMember("TSConstructSignatureDeclaration",e):(e.key=this.createIdentifier(t,"new"),this.tsParsePropertyOrMethodSignature(e,!1))}this.tsParseModifiers(e,["readonly"],["declare","abstract","private","protected","public","static","override"],de.InvalidModifierOnTypeMember);return this.tsTryParseIndexSignature(e)||(this.parsePropertyName(e,!1),e.computed||"Identifier"!==e.key.type||"get"!==e.key.name&&"set"!==e.key.name||!this.tsTokenCanFollowModifier()||(e.kind=e.key.name,this.parsePropertyName(e,!1)),this.tsParsePropertyOrMethodSignature(e,!!e.readonly))}tsParseTypeLiteral(){const e=this.startNode();return e.members=this.tsParseObjectTypeMembers(),this.finishNode(e,"TSTypeLiteral")}tsParseObjectTypeMembers(){this.expect(p.braceL);const e=this.tsParseList("TypeMembers",this.tsParseTypeMember.bind(this));return this.expect(p.braceR),e}tsIsStartOfMappedType(){return this.next(),this.eat(p.plusMin)?this.isContextual("readonly"):(this.isContextual("readonly")&&this.next(),!!this.match(p.bracketL)&&(this.next(),!!this.tsIsIdentifier()&&(this.next(),this.match(p._in))))}tsParseMappedTypeParameter(){const e=this.startNode();return e.name=this.parseIdentifierName(e.start),e.constraint=this.tsExpectThenParseType(p._in),this.finishNode(e,"TSTypeParameter")}tsParseMappedType(){const e=this.startNode();return this.expect(p.braceL),this.match(p.plusMin)?(e.readonly=this.state.value,this.next(),this.expectContextual("readonly")):this.eatContextual("readonly")&&(e.readonly=!0),this.expect(p.bracketL),e.typeParameter=this.tsParseMappedTypeParameter(),e.nameType=this.eatContextual("as")?this.tsParseType():null,this.expect(p.bracketR),this.match(p.plusMin)?(e.optional=this.state.value,this.next(),this.expect(p.question)):this.eat(p.question)&&(e.optional=!0),e.typeAnnotation=this.tsTryParseType(),this.semicolon(),this.expect(p.braceR),this.finishNode(e,"TSMappedType")}tsParseTupleType(){const e=this.startNode();e.elementTypes=this.tsParseBracketedList("TupleElementTypes",this.tsParseTupleElementType.bind(this),!0,!1);let t=!1,r=null;return e.elementTypes.forEach((e=>{var n;let{type:s}=e;!t||"TSRestType"===s||"TSOptionalType"===s||"TSNamedTupleMember"===s&&e.optional||this.raise(e.start,de.OptionalTypeBeforeRequired),t=t||"TSNamedTupleMember"===s&&e.optional||"TSOptionalType"===s,"TSRestType"===s&&(s=(e=e.typeAnnotation).type);const i="TSNamedTupleMember"===s;r=null!=(n=r)?n:i,r!==i&&this.raise(e.start,de.MixedLabeledAndUnlabeledElements)})),this.finishNode(e,"TSTupleType")}tsParseTupleElementType(){const{start:e,startLoc:t}=this.state,r=this.eat(p.ellipsis);let n=this.tsParseType();const s=this.eat(p.question);if(this.eat(p.colon)){const e=this.startNodeAtNode(n);e.optional=s,"TSTypeReference"!==n.type||n.typeParameters||"Identifier"!==n.typeName.type?(this.raise(n.start,de.InvalidTupleMemberLabel),e.label=n):e.label=n.typeName,e.elementType=this.tsParseType(),n=this.finishNode(e,"TSNamedTupleMember")}else if(s){const e=this.startNodeAtNode(n);e.typeAnnotation=n,n=this.finishNode(e,"TSOptionalType")}if(r){const r=this.startNodeAt(e,t);r.typeAnnotation=n,n=this.finishNode(r,"TSRestType")}return n}tsParseParenthesizedType(){const e=this.startNode();return this.expect(p.parenL),e.typeAnnotation=this.tsParseType(),this.expect(p.parenR),this.finishNode(e,"TSParenthesizedType")}tsParseFunctionOrConstructorType(e,t){const r=this.startNode();return"TSConstructorType"===e&&(r.abstract=!!t,t&&this.next(),this.next()),this.tsFillSignature(p.arrow,r),this.finishNode(r,e)}tsParseLiteralTypeNode(){const e=this.startNode();return e.literal=(()=>{switch(this.state.type){case p.num:case p.bigint:case p.string:case p._true:case p._false:return this.parseExprAtom();default:throw this.unexpected()}})(),this.finishNode(e,"TSLiteralType")}tsParseTemplateLiteralType(){const e=this.startNode();return e.literal=this.parseTemplate(!1),this.finishNode(e,"TSLiteralType")}parseTemplateSubstitution(){return this.state.inType?this.tsParseType():super.parseTemplateSubstitution()}tsParseThisTypeOrThisTypePredicate(){const e=this.tsParseThisTypeNode();return this.isContextual("is")&&!this.hasPrecedingLineBreak()?this.tsParseThisTypePredicate(e):e}tsParseNonArrayType(){switch(this.state.type){case p.name:case p._void:case p._null:{const e=this.match(p._void)?"TSVoidKeyword":this.match(p._null)?"TSNullKeyword":function(e){switch(e){case"any":return"TSAnyKeyword";case"boolean":return"TSBooleanKeyword";case"bigint":return"TSBigIntKeyword";case"never":return"TSNeverKeyword";case"number":return"TSNumberKeyword";case"object":return"TSObjectKeyword";case"string":return"TSStringKeyword";case"symbol":return"TSSymbolKeyword";case"undefined":return"TSUndefinedKeyword";case"unknown":return"TSUnknownKeyword";default:return}}(this.state.value);if(void 0!==e&&46!==this.lookaheadCharCode()){const t=this.startNode();return this.next(),this.finishNode(t,e)}return this.tsParseTypeReference()}case p.string:case p.num:case p.bigint:case p._true:case p._false:return this.tsParseLiteralTypeNode();case p.plusMin:if("-"===this.state.value){const e=this.startNode(),t=this.lookahead();if(t.type!==p.num&&t.type!==p.bigint)throw this.unexpected();return e.literal=this.parseMaybeUnary(),this.finishNode(e,"TSLiteralType")}break;case p._this:return this.tsParseThisTypeOrThisTypePredicate();case p._typeof:return this.tsParseTypeQuery();case p._import:return this.tsParseImportType();case p.braceL:return this.tsLookAhead(this.tsIsStartOfMappedType.bind(this))?this.tsParseMappedType():this.tsParseTypeLiteral();case p.bracketL:return this.tsParseTupleType();case p.parenL:return this.tsParseParenthesizedType();case p.backQuote:return this.tsParseTemplateLiteralType()}throw this.unexpected()}tsParseArrayTypeOrHigher(){let e=this.tsParseNonArrayType();for(;!this.hasPrecedingLineBreak()&&this.eat(p.bracketL);)if(this.match(p.bracketR)){const t=this.startNodeAtNode(e);t.elementType=e,this.expect(p.bracketR),e=this.finishNode(t,"TSArrayType")}else{const t=this.startNodeAtNode(e);t.objectType=e,t.indexType=this.tsParseType(),this.expect(p.bracketR),e=this.finishNode(t,"TSIndexedAccessType")}return e}tsParseTypeOperator(e){const t=this.startNode();return this.expectContextual(e),t.operator=e,t.typeAnnotation=this.tsParseTypeOperatorOrHigher(),"readonly"===e&&this.tsCheckTypeAnnotationForReadOnly(t),this.finishNode(t,"TSTypeOperator")}tsCheckTypeAnnotationForReadOnly(e){switch(e.typeAnnotation.type){case"TSTupleType":case"TSArrayType":return;default:this.raise(e.start,de.UnexpectedReadonly)}}tsParseInferType(){const e=this.startNode();this.expectContextual("infer");const t=this.startNode();return t.name=this.parseIdentifierName(t.start),e.typeParameter=this.finishNode(t,"TSTypeParameter"),this.finishNode(e,"TSInferType")}tsParseTypeOperatorOrHigher(){const e=["keyof","unique","readonly"].find((e=>this.isContextual(e)));return e?this.tsParseTypeOperator(e):this.isContextual("infer")?this.tsParseInferType():this.tsParseArrayTypeOrHigher()}tsParseUnionOrIntersectionType(e,t,r){const n=this.startNode(),s=this.eat(r),i=[];do{i.push(t())}while(this.eat(r));return 1!==i.length||s?(n.types=i,this.finishNode(n,e)):i[0]}tsParseIntersectionTypeOrHigher(){return this.tsParseUnionOrIntersectionType("TSIntersectionType",this.tsParseTypeOperatorOrHigher.bind(this),p.bitwiseAND)}tsParseUnionTypeOrHigher(){return this.tsParseUnionOrIntersectionType("TSUnionType",this.tsParseIntersectionTypeOrHigher.bind(this),p.bitwiseOR)}tsIsStartOfFunctionType(){return!!this.isRelational("<")||this.match(p.parenL)&&this.tsLookAhead(this.tsIsUnambiguouslyStartOfFunctionType.bind(this))}tsSkipParameterStart(){if(this.match(p.name)||this.match(p._this))return this.next(),!0;if(this.match(p.braceL)){let e=1;for(this.next();e>0;)this.match(p.braceL)?++e:this.match(p.braceR)&&--e,this.next();return!0}if(this.match(p.bracketL)){let e=1;for(this.next();e>0;)this.match(p.bracketL)?++e:this.match(p.bracketR)&&--e,this.next();return!0}return!1}tsIsUnambiguouslyStartOfFunctionType(){if(this.next(),this.match(p.parenR)||this.match(p.ellipsis))return!0;if(this.tsSkipParameterStart()){if(this.match(p.colon)||this.match(p.comma)||this.match(p.question)||this.match(p.eq))return!0;if(this.match(p.parenR)&&(this.next(),this.match(p.arrow)))return!0}return!1}tsParseTypeOrTypePredicateAnnotation(e){return this.tsInType((()=>{const t=this.startNode();this.expect(e);const r=this.startNode(),n=!!this.tsTryParse(this.tsParseTypePredicateAsserts.bind(this));if(n&&this.match(p._this)){let e=this.tsParseThisTypeOrThisTypePredicate();return"TSThisType"===e.type?(r.parameterName=e,r.asserts=!0,r.typeAnnotation=null,e=this.finishNode(r,"TSTypePredicate")):(this.resetStartLocationFromNode(e,r),e.asserts=!0),t.typeAnnotation=e,this.finishNode(t,"TSTypeAnnotation")}const s=this.tsIsIdentifier()&&this.tsTryParse(this.tsParseTypePredicatePrefix.bind(this));if(!s)return n?(r.parameterName=this.parseIdentifier(),r.asserts=n,r.typeAnnotation=null,t.typeAnnotation=this.finishNode(r,"TSTypePredicate"),this.finishNode(t,"TSTypeAnnotation")):this.tsParseTypeAnnotation(!1,t);const i=this.tsParseTypeAnnotation(!1);return r.parameterName=s,r.typeAnnotation=i,r.asserts=n,t.typeAnnotation=this.finishNode(r,"TSTypePredicate"),this.finishNode(t,"TSTypeAnnotation")}))}tsTryParseTypeOrTypePredicateAnnotation(){return this.match(p.colon)?this.tsParseTypeOrTypePredicateAnnotation(p.colon):void 0}tsTryParseTypeAnnotation(){return this.match(p.colon)?this.tsParseTypeAnnotation():void 0}tsTryParseType(){return this.tsEatThenParseType(p.colon)}tsParseTypePredicatePrefix(){const e=this.parseIdentifier();if(this.isContextual("is")&&!this.hasPrecedingLineBreak())return this.next(),e}tsParseTypePredicateAsserts(){if(!this.match(p.name)||"asserts"!==this.state.value||this.hasPrecedingLineBreak())return!1;const e=this.state.containsEsc;return this.next(),!(!this.match(p.name)&&!this.match(p._this)||(e&&this.raise(this.state.lastTokStart,x.InvalidEscapedReservedWord,"asserts"),0))}tsParseTypeAnnotation(e=!0,t=this.startNode()){return this.tsInType((()=>{e&&this.expect(p.colon),t.typeAnnotation=this.tsParseType()})),this.finishNode(t,"TSTypeAnnotation")}tsParseType(){fe(this.state.inType);const e=this.tsParseNonConditionalType();if(this.hasPrecedingLineBreak()||!this.eat(p._extends))return e;const t=this.startNodeAtNode(e);return t.checkType=e,t.extendsType=this.tsParseNonConditionalType(),this.expect(p.question),t.trueType=this.tsParseType(),this.expect(p.colon),t.falseType=this.tsParseType(),this.finishNode(t,"TSConditionalType")}isAbstractConstructorSignature(){return this.isContextual("abstract")&&this.lookahead().type===p._new}tsParseNonConditionalType(){return this.tsIsStartOfFunctionType()?this.tsParseFunctionOrConstructorType("TSFunctionType"):this.match(p._new)?this.tsParseFunctionOrConstructorType("TSConstructorType"):this.isAbstractConstructorSignature()?this.tsParseFunctionOrConstructorType("TSConstructorType",!0):this.tsParseUnionTypeOrHigher()}tsParseTypeAssertion(){const e=this.startNode(),t=this.tsTryNextParseConstantContext();return e.typeAnnotation=t||this.tsNextThenParseType(),this.expectRelational(">"),e.expression=this.parseMaybeUnary(),this.finishNode(e,"TSTypeAssertion")}tsParseHeritageClause(e){const t=this.state.start,r=this.tsParseDelimitedList("HeritageClauseElement",this.tsParseExpressionWithTypeArguments.bind(this));return r.length||this.raise(t,de.EmptyHeritageClauseType,e),r}tsParseExpressionWithTypeArguments(){const e=this.startNode();return e.expression=this.tsParseEntityName(!1),this.isRelational("<")&&(e.typeParameters=this.tsParseTypeArguments()),this.finishNode(e,"TSExpressionWithTypeArguments")}tsParseInterfaceDeclaration(e){e.id=this.parseIdentifier(),this.checkLVal(e.id,"typescript interface declaration",130),e.typeParameters=this.tsTryParseTypeParameters(),this.eat(p._extends)&&(e.extends=this.tsParseHeritageClause("extends"));const t=this.startNode();return t.body=this.tsInType(this.tsParseObjectTypeMembers.bind(this)),e.body=this.finishNode(t,"TSInterfaceBody"),this.finishNode(e,"TSInterfaceDeclaration")}tsParseTypeAliasDeclaration(e){return e.id=this.parseIdentifier(),this.checkLVal(e.id,"typescript type alias",2),e.typeParameters=this.tsTryParseTypeParameters(),e.typeAnnotation=this.tsInType((()=>{if(this.expect(p.eq),this.isContextual("intrinsic")&&this.lookahead().type!==p.dot){const e=this.startNode();return this.next(),this.finishNode(e,"TSIntrinsicKeyword")}return this.tsParseType()})),this.semicolon(),this.finishNode(e,"TSTypeAliasDeclaration")}tsInNoContext(e){const t=this.state.context;this.state.context=[t[0]];try{return e()}finally{this.state.context=t}}tsInType(e){const t=this.state.inType;this.state.inType=!0;try{return e()}finally{this.state.inType=t}}tsEatThenParseType(e){return this.match(e)?this.tsNextThenParseType():void 0}tsExpectThenParseType(e){return this.tsDoThenParseType((()=>this.expect(e)))}tsNextThenParseType(){return this.tsDoThenParseType((()=>this.next()))}tsDoThenParseType(e){return this.tsInType((()=>(e(),this.tsParseType())))}tsParseEnumMember(){const e=this.startNode();return e.id=this.match(p.string)?this.parseExprAtom():this.parseIdentifier(!0),this.eat(p.eq)&&(e.initializer=this.parseMaybeAssignAllowIn()),this.finishNode(e,"TSEnumMember")}tsParseEnumDeclaration(e,t){return t&&(e.const=!0),e.id=this.parseIdentifier(),this.checkLVal(e.id,"typescript enum declaration",t?779:267),this.expect(p.braceL),e.members=this.tsParseDelimitedList("EnumMembers",this.tsParseEnumMember.bind(this)),this.expect(p.braceR),this.finishNode(e,"TSEnumDeclaration")}tsParseModuleBlock(){const e=this.startNode();return this.scope.enter(0),this.expect(p.braceL),this.parseBlockOrModuleBlockBody(e.body=[],void 0,!0,p.braceR),this.scope.exit(),this.finishNode(e,"TSModuleBlock")}tsParseModuleOrNamespaceDeclaration(e,t=!1){if(e.id=this.parseIdentifier(),t||this.checkLVal(e.id,"module or namespace declaration",1024),this.eat(p.dot)){const t=this.startNode();this.tsParseModuleOrNamespaceDeclaration(t,!0),e.body=t}else this.scope.enter(256),this.prodParam.enter(0),e.body=this.tsParseModuleBlock(),this.prodParam.exit(),this.scope.exit();return this.finishNode(e,"TSModuleDeclaration")}tsParseAmbientExternalModuleDeclaration(e){return this.isContextual("global")?(e.global=!0,e.id=this.parseIdentifier()):this.match(p.string)?e.id=this.parseExprAtom():this.unexpected(),this.match(p.braceL)?(this.scope.enter(256),this.prodParam.enter(0),e.body=this.tsParseModuleBlock(),this.prodParam.exit(),this.scope.exit()):this.semicolon(),this.finishNode(e,"TSModuleDeclaration")}tsParseImportEqualsDeclaration(e,t){e.isExport=t||!1,e.id=this.parseIdentifier(),this.checkLVal(e.id,"import equals declaration",9),this.expect(p.eq);const r=this.tsParseModuleReference();return"type"===e.importKind&&"TSExternalModuleReference"!==r.type&&this.raise(r.start,de.ImportAliasHasImportType),e.moduleReference=r,this.semicolon(),this.finishNode(e,"TSImportEqualsDeclaration")}tsIsExternalModuleReference(){return this.isContextual("require")&&40===this.lookaheadCharCode()}tsParseModuleReference(){return this.tsIsExternalModuleReference()?this.tsParseExternalModuleReference():this.tsParseEntityName(!1)}tsParseExternalModuleReference(){const e=this.startNode();if(this.expectContextual("require"),this.expect(p.parenL),!this.match(p.string))throw this.unexpected();return e.expression=this.parseExprAtom(),this.expect(p.parenR),this.finishNode(e,"TSExternalModuleReference")}tsLookAhead(e){const t=this.state.clone(),r=e();return this.state=t,r}tsTryParseAndCatch(e){const t=this.tryParse((t=>e()||t()));if(!t.aborted&&t.node)return t.error&&(this.state=t.failState),t.node}tsTryParse(e){const t=this.state.clone(),r=e();return void 0!==r&&!1!==r?r:void(this.state=t)}tsTryParseDeclare(e){if(this.isLineTerminator())return;let t,r=this.state.type;return this.isContextual("let")&&(r=p._var,t="let"),this.tsInAmbientContext((()=>{switch(r){case p._function:return e.declare=!0,this.parseFunctionStatement(e,!1,!0);case p._class:return e.declare=!0,this.parseClass(e,!0,!1);case p._const:if(this.match(p._const)&&this.isLookaheadContextual("enum"))return this.expect(p._const),this.expectContextual("enum"),this.tsParseEnumDeclaration(e,!0);case p._var:return t=t||this.state.value,this.parseVarStatement(e,t);case p.name:{const t=this.state.value;return"global"===t?this.tsParseAmbientExternalModuleDeclaration(e):this.tsParseDeclaration(e,t,!0)}}}))}tsTryParseExportDeclaration(){return this.tsParseDeclaration(this.startNode(),this.state.value,!0)}tsParseExpressionStatement(e,t){switch(t.name){case"declare":{const t=this.tsTryParseDeclare(e);if(t)return t.declare=!0,t;break}case"global":if(this.match(p.braceL)){this.scope.enter(256),this.prodParam.enter(0);const r=e;return r.global=!0,r.id=t,r.body=this.tsParseModuleBlock(),this.scope.exit(),this.prodParam.exit(),this.finishNode(r,"TSModuleDeclaration")}break;default:return this.tsParseDeclaration(e,t.name,!1)}}tsParseDeclaration(e,t,r){switch(t){case"abstract":if(this.tsCheckLineTerminator(r)&&(this.match(p._class)||this.match(p.name)))return this.tsParseAbstractDeclaration(e);break;case"enum":if(r||this.match(p.name))return r&&this.next(),this.tsParseEnumDeclaration(e,!1);break;case"interface":if(this.tsCheckLineTerminator(r)&&this.match(p.name))return this.tsParseInterfaceDeclaration(e);break;case"module":if(this.tsCheckLineTerminator(r)){if(this.match(p.string))return this.tsParseAmbientExternalModuleDeclaration(e);if(this.match(p.name))return this.tsParseModuleOrNamespaceDeclaration(e)}break;case"namespace":if(this.tsCheckLineTerminator(r)&&this.match(p.name))return this.tsParseModuleOrNamespaceDeclaration(e);break;case"type":if(this.tsCheckLineTerminator(r)&&this.match(p.name))return this.tsParseTypeAliasDeclaration(e)}}tsCheckLineTerminator(e){return e?!this.hasFollowingLineBreak()&&(this.next(),!0):!this.isLineTerminator()}tsTryParseGenericAsyncArrowFunction(e,t){if(!this.isRelational("<"))return;const r=this.state.maybeInArrowParameters;this.state.maybeInArrowParameters=!0;const n=this.tsTryParseAndCatch((()=>{const r=this.startNodeAt(e,t);return r.typeParameters=this.tsParseTypeParameters(),super.parseFunctionParams(r),r.returnType=this.tsTryParseTypeOrTypePredicateAnnotation(),this.expect(p.arrow),r}));return this.state.maybeInArrowParameters=r,n?this.parseArrowExpression(n,null,!0):void 0}tsParseTypeArguments(){const e=this.startNode();return e.params=this.tsInType((()=>this.tsInNoContext((()=>(this.expectRelational("<"),this.tsParseDelimitedList("TypeParametersOrArguments",this.tsParseType.bind(this))))))),0===e.params.length&&this.raise(e.start,de.EmptyTypeArguments),this.expectRelational(">"),this.finishNode(e,"TSTypeParameterInstantiation")}tsIsDeclarationStart(){if(this.match(p.name))switch(this.state.value){case"abstract":case"declare":case"enum":case"interface":case"module":case"namespace":case"type":return!0}return!1}isExportDefaultSpecifier(){return!this.tsIsDeclarationStart()&&super.isExportDefaultSpecifier()}parseAssignableListItem(e,t){const r=this.state.start,n=this.state.startLoc;let s,i=!1,o=!1;if(void 0!==e){const t={};this.tsParseModifiers(t,["public","private","protected","override","readonly"]),s=t.accessibility,o=t.override,i=t.readonly,!1===e&&(s||i||o)&&this.raise(r,de.UnexpectedParameterModifier)}const a=this.parseMaybeDefault();this.parseAssignableListItemTypes(a);const l=this.parseMaybeDefault(a.start,a.loc.start,a);if(s||i||o){const e=this.startNodeAt(r,n);return t.length&&(e.decorators=t),s&&(e.accessibility=s),i&&(e.readonly=i),o&&(e.override=o),"Identifier"!==l.type&&"AssignmentPattern"!==l.type&&this.raise(e.start,de.UnsupportedParameterPropertyKind),e.parameter=l,this.finishNode(e,"TSParameterProperty")}return t.length&&(a.decorators=t),l}parseFunctionBodyAndFinish(e,t,r=!1){this.match(p.colon)&&(e.returnType=this.tsParseTypeOrTypePredicateAnnotation(p.colon));const n="FunctionDeclaration"===t?"TSDeclareFunction":"ClassMethod"===t?"TSDeclareMethod":void 0;n&&!this.match(p.braceL)&&this.isLineTerminator()?this.finishNode(e,n):"TSDeclareFunction"===n&&this.state.isAmbientContext&&(this.raise(e.start,de.DeclareFunctionHasImplementation),e.declare)?super.parseFunctionBodyAndFinish(e,n,r):super.parseFunctionBodyAndFinish(e,t,r)}registerFunctionStatementId(e){!e.body&&e.id?this.checkLVal(e.id,"function name",1024):super.registerFunctionStatementId(...arguments)}tsCheckForInvalidTypeCasts(e){e.forEach((e=>{"TSTypeCastExpression"===(null==e?void 0:e.type)&&this.raise(e.typeAnnotation.start,de.UnexpectedTypeAnnotation)}))}toReferencedList(e,t){return this.tsCheckForInvalidTypeCasts(e),e}parseArrayLike(...e){const t=super.parseArrayLike(...e);return"ArrayExpression"===t.type&&this.tsCheckForInvalidTypeCasts(t.elements),t}parseSubscript(e,t,r,n,s){if(!this.hasPrecedingLineBreak()&&this.match(p.bang)){this.state.exprAllowed=!1,this.next();const n=this.startNodeAt(t,r);return n.expression=e,this.finishNode(n,"TSNonNullExpression")}if(this.isRelational("<")){const i=this.tsTryParseAndCatch((()=>{if(!n&&this.atPossibleAsyncArrow(e)){const e=this.tsTryParseGenericAsyncArrowFunction(t,r);if(e)return e}const i=this.startNodeAt(t,r);i.callee=e;const o=this.tsParseTypeArguments();if(o){if(!n&&this.eat(p.parenL))return i.arguments=this.parseCallExpressionArguments(p.parenR,!1),this.tsCheckForInvalidTypeCasts(i.arguments),i.typeParameters=o,s.optionalChainMember&&(i.optional=!1),this.finishCallExpression(i,s.optionalChainMember);if(this.match(p.backQuote)){const n=this.parseTaggedTemplateExpression(e,t,r,s);return n.typeParameters=o,n}}this.unexpected()}));if(i)return i}return super.parseSubscript(e,t,r,n,s)}parseNewArguments(e){if(this.isRelational("<")){const t=this.tsTryParseAndCatch((()=>{const e=this.tsParseTypeArguments();return this.match(p.parenL)||this.unexpected(),e}));t&&(e.typeParameters=t)}super.parseNewArguments(e)}parseExprOp(e,t,r,n){if(pe(p._in.binop)>n&&!this.hasPrecedingLineBreak()&&this.isContextual("as")){const s=this.startNodeAt(t,r);s.expression=e;const i=this.tsTryNextParseConstantContext();return s.typeAnnotation=i||this.tsNextThenParseType(),this.finishNode(s,"TSAsExpression"),this.reScan_lt_gt(),this.parseExprOp(s,t,r,n)}return super.parseExprOp(e,t,r,n)}checkReservedWord(e,t,r,n){}checkDuplicateExports(){}parseImport(e){if(e.importKind="value",this.match(p.name)||this.match(p.star)||this.match(p.braceL)){let t=this.lookahead();if(!this.isContextual("type")||t.type===p.comma||t.type===p.name&&"from"===t.value||t.type===p.eq||(e.importKind="type",this.next(),t=this.lookahead()),this.match(p.name)&&t.type===p.eq)return this.tsParseImportEqualsDeclaration(e)}const t=super.parseImport(e);return"type"===t.importKind&&t.specifiers.length>1&&"ImportDefaultSpecifier"===t.specifiers[0].type&&this.raise(t.start,de.TypeImportCannotSpecifyDefaultAndNamed),t}parseExport(e){if(this.match(p._import))return this.next(),this.isContextual("type")&&61!==this.lookaheadCharCode()?(e.importKind="type",this.next()):e.importKind="value",this.tsParseImportEqualsDeclaration(e,!0);if(this.eat(p.eq)){const t=e;return t.expression=this.parseExpression(),this.semicolon(),this.finishNode(t,"TSExportAssignment")}if(this.eatContextual("as")){const t=e;return this.expectContextual("namespace"),t.id=this.parseIdentifier(),this.semicolon(),this.finishNode(t,"TSNamespaceExportDeclaration")}return this.isContextual("type")&&this.lookahead().type===p.braceL?(this.next(),e.exportKind="type"):e.exportKind="value",super.parseExport(e)}isAbstractClass(){return this.isContextual("abstract")&&this.lookahead().type===p._class}parseExportDefaultExpression(){if(this.isAbstractClass()){const e=this.startNode();return this.next(),e.abstract=!0,this.parseClass(e,!0,!0),e}if("interface"===this.state.value){const e=this.tsParseDeclaration(this.startNode(),this.state.value,!0);if(e)return e}return super.parseExportDefaultExpression()}parseStatementContent(e,t){if(this.state.type===p._const){const e=this.lookahead();if(e.type===p.name&&"enum"===e.value){const e=this.startNode();return this.expect(p._const),this.expectContextual("enum"),this.tsParseEnumDeclaration(e,!0)}}return super.parseStatementContent(e,t)}parseAccessModifier(){return this.tsParseModifier(["public","protected","private"])}tsHasSomeModifiers(e,t){return t.some((t=>he(t)?e.accessibility===t:!!e[t]))}parseClassMember(e,t,r){const n=["declare","private","public","protected","override","abstract","readonly"];this.tsParseModifiers(t,n.concat(["static"]));const s=()=>{const s=!!t.static;s&&this.eat(p.braceL)?(this.tsHasSomeModifiers(t,n)&&this.raise(this.state.pos,de.StaticBlockCannotHaveModifier),this.parseClassStaticBlock(e,t)):this.parseClassMemberWithIsStatic(e,t,r,s)};t.declare?this.tsInAmbientContext(s):s()}parseClassMemberWithIsStatic(e,t,r,n){const s=this.tsTryParseIndexSignature(t);if(s)return e.body.push(s),t.abstract&&this.raise(t.start,de.IndexSignatureHasAbstract),t.accessibility&&this.raise(t.start,de.IndexSignatureHasAccessibility,t.accessibility),t.declare&&this.raise(t.start,de.IndexSignatureHasDeclare),void(t.override&&this.raise(t.start,de.IndexSignatureHasOverride));!this.state.inAbstractClass&&t.abstract&&this.raise(t.start,de.NonAbstractClassHasAbstractMethod),t.override&&(r.hadSuperClass||this.raise(t.start,de.OverrideNotInSubClass)),super.parseClassMemberWithIsStatic(e,t,r,n)}parsePostMemberNameModifiers(e){this.eat(p.question)&&(e.optional=!0),e.readonly&&this.match(p.parenL)&&this.raise(e.start,de.ClassMethodHasReadonly),e.declare&&this.match(p.parenL)&&this.raise(e.start,de.ClassMethodHasDeclare)}parseExpressionStatement(e,t){return("Identifier"===t.type?this.tsParseExpressionStatement(e,t):void 0)||super.parseExpressionStatement(e,t)}shouldParseExportDeclaration(){return!!this.tsIsDeclarationStart()||super.shouldParseExportDeclaration()}parseConditional(e,t,r,n){if(!this.state.maybeInArrowParameters||!this.match(p.question))return super.parseConditional(e,t,r,n);const s=this.tryParse((()=>super.parseConditional(e,t,r)));return s.node?(s.error&&(this.state=s.failState),s.node):(s.error&&super.setOptionalParametersError(n,s.error),e)}parseParenItem(e,t,r){if(e=super.parseParenItem(e,t,r),this.eat(p.question)&&(e.optional=!0,this.resetEndLocation(e)),this.match(p.colon)){const n=this.startNodeAt(t,r);return n.expression=e,n.typeAnnotation=this.tsParseTypeAnnotation(),this.finishNode(n,"TSTypeCastExpression")}return e}parseExportDeclaration(e){const t=this.state.start,r=this.state.startLoc,n=this.eatContextual("declare");if(n&&(this.isContextual("declare")||!this.shouldParseExportDeclaration()))throw this.raise(this.state.start,de.ExpectedAmbientAfterExportDeclare);let s;return this.match(p.name)&&(s=this.tsTryParseExportDeclaration()),s||(s=super.parseExportDeclaration(e)),s&&("TSInterfaceDeclaration"===s.type||"TSTypeAliasDeclaration"===s.type||n)&&(e.exportKind="type"),s&&n&&(this.resetStartLocation(s,t,r),s.declare=!0),s}parseClassId(e,t,r){if((!t||r)&&this.isContextual("implements"))return;super.parseClassId(e,t,r,e.declare?1024:139);const n=this.tsTryParseTypeParameters();n&&(e.typeParameters=n)}parseClassPropertyAnnotation(e){!e.optional&&this.eat(p.bang)&&(e.definite=!0);const t=this.tsTryParseTypeAnnotation();t&&(e.typeAnnotation=t)}parseClassProperty(e){return this.parseClassPropertyAnnotation(e),this.state.isAmbientContext&&this.match(p.eq)&&this.raise(this.state.start,de.DeclareClassFieldHasInitializer),super.parseClassProperty(e)}parseClassPrivateProperty(e){return e.abstract&&this.raise(e.start,de.PrivateElementHasAbstract),e.accessibility&&this.raise(e.start,de.PrivateElementHasAccessibility,e.accessibility),this.parseClassPropertyAnnotation(e),super.parseClassPrivateProperty(e)}pushClassMethod(e,t,r,n,s,i){const o=this.tsTryParseTypeParameters();o&&s&&this.raise(o.start,de.ConstructorHasTypeParameters),!t.declare||"get"!==t.kind&&"set"!==t.kind||this.raise(t.start,de.DeclareAccessor,t.kind),o&&(t.typeParameters=o),super.pushClassMethod(e,t,r,n,s,i)}pushClassPrivateMethod(e,t,r,n){const s=this.tsTryParseTypeParameters();s&&(t.typeParameters=s),super.pushClassPrivateMethod(e,t,r,n)}parseClassSuper(e){super.parseClassSuper(e),e.superClass&&this.isRelational("<")&&(e.superTypeParameters=this.tsParseTypeArguments()),this.eatContextual("implements")&&(e.implements=this.tsParseHeritageClause("implements"))}parseObjPropValue(e,...t){const r=this.tsTryParseTypeParameters();r&&(e.typeParameters=r),super.parseObjPropValue(e,...t)}parseFunctionParams(e,t){const r=this.tsTryParseTypeParameters();r&&(e.typeParameters=r),super.parseFunctionParams(e,t)}parseVarId(e,t){super.parseVarId(e,t),"Identifier"===e.id.type&&this.eat(p.bang)&&(e.definite=!0);const r=this.tsTryParseTypeAnnotation();r&&(e.id.typeAnnotation=r,this.resetEndLocation(e.id))}parseAsyncArrowFromCallExpression(e,t){return this.match(p.colon)&&(e.returnType=this.tsParseTypeAnnotation()),super.parseAsyncArrowFromCallExpression(e,t)}parseMaybeAssign(...e){var t,r,n,s,i,o,a;let l,c,u,f;if(this.hasPlugin("jsx")&&(this.match(p.jsxTagStart)||this.isRelational("<"))){if(l=this.state.clone(),c=this.tryParse((()=>super.parseMaybeAssign(...e)),l),!c.error)return c.node;const{context:t}=this.state;t[t.length-1]===P.j_oTag?t.length-=2:t[t.length-1]===P.j_expr&&(t.length-=1)}if(!(null!=(t=c)&&t.error||this.isRelational("<")))return super.parseMaybeAssign(...e);l=l||this.state.clone();const d=this.tryParse((t=>{var r,n;f=this.tsParseTypeParameters();const s=super.parseMaybeAssign(...e);return("ArrowFunctionExpression"!==s.type||null!=(r=s.extra)&&r.parenthesized)&&t(),0!==(null==(n=f)?void 0:n.params.length)&&this.resetStartLocationFromNode(s,f),s.typeParameters=f,s}),l);if(!d.error&&!d.aborted)return d.node;if(!c&&(fe(!this.hasPlugin("jsx")),u=this.tryParse((()=>super.parseMaybeAssign(...e)),l),!u.error))return u.node;if(null!=(r=c)&&r.node)return this.state=c.failState,c.node;if(d.node)return this.state=d.failState,d.node;if(null!=(n=u)&&n.node)return this.state=u.failState,u.node;if(null!=(s=c)&&s.thrown)throw c.error;if(d.thrown)throw d.error;if(null!=(i=u)&&i.thrown)throw u.error;throw(null==(o=c)?void 0:o.error)||d.error||(null==(a=u)?void 0:a.error)}parseMaybeUnary(e){return!this.hasPlugin("jsx")&&this.isRelational("<")?this.tsParseTypeAssertion():super.parseMaybeUnary(e)}parseArrow(e){if(this.match(p.colon)){const t=this.tryParse((e=>{const t=this.tsParseTypeOrTypePredicateAnnotation(p.colon);return!this.canInsertSemicolon()&&this.match(p.arrow)||e(),t}));if(t.aborted)return;t.thrown||(t.error&&(this.state=t.failState),e.returnType=t.node)}return super.parseArrow(e)}parseAssignableListItemTypes(e){this.eat(p.question)&&("Identifier"===e.type||this.state.isAmbientContext||this.state.inType||this.raise(e.start,de.PatternIsOptional),e.optional=!0);const t=this.tsTryParseTypeAnnotation();return t&&(e.typeAnnotation=t),this.resetEndLocation(e),e}toAssignable(e,t=!1){switch(e.type){case"TSTypeCastExpression":return super.toAssignable(this.typeCastToParameter(e),t);case"TSParameterProperty":return super.toAssignable(e,t);case"ParenthesizedExpression":return this.toAssignableParenthesizedExpression(e,t);case"TSAsExpression":case"TSNonNullExpression":case"TSTypeAssertion":return e.expression=this.toAssignable(e.expression,t),e;default:return super.toAssignable(e,t)}}toAssignableParenthesizedExpression(e,t){switch(e.expression.type){case"TSAsExpression":case"TSNonNullExpression":case"TSTypeAssertion":case"ParenthesizedExpression":return e.expression=this.toAssignable(e.expression,t),e;default:return super.toAssignable(e,t)}}checkLVal(e,t,...r){var n;switch(e.type){case"TSTypeCastExpression":return;case"TSParameterProperty":return void this.checkLVal(e.parameter,"parameter property",...r);case"TSAsExpression":case"TSTypeAssertion":if(!(r[0]||"parenthesized expression"===t||null!=(n=e.extra)&&n.parenthesized)){this.raise(e.start,x.InvalidLhs,t);break}return void this.checkLVal(e.expression,"parenthesized expression",...r);case"TSNonNullExpression":return void this.checkLVal(e.expression,t,...r);default:return void super.checkLVal(e,t,...r)}}parseBindingAtom(){switch(this.state.type){case p._this:return this.parseIdentifier(!0);default:return super.parseBindingAtom()}}parseMaybeDecoratorArguments(e){if(this.isRelational("<")){const t=this.tsParseTypeArguments();if(this.match(p.parenL)){const r=super.parseMaybeDecoratorArguments(e);return r.typeParameters=t,r}this.unexpected(this.state.start,p.parenL)}return super.parseMaybeDecoratorArguments(e)}checkCommaAfterRest(e){this.state.isAmbientContext&&this.match(p.comma)&&this.lookaheadCharCode()===e?this.next():super.checkCommaAfterRest(e)}isClassMethod(){return this.isRelational("<")||super.isClassMethod()}isClassProperty(){return this.match(p.bang)||this.match(p.colon)||super.isClassProperty()}parseMaybeDefault(...e){const t=super.parseMaybeDefault(...e);return"AssignmentPattern"===t.type&&t.typeAnnotation&&t.right.startthis.tsParseTypeArguments()));t&&(e.typeParameters=t)}return super.jsxParseOpeningElementAfterName(e)}getGetterSetterExpectedParamCount(e){const t=super.getGetterSetterExpectedParamCount(e),r=this.getObjectOrClassMethodParams(e)[0];return r&&this.isThisParam(r)?t+1:t}parseCatchClauseParam(){const e=super.parseCatchClauseParam(),t=this.tsTryParseTypeAnnotation();return t&&(e.typeAnnotation=t,this.resetEndLocation(e)),e}tsInAmbientContext(e){const t=this.state.isAmbientContext;this.state.isAmbientContext=!0;try{return e()}finally{this.state.isAmbientContext=t}}parseClass(e,...t){const r=this.state.inAbstractClass;this.state.inAbstractClass=!!e.abstract;try{return super.parseClass(e,...t)}finally{this.state.inAbstractClass=r}}tsParseAbstractDeclaration(e){if(this.match(p._class))return e.abstract=!0,this.parseClass(e,!0,!1);if(this.isContextual("interface")){if(!this.hasFollowingLineBreak())return e.abstract=!0,this.raise(e.start,de.NonClassMethodPropertyHasAbstractModifer),this.next(),this.tsParseInterfaceDeclaration(e)}else this.unexpected(null,p._class)}parseMethod(...e){const t=super.parseMethod(...e);if(t.abstract&&(this.hasPlugin("estree")?t.value.body:t.body)){const{key:e}=t;this.raise(t.start,de.AbstractMethodHasImplementation,"Identifier"===e.type?e.name:`[${this.input.slice(e.start,e.end)}]`)}return t}shouldParseAsAmbientContext(){return!!this.getPluginOption("typescript","dts")}parse(){return this.shouldParseAsAmbientContext()&&(this.state.isAmbientContext=!0),super.parse()}getExpression(){return this.shouldParseAsAmbientContext()&&(this.state.isAmbientContext=!0),super.getExpression()}},v8intrinsic:e=>class extends e{parseV8Intrinsic(){if(this.match(p.modulo)){const e=this.state.start,t=this.startNode();if(this.eat(p.modulo),this.match(p.name)){const e=this.parseIdentifierName(this.state.start),r=this.createIdentifier(t,e);if(r.type="V8IntrinsicIdentifier",this.match(p.parenL))return r}this.unexpected(e)}}parseExprAtom(){return this.parseV8Intrinsic()||super.parseExprAtom(...arguments)}},placeholders:e=>class extends e{parsePlaceholder(e){if(this.match(p.placeholder)){const t=this.startNode();return this.next(),this.assertNoSpace("Unexpected space in placeholder."),t.name=super.parseIdentifier(!0),this.assertNoSpace("Unexpected space in placeholder."),this.expect(p.placeholder),this.finishPlaceholder(t,e)}}finishPlaceholder(e,t){const r=!(!e.expectedNode||"Placeholder"!==e.type);return e.expectedNode=t,r?e:this.finishNode(e,"Placeholder")}getTokenFromCode(e){return 37===e&&37===this.input.charCodeAt(this.state.pos+1)?this.finishOp(p.placeholder,2):super.getTokenFromCode(...arguments)}parseExprAtom(){return this.parsePlaceholder("Expression")||super.parseExprAtom(...arguments)}parseIdentifier(){return this.parsePlaceholder("Identifier")||super.parseIdentifier(...arguments)}checkReservedWord(e){void 0!==e&&super.checkReservedWord(...arguments)}parseBindingAtom(){return this.parsePlaceholder("Pattern")||super.parseBindingAtom(...arguments)}checkLVal(e){"Placeholder"!==e.type&&super.checkLVal(...arguments)}toAssignable(e){return e&&"Placeholder"===e.type&&"Expression"===e.expectedNode?(e.expectedNode="Pattern",e):super.toAssignable(...arguments)}isLet(e){return!!super.isLet(e)||!!this.isContextual("let")&&(!e&&this.lookahead().type===p.placeholder)}verifyBreakContinue(e){e.label&&"Placeholder"===e.label.type||super.verifyBreakContinue(...arguments)}parseExpressionStatement(e,t){if("Placeholder"!==t.type||t.extra&&t.extra.parenthesized)return super.parseExpressionStatement(...arguments);if(this.match(p.colon)){const r=e;return r.label=this.finishPlaceholder(t,"Identifier"),this.next(),r.body=this.parseStatement("label"),this.finishNode(r,"LabeledStatement")}return this.semicolon(),e.name=t.name,this.finishPlaceholder(e,"Statement")}parseBlock(){return this.parsePlaceholder("BlockStatement")||super.parseBlock(...arguments)}parseFunctionId(){return this.parsePlaceholder("Identifier")||super.parseFunctionId(...arguments)}parseClass(e,t,r){const n=t?"ClassDeclaration":"ClassExpression";this.next(),this.takeDecorators(e);const s=this.state.strict,i=this.parsePlaceholder("Identifier");if(i)if(this.match(p._extends)||this.match(p.placeholder)||this.match(p.braceL))e.id=i;else{if(r||!t)return e.id=null,e.body=this.finishPlaceholder(i,"ClassBody"),this.finishNode(e,n);this.unexpected(null,me.ClassNameIsRequired)}else this.parseClassId(e,t,r);return this.parseClassSuper(e),e.body=this.parsePlaceholder("ClassBody")||this.parseClassBody(!!e.superClass,s),this.finishNode(e,n)}parseExport(e){const t=this.parsePlaceholder("Identifier");if(!t)return super.parseExport(...arguments);if(!this.isContextual("from")&&!this.match(p.comma))return e.specifiers=[],e.source=null,e.declaration=this.finishPlaceholder(t,"Declaration"),this.finishNode(e,"ExportNamedDeclaration");this.expectPlugin("exportDefaultFrom");const r=this.startNode();return r.exported=t,e.specifiers=[this.finishNode(r,"ExportDefaultSpecifier")],super.parseExport(e)}isExportDefaultSpecifier(){if(this.match(p._default)){const e=this.nextTokenStart();if(this.isUnparsedContextual(e,"from")&&this.input.startsWith(p.placeholder.label,this.nextTokenStartSince(e+4)))return!0}return super.isExportDefaultSpecifier()}maybeParseExportDefaultSpecifier(e){return!!(e.specifiers&&e.specifiers.length>0)||super.maybeParseExportDefaultSpecifier(...arguments)}checkExport(e){const{specifiers:t}=e;null!=t&&t.length&&(e.specifiers=t.filter((e=>"Placeholder"===e.exported.type))),super.checkExport(e),e.specifiers=t}parseImport(e){const t=this.parsePlaceholder("Identifier");if(!t)return super.parseImport(...arguments);if(e.specifiers=[],!this.isContextual("from")&&!this.match(p.comma))return e.source=this.finishPlaceholder(t,"StringLiteral"),this.semicolon(),this.finishNode(e,"ImportDeclaration");const r=this.startNodeAtNode(t);return r.local=t,this.finishNode(r,"ImportDefaultSpecifier"),e.specifiers.push(r),this.eat(p.comma)&&(this.maybeParseStarImportSpecifier(e)||this.parseNamedImportSpecifiers(e)),this.expectContextual("from"),e.source=this.parseImportSource(),this.semicolon(),this.finishNode(e,"ImportDeclaration")}parseImportSource(){return this.parsePlaceholder("StringLiteral")||super.parseImportSource(...arguments)}}},xe=Object.keys(Ee),Se={sourceType:"script",sourceFilename:void 0,startLine:1,allowAwaitOutsideFunction:!1,allowReturnOutsideFunction:!1,allowImportExportEverywhere:!1,allowSuperOutsideMethod:!1,allowUndeclaredExports:!1,plugins:[],strictMode:null,ranges:!1,tokens:!1,createParenthesizedExpressions:!1,errorRecovery:!1};var Te=function(e){return e>=48&&e<=57};const we=new Set([103,109,115,105,121,117,100]),Pe={decBinOct:[46,66,69,79,95,98,101,111],hex:[46,88,95,120]},Ae={bin:[48,49]};Ae.oct=[...Ae.bin,50,51,52,53,54,55],Ae.dec=[...Ae.oct,56,57],Ae.hex=[...Ae.dec,65,66,67,68,69,70,97,98,99,100,101,102];class Oe{constructor(e){this.type=e.type,this.value=e.value,this.start=e.start,this.end=e.end,this.loc=new b(e.startLoc,e.endLoc)}}class Ce{constructor(){this.privateNames=new Set,this.loneAccessors=new Map,this.undefinedPrivateNames=new Map}}class Ie{constructor(e){this.stack=[],this.undefinedPrivateNames=new Map,this.raise=e}current(){return this.stack[this.stack.length-1]}enter(){this.stack.push(new Ce)}exit(){const e=this.stack.pop(),t=this.current();for(const[r,n]of Array.from(e.undefinedPrivateNames))t?t.undefinedPrivateNames.has(r)||t.undefinedPrivateNames.set(r,n):this.raise(n,x.InvalidPrivateFieldResolution,r)}declarePrivateName(e,t,r){const n=this.current();let s=n.privateNames.has(e);if(3&t){const r=s&&n.loneAccessors.get(e);if(r){const i=4&r,o=4&t;s=(3&r)==(3&t)||i!==o,s||n.loneAccessors.delete(e)}else s||n.loneAccessors.set(e,t)}s&&this.raise(r,x.PrivateNameRedeclaration,e),n.privateNames.add(e),n.undefinedPrivateNames.delete(e)}usePrivateName(e,t){let r;for(r of this.stack)if(r.privateNames.has(e))return;r?r.undefinedPrivateNames.set(e,t):this.raise(t,x.InvalidPrivateFieldResolution,e)}}class ke{constructor(e=0){this.type=void 0,this.type=e}canBeArrowParameterDeclaration(){return 2===this.type||1===this.type}isCertainlyParameterDeclaration(){return 3===this.type}}class Ne extends ke{constructor(e){super(e),this.errors=new Map}recordDeclarationError(e,t){this.errors.set(e,t)}clearDeclarationError(e){this.errors.delete(e)}iterateErrors(e){this.errors.forEach(e)}}class _e{constructor(e){this.stack=[new ke],this.raise=e}enter(e){this.stack.push(e)}exit(){this.stack.pop()}recordParameterInitializerError(e,t){const{stack:r}=this;let n=r.length-1,s=r[n];for(;!s.isCertainlyParameterDeclaration();){if(!s.canBeArrowParameterDeclaration())return;s.recordDeclarationError(e,t),s=r[--n]}this.raise(e,t)}recordParenthesizedIdentifierError(e,t){const{stack:r}=this,n=r[r.length-1];if(n.isCertainlyParameterDeclaration())this.raise(e,t);else{if(!n.canBeArrowParameterDeclaration())return;n.recordDeclarationError(e,t)}}recordAsyncArrowParametersError(e,t){const{stack:r}=this;let n=r.length-1,s=r[n];for(;s.canBeArrowParameterDeclaration();)2===s.type&&s.recordDeclarationError(e,t),s=r[--n]}validateAsPattern(){const{stack:e}=this,t=e[e.length-1];t.canBeArrowParameterDeclaration()&&t.iterateErrors(((t,r)=>{this.raise(r,t);let n=e.length-2,s=e[n];for(;s.canBeArrowParameterDeclaration();)s.clearDeclarationError(r),s=e[--n]}))}}function je(){return new ke}class De{constructor(){this.shorthandAssign=-1,this.doubleProto=-1,this.optionalParameters=-1}}class Le{constructor(e,t,r){this.type=void 0,this.start=void 0,this.end=void 0,this.loc=void 0,this.range=void 0,this.leadingComments=void 0,this.trailingComments=void 0,this.innerComments=void 0,this.extra=void 0,this.type="",this.start=t,this.end=0,this.loc=new b(r),null!=e&&e.options.ranges&&(this.range=[t,0]),null!=e&&e.filename&&(this.loc.filename=e.filename)}__clone(){const e=new Le,t=Object.keys(this);for(let r=0,n=t.length;r"ParenthesizedExpression"===e.type?Me(e.expression):e,Be={kind:"loop"},Re={kind:"switch"},Fe=/[\uD800-\uDFFF]/u,Ue=/in(?:stanceof)?/y;class $e extends class extends class extends class extends class extends class extends class extends class extends class extends class{constructor(){this.sawUnambiguousESM=!1,this.ambiguousScriptDifferentAst=!1}hasPlugin(e){return this.plugins.has(e)}getPluginOption(e,t){if(this.hasPlugin(e))return this.plugins.get(e)[t]}}{addComment(e){this.filename&&(e.loc.filename=this.filename),this.state.trailingComments.push(e),this.state.leadingComments.push(e)}adjustCommentsAfterTrailingComma(e,t,r){if(0===this.state.leadingComments.length)return;let n=null,s=t.length;for(;null===n&&s>0;)n=t[--s];if(null===n)return;for(let e=0;e0?n.trailingComments=i:void 0!==n.trailingComments&&(n.trailingComments=[])}processComment(e){if("Program"===e.type&&e.body.length>0)return;const t=this.state.commentStack;let r,n,s,i,o;if(this.state.trailingComments.length>0)this.state.trailingComments[0].start>=e.end?(s=this.state.trailingComments,this.state.trailingComments=[]):this.state.trailingComments.length=0;else if(t.length>0){const r=v(t);r.trailingComments&&r.trailingComments[0].start>=e.end&&(s=r.trailingComments,delete r.trailingComments)}for(t.length>0&&v(t).start>=e.start&&(r=t.pop());t.length>0&&v(t).start>=e.start;)n=t.pop();if(!n&&r&&(n=r),r)switch(e.type){case"ObjectExpression":this.adjustCommentsAfterTrailingComma(e,e.properties);break;case"ObjectPattern":this.adjustCommentsAfterTrailingComma(e,e.properties,!0);break;case"CallExpression":this.adjustCommentsAfterTrailingComma(e,e.arguments);break;case"ArrayExpression":this.adjustCommentsAfterTrailingComma(e,e.elements);break;case"ArrayPattern":this.adjustCommentsAfterTrailingComma(e,e.elements,!0)}else this.state.commentPreviousNode&&("ImportSpecifier"===this.state.commentPreviousNode.type&&"ImportSpecifier"!==e.type||"ExportSpecifier"===this.state.commentPreviousNode.type&&"ExportSpecifier"!==e.type)&&this.adjustCommentsAfterTrailingComma(e,[this.state.commentPreviousNode]);if(n){if(n.leadingComments)if(n!==e&&n.leadingComments.length>0&&v(n.leadingComments).end<=e.start)e.leadingComments=n.leadingComments,delete n.leadingComments;else for(i=n.leadingComments.length-2;i>=0;--i)if(n.leadingComments[i].end<=e.start){e.leadingComments=n.leadingComments.splice(0,i+1);break}}else if(this.state.leadingComments.length>0)if(v(this.state.leadingComments).end<=e.start){if(this.state.commentPreviousNode)for(o=0;o0&&(e.leadingComments=this.state.leadingComments,this.state.leadingComments=[])}else{for(i=0;ie.start);i++);const t=this.state.leadingComments.slice(0,i);t.length&&(e.leadingComments=t),s=this.state.leadingComments.slice(i),0===s.length&&(s=null)}if(this.state.commentPreviousNode=e,s)if(s.length&&s[0].start>=e.start&&v(s).end<=e.end)e.innerComments=s;else{const t=s.findIndex((t=>t.end>=e.end));t>0?(e.innerComments=s.slice(0,t),e.trailingComments=s.slice(t)):e.trailingComments=s}t.push(e)}}{getLocationForPosition(e){let t;return t=e===this.state.start?this.state.startLoc:e===this.state.lastTokStart?this.state.lastTokStartLoc:e===this.state.end?this.state.endLoc:e===this.state.lastTokEnd?this.state.lastTokEndLoc:function(e,t){let r,n=1,s=0;for(d.lastIndex=0;(r=d.exec(e))&&r.indexn[t]))+` (${s.line}:${s.column})`;if(this.options.errorRecovery){const t=this.state.errors;for(let r=t.length-1;r>=0;r--){const n=t[r];if(n.pos===e)return Object.assign(n,{message:i});if(n.posn[t]))+` (${s.line}:${s.column})`;return this._raise(Object.assign({loc:s,pos:e},t),i)}_raise(e,t){const r=new SyntaxError(t);if(Object.assign(r,e),this.options.errorRecovery)return this.isLookahead||this.state.errors.push(r),r;throw r}}{constructor(e,t){super(),this.isLookahead=void 0,this.tokens=[],this.state=new te,this.state.init(e),this.input=t,this.length=t.length,this.isLookahead=!1}pushToken(e){this.tokens.length=this.state.tokensLength,this.tokens.push(e),++this.state.tokensLength}next(){this.checkKeywordEscapes(),this.options.tokens&&this.pushToken(new Oe(this.state)),this.state.lastTokEnd=this.state.end,this.state.lastTokStart=this.state.start,this.state.lastTokEndLoc=this.state.endLoc,this.state.lastTokStartLoc=this.state.startLoc,this.nextToken()}eat(e){return!!this.match(e)&&(this.next(),!0)}match(e){return this.state.type===e}createLookaheadState(e){return{pos:e.pos,value:null,type:e.type,start:e.start,end:e.end,lastTokEnd:e.end,context:[this.curContext()],inType:e.inType}}lookahead(){const e=this.state;this.state=this.createLookaheadState(e),this.isLookahead=!0,this.nextToken(),this.isLookahead=!1;const t=this.state;return this.state=e,t}nextTokenStart(){return this.nextTokenStartSince(this.state.pos)}nextTokenStartSince(e){return m.lastIndex=e,e+m.exec(this.input)[0].length}lookaheadCharCode(){return this.input.charCodeAt(this.nextTokenStart())}codePointAtPos(e){let t=this.input.charCodeAt(e);if(55296==(64512&t)&&++ethis.raise(t,e))),this.state.strictErrors.clear())}curContext(){return this.state.context[this.state.context.length-1]}nextToken(){const e=this.curContext();e.preserveSpace||this.skipSpace(),this.state.start=this.state.pos,this.isLookahead||(this.state.startLoc=this.state.curPosition()),this.state.pos>=this.length?this.finishToken(p.eof):e===P.template?this.readTmplToken():this.getTokenFromCode(this.codePointAtPos(this.state.pos))}pushComment(e,t,r,n,s,i){const o={type:e?"CommentBlock":"CommentLine",value:t,start:r,end:n,loc:new b(s,i)};this.options.tokens&&this.pushToken(o),this.state.comments.push(o),this.addComment(o)}skipBlockComment(){let e;this.isLookahead||(e=this.state.curPosition());const t=this.state.pos,r=this.input.indexOf("*/",this.state.pos+2);if(-1===r)throw this.raise(t,x.UnterminatedComment);let n;for(this.state.pos=r+2,d.lastIndex=t;(n=d.exec(this.input))&&n.index=48&&t<=57)throw this.raise(this.state.pos,x.UnexpectedDigitAfterHash);if(123===t||91===t&&this.hasPlugin("recordAndTuple")){if(this.expectPlugin("recordAndTuple"),"hash"!==this.getPluginOption("recordAndTuple","syntaxType"))throw this.raise(this.state.pos,123===t?x.RecordExpressionHashIncorrectStartSyntaxType:x.TupleExpressionHashIncorrectStartSyntaxType);this.state.pos+=2,123===t?this.finishToken(p.braceHashL):this.finishToken(p.bracketHashL)}else j(t)?(++this.state.pos,this.finishToken(p.privateName,this.readWord1(t))):92===t?(++this.state.pos,this.finishToken(p.privateName,this.readWord1())):this.finishOp(p.hash,1)}readToken_dot(){const e=this.input.charCodeAt(this.state.pos+1);e>=48&&e<=57?this.readNumber(!0):46===e&&46===this.input.charCodeAt(this.state.pos+2)?(this.state.pos+=3,this.finishToken(p.ellipsis)):(++this.state.pos,this.finishToken(p.dot))}readToken_slash(){61===this.input.charCodeAt(this.state.pos+1)?this.finishOp(p.slashAssign,2):this.finishOp(p.slash,1)}readToken_interpreter(){if(0!==this.state.pos||this.length<2)return!1;let e=this.input.charCodeAt(this.state.pos+1);if(33!==e)return!1;const t=this.state.pos;for(this.state.pos+=1;!h(e)&&++this.state.pos=48&&t<=57?(++this.state.pos,this.finishToken(p.question)):(this.state.pos+=2,this.finishToken(p.questionDot))}getTokenFromCode(e){switch(e){case 46:return void this.readToken_dot();case 40:return++this.state.pos,void this.finishToken(p.parenL);case 41:return++this.state.pos,void this.finishToken(p.parenR);case 59:return++this.state.pos,void this.finishToken(p.semi);case 44:return++this.state.pos,void this.finishToken(p.comma);case 91:if(this.hasPlugin("recordAndTuple")&&124===this.input.charCodeAt(this.state.pos+1)){if("bar"!==this.getPluginOption("recordAndTuple","syntaxType"))throw this.raise(this.state.pos,x.TupleExpressionBarIncorrectStartSyntaxType);this.state.pos+=2,this.finishToken(p.bracketBarL)}else++this.state.pos,this.finishToken(p.bracketL);return;case 93:return++this.state.pos,void this.finishToken(p.bracketR);case 123:if(this.hasPlugin("recordAndTuple")&&124===this.input.charCodeAt(this.state.pos+1)){if("bar"!==this.getPluginOption("recordAndTuple","syntaxType"))throw this.raise(this.state.pos,x.RecordExpressionBarIncorrectStartSyntaxType);this.state.pos+=2,this.finishToken(p.braceBarL)}else++this.state.pos,this.finishToken(p.braceL);return;case 125:return++this.state.pos,void this.finishToken(p.braceR);case 58:return void(this.hasPlugin("functionBind")&&58===this.input.charCodeAt(this.state.pos+1)?this.finishOp(p.doubleColon,2):(++this.state.pos,this.finishToken(p.colon)));case 63:return void this.readToken_question();case 96:return++this.state.pos,void this.finishToken(p.backQuote);case 48:{const e=this.input.charCodeAt(this.state.pos+1);if(120===e||88===e)return void this.readRadixNumber(16);if(111===e||79===e)return void this.readRadixNumber(8);if(98===e||66===e)return void this.readRadixNumber(2)}case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return void this.readNumber(!1);case 34:case 39:return void this.readString(e);case 47:return void this.readToken_slash();case 37:case 42:return void this.readToken_mult_modulo(e);case 124:case 38:return void this.readToken_pipe_amp(e);case 94:return void this.readToken_caret();case 43:case 45:return void this.readToken_plus_min(e);case 60:case 62:return void this.readToken_lt_gt(e);case 61:case 33:return void this.readToken_eq_excl(e);case 126:return void this.finishOp(p.tilde,1);case 64:return++this.state.pos,void this.finishToken(p.at);case 35:return void this.readToken_numberSign();case 92:return void this.readWord();default:if(j(e))return void this.readWord(e)}throw this.raise(this.state.pos,x.InvalidOrUnexpectedToken,String.fromCodePoint(e))}finishOp(e,t){const r=this.input.slice(this.state.pos,this.state.pos+t);this.state.pos+=t,this.finishToken(e,r)}readRegexp(){const e=this.state.start+1;let t,r,{pos:n}=this.state;for(;;++n){if(n>=this.length)throw this.raise(e,x.UnterminatedRegExp);const s=this.input.charCodeAt(n);if(h(s))throw this.raise(e,x.UnterminatedRegExp);if(t)t=!1;else{if(91===s)r=!0;else if(93===s&&r)r=!1;else if(47===s&&!r)break;t=92===s}}const s=this.input.slice(e,n);++n;let i="";for(;n=97?t-97+10:t>=65?t-65+10:Te(t)?t-48:1/0,c>=e)if(this.options.errorRecovery&&c<=9)c=0,this.raise(this.state.start+s+2,x.InvalidDigit,e);else{if(!r)break;c=0,a=!0}++this.state.pos,l=l*e+c}else{const e=this.input.charCodeAt(this.state.pos-1),t=this.input.charCodeAt(this.state.pos+1);(-1===o.indexOf(t)||i.indexOf(e)>-1||i.indexOf(t)>-1||Number.isNaN(t))&&this.raise(this.state.pos,x.UnexpectedNumericSeparator),n||this.raise(this.state.pos,x.NumericSeparatorInEscapeSequence),++this.state.pos}}return this.state.pos===s||null!=t&&this.state.pos-s!==t||a?null:l}readRadixNumber(e){const t=this.state.pos;let r=!1;this.state.pos+=2;const n=this.readInt(e);null==n&&this.raise(this.state.start+2,x.InvalidDigit,e);const s=this.input.charCodeAt(this.state.pos);if(110===s)++this.state.pos,r=!0;else if(109===s)throw this.raise(t,x.InvalidDecimal);if(j(this.codePointAtPos(this.state.pos)))throw this.raise(this.state.pos,x.NumberIdentifier);if(r){const e=this.input.slice(t,this.state.pos).replace(/[_n]/g,"");this.finishToken(p.bigint,e)}else this.finishToken(p.num,n)}readNumber(e){const t=this.state.pos;let r=!1,n=!1,s=!1,i=!1,o=!1;e||null!==this.readInt(10)||this.raise(t,x.InvalidNumber);const a=this.state.pos-t>=2&&48===this.input.charCodeAt(t);if(a){const e=this.input.slice(t,this.state.pos);if(this.recordStrictModeErrors(t,x.StrictOctalLiteral),!this.state.strict){const r=e.indexOf("_");r>0&&this.raise(r+t,x.ZeroDigitNumericSeparator)}o=a&&!/[89]/.test(e)}let l=this.input.charCodeAt(this.state.pos);if(46!==l||o||(++this.state.pos,this.readInt(10),r=!0,l=this.input.charCodeAt(this.state.pos)),69!==l&&101!==l||o||(l=this.input.charCodeAt(++this.state.pos),43!==l&&45!==l||++this.state.pos,null===this.readInt(10)&&this.raise(t,x.InvalidOrMissingExponent),r=!0,i=!0,l=this.input.charCodeAt(this.state.pos)),110===l&&((r||a)&&this.raise(t,x.InvalidBigIntLiteral),++this.state.pos,n=!0),109===l&&(this.expectPlugin("decimal",this.state.pos),(i||a)&&this.raise(t,x.InvalidDecimal),++this.state.pos,s=!0),j(this.codePointAtPos(this.state.pos)))throw this.raise(this.state.pos,x.NumberIdentifier);const c=this.input.slice(t,this.state.pos).replace(/[_mn]/g,"");if(n)return void this.finishToken(p.bigint,c);if(s)return void this.finishToken(p.decimal,c);const u=o?parseInt(c,8):parseFloat(c);this.finishToken(p.num,u)}readCodePoint(e){let t;if(123===this.input.charCodeAt(this.state.pos)){const r=++this.state.pos;if(t=this.readHexChar(this.input.indexOf("}",this.state.pos)-this.state.pos,!0,e),++this.state.pos,null!==t&&t>1114111){if(!e)return null;this.raise(r,x.InvalidCodePoint)}}else t=this.readHexChar(4,!1,e);return t}readString(e){let t="",r=++this.state.pos;for(;;){if(this.state.pos>=this.length)throw this.raise(this.state.start,x.UnterminatedString);const n=this.input.charCodeAt(this.state.pos);if(n===e)break;if(92===n)t+=this.input.slice(r,this.state.pos),t+=this.readEscapedChar(!1),r=this.state.pos;else if(8232===n||8233===n)++this.state.pos,++this.state.curLine,this.state.lineStart=this.state.pos;else{if(h(n))throw this.raise(this.state.start,x.UnterminatedString);++this.state.pos}}t+=this.input.slice(r,this.state.pos++),this.finishToken(p.string,t)}readTmplToken(){let e="",t=this.state.pos,r=!1;for(;;){if(this.state.pos>=this.length)throw this.raise(this.state.start,x.UnterminatedTemplate);const n=this.input.charCodeAt(this.state.pos);if(96===n||36===n&&123===this.input.charCodeAt(this.state.pos+1))return this.state.pos===this.state.start&&this.match(p.template)?36===n?(this.state.pos+=2,void this.finishToken(p.dollarBraceL)):(++this.state.pos,void this.finishToken(p.backQuote)):(e+=this.input.slice(t,this.state.pos),void this.finishToken(p.template,r?null:e));if(92===n){e+=this.input.slice(t,this.state.pos);const n=this.readEscapedChar(!0);null===n?r=!0:e+=n,t=this.state.pos}else if(h(n)){switch(e+=this.input.slice(t,this.state.pos),++this.state.pos,n){case 13:10===this.input.charCodeAt(this.state.pos)&&++this.state.pos;case 10:e+="\n";break;default:e+=String.fromCharCode(n)}++this.state.curLine,this.state.lineStart=this.state.pos,t=this.state.pos}else++this.state.pos}}recordStrictModeErrors(e,t){this.state.strict&&!this.state.strictErrors.has(e)?this.raise(e,t):this.state.strictErrors.set(e,t)}readEscapedChar(e){const t=!e,r=this.input.charCodeAt(++this.state.pos);switch(++this.state.pos,r){case 110:return"\n";case 114:return"\r";case 120:{const e=this.readHexChar(2,!1,t);return null===e?null:String.fromCharCode(e)}case 117:{const e=this.readCodePoint(t);return null===e?null:String.fromCodePoint(e)}case 116:return"\t";case 98:return"\b";case 118:return"\v";case 102:return"\f";case 13:10===this.input.charCodeAt(this.state.pos)&&++this.state.pos;case 10:this.state.lineStart=this.state.pos,++this.state.curLine;case 8232:case 8233:return"";case 56:case 57:if(e)return null;this.recordStrictModeErrors(this.state.pos-1,x.StrictNumericEscape);default:if(r>=48&&r<=55){const t=this.state.pos-1;let r=this.input.substr(this.state.pos-1,3).match(/^[0-7]+/)[0],n=parseInt(r,8);n>255&&(r=r.slice(0,-1),n=parseInt(r,8)),this.state.pos+=r.length-1;const s=this.input.charCodeAt(this.state.pos);if("0"!==r||56===s||57===s){if(e)return null;this.recordStrictModeErrors(t,x.StrictNumericEscape)}return String.fromCharCode(n)}return String.fromCharCode(r)}}readHexChar(e,t,r){const n=this.state.pos,s=this.readInt(16,e,t,!1);return null===s&&(r?this.raise(n,x.InvalidEscapeSequence):this.state.pos=n-1),s}readWord1(e){this.state.containsEsc=!1;let t="";const r=this.state.pos;let n=this.state.pos;for(void 0!==e&&(this.state.pos+=e<=65535?1:2);this.state.posthis.state.lastTokEnd&&this.raise(this.state.lastTokEnd,{code:E.SyntaxError,reasonCode:"UnexpectedSpace",template:e})}unexpected(e,t={code:E.SyntaxError,reasonCode:"UnexpectedToken",template:"Unexpected token"}){throw t instanceof a&&(t={code:E.SyntaxError,reasonCode:"UnexpectedToken",template:`Unexpected token, expected "${t.label}"`}),this.raise(null!=e?e:this.state.start,t)}expectPlugin(e,t){if(!this.hasPlugin(e))throw this.raiseWithData(null!=t?t:this.state.start,{missingPlugin:[e]},`This experimental syntax requires enabling the parser plugin: '${e}'`);return!0}expectOnePlugin(e,t){if(!e.some((e=>this.hasPlugin(e))))throw this.raiseWithData(null!=t?t:this.state.start,{missingPlugin:e},`This experimental syntax requires enabling one of the following parser plugin(s): '${e.join(", ")}'`)}tryParse(e,t=this.state.clone()){const r={node:null};try{const n=e(((e=null)=>{throw r.node=e,r}));if(this.state.errors.length>t.errors.length){const e=this.state;return this.state=t,this.state.tokensLength=e.tokensLength,{node:n,error:e.errors[t.errors.length],thrown:!1,aborted:!1,failState:e}}return{node:n,error:null,thrown:!1,aborted:!1,failState:null}}catch(e){const n=this.state;if(this.state=t,e instanceof SyntaxError)return{node:null,error:e,thrown:!0,aborted:!1,failState:n};if(e===r)return{node:r.node,error:null,thrown:!1,aborted:!0,failState:n};throw e}}checkExpressionErrors(e,t){if(!e)return!1;const{shorthandAssign:r,doubleProto:n,optionalParameters:s}=e;if(!t)return r>=0||n>=0||s>=0;r>=0&&this.unexpected(r),n>=0&&this.raise(n,x.DuplicateProto),s>=0&&this.unexpected(s)}isLiteralPropertyName(){return this.match(p.name)||!!this.state.type.keyword||this.match(p.string)||this.match(p.num)||this.match(p.bigint)||this.match(p.decimal)}isPrivateName(e){return"PrivateName"===e.type}getPrivateNameSV(e){return e.id.name}hasPropertyAsPrivateName(e){return("MemberExpression"===e.type||"OptionalMemberExpression"===e.type)&&this.isPrivateName(e.property)}isOptionalChain(e){return"OptionalMemberExpression"===e.type||"OptionalCallExpression"===e.type}isObjectProperty(e){return"ObjectProperty"===e.type}isObjectMethod(e){return"ObjectMethod"===e.type}initializeScopes(e="module"===this.options.sourceType){const t=this.state.labels;this.state.labels=[];const r=this.exportedIdentifiers;this.exportedIdentifiers=new Set;const n=this.inModule;this.inModule=e;const s=this.scope,i=this.getScopeHandler();this.scope=new i(this.raise.bind(this),this.inModule);const o=this.prodParam;this.prodParam=new ce;const a=this.classScope;this.classScope=new Ie(this.raise.bind(this));const l=this.expressionScope;return this.expressionScope=new _e(this.raise.bind(this)),()=>{this.state.labels=t,this.exportedIdentifiers=r,this.inModule=n,this.scope=s,this.prodParam=o,this.classScope=a,this.expressionScope=l}}enterInitialScopes(){let e=0;this.hasPlugin("topLevelAwait")&&this.inModule&&(e|=2),this.scope.enter(1),this.prodParam.enter(e)}}{startNode(){return new Le(this,this.state.start,this.state.startLoc)}startNodeAt(e,t){return new Le(this,e,t)}startNodeAtNode(e){return this.startNodeAt(e.start,e.loc.start)}finishNode(e,t){return this.finishNodeAt(e,t,this.state.lastTokEnd,this.state.lastTokEndLoc)}finishNodeAt(e,t,r,n){return e.type=t,e.end=r,e.loc.end=n,this.options.ranges&&(e.range[1]=r),this.processComment(e),e}resetStartLocation(e,t,r){e.start=t,e.loc.start=r,this.options.ranges&&(e.range[0]=t)}resetEndLocation(e,t=this.state.lastTokEnd,r=this.state.lastTokEndLoc){e.end=t,e.loc.end=r,this.options.ranges&&(e.range[1]=t)}resetStartLocationFromNode(e,t){this.resetStartLocation(e,t.start,t.loc.start)}}{toAssignable(e,t=!1){var r,n;let s;switch(("ParenthesizedExpression"===e.type||null!=(r=e.extra)&&r.parenthesized)&&(s=Me(e),t?"Identifier"===s.type?this.expressionScope.recordParenthesizedIdentifierError(e.start,x.InvalidParenthesizedAssignment):"MemberExpression"!==s.type&&this.raise(e.start,x.InvalidParenthesizedAssignment):this.raise(e.start,x.InvalidParenthesizedAssignment)),e.type){case"Identifier":case"ObjectPattern":case"ArrayPattern":case"AssignmentPattern":break;case"ObjectExpression":e.type="ObjectPattern";for(let r=0,n=e.properties.length,s=n-1;rthis.parseExpressionBase(t))):this.allowInAnd((()=>this.parseExpressionBase(t)))}parseExpressionBase(e){const t=this.state.start,r=this.state.startLoc,n=this.parseMaybeAssign(e);if(this.match(p.comma)){const s=this.startNodeAt(t,r);for(s.expressions=[n];this.eat(p.comma);)s.expressions.push(this.parseMaybeAssign(e));return this.toReferencedList(s.expressions),this.finishNode(s,"SequenceExpression")}return n}parseMaybeAssignDisallowIn(e,t){return this.disallowInAnd((()=>this.parseMaybeAssign(e,t)))}parseMaybeAssignAllowIn(e,t){return this.allowInAnd((()=>this.parseMaybeAssign(e,t)))}setOptionalParametersError(e,t){var r;e.optionalParameters=null!=(r=null==t?void 0:t.pos)?r:this.state.start}parseMaybeAssign(e,t){const r=this.state.start,n=this.state.startLoc;if(this.isContextual("yield")&&this.prodParam.hasYield){let e=this.parseYield();return t&&(e=t.call(this,e,r,n)),e}let s;e?s=!1:(e=new De,s=!0),(this.match(p.parenL)||this.match(p.name))&&(this.state.potentialArrowAt=this.state.start);let i=this.parseMaybeConditional(e);if(t&&(i=t.call(this,i,r,n)),this.state.type.isAssign){const t=this.startNodeAt(r,n),s=this.state.value;return t.operator=s,this.match(p.eq)?(t.left=this.toAssignable(i,!0),e.doubleProto=-1):t.left=i,e.shorthandAssign>=t.left.start&&(e.shorthandAssign=-1),this.checkLVal(i,"assignment expression"),this.next(),t.right=this.parseMaybeAssign(),this.finishNode(t,"AssignmentExpression")}return s&&this.checkExpressionErrors(e,!0),i}parseMaybeConditional(e){const t=this.state.start,r=this.state.startLoc,n=this.state.potentialArrowAt,s=this.parseExprOps(e);return this.shouldExitDescending(s,n)?s:this.parseConditional(s,t,r,e)}parseConditional(e,t,r,n){if(this.eat(p.question)){const n=this.startNodeAt(t,r);return n.test=e,n.consequent=this.parseMaybeAssignAllowIn(),this.expect(p.colon),n.alternate=this.parseMaybeAssign(),this.finishNode(n,"ConditionalExpression")}return e}parseExprOps(e){const t=this.state.start,r=this.state.startLoc,n=this.state.potentialArrowAt,s=this.parseMaybeUnary(e);return this.shouldExitDescending(s,n)?s:this.parseExprOp(s,t,r,-1)}parseExprOp(e,t,r,n){let s=this.state.type.binop;if(null!=s&&(this.prodParam.hasIn||!this.match(p._in))&&s>n){const i=this.state.type;if(i===p.pipeline){if(this.expectPlugin("pipelineOperator"),this.state.inFSharpPipelineDirectBody)return e;this.state.inPipeline=!0,this.checkPipelineAtInfixOperator(e,t)}const o=this.startNodeAt(t,r);o.left=e,o.operator=this.state.value;const a=i===p.logicalOR||i===p.logicalAND,l=i===p.nullishCoalescing;if(l&&(s=p.logicalAND.binop),this.next(),i===p.pipeline&&"minimal"===this.getPluginOption("pipelineOperator","proposal")&&this.match(p.name)&&"await"===this.state.value&&this.prodParam.hasAwait)throw this.raise(this.state.start,x.UnexpectedAwaitAfterPipelineBody);o.right=this.parseExprOpRightExpr(i,s),this.finishNode(o,a||l?"LogicalExpression":"BinaryExpression");const c=this.state.type;if(l&&(c===p.logicalOR||c===p.logicalAND)||a&&c===p.nullishCoalescing)throw this.raise(this.state.start,x.MixingCoalesceWithLogical);return this.parseExprOp(o,t,r,n)}return e}parseExprOpRightExpr(e,t){const r=this.state.start,n=this.state.startLoc;switch(e){case p.pipeline:switch(this.getPluginOption("pipelineOperator","proposal")){case"smart":return this.withTopicPermittingContext((()=>this.parseSmartPipelineBody(this.parseExprOpBaseRightExpr(e,t),r,n)));case"fsharp":return this.withSoloAwaitPermittingContext((()=>this.parseFSharpPipelineBody(t)))}default:return this.parseExprOpBaseRightExpr(e,t)}}parseExprOpBaseRightExpr(e,t){const r=this.state.start,n=this.state.startLoc;return this.parseExprOp(this.parseMaybeUnary(),r,n,e.rightAssociative?t-1:t)}checkExponentialAfterUnary(e){this.match(p.exponent)&&this.raise(e.argument.start,x.UnexpectedTokenUnaryExponentiation)}parseMaybeUnary(e,t){const r=this.state.start,n=this.state.startLoc,s=this.isContextual("await");if(s&&this.isAwaitAllowed()){this.next();const e=this.parseAwait(r,n);return t||this.checkExponentialAfterUnary(e),e}if(this.isContextual("module")&&123===this.lookaheadCharCode()&&!this.hasFollowingLineBreak())return this.parseModuleExpression();const i=this.match(p.incDec),o=this.startNode();if(this.state.type.prefix){o.operator=this.state.value,o.prefix=!0,this.match(p._throw)&&this.expectPlugin("throwExpressions");const r=this.match(p._delete);if(this.next(),o.argument=this.parseMaybeUnary(null,!0),this.checkExpressionErrors(e,!0),this.state.strict&&r){const e=o.argument;"Identifier"===e.type?this.raise(o.start,x.StrictDelete):this.hasPropertyAsPrivateName(e)&&this.raise(o.start,x.DeletePrivateField)}if(!i)return t||this.checkExponentialAfterUnary(o),this.finishNode(o,"UnaryExpression")}const a=this.parseUpdate(o,i,e);return s&&(this.hasPlugin("v8intrinsic")?this.state.type.startsExpr:this.state.type.startsExpr&&!this.match(p.modulo))&&!this.isAmbiguousAwait()?(this.raiseOverwrite(r,this.hasPlugin("topLevelAwait")?x.AwaitNotInAsyncContext:x.AwaitNotInAsyncFunction),this.parseAwait(r,n)):a}parseUpdate(e,t,r){if(t)return this.checkLVal(e.argument,"prefix operation"),this.finishNode(e,"UpdateExpression");const n=this.state.start,s=this.state.startLoc;let i=this.parseExprSubscripts(r);if(this.checkExpressionErrors(r,!1))return i;for(;this.state.type.postfix&&!this.canInsertSemicolon();){const e=this.startNodeAt(n,s);e.operator=this.state.value,e.prefix=!1,e.argument=i,this.checkLVal(i,"postfix operation"),this.next(),i=this.finishNode(e,"UpdateExpression")}return i}parseExprSubscripts(e){const t=this.state.start,r=this.state.startLoc,n=this.state.potentialArrowAt,s=this.parseExprAtom(e);return this.shouldExitDescending(s,n)?s:this.parseSubscripts(s,t,r)}parseSubscripts(e,t,r,n){const s={optionalChainMember:!1,maybeAsyncArrow:this.atPossibleAsyncArrow(e),stop:!1};do{e=this.parseSubscript(e,t,r,n,s),s.maybeAsyncArrow=!1}while(!s.stop);return e}parseSubscript(e,t,r,n,s){if(!n&&this.eat(p.doubleColon))return this.parseBind(e,t,r,n,s);if(this.match(p.backQuote))return this.parseTaggedTemplateExpression(e,t,r,s);let i=!1;if(this.match(p.questionDot)){if(n&&40===this.lookaheadCharCode())return s.stop=!0,e;s.optionalChainMember=i=!0,this.next()}return!n&&this.match(p.parenL)?this.parseCoverCallAndAsyncArrowHead(e,t,r,s,i):i||this.match(p.bracketL)||this.eat(p.dot)?this.parseMember(e,t,r,s,i):(s.stop=!0,e)}parseMember(e,t,r,n,s){const i=this.startNodeAt(t,r),o=this.eat(p.bracketL);i.object=e,i.computed=o;const a=!o&&this.match(p.privateName)&&this.state.value,l=o?this.parseExpression():a?this.parsePrivateName():this.parseIdentifier(!0);return!1!==a&&("Super"===i.object.type&&this.raise(t,x.SuperPrivateField),this.classScope.usePrivateName(a,l.start)),i.property=l,o&&this.expect(p.bracketR),n.optionalChainMember?(i.optional=s,this.finishNode(i,"OptionalMemberExpression")):this.finishNode(i,"MemberExpression")}parseBind(e,t,r,n,s){const i=this.startNodeAt(t,r);return i.object=e,i.callee=this.parseNoCallExpr(),s.stop=!0,this.parseSubscripts(this.finishNode(i,"BindExpression"),t,r,n)}parseCoverCallAndAsyncArrowHead(e,t,r,n,s){const i=this.state.maybeInArrowParameters;let o=null;this.state.maybeInArrowParameters=!0,this.next();let a=this.startNodeAt(t,r);return a.callee=e,n.maybeAsyncArrow&&(this.expressionScope.enter(new Ne(2)),o=new De),n.optionalChainMember&&(a.optional=s),a.arguments=s?this.parseCallExpressionArguments(p.parenR):this.parseCallExpressionArguments(p.parenR,"Import"===e.type,"Super"!==e.type,a,o),this.finishCallExpression(a,n.optionalChainMember),n.maybeAsyncArrow&&this.shouldParseAsyncArrow()&&!s?(n.stop=!0,this.expressionScope.validateAsPattern(),this.expressionScope.exit(),a=this.parseAsyncArrowFromCallExpression(this.startNodeAt(t,r),a)):(n.maybeAsyncArrow&&(this.checkExpressionErrors(o,!0),this.expressionScope.exit()),this.toReferencedArguments(a)),this.state.maybeInArrowParameters=i,a}toReferencedArguments(e,t){this.toReferencedListDeep(e.arguments,t)}parseTaggedTemplateExpression(e,t,r,n){const s=this.startNodeAt(t,r);return s.tag=e,s.quasi=this.parseTemplate(!0),n.optionalChainMember&&this.raise(t,x.OptionalChainingNoTemplate),this.finishNode(s,"TaggedTemplateExpression")}atPossibleAsyncArrow(e){return"Identifier"===e.type&&"async"===e.name&&this.state.lastTokEnd===e.end&&!this.canInsertSemicolon()&&e.end-e.start==5&&e.start===this.state.potentialArrowAt}finishCallExpression(e,t){if("Import"===e.callee.type)if(2===e.arguments.length&&(this.hasPlugin("moduleAttributes")||this.expectPlugin("importAssertions")),0===e.arguments.length||e.arguments.length>2)this.raise(e.start,x.ImportCallArity,this.hasPlugin("importAssertions")||this.hasPlugin("moduleAttributes")?"one or two arguments":"one argument");else for(const t of e.arguments)"SpreadElement"===t.type&&this.raise(t.start,x.ImportCallSpreadArgument);return this.finishNode(e,t?"OptionalCallExpression":"CallExpression")}parseCallExpressionArguments(e,t,r,n,s){const i=[];let o=!0;const a=this.state.inFSharpPipelineDirectBody;for(this.state.inFSharpPipelineDirectBody=!1;!this.eat(e);){if(o)o=!1;else if(this.expect(p.comma),this.match(e)){!t||this.hasPlugin("importAssertions")||this.hasPlugin("moduleAttributes")||this.raise(this.state.lastTokStart,x.ImportCallArgumentTrailingComma),n&&this.addExtra(n,"trailingComma",this.state.lastTokStart),this.next();break}i.push(this.parseExprListItem(!1,s,r))}return this.state.inFSharpPipelineDirectBody=a,i}shouldParseAsyncArrow(){return this.match(p.arrow)&&!this.canInsertSemicolon()}parseAsyncArrowFromCallExpression(e,t){var r;return this.expect(p.arrow),this.parseArrowExpression(e,t.arguments,!0,null==(r=t.extra)?void 0:r.trailingComma),e}parseNoCallExpr(){const e=this.state.start,t=this.state.startLoc;return this.parseSubscripts(this.parseExprAtom(),e,t,!0)}parseExprAtom(e){let t;switch(this.state.type){case p._super:return this.parseSuper();case p._import:return t=this.startNode(),this.next(),this.match(p.dot)?this.parseImportMetaProperty(t):(this.match(p.parenL)||this.raise(this.state.lastTokStart,x.UnsupportedImport),this.finishNode(t,"Import"));case p._this:return t=this.startNode(),this.next(),this.finishNode(t,"ThisExpression");case p.name:{const e=this.state.potentialArrowAt===this.state.start,t=this.state.containsEsc,r=this.parseIdentifier();if(!t&&"async"===r.name&&!this.canInsertSemicolon()){if(this.match(p._function))return this.next(),this.parseFunction(this.startNodeAtNode(r),void 0,!0);if(this.match(p.name))return 61===this.lookaheadCharCode()?this.parseAsyncArrowUnaryFunction(r):r;if(this.match(p._do))return this.parseDo(!0)}return e&&this.match(p.arrow)&&!this.canInsertSemicolon()?(this.next(),this.parseArrowExpression(this.startNodeAtNode(r),[r],!1)):r}case p._do:return this.parseDo(!1);case p.slash:case p.slashAssign:return this.readRegexp(),this.parseRegExpLiteral(this.state.value);case p.num:return this.parseNumericLiteral(this.state.value);case p.bigint:return this.parseBigIntLiteral(this.state.value);case p.decimal:return this.parseDecimalLiteral(this.state.value);case p.string:return this.parseStringLiteral(this.state.value);case p._null:return this.parseNullLiteral();case p._true:return this.parseBooleanLiteral(!0);case p._false:return this.parseBooleanLiteral(!1);case p.parenL:{const e=this.state.potentialArrowAt===this.state.start;return this.parseParenAndDistinguishExpression(e)}case p.bracketBarL:case p.bracketHashL:return this.parseArrayLike(this.state.type===p.bracketBarL?p.bracketBarR:p.bracketR,!1,!0,e);case p.bracketL:return this.parseArrayLike(p.bracketR,!0,!1,e);case p.braceBarL:case p.braceHashL:return this.parseObjectLike(this.state.type===p.braceBarL?p.braceBarR:p.braceR,!1,!0,e);case p.braceL:return this.parseObjectLike(p.braceR,!1,!1,e);case p._function:return this.parseFunctionOrFunctionSent();case p.at:this.parseDecorators();case p._class:return t=this.startNode(),this.takeDecorators(t),this.parseClass(t,!1);case p._new:return this.parseNewOrNewTarget();case p.backQuote:return this.parseTemplate(!1);case p.doubleColon:{t=this.startNode(),this.next(),t.object=null;const e=t.callee=this.parseNoCallExpr();if("MemberExpression"===e.type)return this.finishNode(t,"BindExpression");throw this.raise(e.start,x.UnsupportedBind)}case p.privateName:{const e=this.state.start,r=this.state.value;if(t=this.parsePrivateName(),this.match(p._in))this.expectPlugin("privateIn"),this.classScope.usePrivateName(r,t.start);else{if(!this.hasPlugin("privateIn"))throw this.unexpected(e);this.raise(this.state.start,x.PrivateInExpectedIn,r)}return t}case p.hash:if(this.state.inPipeline)return t=this.startNode(),"smart"!==this.getPluginOption("pipelineOperator","proposal")&&this.raise(t.start,x.PrimaryTopicRequiresSmartPipeline),this.next(),this.primaryTopicReferenceIsAllowedInCurrentTopicContext()||this.raise(t.start,x.PrimaryTopicNotAllowed),this.registerTopicReference(),this.finishNode(t,"PipelinePrimaryTopicReference");case p.relational:if("<"===this.state.value){const e=this.input.codePointAt(this.nextTokenStart());(j(e)||62===e)&&this.expectOnePlugin(["jsx","flow","typescript"])}default:throw this.unexpected()}}parseAsyncArrowUnaryFunction(e){const t=this.startNodeAtNode(e);this.prodParam.enter(ue(!0,this.prodParam.hasYield));const r=[this.parseIdentifier()];return this.prodParam.exit(),this.hasPrecedingLineBreak()&&this.raise(this.state.pos,x.LineTerminatorBeforeArrow),this.expect(p.arrow),this.parseArrowExpression(t,r,!0),t}parseDo(e){this.expectPlugin("doExpressions"),e&&this.expectPlugin("asyncDoExpressions");const t=this.startNode();t.async=e,this.next();const r=this.state.labels;return this.state.labels=[],e?(this.prodParam.enter(2),t.body=this.parseBlock(),this.prodParam.exit()):t.body=this.parseBlock(),this.state.labels=r,this.finishNode(t,"DoExpression")}parseSuper(){const e=this.startNode();return this.next(),!this.match(p.parenL)||this.scope.allowDirectSuper||this.options.allowSuperOutsideMethod?this.scope.allowSuper||this.options.allowSuperOutsideMethod||this.raise(e.start,x.UnexpectedSuper):this.raise(e.start,x.SuperNotAllowed),this.match(p.parenL)||this.match(p.bracketL)||this.match(p.dot)||this.raise(e.start,x.UnsupportedSuper),this.finishNode(e,"Super")}parseMaybePrivateName(e){return this.match(p.privateName)?(e||this.raise(this.state.start+1,x.UnexpectedPrivateField),this.parsePrivateName()):this.parseIdentifier(!0)}parsePrivateName(){const e=this.startNode(),t=this.startNodeAt(this.state.start+1,new g(this.state.curLine,this.state.start+1-this.state.lineStart)),r=this.state.value;return this.next(),e.id=this.createIdentifier(t,r),this.finishNode(e,"PrivateName")}parseFunctionOrFunctionSent(){const e=this.startNode();if(this.next(),this.prodParam.hasYield&&this.match(p.dot)){const t=this.createIdentifier(this.startNodeAtNode(e),"function");return this.next(),this.parseMetaProperty(e,t,"sent")}return this.parseFunction(e)}parseMetaProperty(e,t,r){e.meta=t,"function"===t.name&&"sent"===r&&(this.isContextual(r)?this.expectPlugin("functionSent"):this.hasPlugin("functionSent")||this.unexpected());const n=this.state.containsEsc;return e.property=this.parseIdentifier(!0),(e.property.name!==r||n)&&this.raise(e.property.start,x.UnsupportedMetaProperty,t.name,r),this.finishNode(e,"MetaProperty")}parseImportMetaProperty(e){const t=this.createIdentifier(this.startNodeAtNode(e),"import");return this.next(),this.isContextual("meta")&&(this.inModule||this.raise(t.start,S.ImportMetaOutsideModule),this.sawUnambiguousESM=!0),this.parseMetaProperty(e,t,"meta")}parseLiteralAtNode(e,t,r){return this.addExtra(r,"rawValue",e),this.addExtra(r,"raw",this.input.slice(r.start,this.state.end)),r.value=e,this.next(),this.finishNode(r,t)}parseLiteral(e,t){const r=this.startNode();return this.parseLiteralAtNode(e,t,r)}parseStringLiteral(e){return this.parseLiteral(e,"StringLiteral")}parseNumericLiteral(e){return this.parseLiteral(e,"NumericLiteral")}parseBigIntLiteral(e){return this.parseLiteral(e,"BigIntLiteral")}parseDecimalLiteral(e){return this.parseLiteral(e,"DecimalLiteral")}parseRegExpLiteral(e){const t=this.parseLiteral(e.value,"RegExpLiteral");return t.pattern=e.pattern,t.flags=e.flags,t}parseBooleanLiteral(e){const t=this.startNode();return t.value=e,this.next(),this.finishNode(t,"BooleanLiteral")}parseNullLiteral(){const e=this.startNode();return this.next(),this.finishNode(e,"NullLiteral")}parseParenAndDistinguishExpression(e){const t=this.state.start,r=this.state.startLoc;let n;this.next(),this.expressionScope.enter(new Ne(1));const s=this.state.maybeInArrowParameters,i=this.state.inFSharpPipelineDirectBody;this.state.maybeInArrowParameters=!0,this.state.inFSharpPipelineDirectBody=!1;const o=this.state.start,a=this.state.startLoc,l=[],c=new De;let u,f,d=!0;for(;!this.match(p.parenR);){if(d)d=!1;else if(this.expect(p.comma,-1===c.optionalParameters?null:c.optionalParameters),this.match(p.parenR)){f=this.state.start;break}if(this.match(p.ellipsis)){const e=this.state.start,t=this.state.startLoc;u=this.state.start,l.push(this.parseParenItem(this.parseRestBinding(),e,t)),this.checkCommaAfterRest(41);break}l.push(this.parseMaybeAssignAllowIn(c,this.parseParenItem))}const h=this.state.lastTokEnd,m=this.state.lastTokEndLoc;this.expect(p.parenR),this.state.maybeInArrowParameters=s,this.state.inFSharpPipelineDirectBody=i;let y=this.startNodeAt(t,r);if(e&&this.shouldParseArrow()&&(y=this.parseArrow(y)))return this.expressionScope.validateAsPattern(),this.expressionScope.exit(),this.parseArrowExpression(y,l,!1),y;if(this.expressionScope.exit(),l.length||this.unexpected(this.state.lastTokStart),f&&this.unexpected(f),u&&this.unexpected(u),this.checkExpressionErrors(c,!0),this.toReferencedListDeep(l,!0),l.length>1?(n=this.startNodeAt(o,a),n.expressions=l,this.finishNodeAt(n,"SequenceExpression",h,m)):n=l[0],!this.options.createParenthesizedExpressions)return this.addExtra(n,"parenthesized",!0),this.addExtra(n,"parenStart",t),n;const g=this.startNodeAt(t,r);return g.expression=n,this.finishNode(g,"ParenthesizedExpression"),g}shouldParseArrow(){return!this.canInsertSemicolon()}parseArrow(e){if(this.eat(p.arrow))return e}parseParenItem(e,t,r){return e}parseNewOrNewTarget(){const e=this.startNode();if(this.next(),this.match(p.dot)){const t=this.createIdentifier(this.startNodeAtNode(e),"new");this.next();const r=this.parseMetaProperty(e,t,"target");return this.scope.inNonArrowFunction||this.scope.inClass||this.raise(r.start,x.UnexpectedNewTarget),r}return this.parseNew(e)}parseNew(e){return e.callee=this.parseNoCallExpr(),"Import"===e.callee.type?this.raise(e.callee.start,x.ImportCallNotNewExpression):this.isOptionalChain(e.callee)?this.raise(this.state.lastTokEnd,x.OptionalChainingNoNew):this.eat(p.questionDot)&&this.raise(this.state.start,x.OptionalChainingNoNew),this.parseNewArguments(e),this.finishNode(e,"NewExpression")}parseNewArguments(e){if(this.eat(p.parenL)){const t=this.parseExprList(p.parenR);this.toReferencedList(t),e.arguments=t}else e.arguments=[]}parseTemplateElement(e){const t=this.startNode();return null===this.state.value&&(e||this.raise(this.state.start+1,x.InvalidEscapeSequenceTemplate)),t.value={raw:this.input.slice(this.state.start,this.state.end).replace(/\r\n?/g,"\n"),cooked:this.state.value},this.next(),t.tail=this.match(p.backQuote),this.finishNode(t,"TemplateElement")}parseTemplate(e){const t=this.startNode();this.next(),t.expressions=[];let r=this.parseTemplateElement(e);for(t.quasis=[r];!r.tail;)this.expect(p.dollarBraceL),t.expressions.push(this.parseTemplateSubstitution()),this.expect(p.braceR),t.quasis.push(r=this.parseTemplateElement(e));return this.next(),this.finishNode(t,"TemplateLiteral")}parseTemplateSubstitution(){return this.parseExpression()}parseObjectLike(e,t,r,n){r&&this.expectPlugin("recordAndTuple");const s=this.state.inFSharpPipelineDirectBody;this.state.inFSharpPipelineDirectBody=!1;const i=Object.create(null);let o=!0;const a=this.startNode();for(a.properties=[],this.next();!this.match(e);){if(o)o=!1;else if(this.expect(p.comma),this.match(e)){this.addExtra(a,"trailingComma",this.state.lastTokStart);break}const s=this.parsePropertyDefinition(t,n);t||this.checkProto(s,r,i,n),r&&!this.isObjectProperty(s)&&"SpreadElement"!==s.type&&this.raise(s.start,x.InvalidRecordProperty),s.shorthand&&this.addExtra(s,"shorthand",!0),a.properties.push(s)}this.next(),this.state.inFSharpPipelineDirectBody=s;let l="ObjectExpression";return t?l="ObjectPattern":r&&(l="RecordExpression"),this.finishNode(a,l)}maybeAsyncOrAccessorProp(e){return!e.computed&&"Identifier"===e.key.type&&(this.isLiteralPropertyName()||this.match(p.bracketL)||this.match(p.star))}parsePropertyDefinition(e,t){let r=[];if(this.match(p.at))for(this.hasPlugin("decorators")&&this.raise(this.state.start,x.UnsupportedPropertyDecorator);this.match(p.at);)r.push(this.parseDecorator());const n=this.startNode();let s,i,o=!1,a=!1,l=!1;if(this.match(p.ellipsis))return r.length&&this.unexpected(),e?(this.next(),n.argument=this.parseIdentifier(),this.checkCommaAfterRest(125),this.finishNode(n,"RestElement")):this.parseSpread();r.length&&(n.decorators=r,r=[]),n.method=!1,(e||t)&&(s=this.state.start,i=this.state.startLoc),e||(o=this.eat(p.star));const c=this.state.containsEsc,u=this.parsePropertyName(n,!1);if(!e&&!o&&!c&&this.maybeAsyncOrAccessorProp(n)){const e=u.name;"async"!==e||this.hasPrecedingLineBreak()||(a=!0,o=this.eat(p.star),this.parsePropertyName(n,!1)),"get"!==e&&"set"!==e||(l=!0,n.kind=e,this.match(p.star)&&(o=!0,this.raise(this.state.pos,x.AccessorIsGenerator,e),this.next()),this.parsePropertyName(n,!1))}return this.parseObjPropValue(n,s,i,o,a,e,l,t),n}getGetterSetterExpectedParamCount(e){return"get"===e.kind?0:1}getObjectOrClassMethodParams(e){return e.params}checkGetterSetterParams(e){var t;const r=this.getGetterSetterExpectedParamCount(e),n=this.getObjectOrClassMethodParams(e),s=e.start;n.length!==r&&("get"===e.kind?this.raise(s,x.BadGetterArity):this.raise(s,x.BadSetterArity)),"set"===e.kind&&"RestElement"===(null==(t=n[n.length-1])?void 0:t.type)&&this.raise(s,x.BadSetterRestParameter)}parseObjectMethod(e,t,r,n,s){return s?(this.parseMethod(e,t,!1,!1,!1,"ObjectMethod"),this.checkGetterSetterParams(e),e):r||t||this.match(p.parenL)?(n&&this.unexpected(),e.kind="method",e.method=!0,this.parseMethod(e,t,r,!1,!1,"ObjectMethod")):void 0}parseObjectProperty(e,t,r,n,s){return e.shorthand=!1,this.eat(p.colon)?(e.value=n?this.parseMaybeDefault(this.state.start,this.state.startLoc):this.parseMaybeAssignAllowIn(s),this.finishNode(e,"ObjectProperty")):e.computed||"Identifier"!==e.key.type?void 0:(this.checkReservedWord(e.key.name,e.key.start,!0,!1),n?e.value=this.parseMaybeDefault(t,r,e.key.__clone()):this.match(p.eq)&&s?(-1===s.shorthandAssign&&(s.shorthandAssign=this.state.start),e.value=this.parseMaybeDefault(t,r,e.key.__clone())):e.value=e.key.__clone(),e.shorthand=!0,this.finishNode(e,"ObjectProperty"))}parseObjPropValue(e,t,r,n,s,i,o,a){const l=this.parseObjectMethod(e,n,s,i,o)||this.parseObjectProperty(e,t,r,i,a);return l||this.unexpected(),l}parsePropertyName(e,t){if(this.eat(p.bracketL))e.computed=!0,e.key=this.parseMaybeAssignAllowIn(),this.expect(p.bracketR);else{const r=this.state.inPropertyName;this.state.inPropertyName=!0;const n=this.state.type;e.key=n===p.num||n===p.string||n===p.bigint||n===p.decimal?this.parseExprAtom():this.parseMaybePrivateName(t),n!==p.privateName&&(e.computed=!1),this.state.inPropertyName=r}return e.key}initFunction(e,t){e.id=null,e.generator=!1,e.async=!!t}parseMethod(e,t,r,n,s,i,o=!1){this.initFunction(e,r),e.generator=!!t;const a=n;return this.scope.enter(18|(o?64:0)|(s?32:0)),this.prodParam.enter(ue(r,e.generator)),this.parseFunctionParams(e,a),this.parseFunctionBodyAndFinish(e,i,!0),this.prodParam.exit(),this.scope.exit(),e}parseArrayLike(e,t,r,n){r&&this.expectPlugin("recordAndTuple");const s=this.state.inFSharpPipelineDirectBody;this.state.inFSharpPipelineDirectBody=!1;const i=this.startNode();return this.next(),i.elements=this.parseExprList(e,!r,n,i),this.state.inFSharpPipelineDirectBody=s,this.finishNode(i,r?"TupleExpression":"ArrayExpression")}parseArrowExpression(e,t,r,n){this.scope.enter(6);let s=ue(r,!1);!this.match(p.bracketL)&&this.prodParam.hasIn&&(s|=8),this.prodParam.enter(s),this.initFunction(e,r);const i=this.state.maybeInArrowParameters;return t&&(this.state.maybeInArrowParameters=!0,this.setArrowFunctionParameters(e,t,n)),this.state.maybeInArrowParameters=!1,this.parseFunctionBody(e,!0),this.prodParam.exit(),this.scope.exit(),this.state.maybeInArrowParameters=i,this.finishNode(e,"ArrowFunctionExpression")}setArrowFunctionParameters(e,t,r){e.params=this.toAssignableList(t,r,!1)}parseFunctionBodyAndFinish(e,t,r=!1){this.parseFunctionBody(e,!1,r),this.finishNode(e,t)}parseFunctionBody(e,t,r=!1){const n=t&&!this.match(p.braceL);if(this.expressionScope.enter(je()),n)e.body=this.parseMaybeAssign(),this.checkParams(e,!1,t,!1);else{const n=this.state.strict,s=this.state.labels;this.state.labels=[],this.prodParam.enter(4|this.prodParam.currentFlags()),e.body=this.parseBlock(!0,!1,(s=>{const i=!this.isSimpleParamList(e.params);if(s&&i){const t="method"!==e.kind&&"constructor"!==e.kind||!e.key?e.start:e.key.end;this.raise(t,x.IllegalLanguageModeDirective)}const o=!n&&this.state.strict;this.checkParams(e,!(this.state.strict||t||r||i),t,o),this.state.strict&&e.id&&this.checkLVal(e.id,"function name",65,void 0,void 0,o)})),this.prodParam.exit(),this.expressionScope.exit(),this.state.labels=s}}isSimpleParamList(e){for(let t=0,r=e.length;t10)&&function(e){return V.has(e)}(e)){if("yield"===e){if(this.prodParam.hasYield)return void this.raise(t,x.YieldBindingIdentifier)}else if("await"===e){if(this.prodParam.hasAwait)return void this.raise(t,x.AwaitBindingIdentifier);if(this.scope.inStaticBlock&&!this.scope.inNonArrowFunction)return void this.raise(t,x.AwaitBindingIdentifierInStaticBlock);this.expressionScope.recordAsyncArrowParametersError(t,x.AwaitBindingIdentifier)}else if("arguments"===e&&this.scope.inClassAndNotInNonArrowFunction)return void this.raise(t,x.ArgumentsInClass);r&&q(e)?this.raise(t,x.UnexpectedKeyword,e):(this.state.strict?n?$:F:R)(e,this.inModule)&&this.raise(t,x.UnexpectedReservedWord,e)}}isAwaitAllowed(){return!!this.prodParam.hasAwait||!(!this.options.allowAwaitOutsideFunction||this.scope.inFunction)}parseAwait(e,t){const r=this.startNodeAt(e,t);return this.expressionScope.recordParameterInitializerError(r.start,x.AwaitExpressionFormalParameter),this.eat(p.star)&&this.raise(r.start,x.ObsoleteAwaitStar),this.scope.inFunction||this.options.allowAwaitOutsideFunction||(this.isAmbiguousAwait()?this.ambiguousScriptDifferentAst=!0:this.sawUnambiguousESM=!0),this.state.soloAwait||(r.argument=this.parseMaybeUnary(null,!0)),this.finishNode(r,"AwaitExpression")}isAmbiguousAwait(){return this.hasPrecedingLineBreak()||this.match(p.plusMin)||this.match(p.parenL)||this.match(p.bracketL)||this.match(p.backQuote)||this.match(p.regexp)||this.match(p.slash)||this.hasPlugin("v8intrinsic")&&this.match(p.modulo)}parseYield(){const e=this.startNode();this.expressionScope.recordParameterInitializerError(e.start,x.YieldInParameter),this.next();let t=!1,r=null;if(!this.hasPrecedingLineBreak())switch(t=this.eat(p.star),this.state.type){case p.semi:case p.eof:case p.braceR:case p.parenR:case p.bracketR:case p.braceBarR:case p.colon:case p.comma:if(!t)break;default:r=this.parseMaybeAssign()}return e.delegate=t,e.argument=r,this.finishNode(e,"YieldExpression")}checkPipelineAtInfixOperator(e,t){"smart"===this.getPluginOption("pipelineOperator","proposal")&&"SequenceExpression"===e.type&&this.raise(t,x.PipelineHeadSequenceExpression)}parseSmartPipelineBody(e,t,r){return this.checkSmartPipelineBodyEarlyErrors(e,t),this.parseSmartPipelineBodyInStyle(e,t,r)}checkSmartPipelineBodyEarlyErrors(e,t){if(this.match(p.arrow))throw this.raise(this.state.start,x.PipelineBodyNoArrow);"SequenceExpression"===e.type&&this.raise(t,x.PipelineBodySequenceExpression)}parseSmartPipelineBodyInStyle(e,t,r){const n=this.startNodeAt(t,r),s=this.isSimpleReference(e);return s?n.callee=e:(this.topicReferenceWasUsedInCurrentTopicContext()||this.raise(t,x.PipelineTopicUnused),n.expression=e),this.finishNode(n,s?"PipelineBareFunction":"PipelineTopicExpression")}isSimpleReference(e){switch(e.type){case"MemberExpression":return!e.computed&&this.isSimpleReference(e.object);case"Identifier":return!0;default:return!1}}withTopicPermittingContext(e){const t=this.state.topicContext;this.state.topicContext={maxNumOfResolvableTopics:1,maxTopicIndex:null};try{return e()}finally{this.state.topicContext=t}}withTopicForbiddingContext(e){const t=this.state.topicContext;this.state.topicContext={maxNumOfResolvableTopics:0,maxTopicIndex:null};try{return e()}finally{this.state.topicContext=t}}withSoloAwaitPermittingContext(e){const t=this.state.soloAwait;this.state.soloAwait=!0;try{return e()}finally{this.state.soloAwait=t}}allowInAnd(e){const t=this.prodParam.currentFlags();if(8&~t){this.prodParam.enter(8|t);try{return e()}finally{this.prodParam.exit()}}return e()}disallowInAnd(e){const t=this.prodParam.currentFlags();if(8&t){this.prodParam.enter(-9&t);try{return e()}finally{this.prodParam.exit()}}return e()}registerTopicReference(){this.state.topicContext.maxTopicIndex=0}primaryTopicReferenceIsAllowedInCurrentTopicContext(){return this.state.topicContext.maxNumOfResolvableTopics>=1}topicReferenceWasUsedInCurrentTopicContext(){return null!=this.state.topicContext.maxTopicIndex&&this.state.topicContext.maxTopicIndex>=0}parseFSharpPipelineBody(e){const t=this.state.start,r=this.state.startLoc;this.state.potentialArrowAt=this.state.start;const n=this.state.inFSharpPipelineDirectBody;this.state.inFSharpPipelineDirectBody=!0;const s=this.parseExprOp(this.parseMaybeUnary(),t,r,e);return this.state.inFSharpPipelineDirectBody=n,s}parseModuleExpression(){this.expectPlugin("moduleBlocks");const e=this.startNode();this.next(),this.eat(p.braceL);const t=this.initializeScopes(!0);this.enterInitialScopes();const r=this.startNode();try{e.body=this.parseProgram(r,p.braceR,"module")}finally{t()}return this.eat(p.braceR),this.finishNode(e,"ModuleExpression")}}{parseTopLevel(e,t){return e.program=this.parseProgram(t),e.comments=this.state.comments,this.options.tokens&&(e.tokens=function(e){for(let t=0;t0)for(const[e]of Array.from(this.scope.undefinedExports)){const t=this.scope.undefinedExports.get(e);this.raise(t,x.ModuleExportUndefined,e)}return this.finishNode(e,"Program")}stmtToDirective(e){const t=e.expression,r=this.startNodeAt(t.start,t.loc.start),n=this.startNodeAt(e.start,e.loc.start),s=this.input.slice(t.start,t.end),i=r.value=s.slice(1,-1);return this.addExtra(r,"raw",s),this.addExtra(r,"rawValue",i),n.value=this.finishNodeAt(r,"DirectiveLiteral",t.end,t.loc.end),this.finishNodeAt(n,"Directive",e.end,e.loc.end)}parseInterpreterDirective(){if(!this.match(p.interpreterDirective))return null;const e=this.startNode();return e.value=this.state.value,this.next(),this.finishNode(e,"InterpreterDirective")}isLet(e){return!!this.isContextual("let")&&this.isLetKeyword(e)}isLetKeyword(e){const t=this.nextTokenStart(),r=this.codePointAtPos(t);if(92===r||91===r)return!0;if(e)return!1;if(123===r)return!0;if(j(r)){Ue.lastIndex=t;const e=Ue.exec(this.input);if(null!==e){const r=this.codePointAtPos(t+e[0].length);if(!D(r)&&92!==r)return!1}return!0}return!1}parseStatement(e,t){return this.match(p.at)&&this.parseDecorators(!0),this.parseStatementContent(e,t)}parseStatementContent(e,t){let r=this.state.type;const n=this.startNode();let s;switch(this.isLet(e)&&(r=p._var,s="let"),r){case p._break:case p._continue:return this.parseBreakContinueStatement(n,r.keyword);case p._debugger:return this.parseDebuggerStatement(n);case p._do:return this.parseDoStatement(n);case p._for:return this.parseForStatement(n);case p._function:if(46===this.lookaheadCharCode())break;return e&&(this.state.strict?this.raise(this.state.start,x.StrictFunction):"if"!==e&&"label"!==e&&this.raise(this.state.start,x.SloppyFunction)),this.parseFunctionStatement(n,!1,!e);case p._class:return e&&this.unexpected(),this.parseClass(n,!0);case p._if:return this.parseIfStatement(n);case p._return:return this.parseReturnStatement(n);case p._switch:return this.parseSwitchStatement(n);case p._throw:return this.parseThrowStatement(n);case p._try:return this.parseTryStatement(n);case p._const:case p._var:return s=s||this.state.value,e&&"var"!==s&&this.raise(this.state.start,x.UnexpectedLexicalDeclaration),this.parseVarStatement(n,s);case p._while:return this.parseWhileStatement(n);case p._with:return this.parseWithStatement(n);case p.braceL:return this.parseBlock();case p.semi:return this.parseEmptyStatement(n);case p._import:{const e=this.lookaheadCharCode();if(40===e||46===e)break}case p._export:{let e;return this.options.allowImportExportEverywhere||t||this.raise(this.state.start,x.UnexpectedImportExport),this.next(),r===p._import?(e=this.parseImport(n),"ImportDeclaration"!==e.type||e.importKind&&"value"!==e.importKind||(this.sawUnambiguousESM=!0)):(e=this.parseExport(n),("ExportNamedDeclaration"!==e.type||e.exportKind&&"value"!==e.exportKind)&&("ExportAllDeclaration"!==e.type||e.exportKind&&"value"!==e.exportKind)&&"ExportDefaultDeclaration"!==e.type||(this.sawUnambiguousESM=!0)),this.assertModuleNodeAllowed(n),e}default:if(this.isAsyncFunction())return e&&this.raise(this.state.start,x.AsyncFunctionInSingleStatementContext),this.next(),this.parseFunctionStatement(n,!0,!e)}const i=this.state.value,o=this.parseExpression();return r===p.name&&"Identifier"===o.type&&this.eat(p.colon)?this.parseLabeledStatement(n,i,o,e):this.parseExpressionStatement(n,o)}assertModuleNodeAllowed(e){this.options.allowImportExportEverywhere||this.inModule||this.raise(e.start,S.ImportOutsideModule)}takeDecorators(e){const t=this.state.decoratorStack[this.state.decoratorStack.length-1];t.length&&(e.decorators=t,this.resetStartLocationFromNode(e,t[0]),this.state.decoratorStack[this.state.decoratorStack.length-1]=[])}canHaveLeadingDecorator(){return this.match(p._class)}parseDecorators(e){const t=this.state.decoratorStack[this.state.decoratorStack.length-1];for(;this.match(p.at);){const e=this.parseDecorator();t.push(e)}if(this.match(p._export))e||this.unexpected(),this.hasPlugin("decorators")&&!this.getPluginOption("decorators","decoratorsBeforeExport")&&this.raise(this.state.start,x.DecoratorExportClass);else if(!this.canHaveLeadingDecorator())throw this.raise(this.state.start,x.UnexpectedLeadingDecorator)}parseDecorator(){this.expectOnePlugin(["decorators-legacy","decorators"]);const e=this.startNode();if(this.next(),this.hasPlugin("decorators")){this.state.decoratorStack.push([]);const t=this.state.start,r=this.state.startLoc;let n;if(this.eat(p.parenL))n=this.parseExpression(),this.expect(p.parenR);else for(n=this.parseIdentifier(!1);this.eat(p.dot);){const e=this.startNodeAt(t,r);e.object=n,e.property=this.parseIdentifier(!0),e.computed=!1,n=this.finishNode(e,"MemberExpression")}e.expression=this.parseMaybeDecoratorArguments(n),this.state.decoratorStack.pop()}else e.expression=this.parseExprSubscripts();return this.finishNode(e,"Decorator")}parseMaybeDecoratorArguments(e){if(this.eat(p.parenL)){const t=this.startNodeAtNode(e);return t.callee=e,t.arguments=this.parseCallExpressionArguments(p.parenR,!1),this.toReferencedList(t.arguments),this.finishNode(t,"CallExpression")}return e}parseBreakContinueStatement(e,t){const r="break"===t;return this.next(),this.isLineTerminator()?e.label=null:(e.label=this.parseIdentifier(),this.semicolon()),this.verifyBreakContinue(e,t),this.finishNode(e,r?"BreakStatement":"ContinueStatement")}verifyBreakContinue(e,t){const r="break"===t;let n;for(n=0;nthis.parseStatement("do"))),this.state.labels.pop(),this.expect(p._while),e.test=this.parseHeaderExpression(),this.eat(p.semi),this.finishNode(e,"DoWhileStatement")}parseForStatement(e){this.next(),this.state.labels.push(Be);let t=-1;if(this.isAwaitAllowed()&&this.eatContextual("await")&&(t=this.state.lastTokStart),this.scope.enter(0),this.expect(p.parenL),this.match(p.semi))return t>-1&&this.unexpected(t),this.parseFor(e,null);const r=this.isContextual("let"),n=r&&this.isLetKeyword();if(this.match(p._var)||this.match(p._const)||n){const r=this.startNode(),s=n?"let":this.state.value;return this.next(),this.parseVar(r,!0,s),this.finishNode(r,"VariableDeclaration"),(this.match(p._in)||this.isContextual("of"))&&1===r.declarations.length?this.parseForIn(e,r,t):(t>-1&&this.unexpected(t),this.parseFor(e,r))}const s=this.match(p.name)&&!this.state.containsEsc,i=new De,o=this.parseExpression(!0,i),a=this.isContextual("of");if(a&&(r?this.raise(o.start,x.ForOfLet):-1===t&&s&&"Identifier"===o.type&&"async"===o.name&&this.raise(o.start,x.ForOfAsync)),a||this.match(p._in)){this.toAssignable(o,!0);const r=a?"for-of statement":"for-in statement";return this.checkLVal(o,r),this.parseForIn(e,o,t)}return this.checkExpressionErrors(i,!0),t>-1&&this.unexpected(t),this.parseFor(e,o)}parseFunctionStatement(e,t,r){return this.next(),this.parseFunction(e,1|(r?0:2),t)}parseIfStatement(e){return this.next(),e.test=this.parseHeaderExpression(),e.consequent=this.parseStatement("if"),e.alternate=this.eat(p._else)?this.parseStatement("if"):null,this.finishNode(e,"IfStatement")}parseReturnStatement(e){return this.prodParam.hasReturn||this.options.allowReturnOutsideFunction||this.raise(this.state.start,x.IllegalReturn),this.next(),this.isLineTerminator()?e.argument=null:(e.argument=this.parseExpression(),this.semicolon()),this.finishNode(e,"ReturnStatement")}parseSwitchStatement(e){this.next(),e.discriminant=this.parseHeaderExpression();const t=e.cases=[];let r,n;for(this.expect(p.braceL),this.state.labels.push(Re),this.scope.enter(0);!this.match(p.braceR);)if(this.match(p._case)||this.match(p._default)){const e=this.match(p._case);r&&this.finishNode(r,"SwitchCase"),t.push(r=this.startNode()),r.consequent=[],this.next(),e?r.test=this.parseExpression():(n&&this.raise(this.state.lastTokStart,x.MultipleDefaultsInSwitch),n=!0,r.test=null),this.expect(p.colon)}else r?r.consequent.push(this.parseStatement(null)):this.unexpected();return this.scope.exit(),r&&this.finishNode(r,"SwitchCase"),this.next(),this.state.labels.pop(),this.finishNode(e,"SwitchStatement")}parseThrowStatement(e){return this.next(),this.hasPrecedingLineBreak()&&this.raise(this.state.lastTokEnd,x.NewlineAfterThrow),e.argument=this.parseExpression(),this.semicolon(),this.finishNode(e,"ThrowStatement")}parseCatchClauseParam(){const e=this.parseBindingAtom(),t="Identifier"===e.type;return this.scope.enter(t?8:0),this.checkLVal(e,"catch clause",9),e}parseTryStatement(e){if(this.next(),e.block=this.parseBlock(),e.handler=null,this.match(p._catch)){const t=this.startNode();this.next(),this.match(p.parenL)?(this.expect(p.parenL),t.param=this.parseCatchClauseParam(),this.expect(p.parenR)):(t.param=null,this.scope.enter(0)),t.body=this.withTopicForbiddingContext((()=>this.parseBlock(!1,!1))),this.scope.exit(),e.handler=this.finishNode(t,"CatchClause")}return e.finalizer=this.eat(p._finally)?this.parseBlock():null,e.handler||e.finalizer||this.raise(e.start,x.NoCatchOrFinally),this.finishNode(e,"TryStatement")}parseVarStatement(e,t){return this.next(),this.parseVar(e,!1,t),this.semicolon(),this.finishNode(e,"VariableDeclaration")}parseWhileStatement(e){return this.next(),e.test=this.parseHeaderExpression(),this.state.labels.push(Be),e.body=this.withTopicForbiddingContext((()=>this.parseStatement("while"))),this.state.labels.pop(),this.finishNode(e,"WhileStatement")}parseWithStatement(e){return this.state.strict&&this.raise(this.state.start,x.StrictWith),this.next(),e.object=this.parseHeaderExpression(),e.body=this.withTopicForbiddingContext((()=>this.parseStatement("with"))),this.finishNode(e,"WithStatement")}parseEmptyStatement(e){return this.next(),this.finishNode(e,"EmptyStatement")}parseLabeledStatement(e,t,r,n){for(const e of this.state.labels)e.name===t&&this.raise(r.start,x.LabelRedeclaration,t);const s=this.state.type.isLoop?"loop":this.match(p._switch)?"switch":null;for(let t=this.state.labels.length-1;t>=0;t--){const r=this.state.labels[t];if(r.statementStart!==e.start)break;r.statementStart=this.state.start,r.kind=s}return this.state.labels.push({name:t,kind:s,statementStart:this.state.start}),e.body=this.parseStatement(n?-1===n.indexOf("label")?n+"label":n:"label"),this.state.labels.pop(),e.label=r,this.finishNode(e,"LabeledStatement")}parseExpressionStatement(e,t){return e.expression=t,this.semicolon(),this.finishNode(e,"ExpressionStatement")}parseBlock(e=!1,t=!0,r){const n=this.startNode();return e&&this.state.strictErrors.clear(),this.expect(p.braceL),t&&this.scope.enter(0),this.parseBlockBody(n,e,!1,p.braceR,r),t&&this.scope.exit(),this.finishNode(n,"BlockStatement")}isValidDirective(e){return"ExpressionStatement"===e.type&&"StringLiteral"===e.expression.type&&!e.expression.extra.parenthesized}parseBlockBody(e,t,r,n,s){const i=e.body=[],o=e.directives=[];this.parseBlockOrModuleBlockBody(i,t?o:void 0,r,n,s)}parseBlockOrModuleBlockBody(e,t,r,n,s){const i=this.state.strict;let o=!1,a=!1;for(;!this.match(n);){const n=this.parseStatement(null,r);if(t&&!a){if(this.isValidDirective(n)){const e=this.stmtToDirective(n);t.push(e),o||"use strict"!==e.value.value||(o=!0,this.setStrict(!0));continue}a=!0,this.state.strictErrors.clear()}e.push(n)}s&&s.call(this,o),i||this.setStrict(!1),this.next()}parseFor(e,t){return e.init=t,this.semicolon(!1),e.test=this.match(p.semi)?null:this.parseExpression(),this.semicolon(!1),e.update=this.match(p.parenR)?null:this.parseExpression(),this.expect(p.parenR),e.body=this.withTopicForbiddingContext((()=>this.parseStatement("for"))),this.scope.exit(),this.state.labels.pop(),this.finishNode(e,"ForStatement")}parseForIn(e,t,r){const n=this.match(p._in);return this.next(),n?r>-1&&this.unexpected(r):e.await=r>-1,"VariableDeclaration"!==t.type||null==t.declarations[0].init||n&&!this.state.strict&&"var"===t.kind&&"Identifier"===t.declarations[0].id.type?"AssignmentPattern"===t.type&&this.raise(t.start,x.InvalidLhs,"for-loop"):this.raise(t.start,x.ForInOfLoopInitializer,n?"for-in":"for-of"),e.left=t,e.right=n?this.parseExpression():this.parseMaybeAssignAllowIn(),this.expect(p.parenR),e.body=this.withTopicForbiddingContext((()=>this.parseStatement("for"))),this.scope.exit(),this.state.labels.pop(),this.finishNode(e,n?"ForInStatement":"ForOfStatement")}parseVar(e,t,r){const n=e.declarations=[],s=this.hasPlugin("typescript");for(e.kind=r;;){const e=this.startNode();if(this.parseVarId(e,r),this.eat(p.eq)?e.init=t?this.parseMaybeAssignDisallowIn():this.parseMaybeAssignAllowIn():("const"!==r||this.match(p._in)||this.isContextual("of")?"Identifier"===e.id.type||t&&(this.match(p._in)||this.isContextual("of"))||this.raise(this.state.lastTokEnd,x.DeclarationMissingInitializer,"Complex binding patterns"):s||this.raise(this.state.lastTokEnd,x.DeclarationMissingInitializer,"Const declarations"),e.init=null),n.push(this.finishNode(e,"VariableDeclarator")),!this.eat(p.comma))break}return e}parseVarId(e,t){e.id=this.parseBindingAtom(),this.checkLVal(e.id,"variable declaration","var"===t?5:9,void 0,"var"!==t)}parseFunction(e,t=0,r=!1){const n=1&t,s=2&t,i=!(!n||4&t);this.initFunction(e,r),this.match(p.star)&&s&&this.raise(this.state.start,x.GeneratorInSingleStatementContext),e.generator=this.eat(p.star),n&&(e.id=this.parseFunctionId(i));const o=this.state.maybeInArrowParameters;return this.state.maybeInArrowParameters=!1,this.scope.enter(2),this.prodParam.enter(ue(r,e.generator)),n||(e.id=this.parseFunctionId()),this.parseFunctionParams(e,!1),this.withTopicForbiddingContext((()=>{this.parseFunctionBodyAndFinish(e,n?"FunctionDeclaration":"FunctionExpression")})),this.prodParam.exit(),this.scope.exit(),n&&!s&&this.registerFunctionStatementId(e),this.state.maybeInArrowParameters=o,e}parseFunctionId(e){return e||this.match(p.name)?this.parseIdentifier():null}parseFunctionParams(e,t){this.expect(p.parenL),this.expressionScope.enter(new ke(3)),e.params=this.parseBindingList(p.parenR,41,!1,t),this.expressionScope.exit()}registerFunctionStatementId(e){e.id&&this.scope.declareName(e.id.name,this.state.strict||e.generator||e.async?this.scope.treatFunctionsAsVar?5:9:17,e.id.start)}parseClass(e,t,r){this.next(),this.takeDecorators(e);const n=this.state.strict;return this.state.strict=!0,this.parseClassId(e,t,r),this.parseClassSuper(e),e.body=this.parseClassBody(!!e.superClass,n),this.finishNode(e,t?"ClassDeclaration":"ClassExpression")}isClassProperty(){return this.match(p.eq)||this.match(p.semi)||this.match(p.braceR)}isClassMethod(){return this.match(p.parenL)}isNonstaticConstructor(e){return!(e.computed||e.static||"constructor"!==e.key.name&&"constructor"!==e.key.value)}parseClassBody(e,t){this.classScope.enter();const r={hadConstructor:!1,hadSuperClass:e};let n=[];const s=this.startNode();if(s.body=[],this.expect(p.braceL),this.withTopicForbiddingContext((()=>{for(;!this.match(p.braceR);){if(this.eat(p.semi)){if(n.length>0)throw this.raise(this.state.lastTokEnd,x.DecoratorSemicolon);continue}if(this.match(p.at)){n.push(this.parseDecorator());continue}const e=this.startNode();n.length&&(e.decorators=n,this.resetStartLocationFromNode(e,n[0]),n=[]),this.parseClassMember(s,e,r),"constructor"===e.kind&&e.decorators&&e.decorators.length>0&&this.raise(e.start,x.DecoratorConstructor)}})),this.state.strict=t,this.next(),n.length)throw this.raise(this.state.start,x.TrailingDecorator);return this.classScope.exit(),this.finishNode(s,"ClassBody")}parseClassMemberFromModifier(e,t){const r=this.parseIdentifier(!0);if(this.isClassMethod()){const n=t;return n.kind="method",n.computed=!1,n.key=r,n.static=!1,this.pushClassMethod(e,n,!1,!1,!1,!1),!0}if(this.isClassProperty()){const n=t;return n.computed=!1,n.key=r,n.static=!1,e.body.push(this.parseClassProperty(n)),!0}return!1}parseClassMember(e,t,r){const n=this.isContextual("static");if(n){if(this.parseClassMemberFromModifier(e,t))return;if(this.eat(p.braceL))return void this.parseClassStaticBlock(e,t)}this.parseClassMemberWithIsStatic(e,t,r,n)}parseClassMemberWithIsStatic(e,t,r,n){const s=t,i=t,o=t,a=t,l=s,c=s;if(t.static=n,this.eat(p.star)){l.kind="method";const t=this.match(p.privateName);return this.parseClassElementName(l),t?void this.pushClassPrivateMethod(e,i,!0,!1):(this.isNonstaticConstructor(s)&&this.raise(s.key.start,x.ConstructorIsGenerator),void this.pushClassMethod(e,s,!0,!1,!1,!1))}const u=this.state.containsEsc,f=this.match(p.privateName),d=this.parseClassElementName(t),h="Identifier"===d.type,m=this.state.start;if(this.parsePostMemberNameModifiers(c),this.isClassMethod()){if(l.kind="method",f)return void this.pushClassPrivateMethod(e,i,!1,!1);const n=this.isNonstaticConstructor(s);let o=!1;n&&(s.kind="constructor",r.hadConstructor&&!this.hasPlugin("typescript")&&this.raise(d.start,x.DuplicateConstructor),n&&this.hasPlugin("typescript")&&t.override&&this.raise(d.start,x.OverrideOnConstructor),r.hadConstructor=!0,o=r.hadSuperClass),this.pushClassMethod(e,s,!1,!1,n,o)}else if(this.isClassProperty())f?this.pushClassPrivateProperty(e,a):this.pushClassProperty(e,o);else if(!h||"async"!==d.name||u||this.isLineTerminator())if(!h||"get"!==d.name&&"set"!==d.name||u||this.match(p.star)&&this.isLineTerminator())this.isLineTerminator()?f?this.pushClassPrivateProperty(e,a):this.pushClassProperty(e,o):this.unexpected();else{l.kind=d.name;const t=this.match(p.privateName);this.parseClassElementName(s),t?this.pushClassPrivateMethod(e,i,!1,!1):(this.isNonstaticConstructor(s)&&this.raise(s.key.start,x.ConstructorIsAccessor),this.pushClassMethod(e,s,!1,!1,!1,!1)),this.checkGetterSetterParams(s)}else{const t=this.eat(p.star);c.optional&&this.unexpected(m),l.kind="method";const r=this.match(p.privateName);this.parseClassElementName(l),this.parsePostMemberNameModifiers(c),r?this.pushClassPrivateMethod(e,i,t,!0):(this.isNonstaticConstructor(s)&&this.raise(s.key.start,x.ConstructorIsAsync),this.pushClassMethod(e,s,t,!0,!1,!1))}}parseClassElementName(e){const{type:t,value:r,start:n}=this.state;return t!==p.name&&t!==p.string||!e.static||"prototype"!==r||this.raise(n,x.StaticPrototype),t===p.privateName&&"constructor"===r&&this.raise(n,x.ConstructorClassPrivateField),this.parsePropertyName(e,!0)}parseClassStaticBlock(e,t){var r;this.expectPlugin("classStaticBlock",t.start),this.scope.enter(208);const n=this.state.labels;this.state.labels=[],this.prodParam.enter(0);const s=t.body=[];this.parseBlockOrModuleBlockBody(s,void 0,!1,p.braceR),this.prodParam.exit(),this.scope.exit(),this.state.labels=n,e.body.push(this.finishNode(t,"StaticBlock")),null!=(r=t.decorators)&&r.length&&this.raise(t.start,x.DecoratorStaticBlock)}pushClassProperty(e,t){t.computed||"constructor"!==t.key.name&&"constructor"!==t.key.value||this.raise(t.key.start,x.ConstructorClassField),e.body.push(this.parseClassProperty(t))}pushClassPrivateProperty(e,t){const r=this.parseClassPrivateProperty(t);e.body.push(r),this.classScope.declarePrivateName(this.getPrivateNameSV(r.key),0,r.key.start)}pushClassMethod(e,t,r,n,s,i){e.body.push(this.parseMethod(t,r,n,s,i,"ClassMethod",!0))}pushClassPrivateMethod(e,t,r,n){const s=this.parseMethod(t,r,n,!1,!1,"ClassPrivateMethod",!0);e.body.push(s);const i="get"===s.kind?s.static?6:2:"set"===s.kind?s.static?5:1:0;this.classScope.declarePrivateName(this.getPrivateNameSV(s.key),i,s.key.start)}parsePostMemberNameModifiers(e){}parseClassPrivateProperty(e){return this.parseInitializer(e),this.semicolon(),this.finishNode(e,"ClassPrivateProperty")}parseClassProperty(e){return this.parseInitializer(e),this.semicolon(),this.finishNode(e,"ClassProperty")}parseInitializer(e){this.scope.enter(80),this.expressionScope.enter(je()),this.prodParam.enter(0),e.value=this.eat(p.eq)?this.parseMaybeAssignAllowIn():null,this.expressionScope.exit(),this.prodParam.exit(),this.scope.exit()}parseClassId(e,t,r,n=139){this.match(p.name)?(e.id=this.parseIdentifier(),t&&this.checkLVal(e.id,"class name",n)):r||!t?e.id=null:this.unexpected(null,x.MissingClassName)}parseClassSuper(e){e.superClass=this.eat(p._extends)?this.parseExprSubscripts():null}parseExport(e){const t=this.maybeParseExportDefaultSpecifier(e),r=!t||this.eat(p.comma),n=r&&this.eatExportStar(e),s=n&&this.maybeParseExportNamespaceSpecifier(e),i=r&&(!s||this.eat(p.comma)),o=t||n;if(n&&!s)return t&&this.unexpected(),this.parseExportFrom(e,!0),this.finishNode(e,"ExportAllDeclaration");const a=this.maybeParseExportNamedSpecifiers(e);if(t&&r&&!n&&!a||s&&i&&!a)throw this.unexpected(null,p.braceL);let l;if(o||a?(l=!1,this.parseExportFrom(e,o)):l=this.maybeParseExportDeclaration(e),o||a||l)return this.checkExport(e,!0,!1,!!e.source),this.finishNode(e,"ExportNamedDeclaration");if(this.eat(p._default))return e.declaration=this.parseExportDefaultExpression(),this.checkExport(e,!0,!0),this.finishNode(e,"ExportDefaultDeclaration");throw this.unexpected(null,p.braceL)}eatExportStar(e){return this.eat(p.star)}maybeParseExportDefaultSpecifier(e){if(this.isExportDefaultSpecifier()){this.expectPlugin("exportDefaultFrom");const t=this.startNode();return t.exported=this.parseIdentifier(!0),e.specifiers=[this.finishNode(t,"ExportDefaultSpecifier")],!0}return!1}maybeParseExportNamespaceSpecifier(e){if(this.isContextual("as")){e.specifiers||(e.specifiers=[]);const t=this.startNodeAt(this.state.lastTokStart,this.state.lastTokStartLoc);return this.next(),t.exported=this.parseModuleExportName(),e.specifiers.push(this.finishNode(t,"ExportNamespaceSpecifier")),!0}return!1}maybeParseExportNamedSpecifiers(e){return!!this.match(p.braceL)&&(e.specifiers||(e.specifiers=[]),e.specifiers.push(...this.parseExportSpecifiers()),e.source=null,e.declaration=null,!0)}maybeParseExportDeclaration(e){return!!this.shouldParseExportDeclaration()&&(e.specifiers=[],e.source=null,e.declaration=this.parseExportDeclaration(e),!0)}isAsyncFunction(){if(!this.isContextual("async"))return!1;const e=this.nextTokenStart();return!f.test(this.input.slice(this.state.pos,e))&&this.isUnparsedContextual(e,"function")}parseExportDefaultExpression(){const e=this.startNode(),t=this.isAsyncFunction();if(this.match(p._function)||t)return this.next(),t&&this.next(),this.parseFunction(e,5,t);if(this.match(p._class))return this.parseClass(e,!0,!0);if(this.match(p.at))return this.hasPlugin("decorators")&&this.getPluginOption("decorators","decoratorsBeforeExport")&&this.raise(this.state.start,x.DecoratorBeforeExport),this.parseDecorators(!1),this.parseClass(e,!0,!0);if(this.match(p._const)||this.match(p._var)||this.isLet())throw this.raise(this.state.start,x.UnsupportedDefaultExport);{const e=this.parseMaybeAssignAllowIn();return this.semicolon(),e}}parseExportDeclaration(e){return this.parseStatement(null)}isExportDefaultSpecifier(){if(this.match(p.name)){const e=this.state.value;if("async"===e&&!this.state.containsEsc||"let"===e)return!1;if(("type"===e||"interface"===e)&&!this.state.containsEsc){const e=this.lookahead();if(e.type===p.name&&"from"!==e.value||e.type===p.braceL)return this.expectOnePlugin(["flow","typescript"]),!1}}else if(!this.match(p._default))return!1;const e=this.nextTokenStart(),t=this.isUnparsedContextual(e,"from");if(44===this.input.charCodeAt(e)||this.match(p.name)&&t)return!0;if(this.match(p._default)&&t){const t=this.input.charCodeAt(this.nextTokenStartSince(e+4));return 34===t||39===t}return!1}parseExportFrom(e,t){if(this.eatContextual("from")){e.source=this.parseImportSource(),this.checkExport(e);const t=this.maybeParseImportAssertions();t&&(e.assertions=t)}else t?this.unexpected():e.source=null;this.semicolon()}shouldParseExportDeclaration(){if(this.match(p.at)&&(this.expectOnePlugin(["decorators","decorators-legacy"]),this.hasPlugin("decorators"))){if(!this.getPluginOption("decorators","decoratorsBeforeExport"))return!0;this.unexpected(this.state.start,x.DecoratorBeforeExport)}return"var"===this.state.type.keyword||"const"===this.state.type.keyword||"function"===this.state.type.keyword||"class"===this.state.type.keyword||this.isLet()||this.isAsyncFunction()}checkExport(e,t,r,n){if(t)if(r){if(this.checkDuplicateExports(e,"default"),this.hasPlugin("exportDefaultFrom")){var s;const t=e.declaration;"Identifier"!==t.type||"from"!==t.name||t.end-t.start!=4||null!=(s=t.extra)&&s.parenthesized||this.raise(t.start,x.ExportDefaultFromAsIdentifier)}}else if(e.specifiers&&e.specifiers.length)for(const t of e.specifiers){const{exported:e}=t,r="Identifier"===e.type?e.name:e.value;if(this.checkDuplicateExports(t,r),!n&&t.local){const{local:e}=t;"Identifier"!==e.type?this.raise(t.start,x.ExportBindingIsString,e.value,r):(this.checkReservedWord(e.name,e.start,!0,!1),this.scope.checkLocalExport(e))}}else if(e.declaration)if("FunctionDeclaration"===e.declaration.type||"ClassDeclaration"===e.declaration.type){const t=e.declaration.id;if(!t)throw new Error("Assertion failure");this.checkDuplicateExports(e,t.name)}else if("VariableDeclaration"===e.declaration.type)for(const t of e.declaration.declarations)this.checkDeclaration(t.id);if(this.state.decoratorStack[this.state.decoratorStack.length-1].length)throw this.raise(e.start,x.UnsupportedDecoratorExport)}checkDeclaration(e){if("Identifier"===e.type)this.checkDuplicateExports(e,e.name);else if("ObjectPattern"===e.type)for(const t of e.properties)this.checkDeclaration(t);else if("ArrayPattern"===e.type)for(const t of e.elements)t&&this.checkDeclaration(t);else"ObjectProperty"===e.type?this.checkDeclaration(e.value):"RestElement"===e.type?this.checkDeclaration(e.argument):"AssignmentPattern"===e.type&&this.checkDeclaration(e.left)}checkDuplicateExports(e,t){this.exportedIdentifiers.has(t)&&this.raise(e.start,"default"===t?x.DuplicateDefaultExport:x.DuplicateExport,t),this.exportedIdentifiers.add(t)}parseExportSpecifiers(){const e=[];let t=!0;for(this.expect(p.braceL);!this.eat(p.braceR);){if(t)t=!1;else if(this.expect(p.comma),this.eat(p.braceR))break;const r=this.startNode();r.local=this.parseModuleExportName(),r.exported=this.eatContextual("as")?this.parseModuleExportName():r.local.__clone(),e.push(this.finishNode(r,"ExportSpecifier"))}return e}parseModuleExportName(){if(this.match(p.string)){const e=this.parseStringLiteral(this.state.value),t=e.value.match(Fe);return t&&this.raise(e.start,x.ModuleExportNameHasLoneSurrogate,t[0].charCodeAt(0).toString(16)),e}return this.parseIdentifier(!0)}parseImport(e){if(e.specifiers=[],!this.match(p.string)){const t=!this.maybeParseDefaultImportSpecifier(e)||this.eat(p.comma),r=t&&this.maybeParseStarImportSpecifier(e);t&&!r&&this.parseNamedImportSpecifiers(e),this.expectContextual("from")}e.source=this.parseImportSource();const t=this.maybeParseImportAssertions();if(t)e.assertions=t;else{const t=this.maybeParseModuleAttributes();t&&(e.attributes=t)}return this.semicolon(),this.finishNode(e,"ImportDeclaration")}parseImportSource(){return this.match(p.string)||this.unexpected(),this.parseExprAtom()}shouldParseDefaultImport(e){return this.match(p.name)}parseImportSpecifierLocal(e,t,r,n){t.local=this.parseIdentifier(),this.checkLVal(t.local,n,9),e.specifiers.push(this.finishNode(t,r))}parseAssertEntries(){const e=[],t=new Set;do{if(this.match(p.braceR))break;const r=this.startNode(),n=this.state.value;if(t.has(n)&&this.raise(this.state.start,x.ModuleAttributesWithDuplicateKeys,n),t.add(n),this.match(p.string)?r.key=this.parseStringLiteral(n):r.key=this.parseIdentifier(!0),this.expect(p.colon),!this.match(p.string))throw this.unexpected(this.state.start,x.ModuleAttributeInvalidValue);r.value=this.parseStringLiteral(this.state.value),this.finishNode(r,"ImportAttribute"),e.push(r)}while(this.eat(p.comma));return e}maybeParseModuleAttributes(){if(!this.match(p._with)||this.hasPrecedingLineBreak())return this.hasPlugin("moduleAttributes")?[]:null;this.expectPlugin("moduleAttributes"),this.next();const e=[],t=new Set;do{const r=this.startNode();if(r.key=this.parseIdentifier(!0),"type"!==r.key.name&&this.raise(r.key.start,x.ModuleAttributeDifferentFromType,r.key.name),t.has(r.key.name)&&this.raise(r.key.start,x.ModuleAttributesWithDuplicateKeys,r.key.name),t.add(r.key.name),this.expect(p.colon),!this.match(p.string))throw this.unexpected(this.state.start,x.ModuleAttributeInvalidValue);r.value=this.parseStringLiteral(this.state.value),this.finishNode(r,"ImportAttribute"),e.push(r)}while(this.eat(p.comma));return e}maybeParseImportAssertions(){if(!this.isContextual("assert")||this.hasPrecedingLineBreak())return this.hasPlugin("importAssertions")?[]:null;this.expectPlugin("importAssertions"),this.next(),this.eat(p.braceL);const e=this.parseAssertEntries();return this.eat(p.braceR),e}maybeParseDefaultImportSpecifier(e){return!!this.shouldParseDefaultImport(e)&&(this.parseImportSpecifierLocal(e,this.startNode(),"ImportDefaultSpecifier","default import specifier"),!0)}maybeParseStarImportSpecifier(e){if(this.match(p.star)){const t=this.startNode();return this.next(),this.expectContextual("as"),this.parseImportSpecifierLocal(e,t,"ImportNamespaceSpecifier","import namespace specifier"),!0}return!1}parseNamedImportSpecifiers(e){let t=!0;for(this.expect(p.braceL);!this.eat(p.braceR);){if(t)t=!1;else{if(this.eat(p.colon))throw this.raise(this.state.start,x.DestructureNamedImport);if(this.expect(p.comma),this.eat(p.braceR))break}this.parseImportSpecifier(e)}}parseImportSpecifier(e){const t=this.startNode(),r=this.match(p.string);if(t.imported=this.parseModuleExportName(),this.eatContextual("as"))t.local=this.parseIdentifier();else{const{imported:e}=t;if(r)throw this.raise(t.start,x.ImportBindingIsString,e.value);this.checkReservedWord(e.name,t.start,!0,!0),t.local=e.__clone()}this.checkLVal(t.local,"import specifier",9),e.specifiers.push(this.finishNode(t,"ImportSpecifier"))}isThisParam(e){return"Identifier"===e.type&&"this"===e.name}}{constructor(e,t){super(e=function(e){const t={};for(const r of Object.keys(Se))t[r]=e&&null!=e[r]?e[r]:Se[r];return t}(e),t),this.options=e,this.initializeScopes(),this.plugins=function(e){const t=new Map;for(const r of e){const[e,n]=Array.isArray(r)?r:[r,{}];t.has(e)||t.set(e,n||{})}return t}(this.options.plugins),this.filename=e.sourceFilename}getScopeHandler(){return K}parse(){this.enterInitialScopes();const e=this.startNode(),t=this.startNode();return this.nextToken(),e.errors=null,this.parseTopLevel(e,t),e.errors=this.state.errors,e}}function qe(e,t){let r=$e;return null!=e&&e.plugins&&(function(e){if(ye(e,"decorators")){if(ye(e,"decorators-legacy"))throw new Error("Cannot use the decorators and decorators-legacy plugin together");const t=ge(e,"decorators","decoratorsBeforeExport");if(null==t)throw new Error("The 'decorators' plugin requires a 'decoratorsBeforeExport' option, whose value must be a boolean. If you are migrating from Babylon/Babel 6 or want to use the old decorators proposal, you should use the 'decorators-legacy' plugin instead of 'decorators'.");if("boolean"!=typeof t)throw new Error("'decoratorsBeforeExport' must be a boolean.")}if(ye(e,"flow")&&ye(e,"typescript"))throw new Error("Cannot combine flow and typescript plugins.");if(ye(e,"placeholders")&&ye(e,"v8intrinsic"))throw new Error("Cannot combine placeholders and v8intrinsic plugins.");if(ye(e,"pipelineOperator")&&!be.includes(ge(e,"pipelineOperator","proposal")))throw new Error("'pipelineOperator' requires 'proposal' option whose value should be one of: "+be.map((e=>`'${e}'`)).join(", "));if(ye(e,"moduleAttributes")){if(ye(e,"importAssertions"))throw new Error("Cannot combine importAssertions and moduleAttributes plugins.");if("may-2020"!==ge(e,"moduleAttributes","version"))throw new Error("The 'moduleAttributes' plugin requires a 'version' option, representing the last proposal update. Currently, the only supported value is 'may-2020'.")}if(ye(e,"recordAndTuple")&&!ve.includes(ge(e,"recordAndTuple","syntaxType")))throw new Error("'recordAndTuple' requires 'syntaxType' option whose value should be one of: "+ve.map((e=>`'${e}'`)).join(", "));if(ye(e,"asyncDoExpressions")&&!ye(e,"doExpressions")){const e=new Error("'asyncDoExpressions' requires 'doExpressions', please add 'doExpressions' to parser plugins.");throw e.missingPlugins="doExpressions",e}}(e.plugins),r=function(e){const t=xe.filter((t=>ye(e,t))),r=t.join("/");let n=Ve[r];if(!n){n=$e;for(const e of t)n=Ee[e](n);Ve[r]=n}return n}(e.plugins)),new r(e,t)}const Ve={};t.parse=function(e,t){var r;if("unambiguous"!==(null==(r=t)?void 0:r.sourceType))return qe(t,e).parse();t=Object.assign({},t);try{t.sourceType="module";const r=qe(t,e),n=r.parse();if(r.sawUnambiguousESM)return n;if(r.ambiguousScriptDifferentAst)try{return t.sourceType="script",qe(t,e).parse()}catch(e){}else n.program.sourceType="script";return n}catch(r){try{return t.sourceType="script",qe(t,e).parse()}catch(e){}throw r}},t.parseExpression=function(e,t){const r=qe(t,e);return r.options.strictMode&&(r.state.strict=!0),r.getExpression()},t.tokTypes=p},(e,t,r)=>{const n=r(23);e.exports={re:n.re,src:n.src,tokens:n.t,SEMVER_SPEC_VERSION:r(41).SEMVER_SPEC_VERSION,SemVer:r(3),compareIdentifiers:r(94).compareIdentifiers,rcompareIdentifiers:r(94).rcompareIdentifiers,parse:r(29),valid:r(261),clean:r(262),inc:r(263),diff:r(264),major:r(265),minor:r(266),patch:r(267),prerelease:r(268),compare:r(12),rcompare:r(269),compareLoose:r(270),compareBuild:r(72),sort:r(271),rsort:r(272),gt:r(44),lt:r(73),eq:r(71),neq:r(147),gte:r(74),lte:r(75),cmp:r(148),coerce:r(273),Comparator:r(45),Range:r(13),satisfies:r(46),toComparators:r(276),maxSatisfying:r(277),minSatisfying:r(278),minVersion:r(279),validRange:r(280),outside:r(76),gtr:r(281),ltr:r(282),intersects:r(283),simplifyRange:r(284),subset:r(285)}},(e,t,r)=>{const{MAX_LENGTH:n}=r(41),{re:s,t:i}=r(23),o=r(3),a=r(43);e.exports=(e,t)=>{if(t=a(t),e instanceof o)return e;if("string"!=typeof e)return null;if(e.length>n)return null;if(!(t.loose?s[i.LOOSE]:s[i.FULL]).test(e))return null;try{return new o(e,t)}catch(e){return null}}},(e,t,r)=>{"use strict";var n=r(7);function s(e){return(s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var i,o,a=r(240).codes,l=a.ERR_AMBIGUOUS_ARGUMENT,c=a.ERR_INVALID_ARG_TYPE,u=a.ERR_INVALID_ARG_VALUE,p=a.ERR_INVALID_RETURN_VALUE,f=a.ERR_MISSING_ARGS,d=r(249),h=r(36).inspect,m=r(36).types,y=m.isPromise,g=m.isRegExp,b=Object.assign?Object.assign:r(250).assign,v=Object.is?Object.is:r(140);function E(){var e=r(254);i=e.isDeepEqual,o=e.isDeepStrictEqual}new Map;var x=!1,S=e.exports=A,T={};function w(e){if(e.message instanceof Error)throw e.message;throw new d(e)}function P(e,t,r,n){if(!r){var s=!1;if(0===t)s=!0,n="No value argument passed to `assert.ok()`";else if(n instanceof Error)throw n;var i=new d({actual:r,expected:!0,message:n,operator:"==",stackStartFn:e});throw i.generatedMessage=s,i}}function A(){for(var e=arguments.length,t=new Array(e),r=0;r1?r-1:0),s=1;s1?r-1:0),s=1;s1?r-1:0),s=1;s1?r-1:0),s=1;s{var n=r(16);e.exports=!n((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},(e,t,r)=>{var n=r(31),s=r(112),i=r(116);e.exports=n?function(e,t,r){return s.f(e,t,i(1,r))}:function(e,t,r){return e[t]=r,e}},(e,t,r)=>{var n=r(59);e.exports=n("navigator","userAgent")||""},(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.clear=function(){s(),i()},t.clearPath=s,t.clearScope=i,t.scope=t.path=void 0;let r=new WeakMap;t.path=r;let n=new WeakMap;function s(){t.path=r=new WeakMap}function i(){t.scope=n=new WeakMap}t.scope=n},(e,t,r)=>{"use strict";let n,s,i=r(22);class o extends i{constructor(e){super(e),this.type="root",this.nodes||(this.nodes=[])}removeChild(e,t){let r=this.index(e);return!t&&0===r&&this.nodes.length>1&&(this.nodes[1].raws.before=this.nodes[r].raws.before),super.removeChild(e)}normalize(e,t,r){let n=super.normalize(e);if(t)if("prepend"===r)this.nodes.length>1?t.raws.before=this.nodes[1].raws.before:delete t.raws.before;else if(this.first!==t)for(let e of n)e.raws.before=t.raws.before;return n}toResult(e={}){return new n(new s,this,e).stringify()}}o.registerLazyResult=e=>{n=e},o.registerProcessor=e=>{s=e},e.exports=o,o.default=o},(e,t,r)=>{var n=r(7),s=Object.getOwnPropertyDescriptors||function(e){for(var t=Object.keys(e),r={},n=0;n=s)return e;switch(e){case"%s":return String(n[r++]);case"%d":return Number(n[r++]);case"%j":try{return JSON.stringify(n[r++])}catch(e){return"[Circular]"}default:return e}})),a=n[r];r=3&&(n.depth=arguments[2]),arguments.length>=4&&(n.colors=arguments[3]),m(r)?n.showHidden=r:r&&t._extend(n,r),v(n.showHidden)&&(n.showHidden=!1),v(n.depth)&&(n.depth=2),v(n.colors)&&(n.colors=!1),v(n.customInspect)&&(n.customInspect=!0),n.colors&&(n.stylize=c),p(n,e,n.depth)}function c(e,t){var r=l.styles[t];return r?"["+l.colors[r][0]+"m"+e+"["+l.colors[r][1]+"m":e}function u(e,t){return e}function p(e,r,n){if(e.customInspect&&r&&w(r.inspect)&&r.inspect!==t.inspect&&(!r.constructor||r.constructor.prototype!==r)){var s=r.inspect(n,e);return b(s)||(s=p(e,s,n)),s}var i=function(e,t){if(v(t))return e.stylize("undefined","undefined");if(b(t)){var r="'"+JSON.stringify(t).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return e.stylize(r,"string")}return g(t)?e.stylize(""+t,"number"):m(t)?e.stylize(""+t,"boolean"):y(t)?e.stylize("null","null"):void 0}(e,r);if(i)return i;var o=Object.keys(r),a=function(e){var t={};return e.forEach((function(e,r){t[e]=!0})),t}(o);if(e.showHidden&&(o=Object.getOwnPropertyNames(r)),T(r)&&(o.indexOf("message")>=0||o.indexOf("description")>=0))return f(r);if(0===o.length){if(w(r)){var l=r.name?": "+r.name:"";return e.stylize("[Function"+l+"]","special")}if(E(r))return e.stylize(RegExp.prototype.toString.call(r),"regexp");if(S(r))return e.stylize(Date.prototype.toString.call(r),"date");if(T(r))return f(r)}var c,u="",x=!1,P=["{","}"];return h(r)&&(x=!0,P=["[","]"]),w(r)&&(u=" [Function"+(r.name?": "+r.name:"")+"]"),E(r)&&(u=" "+RegExp.prototype.toString.call(r)),S(r)&&(u=" "+Date.prototype.toUTCString.call(r)),T(r)&&(u=" "+f(r)),0!==o.length||x&&0!=r.length?n<0?E(r)?e.stylize(RegExp.prototype.toString.call(r),"regexp"):e.stylize("[Object]","special"):(e.seen.push(r),c=x?function(e,t,r,n,s){for(var i=[],o=0,a=t.length;o60?r[0]+(""===t?"":t+"\n ")+" "+e.join(",\n ")+" "+r[1]:r[0]+t+" "+e.join(", ")+" "+r[1]}(c,u,P)):P[0]+u+P[1]}function f(e){return"["+Error.prototype.toString.call(e)+"]"}function d(e,t,r,n,s,i){var o,a,l;if((l=Object.getOwnPropertyDescriptor(t,s)||{value:t[s]}).get?a=l.set?e.stylize("[Getter/Setter]","special"):e.stylize("[Getter]","special"):l.set&&(a=e.stylize("[Setter]","special")),A(n,s)||(o="["+s+"]"),a||(e.seen.indexOf(l.value)<0?(a=y(r)?p(e,l.value,null):p(e,l.value,r-1)).indexOf("\n")>-1&&(a=i?a.split("\n").map((function(e){return" "+e})).join("\n").substr(2):"\n"+a.split("\n").map((function(e){return" "+e})).join("\n")):a=e.stylize("[Circular]","special")),v(o)){if(i&&s.match(/^\d+$/))return a;(o=JSON.stringify(""+s)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(o=o.substr(1,o.length-2),o=e.stylize(o,"name")):(o=o.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),o=e.stylize(o,"string"))}return o+": "+a}function h(e){return Array.isArray(e)}function m(e){return"boolean"==typeof e}function y(e){return null===e}function g(e){return"number"==typeof e}function b(e){return"string"==typeof e}function v(e){return void 0===e}function E(e){return x(e)&&"[object RegExp]"===P(e)}function x(e){return"object"==typeof e&&null!==e}function S(e){return x(e)&&"[object Date]"===P(e)}function T(e){return x(e)&&("[object Error]"===P(e)||e instanceof Error)}function w(e){return"function"==typeof e}function P(e){return Object.prototype.toString.call(e)}function A(e,t){return Object.prototype.hasOwnProperty.call(e,t)}t.debuglog=function(e){return e=e.toUpperCase(),o[e]||(a.test(e)?(n.pid,o[e]=function(){t.format.apply(t,arguments)}):o[e]=function(){}),o[e]},t.inspect=l,l.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},l.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},t.types=r(241),t.isArray=h,t.isBoolean=m,t.isNull=y,t.isNullOrUndefined=function(e){return null==e},t.isNumber=g,t.isString=b,t.isSymbol=function(e){return"symbol"==typeof e},t.isUndefined=v,t.isRegExp=E,t.types.isRegExp=E,t.isObject=x,t.isDate=S,t.types.isDate=S,t.isError=T,t.types.isNativeError=T,t.isFunction=w,t.isPrimitive=function(e){return null===e||"boolean"==typeof e||"number"==typeof e||"string"==typeof e||"symbol"==typeof e||void 0===e},t.isBuffer=r(248),t.log=function(){},t.inherits=r(171),t._extend=function(e,t){if(!t||!x(t))return e;for(var r=Object.keys(t),n=r.length;n--;)e[r[n]]=t[r[n]];return e};var O="undefined"!=typeof Symbol?Symbol("util.promisify.custom"):void 0;function C(e,t){if(!e){var r=new Error("Promise was rejected with a falsy value");r.reason=e,e=r}return t(e)}t.promisify=function(e){if("function"!=typeof e)throw new TypeError('The "original" argument must be of type Function');if(O&&e[O]){var t;if("function"!=typeof(t=e[O]))throw new TypeError('The "util.promisify.custom" argument must be of type Function');return Object.defineProperty(t,O,{value:t,enumerable:!1,writable:!1,configurable:!0}),t}function t(){for(var t,r,n=new Promise((function(e,n){t=e,r=n})),s=[],i=0;i{"use strict"; - /*! - * The buffer module from node.js, for the browser. - * - * @author Feross Aboukhadijeh - * @license MIT - */const n=r(427),s=r(428),i="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;t.Buffer=l,t.SlowBuffer=function(e){return+e!=e&&(e=0),l.alloc(+e)},t.INSPECT_MAX_BYTES=50;const o=2147483647;function a(e){if(e>o)throw new RangeError('The value "'+e+'" is invalid for option "size"');const t=new Uint8Array(e);return Object.setPrototypeOf(t,l.prototype),t}function l(e,t,r){if("number"==typeof e){if("string"==typeof t)throw new TypeError('The "string" argument must be of type string. Received type number');return p(e)}return c(e,t,r)}function c(e,t,r){if("string"==typeof e)return function(e,t){if("string"==typeof t&&""!==t||(t="utf8"),!l.isEncoding(t))throw new TypeError("Unknown encoding: "+t);const r=0|m(e,t);let n=a(r);const s=n.write(e,t);return s!==r&&(n=n.slice(0,s)),n}(e,t);if(ArrayBuffer.isView(e))return function(e){if(Y(e,Uint8Array)){const t=new Uint8Array(e);return d(t.buffer,t.byteOffset,t.byteLength)}return f(e)}(e);if(null==e)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e);if(Y(e,ArrayBuffer)||e&&Y(e.buffer,ArrayBuffer))return d(e,t,r);if("undefined"!=typeof SharedArrayBuffer&&(Y(e,SharedArrayBuffer)||e&&Y(e.buffer,SharedArrayBuffer)))return d(e,t,r);if("number"==typeof e)throw new TypeError('The "value" argument must not be of type number. Received type number');const n=e.valueOf&&e.valueOf();if(null!=n&&n!==e)return l.from(n,t,r);const s=function(e){if(l.isBuffer(e)){const t=0|h(e.length),r=a(t);return 0===r.length||e.copy(r,0,0,t),r}return void 0!==e.length?"number"!=typeof e.length||X(e.length)?a(0):f(e):"Buffer"===e.type&&Array.isArray(e.data)?f(e.data):void 0}(e);if(s)return s;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof e[Symbol.toPrimitive])return l.from(e[Symbol.toPrimitive]("string"),t,r);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e)}function u(e){if("number"!=typeof e)throw new TypeError('"size" argument must be of type number');if(e<0)throw new RangeError('The value "'+e+'" is invalid for option "size"')}function p(e){return u(e),a(e<0?0:0|h(e))}function f(e){const t=e.length<0?0:0|h(e.length),r=a(t);for(let n=0;n=o)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+o.toString(16)+" bytes");return 0|e}function m(e,t){if(l.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||Y(e,ArrayBuffer))return e.byteLength;if("string"!=typeof e)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof e);const r=e.length,n=arguments.length>2&&!0===arguments[2];if(!n&&0===r)return 0;let s=!1;for(;;)switch(t){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":return G(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return H(e).length;default:if(s)return n?-1:G(e).length;t=(""+t).toLowerCase(),s=!0}}function y(e,t,r){let n=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return k(this,t,r);case"utf8":case"utf-8":return A(this,t,r);case"ascii":return C(this,t,r);case"latin1":case"binary":return I(this,t,r);case"base64":return P(this,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return N(this,t,r);default:if(n)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),n=!0}}function g(e,t,r){const n=e[t];e[t]=e[r],e[r]=n}function b(e,t,r,n,s){if(0===e.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),X(r=+r)&&(r=s?0:e.length-1),r<0&&(r=e.length+r),r>=e.length){if(s)return-1;r=e.length-1}else if(r<0){if(!s)return-1;r=0}if("string"==typeof t&&(t=l.from(t,n)),l.isBuffer(t))return 0===t.length?-1:v(e,t,r,n,s);if("number"==typeof t)return t&=255,"function"==typeof Uint8Array.prototype.indexOf?s?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):v(e,[t],r,n,s);throw new TypeError("val must be string, number or Buffer")}function v(e,t,r,n,s){let i,o=1,a=e.length,l=t.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(e.length<2||t.length<2)return-1;o=2,a/=2,l/=2,r/=2}function c(e,t){return 1===o?e[t]:e.readUInt16BE(t*o)}if(s){let n=-1;for(i=r;ia&&(r=a-l),i=r;i>=0;i--){let r=!0;for(let n=0;ns&&(n=s):n=s;const i=t.length;let o;for(n>i/2&&(n=i/2),o=0;o>8,s=r%256,i.push(s),i.push(n);return i}(t,e.length-r),e,r,n)}function P(e,t,r){return 0===t&&r===e.length?n.fromByteArray(e):n.fromByteArray(e.slice(t,r))}function A(e,t,r){r=Math.min(e.length,r);const n=[];let s=t;for(;s239?4:t>223?3:t>191?2:1;if(s+o<=r){let r,n,a,l;switch(o){case 1:t<128&&(i=t);break;case 2:r=e[s+1],128==(192&r)&&(l=(31&t)<<6|63&r,l>127&&(i=l));break;case 3:r=e[s+1],n=e[s+2],128==(192&r)&&128==(192&n)&&(l=(15&t)<<12|(63&r)<<6|63&n,l>2047&&(l<55296||l>57343)&&(i=l));break;case 4:r=e[s+1],n=e[s+2],a=e[s+3],128==(192&r)&&128==(192&n)&&128==(192&a)&&(l=(15&t)<<18|(63&r)<<12|(63&n)<<6|63&a,l>65535&&l<1114112&&(i=l))}}null===i?(i=65533,o=1):i>65535&&(i-=65536,n.push(i>>>10&1023|55296),i=56320|1023&i),n.push(i),s+=o}return function(e){const t=e.length;if(t<=O)return String.fromCharCode.apply(String,e);let r="",n=0;for(;nn.length?(l.isBuffer(t)||(t=l.from(t)),t.copy(n,s)):Uint8Array.prototype.set.call(n,t,s);else{if(!l.isBuffer(t))throw new TypeError('"list" argument must be an Array of Buffers');t.copy(n,s)}s+=t.length}return n},l.byteLength=m,l.prototype._isBuffer=!0,l.prototype.swap16=function(){const e=this.length;if(e%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let t=0;tr&&(e+=" ... "),""},i&&(l.prototype[i]=l.prototype.inspect),l.prototype.compare=function(e,t,r,n,s){if(Y(e,Uint8Array)&&(e=l.from(e,e.offset,e.byteLength)),!l.isBuffer(e))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof e);if(void 0===t&&(t=0),void 0===r&&(r=e?e.length:0),void 0===n&&(n=0),void 0===s&&(s=this.length),t<0||r>e.length||n<0||s>this.length)throw new RangeError("out of range index");if(n>=s&&t>=r)return 0;if(n>=s)return-1;if(t>=r)return 1;if(this===e)return 0;let i=(s>>>=0)-(n>>>=0),o=(r>>>=0)-(t>>>=0);const a=Math.min(i,o),c=this.slice(n,s),u=e.slice(t,r);for(let e=0;e>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}const s=this.length-t;if((void 0===r||r>s)&&(r=s),e.length>0&&(r<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");let i=!1;for(;;)switch(n){case"hex":return E(this,e,t,r);case"utf8":case"utf-8":return x(this,e,t,r);case"ascii":case"latin1":case"binary":return S(this,e,t,r);case"base64":return T(this,e,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return w(this,e,t,r);default:if(i)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),i=!0}},l.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};const O=4096;function C(e,t,r){let n="";r=Math.min(e.length,r);for(let s=t;sn)&&(r=n);let s="";for(let n=t;nr)throw new RangeError("Trying to access beyond buffer length")}function j(e,t,r,n,s,i){if(!l.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>s||te.length)throw new RangeError("Index out of range")}function D(e,t,r,n,s){q(t,n,s,e,r,7);let i=Number(t&BigInt(4294967295));e[r++]=i,i>>=8,e[r++]=i,i>>=8,e[r++]=i,i>>=8,e[r++]=i;let o=Number(t>>BigInt(32)&BigInt(4294967295));return e[r++]=o,o>>=8,e[r++]=o,o>>=8,e[r++]=o,o>>=8,e[r++]=o,r}function L(e,t,r,n,s){q(t,n,s,e,r,7);let i=Number(t&BigInt(4294967295));e[r+7]=i,i>>=8,e[r+6]=i,i>>=8,e[r+5]=i,i>>=8,e[r+4]=i;let o=Number(t>>BigInt(32)&BigInt(4294967295));return e[r+3]=o,o>>=8,e[r+2]=o,o>>=8,e[r+1]=o,o>>=8,e[r]=o,r+8}function M(e,t,r,n,s,i){if(r+n>e.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function B(e,t,r,n,i){return t=+t,r>>>=0,i||M(e,0,r,4),s.write(e,t,r,n,23,4),r+4}function R(e,t,r,n,i){return t=+t,r>>>=0,i||M(e,0,r,8),s.write(e,t,r,n,52,8),r+8}l.prototype.slice=function(e,t){const r=this.length;(e=~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),(t=void 0===t?r:~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),t>>=0,t>>>=0,r||_(e,t,this.length);let n=this[e],s=1,i=0;for(;++i>>=0,t>>>=0,r||_(e,t,this.length);let n=this[e+--t],s=1;for(;t>0&&(s*=256);)n+=this[e+--t]*s;return n},l.prototype.readUint8=l.prototype.readUInt8=function(e,t){return e>>>=0,t||_(e,1,this.length),this[e]},l.prototype.readUint16LE=l.prototype.readUInt16LE=function(e,t){return e>>>=0,t||_(e,2,this.length),this[e]|this[e+1]<<8},l.prototype.readUint16BE=l.prototype.readUInt16BE=function(e,t){return e>>>=0,t||_(e,2,this.length),this[e]<<8|this[e+1]},l.prototype.readUint32LE=l.prototype.readUInt32LE=function(e,t){return e>>>=0,t||_(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},l.prototype.readUint32BE=l.prototype.readUInt32BE=function(e,t){return e>>>=0,t||_(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},l.prototype.readBigUInt64LE=Q((function(e){V(e>>>=0,"offset");const t=this[e],r=this[e+7];void 0!==t&&void 0!==r||W(e,this.length-8);const n=t+256*this[++e]+65536*this[++e]+this[++e]*2**24,s=this[++e]+256*this[++e]+65536*this[++e]+r*2**24;return BigInt(n)+(BigInt(s)<>>=0,"offset");const t=this[e],r=this[e+7];void 0!==t&&void 0!==r||W(e,this.length-8);const n=t*2**24+65536*this[++e]+256*this[++e]+this[++e],s=this[++e]*2**24+65536*this[++e]+256*this[++e]+r;return(BigInt(n)<>>=0,t>>>=0,r||_(e,t,this.length);let n=this[e],s=1,i=0;for(;++i=s&&(n-=Math.pow(2,8*t)),n},l.prototype.readIntBE=function(e,t,r){e>>>=0,t>>>=0,r||_(e,t,this.length);let n=t,s=1,i=this[e+--n];for(;n>0&&(s*=256);)i+=this[e+--n]*s;return s*=128,i>=s&&(i-=Math.pow(2,8*t)),i},l.prototype.readInt8=function(e,t){return e>>>=0,t||_(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},l.prototype.readInt16LE=function(e,t){e>>>=0,t||_(e,2,this.length);const r=this[e]|this[e+1]<<8;return 32768&r?4294901760|r:r},l.prototype.readInt16BE=function(e,t){e>>>=0,t||_(e,2,this.length);const r=this[e+1]|this[e]<<8;return 32768&r?4294901760|r:r},l.prototype.readInt32LE=function(e,t){return e>>>=0,t||_(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},l.prototype.readInt32BE=function(e,t){return e>>>=0,t||_(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},l.prototype.readBigInt64LE=Q((function(e){V(e>>>=0,"offset");const t=this[e],r=this[e+7];void 0!==t&&void 0!==r||W(e,this.length-8);const n=this[e+4]+256*this[e+5]+65536*this[e+6]+(r<<24);return(BigInt(n)<>>=0,"offset");const t=this[e],r=this[e+7];void 0!==t&&void 0!==r||W(e,this.length-8);const n=(t<<24)+65536*this[++e]+256*this[++e]+this[++e];return(BigInt(n)<>>=0,t||_(e,4,this.length),s.read(this,e,!0,23,4)},l.prototype.readFloatBE=function(e,t){return e>>>=0,t||_(e,4,this.length),s.read(this,e,!1,23,4)},l.prototype.readDoubleLE=function(e,t){return e>>>=0,t||_(e,8,this.length),s.read(this,e,!0,52,8)},l.prototype.readDoubleBE=function(e,t){return e>>>=0,t||_(e,8,this.length),s.read(this,e,!1,52,8)},l.prototype.writeUintLE=l.prototype.writeUIntLE=function(e,t,r,n){e=+e,t>>>=0,r>>>=0,n||j(this,e,t,r,Math.pow(2,8*r)-1,0);let s=1,i=0;for(this[t]=255&e;++i>>=0,r>>>=0,n||j(this,e,t,r,Math.pow(2,8*r)-1,0);let s=r-1,i=1;for(this[t+s]=255&e;--s>=0&&(i*=256);)this[t+s]=e/i&255;return t+r},l.prototype.writeUint8=l.prototype.writeUInt8=function(e,t,r){return e=+e,t>>>=0,r||j(this,e,t,1,255,0),this[t]=255&e,t+1},l.prototype.writeUint16LE=l.prototype.writeUInt16LE=function(e,t,r){return e=+e,t>>>=0,r||j(this,e,t,2,65535,0),this[t]=255&e,this[t+1]=e>>>8,t+2},l.prototype.writeUint16BE=l.prototype.writeUInt16BE=function(e,t,r){return e=+e,t>>>=0,r||j(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=255&e,t+2},l.prototype.writeUint32LE=l.prototype.writeUInt32LE=function(e,t,r){return e=+e,t>>>=0,r||j(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e,t+4},l.prototype.writeUint32BE=l.prototype.writeUInt32BE=function(e,t,r){return e=+e,t>>>=0,r||j(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},l.prototype.writeBigUInt64LE=Q((function(e,t=0){return D(this,e,t,BigInt(0),BigInt("0xffffffffffffffff"))})),l.prototype.writeBigUInt64BE=Q((function(e,t=0){return L(this,e,t,BigInt(0),BigInt("0xffffffffffffffff"))})),l.prototype.writeIntLE=function(e,t,r,n){if(e=+e,t>>>=0,!n){const n=Math.pow(2,8*r-1);j(this,e,t,r,n-1,-n)}let s=0,i=1,o=0;for(this[t]=255&e;++s>0)-o&255;return t+r},l.prototype.writeIntBE=function(e,t,r,n){if(e=+e,t>>>=0,!n){const n=Math.pow(2,8*r-1);j(this,e,t,r,n-1,-n)}let s=r-1,i=1,o=0;for(this[t+s]=255&e;--s>=0&&(i*=256);)e<0&&0===o&&0!==this[t+s+1]&&(o=1),this[t+s]=(e/i>>0)-o&255;return t+r},l.prototype.writeInt8=function(e,t,r){return e=+e,t>>>=0,r||j(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=255&e,t+1},l.prototype.writeInt16LE=function(e,t,r){return e=+e,t>>>=0,r||j(this,e,t,2,32767,-32768),this[t]=255&e,this[t+1]=e>>>8,t+2},l.prototype.writeInt16BE=function(e,t,r){return e=+e,t>>>=0,r||j(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=255&e,t+2},l.prototype.writeInt32LE=function(e,t,r){return e=+e,t>>>=0,r||j(this,e,t,4,2147483647,-2147483648),this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},l.prototype.writeInt32BE=function(e,t,r){return e=+e,t>>>=0,r||j(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},l.prototype.writeBigInt64LE=Q((function(e,t=0){return D(this,e,t,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),l.prototype.writeBigInt64BE=Q((function(e,t=0){return L(this,e,t,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),l.prototype.writeFloatLE=function(e,t,r){return B(this,e,t,!0,r)},l.prototype.writeFloatBE=function(e,t,r){return B(this,e,t,!1,r)},l.prototype.writeDoubleLE=function(e,t,r){return R(this,e,t,!0,r)},l.prototype.writeDoubleBE=function(e,t,r){return R(this,e,t,!1,r)},l.prototype.copy=function(e,t,r,n){if(!l.isBuffer(e))throw new TypeError("argument should be a Buffer");if(r||(r=0),n||0===n||(n=this.length),t>=e.length&&(t=e.length),t||(t=0),n>0&&n=this.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),e.length-t>>=0,r=void 0===r?this.length:r>>>0,e||(e=0),"number"==typeof e)for(s=t;s=n+4;r-=3)t=`_${e.slice(r-3,r)}${t}`;return`${e.slice(0,r)}${t}`}function q(e,t,r,n,s,i){if(e>r||e3?0===t||t===BigInt(0)?`>= 0${n} and < 2${n} ** ${8*(i+1)}${n}`:`>= -(2${n} ** ${8*(i+1)-1}${n}) and < 2 ** ${8*(i+1)-1}${n}`:`>= ${t}${n} and <= ${r}${n}`,new F.ERR_OUT_OF_RANGE("value",s,e)}!function(e,t,r){V(t,"offset"),void 0!==e[t]&&void 0!==e[t+r]||W(t,e.length-(r+1))}(n,s,i)}function V(e,t){if("number"!=typeof e)throw new F.ERR_INVALID_ARG_TYPE(t,"number",e)}function W(e,t,r){if(Math.floor(e)!==e)throw V(e,r),new F.ERR_OUT_OF_RANGE(r||"offset","an integer",e);if(t<0)throw new F.ERR_BUFFER_OUT_OF_BOUNDS;throw new F.ERR_OUT_OF_RANGE(r||"offset",`>= ${r?1:0} and <= ${t}`,e)}U("ERR_BUFFER_OUT_OF_BOUNDS",(function(e){return e?`${e} is outside of buffer bounds`:"Attempt to access memory outside buffer bounds"}),RangeError),U("ERR_INVALID_ARG_TYPE",(function(e,t){return`The "${e}" argument must be of type number. Received type ${typeof t}`}),TypeError),U("ERR_OUT_OF_RANGE",(function(e,t,r){let n=`The value of "${e}" is out of range.`,s=r;return Number.isInteger(r)&&Math.abs(r)>2**32?s=$(String(r)):"bigint"==typeof r&&(s=String(r),(r>BigInt(2)**BigInt(32)||r<-(BigInt(2)**BigInt(32)))&&(s=$(s)),s+="n"),n+=` It must be ${t}. Received ${s}`,n}),RangeError);const K=/[^+/0-9A-Za-z-_]/g;function G(e,t){let r;t=t||1/0;const n=e.length;let s=null;const i=[];for(let o=0;o55295&&r<57344){if(!s){if(r>56319){(t-=3)>-1&&i.push(239,191,189);continue}if(o+1===n){(t-=3)>-1&&i.push(239,191,189);continue}s=r;continue}if(r<56320){(t-=3)>-1&&i.push(239,191,189),s=r;continue}r=65536+(s-55296<<10|r-56320)}else s&&(t-=3)>-1&&i.push(239,191,189);if(s=null,r<128){if((t-=1)<0)break;i.push(r)}else if(r<2048){if((t-=2)<0)break;i.push(r>>6|192,63&r|128)}else if(r<65536){if((t-=3)<0)break;i.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;i.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return i}function H(e){return n.toByteArray(function(e){if((e=(e=e.split("=")[0]).trim().replace(K,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function J(e,t,r,n){let s;for(s=0;s=t.length||s>=e.length);++s)t[s+r]=e[s];return s}function Y(e,t){return e instanceof t||null!=e&&null!=e.constructor&&null!=e.constructor.name&&e.constructor.name===t.name}function X(e){return e!=e}const z=function(){const e="0123456789abcdef",t=new Array(256);for(let r=0;r<16;++r){const n=16*r;for(let s=0;s<16;++s)t[n+s]=e[r]+e[s]}return t}();function Q(e){return"undefined"==typeof BigInt?Z:e}function Z(){throw new Error("BigInt not supported")}},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t=!0){return"string"==typeof e&&((!t||!(0,n.isKeyword)(e)&&!(0,n.isStrictReservedWord)(e,!0))&&(0,n.isIdentifierName)(e))};var n=r(63)},(e,t,r)=>{"use strict";var n=r(7);Object.defineProperty(t,"__esModule",{value:!0}),t.codeFrameColumns=a,t.default=function(e,t,r,s={}){if(!i){i=!0;const e="Passing lineNumber and colNumber is deprecated to @babel/code-frame. Please use `codeFrameColumns`.";n.emitWarning?n.emitWarning(e,"DeprecationWarning"):new Error(e).name="DeprecationWarning"}return a(e,{start:{column:r=Math.max(r,0),line:t}},s)};var s=r(438);let i=!1;const o=/\r\n|[\n\r\u2028\u2029]/;function a(e,t,r={}){const n=(r.highlightCode||r.forceColor)&&(0,s.shouldHighlight)(r),i=(0,s.getChalk)(r),a=function(e){return{gutter:e.grey,marker:e.red.bold,message:e.red.bold}}(i),l=(e,t)=>n?e(t):t,c=e.split(o),{start:u,end:p,markerLines:f}=function(e,t,r){const n=Object.assign({column:0,line:-1},e.start),s=Object.assign({},n,e.end),{linesAbove:i=2,linesBelow:o=3}=r||{},a=n.line,l=n.column,c=s.line,u=s.column;let p=Math.max(a-(i+1),0),f=Math.min(t.length,c+o);-1===a&&(p=0),-1===c&&(f=t.length);const d=c-a,h={};if(d)for(let e=0;e<=d;e++){const r=e+a;if(l)if(0===e){const e=t[r-1].length;h[r]=[l,e-l+1]}else if(e===d)h[r]=[0,u];else{const n=t[r-e].length;h[r]=[0,n]}else h[r]=!0}else h[a]=l===u?!l||[l,0]:[l,u-l];return{start:p,end:f,markerLines:h}}(t,c,r),d=t.start&&"number"==typeof t.start.column,h=String(p).length;let m=(n?(0,s.default)(e,r):e).split(o).slice(u,p).map(((e,t)=>{const n=u+1+t,s=` ${` ${n}`.slice(-h)} |`,i=f[n],o=!f[n+1];if(i){let t="";if(Array.isArray(i)){const n=e.slice(0,Math.max(i[0]-1,0)).replace(/[^\t]/g," "),c=i[1]||1;t=["\n ",l(a.gutter,s.replace(/\d/g," "))," ",n,l(a.marker,"^").repeat(c)].join(""),o&&r.message&&(t+=" "+l(a.message,r.message))}return[l(a.marker,">"),l(a.gutter,s),e.length>0?` ${e}`:"",t].join("")}return` ${l(a.gutter,s)}${e.length>0?` ${e}`:""}`})).join("\n");return r.message&&!d&&(m=`${" ".repeat(h+1)}${r.message}\n${m}`),n?i.reset(m):m}},(e,t,r)=>{"use strict";var n=r(251),s="function"==typeof Symbol&&"symbol"==typeof Symbol("foo"),i=Object.prototype.toString,o=Array.prototype.concat,a=Object.defineProperty,l=a&&function(){var e={};try{for(var t in a(e,"x",{enumerable:!1,value:e}),e)return!1;return e.x===e}catch(e){return!1}}(),c=function(e,t,r,n){var s;(!(t in e)||"function"==typeof(s=n)&&"[object Function]"===i.call(s)&&n())&&(l?a(e,t,{configurable:!0,enumerable:!1,value:r,writable:!0}):e[t]=r)},u=function(e,t){var r=arguments.length>2?arguments[2]:{},i=n(t);s&&(i=o.call(i,Object.getOwnPropertySymbols(t)));for(var a=0;a{const t=Number.MAX_SAFE_INTEGER||9007199254740991;e.exports={SEMVER_SPEC_VERSION:"2.0.0",MAX_LENGTH:256,MAX_SAFE_INTEGER:t,MAX_SAFE_COMPONENT_LENGTH:16}},(e,t,r)=>{var n=r(7);const s=("object"==typeof n&&n.env,()=>{});e.exports=s},e=>{const t=["includePrerelease","loose","rtl"];e.exports=e=>e?"object"!=typeof e?{loose:!0}:t.filter((t=>e[t])).reduce(((e,t)=>(e[t]=!0,e)),{}):{}},(e,t,r)=>{const n=r(12);e.exports=(e,t,r)=>n(e,t,r)>0},(e,t,r)=>{const n=Symbol("SemVer ANY");class s{static get ANY(){return n}constructor(e,t){if(t=i(t),e instanceof s){if(e.loose===!!t.loose)return e;e=e.value}c("comparator",e,t),this.options=t,this.loose=!!t.loose,this.parse(e),this.semver===n?this.value="":this.value=this.operator+this.semver.version,c("comp",this)}parse(e){const t=this.options.loose?o[a.COMPARATORLOOSE]:o[a.COMPARATOR],r=e.match(t);if(!r)throw new TypeError(`Invalid comparator: ${e}`);this.operator=void 0!==r[1]?r[1]:"","="===this.operator&&(this.operator=""),r[2]?this.semver=new u(r[2],this.options.loose):this.semver=n}toString(){return this.value}test(e){if(c("Comparator.test",e,this.options.loose),this.semver===n||e===n)return!0;if("string"==typeof e)try{e=new u(e,this.options)}catch(e){return!1}return l(e,this.operator,this.semver,this.options)}intersects(e,t){if(!(e instanceof s))throw new TypeError("a Comparator is required");if(t&&"object"==typeof t||(t={loose:!!t,includePrerelease:!1}),""===this.operator)return""===this.value||new p(e.value,t).test(this.value);if(""===e.operator)return""===e.value||new p(this.value,t).test(e.semver);const r=!(">="!==this.operator&&">"!==this.operator||">="!==e.operator&&">"!==e.operator),n=!("<="!==this.operator&&"<"!==this.operator||"<="!==e.operator&&"<"!==e.operator),i=this.semver.version===e.semver.version,o=!(">="!==this.operator&&"<="!==this.operator||">="!==e.operator&&"<="!==e.operator),a=l(this.semver,"<",e.semver,t)&&(">="===this.operator||">"===this.operator)&&("<="===e.operator||"<"===e.operator),c=l(this.semver,">",e.semver,t)&&("<="===this.operator||"<"===this.operator)&&(">="===e.operator||">"===e.operator);return r||n||i&&o||a||c}}e.exports=s;const i=r(43),{re:o,t:a}=r(23),l=r(148),c=r(42),u=r(3),p=r(13)},(e,t,r)=>{const n=r(13);e.exports=(e,t,r)=>{try{t=new n(t,r)}catch(e){return!1}return t.test(e)}},(e,t,r)=>{"use strict";let n=r(48);class s extends n{constructor(e){e&&void 0!==e.value&&"string"!=typeof e.value&&(e={...e,value:String(e.value)}),super(e),this.type="decl"}get variable(){return this.prop.startsWith("--")||"$"===this.prop[0]}}e.exports=s,s.default=s},(e,t,r)=>{"use strict";let{isClean:n,my:s}=r(154),i=r(85),o=r(155),a=r(86);function l(e,t){let r=new e.constructor;for(let n in e){if(!Object.prototype.hasOwnProperty.call(e,n))continue;if("proxyCache"===n)continue;let s=e[n],i=typeof s;"parent"===n&&"object"===i?t&&(r[n]=t):"source"===n?r[n]=s:Array.isArray(s)?r[n]=s.map((e=>l(e,r))):("object"===i&&null!==s&&(s=l(s)),r[n]=s)}return r}class c{constructor(e={}){this.raws={},this[n]=!1,this[s]=!0;for(let t in e)if("nodes"===t){this.nodes=[];for(let r of e[t])"function"==typeof r.clone?this.append(r.clone()):this.append(r)}else this[t]=e[t]}error(e,t={}){if(this.source){let r=this.positionBy(t);return this.source.input.error(e,r.line,r.column,t)}return new i(e)}warn(e,t,r){let n={node:this};for(let e in r)n[e]=r[e];return e.warn(t,n)}remove(){return this.parent&&this.parent.removeChild(this),this.parent=void 0,this}toString(e=a){e.stringify&&(e=e.stringify);let t="";return e(this,(e=>{t+=e})),t}assign(e={}){for(let t in e)this[t]=e[t];return this}clone(e={}){let t=l(this);for(let r in e)t[r]=e[r];return t}cloneBefore(e={}){let t=this.clone(e);return this.parent.insertBefore(this,t),t}cloneAfter(e={}){let t=this.clone(e);return this.parent.insertAfter(this,t),t}replaceWith(...e){if(this.parent){let t=this,r=!1;for(let n of e)n===this?r=!0:r?(this.parent.insertAfter(t,n),t=n):this.parent.insertBefore(t,n);r||this.remove()}return this}next(){if(!this.parent)return;let e=this.parent.index(this);return this.parent.nodes[e+1]}prev(){if(!this.parent)return;let e=this.parent.index(this);return this.parent.nodes[e-1]}before(e){return this.parent.insertBefore(this,e),this}after(e){return this.parent.insertAfter(this,e),this}root(){let e=this;for(;e.parent&&"document"!==e.parent.type;)e=e.parent;return e}raw(e,t){return(new o).raw(this,e,t)}cleanRaws(e){delete this.raws.before,delete this.raws.after,e||delete this.raws.between}toJSON(e,t){let r={},n=null==t;t=t||new Map;let s=0;for(let e in this){if(!Object.prototype.hasOwnProperty.call(this,e))continue;if("parent"===e||"proxyCache"===e)continue;let n=this[e];if(Array.isArray(n))r[e]=n.map((e=>"object"==typeof e&&e.toJSON?e.toJSON(null,t):e));else if("object"==typeof n&&n.toJSON)r[e]=n.toJSON(null,t);else if("source"===e){let i=t.get(n.input);null==i&&(i=s,t.set(n.input,s),s++),r[e]={inputId:i,start:n.start,end:n.end}}else r[e]=n}return n&&(r.inputs=[...t.keys()].map((e=>e.toJSON()))),r}positionInside(e){let t=this.toString(),r=this.source.start.column,n=this.source.start.line;for(let s=0;s(e[t]===r||(e[t]=r,"prop"!==t&&"value"!==t&&"name"!==t&&"params"!==t&&"important"!==t&&"text"!==t||e.markDirty()),!0),get:(e,t)=>"proxyOf"===t?e:"root"===t?()=>e.root().toProxy():e[t]}}toProxy(){return this.proxyCache||(this.proxyCache=new Proxy(this,this.getProxyProcessor())),this.proxyCache}addToError(e){if(e.postcssNode=this,e.stack&&this.source&&/\n\s{4}at /.test(e.stack)){let t=this.source;e.stack=e.stack.replace(/\n\s{4}at /,`$&${t.input.from}:${t.start.line}:${t.start.column}$&`)}return e}markDirty(){if(this[n]){this[n]=!1;let e=this;for(;e=e.parent;)e[n]=!1}}get proxyOf(){return this}}e.exports=c,c.default=c},(e,t,r)=>{"use strict";let n=r(48);class s extends n{constructor(e){super(e),this.type="comment"}}e.exports=s,s.default=s},function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r),Object.defineProperty(e,n,{enumerable:!0,get:function(){return t[r]}})}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),s=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&n(t,e,r);return s(t,e),t},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.transformJSXSpreadAttribute=t.isConstant=t.dedupeProperties=t.isOn=t.buildIIFE=t.walksScope=t.transformJSXSpreadChild=t.transformJSXExpressionContainer=t.transformJSXText=t.getJSXAttributeName=t.getTag=t.transformJSXMemberExpression=t.checkIsComponent=t.shouldTransformedToSlots=t.isDirective=t.createIdentifier=t.KEEP_ALIVE=t.FRAGMENT=t.JSX_HELPER_KEY=void 0;const a=i(r(0)),l=o(r(532)),c=o(r(534));t.JSX_HELPER_KEY="JSX_HELPER_KEY",t.FRAGMENT="Fragment",t.KEEP_ALIVE="KeepAlive",t.createIdentifier=(e,t)=>e.get(t)(),t.isDirective=e=>e.startsWith("v-")||e.startsWith("v")&&e.length>=2&&e[1]>="A"&&e[1]<="Z",t.shouldTransformedToSlots=e=>!(e.endsWith(t.FRAGMENT)||e===t.KEEP_ALIVE),t.checkIsComponent=e=>{const r=e.get("name");if(r.isJSXMemberExpression())return t.shouldTransformedToSlots(r.node.property.name);const n=r.node.name;return t.shouldTransformedToSlots(n)&&!l.default.includes(n)&&!c.default.includes(n)},t.transformJSXMemberExpression=e=>{const r=e.node.object,n=e.node.property,s=a.isJSXMemberExpression(r)?t.transformJSXMemberExpression(e.get("object")):a.isJSXIdentifier(r)?a.identifier(r.name):a.nullLiteral(),i=a.identifier(n.name);return a.memberExpression(s,i)},t.getTag=(e,r)=>{var n,s;const i=e.get("openingElement").get("name");if(i.isJSXIdentifier()){const{name:o}=i.node;return l.default.includes(o)||c.default.includes(o)?a.stringLiteral(o):o===t.FRAGMENT?t.createIdentifier(r,t.FRAGMENT):e.scope.hasBinding(o)?a.identifier(o):(null===(s=(n=r.opts).isCustomElement)||void 0===s?void 0:s.call(n,o))?a.stringLiteral(o):a.callExpression(t.createIdentifier(r,"resolveComponent"),[a.stringLiteral(o)])}if(i.isJSXMemberExpression())return t.transformJSXMemberExpression(i);throw new Error(`getTag: ${i.type} is not supported`)},t.getJSXAttributeName=e=>{const t=e.node.name;return a.isJSXIdentifier(t)?t.name:`${t.namespace.name}:${t.name.name}`},t.transformJSXText=e=>{const{node:t}=e,r=t.value.split(/\r\n|\n|\r/);let n=0;for(let e=0;ee.get("expression").node,t.transformJSXSpreadChild=e=>a.spreadElement(e.get("expression").node),t.walksScope=(e,r,n)=>{e.scope.hasBinding(r)&&e.parentPath&&(a.isJSXElement(e.parentPath.node)&&e.parentPath.setData("slotFlag",n),t.walksScope(e.parentPath,r,n))},t.buildIIFE=(e,t)=>{const{parentPath:r}=e;if(a.isAssignmentExpression(r)){const{left:n}=r.node;if(a.isIdentifier(n))return t.map((t=>{if(a.isIdentifier(t)&&t.name===n.name){const n=e.scope.generateUidIdentifier(t.name);return r.insertBefore(a.variableDeclaration("const",[a.variableDeclarator(n,a.callExpression(a.functionExpression(null,[],a.blockStatement([a.returnStatement(t)])),[]))])),n}return t}))}return t};const u=/^on[^a-z]/;t.isOn=e=>u.test(e),t.dedupeProperties=(e=[],t)=>{if(!t)return e;const r=new Map,n=[];return e.forEach((e=>{if(a.isStringLiteral(e.key)){const{value:t}=e.key,s=r.get(t);s?("style"===t||"class"===t||t.startsWith("on"))&&((e,t)=>{a.isArrayExpression(e.value)?e.value.elements.push(t.value):e.value=a.arrayExpression([e.value,t.value])})(s,e):(r.set(t,e),n.push(e))}else n.push(e)})),n},t.isConstant=e=>{if(a.isIdentifier(e))return"undefined"===e.name;if(a.isArrayExpression(e)){const{elements:r}=e;return r.every((e=>e&&t.isConstant(e)))}return a.isObjectExpression(e)?e.properties.every((e=>t.isConstant(e.value))):!!a.isLiteral(e)},t.transformJSXSpreadAttribute=(e,r,n,s)=>{const i=r.get("argument"),o=a.isObjectExpression(i.node)?i.node.properties:void 0;o?n?s.push(a.objectExpression(o)):s.push(...o):(i.isIdentifier()&&t.walksScope(e,i.node.name,2),s.push(n?i.node:a.spreadElement(i.node)))}},(e,t,r)=>{"use strict";var n=r(69),s=r(67),i=s("%Function.prototype.apply%"),o=s("%Function.prototype.call%"),a=s("%Reflect.apply%",!0)||n.call(o,i),l=s("%Object.getOwnPropertyDescriptor%",!0),c=s("%Object.defineProperty%",!0),u=s("%Math.max%");if(c)try{c({},"a",{value:1})}catch(e){c=null}e.exports=function(e){var t=a(n,o,arguments);if(l&&c){var r=l(t,"length");r.configurable&&c(t,"length",{value:1+u(0,e.length-(arguments.length-1))})}return t};var p=function(){return a(n,i,arguments)};c?c(e.exports,"apply",{value:p}):e.exports.apply=p},(e,t,r)=>{"use strict";t.__esModule=!0,t.default=void 0;var n,s=(n=r(15))&&n.__esModule?n:{default:n},i=function(e){if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var t=o();if(t&&t.has(e))return t.get(e);var r={},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var s in e)if(Object.prototype.hasOwnProperty.call(e,s)){var i=n?Object.getOwnPropertyDescriptor(e,s):null;i&&(i.get||i.set)?Object.defineProperty(r,s,i):r[s]=e[s]}return r.default=e,t&&t.set(e,r),r}(r(5));function o(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return o=function(){return e},e}function a(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=e&&(this.indexes[r]=t-1);return this},u.removeAll=function(){for(var e,t=function(e,t){var r;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(r=function(e,t){if(e){if("string"==typeof e)return a(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?a(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0;return function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}return(r=e[Symbol.iterator]()).next.bind(r)}(this.nodes);!(e=t()).done;)e.value.parent=void 0;return this.nodes=[],this},u.empty=function(){return this.removeAll()},u.insertAfter=function(e,t){t.parent=this;var r,n=this.index(e);for(var s in this.nodes.splice(n+1,0,t),t.parent=this,this.indexes)n<=(r=this.indexes[s])&&(this.indexes[s]=r+1);return this},u.insertBefore=function(e,t){t.parent=this;var r,n=this.index(e);for(var s in this.nodes.splice(n,0,t),t.parent=this,this.indexes)(r=this.indexes[s])<=n&&(this.indexes[s]=r+1);return this},u._findChildAtPosition=function(e,t){var r=void 0;return this.each((function(n){if(n.atPosition){var s=n.atPosition(e,t);if(s)return r=s,!1}else if(n.isAtPosition(e,t))return r=n,!1})),r},u.atPosition=function(e,t){return this.isAtPosition(e,t)?this._findChildAtPosition(e,t)||this:void 0},u._inferEndPosition=function(){this.last&&this.last.source&&this.last.source.end&&(this.source=this.source||{},this.source.end=this.source.end||{},Object.assign(this.source.end,this.last.source.end))},u.each=function(e){this.lastEach||(this.lastEach=0),this.indexes||(this.indexes={}),this.lastEach++;var t=this.lastEach;if(this.indexes[t]=0,this.length){for(var r,n;this.indexes[t]{"use strict";t.__esModule=!0,t.default=void 0;var n=i(r(92)),s=r(91);function i(e){return e&&e.__esModule?e:{default:e}}function o(e,t){for(var r=0;r{var n=r(2),s=r(111),i=r(17),o=r(58),a=r(117),l=r(185),c=s("wks"),u=n.Symbol,p=l?u:u&&u.withoutSetter||o;e.exports=function(e){return i(c,e)&&(a||"string"==typeof c[e])||(a&&i(u,e)?c[e]=u[e]:c[e]=p("Symbol."+e)),c[e]}},(e,t,r)=>{var n=r(2),s=r(56),i="__core-js_shared__",o=n[i]||s(i,{});e.exports=o},(e,t,r)=>{var n=r(2),s=r(32);e.exports=function(e,t){try{s(n,e,t)}catch(r){n[e]=t}return t}},(e,t,r)=>{var n=r(24);e.exports=function(e){if(!n(e))throw TypeError(String(e)+" is not an object");return e}},e=>{var t=0,r=Math.random();e.exports=function(e){return"Symbol("+String(void 0===e?"":e)+")_"+(++t+r).toString(36)}},(e,t,r)=>{var n=r(184),s=r(2),i=function(e){return"function"==typeof e?e:void 0};e.exports=function(e,t){return arguments.length<2?i(n[e])||i(s[e]):n[e]&&n[e][t]||s[e]&&s[e][t]}},e=>{var t={}.toString;e.exports=function(e){return t.call(e).slice(8,-1)}},(e,t,r)=>{var n=r(198),s=r(110);e.exports=function(e){return n(s(e))}},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,r){return!!t&&((0,s.default)(t.type,e)?void 0===r||(0,n.default)(t,r):!r&&"Placeholder"===t.type&&e in o.FLIPPED_ALIAS_KEYS&&(0,i.default)(t.expectedNode,e))};var n=r(127),s=r(129),i=r(216),o=r(11)},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"isIdentifierName",{enumerable:!0,get:function(){return n.isIdentifierName}}),Object.defineProperty(t,"isIdentifierChar",{enumerable:!0,get:function(){return n.isIdentifierChar}}),Object.defineProperty(t,"isIdentifierStart",{enumerable:!0,get:function(){return n.isIdentifierStart}}),Object.defineProperty(t,"isReservedWord",{enumerable:!0,get:function(){return s.isReservedWord}}),Object.defineProperty(t,"isStrictBindOnlyReservedWord",{enumerable:!0,get:function(){return s.isStrictBindOnlyReservedWord}}),Object.defineProperty(t,"isStrictBindReservedWord",{enumerable:!0,get:function(){return s.isStrictBindReservedWord}}),Object.defineProperty(t,"isStrictReservedWord",{enumerable:!0,get:function(){return s.isStrictReservedWord}}),Object.defineProperty(t,"isKeyword",{enumerable:!0,get:function(){return s.isKeyword}});var n=r(368),s=r(369)},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=s;var n=r(1);function s(e,t,r){let i=[].concat(e);const o=Object.create(null);for(;i.length;){const e=i.shift();if(!e)continue;const a=s.keys[e.type];if((0,n.isIdentifier)(e))t?(o[e.name]=o[e.name]||[]).push(e):o[e.name]=e;else if(!(0,n.isExportDeclaration)(e)||(0,n.isExportAllDeclaration)(e)){if(r){if((0,n.isFunctionDeclaration)(e)){i.push(e.id);continue}if((0,n.isFunctionExpression)(e))continue}if(a)for(let t=0;t{e.exports=function(){return function(){}}},(e,t,r)=>{"use strict";var n=r(67),s=r(51),i=s(n("String.prototype.indexOf"));e.exports=function(e,t){var r=n(e,!!t);return"function"==typeof r&&i(e,".prototype.")>-1?s(r):r}},(e,t,r)=>{"use strict";var n,s=SyntaxError,i=Function,o=TypeError,a=function(e){try{return i('"use strict"; return ('+e+").constructor;")()}catch(e){}},l=Object.getOwnPropertyDescriptor;if(l)try{l({},"")}catch(e){l=null}var c=function(){throw new o},u=l?function(){try{return c}catch(e){try{return l(arguments,"callee").get}catch(e){return c}}}():c,p=r(68)(),f=Object.getPrototypeOf||function(e){return e.__proto__},d={},h="undefined"==typeof Uint8Array?n:f(Uint8Array),m={"%AggregateError%":"undefined"==typeof AggregateError?n:AggregateError,"%Array%":Array,"%ArrayBuffer%":"undefined"==typeof ArrayBuffer?n:ArrayBuffer,"%ArrayIteratorPrototype%":p?f([][Symbol.iterator]()):n,"%AsyncFromSyncIteratorPrototype%":n,"%AsyncFunction%":d,"%AsyncGenerator%":d,"%AsyncGeneratorFunction%":d,"%AsyncIteratorPrototype%":d,"%Atomics%":"undefined"==typeof Atomics?n:Atomics,"%BigInt%":"undefined"==typeof BigInt?n:BigInt,"%Boolean%":Boolean,"%DataView%":"undefined"==typeof DataView?n:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":Error,"%eval%":eval,"%EvalError%":EvalError,"%Float32Array%":"undefined"==typeof Float32Array?n:Float32Array,"%Float64Array%":"undefined"==typeof Float64Array?n:Float64Array,"%FinalizationRegistry%":"undefined"==typeof FinalizationRegistry?n:FinalizationRegistry,"%Function%":i,"%GeneratorFunction%":d,"%Int8Array%":"undefined"==typeof Int8Array?n:Int8Array,"%Int16Array%":"undefined"==typeof Int16Array?n:Int16Array,"%Int32Array%":"undefined"==typeof Int32Array?n:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":p?f(f([][Symbol.iterator]())):n,"%JSON%":"object"==typeof JSON?JSON:n,"%Map%":"undefined"==typeof Map?n:Map,"%MapIteratorPrototype%":"undefined"!=typeof Map&&p?f((new Map)[Symbol.iterator]()):n,"%Math%":Math,"%Number%":Number,"%Object%":Object,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":"undefined"==typeof Promise?n:Promise,"%Proxy%":"undefined"==typeof Proxy?n:Proxy,"%RangeError%":RangeError,"%ReferenceError%":ReferenceError,"%Reflect%":"undefined"==typeof Reflect?n:Reflect,"%RegExp%":RegExp,"%Set%":"undefined"==typeof Set?n:Set,"%SetIteratorPrototype%":"undefined"!=typeof Set&&p?f((new Set)[Symbol.iterator]()):n,"%SharedArrayBuffer%":"undefined"==typeof SharedArrayBuffer?n:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":p?f(""[Symbol.iterator]()):n,"%Symbol%":p?Symbol:n,"%SyntaxError%":s,"%ThrowTypeError%":u,"%TypedArray%":h,"%TypeError%":o,"%Uint8Array%":"undefined"==typeof Uint8Array?n:Uint8Array,"%Uint8ClampedArray%":"undefined"==typeof Uint8ClampedArray?n:Uint8ClampedArray,"%Uint16Array%":"undefined"==typeof Uint16Array?n:Uint16Array,"%Uint32Array%":"undefined"==typeof Uint32Array?n:Uint32Array,"%URIError%":URIError,"%WeakMap%":"undefined"==typeof WeakMap?n:WeakMap,"%WeakRef%":"undefined"==typeof WeakRef?n:WeakRef,"%WeakSet%":"undefined"==typeof WeakSet?n:WeakSet},y=function e(t){var r;if("%AsyncFunction%"===t)r=a("async function () {}");else if("%GeneratorFunction%"===t)r=a("function* () {}");else if("%AsyncGeneratorFunction%"===t)r=a("async function* () {}");else if("%AsyncGenerator%"===t){var n=e("%AsyncGeneratorFunction%");n&&(r=n.prototype)}else if("%AsyncIteratorPrototype%"===t){var s=e("%AsyncGenerator%");s&&(r=f(s.prototype))}return m[t]=r,r},g={"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},b=r(69),v=r(245),E=b.call(Function.call,Array.prototype.concat),x=b.call(Function.apply,Array.prototype.splice),S=b.call(Function.call,String.prototype.replace),T=b.call(Function.call,String.prototype.slice),w=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,P=/\\(\\)?/g,A=function(e){var t=T(e,0,1),r=T(e,-1);if("%"===t&&"%"!==r)throw new s("invalid intrinsic syntax, expected closing `%`");if("%"===r&&"%"!==t)throw new s("invalid intrinsic syntax, expected opening `%`");var n=[];return S(e,w,(function(e,t,r,s){n[n.length]=r?S(s,P,"$1"):t||e})),n},O=function(e,t){var r,n=e;if(v(g,n)&&(n="%"+(r=g[n])[0]+"%"),v(m,n)){var i=m[n];if(i===d&&(i=y(n)),void 0===i&&!t)throw new o("intrinsic "+e+" exists, but is not available. Please file an issue!");return{alias:r,name:n,value:i}}throw new s("intrinsic "+e+" does not exist!")};e.exports=function(e,t){if("string"!=typeof e||0===e.length)throw new o("intrinsic name must be a non-empty string");if(arguments.length>1&&"boolean"!=typeof t)throw new o('"allowMissing" argument must be a boolean');var r=A(e),n=r.length>0?r[0]:"",i=O("%"+n+"%",t),a=i.name,c=i.value,u=!1,p=i.alias;p&&(n=p[0],x(r,E([0,1],p)));for(var f=1,d=!0;f=r.length){var b=l(c,h);c=(d=!!b)&&"get"in b&&!("originalValue"in b.get)?b.get:c[h]}else d=v(c,h),c=c[h];d&&!u&&(m[a]=c)}}return c}},(e,t,r)=>{"use strict";var n="undefined"!=typeof Symbol&&Symbol,s=r(243);e.exports=function(){return"function"==typeof n&&"function"==typeof Symbol&&"symbol"==typeof n("foo")&&"symbol"==typeof Symbol("bar")&&s()}},(e,t,r)=>{"use strict";var n=r(244);e.exports=Function.prototype.bind||n},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.skipAllButComputedKey=l,t.default=t.environmentVisitor=void 0;var n=r(10),s=r(258),i=r(259),o=r(0);function a(e,t,r,n){e=o.cloneNode(e);const s=t||n?e:o.memberExpression(e,o.identifier("prototype"));return o.callExpression(r.addHelper("getPrototypeOf"),[s])}function l(e){if(!e.node.computed)return void e.skip();const t=o.VISITOR_KEYS[e.type];for(const r of t)"key"!==r&&e.skipKey(r)}const c={[(o.staticBlock?"StaticBlock|":"")+"ClassPrivateProperty|TypeAnnotation"](e){e.skip()},Function(e){e.isMethod()||e.isArrowFunctionExpression()||e.skip()},"Method|ClassProperty"(e){l(e)}};t.environmentVisitor=c;const u=n.default.visitors.merge([c,{Super(e,t){const{node:r,parentPath:n}=e;n.isMemberExpression({object:r})&&t.handle(n)}}]),p=n.default.visitors.merge([c,{Scopable(e,{refName:t}){const r=e.scope.getOwnBinding(t);r&&r.identifier.name===t&&e.scope.rename(t)}}]),f={memoise(e,t){const{scope:r,node:n}=e,{computed:s,property:i}=n;if(!s)return;const o=r.maybeGenerateMemoised(i);o&&this.memoiser.set(i,o,t)},prop(e){const{computed:t,property:r}=e.node;return this.memoiser.has(r)?o.cloneNode(this.memoiser.get(r)):t?o.cloneNode(r):o.stringLiteral(r.name)},get(e){return this._get(e,this._getThisRefs())},_get(e,t){const r=a(this.getObjectRef(),this.isStatic,this.file,this.isPrivateMethod);return o.callExpression(this.file.addHelper("get"),[t.memo?o.sequenceExpression([t.memo,r]):r,this.prop(e),t.this])},_getThisRefs(){if(!this.isDerivedConstructor)return{this:o.thisExpression()};const e=this.scope.generateDeclaredUidIdentifier("thisSuper");return{memo:o.assignmentExpression("=",e,o.thisExpression()),this:o.cloneNode(e)}},set(e,t){const r=this._getThisRefs(),n=a(this.getObjectRef(),this.isStatic,this.file,this.isPrivateMethod);return o.callExpression(this.file.addHelper("set"),[r.memo?o.sequenceExpression([r.memo,n]):n,this.prop(e),t,r.this,o.booleanLiteral(e.isInStrictMode())])},destructureSet(e){throw e.buildCodeFrameError("Destructuring to a super field is not supported yet.")},call(e,t){const r=this._getThisRefs();return(0,i.default)(this._get(e,r),o.cloneNode(r.this),t,!1)},optionalCall(e,t){const r=this._getThisRefs();return(0,i.default)(this._get(e,r),o.cloneNode(r.this),t,!0)}},d=Object.assign({},f,{prop(e){const{property:t}=e.node;return this.memoiser.has(t)?o.cloneNode(this.memoiser.get(t)):o.cloneNode(t)},get(e){const{isStatic:t,getSuperRef:r}=this,{computed:n}=e.node,s=this.prop(e);let i;var a,l;return i=t?null!=(a=r())?a:o.memberExpression(o.identifier("Function"),o.identifier("prototype")):o.memberExpression(null!=(l=r())?l:o.identifier("Object"),o.identifier("prototype")),o.memberExpression(i,s,n)},set(e,t){const{computed:r}=e.node,n=this.prop(e);return o.assignmentExpression("=",o.memberExpression(o.thisExpression(),n,r),t)},destructureSet(e){const{computed:t}=e.node,r=this.prop(e);return o.memberExpression(o.thisExpression(),r,t)},call(e,t){return(0,i.default)(this.get(e),o.thisExpression(),t,!1)},optionalCall(e,t){return(0,i.default)(this.get(e),o.thisExpression(),t,!0)}});t.default=class{constructor(e){var t;const r=e.methodPath;this.methodPath=r,this.isDerivedConstructor=r.isClassMethod({kind:"constructor"})&&!!e.superRef,this.isStatic=r.isObjectMethod()||r.node.static||(null==r.isStaticBlock?void 0:r.isStaticBlock()),this.isPrivateMethod=r.isPrivate()&&r.isMethod(),this.file=e.file,this.constantSuper=null!=(t=e.constantSuper)?t:e.isLoose,this.opts=e}getObjectRef(){return o.cloneNode(this.opts.objectRef||this.opts.getObjectRef())}getSuperRef(){return this.opts.superRef?o.cloneNode(this.opts.superRef):this.opts.getSuperRef?o.cloneNode(this.opts.getSuperRef()):void 0}replace(){this.opts.refToPreserve&&this.methodPath.traverse(p,{refName:this.opts.refToPreserve.name});const e=this.constantSuper?d:f;(0,s.default)(this.methodPath,u,Object.assign({file:this.file,scope:this.methodPath.scope,isDerivedConstructor:this.isDerivedConstructor,isStatic:this.isStatic,isPrivateMethod:this.isPrivateMethod,getObjectRef:this.getObjectRef.bind(this),getSuperRef:this.getSuperRef.bind(this)},e))}}},(e,t,r)=>{const n=r(12);e.exports=(e,t,r)=>0===n(e,t,r)},(e,t,r)=>{const n=r(3);e.exports=(e,t,r)=>{const s=new n(e,r),i=new n(t,r);return s.compare(i)||s.compareBuild(i)}},(e,t,r)=>{const n=r(12);e.exports=(e,t,r)=>n(e,t,r)<0},(e,t,r)=>{const n=r(12);e.exports=(e,t,r)=>n(e,t,r)>=0},(e,t,r)=>{const n=r(12);e.exports=(e,t,r)=>n(e,t,r)<=0},(e,t,r)=>{const n=r(3),s=r(45),{ANY:i}=s,o=r(13),a=r(46),l=r(44),c=r(73),u=r(75),p=r(74);e.exports=(e,t,r,f)=>{let d,h,m,y,g;switch(e=new n(e,f),t=new o(t,f),r){case">":d=l,h=u,m=c,y=">",g=">=";break;case"<":d=c,h=p,m=l,y="<",g="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(a(e,t,f))return!1;for(let r=0;r{e.semver===i&&(e=new s(">=0.0.0")),o=o||e,a=a||e,d(e.semver,o.semver,f)?o=e:m(e.semver,a.semver,f)&&(a=e)})),o.operator===y||o.operator===g)return!1;if((!a.operator||a.operator===y)&&h(e,a.semver))return!1;if(a.operator===g&&m(e,a.semver))return!1}return!0}},(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.findConfigUpwards=function(e){return null},t.findPackageData=function*(e){return{filepath:e,directories:[],pkg:null,isPackage:!1}},t.findRelativeConfig=function*(e,t,r){return{config:null,ignore:null}},t.findRootConfig=function*(e,t,r){return null},t.loadConfig=function*(e,t,r,n){throw new Error(`Cannot load ${e} relative to ${t} in a browser`)},t.resolveShowConfigPath=function*(e){return null},t.resolvePlugin=function(e,t){return null},t.resolvePreset=function(e,t){return null},t.loadPlugin=function(e,t){throw new Error(`Cannot load plugin ${e} relative to ${t} in a browser`)},t.loadPreset=function(e,t){throw new Error(`Cannot load preset ${e} relative to ${t} in a browser`)},t.ROOT_CONFIG_FILENAMES=void 0,t.ROOT_CONFIG_FILENAMES=[]},(e,t,r)=>{"use strict";function n(){const e=r(14);return n=function(){return e},e}Object.defineProperty(t,"__esModule",{value:!0}),t.createConfigItem=function(e,t,r){return void 0!==r?l.errback(e,t,r):"function"==typeof t?l.errback(e,void 0,r):l.sync(e,t)},Object.defineProperty(t,"default",{enumerable:!0,get:function(){return s.default}}),t.createConfigItemAsync=t.createConfigItemSync=t.loadOptionsAsync=t.loadOptionsSync=t.loadOptions=t.loadPartialConfigAsync=t.loadPartialConfigSync=t.loadPartialConfig=void 0;var s=r(466),i=r(303),o=r(80);const a=n()((function*(e){var t;const r=yield*(0,s.default)(e);return null!=(t=null==r?void 0:r.options)?t:null})),l=n()(o.createConfigItem),c=e=>(t,r)=>(void 0===r&&"function"==typeof t&&(r=t,t=void 0),r?e.errback(t,r):e.sync(t)),u=c(i.loadPartialConfig);t.loadPartialConfig=u;const p=i.loadPartialConfig.sync;t.loadPartialConfigSync=p;const f=i.loadPartialConfig.async;t.loadPartialConfigAsync=f;const d=c(a);t.loadOptions=d;const h=a.sync;t.loadOptionsSync=h;const m=a.async;t.loadOptionsAsync=m;const y=l.sync;t.createConfigItemSync=y;const g=l.async;t.createConfigItemAsync=g},(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.default=class{constructor(e,t,r){this.key=void 0,this.manipulateOptions=void 0,this.post=void 0,this.pre=void 0,this.visitor=void 0,this.parserOverride=void 0,this.generatorOverride=void 0,this.options=void 0,this.key=e.name||r,this.manipulateOptions=e.manipulateOptions,this.post=e.post,this.pre=e.pre,this.visitor=e.visitor||{},this.parserOverride=e.parserOverride,this.generatorOverride=e.generatorOverride,this.options=t}}},(e,t,r)=>{"use strict";function n(){const e=r(8);return n=function(){return e},e}Object.defineProperty(t,"__esModule",{value:!0}),t.createItemFromDescriptor=i,t.createConfigItem=function*(e,{dirname:t=".",type:r}={}){return i(yield*(0,s.createDescriptor)(e,n().resolve(t),{type:r,alias:"programmatic item"}))},t.getItemDescriptor=function(e){if(null!=e&&e[o])return e._descriptor};var s=r(288);function i(e){return new a(e)}const o=Symbol.for("@babel/core@7 - ConfigItem");class a{constructor(e){this._descriptor=void 0,this[o]=!0,this.value=void 0,this.options=void 0,this.dirname=void 0,this.name=void 0,this.file=void 0,this._descriptor=e,Object.defineProperty(this,"_descriptor",{enumerable:!1}),Object.defineProperty(this,o,{enumerable:!1}),this.value=this._descriptor.value,this.options=this._descriptor.options,this.dirname=this._descriptor.dirname,this.name=this._descriptor.name,this.file=this._descriptor.file?{request:this._descriptor.file.request,resolved:this._descriptor.file.resolved}:void 0,Object.freeze(this)}}Object.freeze(a.prototype)},(e,t,r)=>{"use strict";function n(){const e=r(14);return n=function(){return e},e}Object.defineProperty(t,"__esModule",{value:!0}),t.makeWeakCache=l,t.makeWeakCacheSync=function(e){return o(l(e))},t.makeStrongCache=c,t.makeStrongCacheSync=function(e){return o(c(e))},t.assertSimpleType=h;var s=r(287),i=r(150);const o=e=>n()(e).sync;function*a(){return!0}function l(e){return u(WeakMap,e)}function c(e){return u(Map,e)}function u(e,t){const r=new e,n=new e,o=new e;return function*(e,a){const l=yield*(0,s.isAsync)(),c=l?n:r,u=yield*function*(e,t,r,n,i){const o=yield*p(t,n,i);if(o.valid)return o;if(e){const e=yield*p(r,n,i);if(e.valid)return{valid:!0,value:yield*(0,s.waitFor)(e.value.promise)}}return{valid:!1,value:null}}(l,c,o,e,a);if(u.valid)return u.value;const h=new d(a),y=t(e,h);let g,b;if((0,i.isIterableIterator)(y)){const t=y;b=yield*(0,s.onFirstPause)(t,(()=>{g=function(e,t,r){const n=new m;return f(t,e,r,n),n}(h,o,e)}))}else b=y;return f(c,h,e,b),g&&(o.delete(e),g.release(b)),b}}function*p(e,t,r){const n=e.get(t);if(n)for(const{value:e,valid:t}of n)if(yield*t(r))return{valid:!0,value:e};return{valid:!1,value:null}}function f(e,t,r,n){t.configured()||t.forever();let s=e.get(r);switch(t.deactivate(),t.mode()){case"forever":s=[{value:n,valid:a}],e.set(r,s);break;case"invalidate":s=[{value:n,valid:t.validator()}],e.set(r,s);break;case"valid":s?s.push({value:n,valid:t.validator()}):(s=[{value:n,valid:t.validator()}],e.set(r,s))}}class d{constructor(e){this._active=!0,this._never=!1,this._forever=!1,this._invalidate=!1,this._configured=!1,this._pairs=[],this._data=void 0,this._data=e}simple(){return function(e){function t(t){if("boolean"!=typeof t)return e.using((()=>h(t())));t?e.forever():e.never()}return t.forever=()=>e.forever(),t.never=()=>e.never(),t.using=t=>e.using((()=>h(t()))),t.invalidate=t=>e.invalidate((()=>h(t()))),t}(this)}mode(){return this._never?"never":this._forever?"forever":this._invalidate?"invalidate":"valid"}forever(){if(!this._active)throw new Error("Cannot change caching after evaluation has completed.");if(this._never)throw new Error("Caching has already been configured with .never()");this._forever=!0,this._configured=!0}never(){if(!this._active)throw new Error("Cannot change caching after evaluation has completed.");if(this._forever)throw new Error("Caching has already been configured with .forever()");this._never=!0,this._configured=!0}using(e){if(!this._active)throw new Error("Cannot change caching after evaluation has completed.");if(this._never||this._forever)throw new Error("Caching has already been configured with .never or .forever()");this._configured=!0;const t=e(this._data),r=(0,s.maybeAsync)(e,"You appear to be using an async cache handler, but Babel has been called synchronously");return(0,s.isThenable)(t)?t.then((e=>(this._pairs.push([e,r]),e))):(this._pairs.push([t,r]),t)}invalidate(e){return this._invalidate=!0,this.using(e)}validator(){const e=this._pairs;return function*(t){for(const[r,n]of e)if(r!==(yield*n(t)))return!1;return!0}}deactivate(){this._active=!1}configured(){return this._configured}}function h(e){if((0,s.isThenable)(e))throw new Error("You appear to be using an async cache handler, which your current version of Babel does not support. We may add support for this in the future, but if you're on the most recent version of @babel/core and still seeing this error, then you'll need to synchronously handle your caching logic.");if(null!=e&&"string"!=typeof e&&"boolean"!=typeof e&&"number"!=typeof e)throw new Error("Cache keys must be either string, boolean, number, null, or undefined.");return e}class m{constructor(){this.released=!1,this.promise=void 0,this._resolve=void 0,this.promise=new Promise((e=>{this._resolve=e}))}release(e){this.released=!0,this._resolve(e)}}},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.validate=function(e,t){return p({type:"root",source:e},t)},t.checkNoUnwrappedItemOptionPairs=function(e,t,r,n){if(0===t)return;const s=e[t-1],i=e[t];s.file&&void 0===s.options&&"object"==typeof i.value&&(n.message+=`\n- Maybe you meant to use\n"${r}": [\n ["${s.file.request}", ${JSON.stringify(i.value,void 0,2)}]\n]\nTo be a valid ${r}, its name and options should be wrapped in a pair of brackets`)},t.assumptionsNames=void 0,r(79);var n=r(481),s=r(301);const i={cwd:s.assertString,root:s.assertString,rootMode:s.assertRootMode,configFile:s.assertConfigFileSearch,caller:s.assertCallerMetadata,filename:s.assertString,filenameRelative:s.assertString,code:s.assertBoolean,ast:s.assertBoolean,cloneInputAst:s.assertBoolean,envName:s.assertString},o={babelrc:s.assertBoolean,babelrcRoots:s.assertBabelrcSearch},a={extends:s.assertString,ignore:s.assertIgnoreList,only:s.assertIgnoreList,targets:s.assertTargets,browserslistConfigFile:s.assertConfigFileSearch,browserslistEnv:s.assertString},l={inputSourceMap:s.assertInputSourceMap,presets:s.assertPluginList,plugins:s.assertPluginList,passPerPreset:s.assertBoolean,assumptions:s.assertAssumptions,env:function(e,t){if("env"===e.parent.type)throw new Error(`${(0,s.msg)(e)} is not allowed inside of another .env block`);const r=e.parent,n=(0,s.assertObject)(e,t);if(n)for(const t of Object.keys(n)){const i=(0,s.assertObject)((0,s.access)(e,t),n[t]);i&&p({type:"env",name:t,parent:r},i)}return n},overrides:function(e,t){if("env"===e.parent.type)throw new Error(`${(0,s.msg)(e)} is not allowed inside an .env block`);if("overrides"===e.parent.type)throw new Error(`${(0,s.msg)(e)} is not allowed inside an .overrides block`);const r=e.parent,n=(0,s.assertArray)(e,t);if(n)for(const[t,i]of n.entries()){const n=(0,s.access)(e,t),o=(0,s.assertObject)(n,i);if(!o)throw new Error(`${(0,s.msg)(n)} must be an object`);p({type:"overrides",index:t,parent:r},o)}return n},test:s.assertConfigApplicableTest,include:s.assertConfigApplicableTest,exclude:s.assertConfigApplicableTest,retainLines:s.assertBoolean,comments:s.assertBoolean,shouldPrintComment:s.assertFunction,compact:s.assertCompact,minified:s.assertBoolean,auxiliaryCommentBefore:s.assertString,auxiliaryCommentAfter:s.assertString,sourceType:s.assertSourceType,wrapPluginVisitorMethod:s.assertFunction,highlightCode:s.assertBoolean,sourceMaps:s.assertSourceMaps,sourceMap:s.assertSourceMaps,sourceFileName:s.assertString,sourceRoot:s.assertString,parserOpts:s.assertObject,generatorOpts:s.assertObject};Object.assign(l,{getModuleId:s.assertFunction,moduleRoot:s.assertString,moduleIds:s.assertBoolean,moduleId:s.assertString});const c=new Set(["arrayLikeIsIterable","constantReexports","constantSuper","enumerableModuleMeta","ignoreFunctionLength","ignoreToPrimitiveHint","iterableIsArray","mutableTemplateObject","noClassCalls","noDocumentAll","noNewArrows","objectRestNoSymbols","privateFieldsAsProperties","pureGetters","setClassMethods","setComputedProperties","setPublicClassFields","setSpreadProperties","skipForOfIteratorClosing","superIsCallableConstructor"]);function u(e){return"root"===e.type?e.source:u(e.parent)}function p(e,t){const r=u(e);return function(e){if(d(e,"sourceMap")&&d(e,"sourceMaps"))throw new Error(".sourceMap is an alias for .sourceMaps, cannot use both")}(t),Object.keys(t).forEach((n=>{const c={type:"option",name:n,parent:e};if("preset"===r&&a[n])throw new Error(`${(0,s.msg)(c)} is not allowed in preset options`);if("arguments"!==r&&i[n])throw new Error(`${(0,s.msg)(c)} is only allowed in root programmatic options`);if("arguments"!==r&&"configfile"!==r&&o[n]){if("babelrcfile"===r||"extendsfile"===r)throw new Error(`${(0,s.msg)(c)} is not allowed in .babelrc or "extends"ed files, only in root programmatic options, or babel.config.js/config file options`);throw new Error(`${(0,s.msg)(c)} is only allowed in root programmatic options, or babel.config.js/config file options`)}(l[n]||a[n]||o[n]||i[n]||f)(c,t[n])})),t}function f(e){const t=e.name;if(n.default[t]){const{message:r,version:i=5}=n.default[t];throw new Error(`Using removed Babel ${i} option: ${(0,s.msg)(e)} - ${r}`)}{const t=new Error(`Unknown option: ${(0,s.msg)(e)}. Check out https://babeljs.io/docs/en/babel-core/#options for more information about options.`);throw t.code="BABEL_UNKNOWN_OPTION",t}}function d(e,t){return Object.prototype.hasOwnProperty.call(e,t)}t.assumptionsNames=c},(e,t,r)=>{"use strict";e.exports=r(507)},(e,t,r)=>{"use strict";var n=r(7);let s=r(85),i=r(47),o=r(156),a=r(22),l=r(308),c=r(86),u=r(309),p=r(87),f=r(160),d=r(49),h=r(88),m=r(159),y=r(90),g=r(161),b=r(162),v=r(89),E=r(35),x=r(48);function S(...e){return 1===e.length&&Array.isArray(e[0])&&(e=e[0]),new l(e)}S.plugin=function(e,t){function r(...r){let n=t(...r);return n.postcssPlugin=e,n.postcssVersion=(new l).version,n}let s;return console&&console.warn&&n.env.LANG&&n.env.LANG.startsWith("cn"),Object.defineProperty(r,"postcss",{get:()=>(s||(s=r()),s)}),r.process=function(e,t,n){return S([r(n)]).process(e,t)},r},S.stringify=c,S.parse=g,S.fromJSON=u,S.list=b,S.comment=e=>new d(e),S.atRule=e=>new h(e),S.decl=e=>new i(e),S.rule=e=>new v(e),S.root=e=>new E(e),S.document=e=>new p(e),S.CssSyntaxError=s,S.Declaration=i,S.Container=a,S.Document=p,S.Comment=d,S.Warning=f,S.AtRule=h,S.Result=m,S.Input=y,S.Rule=v,S.Root=E,S.Node=x,o.registerPostcss(S),e.exports=S,S.default=S},(e,t,r)=>{"use strict";let{red:n,bold:s,gray:i,options:o}=r(513),a=r(319);class l extends Error{constructor(e,t,r,n,s,i){super(e),this.name="CssSyntaxError",this.reason=e,s&&(this.file=s),n&&(this.source=n),i&&(this.plugin=i),void 0!==t&&void 0!==r&&(this.line=t,this.column=r),this.setMessage(),Error.captureStackTrace&&Error.captureStackTrace(this,l)}setMessage(){this.message=this.plugin?this.plugin+": ":"",this.message+=this.file?this.file:"",void 0!==this.line&&(this.message+=":"+this.line+":"+this.column),this.message+=": "+this.reason}showSourceCode(e){if(!this.source)return"";let t=this.source;null==e&&(e=o.enabled),a&&e&&(t=a(t));let r,l,c=t.split(/\r?\n/),u=Math.max(this.line-3,0),p=Math.min(this.line+2,c.length),f=String(p).length;return e?(r=e=>s(n(e)),l=e=>i(e)):r=l=e=>e,c.slice(u,p).map(((e,t)=>{let n=u+1+t,s=" "+(" "+n).slice(-f)+" | ";if(n===this.line){let t=l(s.replace(/\d/g," "))+e.slice(0,this.column-1).replace(/[^\t]/g," ");return r(">")+l(s)+e+"\n "+t+r("^")}return" "+l(s)+e})).join("\n")}toString(){let e=this.showSourceCode();return e&&(e="\n\n"+e+"\n"),this.name+": "+this.message+e}}e.exports=l,l.default=l},(e,t,r)=>{"use strict";let n=r(155);function s(e,t){new n(t).stringify(e)}e.exports=s,s.default=s},(e,t,r)=>{"use strict";let n,s,i=r(22);class o extends i{constructor(e){super({type:"document",...e}),this.nodes||(this.nodes=[])}toResult(e={}){return new n(new s,this,e).stringify()}}o.registerLazyResult=e=>{n=e},o.registerProcessor=e=>{s=e},e.exports=o,o.default=o},(e,t,r)=>{"use strict";let n=r(22);class s extends n{constructor(e){super(e),this.type="atrule"}append(...e){return this.proxyOf.nodes||(this.nodes=[]),super.append(...e)}prepend(...e){return this.proxyOf.nodes||(this.nodes=[]),super.prepend(...e)}}e.exports=s,s.default=s,n.registerAtRule(s)},(e,t,r)=>{"use strict";let n=r(22),s=r(162);class i extends n{constructor(e){super(e),this.type="rule",this.nodes||(this.nodes=[])}get selectors(){return s.comma(this.selector)}set selectors(e){let t=this.selector?this.selector.match(/,\s*/):null,r=t?t[0]:","+this.raw("between","beforeOpen");this.selector=e.join(r)}}e.exports=i,i.default=i,n.registerRule(i)},(e,t,r)=>{"use strict";let{SourceMapConsumer:n,SourceMapGenerator:s}=r(157),{fileURLToPath:i,pathToFileURL:o}=r(321),{resolve:a,isAbsolute:l}=r(158),{nanoid:c}=r(325),u=r(319),p=r(85),f=r(163),d=Symbol("fromOffsetCache"),h=Boolean(n&&s),m=Boolean(a&&l);class y{constructor(e,t={}){if(null==e||"object"==typeof e&&!e.toString)throw new Error(`PostCSS received ${e} instead of CSS string`);if(this.css=e.toString(),"\ufeff"===this.css[0]||"￾"===this.css[0]?(this.hasBOM=!0,this.css=this.css.slice(1)):this.hasBOM=!1,t.from&&(!m||/^\w+:\/\//.test(t.from)||l(t.from)?this.file=t.from:this.file=a(t.from)),m&&h){let e=new f(this.css,t);if(e.text){this.map=e;let t=e.consumer().file;!this.file&&t&&(this.file=this.mapResolve(t))}}this.file||(this.id=""),this.map&&(this.map.file=this.from)}fromOffset(e){let t,r;if(this[d])r=this[d];else{let e=this.css.split("\n");r=new Array(e.length);let t=0;for(let n=0,s=e.length;n=t)n=r.length-1;else{let t,s=r.length-2;for(;n>1),e=r[t+1])){n=t;break}n=t+1}}return{line:n+1,col:e-r[n]+1}}error(e,t,r,n={}){let s;if(!r){let e=this.fromOffset(t);t=e.line,r=e.col}let i=this.origin(t,r);return s=i?new p(e,i.line,i.column,i.source,i.file,n.plugin):new p(e,t,r,this.css,this.file,n.plugin),s.input={line:t,column:r,source:this.css},this.file&&(o&&(s.input.url=o(this.file).toString()),s.input.file=this.file),s}origin(e,t){if(!this.map)return!1;let r,n=this.map.consumer(),s=n.originalPositionFor({line:e,column:t});if(!s.source)return!1;r=l(s.source)?o(s.source):new URL(s.source,this.map.consumer().sourceRoot||o(this.map.mapFile));let a={url:r.toString(),line:s.line,column:s.column};if("file:"===r.protocol){if(!i)throw new Error("file: protocol is not available in this PostCSS build");a.file=i(r)}let c=n.sourceContentFor(s.source);return c&&(a.source=c),a}mapResolve(e){return/^\w+:\/\//.test(e)?e:a(this.map.consumer().sourceRoot||this.map.root||".",e)}get from(){return this.file||this.id}toJSON(){let e={};for(let t of["hasBOM","css","file","id"])null!=this[t]&&(e[t]=this[t]);return this.map&&(e.map={...this.map},e.map.consumerCache&&(e.map.consumerCache=void 0)),e}}e.exports=y,y.default=y,u&&u.registerInput&&u.registerInput(y)},(e,t,r)=>{"use strict";t.__esModule=!0,t.stripComments=t.ensureObject=t.getProp=t.unesc=void 0;var n=a(r(98));t.unesc=n.default;var s=a(r(174));t.getProp=s.default;var i=a(r(175));t.ensureObject=i.default;var o=a(r(176));function a(e){return e&&e.__esModule?e:{default:e}}t.stripComments=o.default},e=>{"use strict"; - /*! https://mths.be/cssesc v3.0.0 by @mathias */var t={}.hasOwnProperty,r=/[ -,\.\/:-@\[-\^`\{-~]/,n=/[ -,\.\/:-@\[\]\^`\{-~]/,s=/(^|\\+)?(\\[A-F0-9]{1,6})\x20(?![a-fA-F0-9\x20])/g,i=function e(i,o){"single"!=(o=function(e,r){if(!e)return r;var n={};for(var s in r)n[s]=t.call(e,s)?e[s]:r[s];return n}(o,e.options)).quotes&&"double"!=o.quotes&&(o.quotes="single");for(var a="double"==o.quotes?'"':"'",l=o.isIdentifier,c=i.charAt(0),u="",p=0,f=i.length;p126){if(h>=55296&&h<=56319&&p{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.createClassFeaturePlugin=function({name:e,feature:t,loose:r,manipulateOptions:f,api:d={assumption:()=>{}}}){const h=d.assumption("setPublicClassFields"),m=d.assumption("privateFieldsAsProperties"),y=d.assumption("constantSuper"),g=d.assumption("noDocumentAll");if(!0===r){const e=[];void 0!==h&&e.push('"setPublicClassFields"'),void 0!==m&&e.push('"privateFieldsAsProperties"'),e.length}return{name:e,manipulateOptions:f,pre(){(0,c.enableFeature)(this.file,t,r),(!this.file.get(p)||this.file.get(p)0&&(0,l.injectInitialization)(e,f,k,((e,t)=>{if(!d)for(const r of b)r.node.static||r.traverse(e,t)})),(e=N(e)).insertBefore([...A,...O]),C.length>0&&e.insertAfter(C),I.length>0&&e.find((e=>e.isStatement()||e.isDeclaration())).insertAfter(I)},PrivateName(e){if(this.file.get(p)===u&&!e.parentPath.isPrivate({key:e.node}))throw e.buildCodeFrameError(`Unknown PrivateName "${e}"`)},ExportDefaultDeclaration(e){if(this.file.get(p)!==u)return;const t=e.get("declaration");t.isClassDeclaration()&&(0,a.hasDecorators)(t.node)&&(t.node.id?(0,i.default)(e):t.node.type="ClassExpression")}}}},Object.defineProperty(t,"injectInitialization",{enumerable:!0,get:function(){return l.injectInitialization}}),Object.defineProperty(t,"enableFeature",{enumerable:!0,get:function(){return c.enableFeature}}),Object.defineProperty(t,"FEATURES",{enumerable:!0,get:function(){return c.FEATURES}});var n=r(9),s=r(134),i=r(132),o=r(537),a=r(311),l=r(539),c=r(540);const u="7.14.6".split(".").reduce(((e,t)=>1e5*e+ +t),0),p="@babel/plugin-class-features/version"},e=>{const t=/^[0-9]+$/,r=(e,r)=>{const n=t.test(e),s=t.test(r);return n&&s&&(e=+e,r=+r),e===r?0:n&&!s?-1:s&&!n?1:er(t,e)}},function(e,t){!function(e){"use strict";class t{constructor(){this.should_skip=!1,this.should_remove=!1,this.replacement=null,this.context={skip:()=>this.should_skip=!0,remove:()=>this.should_remove=!0,replace:e=>this.replacement=e}}replace(e,t,r,n){e&&(null!==r?e[t][r]=n:e[t]=n)}remove(e,t,r){e&&(null!==r?e[t].splice(r,1):delete e[t])}}class r extends t{constructor(e,t){super(),this.enter=e,this.leave=t}visit(e,t,r,n){if(e){if(this.enter){const s=this.should_skip,i=this.should_remove,o=this.replacement;this.should_skip=!1,this.should_remove=!1,this.replacement=null,this.enter.call(this.context,e,t,r,n),this.replacement&&(e=this.replacement,this.replace(t,r,n,e)),this.should_remove&&this.remove(t,r,n);const a=this.should_skip,l=this.should_remove;if(this.should_skip=s,this.should_remove=i,this.replacement=o,a)return e;if(l)return null}for(const t in e){const r=e[t];if("object"==typeof r)if(Array.isArray(r))for(let n=0;n{"use strict";t.__esModule=!0,t.default=void 0;var n,s=(n=r(172))&&n.__esModule?n:{default:n},i=function(e){if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var t=o();if(t&&t.has(e))return t.get(e);var r={},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var s in e)if(Object.prototype.hasOwnProperty.call(e,s)){var i=n?Object.getOwnPropertyDescriptor(e,s):null;i&&(i.get||i.set)?Object.defineProperty(r,s,i):r[s]=e[s]}return r.default=e,t&&t.set(e,r),r}(r(166));function o(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return o=function(){return e},e}var a=function(e){return new s.default(e)};Object.assign(a,i),delete a.__esModule;var l=a;t.default=l,e.exports=t.default},(e,t,r)=>{"use strict";t.__esModule=!0,t.default=void 0;var n,s=(n=r(52))&&n.__esModule?n:{default:n},i=r(5);function o(e,t){for(var r=0;r{"use strict";function r(e){for(var t=e.toLowerCase(),r="",n=!1,s=0;s<6&&void 0!==t[s];s++){var i=t.charCodeAt(s);if(n=32===i,!(i>=97&&i<=102||i>=48&&i<=57))break;r+=t[s]}if(0!==r.length){var o=parseInt(r,16);return o>=55296&&o<=57343||0===o||o>1114111?["�",r.length+(n?1:0)]:[String.fromCodePoint(o),r.length+(n?1:0)]}}t.__esModule=!0,t.default=function(e){if(!n.test(e))return e;for(var t="",s=0;s{"use strict";t.__esModule=!0,t.default=void 0;var n,s=(n=r(52))&&n.__esModule?n:{default:n},i=r(5);function o(e,t){return(o=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var a=function(e){var t,r;function n(t){var r;return(r=e.call(this,t)||this).type=i.SELECTOR,r}return r=e,(t=n).prototype=Object.create(r.prototype),t.prototype.constructor=t,o(t,r),n}(s.default);t.default=a,e.exports=t.default},(e,t,r)=>{"use strict";t.__esModule=!0,t.default=void 0;var n=a(r(92)),s=r(91),i=a(r(15)),o=r(5);function a(e){return e&&e.__esModule?e:{default:e}}function l(e,t){for(var r=0;r{"use strict";t.__esModule=!0,t.default=void 0;var n,s=(n=r(15))&&n.__esModule?n:{default:n},i=r(5);function o(e,t){return(o=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var a=function(e){var t,r;function n(t){var r;return(r=e.call(this,t)||this).type=i.COMMENT,r}return r=e,(t=n).prototype=Object.create(r.prototype),t.prototype.constructor=t,o(t,r),n}(s.default);t.default=a,e.exports=t.default},(e,t,r)=>{"use strict";t.__esModule=!0,t.default=void 0;var n,s=(n=r(15))&&n.__esModule?n:{default:n},i=r(5);function o(e,t){return(o=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var a=function(e){var t,r;function n(t){var r;return(r=e.call(this,t)||this).type=i.ID,r}return r=e,(t=n).prototype=Object.create(r.prototype),t.prototype.constructor=t,o(t,r),n.prototype.valueToString=function(){return"#"+e.prototype.valueToString.call(this)},n}(s.default);t.default=a,e.exports=t.default},(e,t,r)=>{"use strict";t.__esModule=!0,t.default=void 0;var n,s=(n=r(53))&&n.__esModule?n:{default:n},i=r(5);function o(e,t){return(o=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var a=function(e){var t,r;function n(t){var r;return(r=e.call(this,t)||this).type=i.TAG,r}return r=e,(t=n).prototype=Object.create(r.prototype),t.prototype.constructor=t,o(t,r),n}(s.default);t.default=a,e.exports=t.default},(e,t,r)=>{"use strict";t.__esModule=!0,t.default=void 0;var n,s=(n=r(15))&&n.__esModule?n:{default:n},i=r(5);function o(e,t){return(o=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var a=function(e){var t,r;function n(t){var r;return(r=e.call(this,t)||this).type=i.STRING,r}return r=e,(t=n).prototype=Object.create(r.prototype),t.prototype.constructor=t,o(t,r),n}(s.default);t.default=a,e.exports=t.default},(e,t,r)=>{"use strict";t.__esModule=!0,t.default=void 0;var n,s=(n=r(52))&&n.__esModule?n:{default:n},i=r(5);function o(e,t){return(o=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var a=function(e){var t,r;function n(t){var r;return(r=e.call(this,t)||this).type=i.PSEUDO,r}return r=e,(t=n).prototype=Object.create(r.prototype),t.prototype.constructor=t,o(t,r),n.prototype.toString=function(){var e=this.length?"("+this.map(String).join(",")+")":"";return[this.rawSpaceBefore,this.stringifyProperty("value"),e,this.rawSpaceAfter].join("")},n}(s.default);t.default=a,e.exports=t.default},(e,t,r)=>{"use strict";t.__esModule=!0,t.default=void 0;var n,s=(n=r(53))&&n.__esModule?n:{default:n},i=r(5);function o(e,t){return(o=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var a=function(e){var t,r;function n(t){var r;return(r=e.call(this,t)||this).type=i.UNIVERSAL,r.value="*",r}return r=e,(t=n).prototype=Object.create(r.prototype),t.prototype.constructor=t,o(t,r),n}(s.default);t.default=a,e.exports=t.default},(e,t,r)=>{"use strict";t.__esModule=!0,t.default=void 0;var n,s=(n=r(15))&&n.__esModule?n:{default:n},i=r(5);function o(e,t){return(o=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var a=function(e){var t,r;function n(t){var r;return(r=e.call(this,t)||this).type=i.COMBINATOR,r}return r=e,(t=n).prototype=Object.create(r.prototype),t.prototype.constructor=t,o(t,r),n}(s.default);t.default=a,e.exports=t.default},(e,t,r)=>{"use strict";t.__esModule=!0,t.default=void 0;var n,s=(n=r(15))&&n.__esModule?n:{default:n},i=r(5);function o(e,t){return(o=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var a=function(e){var t,r;function n(t){var r;return(r=e.call(this,t)||this).type=i.NESTING,r.value="&",r}return r=e,(t=n).prototype=Object.create(r.prototype),t.prototype.constructor=t,o(t,r),n}(s.default);t.default=a,e.exports=t.default},(e,t,r)=>{var n=r(110);e.exports=function(e){return Object(n(e))}},e=>{e.exports=function(e){if(null==e)throw TypeError("Can't call method on "+e);return e}},(e,t,r)=>{var n=r(183),s=r(55);(e.exports=function(e,t){return s[e]||(s[e]=void 0!==t?t:{})})("versions",[]).push({version:"3.15.2",mode:n?"pure":"global",copyright:"© 2021 Denis Pushkarev (zloirock.ru)"})},(e,t,r)=>{var n=r(31),s=r(113),i=r(57),o=r(115),a=Object.defineProperty;t.f=n?a:function(e,t,r){if(i(e),t=o(t,!0),i(r),s)try{return a(e,t,r)}catch(e){}if("get"in r||"set"in r)throw TypeError("Accessors not supported");return"value"in r&&(e[t]=r.value),e}},(e,t,r)=>{var n=r(31),s=r(16),i=r(114);e.exports=!n&&!s((function(){return 7!=Object.defineProperty(i("div"),"a",{get:function(){return 7}}).a}))},(e,t,r)=>{var n=r(2),s=r(24),i=n.document,o=s(i)&&s(i.createElement);e.exports=function(e){return o?i.createElement(e):{}}},(e,t,r)=>{var n=r(24);e.exports=function(e,t){if(!n(e))return e;var r,s;if(t&&"function"==typeof(r=e.toString)&&!n(s=r.call(e)))return s;if("function"==typeof(r=e.valueOf)&&!n(s=r.call(e)))return s;if(!t&&"function"==typeof(r=e.toString)&&!n(s=r.call(e)))return s;throw TypeError("Can't convert object to primitive value")}},e=>{e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},(e,t,r)=>{var n=r(118),s=r(16);e.exports=!!Object.getOwnPropertySymbols&&!s((function(){var e=Symbol();return!String(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&n&&n<41}))},(e,t,r)=>{var n,s,i=r(2),o=r(33),a=i.process,l=a&&a.versions,c=l&&l.v8;c?s=(n=c.split("."))[0]<4?1:n[0]+n[1]:o&&(!(n=o.match(/Edge\/(\d+)/))||n[1]>=74)&&(n=o.match(/Chrome\/(\d+)/))&&(s=n[1]),e.exports=s&&+s},(e,t,r)=>{var n=r(2),s=r(32),i=r(17),o=r(56),a=r(120),l=r(186),c=l.get,u=l.enforce,p=String(String).split("String");(e.exports=function(e,t,r,a){var l,c=!!a&&!!a.unsafe,f=!!a&&!!a.enumerable,d=!!a&&!!a.noTargetGet;"function"==typeof r&&("string"!=typeof t||i(r,"name")||s(r,"name",t),(l=u(r)).source||(l.source=p.join("string"==typeof t?t:""))),e!==n?(c?!d&&e[t]&&(f=!0):delete e[t],f?e[t]=r:s(e,t,r)):f?e[t]=r:o(t,r)})(Function.prototype,"toString",(function(){return"function"==typeof this&&c(this).source||a(this)}))},(e,t,r)=>{var n=r(55),s=Function.toString;"function"!=typeof n.inspectSource&&(n.inspectSource=function(e){return s.call(e)}),e.exports=n.inspectSource},(e,t,r)=>{var n=r(111),s=r(58),i=n("keys");e.exports=function(e){return i[e]||(i[e]=s(e))}},e=>{e.exports={}},e=>{e.exports=function(e){if("function"!=typeof e)throw TypeError(String(e)+" is not a function");return e}},(e,t,r)=>{var n=r(125),s=Math.min;e.exports=function(e){return e>0?s(n(e),9007199254740991):0}},e=>{var t=Math.ceil,r=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?r:t)(e)}},(e,t,r)=>{"use strict";function n(){const e=r(211);return n=function(){return e},e}function s(){const e=r(10);return s=function(){return e},e}function i(){const e=r(39);return i=function(){return e},e}function o(){const e=r(0);return o=function(){return e},e}function a(){const e=r(239);return a=function(){return e},e}function l(){const e=r(28);return l=function(){return e},e}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;const c={enter(e,t){const r=e.node.loc;r&&(t.loc=r,e.stop())}};class u{constructor(e,{code:t,ast:r,inputMap:n}){this._map=new Map,this.opts=void 0,this.declarations={},this.path=null,this.ast={},this.scope=void 0,this.metadata={},this.code="",this.inputMap=null,this.hub={file:this,getCode:()=>this.code,getScope:()=>this.scope,addHelper:this.addHelper.bind(this),buildError:this.buildCodeFrameError.bind(this)},this.opts=e,this.code=t,this.ast=r,this.inputMap=n,this.path=s().NodePath.get({hub:this.hub,parentPath:null,parent:this.ast,container:this.ast,key:"program"}).setContext(),this.scope=this.path.scope}get shebang(){const{interpreter:e}=this.path.node;return e?e.value:""}set shebang(e){e?this.path.get("interpreter").replaceWith(o().interpreterDirective(e)):this.path.get("interpreter").remove()}set(e,t){if("helpersNamespace"===e)throw new Error("Babel 7.0.0-beta.56 has dropped support for the 'helpersNamespace' utility.If you are using @babel/plugin-external-helpers you will need to use a newer version than the one you currently have installed. If you have your own implementation, you'll want to explore using 'helperGenerator' alongside 'file.availableHelper()'.");this._map.set(e,t)}get(e){return this._map.get(e)}has(e){return this._map.has(e)}getModuleName(){return(0,a().getModuleName)(this.opts,this.opts)}addImport(){throw new Error("This API has been removed. If you're looking for this functionality in Babel 7, you should import the '@babel/helper-module-imports' module and use the functions exposed from that module, such as 'addNamed' or 'addDefault'.")}availableHelper(e,t){let r;try{r=n().minVersion(e)}catch(e){if("BABEL_HELPER_UNKNOWN"!==e.code)throw e;return!1}return"string"!=typeof t||(l().valid(t)&&(t=`^${t}`),!l().intersects(`<${r}`,t)&&!l().intersects(">=8.0.0",t))}addHelper(e){const t=this.declarations[e];if(t)return o().cloneNode(t);const r=this.get("helperGenerator");if(r){const t=r(e);if(t)return t}n().ensure(e,u);const s=this.declarations[e]=this.scope.generateUidIdentifier(e),i={};for(const t of n().getDependencies(e))i[t]=this.addHelper(t);const{nodes:a,globals:l}=n().get(e,(e=>i[e]),s,Object.keys(this.scope.getAllBindings()));return l.forEach((e=>{this.path.scope.hasBinding(e,!0)&&this.path.scope.rename(e)})),a.forEach((e=>{e._compact=!0})),this.path.unshiftContainer("body",a),this.path.get("body").forEach((e=>{-1!==a.indexOf(e.node)&&e.isVariableDeclaration()&&this.scope.registerDeclaration(e)})),s}addTemplateObject(){throw new Error("This function has been moved into the template literal transform itself.")}buildCodeFrameError(e,t,r=SyntaxError){let n=e&&(e.loc||e._loc);if(!n&&e){const r={loc:null};(0,s().default)(e,c,this.scope,r),n=r.loc;let i="This is an error on an internal node. Probably an internal error.";n&&(i+=" Location has been estimated."),t+=` (${i})`}if(n){const{highlightCode:e=!0}=this.opts;t+="\n"+(0,i().codeFrameColumns)(this.code,{start:{line:n.start.line,column:n.start.column+1},end:n.end&&n.start.line===n.end.line?{line:n.end.line,column:n.end.column+1}:void 0},{highlightCode:e})}return new r(t)}}t.default=u},(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const r=Object.keys(t);for(const n of r)if(e[n]!==t[n])return!1;return!0}},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.classMethodOrDeclareMethodCommon=t.classMethodOrPropertyCommon=t.patternLikeCommon=t.functionDeclarationCommon=t.functionTypeAnnotationCommon=t.functionCommon=void 0,r(62),r(38),r(63);var n=r(25),s=r(20);(0,s.default)("ArrayExpression",{fields:{elements:{validate:(0,s.chain)((0,s.assertValueType)("array"),(0,s.assertEach)((0,s.assertNodeOrValueType)("null","Expression","SpreadElement"))),default:[]}},visitor:["elements"],aliases:["Expression"]}),(0,s.default)("AssignmentExpression",{fields:{operator:{validate:(0,s.assertValueType)("string")},left:{validate:(0,s.assertNodeType)("LVal")},right:{validate:(0,s.assertNodeType)("Expression")}},builder:["operator","left","right"],visitor:["left","right"],aliases:["Expression"]}),(0,s.default)("BinaryExpression",{builder:["operator","left","right"],fields:{operator:{validate:(0,s.assertOneOf)(...n.BINARY_OPERATORS)},left:{validate:function(){const e=(0,s.assertNodeType)("Expression"),t=(0,s.assertNodeType)("Expression","PrivateName"),r=function(r,n,s){("in"===r.operator?t:e)(r,n,s)};return r.oneOfNodeTypes=["Expression","PrivateName"],r}()},right:{validate:(0,s.assertNodeType)("Expression")}},visitor:["left","right"],aliases:["Binary","Expression"]}),(0,s.default)("InterpreterDirective",{builder:["value"],fields:{value:{validate:(0,s.assertValueType)("string")}}}),(0,s.default)("Directive",{visitor:["value"],fields:{value:{validate:(0,s.assertNodeType)("DirectiveLiteral")}}}),(0,s.default)("DirectiveLiteral",{builder:["value"],fields:{value:{validate:(0,s.assertValueType)("string")}}}),(0,s.default)("BlockStatement",{builder:["body","directives"],visitor:["directives","body"],fields:{directives:{validate:(0,s.chain)((0,s.assertValueType)("array"),(0,s.assertEach)((0,s.assertNodeType)("Directive"))),default:[]},body:{validate:(0,s.chain)((0,s.assertValueType)("array"),(0,s.assertEach)((0,s.assertNodeType)("Statement")))}},aliases:["Scopable","BlockParent","Block","Statement"]}),(0,s.default)("BreakStatement",{visitor:["label"],fields:{label:{validate:(0,s.assertNodeType)("Identifier"),optional:!0}},aliases:["Statement","Terminatorless","CompletionStatement"]}),(0,s.default)("CallExpression",{visitor:["callee","arguments","typeParameters","typeArguments"],builder:["callee","arguments"],aliases:["Expression"],fields:Object.assign({callee:{validate:(0,s.assertNodeType)("Expression","V8IntrinsicIdentifier")},arguments:{validate:(0,s.chain)((0,s.assertValueType)("array"),(0,s.assertEach)((0,s.assertNodeType)("Expression","SpreadElement","JSXNamespacedName","ArgumentPlaceholder")))}},{optional:{validate:(0,s.assertOneOf)(!0,!1),optional:!0}},{typeArguments:{validate:(0,s.assertNodeType)("TypeParameterInstantiation"),optional:!0},typeParameters:{validate:(0,s.assertNodeType)("TSTypeParameterInstantiation"),optional:!0}})}),(0,s.default)("CatchClause",{visitor:["param","body"],fields:{param:{validate:(0,s.assertNodeType)("Identifier","ArrayPattern","ObjectPattern"),optional:!0},body:{validate:(0,s.assertNodeType)("BlockStatement")}},aliases:["Scopable","BlockParent"]}),(0,s.default)("ConditionalExpression",{visitor:["test","consequent","alternate"],fields:{test:{validate:(0,s.assertNodeType)("Expression")},consequent:{validate:(0,s.assertNodeType)("Expression")},alternate:{validate:(0,s.assertNodeType)("Expression")}},aliases:["Expression","Conditional"]}),(0,s.default)("ContinueStatement",{visitor:["label"],fields:{label:{validate:(0,s.assertNodeType)("Identifier"),optional:!0}},aliases:["Statement","Terminatorless","CompletionStatement"]}),(0,s.default)("DebuggerStatement",{aliases:["Statement"]}),(0,s.default)("DoWhileStatement",{visitor:["test","body"],fields:{test:{validate:(0,s.assertNodeType)("Expression")},body:{validate:(0,s.assertNodeType)("Statement")}},aliases:["Statement","BlockParent","Loop","While","Scopable"]}),(0,s.default)("EmptyStatement",{aliases:["Statement"]}),(0,s.default)("ExpressionStatement",{visitor:["expression"],fields:{expression:{validate:(0,s.assertNodeType)("Expression")}},aliases:["Statement","ExpressionWrapper"]}),(0,s.default)("File",{builder:["program","comments","tokens"],visitor:["program"],fields:{program:{validate:(0,s.assertNodeType)("Program")},comments:{validate:Object.assign((()=>{}),{each:{oneOfNodeTypes:["CommentBlock","CommentLine"]}}),optional:!0},tokens:{validate:(0,s.assertEach)(Object.assign((()=>{}),{type:"any"})),optional:!0}}}),(0,s.default)("ForInStatement",{visitor:["left","right","body"],aliases:["Scopable","Statement","For","BlockParent","Loop","ForXStatement"],fields:{left:{validate:(0,s.assertNodeType)("VariableDeclaration","LVal")},right:{validate:(0,s.assertNodeType)("Expression")},body:{validate:(0,s.assertNodeType)("Statement")}}}),(0,s.default)("ForStatement",{visitor:["init","test","update","body"],aliases:["Scopable","Statement","For","BlockParent","Loop"],fields:{init:{validate:(0,s.assertNodeType)("VariableDeclaration","Expression"),optional:!0},test:{validate:(0,s.assertNodeType)("Expression"),optional:!0},update:{validate:(0,s.assertNodeType)("Expression"),optional:!0},body:{validate:(0,s.assertNodeType)("Statement")}}});const i={params:{validate:(0,s.chain)((0,s.assertValueType)("array"),(0,s.assertEach)((0,s.assertNodeType)("Identifier","Pattern","RestElement")))},generator:{default:!1},async:{default:!1}};t.functionCommon=i;const o={returnType:{validate:(0,s.assertNodeType)("TypeAnnotation","TSTypeAnnotation","Noop"),optional:!0},typeParameters:{validate:(0,s.assertNodeType)("TypeParameterDeclaration","TSTypeParameterDeclaration","Noop"),optional:!0}};t.functionTypeAnnotationCommon=o;const a=Object.assign({},i,{declare:{validate:(0,s.assertValueType)("boolean"),optional:!0},id:{validate:(0,s.assertNodeType)("Identifier"),optional:!0}});t.functionDeclarationCommon=a,(0,s.default)("FunctionDeclaration",{builder:["id","params","body","generator","async"],visitor:["id","params","body","returnType","typeParameters"],fields:Object.assign({},a,o,{body:{validate:(0,s.assertNodeType)("BlockStatement")}}),aliases:["Scopable","Function","BlockParent","FunctionParent","Statement","Pureish","Declaration"],validate:()=>{}}),(0,s.default)("FunctionExpression",{inherits:"FunctionDeclaration",aliases:["Scopable","Function","BlockParent","FunctionParent","Expression","Pureish"],fields:Object.assign({},i,o,{id:{validate:(0,s.assertNodeType)("Identifier"),optional:!0},body:{validate:(0,s.assertNodeType)("BlockStatement")}})});const l={typeAnnotation:{validate:(0,s.assertNodeType)("TypeAnnotation","TSTypeAnnotation","Noop"),optional:!0},decorators:{validate:(0,s.chain)((0,s.assertValueType)("array"),(0,s.assertEach)((0,s.assertNodeType)("Decorator")))}};t.patternLikeCommon=l,(0,s.default)("Identifier",{builder:["name"],visitor:["typeAnnotation","decorators"],aliases:["Expression","PatternLike","LVal","TSEntityName"],fields:Object.assign({},l,{name:{validate:(0,s.chain)((0,s.assertValueType)("string"),Object.assign((function(e,t,r){}),{type:"string"}))},optional:{validate:(0,s.assertValueType)("boolean"),optional:!0}}),validate(e,t,r){}}),(0,s.default)("IfStatement",{visitor:["test","consequent","alternate"],aliases:["Statement","Conditional"],fields:{test:{validate:(0,s.assertNodeType)("Expression")},consequent:{validate:(0,s.assertNodeType)("Statement")},alternate:{optional:!0,validate:(0,s.assertNodeType)("Statement")}}}),(0,s.default)("LabeledStatement",{visitor:["label","body"],aliases:["Statement"],fields:{label:{validate:(0,s.assertNodeType)("Identifier")},body:{validate:(0,s.assertNodeType)("Statement")}}}),(0,s.default)("StringLiteral",{builder:["value"],fields:{value:{validate:(0,s.assertValueType)("string")}},aliases:["Expression","Pureish","Literal","Immutable"]}),(0,s.default)("NumericLiteral",{builder:["value"],deprecatedAlias:"NumberLiteral",fields:{value:{validate:(0,s.assertValueType)("number")}},aliases:["Expression","Pureish","Literal","Immutable"]}),(0,s.default)("NullLiteral",{aliases:["Expression","Pureish","Literal","Immutable"]}),(0,s.default)("BooleanLiteral",{builder:["value"],fields:{value:{validate:(0,s.assertValueType)("boolean")}},aliases:["Expression","Pureish","Literal","Immutable"]}),(0,s.default)("RegExpLiteral",{builder:["pattern","flags"],deprecatedAlias:"RegexLiteral",aliases:["Expression","Pureish","Literal"],fields:{pattern:{validate:(0,s.assertValueType)("string")},flags:{validate:(0,s.chain)((0,s.assertValueType)("string"),Object.assign((function(e,t,r){}),{type:"string"})),default:""}}}),(0,s.default)("LogicalExpression",{builder:["operator","left","right"],visitor:["left","right"],aliases:["Binary","Expression"],fields:{operator:{validate:(0,s.assertOneOf)(...n.LOGICAL_OPERATORS)},left:{validate:(0,s.assertNodeType)("Expression")},right:{validate:(0,s.assertNodeType)("Expression")}}}),(0,s.default)("MemberExpression",{builder:["object","property","computed","optional"],visitor:["object","property"],aliases:["Expression","LVal"],fields:Object.assign({object:{validate:(0,s.assertNodeType)("Expression")},property:{validate:function(){const e=(0,s.assertNodeType)("Identifier","PrivateName"),t=(0,s.assertNodeType)("Expression"),r=function(r,n,s){(r.computed?t:e)(r,n,s)};return r.oneOfNodeTypes=["Expression","Identifier","PrivateName"],r}()},computed:{default:!1}},{optional:{validate:(0,s.assertOneOf)(!0,!1),optional:!0}})}),(0,s.default)("NewExpression",{inherits:"CallExpression"}),(0,s.default)("Program",{visitor:["directives","body"],builder:["body","directives","sourceType","interpreter"],fields:{sourceFile:{validate:(0,s.assertValueType)("string")},sourceType:{validate:(0,s.assertOneOf)("script","module"),default:"script"},interpreter:{validate:(0,s.assertNodeType)("InterpreterDirective"),default:null,optional:!0},directives:{validate:(0,s.chain)((0,s.assertValueType)("array"),(0,s.assertEach)((0,s.assertNodeType)("Directive"))),default:[]},body:{validate:(0,s.chain)((0,s.assertValueType)("array"),(0,s.assertEach)((0,s.assertNodeType)("Statement")))}},aliases:["Scopable","BlockParent","Block"]}),(0,s.default)("ObjectExpression",{visitor:["properties"],aliases:["Expression"],fields:{properties:{validate:(0,s.chain)((0,s.assertValueType)("array"),(0,s.assertEach)((0,s.assertNodeType)("ObjectMethod","ObjectProperty","SpreadElement")))}}}),(0,s.default)("ObjectMethod",{builder:["kind","key","params","body","computed","generator","async"],fields:Object.assign({},i,o,{kind:Object.assign({validate:(0,s.assertOneOf)("method","get","set")},{default:"method"}),computed:{default:!1},key:{validate:function(){const e=(0,s.assertNodeType)("Identifier","StringLiteral","NumericLiteral"),t=(0,s.assertNodeType)("Expression"),r=function(r,n,s){(r.computed?t:e)(r,n,s)};return r.oneOfNodeTypes=["Expression","Identifier","StringLiteral","NumericLiteral"],r}()},decorators:{validate:(0,s.chain)((0,s.assertValueType)("array"),(0,s.assertEach)((0,s.assertNodeType)("Decorator"))),optional:!0},body:{validate:(0,s.assertNodeType)("BlockStatement")}}),visitor:["key","params","body","decorators","returnType","typeParameters"],aliases:["UserWhitespacable","Function","Scopable","BlockParent","FunctionParent","Method","ObjectMember"]}),(0,s.default)("ObjectProperty",{builder:["key","value","computed","shorthand","decorators"],fields:{computed:{default:!1},key:{validate:function(){const e=(0,s.assertNodeType)("Identifier","StringLiteral","NumericLiteral"),t=(0,s.assertNodeType)("Expression"),r=function(r,n,s){(r.computed?t:e)(r,n,s)};return r.oneOfNodeTypes=["Expression","Identifier","StringLiteral","NumericLiteral"],r}()},value:{validate:(0,s.assertNodeType)("Expression","PatternLike")},shorthand:{validate:(0,s.chain)((0,s.assertValueType)("boolean"),Object.assign((function(e,t,r){}),{type:"boolean"}),(function(e,t,r){})),default:!1},decorators:{validate:(0,s.chain)((0,s.assertValueType)("array"),(0,s.assertEach)((0,s.assertNodeType)("Decorator"))),optional:!0}},visitor:["key","value","decorators"],aliases:["UserWhitespacable","Property","ObjectMember"],validate:((0,s.assertNodeType)("Identifier","Pattern"),(0,s.assertNodeType)("Expression"),function(e,t,r){})}),(0,s.default)("RestElement",{visitor:["argument","typeAnnotation"],builder:["argument"],aliases:["LVal","PatternLike"],deprecatedAlias:"RestProperty",fields:Object.assign({},l,{argument:{validate:(0,s.assertNodeType)("LVal")}}),validate(e,t){}}),(0,s.default)("ReturnStatement",{visitor:["argument"],aliases:["Statement","Terminatorless","CompletionStatement"],fields:{argument:{validate:(0,s.assertNodeType)("Expression"),optional:!0}}}),(0,s.default)("SequenceExpression",{visitor:["expressions"],fields:{expressions:{validate:(0,s.chain)((0,s.assertValueType)("array"),(0,s.assertEach)((0,s.assertNodeType)("Expression")))}},aliases:["Expression"]}),(0,s.default)("ParenthesizedExpression",{visitor:["expression"],aliases:["Expression","ExpressionWrapper"],fields:{expression:{validate:(0,s.assertNodeType)("Expression")}}}),(0,s.default)("SwitchCase",{visitor:["test","consequent"],fields:{test:{validate:(0,s.assertNodeType)("Expression"),optional:!0},consequent:{validate:(0,s.chain)((0,s.assertValueType)("array"),(0,s.assertEach)((0,s.assertNodeType)("Statement")))}}}),(0,s.default)("SwitchStatement",{visitor:["discriminant","cases"],aliases:["Statement","BlockParent","Scopable"],fields:{discriminant:{validate:(0,s.assertNodeType)("Expression")},cases:{validate:(0,s.chain)((0,s.assertValueType)("array"),(0,s.assertEach)((0,s.assertNodeType)("SwitchCase")))}}}),(0,s.default)("ThisExpression",{aliases:["Expression"]}),(0,s.default)("ThrowStatement",{visitor:["argument"],aliases:["Statement","Terminatorless","CompletionStatement"],fields:{argument:{validate:(0,s.assertNodeType)("Expression")}}}),(0,s.default)("TryStatement",{visitor:["block","handler","finalizer"],aliases:["Statement"],fields:{block:{validate:(0,s.chain)((0,s.assertNodeType)("BlockStatement"),Object.assign((function(e){}),{oneOfNodeTypes:["BlockStatement"]}))},handler:{optional:!0,validate:(0,s.assertNodeType)("CatchClause")},finalizer:{optional:!0,validate:(0,s.assertNodeType)("BlockStatement")}}}),(0,s.default)("UnaryExpression",{builder:["operator","argument","prefix"],fields:{prefix:{default:!0},argument:{validate:(0,s.assertNodeType)("Expression")},operator:{validate:(0,s.assertOneOf)(...n.UNARY_OPERATORS)}},visitor:["argument"],aliases:["UnaryLike","Expression"]}),(0,s.default)("UpdateExpression",{builder:["operator","argument","prefix"],fields:{prefix:{default:!1},argument:{validate:(0,s.assertNodeType)("Expression")},operator:{validate:(0,s.assertOneOf)(...n.UPDATE_OPERATORS)}},visitor:["argument"],aliases:["Expression"]}),(0,s.default)("VariableDeclaration",{builder:["kind","declarations"],visitor:["declarations"],aliases:["Statement","Declaration"],fields:{declare:{validate:(0,s.assertValueType)("boolean"),optional:!0},kind:{validate:(0,s.assertOneOf)("var","let","const")},declarations:{validate:(0,s.chain)((0,s.assertValueType)("array"),(0,s.assertEach)((0,s.assertNodeType)("VariableDeclarator")))}},validate(e,t,r){}}),(0,s.default)("VariableDeclarator",{visitor:["id","init"],fields:{id:{validate:(0,s.assertNodeType)("LVal")},definite:{optional:!0,validate:(0,s.assertValueType)("boolean")},init:{optional:!0,validate:(0,s.assertNodeType)("Expression")}}}),(0,s.default)("WhileStatement",{visitor:["test","body"],aliases:["Statement","BlockParent","Loop","While","Scopable"],fields:{test:{validate:(0,s.assertNodeType)("Expression")},body:{validate:(0,s.assertNodeType)("Statement")}}}),(0,s.default)("WithStatement",{visitor:["object","body"],aliases:["Statement"],fields:{object:{validate:(0,s.assertNodeType)("Expression")},body:{validate:(0,s.assertNodeType)("Statement")}}}),(0,s.default)("AssignmentPattern",{visitor:["left","right","decorators"],builder:["left","right"],aliases:["Pattern","PatternLike","LVal"],fields:Object.assign({},l,{left:{validate:(0,s.assertNodeType)("Identifier","ObjectPattern","ArrayPattern","MemberExpression")},right:{validate:(0,s.assertNodeType)("Expression")},decorators:{validate:(0,s.chain)((0,s.assertValueType)("array"),(0,s.assertEach)((0,s.assertNodeType)("Decorator"))),optional:!0}})}),(0,s.default)("ArrayPattern",{visitor:["elements","typeAnnotation"],builder:["elements"],aliases:["Pattern","PatternLike","LVal"],fields:Object.assign({},l,{elements:{validate:(0,s.chain)((0,s.assertValueType)("array"),(0,s.assertEach)((0,s.assertNodeOrValueType)("null","PatternLike")))},decorators:{validate:(0,s.chain)((0,s.assertValueType)("array"),(0,s.assertEach)((0,s.assertNodeType)("Decorator"))),optional:!0}})}),(0,s.default)("ArrowFunctionExpression",{builder:["params","body","async"],visitor:["params","body","returnType","typeParameters"],aliases:["Scopable","Function","BlockParent","FunctionParent","Expression","Pureish"],fields:Object.assign({},i,o,{expression:{validate:(0,s.assertValueType)("boolean")},body:{validate:(0,s.assertNodeType)("BlockStatement","Expression")}})}),(0,s.default)("ClassBody",{visitor:["body"],fields:{body:{validate:(0,s.chain)((0,s.assertValueType)("array"),(0,s.assertEach)((0,s.assertNodeType)("ClassMethod","ClassPrivateMethod","ClassProperty","ClassPrivateProperty","TSDeclareMethod","TSIndexSignature")))}}}),(0,s.default)("ClassExpression",{builder:["id","superClass","body","decorators"],visitor:["id","body","superClass","mixins","typeParameters","superTypeParameters","implements","decorators"],aliases:["Scopable","Class","Expression"],fields:{id:{validate:(0,s.assertNodeType)("Identifier"),optional:!0},typeParameters:{validate:(0,s.assertNodeType)("TypeParameterDeclaration","TSTypeParameterDeclaration","Noop"),optional:!0},body:{validate:(0,s.assertNodeType)("ClassBody")},superClass:{optional:!0,validate:(0,s.assertNodeType)("Expression")},superTypeParameters:{validate:(0,s.assertNodeType)("TypeParameterInstantiation","TSTypeParameterInstantiation"),optional:!0},implements:{validate:(0,s.chain)((0,s.assertValueType)("array"),(0,s.assertEach)((0,s.assertNodeType)("TSExpressionWithTypeArguments","ClassImplements"))),optional:!0},decorators:{validate:(0,s.chain)((0,s.assertValueType)("array"),(0,s.assertEach)((0,s.assertNodeType)("Decorator"))),optional:!0},mixins:{validate:(0,s.assertNodeType)("InterfaceExtends"),optional:!0}}}),(0,s.default)("ClassDeclaration",{inherits:"ClassExpression",aliases:["Scopable","Class","Statement","Declaration"],fields:{id:{validate:(0,s.assertNodeType)("Identifier")},typeParameters:{validate:(0,s.assertNodeType)("TypeParameterDeclaration","TSTypeParameterDeclaration","Noop"),optional:!0},body:{validate:(0,s.assertNodeType)("ClassBody")},superClass:{optional:!0,validate:(0,s.assertNodeType)("Expression")},superTypeParameters:{validate:(0,s.assertNodeType)("TypeParameterInstantiation","TSTypeParameterInstantiation"),optional:!0},implements:{validate:(0,s.chain)((0,s.assertValueType)("array"),(0,s.assertEach)((0,s.assertNodeType)("TSExpressionWithTypeArguments","ClassImplements"))),optional:!0},decorators:{validate:(0,s.chain)((0,s.assertValueType)("array"),(0,s.assertEach)((0,s.assertNodeType)("Decorator"))),optional:!0},mixins:{validate:(0,s.assertNodeType)("InterfaceExtends"),optional:!0},declare:{validate:(0,s.assertValueType)("boolean"),optional:!0},abstract:{validate:(0,s.assertValueType)("boolean"),optional:!0}},validate:((0,s.assertNodeType)("Identifier"),function(e,t,r){})}),(0,s.default)("ExportAllDeclaration",{visitor:["source"],aliases:["Statement","Declaration","ModuleDeclaration","ExportDeclaration"],fields:{source:{validate:(0,s.assertNodeType)("StringLiteral")},exportKind:(0,s.validateOptional)((0,s.assertOneOf)("type","value")),assertions:{optional:!0,validate:(0,s.chain)((0,s.assertValueType)("array"),(0,s.assertEach)((0,s.assertNodeType)("ImportAttribute")))}}}),(0,s.default)("ExportDefaultDeclaration",{visitor:["declaration"],aliases:["Statement","Declaration","ModuleDeclaration","ExportDeclaration"],fields:{declaration:{validate:(0,s.assertNodeType)("FunctionDeclaration","TSDeclareFunction","ClassDeclaration","Expression")}}}),(0,s.default)("ExportNamedDeclaration",{visitor:["declaration","specifiers","source"],aliases:["Statement","Declaration","ModuleDeclaration","ExportDeclaration"],fields:{declaration:{optional:!0,validate:(0,s.chain)((0,s.assertNodeType)("Declaration"),Object.assign((function(e,t,r){}),{oneOfNodeTypes:["Declaration"]}),(function(e,t,r){}))},assertions:{optional:!0,validate:(0,s.chain)((0,s.assertValueType)("array"),(0,s.assertEach)((0,s.assertNodeType)("ImportAttribute")))},specifiers:{default:[],validate:(0,s.chain)((0,s.assertValueType)("array"),(0,s.assertEach)(function(){const e=(0,s.assertNodeType)("ExportSpecifier","ExportDefaultSpecifier","ExportNamespaceSpecifier");return(0,s.assertNodeType)("ExportSpecifier"),e}()))},source:{validate:(0,s.assertNodeType)("StringLiteral"),optional:!0},exportKind:(0,s.validateOptional)((0,s.assertOneOf)("type","value"))}}),(0,s.default)("ExportSpecifier",{visitor:["local","exported"],aliases:["ModuleSpecifier"],fields:{local:{validate:(0,s.assertNodeType)("Identifier")},exported:{validate:(0,s.assertNodeType)("Identifier","StringLiteral")}}}),(0,s.default)("ForOfStatement",{visitor:["left","right","body"],builder:["left","right","body","await"],aliases:["Scopable","Statement","For","BlockParent","Loop","ForXStatement"],fields:{left:{validate:(0,s.assertNodeType)("VariableDeclaration","LVal")},right:{validate:(0,s.assertNodeType)("Expression")},body:{validate:(0,s.assertNodeType)("Statement")},await:{default:!1}}}),(0,s.default)("ImportDeclaration",{visitor:["specifiers","source"],aliases:["Statement","Declaration","ModuleDeclaration"],fields:{assertions:{optional:!0,validate:(0,s.chain)((0,s.assertValueType)("array"),(0,s.assertEach)((0,s.assertNodeType)("ImportAttribute")))},specifiers:{validate:(0,s.chain)((0,s.assertValueType)("array"),(0,s.assertEach)((0,s.assertNodeType)("ImportSpecifier","ImportDefaultSpecifier","ImportNamespaceSpecifier")))},source:{validate:(0,s.assertNodeType)("StringLiteral")},importKind:{validate:(0,s.assertOneOf)("type","typeof","value"),optional:!0}}}),(0,s.default)("ImportDefaultSpecifier",{visitor:["local"],aliases:["ModuleSpecifier"],fields:{local:{validate:(0,s.assertNodeType)("Identifier")}}}),(0,s.default)("ImportNamespaceSpecifier",{visitor:["local"],aliases:["ModuleSpecifier"],fields:{local:{validate:(0,s.assertNodeType)("Identifier")}}}),(0,s.default)("ImportSpecifier",{visitor:["local","imported"],aliases:["ModuleSpecifier"],fields:{local:{validate:(0,s.assertNodeType)("Identifier")},imported:{validate:(0,s.assertNodeType)("Identifier","StringLiteral")},importKind:{validate:(0,s.assertOneOf)("type","typeof"),optional:!0}}}),(0,s.default)("MetaProperty",{visitor:["meta","property"],aliases:["Expression"],fields:{meta:{validate:(0,s.chain)((0,s.assertNodeType)("Identifier"),Object.assign((function(e,t,r){}),{oneOfNodeTypes:["Identifier"]}))},property:{validate:(0,s.assertNodeType)("Identifier")}}});const c={abstract:{validate:(0,s.assertValueType)("boolean"),optional:!0},accessibility:{validate:(0,s.assertOneOf)("public","private","protected"),optional:!0},static:{default:!1},override:{default:!1},computed:{default:!1},optional:{validate:(0,s.assertValueType)("boolean"),optional:!0},key:{validate:(0,s.chain)(function(){const e=(0,s.assertNodeType)("Identifier","StringLiteral","NumericLiteral"),t=(0,s.assertNodeType)("Expression");return function(r,n,s){(r.computed?t:e)(r,n,s)}}(),(0,s.assertNodeType)("Identifier","StringLiteral","NumericLiteral","Expression"))}};t.classMethodOrPropertyCommon=c;const u=Object.assign({},i,c,{params:{validate:(0,s.chain)((0,s.assertValueType)("array"),(0,s.assertEach)((0,s.assertNodeType)("Identifier","Pattern","RestElement","TSParameterProperty")))},kind:{validate:(0,s.assertOneOf)("get","set","method","constructor"),default:"method"},access:{validate:(0,s.chain)((0,s.assertValueType)("string"),(0,s.assertOneOf)("public","private","protected")),optional:!0},decorators:{validate:(0,s.chain)((0,s.assertValueType)("array"),(0,s.assertEach)((0,s.assertNodeType)("Decorator"))),optional:!0}});t.classMethodOrDeclareMethodCommon=u,(0,s.default)("ClassMethod",{aliases:["Function","Scopable","BlockParent","FunctionParent","Method"],builder:["kind","key","params","body","computed","static","generator","async"],visitor:["key","params","body","decorators","returnType","typeParameters"],fields:Object.assign({},u,o,{body:{validate:(0,s.assertNodeType)("BlockStatement")}})}),(0,s.default)("ObjectPattern",{visitor:["properties","typeAnnotation","decorators"],builder:["properties"],aliases:["Pattern","PatternLike","LVal"],fields:Object.assign({},l,{properties:{validate:(0,s.chain)((0,s.assertValueType)("array"),(0,s.assertEach)((0,s.assertNodeType)("RestElement","ObjectProperty")))}})}),(0,s.default)("SpreadElement",{visitor:["argument"],aliases:["UnaryLike"],deprecatedAlias:"SpreadProperty",fields:{argument:{validate:(0,s.assertNodeType)("Expression")}}}),(0,s.default)("Super",{aliases:["Expression"]}),(0,s.default)("TaggedTemplateExpression",{visitor:["tag","quasi"],aliases:["Expression"],fields:{tag:{validate:(0,s.assertNodeType)("Expression")},quasi:{validate:(0,s.assertNodeType)("TemplateLiteral")},typeParameters:{validate:(0,s.assertNodeType)("TypeParameterInstantiation","TSTypeParameterInstantiation"),optional:!0}}}),(0,s.default)("TemplateElement",{builder:["value","tail"],fields:{value:{validate:(0,s.assertShape)({raw:{validate:(0,s.assertValueType)("string")},cooked:{validate:(0,s.assertValueType)("string"),optional:!0}})},tail:{default:!1}}}),(0,s.default)("TemplateLiteral",{visitor:["quasis","expressions"],aliases:["Expression","Literal"],fields:{quasis:{validate:(0,s.chain)((0,s.assertValueType)("array"),(0,s.assertEach)((0,s.assertNodeType)("TemplateElement")))},expressions:{validate:(0,s.chain)((0,s.assertValueType)("array"),(0,s.assertEach)((0,s.assertNodeType)("Expression","TSType")),(function(e,t,r){if(e.quasis.length!==r.length+1)throw new TypeError(`Number of ${e.type} quasis should be exactly one more than the number of expressions.\nExpected ${r.length+1} quasis but got ${e.quasis.length}`)}))}}}),(0,s.default)("YieldExpression",{builder:["argument","delegate"],visitor:["argument"],aliases:["Expression","Terminatorless"],fields:{delegate:{validate:(0,s.chain)((0,s.assertValueType)("boolean"),Object.assign((function(e,t,r){}),{type:"boolean"})),default:!1},argument:{optional:!0,validate:(0,s.assertNodeType)("Expression")}}}),(0,s.default)("AwaitExpression",{builder:["argument"],visitor:["argument"],aliases:["Expression","Terminatorless"],fields:{argument:{validate:(0,s.assertNodeType)("Expression")}}}),(0,s.default)("Import",{aliases:["Expression"]}),(0,s.default)("BigIntLiteral",{builder:["value"],fields:{value:{validate:(0,s.assertValueType)("string")}},aliases:["Expression","Pureish","Literal","Immutable"]}),(0,s.default)("ExportNamespaceSpecifier",{visitor:["exported"],aliases:["ModuleSpecifier"],fields:{exported:{validate:(0,s.assertNodeType)("Identifier")}}}),(0,s.default)("OptionalMemberExpression",{builder:["object","property","computed","optional"],visitor:["object","property"],aliases:["Expression"],fields:{object:{validate:(0,s.assertNodeType)("Expression")},property:{validate:function(){const e=(0,s.assertNodeType)("Identifier"),t=(0,s.assertNodeType)("Expression"),r=function(r,n,s){(r.computed?t:e)(r,n,s)};return r.oneOfNodeTypes=["Expression","Identifier"],r}()},computed:{default:!1},optional:{validate:(0,s.assertValueType)("boolean")}}}),(0,s.default)("OptionalCallExpression",{visitor:["callee","arguments","typeParameters","typeArguments"],builder:["callee","arguments","optional"],aliases:["Expression"],fields:{callee:{validate:(0,s.assertNodeType)("Expression")},arguments:{validate:(0,s.chain)((0,s.assertValueType)("array"),(0,s.assertEach)((0,s.assertNodeType)("Expression","SpreadElement","JSXNamespacedName","ArgumentPlaceholder")))},optional:{validate:(0,s.assertValueType)("boolean")},typeArguments:{validate:(0,s.assertNodeType)("TypeParameterInstantiation"),optional:!0},typeParameters:{validate:(0,s.assertNodeType)("TSTypeParameterInstantiation"),optional:!0}}})},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){if(e===t)return!0;if(n.ALIAS_KEYS[t])return!1;const r=n.FLIPPED_ALIAS_KEYS[t];if(r){if(r[0]===e)return!0;for(const t of r)if(e===t)return!0}return!1};var n=r(11)},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,r){if(!e)return;const o=n.NODE_FIELDS[e.type];if(!o)return;s(e,t,r,o[t]),i(e,t,r)},t.validateField=s,t.validateChild=i;var n=r(11);function s(e,t,r,n){null!=n&&n.validate&&(n.optional&&null==r||n.validate(e,t,r))}function i(e,t,r){if(null==r)return;const s=n.NODE_PARENT_VALIDATIONS[r.type];s&&s(e,t,r)}},(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,r){t&&r&&(t[e]=Array.from(new Set([].concat(t[e],r[e]).filter(Boolean))))}},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){if(!e.isExportDeclaration())throw new Error("Only export declarations can be split.");const t=e.isExportDefaultDeclaration(),r=e.get("declaration"),s=r.isClassDeclaration();if(t){const t=r.isFunctionDeclaration()||s,i=r.isScope()?r.scope.parent:r.scope;let o=r.node.id,a=!1;o||(a=!0,o=i.generateUidIdentifier("default"),(t||r.isFunctionExpression()||r.isClassExpression())&&(r.node.id=n.cloneNode(o)));const l=t?r:n.variableDeclaration("var",[n.variableDeclarator(n.cloneNode(o),r.node)]),c=n.exportNamedDeclaration(null,[n.exportSpecifier(n.cloneNode(o),n.identifier("default"))]);return e.insertAfter(c),e.replaceWith(l),a&&i.registerDeclaration(e),e}if(e.get("specifiers").length>0)throw new Error("It doesn't make sense to split exported specifiers.");const i=r.getOuterBindingIdentifiers(),o=Object.keys(i).map((e=>n.exportSpecifier(n.identifier(e),n.identifier(e)))),a=n.exportNamedDeclaration(null,o);return e.insertAfter(a),e.replaceWith(r.node),e};var n=r(0)},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,r){return new i(e,t,r).generate()},t.CodeGenerator=void 0;var n=r(416),s=r(418);class i extends s.default{constructor(e,t={},r){super(function(e,t){const r={auxiliaryCommentBefore:t.auxiliaryCommentBefore,auxiliaryCommentAfter:t.auxiliaryCommentAfter,shouldPrintComment:t.shouldPrintComment,retainLines:t.retainLines,retainFunctionParens:t.retainFunctionParens,comments:null==t.comments||t.comments,compact:t.compact,minified:t.minified,concise:t.concise,indent:{adjustMultilineComment:!0,style:" ",base:0},decoratorsBeforeExport:!!t.decoratorsBeforeExport,jsescOption:Object.assign({quotes:"double",wrap:!0,minimal:!1},t.jsescOption),recordAndTupleSyntaxType:t.recordAndTupleSyntaxType};return r.jsonCompatibleStrings=t.jsonCompatibleStrings,r.minified?(r.compact=!0,r.shouldPrintComment=r.shouldPrintComment||(()=>r.comments)):r.shouldPrintComment=r.shouldPrintComment||(e=>r.comments||e.indexOf("@license")>=0||e.indexOf("@preserve")>=0),"auto"===r.compact&&(r.compact=e.length>5e5,r.compact),r.compact&&(r.indent.adjustMultilineComment=!1),r}(r,t),t.sourceMaps?new n.default(t,r):null),this.ast=void 0,this.ast=e}generate(){return super.generate(this.ast)}}t.CodeGenerator=class{constructor(e,t,r){this._generator=void 0,this._generator=new i(e,t,r)}generate(){return this._generator.generate()}}},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function({node:e,parent:t,scope:r,id:s},c=!1){if(e.id)return;if(!i.isObjectProperty(t)&&!i.isObjectMethod(t,{kind:"method"})||t.computed&&!i.isLiteral(t.key)){if(i.isVariableDeclarator(t)){if(s=t.id,i.isIdentifier(s)&&!c){const t=r.parent.getBinding(s.name);if(t&&t.constant&&r.getBinding(s.name)===t)return e.id=i.cloneNode(s),void(e.id[i.NOT_LOCAL_BINDING]=!0)}}else if(i.isAssignmentExpression(t,{operator:"="}))s=t.left;else if(!s)return}else s=t.key;let u;return s&&i.isLiteral(s)?u=function(e){return i.isNullLiteral(e)?"null":i.isRegExpLiteral(e)?`_${e.pattern}_${e.flags}`:i.isTemplateLiteral(e)?e.quasis.map((e=>e.value.raw)).join(""):void 0!==e.value?e.value+"":""}(s):s&&i.isIdentifier(s)&&(u=s.name),void 0!==u?(u=i.toBindingIdentifierName(u),(s=i.identifier(u))[i.NOT_LOCAL_BINDING]=!0,function(e,t,r,s){if(e.selfReference){if(!s.hasBinding(r.name)||s.hasGlobal(r.name)){if(!i.isFunction(t))return;let e=o;t.generator&&(e=a);const l=e({FUNCTION:t,FUNCTION_ID:r,FUNCTION_KEY:s.generateUidIdentifier(r.name)}).expression,c=l.callee.body.body[0].params;for(let e=0,r=(0,n.default)(t);e{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.merge=function(e,t){const{placeholderWhitelist:r=e.placeholderWhitelist,placeholderPattern:n=e.placeholderPattern,preserveComments:s=e.preserveComments,syntacticPlaceholders:i=e.syntacticPlaceholders}=t;return{parser:Object.assign({},e.parser,t.parser),placeholderWhitelist:r,placeholderPattern:n,preserveComments:s,syntacticPlaceholders:i}},t.validate=function(e){if(null!=e&&"object"!=typeof e)throw new Error("Unknown template options.");const t=e||{},{placeholderWhitelist:r,placeholderPattern:n,preserveComments:s,syntacticPlaceholders:i}=t,o=function(e,t){if(null==e)return{};var r,n,s={},i=Object.keys(e);for(n=0;n=0||(s[r]=e[r]);return s}(t,["placeholderWhitelist","placeholderPattern","preserveComments","syntacticPlaceholders"]);if(null!=r&&!(r instanceof Set))throw new Error("'.placeholderWhitelist' must be a Set, null, or undefined");if(null!=n&&!(n instanceof RegExp)&&!1!==n)throw new Error("'.placeholderPattern' must be a RegExp, false, null, or undefined");if(null!=s&&"boolean"!=typeof s)throw new Error("'.preserveComments' must be a boolean, null, or undefined");if(null!=i&&"boolean"!=typeof i)throw new Error("'.syntacticPlaceholders' must be a boolean, null, or undefined");if(!0===i&&(null!=r||null!=n))throw new Error("'.placeholderWhitelist' and '.placeholderPattern' aren't compatible with '.syntacticPlaceholders: true'");return{parser:o,placeholderWhitelist:r||void 0,placeholderPattern:null==n?void 0:n,preserveComments:null==s?void 0:s,syntacticPlaceholders:null==i?void 0:i}},t.normalizeReplacements=function(e){if(Array.isArray(e))return e.reduce(((e,t,r)=>(e["$"+r]=t,e)),{});if("object"==typeof e||null==e)return e||void 0;throw new Error("Template replacements must be an array, object, null, or undefined")}},e=>{var t=Object.prototype.hasOwnProperty,r=Object.prototype.toString;e.exports=function(e,n,s){if("[object Function]"!==r.call(n))throw new TypeError("iterator must be a function");var i=e.length;if(i===+i)for(var o=0;o{"use strict";var n=["BigInt64Array","BigUint64Array","Float32Array","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Uint8Array","Uint8ClampedArray"];e.exports=function(){for(var e=[],t=0;t{"use strict";var n=r(67)("%Object.getOwnPropertyDescriptor%");if(n)try{n([],"length")}catch(e){n=null}e.exports=n},(e,t,r)=>{"use strict";var n=r(136),s=r(137),i=r(66),o=i("Object.prototype.toString"),a=r(68)()&&"symbol"==typeof Symbol.toStringTag,l=s(),c=i("Array.prototype.indexOf",!0)||function(e,t){for(var r=0;r-1}return!!f&&function(e){var t=!1;return n(p,(function(r,n){if(!t)try{t=r.call(e)===n}catch(e){}})),t}(e)}},(e,t,r)=>{"use strict";var n=r(40),s=r(51),i=r(142),o=r(143),a=r(253),l=s(o(),Object);n(l,{getPolyfill:o,implementation:i,shim:a}),e.exports=l},e=>{"use strict";var t=Object.prototype.toString;e.exports=function(e){var r=t.call(e),n="[object Arguments]"===r;return n||(n="[object Array]"!==r&&null!==e&&"object"==typeof e&&"number"==typeof e.length&&e.length>=0&&"[object Function]"===t.call(e.callee)),n}},e=>{"use strict";var t=function(e){return e!=e};e.exports=function(e,r){return 0===e&&0===r?1/e==1/r:e===r||!(!t(e)||!t(r))}},(e,t,r)=>{"use strict";var n=r(142);e.exports=function(){return"function"==typeof Object.is?Object.is:n}},e=>{"use strict";e.exports=function(e){return e!=e}},(e,t,r)=>{"use strict";var n=r(144);e.exports=function(){return Number.isNaN&&Number.isNaN(NaN)&&!Number.isNaN("a")?Number.isNaN:n}},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.addDefault=function(e,t,r){return new n.default(e).addDefault(t,r)},t.addNamed=function(e,t,r,s){return new n.default(e).addNamed(t,r,s)},t.addNamespace=function(e,t,r){return new n.default(e).addNamespace(t,r)},t.addSideEffect=function(e,t,r){return new n.default(e).addSideEffect(t,r)},Object.defineProperty(t,"ImportInjector",{enumerable:!0,get:function(){return n.default}}),Object.defineProperty(t,"isModule",{enumerable:!0,get:function(){return s.default}});var n=r(459),s=r(257)},(e,t,r)=>{const n=r(12);e.exports=(e,t,r)=>0!==n(e,t,r)},(e,t,r)=>{const n=r(71),s=r(147),i=r(44),o=r(74),a=r(73),l=r(75);e.exports=(e,t,r,c)=>{switch(t){case"===":return"object"==typeof e&&(e=e.version),"object"==typeof r&&(r=r.version),e===r;case"!==":return"object"==typeof e&&(e=e.version),"object"==typeof r&&(r=r.version),e!==r;case"":case"=":case"==":return n(e,r,c);case"!=":return s(e,r,c);case">":return i(e,r,c);case">=":return o(e,r,c);case"<":return a(e,r,c);case"<=":return l(e,r,c);default:throw new TypeError(`Invalid operator: ${t}`)}}},(e,t,r)=>{"use strict";const n=r(274),s=Symbol("max"),i=Symbol("length"),o=Symbol("lengthCalculator"),a=Symbol("allowStale"),l=Symbol("maxAge"),c=Symbol("dispose"),u=Symbol("noDisposeOnSet"),p=Symbol("lruList"),f=Symbol("cache"),d=Symbol("updateAgeOnGet"),h=()=>1,m=(e,t,r)=>{const n=e[f].get(t);if(n){const t=n.value;if(y(e,t)){if(b(e,n),!e[a])return}else r&&(e[d]&&(n.value.now=Date.now()),e[p].unshiftNode(n));return t.value}},y=(e,t)=>{if(!t||!t.maxAge&&!e[l])return!1;const r=Date.now()-t.now;return t.maxAge?r>t.maxAge:e[l]&&r>e[l]},g=e=>{if(e[i]>e[s])for(let t=e[p].tail;e[i]>e[s]&&null!==t;){const r=t.prev;b(e,t),t=r}},b=(e,t)=>{if(t){const r=t.value;e[c]&&e[c](r.key,r.value),e[i]-=r.length,e[f].delete(r.key),e[p].removeNode(t)}};class v{constructor(e,t,r,n,s){this.key=e,this.value=t,this.length=r,this.now=n,this.maxAge=s||0}}const E=(e,t,r,n)=>{let s=r.value;y(e,s)&&(b(e,r),e[a]||(s=void 0)),s&&t.call(n,s.value,s.key,e)};e.exports=class{constructor(e){if("number"==typeof e&&(e={max:e}),e||(e={}),e.max&&("number"!=typeof e.max||e.max<0))throw new TypeError("max must be a non-negative number");this[s]=e.max||1/0;const t=e.length||h;if(this[o]="function"!=typeof t?h:t,this[a]=e.stale||!1,e.maxAge&&"number"!=typeof e.maxAge)throw new TypeError("maxAge must be a number");this[l]=e.maxAge||0,this[c]=e.dispose,this[u]=e.noDisposeOnSet||!1,this[d]=e.updateAgeOnGet||!1,this.reset()}set max(e){if("number"!=typeof e||e<0)throw new TypeError("max must be a non-negative number");this[s]=e||1/0,g(this)}get max(){return this[s]}set allowStale(e){this[a]=!!e}get allowStale(){return this[a]}set maxAge(e){if("number"!=typeof e)throw new TypeError("maxAge must be a non-negative number");this[l]=e,g(this)}get maxAge(){return this[l]}set lengthCalculator(e){"function"!=typeof e&&(e=h),e!==this[o]&&(this[o]=e,this[i]=0,this[p].forEach((e=>{e.length=this[o](e.value,e.key),this[i]+=e.length}))),g(this)}get lengthCalculator(){return this[o]}get length(){return this[i]}get itemCount(){return this[p].length}rforEach(e,t){t=t||this;for(let r=this[p].tail;null!==r;){const n=r.prev;E(this,e,r,t),r=n}}forEach(e,t){t=t||this;for(let r=this[p].head;null!==r;){const n=r.next;E(this,e,r,t),r=n}}keys(){return this[p].toArray().map((e=>e.key))}values(){return this[p].toArray().map((e=>e.value))}reset(){this[c]&&this[p]&&this[p].length&&this[p].forEach((e=>this[c](e.key,e.value))),this[f]=new Map,this[p]=new n,this[i]=0}dump(){return this[p].map((e=>!y(this,e)&&{k:e.key,v:e.value,e:e.now+(e.maxAge||0)})).toArray().filter((e=>e))}dumpLru(){return this[p]}set(e,t,r){if((r=r||this[l])&&"number"!=typeof r)throw new TypeError("maxAge must be a number");const n=r?Date.now():0,a=this[o](t,e);if(this[f].has(e)){if(a>this[s])return b(this,this[f].get(e)),!1;const o=this[f].get(e).value;return this[c]&&(this[u]||this[c](e,o.value)),o.now=n,o.maxAge=r,o.value=t,this[i]+=a-o.length,o.length=a,this.get(e),g(this),!0}const d=new v(e,t,a,n,r);return d.length>this[s]?(this[c]&&this[c](e,t),!1):(this[i]+=d.length,this[p].unshift(d),this[f].set(e,this[p].head),g(this),!0)}has(e){if(!this[f].has(e))return!1;const t=this[f].get(e).value;return!y(this,t)}get(e){return m(this,e,!0)}peek(e){return m(this,e,!1)}pop(){const e=this[p].tail;return e?(b(this,e),e.value):null}del(e){b(this,this[f].get(e))}load(e){this.reset();const t=Date.now();for(let r=e.length-1;r>=0;r--){const n=e[r],s=n.e||0;if(0===s)this.set(n.k,n.v);else{const e=s-t;e>0&&this.set(n.k,n.v,e)}}}prune(){this[f].forEach(((e,t)=>m(this,t,!1)))}}},(e,t)=>{"use strict";function r(e,t){for(const r of Object.keys(t)){const n=t[r];void 0!==n&&(e[r]=n)}}Object.defineProperty(t,"__esModule",{value:!0}),t.mergeOptions=function(e,t){for(const n of Object.keys(t))if("parserOpts"!==n&&"generatorOpts"!==n&&"assumptions"!==n||!t[n]){const r=t[n];void 0!==r&&(e[n]=r)}else{const s=t[n];r(e[n]||(e[n]={}),s)}},t.isIterableIterator=function(e){return!!e&&"function"==typeof e.next&&"function"==typeof e[Symbol.iterator]}},e=>{function t(e){this.name="BrowserslistError",this.message=e,this.browserslist=!0,Error.captureStackTrace&&Error.captureStackTrace(this,t)}t.prototype=Error.prototype,e.exports=t},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.semverMin=l,t.semverify=function(e){if("string"==typeof e&&n.valid(e))return e;a.invariant("number"==typeof e||"string"==typeof e&&o.test(e),`'${e}' is not a valid version`);const t=e.toString().split(".");for(;t.length<3;)t.push("0");return t.join(".")},t.isUnreleasedVersion=function(e,t){const r=i.unreleasedLabels[t];return!!r&&r===e.toString().toLowerCase()},t.getLowestUnreleased=c,t.getHighestUnreleased=function(e,t,r){return c(e,t,r)===e?t:e},t.getLowestImplementedVersion=function(e,t){const r=e[t];return r||"android"!==t?r:e.chrome};var n=r(28),s=r(297),i=r(153);const o=/^(\d+|\d+.\d+)$/,a=new s.OptionValidator("@babel/helper-compilation-targets");function l(e,t){return e&&n.lt(e,t)?e:t}function c(e,t,r){const n=i.unreleasedLabels[r],s=[e,t].some((e=>e===n));return s?e===s?t:e||t:l(e,t)}},(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.browserNameMap=t.unreleasedLabels=void 0,t.unreleasedLabels={safari:"tp"},t.browserNameMap={and_chr:"chrome",and_ff:"firefox",android:"android",chrome:"chrome",edge:"edge",firefox:"firefox",ie:"ie",ie_mob:"ie",ios_saf:"ios",node:"node",op_mob:"opera",opera:"opera",safari:"safari",samsung:"samsung"}},e=>{"use strict";e.exports.isClean=Symbol("isClean"),e.exports.my=Symbol("my")},e=>{"use strict";const t={colon:": ",indent:" ",beforeDecl:"\n",beforeRule:"\n",beforeOpen:" ",beforeClose:"\n",beforeComment:"\n",after:"\n",emptyBody:"",commentLeft:" ",commentRight:" ",semicolon:!1};e.exports=class{constructor(e){this.builder=e}stringify(e,t){if(!this[e.type])throw new Error("Unknown AST node type "+e.type+". Maybe you need to change PostCSS stringifier.");this[e.type](e,t)}document(e){this.body(e)}root(e){this.body(e),e.raws.after&&this.builder(e.raws.after)}comment(e){let t=this.raw(e,"left","commentLeft"),r=this.raw(e,"right","commentRight");this.builder("/*"+t+e.text+r+"*/",e)}decl(e,t){let r=this.raw(e,"between","colon"),n=e.prop+r+this.rawValue(e,"value");e.important&&(n+=e.raws.important||" !important"),t&&(n+=";"),this.builder(n,e)}rule(e){this.block(e,this.rawValue(e,"selector")),e.raws.ownSemicolon&&this.builder(e.raws.ownSemicolon,e,"end")}atrule(e,t){let r="@"+e.name,n=e.params?this.rawValue(e,"params"):"";if(void 0!==e.raws.afterName?r+=e.raws.afterName:n&&(r+=" "),e.nodes)this.block(e,r+n);else{let s=(e.raws.between||"")+(t?";":"");this.builder(r+n+s,e)}}body(e){let t=e.nodes.length-1;for(;t>0&&"comment"===e.nodes[t].type;)t-=1;let r=this.raw(e,"semicolon");for(let n=0;n{if(s=e.raws[r],void 0!==s)return!1}))}var a;return void 0===s&&(s=t[n]),o.rawCache[n]=s,s}rawSemicolon(e){let t;return e.walk((e=>{if(e.nodes&&e.nodes.length&&"decl"===e.last.type&&(t=e.raws.semicolon,void 0!==t))return!1})),t}rawEmptyBody(e){let t;return e.walk((e=>{if(e.nodes&&0===e.nodes.length&&(t=e.raws.after,void 0!==t))return!1})),t}rawIndent(e){if(e.raws.indent)return e.raws.indent;let t;return e.walk((r=>{let n=r.parent;if(n&&n!==e&&n.parent&&n.parent===e&&void 0!==r.raws.before){let e=r.raws.before.split("\n");return t=e[e.length-1],t=t.replace(/\S/g,""),!1}})),t}rawBeforeComment(e,t){let r;return e.walkComments((e=>{if(void 0!==e.raws.before)return r=e.raws.before,r.includes("\n")&&(r=r.replace(/[^\n]+$/,"")),!1})),void 0===r?r=this.raw(t,null,"beforeDecl"):r&&(r=r.replace(/\S/g,"")),r}rawBeforeDecl(e,t){let r;return e.walkDecls((e=>{if(void 0!==e.raws.before)return r=e.raws.before,r.includes("\n")&&(r=r.replace(/[^\n]+$/,"")),!1})),void 0===r?r=this.raw(t,null,"beforeRule"):r&&(r=r.replace(/\S/g,"")),r}rawBeforeRule(e){let t;return e.walk((r=>{if(r.nodes&&(r.parent!==e||e.first!==r)&&void 0!==r.raws.before)return t=r.raws.before,t.includes("\n")&&(t=t.replace(/[^\n]+$/,"")),!1})),t&&(t=t.replace(/\S/g,"")),t}rawBeforeClose(e){let t;return e.walk((e=>{if(e.nodes&&e.nodes.length>0&&void 0!==e.raws.after)return t=e.raws.after,t.includes("\n")&&(t=t.replace(/[^\n]+$/,"")),!1})),t&&(t=t.replace(/\S/g,"")),t}rawBeforeOpen(e){let t;return e.walk((e=>{if("decl"!==e.type&&(t=e.raws.between,void 0!==t))return!1})),t}rawColon(e){let t;return e.walkDecls((e=>{if(void 0!==e.raws.between)return t=e.raws.between.replace(/[^\s:]/g,""),!1})),t}beforeAfter(e,t){let r;r="decl"===e.type?this.raw(e,null,"beforeDecl"):"comment"===e.type?this.raw(e,null,"beforeComment"):"before"===t?this.raw(e,null,"beforeRule"):this.raw(e,null,"beforeClose");let n=e.parent,s=0;for(;n&&"root"!==n.type;)s+=1,n=n.parent;if(r.includes("\n")){let t=this.raw(e,null,"indent");if(t.length)for(let e=0;e{"use strict";let{isClean:n,my:s}=r(154),i=r(320),o=r(86),a=r(22),l=r(87),c=(r(322),r(159)),u=r(161),p=r(35);const f={document:"Document",root:"Root",atrule:"AtRule",rule:"Rule",decl:"Declaration",comment:"Comment"},d={postcssPlugin:!0,prepare:!0,Once:!0,Document:!0,Root:!0,Declaration:!0,Rule:!0,AtRule:!0,Comment:!0,DeclarationExit:!0,RuleExit:!0,AtRuleExit:!0,CommentExit:!0,RootExit:!0,DocumentExit:!0,OnceExit:!0},h={postcssPlugin:!0,prepare:!0,Once:!0};function m(e){return"object"==typeof e&&"function"==typeof e.then}function y(e){let t=!1,r=f[e.type];return"decl"===e.type?t=e.prop.toLowerCase():"atrule"===e.type&&(t=e.name.toLowerCase()),t&&e.append?[r,r+"-"+t,0,r+"Exit",r+"Exit-"+t]:t?[r,r+"-"+t,r+"Exit",r+"Exit-"+t]:e.append?[r,0,r+"Exit"]:[r,r+"Exit"]}function g(e){let t;return t="document"===e.type?["Document",0,"DocumentExit"]:"root"===e.type?["Root",0,"RootExit"]:y(e),{node:e,events:t,eventIndex:0,visitors:[],visitorIndex:0,iterator:0}}function b(e){return e[n]=!1,e.nodes&&e.nodes.forEach((e=>b(e))),e}let v={};class E{constructor(e,t,r){let n;if(this.stringified=!1,this.processed=!1,"object"!=typeof t||null===t||"root"!==t.type&&"document"!==t.type)if(t instanceof E||t instanceof c)n=b(t.root),t.map&&(void 0===r.map&&(r.map={}),r.map.inline||(r.map.inline=!1),r.map.prev=t.map);else{let e=u;r.syntax&&(e=r.syntax.parse),r.parser&&(e=r.parser),e.parse&&(e=e.parse);try{n=e(t,r)}catch(e){this.processed=!0,this.error=e}n&&!n[s]&&a.rebuild(n)}else n=b(t);this.result=new c(e,n,r),this.helpers={...v,result:this.result,postcss:v},this.plugins=this.processor.plugins.map((e=>"object"==typeof e&&e.prepare?{...e,...e.prepare(this.result)}:e))}get[Symbol.toStringTag](){return"LazyResult"}get processor(){return this.result.processor}get opts(){return this.result.opts}get css(){return this.stringify().css}get content(){return this.stringify().content}get map(){return this.stringify().map}get root(){return this.sync().root}get messages(){return this.sync().messages}warnings(){return this.sync().warnings()}toString(){return this.css}then(e,t){return this.async().then(e,t)}catch(e){return this.async().catch(e)}finally(e){return this.async().then(e,e)}async(){return this.error?Promise.reject(this.error):this.processed?Promise.resolve(this.result):(this.processing||(this.processing=this.runAsync()),this.processing)}sync(){if(this.error)throw this.error;if(this.processed)return this.result;if(this.processed=!0,this.processing)throw this.getAsyncError();for(let e of this.plugins)if(m(this.runOnRoot(e)))throw this.getAsyncError();if(this.prepareVisitors(),this.hasListener){let e=this.result.root;for(;!e[n];)e[n]=!0,this.walkSync(e);if(this.listeners.OnceExit)if("document"===e.type)for(let t of e.nodes)this.visitSync(this.listeners.OnceExit,t);else this.visitSync(this.listeners.OnceExit,e)}return this.result}stringify(){if(this.error)throw this.error;if(this.stringified)return this.result;this.stringified=!0,this.sync();let e=this.result.opts,t=o;e.syntax&&(t=e.syntax.stringify),e.stringifier&&(t=e.stringifier),t.stringify&&(t=t.stringify);let r=new i(t,this.result.root,this.result.opts).generate();return this.result.css=r[0],this.result.map=r[1],this.result}walkSync(e){e[n]=!0;let t=y(e);for(let r of t)if(0===r)e.nodes&&e.each((e=>{e[n]||this.walkSync(e)}));else{let t=this.listeners[r];if(t&&this.visitSync(t,e.toProxy()))return}}visitSync(e,t){for(let[r,n]of e){let e;this.result.lastPlugin=r;try{e=n(t,this.helpers)}catch(e){throw this.handleError(e,t.proxyOf)}if("root"!==t.type&&"document"!==t.type&&!t.parent)return!0;if(m(e))throw this.getAsyncError()}}runOnRoot(e){this.result.lastPlugin=e;try{if("object"==typeof e&&e.Once){if("document"===this.result.root.type){let t=this.result.root.nodes.map((t=>e.Once(t,this.helpers)));return m(t[0])?Promise.all(t):t}return e.Once(this.result.root,this.helpers)}if("function"==typeof e)return e(this.result.root,this.result)}catch(e){throw this.handleError(e)}}getAsyncError(){throw new Error("Use process(css).then(cb) to work with async plugins")}handleError(e,t){let r=this.result.lastPlugin;try{t&&t.addToError(e),this.error=e,"CssSyntaxError"!==e.name||e.plugin?r.postcssVersion:(e.plugin=r.postcssPlugin,e.setMessage())}catch(e){console&&console.error}return e}async runAsync(){this.plugin=0;for(let e=0;e0;){let e=this.visitTick(t);if(m(e))try{await e}catch(e){let r=t[t.length-1].node;throw this.handleError(e,r)}}}if(this.listeners.OnceExit)for(let[t,r]of this.listeners.OnceExit){this.result.lastPlugin=t;try{if("document"===e.type){let t=e.nodes.map((e=>r(e,this.helpers)));await Promise.all(t)}else await r(e,this.helpers)}catch(e){throw this.handleError(e)}}}return this.processed=!0,this.stringify()}prepareVisitors(){this.listeners={};let e=(e,t,r)=>{this.listeners[t]||(this.listeners[t]=[]),this.listeners[t].push([e,r])};for(let t of this.plugins)if("object"==typeof t)for(let r in t){if(!d[r]&&/^[A-Z]/.test(r))throw new Error(`Unknown event ${r} in ${t.postcssPlugin}. Try to update PostCSS (${this.processor.version} now).`);if(!h[r])if("object"==typeof t[r])for(let n in t[r])e(t,"*"===n?r:r+"-"+n.toLowerCase(),t[r][n]);else"function"==typeof t[r]&&e(t,r,t[r])}this.hasListener=Object.keys(this.listeners).length>0}visitTick(e){let t=e[e.length-1],{node:r,visitors:s}=t;if("root"!==r.type&&"document"!==r.type&&!r.parent)return void e.pop();if(s.length>0&&t.visitorIndex{v=e},e.exports=E,E.default=E,p.registerLazyResult(E),l.registerLazyResult(E)},()=>{},()=>{},(e,t,r)=>{"use strict";let n=r(160);class s{constructor(e,t,r){this.processor=e,this.messages=[],this.root=t,this.opts=r,this.css=void 0,this.map=void 0}toString(){return this.css}warn(e,t={}){t.plugin||this.lastPlugin&&this.lastPlugin.postcssPlugin&&(t.plugin=this.lastPlugin.postcssPlugin);let r=new n(e,t);return this.messages.push(r),r}warnings(){return this.messages.filter((e=>"warning"===e.type))}get content(){return this.css}}e.exports=s,s.default=s},e=>{"use strict";class t{constructor(e,t={}){if(this.type="warning",this.text=e,t.node&&t.node.source){let e=t.node.positionBy(t);this.line=e.line,this.column=e.column}for(let e in t)this[e]=t[e]}toString(){return this.node?this.node.error(this.text,{plugin:this.plugin,index:this.index,word:this.word}).message:this.plugin?this.plugin+": "+this.text:this.text}}e.exports=t,t.default=t},(e,t,r)=>{"use strict";let n=r(22),s=r(323),i=r(90);function o(e,t){let r=new i(e,t),n=new s(r);try{n.parse()}catch(e){throw e}return n.root}e.exports=o,o.default=o,n.registerParse(o)},e=>{"use strict";let t={split(e,t,r){let n=[],s="",i=!1,o=0,a=!1,l=!1;for(let r of e)l?l=!1:"\\"===r?l=!0:a?r===a&&(a=!1):'"'===r||"'"===r?a=r:"("===r?o+=1:")"===r?o>0&&(o-=1):0===o&&t.includes(r)&&(i=!0),i?(""!==s&&n.push(s.trim()),s="",i=!1):s+=r;return(r||""!==s)&&n.push(s.trim()),n},space:e=>t.split(e,[" ","\n","\t"]),comma:e=>t.split(e,[","],!0)};e.exports=t,t.default=t},(e,t,r)=>{"use strict";var n=r(37).Buffer;let{SourceMapConsumer:s,SourceMapGenerator:i}=r(157),{existsSync:o,readFileSync:a}=r(514),{dirname:l,join:c}=r(158);class u{constructor(e,t){if(!1===t.map)return;this.loadAnnotation(e),this.inline=this.startWith(this.annotation,"data:");let r=t.map?t.map.prev:void 0,n=this.loadMap(t.from,r);!this.mapFile&&t.from&&(this.mapFile=t.from),this.mapFile&&(this.root=l(this.mapFile)),n&&(this.text=n)}consumer(){return this.consumerCache||(this.consumerCache=new s(this.text)),this.consumerCache}withContent(){return!!(this.consumer().sourcesContent&&this.consumer().sourcesContent.length>0)}startWith(e,t){return!!e&&e.substr(0,t.length)===t}getAnnotationURL(e){return e.match(/\/\*\s*# sourceMappingURL=((?:(?!sourceMappingURL=).)*)\*\//)[1].trim()}loadAnnotation(e){let t=e.match(/\/\*\s*# sourceMappingURL=(?:(?!sourceMappingURL=).)*\*\//gm);if(t&&t.length>0){let e=t[t.length-1];e&&(this.annotation=this.getAnnotationURL(e))}}decodeInline(e){if(/^data:application\/json;charset=utf-?8,/.test(e)||/^data:application\/json,/.test(e))return decodeURIComponent(e.substr(RegExp.lastMatch.length));if(/^data:application\/json;charset=utf-?8;base64,/.test(e)||/^data:application\/json;base64,/.test(e))return t=e.substr(RegExp.lastMatch.length),n?n.from(t,"base64").toString():window.atob(t);var t;let r=e.match(/data:application\/json;([^,]+),/)[1];throw new Error("Unsupported source map encoding "+r)}loadFile(e){if(this.root=l(e),o(e))return this.mapFile=e,a(e,"utf-8").toString().trim()}loadMap(e,t){if(!1===t)return!1;if(t){if("string"==typeof t)return t;if("function"!=typeof t){if(t instanceof s)return i.fromSourceMap(t).toString();if(t instanceof i)return t.toString();if(this.isMap(t))return JSON.stringify(t);throw new Error("Unsupported previous source map format: "+t.toString())}{let r=t(e);if(r){let e=this.loadFile(r);if(!e)throw new Error("Unable to load previous source map: "+r.toString());return e}}}else{if(this.inline)return this.decodeInline(this.annotation);if(this.annotation){let t=this.annotation;return e&&(t=c(l(e),t)),this.loadFile(t)}}}isMap(e){return"object"==typeof e&&("string"==typeof e.mappings||"string"==typeof e._mappings||Array.isArray(e.sections))}}e.exports=u,u.default=u},e=>{const t=/[$]?[\w-]+/g;e.exports=(e,r)=>{let n;for(;n=t.exec(e);){const s=r[n[0]];s&&(e=e.slice(0,n.index)+s+e.slice(t.lastIndex),t.lastIndex-=n[0].length-s.length)}return e}},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(422);Object.keys(n).forEach((function(e){"default"!==e&&"__esModule"!==e&&(e in t&&t[e]===n[e]||Object.defineProperty(t,e,{enumerable:!0,get:function(){return n[e]}}))}));var s=r(423);Object.keys(s).forEach((function(e){"default"!==e&&"__esModule"!==e&&(e in t&&t[e]===s[e]||Object.defineProperty(t,e,{enumerable:!0,get:function(){return s[e]}}))}));var i=r(424);Object.keys(i).forEach((function(e){"default"!==e&&"__esModule"!==e&&(e in t&&t[e]===i[e]||Object.defineProperty(t,e,{enumerable:!0,get:function(){return i[e]}}))}));var o=r(425);Object.keys(o).forEach((function(e){"default"!==e&&"__esModule"!==e&&(e in t&&t[e]===o[e]||Object.defineProperty(t,e,{enumerable:!0,get:function(){return o[e]}}))}));var a=r(426);Object.keys(a).forEach((function(e){"default"!==e&&"__esModule"!==e&&(e in t&&t[e]===a[e]||Object.defineProperty(t,e,{enumerable:!0,get:function(){return a[e]}}))}));var l=r(234);Object.keys(l).forEach((function(e){"default"!==e&&"__esModule"!==e&&(e in t&&t[e]===l[e]||Object.defineProperty(t,e,{enumerable:!0,get:function(){return l[e]}}))}));var c=r(235);Object.keys(c).forEach((function(e){"default"!==e&&"__esModule"!==e&&(e in t&&t[e]===c[e]||Object.defineProperty(t,e,{enumerable:!0,get:function(){return c[e]}}))}));var u=r(429);Object.keys(u).forEach((function(e){"default"!==e&&"__esModule"!==e&&(e in t&&t[e]===u[e]||Object.defineProperty(t,e,{enumerable:!0,get:function(){return u[e]}}))}));var p=r(430);Object.keys(p).forEach((function(e){"default"!==e&&"__esModule"!==e&&(e in t&&t[e]===p[e]||Object.defineProperty(t,e,{enumerable:!0,get:function(){return p[e]}}))}));var f=r(431);Object.keys(f).forEach((function(e){"default"!==e&&"__esModule"!==e&&(e in t&&t[e]===f[e]||Object.defineProperty(t,e,{enumerable:!0,get:function(){return f[e]}}))}));var d=r(432);Object.keys(d).forEach((function(e){"default"!==e&&"__esModule"!==e&&(e in t&&t[e]===d[e]||Object.defineProperty(t,e,{enumerable:!0,get:function(){return d[e]}}))}))},(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(5);Object.keys(n).forEach((function(e){"default"!==e&&"__esModule"!==e&&(e in t&&t[e]===n[e]||(t[e]=n[e]))}));var s=r(516);Object.keys(s).forEach((function(e){"default"!==e&&"__esModule"!==e&&(e in t&&t[e]===s[e]||(t[e]=s[e]))}));var i=r(517);Object.keys(i).forEach((function(e){"default"!==e&&"__esModule"!==e&&(e in t&&t[e]===i[e]||(t[e]=i[e]))}))},function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r),Object.defineProperty(e,n,{enumerable:!0,get:function(){return t[r]}})}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),s=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&n(t,e,r);return s(t,e),t},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const a=i(r(0)),l=r(146),c=r(50),u=o(r(169)),p=/^xlink([A-Z])/,f=(e,t)=>{const r=((e,t)=>e.map((e=>{if(e.isJSXText()){const r=c.transformJSXText(e);return r?a.callExpression(c.createIdentifier(t,"createTextVNode"),[r]):r}if(e.isJSXExpressionContainer()){const t=c.transformJSXExpressionContainer(e);if(a.isIdentifier(t)){const{name:r}=t,{referencePaths:n=[]}=e.scope.getBinding(r)||{};n.forEach((e=>{c.walksScope(e,r,2)}))}return t}if(a.isJSXSpreadChild(e))return c.transformJSXSpreadChild(e);if(e.isCallExpression())return e.node;if(e.isJSXElement())return f(e,t);throw new Error(`getChildren: ${e.type} is not supported`)})).filter((e=>null!=e&&!a.isJSXEmptyExpression(e))))(e.get("children"),t),{tag:n,props:s,isComponent:i,directives:o,patchFlag:d,dynamicPropNames:h,slots:m}=((e,t)=>{const r=c.getTag(e,t),n=c.checkIsComponent(e.get("openingElement")),s=e.get("openingElement").get("attributes"),i=[],o=new Set;let d=null,h=0;if(0===s.length)return{tag:r,isComponent:n,slots:d,props:a.nullLiteral(),directives:i,patchFlag:h,dynamicPropNames:o};let m=[],y=!1,g=!1,b=!1,v=!1,E=!1;const x=[],{mergeProps:S=!0}=t.opts;s.forEach((s=>{if(s.isJSXAttribute()){let h=c.getJSXAttributeName(s);const S=((e,t)=>{const r=e.get("value");return r.isJSXElement()?f(r,t):r.isStringLiteral()?r.node:r.isJSXExpressionContainer()?c.transformJSXExpressionContainer(r):null})(s,t);if(c.isConstant(S)&&"ref"!==h||(!n&&c.isOn(h)&&"onclick"!==h.toLowerCase()&&"onUpdate:modelValue"!==h&&(v=!0),"ref"===h?y=!0:"class"!==h||n?"style"!==h||n?"key"===h||c.isDirective(h)||"on"===h||o.add(h):b=!0:g=!0),t.opts.transformOn&&("on"===h||"nativeOn"===h))return t.get("transformOn")||t.set("transformOn",l.addDefault(e,"@vue/babel-helper-vue-transform-on",{nameHint:"_transformOn"})),void x.push(a.callExpression(t.get("transformOn"),[S||a.booleanLiteral(!0)]));if(c.isDirective(h)){const{directive:e,modifiers:l,values:c,args:p,directiveName:f}=u.default({tag:r,isComponent:n,name:h,path:s,state:t,value:S});if("slots"===f)return void(d=S);e?i.push(a.arrayExpression(e)):"html"===f?(m.push(a.objectProperty(a.stringLiteral("innerHTML"),c[0])),o.add("innerHTML")):"text"===f&&(m.push(a.objectProperty(a.stringLiteral("textContent"),c[0])),o.add("textContent")),["models","model"].includes(f)&&c.forEach(((t,r)=>{var n,s,i,c;const u=p[r],f=u&&!a.isStringLiteral(u)&&!a.isNullLiteral(u);e||(m.push(a.objectProperty(a.isNullLiteral(u)?a.stringLiteral("modelValue"):u,t,f)),f||o.add((null===(n=u)||void 0===n?void 0:n.value)||"modelValue"),(null===(s=l[r])||void 0===s?void 0:s.size)&&m.push(a.objectProperty(f?a.binaryExpression("+",u,a.stringLiteral("Modifiers")):a.stringLiteral(`${(null===(i=u)||void 0===i?void 0:i.value)||"model"}Modifiers`),a.objectExpression([...l[r]].map((e=>a.objectProperty(a.stringLiteral(e),a.booleanLiteral(!0))))),f)));const d=f?a.binaryExpression("+",a.stringLiteral("onUpdate"),u):a.stringLiteral(`onUpdate:${(null===(c=u)||void 0===c?void 0:c.value)||"modelValue"}`);m.push(a.objectProperty(d,a.arrowFunctionExpression([a.identifier("$event")],a.assignmentExpression("=",t,a.identifier("$event"))),f)),f?E=!0:o.add(d.value)}))}else h.match(p)&&(h=h.replace(p,((e,t)=>`xlink:${t.toLowerCase()}`))),m.push(a.objectProperty(a.stringLiteral(h),S||a.booleanLiteral(!0)))}else m.length&&S&&(x.push(a.objectExpression(c.dedupeProperties(m,S))),m=[]),E=!0,c.transformJSXSpreadAttribute(e,s,S,S?x:m)})),E?h|=16:(g&&(h|=2),b&&(h|=4),o.size&&(h|=8),v&&(h|=32)),0!==h&&32!==h||!(y||i.length>0)||(h|=512);let T=a.nullLiteral();return x.length?(m.length&&x.push(a.objectExpression(c.dedupeProperties(m,S))),T=x.length>1?a.callExpression(c.createIdentifier(t,"mergeProps"),x):x[0]):m.length&&(T=1===m.length&&a.isSpreadElement(m[0])?m[0].argument:a.objectExpression(c.dedupeProperties(m,S))),{tag:r,props:T,isComponent:n,slots:d,directives:i,patchFlag:h,dynamicPropNames:o}})(e,t),{optimize:y=!1}=t.opts,g=e.getData("slotFlag")||1;let b;if(r.length>1||m)b=i?r.length?a.objectExpression([!!r.length&&a.objectProperty(a.identifier("default"),a.arrowFunctionExpression([],a.arrayExpression(c.buildIIFE(e,r)))),...m?a.isObjectExpression(m)?m.properties:[a.spreadElement(m)]:[],y&&a.objectProperty(a.identifier("_"),a.numericLiteral(g))].filter(Boolean)):m:a.arrayExpression(r);else if(1===r.length){const{enableObjectSlots:n=!0}=t.opts,s=r[0],o=a.objectExpression([a.objectProperty(a.identifier("default"),a.arrowFunctionExpression([],a.arrayExpression(c.buildIIFE(e,[s])))),y&&a.objectProperty(a.identifier("_"),a.numericLiteral(g))].filter(Boolean));if(a.isIdentifier(s)&&i)b=n?a.conditionalExpression(a.callExpression(t.get("@vue/babel-plugin-jsx/runtimeIsSlot")(),[s]),s,o):o;else if(a.isCallExpression(s)&&s.loc&&i)if(n){const{scope:r}=e,n=r.generateUidIdentifier("slot");r&&r.push({id:n,kind:"let"});const i=a.objectExpression([a.objectProperty(a.identifier("default"),a.arrowFunctionExpression([],a.arrayExpression(c.buildIIFE(e,[n])))),y&&a.objectProperty(a.identifier("_"),a.numericLiteral(g))].filter(Boolean)),o=a.assignmentExpression("=",n,s),l=a.callExpression(t.get("@vue/babel-plugin-jsx/runtimeIsSlot")(),[o]);b=a.conditionalExpression(l,n,i)}else b=o;else b=a.isFunctionExpression(s)||a.isArrowFunctionExpression(s)?a.objectExpression([a.objectProperty(a.identifier("default"),s)]):a.isObjectExpression(s)?a.objectExpression([...s.properties,y&&a.objectProperty(a.identifier("_"),a.numericLiteral(g))].filter(Boolean)):i?a.objectExpression([a.objectProperty(a.identifier("default"),a.arrowFunctionExpression([],a.arrayExpression([s])))]):a.arrayExpression([s])}const v=a.callExpression(c.createIdentifier(t,"createVNode"),[n,s,b||a.nullLiteral(),!!d&&y&&a.numericLiteral(d),!!h.size&&y&&a.arrayExpression([...h.keys()].map((e=>a.stringLiteral(e))))].filter(Boolean));return o.length?a.callExpression(c.createIdentifier(t,"withDirectives"),[v,a.arrayExpression(o)]):v};t.default={JSXElement:{exit(e,t){e.replaceWith(f(e,t))}}}},function(e,t,r){var n;/*! https://mths.be/punycode v1.3.2 by @mathias */e=r.nmd(e),function(s){t&&t.nodeType,e&&e.nodeType;var i="object"==typeof r.g&&r.g;i.global!==i&&i.window!==i&&i.self;var o,a=2147483647,l=36,c=/^xn--/,u=/[^\x20-\x7E]/,p=/[\x2E\u3002\uFF0E\uFF61]/g,f={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},d=Math.floor,h=String.fromCharCode;function m(e){throw RangeError(f[e])}function y(e,t){for(var r=e.length,n=[];r--;)n[r]=t(e[r]);return n}function g(e,t){var r=e.split("@"),n="";return r.length>1&&(n=r[0]+"@",e=r[1]),n+y((e=e.replace(p,".")).split("."),t).join(".")}function b(e){for(var t,r,n=[],s=0,i=e.length;s=55296&&t<=56319&&s65535&&(t+=h((e-=65536)>>>10&1023|55296),e=56320|1023&e),t+h(e)})).join("")}function E(e,t){return e+22+75*(e<26)-((0!=t)<<5)}function x(e,t,r){var n=0;for(e=r?d(e/700):e>>1,e+=d(e/t);e>455;n+=l)e=d(e/35);return d(n+36*e/(e+38))}function S(e){var t,r,n,s,i,o,c,u,p,f,h,y=[],g=e.length,b=0,E=128,S=72;for((r=e.lastIndexOf("-"))<0&&(r=0),n=0;n=128&&m("not-basic"),y.push(e.charCodeAt(n));for(s=r>0?r+1:0;s=g&&m("invalid-input"),((u=(h=e.charCodeAt(s++))-48<10?h-22:h-65<26?h-65:h-97<26?h-97:l)>=l||u>d((a-b)/o))&&m("overflow"),b+=u*o,!(u<(p=c<=S?1:c>=S+26?26:c-S));c+=l)o>d(a/(f=l-p))&&m("overflow"),o*=f;S=x(b-i,t=y.length+1,0==i),d(b/t)>a-E&&m("overflow"),E+=d(b/t),b%=t,y.splice(b++,0,E)}return v(y)}function T(e){var t,r,n,s,i,o,c,u,p,f,y,g,v,S,T,w=[];for(g=(e=b(e)).length,t=128,r=0,i=72,o=0;o=t&&yd((a-r)/(v=n+1))&&m("overflow"),r+=(c-t)*v,t=c,o=0;oa&&m("overflow"),y==t){for(u=r,p=l;!(u<(f=p<=i?1:p>=i+26?26:p-i));p+=l)T=u-f,S=l-f,w.push(h(E(f+T%S,0))),u=d(T/S);w.push(h(E(u,0))),i=x(r,v,n==s),r=0,++n}++r,++t}return w.join("")}o={version:"1.3.2",ucs2:{decode:b,encode:v},decode:S,encode:T,toASCII:function(e){return g(e,(function(e){return u.test(e)?"xn--"+T(e):e}))},toUnicode:function(e){return g(e,(function(e){return c.test(e)?S(e.slice(4).toLowerCase()):e}))}},void 0===(n=function(){return o}.call(t,r,t,e))||(e.exports=n)}()},function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r),Object.defineProperty(e,n,{enumerable:!0,get:function(){return t[r]}})}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),s=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&n(t,e,r);return s(t,e),t};Object.defineProperty(t,"__esModule",{value:!0});const o=i(r(0)),a=r(50),l=e=>o.isArrayExpression(e)?e.elements.map((e=>o.isStringLiteral(e)?e.value:"")).filter(Boolean):[],c=(e,t,r,n)=>{var s;if("show"===n)return a.createIdentifier(t,"vShow");if("model"===n){let n;const i=(e=>{const t=e.get("attributes").find((e=>!!o.isJSXAttribute(e)&&o.isJSXIdentifier(e.get("name"))&&"type"===e.get("name").node.name));return t?t.get("value").node:null})(e.parentPath);switch(r.value){case"select":n=a.createIdentifier(t,"vModelSelect");break;case"textarea":n=a.createIdentifier(t,"vModelText");break;default:if(o.isStringLiteral(i)||!i)switch(null===(s=i)||void 0===s?void 0:s.value){case"checkbox":n=a.createIdentifier(t,"vModelCheckbox");break;case"radio":n=a.createIdentifier(t,"vModelRadio");break;default:n=a.createIdentifier(t,"vModelText")}else n=a.createIdentifier(t,"vModelDynamic")}return n}return o.callExpression(a.createIdentifier(t,"resolveDirective"),[o.stringLiteral(n)])};t.default=e=>{var t,r,n;const{name:s,path:i,value:a,state:u,tag:p,isComponent:f}=e,d=[],h=[],m=[],y=s.split("_"),g=(null===(t=y.shift())||void 0===t?void 0:t.replace(/^v/,"").replace(/^-/,"").replace(/^\S/,(e=>e.toLowerCase())))||"",b="models"===g,v="model"===g;if(v&&!o.isJSXExpressionContainer(i.get("value")))throw new Error("You have to use JSX Expression inside your v-model");if(b&&!f)throw new Error("v-models can only use in custom components");const E=!["html","text","model","models"].includes(g)||v&&!f;let x=y;return o.isArrayExpression(a)?(b?a.elements:[a]).forEach((e=>{if(b&&!o.isArrayExpression(e))throw new Error("You should pass a Two-dimensional Arrays to v-models");const{elements:t}=e,[r,n,s]=t;!n||o.isArrayExpression(n)||o.isSpreadElement(n)?o.isArrayExpression(n)?(E||d.push(o.nullLiteral()),x=l(n)):E||d.push(o.nullLiteral()):(d.push(n),x=l(s)),m.push(new Set(x)),h.push(r)})):v&&!E?(d.push(o.nullLiteral()),m.push(new Set(y))):m.push(new Set(y)),{directiveName:g,modifiers:m,values:h.length?h:[a],args:d,directive:E?[c(i,u,p,g),h[0]||a,(null===(r=m[0])||void 0===r?void 0:r.size)?d[0]||o.unaryExpression("void",o.numericLiteral(0),!0):d[0],!!(null===(n=m[0])||void 0===n?void 0:n.size)&&o.objectExpression([...m[0]].map((e=>o.objectProperty(o.identifier(e),o.booleanLiteral(!0)))))].filter(Boolean):void 0}}},function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r),Object.defineProperty(e,n,{enumerable:!0,get:function(){return t[r]}})}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),s=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&n(t,e,r);return s(t,e),t};Object.defineProperty(t,"__esModule",{value:!0});const o=i(r(0)),a=r(50);t.default={JSXFragment:{enter(e,t){const r=a.createIdentifier(t,a.FRAGMENT);e.replaceWith(((e,t)=>{const r=e.get("children")||[];return o.jsxElement(o.jsxOpeningElement(t,[]),o.jsxClosingElement(t),r.map((({node:e})=>e)),!1)})(e,o.isIdentifier(r)?o.jsxIdentifier(r.name):o.jsxMemberExpression(o.jsxIdentifier(r.object.name),o.jsxIdentifier(r.property.name))))}}}},e=>{"function"==typeof Object.create?e.exports=function(e,t){t&&(e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:e.exports=function(e,t){if(t){e.super_=t;var r=function(){};r.prototype=t.prototype,e.prototype=new r,e.prototype.constructor=e}}},(e,t,r)=>{"use strict";t.__esModule=!0,t.default=void 0;var n,s=(n=r(173))&&n.__esModule?n:{default:n},i=function(){function e(e,t){this.func=e||function(){},this.funcRes=null,this.options=t}var t=e.prototype;return t._shouldUpdateSelector=function(e,t){return void 0===t&&(t={}),!1!==Object.assign({},this.options,t).updateSelector&&"string"!=typeof e},t._isLossy=function(e){return void 0===e&&(e={}),!1===Object.assign({},this.options,e).lossless},t._root=function(e,t){return void 0===t&&(t={}),new s.default(e,this._parseOptions(t)).root},t._parseOptions=function(e){return{lossy:this._isLossy(e)}},t._run=function(e,t){var r=this;return void 0===t&&(t={}),new Promise((function(n,s){try{var i=r._root(e,t);Promise.resolve(r.func(i)).then((function(n){var s=void 0;return r._shouldUpdateSelector(e,t)&&(s=i.toString(),e.selector=s),{transform:n,root:i,string:s}})).then(n,s)}catch(e){return void s(e)}}))},t._runSync=function(e,t){void 0===t&&(t={});var r=this._root(e,t),n=this.func(r);if(n&&"function"==typeof n.then)throw new Error("Selector processor returned a promise to a synchronous call.");var s=void 0;return t.updateSelector&&"string"!=typeof e&&(s=r.toString(),e.selector=s),{transform:n,root:r,string:s}},t.ast=function(e,t){return this._run(e,t).then((function(e){return e.root}))},t.astSync=function(e,t){return this._runSync(e,t).root},t.transform=function(e,t){return this._run(e,t).then((function(e){return e.transform}))},t.transformSync=function(e,t){return this._runSync(e,t).transform},t.process=function(e,t){return this._run(e,t).then((function(e){return e.string||e.root.toString()}))},t.processSync=function(e,t){var r=this._runSync(e,t);return r.string||r.root.toString()},e}();t.default=i,e.exports=t.default},(e,t,r)=>{"use strict";t.__esModule=!0,t.default=void 0;var n,s,i=w(r(97)),o=w(r(99)),a=w(r(100)),l=w(r(101)),c=w(r(102)),u=w(r(103)),p=w(r(104)),f=w(r(105)),d=T(r(326)),h=w(r(106)),m=w(r(107)),y=w(r(108)),g=w(r(177)),b=T(r(515)),v=T(r(328)),E=T(r(5)),x=r(91);function S(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return S=function(){return e},e}function T(e){if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var t=S();if(t&&t.has(e))return t.get(e);var r={},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var s in e)if(Object.prototype.hasOwnProperty.call(e,s)){var i=n?Object.getOwnPropertyDescriptor(e,s):null;i&&(i.get||i.set)?Object.defineProperty(r,s,i):r[s]=e[s]}return r.default=e,t&&t.set(e,r),r}function w(e){return e&&e.__esModule?e:{default:e}}function P(e,t){for(var r=0;rthis.position&&(s=this.parseWhitespaceEquivalentTokens(t)),this.isNamedCombinator()?r=this.namedCombinator():this.currToken[b.FIELDS.TYPE]===v.combinator?(r=new m.default({value:this.content(),source:N(this.currToken),sourceIndex:this.currToken[b.FIELDS.START_POS]}),this.position++):A[this.currToken[b.FIELDS.TYPE]]||s||this.unexpected(),r){if(s){var i=this.convertWhitespaceNodesToSpace(s),o=i.space,a=i.rawSpace;r.spaces.before=o,r.rawSpaceBefore=a}}else{var l=this.convertWhitespaceNodesToSpace(s,!0),c=l.space,u=l.rawSpace;u||(u=c);var p={},f={spaces:{}};c.endsWith(" ")&&u.endsWith(" ")?(p.before=c.slice(0,c.length-1),f.spaces.before=u.slice(0,u.length-1)):c.startsWith(" ")&&u.startsWith(" ")?(p.after=c.slice(1),f.spaces.after=u.slice(1)):f.value=u,r=new m.default({value:" ",source:_(n,this.tokens[this.position-1]),sourceIndex:n[b.FIELDS.START_POS],spaces:p,raws:f})}return this.currToken&&this.currToken[b.FIELDS.TYPE]===v.space&&(r.spaces.after=this.optionalSpace(this.content()),this.position++),this.newNode(r)}var d=this.parseWhitespaceEquivalentTokens(t);if(d.length>0){var h=this.current.last;if(h){var y=this.convertWhitespaceNodesToSpace(d),g=y.space,E=y.rawSpace;void 0!==E&&(h.rawSpaceAfter+=E),h.spaces.after+=g}else d.forEach((function(t){return e.newNode(t)}))}},n.comma=function(){if(this.position===this.tokens.length-1)return this.root.trailingComma=!0,void this.position++;this.current._inferEndPosition();var e=new o.default({source:{start:C(this.tokens[this.position+1])}});this.current.parent.append(e),this.current=e,this.position++},n.comment=function(){var e=this.currToken;this.newNode(new l.default({value:this.content(),source:N(e),sourceIndex:e[b.FIELDS.START_POS]})),this.position++},n.error=function(e,t){throw this.root.error(e,t)},n.missingBackslash=function(){return this.error("Expected a backslash preceding the semicolon.",{index:this.currToken[b.FIELDS.START_POS]})},n.missingParenthesis=function(){return this.expected("opening parenthesis",this.currToken[b.FIELDS.START_POS])},n.missingSquareBracket=function(){return this.expected("opening square bracket",this.currToken[b.FIELDS.START_POS])},n.unexpected=function(){return this.error("Unexpected '"+this.content()+"'. Escaping special characters with \\ may help.",this.currToken[b.FIELDS.START_POS])},n.namespace=function(){var e=this.prevToken&&this.content(this.prevToken)||!0;return this.nextToken[b.FIELDS.TYPE]===v.word?(this.position++,this.word(e)):this.nextToken[b.FIELDS.TYPE]===v.asterisk?(this.position++,this.universal(e)):void 0},n.nesting=function(){if(this.nextToken&&"|"===this.content(this.nextToken))this.position++;else{var e=this.currToken;this.newNode(new y.default({value:this.content(),source:N(e),sourceIndex:e[b.FIELDS.START_POS]})),this.position++}},n.parentheses=function(){var e=this.current.last,t=1;if(this.position++,e&&e.type===E.PSEUDO){var r=new o.default({source:{start:C(this.tokens[this.position-1])}}),n=this.current;for(e.append(r),this.current=r;this.position1&&e.nextToken&&e.nextToken[b.FIELDS.TYPE]===v.openParenthesis&&e.error("Misplaced parenthesis.",{index:e.nextToken[b.FIELDS.START_POS]})})):this.expected(["pseudo-class","pseudo-element"],this.position-1)},n.space=function(){var e=this.content();0===this.position||this.prevToken[b.FIELDS.TYPE]===v.comma||this.prevToken[b.FIELDS.TYPE]===v.openParenthesis||this.current.nodes.every((function(e){return"comment"===e.type}))?(this.spaces=this.optionalSpace(e),this.position++):this.position===this.tokens.length-1||this.nextToken[b.FIELDS.TYPE]===v.comma||this.nextToken[b.FIELDS.TYPE]===v.closeParenthesis?(this.current.last.spaces.after=this.optionalSpace(e),this.position++):this.combinator()},n.string=function(){var e=this.currToken;this.newNode(new p.default({value:this.content(),source:N(e),sourceIndex:e[b.FIELDS.START_POS]})),this.position++},n.universal=function(e){var t=this.nextToken;if(t&&"|"===this.content(t))return this.position++,this.namespace();var r=this.currToken;this.newNode(new h.default({value:this.content(),source:N(r),sourceIndex:r[b.FIELDS.START_POS]}),e),this.position++},n.splitWord=function(e,t){for(var r=this,n=this.nextToken,s=this.content();n&&~[v.dollar,v.caret,v.equals,v.word].indexOf(n[b.FIELDS.TYPE]);){this.position++;var i=this.content();if(s+=i,i.lastIndexOf("\\")===i.length-1){var o=this.nextToken;o&&o[b.FIELDS.TYPE]===v.space&&(s+=this.requiredSpace(this.content(o)),this.position++)}n=this.nextToken}var l=D(s,".").filter((function(e){return"\\"!==s[e-1]})),p=D(s,"#").filter((function(e){return"\\"!==s[e-1]})),f=D(s,"#{");f.length&&(p=p.filter((function(e){return!~f.indexOf(e)})));var d=(0,g.default)(function(){var e=Array.prototype.concat.apply([],arguments);return e.filter((function(t,r){return r===e.indexOf(t)}))}([0].concat(l,p)));d.forEach((function(n,i){var o,f=d[i+1]||s.length,h=s.slice(n,f);if(0===i&&t)return t.call(r,h,d.length);var m=r.currToken,y=m[b.FIELDS.START_POS]+d[i],g=k(m[1],m[2]+n,m[3],m[2]+(f-1));if(~l.indexOf(n)){var v={value:h.slice(1),source:g,sourceIndex:y};o=new a.default(j(v,"value"))}else if(~p.indexOf(n)){var E={value:h.slice(1),source:g,sourceIndex:y};o=new c.default(j(E,"value"))}else{var x={value:h,source:g,sourceIndex:y};j(x,"value"),o=new u.default(x)}r.newNode(o,e),e=null})),this.position++},n.word=function(e){var t=this.nextToken;return t&&"|"===this.content(t)?(this.position++,this.namespace()):this.splitWord(e)},n.loop=function(){for(;this.position{"use strict";t.__esModule=!0,t.default=function(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n0;){var s=r.shift();if(!e[s])return;e=e[s]}return e},e.exports=t.default},(e,t)=>{"use strict";t.__esModule=!0,t.default=function(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n0;){var s=r.shift();e[s]||(e[s]={}),e=e[s]}},e.exports=t.default},(e,t)=>{"use strict";t.__esModule=!0,t.default=function(e){for(var t="",r=e.indexOf("/*"),n=0;r>=0;){t+=e.slice(n,r);var s=e.indexOf("*/",r+2);if(s<0)return t;n=s+2,r=e.indexOf("/*",n)}return t+e.slice(n)},e.exports=t.default},(e,t)=>{"use strict";t.__esModule=!0,t.default=function(e){return e.sort((function(e,t){return e-t}))},e.exports=t.default},function(e,t){!function(e){"use strict";for(var t={},r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",n=0;n>>=5)>0&&(n|=32),t+=r[n]}while(e>0);return t}e.decode=function(e){for(var r=[],n=[],i=[0,0,0,0,0],o=0,a=0,l=0,c=0;a>>=1,d&&(c=0===c?-2147483648:-c),i[o]+=c,o++,c=l=0}}}return s(n,i,o),r.push(n),r},e.encode=function(e){for(var t=0,r=0,n=0,s=0,o="",a=0;a0&&(o+=";"),0!==l.length){for(var c=0,u=[],p=0,f=l;p1&&(h+=i(d[1]-t)+i(d[2]-r)+i(d[3]-n),t=d[1],r=d[2],n=d[3]),5===d.length&&(h+=i(d[4]-s),s=d[4]),u.push(h)}o+=u.join(",")}}return o},Object.defineProperty(e,"__esModule",{value:!0})}(t)},(e,t,r)=>{"use strict";var n,s=r(180),i=r(31),o=r(2),a=r(24),l=r(17),c=r(181),u=r(32),p=r(119),f=r(112).f,d=r(188),h=r(190),m=r(54),y=r(58),g=o.Int8Array,b=g&&g.prototype,v=o.Uint8ClampedArray,E=v&&v.prototype,x=g&&d(g),S=b&&d(b),T=Object.prototype,w=T.isPrototypeOf,P=m("toStringTag"),A=y("TYPED_ARRAY_TAG"),O=s&&!!h&&"Opera"!==c(o.opera),C=!1,I={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},k={BigInt64Array:8,BigUint64Array:8},N=function(e){if(!a(e))return!1;var t=c(e);return l(I,t)||l(k,t)};for(n in I)o[n]||(O=!1);if((!O||"function"!=typeof x||x===Function.prototype)&&(x=function(){throw TypeError("Incorrect invocation")},O))for(n in I)o[n]&&h(o[n],x);if((!O||!S||S===T)&&(S=x.prototype,O))for(n in I)o[n]&&h(o[n].prototype,S);if(O&&d(E)!==S&&h(E,S),i&&!l(S,P))for(n in C=!0,f(S,P,{get:function(){return a(this)?this[A]:void 0}}),I)o[n]&&u(o[n],A,n);e.exports={NATIVE_ARRAY_BUFFER_VIEWS:O,TYPED_ARRAY_TAG:C&&A,aTypedArray:function(e){if(N(e))return e;throw TypeError("Target is not a typed array")},aTypedArrayConstructor:function(e){if(h){if(w.call(x,e))return e}else for(var t in I)if(l(I,n)){var r=o[t];if(r&&(e===r||w.call(r,e)))return e}throw TypeError("Target is not a typed array constructor")},exportTypedArrayMethod:function(e,t,r){if(i){if(r)for(var n in I){var s=o[n];if(s&&l(s.prototype,e))try{delete s.prototype[e]}catch(e){}}S[e]&&!r||p(S,e,r?t:O&&b[e]||t)}},exportTypedArrayStaticMethod:function(e,t,r){var n,s;if(i){if(h){if(r)for(n in I)if((s=o[n])&&l(s,e))try{delete s[e]}catch(e){}if(x[e]&&!r)return;try{return p(x,e,r?t:O&&x[e]||t)}catch(e){}}for(n in I)!(s=o[n])||s[e]&&!r||p(s,e,t)}},isView:function(e){if(!a(e))return!1;var t=c(e);return"DataView"===t||l(I,t)||l(k,t)},isTypedArray:N,TypedArray:x,TypedArrayPrototype:S}},e=>{e.exports="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof DataView},(e,t,r)=>{var n=r(182),s=r(60),i=r(54)("toStringTag"),o="Arguments"==s(function(){return arguments}());e.exports=n?s:function(e){var t,r,n;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(r=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),i))?r:o?s(t):"Object"==(n=s(t))&&"function"==typeof t.callee?"Arguments":n}},(e,t,r)=>{var n={};n[r(54)("toStringTag")]="z",e.exports="[object z]"===String(n)},e=>{e.exports=!1},(e,t,r)=>{var n=r(2);e.exports=n},(e,t,r)=>{var n=r(117);e.exports=n&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},(e,t,r)=>{var n,s,i,o=r(187),a=r(2),l=r(24),c=r(32),u=r(17),p=r(55),f=r(121),d=r(122),h="Object already initialized",m=a.WeakMap;if(o||p.state){var y=p.state||(p.state=new m),g=y.get,b=y.has,v=y.set;n=function(e,t){if(b.call(y,e))throw new TypeError(h);return t.facade=e,v.call(y,e,t),t},s=function(e){return g.call(y,e)||{}},i=function(e){return b.call(y,e)}}else{var E=f("state");d[E]=!0,n=function(e,t){if(u(e,E))throw new TypeError(h);return t.facade=e,c(e,E,t),t},s=function(e){return u(e,E)?e[E]:{}},i=function(e){return u(e,E)}}e.exports={set:n,get:s,has:i,enforce:function(e){return i(e)?s(e):n(e,{})},getterFor:function(e){return function(t){var r;if(!l(t)||(r=s(t)).type!==e)throw TypeError("Incompatible receiver, "+e+" required");return r}}}},(e,t,r)=>{var n=r(2),s=r(120),i=n.WeakMap;e.exports="function"==typeof i&&/native code/.test(s(i))},(e,t,r)=>{var n=r(17),s=r(109),i=r(121),o=r(189),a=i("IE_PROTO"),l=Object.prototype;e.exports=o?Object.getPrototypeOf:function(e){return e=s(e),n(e,a)?e[a]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?l:null}},(e,t,r)=>{var n=r(16);e.exports=!n((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype}))},(e,t,r)=>{var n=r(57),s=r(191);e.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var e,t=!1,r={};try{(e=Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set).call(r,[]),t=r instanceof Array}catch(e){}return function(r,i){return n(r),s(i),t?e.call(r,i):r.__proto__=i,r}}():void 0)},(e,t,r)=>{var n=r(24);e.exports=function(e){if(!n(e)&&null!==e)throw TypeError("Can't set "+String(e)+" as a prototype");return e}},e=>{var t=Math.floor,r=function(e,i){var o=e.length,a=t(o/2);return o<8?n(e,i):s(r(e.slice(0,a),i),r(e.slice(a),i),i)},n=function(e,t){for(var r,n,s=e.length,i=1;i0;)e[n]=e[--n];n!==i++&&(e[n]=r)}return e},s=function(e,t,r){for(var n=e.length,s=t.length,i=0,o=0,a=[];i{var n=r(33).match(/firefox\/(\d+)/i);e.exports=!!n&&+n[1]},(e,t,r)=>{var n=r(33);e.exports=/MSIE|Trident/.test(n)},(e,t,r)=>{var n=r(33).match(/AppleWebKit\/(\d+)\./);e.exports=!!n&&+n[1]},(e,t,r)=>{var n=r(2),s=r(197).f,i=r(32),o=r(119),a=r(56),l=r(199),c=r(205);e.exports=function(e,t){var r,u,p,f,d,h=e.target,m=e.global,y=e.stat;if(r=m?n:y?n[h]||a(h,{}):(n[h]||{}).prototype)for(u in t){if(f=t[u],p=e.noTargetGet?(d=s(r,u))&&d.value:r[u],!c(m?u:h+(y?".":"#")+u,e.forced)&&void 0!==p){if(typeof f==typeof p)continue;l(f,p)}(e.sham||p&&p.sham)&&i(f,"sham",!0),o(r,u,f,e)}}},(e,t,r)=>{var n=r(31),s=r(358),i=r(116),o=r(61),a=r(115),l=r(17),c=r(113),u=Object.getOwnPropertyDescriptor;t.f=n?u:function(e,t){if(e=o(e),t=a(t,!0),c)try{return u(e,t)}catch(e){}if(l(e,t))return i(!s.f.call(e,t),e[t])}},(e,t,r)=>{var n=r(16),s=r(60),i="".split;e.exports=n((function(){return!Object("z").propertyIsEnumerable(0)}))?function(e){return"String"==s(e)?i.call(e,""):Object(e)}:Object},(e,t,r)=>{var n=r(17),s=r(200),i=r(197),o=r(112);e.exports=function(e,t){for(var r=s(t),a=o.f,l=i.f,c=0;c{var n=r(59),s=r(359),i=r(360),o=r(57);e.exports=n("Reflect","ownKeys")||function(e){var t=s.f(o(e)),r=i.f;return r?t.concat(r(e)):t}},(e,t,r)=>{var n=r(17),s=r(61),i=r(202).indexOf,o=r(122);e.exports=function(e,t){var r,a=s(e),l=0,c=[];for(r in a)!n(o,r)&&n(a,r)&&c.push(r);for(;t.length>l;)n(a,r=t[l++])&&(~i(c,r)||c.push(r));return c}},(e,t,r)=>{var n=r(61),s=r(124),i=r(203),o=function(e){return function(t,r,o){var a,l=n(t),c=s(l.length),u=i(o,c);if(e&&r!=r){for(;c>u;)if((a=l[u++])!=a)return!0}else for(;c>u;u++)if((e||u in l)&&l[u]===r)return e||u||0;return!e&&-1}};e.exports={includes:o(!0),indexOf:o(!1)}},(e,t,r)=>{var n=r(125),s=Math.max,i=Math.min;e.exports=function(e,t){var r=n(e);return r<0?s(r+t,0):i(r,t)}},e=>{e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},(e,t,r)=>{var n=r(16),s=/#|\.prototype\./,i=function(e,t){var r=a[o(e)];return r==c||r!=l&&("function"==typeof t?n(t):!!t)},o=i.normalize=function(e){return String(e).replace(s,".").toLowerCase()},a=i.data={},l=i.NATIVE="N",c=i.POLYFILL="P";e.exports=i},(e,t,r)=>{var n,s,i,o=r(2),a=r(16),l=r(207),c=r(208),u=r(114),p=r(209),f=r(210),d=o.location,h=o.setImmediate,m=o.clearImmediate,y=o.process,g=o.MessageChannel,b=o.Dispatch,v=0,E={},x=function(e){if(E.hasOwnProperty(e)){var t=E[e];delete E[e],t()}},S=function(e){return function(){x(e)}},T=function(e){x(e.data)},w=function(e){o.postMessage(e+"",d.protocol+"//"+d.host)};h&&m||(h=function(e){for(var t=[],r=1;arguments.length>r;)t.push(arguments[r++]);return E[++v]=function(){("function"==typeof e?e:Function(e)).apply(void 0,t)},n(v),v},m=function(e){delete E[e]},f?n=function(e){y.nextTick(S(e))}:b&&b.now?n=function(e){b.now(S(e))}:g&&!p?(i=(s=new g).port2,s.port1.onmessage=T,n=l(i.postMessage,i,1)):o.addEventListener&&"function"==typeof postMessage&&!o.importScripts&&d&&"file:"!==d.protocol&&!a(w)?(n=w,o.addEventListener("message",T,!1)):n="onreadystatechange"in u("script")?function(e){c.appendChild(u("script")).onreadystatechange=function(){c.removeChild(this),x(e)}}:function(e){setTimeout(S(e),0)}),e.exports={set:h,clear:m}},(e,t,r)=>{var n=r(123);e.exports=function(e,t,r){if(n(e),void 0===t)return e;switch(r){case 0:return function(){return e.call(t)};case 1:return function(r){return e.call(t,r)};case 2:return function(r,n){return e.call(t,r,n)};case 3:return function(r,n,s){return e.call(t,r,n,s)}}return function(){return e.apply(t,arguments)}}},(e,t,r)=>{var n=r(59);e.exports=n("document","documentElement")},(e,t,r)=>{var n=r(33);e.exports=/(?:iphone|ipod|ipad).*applewebkit/i.test(n)},(e,t,r)=>{var n=r(60),s=r(2);e.exports="process"==n(s.process)},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.get=u,t.minVersion=function(e){return c(e).minVersion()},t.getDependencies=function(e){return Array.from(c(e).dependencies.values())},t.ensure=function(e,t){a||(a=t),c(e)},t.default=t.list=void 0;var n=r(10),s=r(0),i=r(457);function o(e){const t=[];for(;e.parentPath;e=e.parentPath)t.push(e.key),e.inList&&t.push(e.listKey);return t.reverse().join(".")}let a;const l=Object.create(null);function c(e){if(!l[e]){const t=i.default[e];if(!t)throw Object.assign(new ReferenceError(`Unknown helper ${e}`),{code:"BABEL_HELPER_UNKNOWN",helper:e});const r=()=>{const r={ast:s.file(t.ast())};return a?new a({filename:`babel-helper://${e}`},r):r},c=function(e){const t=new Set,r=new Set,s=new Map;let a,l;const c=[],u=[],p=[],f={ImportDeclaration(e){const t=e.node.source.value;if(!i.default[t])throw e.buildCodeFrameError(`Unknown helper ${t}`);if(1!==e.get("specifiers").length||!e.get("specifiers.0").isImportDefaultSpecifier())throw e.buildCodeFrameError("Helpers can only import a default value");const r=e.node.specifiers[0].local;s.set(r,t),u.push(o(e))},ExportDefaultDeclaration(e){const t=e.get("declaration");if(t.isFunctionDeclaration()){if(!t.node.id)throw t.buildCodeFrameError("Helpers should give names to their exported func declaration");a=t.node.id.name}l=o(e)},ExportAllDeclaration(e){throw e.buildCodeFrameError("Helpers can only export default")},ExportNamedDeclaration(e){throw e.buildCodeFrameError("Helpers can only export default")},Statement(e){e.isModuleDeclaration()||e.skip()}},d={Program(e){const t=e.scope.getAllBindings();Object.keys(t).forEach((e=>{e!==a&&(s.has(t[e].identifier)||r.add(e))}))},ReferencedIdentifier(e){const r=e.node.name,n=e.scope.getBinding(r,!0);n?s.has(n.identifier)&&p.push(o(e)):t.add(r)},AssignmentExpression(e){const t=e.get("left");if(!(a in t.getBindingIdentifiers()))return;if(!t.isIdentifier())throw t.buildCodeFrameError("Only simple assignments to exports are allowed in helpers");const r=e.scope.getBinding(a);null!=r&&r.scope.path.isProgram()&&c.push(o(e))}};if((0,n.default)(e.ast,f,e.scope),(0,n.default)(e.ast,d,e.scope),!l)throw new Error("Helpers must default-export something.");return c.reverse(),{globals:Array.from(t),localBindingNames:Array.from(r),dependencies:s,exportBindingAssignments:c,exportPath:l,exportName:a,importBindingsReferences:p,importPaths:u}}(r());l[e]={build(e,t,i){const o=r();return function(e,t,r,i,o){if(i&&!r)throw new Error("Unexpected local bindings for module-based helpers.");if(!r)return;const{localBindingNames:a,dependencies:l,exportBindingAssignments:c,exportPath:u,exportName:p,importBindingsReferences:f,importPaths:d}=t,h={};l.forEach(((e,t)=>{h[t.name]="function"==typeof o&&o(e)||t}));const m={},y=new Set(i||[]);a.forEach((e=>{let t=e;for(;y.has(t);)t="_"+t;t!==e&&(m[e]=t)})),"Identifier"===r.type&&p!==r.name&&(m[p]=r.name);const g={Program(e){const t=e.get(u),n=d.map((t=>e.get(t))),i=f.map((t=>e.get(t))),o=t.get("declaration");if("Identifier"===r.type)o.isFunctionDeclaration()?t.replaceWith(o):t.replaceWith(s.variableDeclaration("var",[s.variableDeclarator(r,o.node)]));else{if("MemberExpression"!==r.type)throw new Error("Unexpected helper format.");o.isFunctionDeclaration()?(c.forEach((t=>{const n=e.get(t);n.replaceWith(s.assignmentExpression("=",r,n.node))})),t.replaceWith(o),e.pushContainer("body",s.expressionStatement(s.assignmentExpression("=",r,s.identifier(p))))):t.replaceWith(s.expressionStatement(s.assignmentExpression("=",r,o.node)))}Object.keys(m).forEach((t=>{e.scope.rename(t,m[t])}));for(const e of n)e.remove();for(const e of i){const t=s.cloneNode(h[e.node.name]);e.replaceWith(t)}e.stop()}};(0,n.default)(e.ast,g,e.scope)}(o,c,t,i,e),{nodes:o.ast.program.body,globals:c.globals}},minVersion:()=>t.minVersion,dependencies:c.dependencies}}return l[e]}function u(e,t,r,n){return c(e).build(t,r,n)}const p=Object.keys(i.default).map((e=>e.replace(/^_/,""))).filter((e=>"__esModule"!==e));t.list=p;var f=u;t.default=f},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ForAwaitStatement=t.NumericLiteralTypeAnnotation=t.ExistentialTypeParam=t.SpreadProperty=t.RestProperty=t.Flow=t.Pure=t.Generated=t.User=t.Var=t.BlockScoped=t.Referenced=t.Scope=t.Expression=t.Statement=t.BindingIdentifier=t.ReferencedMemberExpression=t.ReferencedIdentifier=void 0;var n=r(0);const s={types:["Identifier","JSXIdentifier"],checkPath(e,t){const{node:r,parent:s}=e;if(!n.isIdentifier(r,t)&&!n.isJSXMemberExpression(s,t)){if(!n.isJSXIdentifier(r,t))return!1;if(n.react.isCompatTag(r.name))return!1}return n.isReferenced(r,s,e.parentPath.parent)}};t.ReferencedIdentifier=s;const i={types:["MemberExpression"],checkPath:({node:e,parent:t})=>n.isMemberExpression(e)&&n.isReferenced(e,t)};t.ReferencedMemberExpression=i;const o={types:["Identifier"],checkPath(e){const{node:t,parent:r}=e,s=e.parentPath.parent;return n.isIdentifier(t)&&n.isBinding(t,r,s)}};t.BindingIdentifier=o;const a={types:["Statement"],checkPath({node:e,parent:t}){if(n.isStatement(e)){if(n.isVariableDeclaration(e)){if(n.isForXStatement(t,{left:e}))return!1;if(n.isForStatement(t,{init:e}))return!1}return!0}return!1}};t.Statement=a;const l={types:["Expression"],checkPath:e=>e.isIdentifier()?e.isReferencedIdentifier():n.isExpression(e.node)};t.Expression=l;const c={types:["Scopable","Pattern"],checkPath:e=>n.isScope(e.node,e.parent)};t.Scope=c;const u={checkPath:e=>n.isReferenced(e.node,e.parent)};t.Referenced=u;const p={checkPath:e=>n.isBlockScoped(e.node)};t.BlockScoped=p;const f={types:["VariableDeclaration"],checkPath:e=>n.isVar(e.node)};t.Var=f;t.User={checkPath:e=>e.node&&!!e.node.loc};t.Generated={checkPath:e=>!e.isUser()};t.Pure={checkPath:(e,t)=>e.scope.isPure(e.node,t)};const d={types:["Flow","ImportDeclaration","ExportDeclaration","ImportSpecifier"],checkPath:({node:e})=>!(!n.isFlow(e)&&(n.isImportDeclaration(e)?"type"!==e.importKind&&"typeof"!==e.importKind:n.isExportDeclaration(e)?"type"!==e.exportKind:!n.isImportSpecifier(e)||"type"!==e.importKind&&"typeof"!==e.importKind))};t.Flow=d;t.RestProperty={types:["RestElement"],checkPath:e=>e.parentPath&&e.parentPath.isObjectPattern()};t.SpreadProperty={types:["RestElement"],checkPath:e=>e.parentPath&&e.parentPath.isObjectExpression()},t.ExistentialTypeParam={types:["ExistsTypeAnnotation"]},t.NumericLiteralTypeAnnotation={types:["NumberLiteralTypeAnnotation"]};t.ForAwaitStatement={types:["ForOfStatement"],checkPath:({node:e})=>!0===e.await}},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const r=e.split(".");return e=>(0,n.default)(e,r,t)};var n=r(214)},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,r){if(!(0,n.isMemberExpression)(e))return!1;const s=Array.isArray(t)?t:t.split("."),i=[];let o;for(o=e;(0,n.isMemberExpression)(o);o=o.object)i.push(o.property);if(i.push(o),i.lengths.length)return!1;for(let e=0,t=i.length-1;e{"use strict";let t=null;function r(e){if(null!==t&&(t.property,1)){const e=t;return t=r.prototype=null,e}return t=r.prototype=null==e?Object.create(null):e,new r}r(),e.exports=function(e){return r(e)}},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){if(e===t)return!0;const r=n.PLACEHOLDERS_ALIAS[e];if(r)for(const e of r)if(t===e)return!0;return!1};var n=r(11)},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.PLACEHOLDERS_FLIPPED_ALIAS=t.PLACEHOLDERS_ALIAS=t.PLACEHOLDERS=void 0;var n=r(20);const s=["Identifier","StringLiteral","Expression","Statement","Declaration","BlockStatement","ClassBody","Pattern"];t.PLACEHOLDERS=s;const i={Declaration:["Statement"],Pattern:["PatternLike","LVal"]};t.PLACEHOLDERS_ALIAS=i;for(const e of s){const t=n.ALIAS_KEYS[e];null!=t&&t.length&&(i[e]=t)}const o={};t.PLACEHOLDERS_FLIPPED_ALIAS=o,Object.keys(i).forEach((e=>{i[e].forEach((t=>{Object.hasOwnProperty.call(o,t)||(o[t]=[]),o[t].push(e)}))}))},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return!(!e||!n.VISITOR_KEYS[e.type])};var n=r(11)},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function e(t){const r={},i={},o=[],a=[];for(let l=0;l=0)){if((0,n.isAnyTypeAnnotation)(c))return[c];if((0,n.isFlowBaseAnnotation)(c))i[c.type]=c;else if((0,n.isUnionTypeAnnotation)(c))o.indexOf(c.types)<0&&(t=t.concat(c.types),o.push(c.types));else if((0,n.isGenericTypeAnnotation)(c)){const t=s(c.id);if(r[t]){let n=r[t];n.typeParameters?c.typeParameters&&(n.typeParameters.params=e(n.typeParameters.params.concat(c.typeParameters.params))):n=c.typeParameters}else r[t]=c}else a.push(c)}}for(const e of Object.keys(i))a.push(i[e]);for(const e of Object.keys(r))a.push(r[e]);return a};var n=r(1);function s(e){return(0,n.isIdentifier)(e)?e.name:`${e.id.name}.${s(e.qualification)}`}},(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,r){if(!r||!e)return e;const n=`${t}Comments`;return e[n]?e[n]="leading"===t?r.concat(e[n]):e[n].concat(r):e[n]=r,e}},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){(0,n.default)("innerComments",e,t)};var n=r(131)},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){(0,n.default)("leadingComments",e,t)};var n=r(131)},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){return(0,n.default)(e,t),(0,s.default)(e,t),(0,i.default)(e,t),e};var n=r(224),s=r(222),i=r(221)},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){(0,n.default)("trailingComments",e,t)};var n=r(131)},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){if((0,n.isBlockStatement)(e))return e;let r=[];return(0,n.isEmptyStatement)(e)?r=[]:((0,n.isStatement)(e)||(e=(0,n.isFunction)(t)?(0,s.returnStatement)(e):(0,s.expressionStatement)(e)),r=[e]),(0,s.blockStatement)(r)};var n=r(1),s=r(6)},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){e+="";let t="";for(const r of e)t+=(0,s.isIdentifierChar)(r.codePointAt(0))?r:"-";return t=t.replace(/^[-0-9]+/,""),t=t.replace(/[-\s]+(.)?/g,(function(e,t){return t?t.toUpperCase():""})),(0,n.default)(t)||(t=`_${t}`),t||"_"};var n=r(38),s=r(63)},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){return(0,n.default)(e,s.default,t),e};var n=r(228),s=r(229)},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function e(t,r,s){if(!t)return;const i=n.VISITOR_KEYS[t.type];if(i){r(t,s=s||{});for(const n of i){const i=t[n];if(Array.isArray(i))for(const t of i)e(t,r,s);else e(i,r,s)}}};var n=r(11)},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t={}){const r=t.preserveComments?s:i;for(const t of r)null!=e[t]&&(e[t]=void 0);for(const t of Object.keys(e))"_"===t[0]&&null!=e[t]&&(e[t]=void 0);const n=Object.getOwnPropertySymbols(e);for(const t of n)e[t]=null};var n=r(25);const s=["tokens","start","end","loc","raw","rawValue"],i=n.COMMENT_KEYS.concat(["comments"]).concat(s)},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return(0,n.isVariableDeclaration)(e)&&("var"!==e.kind||e[s.BLOCK_SCOPED_SYMBOL])};var n=r(1),s=r(25)},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(413),s=r(10),i=r(232),o=r(414),a=r(0),l=r(34);function c(e,t){switch(null==e?void 0:e.type){default:if(a.isModuleDeclaration(e))if((a.isExportAllDeclaration(e)||a.isExportNamedDeclaration(e)||a.isImportDeclaration(e))&&e.source)c(e.source,t);else if((a.isExportNamedDeclaration(e)||a.isImportDeclaration(e))&&e.specifiers&&e.specifiers.length)for(const r of e.specifiers)c(r,t);else(a.isExportDefaultDeclaration(e)||a.isExportNamedDeclaration(e))&&e.declaration&&c(e.declaration,t);else a.isModuleSpecifier(e)?c(e.local,t):a.isLiteral(e)&&t.push(e.value);break;case"MemberExpression":case"OptionalMemberExpression":case"JSXMemberExpression":c(e.object,t),c(e.property,t);break;case"Identifier":case"JSXIdentifier":t.push(e.name);break;case"CallExpression":case"OptionalCallExpression":case"NewExpression":c(e.callee,t);break;case"ObjectExpression":case"ObjectPattern":for(const r of e.properties)c(r,t);break;case"SpreadElement":case"RestElement":c(e.argument,t);break;case"ObjectProperty":case"ObjectMethod":case"ClassProperty":case"ClassMethod":case"ClassPrivateProperty":case"ClassPrivateMethod":c(e.key,t);break;case"ThisExpression":t.push("this");break;case"Super":t.push("super");break;case"Import":t.push("import");break;case"DoExpression":t.push("do");break;case"YieldExpression":t.push("yield"),c(e.argument,t);break;case"AwaitExpression":t.push("await"),c(e.argument,t);break;case"AssignmentExpression":c(e.left,t);break;case"VariableDeclarator":c(e.id,t);break;case"FunctionExpression":case"FunctionDeclaration":case"ClassExpression":case"ClassDeclaration":case"PrivateName":c(e.id,t);break;case"ParenthesizedExpression":c(e.expression,t);break;case"UnaryExpression":case"UpdateExpression":c(e.argument,t);break;case"MetaProperty":c(e.meta,t),c(e.property,t);break;case"JSXElement":c(e.openingElement,t);break;case"JSXOpeningElement":t.push(e.name);break;case"JSXFragment":c(e.openingFragment,t);break;case"JSXOpeningFragment":t.push("Fragment");break;case"JSXNamespacedName":c(e.namespace,t),c(e.name,t)}}const u={For(e){for(const t of a.FOR_INIT_KEYS){const r=e.get(t);r.isVar()&&(e.scope.getFunctionParent()||e.scope.getProgramParent()).registerBinding("var",r)}},Declaration(e){e.isBlockScoped()||e.isExportDeclaration()||(e.scope.getFunctionParent()||e.scope.getProgramParent()).registerDeclaration(e)},ReferencedIdentifier(e,t){t.references.push(e)},ForXStatement(e,t){const r=e.get("left");(r.isPattern()||r.isIdentifier())&&t.constantViolations.push(e)},ExportDeclaration:{exit(e){const{node:t,scope:r}=e;if(a.isExportAllDeclaration(t))return;const n=t.declaration;if(a.isClassDeclaration(n)||a.isFunctionDeclaration(n)){const t=n.id;if(!t)return;const s=r.getBinding(t.name);s&&s.reference(e)}else if(a.isVariableDeclaration(n))for(const t of n.declarations)for(const n of Object.keys(a.getBindingIdentifiers(t))){const t=r.getBinding(n);t&&t.reference(e)}}},LabeledStatement(e){e.scope.getBlockParent().registerDeclaration(e)},AssignmentExpression(e,t){t.assignments.push(e)},UpdateExpression(e,t){t.constantViolations.push(e)},UnaryExpression(e,t){"delete"===e.node.operator&&t.constantViolations.push(e)},BlockScoped(e){let t=e.scope;if(t.path===e&&(t=t.parent),t.getBlockParent().registerDeclaration(e),e.isClassDeclaration()&&e.node.id){const t=e.node.id.name;e.scope.bindings[t]=e.scope.parent.getBinding(t)}},CatchClause(e){e.scope.registerBinding("let",e)},Function(e){e.isFunctionExpression()&&e.has("id")&&!e.get("id").node[a.NOT_LOCAL_BINDING]&&e.scope.registerBinding("local",e.get("id"),e);const t=e.get("params");for(const r of t)e.scope.registerBinding("param",r)},ClassExpression(e){e.has("id")&&!e.get("id").node[a.NOT_LOCAL_BINDING]&&e.scope.registerBinding("local",e)}};let p=0;class f{constructor(e){this.uid=void 0,this.path=void 0,this.block=void 0,this.labels=void 0,this.inited=void 0,this.bindings=void 0,this.references=void 0,this.globals=void 0,this.uids=void 0,this.data=void 0,this.crawling=void 0;const{node:t}=e,r=l.scope.get(t);if((null==r?void 0:r.path)===e)return r;l.scope.set(t,this),this.uid=p++,this.block=t,this.path=e,this.labels=new Map,this.inited=!1}get parent(){var e;let t,r=this.path;do{const e="key"===r.key;r=r.parentPath,e&&r.isMethod()&&(r=r.parentPath),r&&r.isScope()&&(t=r)}while(r&&!t);return null==(e=t)?void 0:e.scope}get parentBlock(){return this.path.parent}get hub(){return this.path.hub}traverse(e,t,r){(0,s.default)(e,t,this,r,this.path)}generateDeclaredUidIdentifier(e){const t=this.generateUidIdentifier(e);return this.push({id:t}),a.cloneNode(t)}generateUidIdentifier(e){return a.identifier(this.generateUid(e))}generateUid(e="temp"){let t;e=a.toIdentifier(e).replace(/^_+/,"").replace(/[0-9]+$/g,"");let r=1;do{t=this._generateUid(e,r),r++}while(this.hasLabel(t)||this.hasBinding(t)||this.hasGlobal(t)||this.hasReference(t));const n=this.getProgramParent();return n.references[t]=!0,n.uids[t]=!0,t}_generateUid(e,t){let r=e;return t>1&&(r+=t),`_${r}`}generateUidBasedOnNode(e,t){const r=[];c(e,r);let n=r.join("$");return n=n.replace(/^_/,"")||t||"ref",this.generateUid(n.slice(0,20))}generateUidIdentifierBasedOnNode(e,t){return a.identifier(this.generateUidBasedOnNode(e,t))}isStatic(e){if(a.isThisExpression(e)||a.isSuper(e))return!0;if(a.isIdentifier(e)){const t=this.getBinding(e.name);return t?t.constant:this.hasBinding(e.name)}return!1}maybeGenerateMemoised(e,t){if(this.isStatic(e))return null;{const r=this.generateUidIdentifierBasedOnNode(e);return t?r:(this.push({id:r}),a.cloneNode(r))}}checkBlockScopedCollisions(e,t,r,n){if("param"!==t&&"local"!==e.kind&&("let"===t||"let"===e.kind||"const"===e.kind||"module"===e.kind||"param"===e.kind&&("let"===t||"const"===t)))throw this.hub.buildError(n,`Duplicate declaration "${r}"`,TypeError)}rename(e,t,r){const s=this.getBinding(e);if(s)return t=t||this.generateUidIdentifier(e).name,new n.default(s,e,t).rename(r)}_renameFromMap(e,t,r,n){e[t]&&(e[r]=n,e[t]=null)}dump(){"-".repeat(60);let e=this;do{for(const t of Object.keys(e.bindings))e.bindings[t]}while(e=e.parent)}toArray(e,t,r){if(a.isIdentifier(e)){const t=this.getBinding(e.name);if(null!=t&&t.constant&&t.path.isGenericType("Array"))return e}if(a.isArrayExpression(e))return e;if(a.isIdentifier(e,{name:"arguments"}))return a.callExpression(a.memberExpression(a.memberExpression(a.memberExpression(a.identifier("Array"),a.identifier("prototype")),a.identifier("slice")),a.identifier("call")),[e]);let n;const s=[e];return!0===t?n="toConsumableArray":t?(s.push(a.numericLiteral(t)),n="slicedToArray"):n="toArray",r&&(s.unshift(this.hub.addHelper(n)),n="maybeArrayLike"),a.callExpression(this.hub.addHelper(n),s)}hasLabel(e){return!!this.getLabel(e)}getLabel(e){return this.labels.get(e)}registerLabel(e){this.labels.set(e.node.label.name,e)}registerDeclaration(e){if(e.isLabeledStatement())this.registerLabel(e);else if(e.isFunctionDeclaration())this.registerBinding("hoisted",e.get("id"),e);else if(e.isVariableDeclaration()){const t=e.get("declarations");for(const r of t)this.registerBinding(e.node.kind,r)}else if(e.isClassDeclaration())this.registerBinding("let",e);else if(e.isImportDeclaration()){const t=e.get("specifiers");for(const e of t)this.registerBinding("module",e)}else if(e.isExportDeclaration()){const t=e.get("declaration");(t.isClassDeclaration()||t.isFunctionDeclaration()||t.isVariableDeclaration())&&this.registerDeclaration(t)}else this.registerBinding("unknown",e)}buildUndefinedNode(){return a.unaryExpression("void",a.numericLiteral(0),!0)}registerConstantViolation(e){const t=e.getBindingIdentifiers();for(const r of Object.keys(t)){const t=this.getBinding(r);t&&t.reassign(e)}}registerBinding(e,t,r=t){if(!e)throw new ReferenceError("no `kind`");if(t.isVariableDeclaration()){const r=t.get("declarations");for(const t of r)this.registerBinding(e,t);return}const n=this.getProgramParent(),s=t.getOuterBindingIdentifiers(!0);for(const t of Object.keys(s)){n.references[t]=!0;for(const n of s[t]){const s=this.getOwnBinding(t);if(s){if(s.identifier===n)continue;this.checkBlockScopedCollisions(s,e,t,n)}s?this.registerConstantViolation(r):this.bindings[t]=new i.default({identifier:n,scope:this,path:r,kind:e})}}}addGlobal(e){this.globals[e.name]=e}hasUid(e){let t=this;do{if(t.uids[e])return!0}while(t=t.parent);return!1}hasGlobal(e){let t=this;do{if(t.globals[e])return!0}while(t=t.parent);return!1}hasReference(e){return!!this.getProgramParent().references[e]}isPure(e,t){if(a.isIdentifier(e)){const r=this.getBinding(e.name);return!!r&&(!t||r.constant)}if(a.isClass(e))return!(e.superClass&&!this.isPure(e.superClass,t))&&this.isPure(e.body,t);if(a.isClassBody(e)){for(const r of e.body)if(!this.isPure(r,t))return!1;return!0}if(a.isBinary(e))return this.isPure(e.left,t)&&this.isPure(e.right,t);if(a.isArrayExpression(e)){for(const r of e.elements)if(!this.isPure(r,t))return!1;return!0}if(a.isObjectExpression(e)){for(const r of e.properties)if(!this.isPure(r,t))return!1;return!0}if(a.isMethod(e))return!(e.computed&&!this.isPure(e.key,t))&&"get"!==e.kind&&"set"!==e.kind;if(a.isProperty(e))return!(e.computed&&!this.isPure(e.key,t))&&this.isPure(e.value,t);if(a.isUnaryExpression(e))return this.isPure(e.argument,t);if(a.isTaggedTemplateExpression(e))return a.matchesPattern(e.tag,"String.raw")&&!this.hasBinding("String",!0)&&this.isPure(e.quasi,t);if(a.isTemplateLiteral(e)){for(const r of e.expressions)if(!this.isPure(r,t))return!1;return!0}return a.isPureish(e)}setData(e,t){return this.data[e]=t}getData(e){let t=this;do{const r=t.data[e];if(null!=r)return r}while(t=t.parent)}removeData(e){let t=this;do{null!=t.data[e]&&(t.data[e]=null)}while(t=t.parent)}init(){this.inited||(this.inited=!0,this.crawl())}crawl(){const e=this.path;this.references=Object.create(null),this.bindings=Object.create(null),this.globals=Object.create(null),this.uids=Object.create(null),this.data=Object.create(null);const t=this.getProgramParent();if(t.crawling)return;const r={references:[],constantViolations:[],assignments:[]};if(this.crawling=!0,"Program"!==e.type&&u._exploded){for(const t of u.enter)t(e,r);const t=u[e.type];if(t)for(const n of t.enter)n(e,r)}e.traverse(u,r),this.crawling=!1;for(const e of r.assignments){const r=e.getBindingIdentifiers();for(const n of Object.keys(r))e.scope.getBinding(n)||t.addGlobal(r[n]);e.scope.registerConstantViolation(e)}for(const e of r.references){const r=e.scope.getBinding(e.node.name);r?r.reference(e):t.addGlobal(e.node)}for(const e of r.constantViolations)e.scope.registerConstantViolation(e)}push(e){let t=this.path;t.isBlockStatement()||t.isProgram()||(t=this.getBlockParent().path),t.isSwitchStatement()&&(t=(this.getFunctionParent()||this.getProgramParent()).path),(t.isLoop()||t.isCatchClause()||t.isFunction())&&(t.ensureBlock(),t=t.get("body"));const r=e.unique,n=e.kind||"var",s=null==e._blockHoist?2:e._blockHoist,i=`declaration:${n}:${s}`;let o=!r&&t.getData(i);if(!o){const e=a.variableDeclaration(n,[]);e._blockHoist=s,[o]=t.unshiftContainer("body",[e]),r||t.setData(i,o)}const l=a.variableDeclarator(e.id,e.init);o.node.declarations.push(l),this.registerBinding(n,o.get("declarations").pop())}getProgramParent(){let e=this;do{if(e.path.isProgram())return e}while(e=e.parent);throw new Error("Couldn't find a Program")}getFunctionParent(){let e=this;do{if(e.path.isFunctionParent())return e}while(e=e.parent);return null}getBlockParent(){let e=this;do{if(e.path.isBlockParent())return e}while(e=e.parent);throw new Error("We couldn't find a BlockStatement, For, Switch, Function, Loop or Program...")}getAllBindings(){const e=Object.create(null);let t=this;do{for(const r of Object.keys(t.bindings))r in e==0&&(e[r]=t.bindings[r]);t=t.parent}while(t);return e}getAllBindingsOfKind(...e){const t=Object.create(null);for(const r of e){let e=this;do{for(const n of Object.keys(e.bindings)){const s=e.bindings[n];s.kind===r&&(t[n]=s)}e=e.parent}while(e)}return t}bindingIdentifierEquals(e,t){return this.getBindingIdentifier(e)===t}getBinding(e){let t,r=this;do{const s=r.getOwnBinding(e);var n;if(s&&(null==(n=t)||!n.isPattern()||"param"===s.kind))return s;t=r.path}while(r=r.parent)}getOwnBinding(e){return this.bindings[e]}getBindingIdentifier(e){var t;return null==(t=this.getBinding(e))?void 0:t.identifier}getOwnBindingIdentifier(e){const t=this.bindings[e];return null==t?void 0:t.identifier}hasOwnBinding(e){return!!this.getOwnBinding(e)}hasBinding(e,t){return!(!e||!this.hasOwnBinding(e)&&!this.parentHasBinding(e,t)&&!this.hasUid(e)&&(t||!f.globals.includes(e))&&(t||!f.contextVariables.includes(e)))}parentHasBinding(e,t){var r;return null==(r=this.parent)?void 0:r.hasBinding(e,t)}moveBindingTo(e,t){const r=this.getBinding(e);r&&(r.scope.removeOwnBinding(e),r.scope=t,t.bindings[e]=r)}removeOwnBinding(e){delete this.bindings[e]}removeBinding(e){var t;null==(t=this.getBinding(e))||t.scope.removeOwnBinding(e);let r=this;do{r.uids[e]&&(r.uids[e]=!1)}while(r=r.parent)}}t.default=f,f.globals=Object.keys(o.builtin),f.contextVariables=["arguments","undefined","Infinity","NaN"]},(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.default=class{constructor({identifier:e,scope:t,path:r,kind:n}){this.identifier=void 0,this.scope=void 0,this.path=void 0,this.kind=void 0,this.constantViolations=[],this.constant=!0,this.referencePaths=[],this.referenced=!1,this.references=0,this.identifier=e,this.scope=t,this.path=r,this.kind=n,this.clearValue()}deoptValue(){this.clearValue(),this.hasDeoptedValue=!0}setValue(e){this.hasDeoptedValue||(this.hasValue=!0,this.value=e)}clearValue(){this.hasDeoptedValue=!1,this.hasValue=!1,this.value=null}reassign(e){this.constant=!1,-1===this.constantViolations.indexOf(e)&&this.constantViolations.push(e)}reference(e){-1===this.referencePaths.indexOf(e)&&(this.referenced=!0,this.references++,this.referencePaths.push(e))}dereference(){this.references--,this.referenced=!!this.references}}},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.needsWhitespace=f,t.needsWhitespaceBefore=function(e,t){return f(e,t,"before")},t.needsWhitespaceAfter=function(e,t){return f(e,t,"after")},t.needsParens=function(e,t,r){return!!t&&(!(!i.isNewExpression(t)||t.callee!==e||!p(e))||u(a,e,t,r))};var n=r(420),s=r(421),i=r(0);function o(e){const t={};function r(e,r){const n=t[e];t[e]=n?function(e,t,s){const i=n(e,t,s);return null==i?r(e,t,s):i}:r}for(const t of Object.keys(e)){const n=i.FLIPPED_ALIAS_KEYS[t];if(n)for(const s of n)r(s,e[t]);else r(t,e[t])}return t}const a=o(s),l=o(n.nodes),c=o(n.list);function u(e,t,r,n){const s=e[t.type];return s?s(t,r,n):null}function p(e){return!!i.isCallExpression(e)||i.isMemberExpression(e)&&p(e.object)}function f(e,t,r){if(!e)return 0;i.isExpressionStatement(e)&&(e=e.expression);let n=u(l,e,t);if(!n){const s=u(c,e,t);if(s)for(let t=0;t{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ImportSpecifier=function(e){"type"!==e.importKind&&"typeof"!==e.importKind||(this.word(e.importKind),this.space()),this.print(e.imported,e),e.local&&e.local.name!==e.imported.name&&(this.space(),this.word("as"),this.space(),this.print(e.local,e))},t.ImportDefaultSpecifier=function(e){this.print(e.local,e)},t.ExportDefaultSpecifier=function(e){this.print(e.exported,e)},t.ExportSpecifier=function(e){this.print(e.local,e),e.exported&&e.local.name!==e.exported.name&&(this.space(),this.word("as"),this.space(),this.print(e.exported,e))},t.ExportNamespaceSpecifier=function(e){this.token("*"),this.space(),this.word("as"),this.space(),this.print(e.exported,e)},t.ExportAllDeclaration=function(e){this.word("export"),this.space(),"type"===e.exportKind&&(this.word("type"),this.space()),this.token("*"),this.space(),this.word("from"),this.space(),this.print(e.source,e),this.printAssertions(e),this.semicolon()},t.ExportNamedDeclaration=function(e){this.format.decoratorsBeforeExport&&n.isClassDeclaration(e.declaration)&&this.printJoin(e.declaration.decorators,e),this.word("export"),this.space(),s.apply(this,arguments)},t.ExportDefaultDeclaration=function(e){this.format.decoratorsBeforeExport&&n.isClassDeclaration(e.declaration)&&this.printJoin(e.declaration.decorators,e),this.word("export"),this.space(),this.word("default"),this.space(),s.apply(this,arguments)},t.ImportDeclaration=function(e){this.word("import"),this.space(),("type"===e.importKind||"typeof"===e.importKind)&&(this.word(e.importKind),this.space());const t=e.specifiers.slice(0);if(null!=t&&t.length){for(;;){const r=t[0];if(!n.isImportDefaultSpecifier(r)&&!n.isImportNamespaceSpecifier(r))break;this.print(t.shift(),e),t.length&&(this.token(","),this.space())}t.length&&(this.token("{"),this.space(),this.printList(t,e),this.space(),this.token("}")),this.space(),this.word("from"),this.space()}var r;this.print(e.source,e),this.printAssertions(e),null!=(r=e.attributes)&&r.length&&(this.space(),this.word("with"),this.space(),this.printList(e.attributes,e)),this.semicolon()},t.ImportAttribute=function(e){this.print(e.key),this.token(":"),this.space(),this.print(e.value)},t.ImportNamespaceSpecifier=function(e){this.token("*"),this.space(),this.word("as"),this.space(),this.print(e.local,e)};var n=r(0);function s(e){if(e.declaration){const t=e.declaration;this.print(t,e),n.isStatement(t)||this.semicolon()}else{"type"===e.exportKind&&(this.word("type"),this.space());const t=e.specifiers.slice(0);let r=!1;for(;;){const s=t[0];if(!n.isExportDefaultSpecifier(s)&&!n.isExportNamespaceSpecifier(s))break;r=!0,this.print(t.shift(),e),t.length&&(this.token(","),this.space())}(t.length||!t.length&&!r)&&(this.token("{"),t.length&&(this.space(),this.printList(t,e),this.space()),this.token("}")),e.source&&(this.space(),this.word("from"),this.space(),this.print(e.source,e),this.printAssertions(e)),this.semicolon()}}},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Identifier=function(e){this.exactSource(e.loc,(()=>{this.word(e.name)}))},t.ArgumentPlaceholder=function(){this.token("?")},t.SpreadElement=t.RestElement=function(e){this.token("..."),this.print(e.argument,e)},t.ObjectPattern=t.ObjectExpression=function(e){const t=e.properties;this.token("{"),this.printInnerComments(e),t.length&&(this.space(),this.printList(t,e,{indent:!0,statement:!0}),this.space()),this.token("}")},t.ObjectMethod=function(e){this.printJoin(e.decorators,e),this._methodHead(e),this.space(),this.print(e.body,e)},t.ObjectProperty=function(e){if(this.printJoin(e.decorators,e),e.computed)this.token("["),this.print(e.key,e),this.token("]");else{if(n.isAssignmentPattern(e.value)&&n.isIdentifier(e.key)&&e.key.name===e.value.left.name)return void this.print(e.value,e);if(this.print(e.key,e),e.shorthand&&n.isIdentifier(e.key)&&n.isIdentifier(e.value)&&e.key.name===e.value.name)return}this.token(":"),this.space(),this.print(e.value,e)},t.ArrayPattern=t.ArrayExpression=function(e){const t=e.elements,r=t.length;this.token("["),this.printInnerComments(e);for(let n=0;n0&&this.space(),this.print(s,e),n0&&this.space(),this.print(s,e),n{"use strict";var n=r(37).Buffer;const s={},i=s.hasOwnProperty,o=(e,t)=>{for(const r in e)i.call(e,r)&&t(r,e[r])},a=s.toString,l=Array.isArray,c=n.isBuffer,u={'"':'\\"',"'":"\\'","\\":"\\\\","\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r","\t":"\\t"},p=/["'\\\b\f\n\r\t]/,f=/[0-9]/,d=/[ !#-&\(-\[\]-_a-~]/,h=(e,t)=>{const r=()=>{E=v,++t.indentLevel,v=t.indent.repeat(t.indentLevel)},n={escapeEverything:!1,minimal:!1,isScriptContext:!1,quotes:"single",wrap:!1,es6:!1,json:!1,compact:!0,lowercaseHex:!1,numbers:"decimal",indent:"\t",indentLevel:0,__inline1__:!1,__inline2__:!1},s=t&&t.json;var i,m;s&&(n.quotes="double",n.wrap=!0),i=n,"single"!=(t=(m=t)?(o(m,((e,t)=>{i[e]=t})),i):i).quotes&&"double"!=t.quotes&&"backtick"!=t.quotes&&(t.quotes="single");const y="double"==t.quotes?'"':"backtick"==t.quotes?"`":"'",g=t.compact,b=t.lowercaseHex;let v=t.indent.repeat(t.indentLevel),E="";const x=t.__inline1__,S=t.__inline2__,T=g?"":"\n";let w,P=!0;const A="binary"==t.numbers,O="octal"==t.numbers,C="decimal"==t.numbers,I="hexadecimal"==t.numbers;if(s&&e&&"function"==typeof e.toJSON&&(e=e.toJSON()),"string"!=typeof(k=e)&&"[object String]"!=a.call(k)){if((e=>"[object Map]"==a.call(e))(e))return 0==e.size?"new Map()":(g||(t.__inline1__=!0,t.__inline2__=!1),"new Map("+h(Array.from(e),t)+")");if((e=>"[object Set]"==a.call(e))(e))return 0==e.size?"new Set()":"new Set("+h(Array.from(e),t)+")";if(c(e))return 0==e.length?"Buffer.from([])":"Buffer.from("+h(Array.from(e),t)+")";if(l(e))return w=[],t.wrap=!0,x&&(t.__inline1__=!1,t.__inline2__=!0),S||r(),((e,t)=>{const r=e.length;let n=-1;for(;++n{P=!1,S&&(t.__inline2__=!1),w.push((g||S?"":v)+h(e,t))})),P?"[]":S?"["+w.join(", ")+"]":"["+T+w.join(","+T)+T+(g?"":E)+"]";if(!(e=>"number"==typeof e||"[object Number]"==a.call(e))(e))return(e=>"[object Object]"==a.call(e))(e)?(w=[],t.wrap=!0,r(),o(e,((e,r)=>{P=!1,w.push((g?"":v)+h(e,t)+":"+(g?"":" ")+h(r,t))})),P?"{}":"{"+T+w.join(","+T)+T+(g?"":E)+"}"):s?JSON.stringify(e)||"null":String(e);if(s)return JSON.stringify(e);if(C)return String(e);if(I){let t=e.toString(16);return b||(t=t.toUpperCase()),"0x"+t}if(A)return"0b"+e.toString(2);if(O)return"0o"+e.toString(8)}var k;const N=e;let _=-1;const j=N.length;for(w="";++_=55296&&e<=56319&&j>_+1){const t=N.charCodeAt(_+1);if(t>=56320&&t<=57343){let r=(1024*(e-55296)+t-56320+65536).toString(16);b||(r=r.toUpperCase()),w+="\\u{"+r+"}",++_;continue}}}if(!t.escapeEverything){if(d.test(e)){w+=e;continue}if('"'==e){w+=y==e?'\\"':e;continue}if("`"==e){w+=y==e?"\\`":e;continue}if("'"==e){w+=y==e?"\\'":e;continue}}if("\0"==e&&!s&&!f.test(N.charAt(_+1))){w+="\\0";continue}if(p.test(e)){w+=u[e];continue}const r=e.charCodeAt(0);if(t.minimal&&8232!=r&&8233!=r){w+=e;continue}let n=r.toString(16);b||(n=n.toUpperCase());const i=n.length>2||s,o="\\"+(i?"u":"x")+("0000"+n).slice(i?-4:-2);w+=o}return t.wrap&&(w=y+w+y),"`"==y&&(w=w.replace(/\$\{/g,"\\${")),t.isScriptContext?w.replace(/<\/(script|style)/gi,"<\\/$1").replace(/|--!>|O(t)?{[`Map(${t.size})`]:[...t.entries()].reduce(((e,[t,r])=>(e[`${t} =>`]=r,e)),{})}:C(t)?{[`Set(${t.size})`]:[...t.values()]}:!_(t)||A(t)||L(t)?t:String(t),T=/^on[^a-z]/,w=Object.assign,P=Object.prototype.hasOwnProperty,A=Array.isArray,O=e=>"[object Map]"===D(e),C=e=>"[object Set]"===D(e),I=e=>e instanceof Date,k=e=>"function"==typeof e,N=e=>"string"==typeof e,_=e=>null!==e&&"object"==typeof e,j=Object.prototype.toString,D=e=>j.call(e),L=e=>"[object Object]"===D(e),M=n(",key,ref,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),B=e=>{const t=Object.create(null);return r=>t[r]||(t[r]=e(r))},R=/-(\w)/g,F=B((e=>e.replace(R,((e,t)=>t?t.toUpperCase():"")))),U=/\B([A-Z])/g,$=B((e=>e.replace(U,"-$1").toLowerCase())),q=B((e=>e.charAt(0).toUpperCase()+e.slice(1))),V=B((e=>e?`on${q(e)}`:""));let W;t.EMPTY_ARR=[],t.EMPTY_OBJ={},t.NO=()=>!1,t.NOOP=()=>{},t.PatchFlagNames=s,t.babelParserDefaultPlugins=["bigInt","optionalChaining","nullishCoalescingOperator"],t.camelize=F,t.capitalize=q,t.def=(e,t,r)=>{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:r})},t.escapeHtml=function(e){const t=""+e,r=v.exec(t);if(!r)return t;let n,s,i="",o=0;for(s=r.index;s=t){for(let o=e-2;o<=e+2||r>s;o++){if(o<0||o>=n.length)continue;const a=o+1;i.push(`${a}${" ".repeat(Math.max(3-String(a).length,0))}| ${n[o]}`);const l=n[o].length;if(o===e){const e=t-(s-l)+1,n=Math.max(1,r>s?l-e:r-t);i.push(" | "+" ".repeat(e)+"^".repeat(n))}else if(o>e){if(r>s){const e=Math.max(Math.min(r-s,l),1);i.push(" | "+"^".repeat(e))}s+=l+1}}break}return i.join("\n")},t.getGlobalThis=()=>W||(W="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==r.g?r.g:{}),t.hasChanged=(e,t)=>e!==t&&(e==e||t==t),t.hasOwn=(e,t)=>P.call(e,t),t.hyphenate=$,t.invokeArrayFns=(e,t)=>{for(let r=0;rN(e)&&"NaN"!==e&&"-"!==e[0]&&""+parseInt(e,10)===e,t.isKnownAttr=f,t.isMap=O,t.isModelListener=e=>e.startsWith("onUpdate:"),t.isNoUnitNumericStyleProp=p,t.isObject=_,t.isOn=e=>T.test(e),t.isPlainObject=L,t.isPromise=e=>_(e)&&k(e.then)&&k(e.catch),t.isReservedProp=M,t.isSSRSafeAttrName=function(e){if(u.hasOwnProperty(e))return u[e];const t=c.test(e);return u[e]=!t},t.isSVGTag=g,t.isSet=C,t.isSpecialBooleanAttr=a,t.isString=N,t.isSymbol=e=>"symbol"==typeof e,t.isVoidTag=b,t.looseEqual=x,t.looseIndexOf=function(e,t){return e.findIndex((e=>x(e,t)))},t.makeMap=n,t.normalizeClass=function e(t){let r="";if(N(t))r=t;else if(A(t))for(let n=0;n{const r=e.indexOf(t);r>-1&&e.splice(r,1)},t.slotFlagsText={1:"STABLE",2:"DYNAMIC",3:"FORWARDED"},t.stringifyStyle=function(e){let t="";if(!e)return t;for(const r in e){const n=e[r],s=r.startsWith("--")?r:$(r);(N(n)||"number"==typeof n&&p(s))&&(t+=`${s}:${n};`)}return t},t.toDisplayString=e=>null==e?"":_(e)?JSON.stringify(e,S,2):String(e),t.toHandlerKey=V,t.toNumber=e=>{const t=parseFloat(e);return isNaN(t)?e:t},t.toRawType=e=>D(e).slice(8,-1),t.toTypeString=D},()=>{},()=>{},(e,t,r)=>{"use strict";var n=r(168),s=r(307);function i(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}t.parse=v,t.resolve=function(e,t){return v(e,!1,!0).resolve(t)},t.resolveObject=function(e,t){return e?v(e,!1,!0).resolveObject(t):t},t.format=function(e){return s.isString(e)&&(e=v(e)),e instanceof i?e.format():i.prototype.format.call(e)},t.Url=i;var o=/^([a-z0-9.+-]+:)/i,a=/:[0-9]*$/,l=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,c=["{","}","|","\\","^","`"].concat(["<",">",'"',"`"," ","\r","\n","\t"]),u=["'"].concat(c),p=["%","/","?",";","#"].concat(u),f=["/","?","#"],d=/^[+a-z0-9A-Z_-]{0,63}$/,h=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,m={javascript:!0,"javascript:":!0},y={javascript:!0,"javascript:":!0},g={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},b=r(511);function v(e,t,r){if(e&&s.isObject(e)&&e instanceof i)return e;var n=new i;return n.parse(e,t,r),n}i.prototype.parse=function(e,t,r){if(!s.isString(e))throw new TypeError("Parameter 'url' must be a string, not "+typeof e);var i=e.indexOf("?"),a=-1!==i&&i127?j+="x":j+=_[D];if(!j.match(d)){var M=k.slice(0,O),B=k.slice(O+1),R=_.match(h);R&&(M.push(R[1]),B.unshift(R[2])),B.length&&(v="/"+B.join(".")+v),this.hostname=M.join(".");break}}}this.hostname.length>255?this.hostname="":this.hostname=this.hostname.toLowerCase(),I||(this.hostname=n.toASCII(this.hostname));var F=this.port?":"+this.port:"",U=this.hostname||"";this.host=U+F,this.href+=this.host,I&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),"/"!==v[0]&&(v="/"+v))}if(!m[S])for(O=0,N=u.length;O0)&&r.host.split("@"))&&(r.auth=I.shift(),r.host=r.hostname=I.shift())),r.search=e.search,r.query=e.query,s.isNull(r.pathname)&&s.isNull(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.href=r.format(),r;if(!T.length)return r.pathname=null,r.search?r.path="/"+r.search:r.path=null,r.href=r.format(),r;for(var P=T.slice(-1)[0],A=(r.host||e.host||T.length>1)&&("."===P||".."===P)||""===P,O=0,C=T.length;C>=0;C--)"."===(P=T[C])?T.splice(C,1):".."===P?(T.splice(C,1),O++):O&&(T.splice(C,1),O--);if(!x&&!S)for(;O--;O)T.unshift("..");!x||""===T[0]||T[0]&&"/"===T[0].charAt(0)||T.unshift(""),A&&"/"!==T.join("/").substr(-1)&&T.push("");var I,k=""===T[0]||T[0]&&"/"===T[0].charAt(0);return w&&(r.hostname=r.host=k?"":T.length?T.shift():"",(I=!!(r.host&&r.host.indexOf("@")>0)&&r.host.split("@"))&&(r.auth=I.shift(),r.host=r.hostname=I.shift())),(x=x||r.host&&T.length)&&!k&&T.unshift(""),T.length?r.pathname=T.join("/"):(r.pathname=null,r.path=null),s.isNull(r.pathname)&&s.isNull(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.auth=e.auth||r.auth,r.slashes=r.slashes||e.slashes,r.href=r.format(),r},i.prototype.parseHost=function(){var e=this.host,t=a.exec(e);t&&(":"!==(t=t[0])&&(this.port=t.substr(1)),e=e.substr(0,e.length-t.length)),e&&(this.hostname=e)}},(e,t,r)=>{"use strict";t.decode=t.parse=r(317),t.encode=t.stringify=r(318)},()=>{},()=>{},()=>{},(e,t,r)=>{"use strict";t.__esModule=!0,t.default=function(e){var t,r,n,s,o,a,l,c,u,p,d,h,m=[],y=e.css.valueOf(),g=y.length,b=-1,v=1,E=0,x=0;function S(t,r){if(!e.safe)throw e.error("Unclosed "+t,v,E-b,E);c=(y+=r).length-1}for(;E0?(u=v+a,p=c-l[a].length):(u=v,p=b),h=i.comment,v=u,n=u,r=c-p):t===i.slash?(h=t,n=v,r=E-b,x=(c=E)+1):(c=f(y,E),h=i.word,n=v,r=c-b),x=c+1}m.push([h,v,E-b,n,r,E,x]),p&&(b=p,p=null),E=x}return m},t.FIELDS=void 0;var n,s,i=function(e){if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var t=o();if(t&&t.has(e))return t.get(e);var r={},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var s in e)if(Object.prototype.hasOwnProperty.call(e,s)){var i=n?Object.getOwnPropertyDescriptor(e,s):null;i&&(i.get||i.set)?Object.defineProperty(r,s,i):r[s]=e[s]}return r.default=e,t&&t.set(e,r),r}(r(328));function o(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return o=function(){return e},e}for(var a=((n={})[i.tab]=!0,n[i.newline]=!0,n[i.cr]=!0,n[i.feed]=!0,n),l=((s={})[i.space]=!0,s[i.tab]=!0,s[i.newline]=!0,s[i.cr]=!0,s[i.feed]=!0,s[i.ampersand]=!0,s[i.asterisk]=!0,s[i.bang]=!0,s[i.comma]=!0,s[i.colon]=!0,s[i.semicolon]=!0,s[i.openParenthesis]=!0,s[i.closeParenthesis]=!0,s[i.openSquare]=!0,s[i.closeSquare]=!0,s[i.singleQuote]=!0,s[i.doubleQuote]=!0,s[i.plus]=!0,s[i.pipe]=!0,s[i.tilde]=!0,s[i.greaterThan]=!0,s[i.equals]=!0,s[i.dollar]=!0,s[i.caret]=!0,s[i.slash]=!0,s),c={},u="0123456789abcdefABCDEF",p=0;p{"use strict";t.__esModule=!0,t.universal=t.tag=t.string=t.selector=t.root=t.pseudo=t.nesting=t.id=t.comment=t.combinator=t.className=t.attribute=void 0;var n=m(r(326)),s=m(r(100)),i=m(r(107)),o=m(r(101)),a=m(r(102)),l=m(r(108)),c=m(r(105)),u=m(r(97)),p=m(r(99)),f=m(r(104)),d=m(r(103)),h=m(r(106));function m(e){return e&&e.__esModule?e:{default:e}}t.attribute=function(e){return new n.default(e)},t.className=function(e){return new s.default(e)},t.combinator=function(e){return new i.default(e)},t.comment=function(e){return new o.default(e)},t.id=function(e){return new a.default(e)},t.nesting=function(e){return new l.default(e)},t.pseudo=function(e){return new c.default(e)},t.root=function(e){return new u.default(e)},t.selector=function(e){return new p.default(e)},t.string=function(e){return new f.default(e)},t.tag=function(e){return new d.default(e)},t.universal=function(e){return new h.default(e)}},(e,t,r)=>{"use strict";t.__esModule=!0,t.isNode=o,t.isPseudoElement=E,t.isPseudoClass=function(e){return h(e)&&!E(e)},t.isContainer=function(e){return!(!o(e)||!e.walk)},t.isNamespace=function(e){return l(e)||b(e)},t.isUniversal=t.isTag=t.isString=t.isSelector=t.isRoot=t.isPseudo=t.isNesting=t.isIdentifier=t.isComment=t.isCombinator=t.isClassName=t.isAttribute=void 0;var n,s=r(5),i=((n={})[s.ATTRIBUTE]=!0,n[s.CLASS]=!0,n[s.COMBINATOR]=!0,n[s.COMMENT]=!0,n[s.ID]=!0,n[s.NESTING]=!0,n[s.PSEUDO]=!0,n[s.ROOT]=!0,n[s.SELECTOR]=!0,n[s.STRING]=!0,n[s.TAG]=!0,n[s.UNIVERSAL]=!0,n);function o(e){return"object"==typeof e&&i[e.type]}function a(e,t){return o(t)&&t.type===e}var l=a.bind(null,s.ATTRIBUTE);t.isAttribute=l;var c=a.bind(null,s.CLASS);t.isClassName=c;var u=a.bind(null,s.COMBINATOR);t.isCombinator=u;var p=a.bind(null,s.COMMENT);t.isComment=p;var f=a.bind(null,s.ID);t.isIdentifier=f;var d=a.bind(null,s.NESTING);t.isNesting=d;var h=a.bind(null,s.PSEUDO);t.isPseudo=h;var m=a.bind(null,s.ROOT);t.isRoot=m;var y=a.bind(null,s.SELECTOR);t.isSelector=y;var g=a.bind(null,s.STRING);t.isString=g;var b=a.bind(null,s.TAG);t.isTag=b;var v=a.bind(null,s.UNIVERSAL);function E(e){return h(e)&&e.value&&(e.value.startsWith("::")||":before"===e.value.toLowerCase()||":after"===e.value.toLowerCase())}t.isUniversal=v},()=>{},()=>{},()=>{},(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.replaceAll=n;var r=/[$#]?[\w-\.]+/g;function n(e,t){for(var n=void 0;n=r.exec(t);){var s=e[n[0]];s&&(t=t.slice(0,n.index)+s+t.slice(r.lastIndex),r.lastIndex-=n[0].length-s.length)}return t}t.default=function(e,t){e.walkDecls((function(e){return e.value=n(t,e.value)})),e.walkAtRules("media",(function(e){return e.params=n(t,e.params)}))}},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=a(r(84)),s=a(r(523)),i=a(r(8)),o=a(r(332));function a(e){return e&&e.__esModule?e:{default:e}}class l{constructor(e){this.plugins=e||l.defaultPlugins}load(e,t,r,s){let i=new o.default(s,r);return(0,n.default)(this.plugins.concat([i.plugin()])).process(e,{from:"/"+t}).then((e=>({injectableSource:e.css,exportTokens:i.exportTokens})))}}const c=(e,t)=>e.lengtht.length?e.substring(0,t.length)<=t?-1:1:e{let l=i.default.dirname(t),c=i.default.resolve(l,o),u=i.default.resolve(i.default.join(this.root,l),o);if("."!==o[0]&&"/"!==o[0])try{u=r(524).resolve(o)}catch(e){}const p=this.tokensByFile[u];if(p)return e(p);s.default.readFile(u,"utf-8",((t,r)=>{t&&n(t),this.core.load(r,c,a,this.fetch.bind(this)).then((({injectableSource:t,exportTokens:r})=>{this.sources[u]=t,this.traces[a]=u,this.tokensByFile[u]=r,e(r)}),n)}))}))}get finalSource(){const e=this.traces,t=this.sources;let r=new Set;return Object.keys(e).sort(c).map((n=>{const s=e[n];return r.has(s)?null:(r.add(s),t[s])})).join("")}}},()=>{},e=>{function t(e){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}t.keys=()=>[],t.resolve=t,t.id=524,e.exports=t},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,r){const n=r.indexOf(`.${e}`),i=r.substr(0,n).split(/[\r\n]/).length;return`_${e}_${(0,s.default)(r).toString(36).substr(0,5)}_${i}`};var n,s=(n=r(333))&&n.__esModule?n:{default:n}},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){return new Promise(((r,s)=>{(0,n.writeFile)(`${e}.json`,JSON.stringify(t),(e=>e?s(e):r(t)))}))};var n=r(527)},()=>{},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.behaviours=void 0,t.getDefaultPlugins=function({behaviour:e,generateScopedName:t,exportGlobals:r}){const a=(0,i.default)({generateScopedName:t,exportGlobals:r});return{[l.LOCAL]:[o.default,n.default,s.default,a],[l.GLOBAL]:[o.default,s.default,a]}[e]},t.isValidBehaviour=function(e){return Object.keys(l).map((e=>l[e])).indexOf(e)>-1};var n=a(r(334)),s=a(r(344)),i=a(r(529)),o=a(r(530));function a(e){return e&&e.__esModule?e:{default:e}}const l=t.behaviours={LOCAL:"local",GLOBAL:"global"}},()=>{},()=>{},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=(0,r(4).declare)((e=>(e.assertVersion(7),{name:"syntax-jsx",manipulateOptions(e,t){t.plugins.some((e=>"typescript"===(Array.isArray(e)?e[0]:e)))||t.plugins.push("jsx")}})));t.default=n},(e,t,r)=>{"use strict";e.exports=r(533)},e=>{"use strict";e.exports=JSON.parse('["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","label","legend","li","link","main","map","mark","math","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rb","rp","rt","rtc","ruby","s","samp","script","section","select","slot","small","source","span","strong","style","sub","summary","sup","svg","table","tbody","td","template","textarea","tfoot","th","thead","time","title","tr","track","u","ul","var","video","wbr"]')},(e,t,r)=>{e.exports=r(535)},e=>{"use strict";e.exports=JSON.parse('["a","altGlyph","altGlyphDef","altGlyphItem","animate","animateColor","animateMotion","animateTransform","circle","clipPath","color-profile","cursor","defs","desc","ellipse","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","filter","font","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignObject","g","glyph","glyphRef","hkern","image","line","linearGradient","marker","mask","metadata","missing-glyph","mpath","path","pattern","polygon","polyline","radialGradient","rect","script","set","stop","style","svg","switch","symbol","text","textPath","title","tref","tspan","use","view","vkern"]')},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=(0,r(4).declare)((e=>(e.assertVersion(7),{name:"syntax-class-static-block",manipulateOptions(e,t){t.plugins.push("classStaticBlock")}})));t.default=n},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.buildPrivateNamesMap=function(e){const t=new Map;for(const r of e){const e=r.isPrivate(),n=!r.isProperty(),s=!r.node.static;if(e){const{name:e}=r.node.key.id,i=t.has(e)?t.get(e):{id:r.scope.generateUidIdentifier(e),static:!s,method:n};"get"===r.node.kind?i.getId=r.scope.generateUidIdentifier(`get_${e}`):"set"===r.node.kind?i.setId=r.scope.generateUidIdentifier(`set_${e}`):"method"===r.node.kind&&(i.methodId=r.scope.generateUidIdentifier(e)),t.set(e,i)}}return t},t.buildPrivateNamesNodes=function(e,t,r){const s=[];for(const[i,o]of e){const{static:e,method:l,getId:c,setId:u}=o,p=c||u,f=n.types.cloneNode(o.id);let d;t?d=n.types.callExpression(r.addHelper("classPrivateFieldLooseKey"),[n.types.stringLiteral(i)]):e||(d=n.types.newExpression(n.types.identifier(!l||p?"WeakMap":"WeakSet"),[])),d&&((0,a.default)(d),s.push(n.template.statement.ast`var ${f} = ${d}`))}return s},t.transformPrivateNamesUsage=function(e,t,r,{privateFieldsAsProperties:n,noDocumentAll:s},o){if(!r.size)return;const a=t.get("body"),l=n?d:f;(0,i.default)(a,u,Object.assign({privateNamesMap:r,classRef:e,file:o},l,{noDocumentAll:s})),a.traverse(p,{privateNamesMap:r,classRef:e,file:o,privateFieldsAsProperties:n})},t.buildFieldsInitNodes=function(e,t,r,s,i,o,a,c,u){let p,f=!1;const d=[],T=[],w=[],A=n.types.isIdentifier(t)?()=>t:()=>(null!=p||(p=r[0].scope.generateUidIdentifierBasedOnNode(t)),p);for(const t of r){l.assertFieldTransformed(t);const r=t.node.static,p=!r,O=t.isPrivate(),C=!O,I=t.isProperty(),k=!I,N=null==t.isStaticBlock?void 0:t.isStaticBlock();if(r||k&&O||N){const r=P(t,e,A,i,N,c,u);f=f||r}switch(!0){case N:d.push(n.template.statement.ast`(() => ${n.types.blockStatement(t.node.body)})()`);break;case r&&O&&I&&a:f=!0,d.push(h(n.types.cloneNode(e),t,s));break;case r&&O&&I&&!a:f=!0,d.push(y(t,s));break;case r&&C&&I&&o:f=!0,d.push(v(n.types.cloneNode(e),t));break;case r&&C&&I&&!o:f=!0,d.push(E(n.types.cloneNode(e),t,i));break;case p&&O&&I&&a:T.push(h(n.types.thisExpression(),t,s));break;case p&&O&&I&&!a:T.push(m(n.types.thisExpression(),t,s));break;case p&&O&&k&&a:T.unshift(g(n.types.thisExpression(),t,s)),w.push(S(t,s,a));break;case p&&O&&k&&!a:T.unshift(b(n.types.thisExpression(),t,s)),w.push(S(t,s,a));break;case r&&O&&k&&!a:f=!0,d.unshift(y(t,s)),w.push(S(t,s,a));break;case r&&O&&k&&a:f=!0,d.unshift(x(n.types.cloneNode(e),t,0,s)),w.push(S(t,s,a));break;case p&&C&&I&&o:T.push(v(n.types.thisExpression(),t));break;case p&&C&&I&&!o:T.push(E(n.types.thisExpression(),t,i));break;default:throw new Error("Unreachable.")}}return{staticNodes:d.filter(Boolean),instanceNodes:T.filter(Boolean),pureStaticNodes:w.filter(Boolean),wrapClass(t){for(const e of r)e.remove();return p&&(t.scope.push({id:n.types.cloneNode(p)}),t.set("superClass",n.types.assignmentExpression("=",p,t.node.superClass))),f?(t.isClassExpression()?(t.scope.push({id:e}),t.replaceWith(n.types.assignmentExpression("=",n.types.cloneNode(e),t.node))):t.node.id||(t.node.id=e),t):t}}};var n=r(9),s=r(70),i=r(258),o=r(259),a=r(347),l=r(538);function c(e){const t=Object.assign({},e,{Class(e){const{privateNamesMap:n}=this,s=e.get("body.body"),i=new Map(n),o=[];for(const e of s){if(!e.isPrivate())continue;const{name:t}=e.node.key.id;i.delete(t),o.push(t)}o.length&&(e.get("body").traverse(r,Object.assign({},this,{redeclared:o})),e.traverse(t,Object.assign({},this,{privateNamesMap:i})),e.skipKey("body"))}}),r=n.traverse.visitors.merge([Object.assign({},e),s.environmentVisitor]);return t}const u=c({PrivateName(e,{noDocumentAll:t}){const{privateNamesMap:r,redeclared:n}=this,{node:s,parentPath:i}=e;if(!i.isMemberExpression({property:s})&&!i.isOptionalMemberExpression({property:s}))return;const{name:o}=s.id;r.has(o)&&(n&&n.includes(o)||this.handle(i,t))}}),p=c({BinaryExpression(e){const{operator:t,left:r,right:s}=e.node;if("in"!==t)return;if(!e.get("left").isPrivateName())return;const{privateFieldsAsProperties:i,privateNamesMap:o,redeclared:a}=this,{name:l}=r.id;if(!o.has(l))return;if(a&&a.includes(l))return;if(i){const{id:t}=o.get(l);return void e.replaceWith(n.template.expression.ast` - Object.prototype.hasOwnProperty.call(${s}, ${n.types.cloneNode(t)}) - `)}const{id:c,static:u}=o.get(l);u?e.replaceWith(n.template.expression.ast`${s} === ${this.classRef}`):e.replaceWith(n.template.expression.ast`${n.types.cloneNode(c)}.has(${s})`)}}),f={memoise(e,t){const{scope:r}=e,{object:n}=e.node,s=r.maybeGenerateMemoised(n);s&&this.memoiser.set(n,s,t)},receiver(e){const{object:t}=e.node;return this.memoiser.has(t)?n.types.cloneNode(this.memoiser.get(t)):n.types.cloneNode(t)},get(e){const{classRef:t,privateNamesMap:r,file:s}=this,{name:i}=e.node.property.id,{id:o,static:a,method:l,methodId:c,getId:u,setId:p}=r.get(i),f=u||p;if(a){const r=l&&!f?"classStaticPrivateMethodGet":"classStaticPrivateFieldSpecGet";return n.types.callExpression(s.addHelper(r),[this.receiver(e),n.types.cloneNode(t),n.types.cloneNode(o)])}return l?f?!u&&p&&s.availableHelper("writeOnlyError")?n.types.sequenceExpression([this.receiver(e),n.types.callExpression(s.addHelper("writeOnlyError"),[n.types.stringLiteral(`#${i}`)])]):n.types.callExpression(s.addHelper("classPrivateFieldGet"),[this.receiver(e),n.types.cloneNode(o)]):n.types.callExpression(s.addHelper("classPrivateMethodGet"),[this.receiver(e),n.types.cloneNode(o),n.types.cloneNode(c)]):n.types.callExpression(s.addHelper("classPrivateFieldGet"),[this.receiver(e),n.types.cloneNode(o)])},boundGet(e){return this.memoise(e,1),n.types.callExpression(n.types.memberExpression(this.get(e),n.types.identifier("bind")),[this.receiver(e)])},set(e,t){const{classRef:r,privateNamesMap:s,file:i}=this,{name:o}=e.node.property.id,{id:a,static:l,method:c,setId:u,getId:p}=s.get(o);if(l){const s=!c||p||u?"classStaticPrivateFieldSpecSet":"classStaticPrivateMethodSet";return n.types.callExpression(i.addHelper(s),[this.receiver(e),n.types.cloneNode(r),n.types.cloneNode(a),t])}return c?u?n.types.callExpression(i.addHelper("classPrivateFieldSet"),[this.receiver(e),n.types.cloneNode(a),t]):n.types.sequenceExpression([this.receiver(e),t,n.types.callExpression(i.addHelper("readOnlyError"),[n.types.stringLiteral(`#${o}`)])]):n.types.callExpression(i.addHelper("classPrivateFieldSet"),[this.receiver(e),n.types.cloneNode(a),t])},destructureSet(e){const{classRef:t,privateNamesMap:r,file:s}=this,{name:i}=e.node.property.id,{id:o,static:a}=r.get(i);if(a){try{var l=s.addHelper("classStaticPrivateFieldDestructureSet")}catch(e){throw new Error("Babel can not transpile `[C.#p] = [0]` with @babel/helpers < 7.13.10, \nplease update @babel/helpers to the latest version.")}return n.types.memberExpression(n.types.callExpression(l,[this.receiver(e),n.types.cloneNode(t),n.types.cloneNode(o)]),n.types.identifier("value"))}return n.types.memberExpression(n.types.callExpression(s.addHelper("classPrivateFieldDestructureSet"),[this.receiver(e),n.types.cloneNode(o)]),n.types.identifier("value"))},call(e,t){return this.memoise(e,1),(0,o.default)(this.get(e),this.receiver(e),t,!1)},optionalCall(e,t){return this.memoise(e,1),(0,o.default)(this.get(e),this.receiver(e),t,!0)}},d={get(e){const{privateNamesMap:t,file:r}=this,{object:s}=e.node,{name:i}=e.node.property.id;return n.template.expression`BASE(REF, PROP)[PROP]`({BASE:r.addHelper("classPrivateFieldLooseBase"),REF:n.types.cloneNode(s),PROP:n.types.cloneNode(t.get(i).id)})},boundGet(e){return n.types.callExpression(n.types.memberExpression(this.get(e),n.types.identifier("bind")),[n.types.cloneNode(e.node.object)])},simpleSet(e){return this.get(e)},destructureSet(e){return this.get(e)},call(e,t){return n.types.callExpression(this.get(e),t)},optionalCall(e,t){return n.types.optionalCallExpression(this.get(e),t,!0)}};function h(e,t,r){const{id:s}=r.get(t.node.key.id.name),i=t.node.value||t.scope.buildUndefinedNode();return n.template.statement.ast` - Object.defineProperty(${e}, ${n.types.cloneNode(s)}, { - // configurable is false by default - // enumerable is false by default - writable: true, - value: ${i} - }); - `}function m(e,t,r){const{id:s}=r.get(t.node.key.id.name),i=t.node.value||t.scope.buildUndefinedNode();return n.template.statement.ast`${n.types.cloneNode(s)}.set(${e}, { - // configurable is always false for private elements - // enumerable is always false for private elements - writable: true, - value: ${i}, - })`}function y(e,t){const r=t.get(e.node.key.id.name),{id:s,getId:i,setId:o,initAdded:a}=r,l=i||o;if(!e.isProperty()&&(a||!l))return;if(l)return t.set(e.node.key.id.name,Object.assign({},r,{initAdded:!0})),n.template.statement.ast` - var ${n.types.cloneNode(s)} = { - // configurable is false by default - // enumerable is false by default - // writable is false by default - get: ${i?i.name:e.scope.buildUndefinedNode()}, - set: ${o?o.name:e.scope.buildUndefinedNode()} - } - `;const c=e.node.value||e.scope.buildUndefinedNode();return n.template.statement.ast` - var ${n.types.cloneNode(s)} = { - // configurable is false by default - // enumerable is false by default - writable: true, - value: ${c} - }; - `}function g(e,t,r){const s=r.get(t.node.key.id.name),{methodId:i,id:o,getId:a,setId:l,initAdded:c}=s;if(!c)return i?n.template.statement.ast` - Object.defineProperty(${e}, ${o}, { - // configurable is false by default - // enumerable is false by default - // writable is false by default - value: ${i.name} - }); - `:a||l?(r.set(t.node.key.id.name,Object.assign({},s,{initAdded:!0})),n.template.statement.ast` - Object.defineProperty(${e}, ${o}, { - // configurable is false by default - // enumerable is false by default - // writable is false by default - get: ${a?a.name:t.scope.buildUndefinedNode()}, - set: ${l?l.name:t.scope.buildUndefinedNode()} - }); - `):void 0}function b(e,t,r){const s=r.get(t.node.key.id.name),{id:i,getId:o,setId:a,initAdded:l}=s;if(!l)return o||a?(r.set(t.node.key.id.name,Object.assign({},s,{initAdded:!0})),n.template.statement.ast` - ${i}.set(${e}, { - get: ${o?o.name:t.scope.buildUndefinedNode()}, - set: ${a?a.name:t.scope.buildUndefinedNode()} - }); - `):n.template.statement.ast`${i}.add(${e})`}function v(e,t){const{key:r,computed:s}=t.node,i=t.node.value||t.scope.buildUndefinedNode();return n.types.expressionStatement(n.types.assignmentExpression("=",n.types.memberExpression(e,r,s||n.types.isLiteral(r)),i))}function E(e,t,r){const{key:s,computed:i}=t.node,o=t.node.value||t.scope.buildUndefinedNode();return n.types.expressionStatement(n.types.callExpression(r.addHelper("defineProperty"),[e,i||n.types.isLiteral(s)?s:n.types.stringLiteral(s.name),o]))}function x(e,t,r,s){const i=s.get(t.node.key.id.name),{id:o,methodId:a,getId:l,setId:c,initAdded:u}=i;if(!u)return l||c?(s.set(t.node.key.id.name,Object.assign({},i,{initAdded:!0})),n.template.statement.ast` - Object.defineProperty(${e}, ${o}, { - // configurable is false by default - // enumerable is false by default - // writable is false by default - get: ${l?l.name:t.scope.buildUndefinedNode()}, - set: ${c?c.name:t.scope.buildUndefinedNode()} - }) - `):n.template.statement.ast` - Object.defineProperty(${e}, ${o}, { - // configurable is false by default - // enumerable is false by default - // writable is false by default - value: ${a.name} - }); - `}function S(e,t,r=!1){const s=t.get(e.node.key.id.name),{id:i,methodId:o,getId:a,setId:l,getterDeclared:c,setterDeclared:u,static:p}=s,{params:f,body:d,generator:h,async:m}=e.node,y=a&&!c&&0===f.length,g=l&&!u&&f.length>0;let b=o;return y?(t.set(e.node.key.id.name,Object.assign({},s,{getterDeclared:!0})),b=a):g?(t.set(e.node.key.id.name,Object.assign({},s,{setterDeclared:!0})),b=l):p&&!r&&(b=i),n.types.functionDeclaration(n.types.cloneNode(b),f,d,h,m)}const T=n.traverse.visitors.merge([{ThisExpression(e,t){t.needsClassRef=!0,e.replaceWith(n.types.cloneNode(t.classRef))}},s.environmentVisitor]),w={ReferencedIdentifier(e,t){e.scope.bindingIdentifierEquals(e.node.name,t.innerBinding)&&(t.needsClassRef=!0,e.node.name=t.classRef.name)}};function P(e,t,r,i,o,a,l){var c;const u={classRef:t,needsClassRef:!1,innerBinding:l};return new s.default({methodPath:e,constantSuper:a,file:i,refToPreserve:t,getSuperRef:r,getObjectRef:()=>(u.needsClassRef=!0,o||e.node.static?t:n.types.memberExpression(t,n.types.identifier("prototype")))}).replace(),(o||e.isProperty())&&e.traverse(T,u),null!=(c=u.classRef)&&c.name&&u.classRef.name!==(null==l?void 0:l.name)&&e.traverse(w,u),u.needsClassRef}},(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.assertFieldTransformed=function(e){if(e.node.declare)throw e.buildCodeFrameError("TypeScript 'declare' fields must first be transformed by @babel/plugin-transform-typescript.\nIf you have already enabled that plugin (or '@babel/preset-typescript'), make sure that it runs before any plugin related to additional class features:\n - @babel/plugin-proposal-class-properties\n - @babel/plugin-proposal-private-methods\n - @babel/plugin-proposal-decorators")}},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.injectInitialization=function(e,t,r,s){if(!r.length)return;const a=!!e.node.superClass;if(!t){const r=n.types.classMethod("constructor",n.types.identifier("constructor"),[],n.types.blockStatement([]));a&&(r.params=[n.types.restElement(n.types.identifier("args"))],r.body.body.push(n.template.statement.ast`super(...args)`)),[t]=e.get("body").unshiftContainer("body",r)}if(s&&s(o,{scope:t.scope}),a){const e=[];t.traverse(i,e);let s=!0;for(const t of e)s?(t.insertAfter(r),s=!1):t.insertAfter(r.map((e=>n.types.cloneNode(e))))}else t.get("body").unshiftContainer("body",r)},t.extractComputedKeys=function(e,t,r,s){const i=[],o={classBinding:t.node.id&&t.scope.getBinding(t.node.id.name),file:s};for(const e of r){const r=e.get("key");r.isReferencedIdentifier()?a(r,o):r.traverse(l,o);const s=e.node;if(!r.isConstantExpression()){const e=t.scope.generateUidIdentifierBasedOnNode(s.key);t.scope.push({id:e,kind:"let"}),i.push(n.types.expressionStatement(n.types.assignmentExpression("=",n.types.cloneNode(e),s.key))),s.key=n.types.cloneNode(e)}}return i};var n=r(9),s=r(70);const i=n.traverse.visitors.merge([{Super(e){const{node:t,parentPath:r}=e;r.isCallExpression({callee:t})&&this.push(r)}},s.environmentVisitor]),o={"TSTypeAnnotation|TypeAnnotation"(e){e.skip()},ReferencedIdentifier(e){this.scope.hasOwnBinding(e.node.name)&&(this.scope.rename(e.node.name),e.skip())}};function a(e,t){if(t.classBinding&&t.classBinding===e.scope.getBinding(e.node.name)){const r=t.file.addHelper("classNameTDZError"),s=n.types.callExpression(r,[n.types.stringLiteral(e.node.name)]);e.replaceWith(n.types.sequenceExpression([s,e.node])),e.skip()}}const l={ReferencedIdentifier:a}},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.enableFeature=function(e,t,r){let n,s;c(e,t)&&!f(e,t)||(e.set(o,e.get(o)|t),"#__internal__@babel/preset-env__prefer-true-but-false-is-ok-if-it-prevents-an-error"===r?(p(e,t,!0),e.set(l,e.get(l)|t)):"#__internal__@babel/preset-env__prefer-false-but-true-is-ok-if-it-prevents-an-error"===r?(p(e,t,!1),e.set(l,e.get(l)|t)):p(e,t,r));for(const[t,r]of i){if(!c(e,t))continue;const i=u(e,t);if(!f(e,t)){if(n===!i)throw new Error("'loose' mode configuration must be the same for @babel/plugin-proposal-class-properties, @babel/plugin-proposal-private-methods and @babel/plugin-proposal-private-property-in-object (when they are enabled).");n=i,s=r}}if(void 0!==n)for(const[t,r]of i)c(e,t)&&u(e,t)!==n&&p(e,t,n)},t.isLoose=u,t.verifyUsedFeatures=function(e,t){if((0,n.hasOwnDecorators)(e.node)){if(!c(t,s.decorators))throw e.buildCodeFrameError('Decorators are not enabled.\nIf you are using ["@babel/plugin-proposal-decorators", { "legacy": true }], make sure it comes *before* "@babel/plugin-proposal-class-properties" and enable loose mode, like so:\n\t["@babel/plugin-proposal-decorators", { "legacy": true }]\n\t["@babel/plugin-proposal-class-properties", { "loose": true }]');if(e.isPrivate())throw e.buildCodeFrameError(`Private ${e.isClassMethod()?"methods":"fields"} in decorated classes are not supported yet.`)}if(null!=e.isPrivateMethod&&e.isPrivateMethod()&&!c(t,s.privateMethods))throw e.buildCodeFrameError("Class private methods are not enabled.");if(e.isPrivateName()&&e.parentPath.isBinaryExpression({operator:"in",left:e.node})&&!c(t,s.privateIn))throw e.buildCodeFrameError("Private property in checks are not enabled.");if(e.isProperty()&&!c(t,s.fields))throw e.buildCodeFrameError("Class fields are not enabled.");if(null!=e.isStaticBlock&&e.isStaticBlock()&&!c(t,s.staticBlocks))throw e.buildCodeFrameError("Static class blocks are not enabled. Please add `@babel/plugin-proposal-class-static-block` to your configuration.")},t.FEATURES=void 0;var n=r(311);const s=Object.freeze({fields:2,privateMethods:4,decorators:8,privateIn:16,staticBlocks:32});t.FEATURES=s;const i=new Map([[s.fields,"@babel/plugin-proposal-class-properties"],[s.privateMethods,"@babel/plugin-proposal-private-methods"],[s.privateIn,"@babel/plugin-proposal-private-property-in-object"]]),o="@babel/plugin-class-features/featuresKey",a="@babel/plugin-class-features/looseKey",l="@babel/plugin-class-features/looseLowPriorityKey/#__internal__@babel/preset-env__please-overwrite-loose-instead-of-throwing";function c(e,t){return!!(e.get(o)&t)}function u(e,t){return!!(e.get(a)&t)}function p(e,t,r){r?e.set(a,e.get(a)|t):e.set(a,e.get(a)&~t),e.set(l,e.get(l)&~t)}function f(e,t){return!!(e.get(l)&t)}},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=(0,r(4).declare)((e=>(e.assertVersion(7),{name:"syntax-private-property-in-object",manipulateOptions(e,t){t.plugins.push("privateIn")}})));t.default=n},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=(0,r(4).declare)((e=>(e.assertVersion(7),{name:"syntax-logical-assignment-operators",manipulateOptions(e,t){t.plugins.push("logicalAssignment")}})));t.default=n},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=(0,r(4).declare)((e=>(e.assertVersion(7),{name:"syntax-nullish-coalescing-operator",manipulateOptions(e,t){t.plugins.push("nullishCoalescingOperator")}})));t.default=n},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=(0,r(4).declare)((e=>(e.assertVersion(7),{name:"syntax-optional-chaining",manipulateOptions(e,t){t.plugins.push("optionalChaining")}})));t.default=n},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isTransparentExprWrapper=s,t.skipTransparentExprWrappers=function(e){for(;s(e.node);)e=e.get("expression");return e};var n=r(0);function s(e){return n.isTSAsExpression(e)||n.isTSTypeAssertion(e)||n.isTSNonNullExpression(e)||n.isTypeCastExpression(e)||n.isParenthesizedExpression(e)}},(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=(0,r(4).declare)((e=>(e.assertVersion(7),{name:"syntax-export-namespace-from",manipulateOptions(e,t){t.plugins.push("exportNamespaceFrom")}})));t.default=n}],t={};function r(n){var s=t[n];if(void 0!==s)return s.exports;var i=t[n]={id:n,loaded:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.loaded=!0,i.exports}return r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),r(355),r(361)})()})); -//# sourceMappingURL=vue3-sfc-loader.js.map diff --git a/frontend/public/js/vue3-sfc-loader.js.map b/frontend/public/js/vue3-sfc-loader.js.map deleted file mode 100644 index 085a171bc..000000000 --- a/frontend/public/js/vue3-sfc-loader.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack://vue3-sfc-loader/webpack/universalModuleDefinition","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/index.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/validators/generated/index.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/global.js","webpack://vue3-sfc-loader/./node_modules/semver/classes/semver.js","webpack://vue3-sfc-loader/./node_modules/@babel/helper-plugin-utils/lib/index.js","webpack://vue3-sfc-loader/./node_modules/postcss-selector-parser/dist/selectors/types.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/builders/generated/index.js","webpack://vue3-sfc-loader/./node_modules/process/browser.js","webpack://vue3-sfc-loader/./node_modules/path-browserify/index.js","webpack://vue3-sfc-loader/./node_modules/@babel/core/lib/index.js","webpack://vue3-sfc-loader/./node_modules/@babel/traverse/lib/index.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/definitions/index.js","webpack://vue3-sfc-loader/./node_modules/semver/functions/compare.js","webpack://vue3-sfc-loader/./node_modules/semver/classes/range.js","webpack://vue3-sfc-loader/./node_modules/gensync/index.js","webpack://vue3-sfc-loader/./node_modules/postcss-selector-parser/dist/selectors/node.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/fails.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/has.js","webpack://vue3-sfc-loader/./node_modules/@vue/babel-plugin-jsx/dist/index.js","webpack://vue3-sfc-loader/./node_modules/@babel/traverse/lib/path/index.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/definitions/utils.js","webpack://vue3-sfc-loader/./node_modules/@babel/template/lib/index.js","webpack://vue3-sfc-loader/./node_modules/postcss/lib/container.js","webpack://vue3-sfc-loader/./node_modules/semver/internal/re.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/is-object.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/constants/index.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/clone/cloneNode.js","webpack://vue3-sfc-loader/./node_modules/@babel/parser/lib/index.js","webpack://vue3-sfc-loader/./node_modules/semver/index.js","webpack://vue3-sfc-loader/./node_modules/semver/functions/parse.js","webpack://vue3-sfc-loader/./node_modules/assert/build/assert.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/descriptors.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/create-non-enumerable-property.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/engine-user-agent.js","webpack://vue3-sfc-loader/./node_modules/@babel/traverse/lib/cache.js","webpack://vue3-sfc-loader/./node_modules/postcss/lib/root.js","webpack://vue3-sfc-loader/./node_modules/util/util.js","webpack://vue3-sfc-loader/./node_modules/buffer/index.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/validators/isValidIdentifier.js","webpack://vue3-sfc-loader/./node_modules/@babel/code-frame/lib/index.js","webpack://vue3-sfc-loader/./node_modules/define-properties/index.js","webpack://vue3-sfc-loader/./node_modules/semver/internal/constants.js","webpack://vue3-sfc-loader/./node_modules/semver/internal/debug.js","webpack://vue3-sfc-loader/./node_modules/semver/internal/parse-options.js","webpack://vue3-sfc-loader/./node_modules/semver/functions/gt.js","webpack://vue3-sfc-loader/./node_modules/semver/classes/comparator.js","webpack://vue3-sfc-loader/./node_modules/semver/functions/satisfies.js","webpack://vue3-sfc-loader/./node_modules/postcss/lib/declaration.js","webpack://vue3-sfc-loader/./node_modules/postcss/lib/node.js","webpack://vue3-sfc-loader/./node_modules/postcss/lib/comment.js","webpack://vue3-sfc-loader/./node_modules/@vue/babel-plugin-jsx/dist/utils.js","webpack://vue3-sfc-loader/./node_modules/call-bind/index.js","webpack://vue3-sfc-loader/./node_modules/postcss-selector-parser/dist/selectors/container.js","webpack://vue3-sfc-loader/./node_modules/postcss-selector-parser/dist/selectors/namespace.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/well-known-symbol.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/shared-store.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/set-global.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/an-object.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/uid.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/get-built-in.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/classof-raw.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/to-indexed-object.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/validators/is.js","webpack://vue3-sfc-loader/./node_modules/@babel/helper-validator-identifier/lib/index.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/retrievers/getBindingIdentifiers.js","webpack://vue3-sfc-loader/./build/noopDebug.js","webpack://vue3-sfc-loader/./node_modules/call-bind/callBound.js","webpack://vue3-sfc-loader/./node_modules/get-intrinsic/index.js","webpack://vue3-sfc-loader/./node_modules/has-symbols/index.js","webpack://vue3-sfc-loader/./node_modules/function-bind/index.js","webpack://vue3-sfc-loader/./node_modules/@babel/helper-replace-supers/lib/index.js","webpack://vue3-sfc-loader/./node_modules/semver/functions/eq.js","webpack://vue3-sfc-loader/./node_modules/semver/functions/compare-build.js","webpack://vue3-sfc-loader/./node_modules/semver/functions/lt.js","webpack://vue3-sfc-loader/./node_modules/semver/functions/gte.js","webpack://vue3-sfc-loader/./node_modules/semver/functions/lte.js","webpack://vue3-sfc-loader/./node_modules/semver/ranges/outside.js","webpack://vue3-sfc-loader/./node_modules/@babel/core/lib/config/files/index-browser.js","webpack://vue3-sfc-loader/./node_modules/@babel/core/lib/config/index.js","webpack://vue3-sfc-loader/./node_modules/@babel/core/lib/config/plugin.js","webpack://vue3-sfc-loader/./node_modules/@babel/core/lib/config/item.js","webpack://vue3-sfc-loader/./node_modules/@babel/core/lib/config/caching.js","webpack://vue3-sfc-loader/./node_modules/@babel/core/lib/config/validation/options.js","webpack://vue3-sfc-loader/./node_modules/@vue/shared/index.js","webpack://vue3-sfc-loader/./node_modules/postcss/lib/postcss.js","webpack://vue3-sfc-loader/./node_modules/postcss/lib/css-syntax-error.js","webpack://vue3-sfc-loader/./node_modules/postcss/lib/stringify.js","webpack://vue3-sfc-loader/./node_modules/postcss/lib/document.js","webpack://vue3-sfc-loader/./node_modules/postcss/lib/at-rule.js","webpack://vue3-sfc-loader/./node_modules/postcss/lib/rule.js","webpack://vue3-sfc-loader/./node_modules/postcss/lib/input.js","webpack://vue3-sfc-loader/./node_modules/postcss-selector-parser/dist/util/index.js","webpack://vue3-sfc-loader/./node_modules/cssesc/cssesc.js","webpack://vue3-sfc-loader/./node_modules/@babel/helper-create-class-features-plugin/lib/index.js","webpack://vue3-sfc-loader/./node_modules/semver/internal/identifiers.js","webpack://vue3-sfc-loader/./node_modules/estree-walker/dist/umd/estree-walker.js","webpack://vue3-sfc-loader/./node_modules/postcss-selector-parser/dist/index.js","webpack://vue3-sfc-loader/./node_modules/postcss-selector-parser/dist/selectors/root.js","webpack://vue3-sfc-loader/./node_modules/postcss-selector-parser/dist/util/unesc.js","webpack://vue3-sfc-loader/./node_modules/postcss-selector-parser/dist/selectors/selector.js","webpack://vue3-sfc-loader/./node_modules/postcss-selector-parser/dist/selectors/className.js","webpack://vue3-sfc-loader/./node_modules/postcss-selector-parser/dist/selectors/comment.js","webpack://vue3-sfc-loader/./node_modules/postcss-selector-parser/dist/selectors/id.js","webpack://vue3-sfc-loader/./node_modules/postcss-selector-parser/dist/selectors/tag.js","webpack://vue3-sfc-loader/./node_modules/postcss-selector-parser/dist/selectors/string.js","webpack://vue3-sfc-loader/./node_modules/postcss-selector-parser/dist/selectors/pseudo.js","webpack://vue3-sfc-loader/./node_modules/postcss-selector-parser/dist/selectors/universal.js","webpack://vue3-sfc-loader/./node_modules/postcss-selector-parser/dist/selectors/combinator.js","webpack://vue3-sfc-loader/./node_modules/postcss-selector-parser/dist/selectors/nesting.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/to-object.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/require-object-coercible.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/shared.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/object-define-property.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/ie8-dom-define.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/document-create-element.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/to-primitive.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/create-property-descriptor.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/native-symbol.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/engine-v8-version.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/redefine.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/inspect-source.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/shared-key.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/hidden-keys.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/a-function.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/to-length.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/to-integer.js","webpack://vue3-sfc-loader/./node_modules/@babel/core/lib/transformation/file/file.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/utils/shallowEqual.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/definitions/core.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/validators/isType.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/validators/validate.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/utils/inherit.js","webpack://vue3-sfc-loader/./node_modules/@babel/helper-split-export-declaration/lib/index.js","webpack://vue3-sfc-loader/./node_modules/@babel/generator/lib/index.js","webpack://vue3-sfc-loader/./node_modules/@babel/helper-function-name/lib/index.js","webpack://vue3-sfc-loader/./node_modules/@babel/template/lib/options.js","webpack://vue3-sfc-loader/./node_modules/foreach/index.js","webpack://vue3-sfc-loader/./node_modules/available-typed-arrays/index.js","webpack://vue3-sfc-loader/./node_modules/es-abstract/helpers/getOwnPropertyDescriptor.js","webpack://vue3-sfc-loader/./node_modules/is-typed-array/index.js","webpack://vue3-sfc-loader/./node_modules/object-is/index.js","webpack://vue3-sfc-loader/./node_modules/object-keys/isArguments.js","webpack://vue3-sfc-loader/./node_modules/object-is/implementation.js","webpack://vue3-sfc-loader/./node_modules/object-is/polyfill.js","webpack://vue3-sfc-loader/./node_modules/is-nan/implementation.js","webpack://vue3-sfc-loader/./node_modules/is-nan/polyfill.js","webpack://vue3-sfc-loader/./node_modules/@babel/helper-module-imports/lib/index.js","webpack://vue3-sfc-loader/./node_modules/semver/functions/neq.js","webpack://vue3-sfc-loader/./node_modules/semver/functions/cmp.js","webpack://vue3-sfc-loader/./node_modules/lru-cache/index.js","webpack://vue3-sfc-loader/./node_modules/@babel/core/lib/config/util.js","webpack://vue3-sfc-loader/./node_modules/browserslist/error.js","webpack://vue3-sfc-loader/./node_modules/@babel/helper-compilation-targets/lib/utils.js","webpack://vue3-sfc-loader/./node_modules/@babel/helper-compilation-targets/lib/targets.js","webpack://vue3-sfc-loader/./node_modules/postcss/lib/symbols.js","webpack://vue3-sfc-loader/./node_modules/postcss/lib/stringifier.js","webpack://vue3-sfc-loader/./node_modules/postcss/lib/lazy-result.js","webpack://vue3-sfc-loader/./node_modules/postcss/lib/result.js","webpack://vue3-sfc-loader/./node_modules/postcss/lib/warning.js","webpack://vue3-sfc-loader/./node_modules/postcss/lib/parse.js","webpack://vue3-sfc-loader/./node_modules/postcss/lib/list.js","webpack://vue3-sfc-loader/./node_modules/postcss/lib/previous-map.js","webpack://vue3-sfc-loader/./node_modules/icss-utils/src/replaceValueSymbols.js","webpack://vue3-sfc-loader/./node_modules/@babel/generator/lib/generators/index.js","webpack://vue3-sfc-loader/./node_modules/postcss-selector-parser/dist/selectors/index.js","webpack://vue3-sfc-loader/./node_modules/@vue/babel-plugin-jsx/dist/transform-vue-jsx.js","webpack://vue3-sfc-loader/./node_modules/url/node_modules/punycode/punycode.js","webpack://vue3-sfc-loader/./node_modules/@vue/babel-plugin-jsx/dist/parseDirectives.js","webpack://vue3-sfc-loader/./node_modules/@vue/babel-plugin-jsx/dist/sugar-fragment.js","webpack://vue3-sfc-loader/./node_modules/inherits/inherits_browser.js","webpack://vue3-sfc-loader/./node_modules/postcss-selector-parser/dist/processor.js","webpack://vue3-sfc-loader/./node_modules/postcss-selector-parser/dist/parser.js","webpack://vue3-sfc-loader/./node_modules/postcss-selector-parser/dist/util/getProp.js","webpack://vue3-sfc-loader/./node_modules/postcss-selector-parser/dist/util/ensureObject.js","webpack://vue3-sfc-loader/./node_modules/postcss-selector-parser/dist/util/stripComments.js","webpack://vue3-sfc-loader/./node_modules/postcss-selector-parser/dist/sortAscending.js","webpack://vue3-sfc-loader/../src/sourcemap-codec.ts","webpack://vue3-sfc-loader/./node_modules/core-js/internals/array-buffer-view-core.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/array-buffer-native.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/classof.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/to-string-tag-support.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/is-pure.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/path.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/use-symbol-as-uid.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/internal-state.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/native-weak-map.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/object-get-prototype-of.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/correct-prototype-getter.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/object-set-prototype-of.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/a-possible-prototype.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/array-sort.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/engine-ff-version.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/engine-is-ie-or-edge.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/engine-webkit-version.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/export.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/object-get-own-property-descriptor.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/indexed-object.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/copy-constructor-properties.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/own-keys.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/object-keys-internal.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/array-includes.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/to-absolute-index.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/enum-bug-keys.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/is-forced.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/task.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/function-bind-context.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/html.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/engine-is-ios.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/engine-is-node.js","webpack://vue3-sfc-loader/./node_modules/@babel/helpers/lib/index.js","webpack://vue3-sfc-loader/./node_modules/@babel/traverse/lib/path/lib/virtual-types.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/validators/buildMatchMemberExpression.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/validators/matchesPattern.js","webpack://vue3-sfc-loader/./node_modules/to-fast-properties/index.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/validators/isPlaceholderType.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/definitions/placeholders.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/validators/isNode.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/modifications/flow/removeTypeDuplicates.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/comments/addComments.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/comments/inheritInnerComments.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/comments/inheritLeadingComments.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/comments/inheritsComments.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/comments/inheritTrailingComments.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/converters/toBlock.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/converters/toIdentifier.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/modifications/removePropertiesDeep.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/traverse/traverseFast.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/modifications/removeProperties.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/validators/isLet.js","webpack://vue3-sfc-loader/./node_modules/@babel/traverse/lib/scope/index.js","webpack://vue3-sfc-loader/./node_modules/@babel/traverse/lib/scope/binding.js","webpack://vue3-sfc-loader/./node_modules/@babel/generator/lib/node/index.js","webpack://vue3-sfc-loader/./node_modules/@babel/generator/lib/generators/modules.js","webpack://vue3-sfc-loader/./node_modules/@babel/generator/lib/generators/types.js","webpack://vue3-sfc-loader/./node_modules/jsesc/jsesc.js","webpack://vue3-sfc-loader/./node_modules/@babel/template/lib/parse.js","webpack://vue3-sfc-loader/./node_modules/@babel/template/lib/populate.js","webpack://vue3-sfc-loader/./node_modules/@babel/helper-module-transforms/lib/index.js","webpack://vue3-sfc-loader/./node_modules/assert/build/internal/errors.js","webpack://vue3-sfc-loader/./node_modules/util/support/types.js","webpack://vue3-sfc-loader/./node_modules/is-arguments/index.js","webpack://vue3-sfc-loader/./node_modules/has-symbols/shams.js","webpack://vue3-sfc-loader/./node_modules/function-bind/implementation.js","webpack://vue3-sfc-loader/./node_modules/has/src/index.js","webpack://vue3-sfc-loader/./node_modules/is-generator-function/index.js","webpack://vue3-sfc-loader/./node_modules/which-typed-array/index.js","webpack://vue3-sfc-loader/./node_modules/util/support/isBufferBrowser.js","webpack://vue3-sfc-loader/./node_modules/assert/build/internal/assert/assertion_error.js","webpack://vue3-sfc-loader/./node_modules/es6-object-assign/index.js","webpack://vue3-sfc-loader/./node_modules/object-keys/index.js","webpack://vue3-sfc-loader/./node_modules/object-keys/implementation.js","webpack://vue3-sfc-loader/./node_modules/object-is/shim.js","webpack://vue3-sfc-loader/./node_modules/assert/build/internal/util/comparisons.js","webpack://vue3-sfc-loader/./node_modules/is-nan/index.js","webpack://vue3-sfc-loader/./node_modules/is-nan/shim.js","webpack://vue3-sfc-loader/./node_modules/@babel/helper-module-imports/lib/is-module.js","webpack://vue3-sfc-loader/../src/util.ts","webpack://vue3-sfc-loader/../src/index.ts","webpack://vue3-sfc-loader/./node_modules/@babel/helper-optimise-call-expression/lib/index.js","webpack://vue3-sfc-loader/./node_modules/@babel/helper-simple-access/lib/index.js","webpack://vue3-sfc-loader/./node_modules/semver/functions/valid.js","webpack://vue3-sfc-loader/./node_modules/semver/functions/clean.js","webpack://vue3-sfc-loader/./node_modules/semver/functions/inc.js","webpack://vue3-sfc-loader/./node_modules/semver/functions/diff.js","webpack://vue3-sfc-loader/./node_modules/semver/functions/major.js","webpack://vue3-sfc-loader/./node_modules/semver/functions/minor.js","webpack://vue3-sfc-loader/./node_modules/semver/functions/patch.js","webpack://vue3-sfc-loader/./node_modules/semver/functions/prerelease.js","webpack://vue3-sfc-loader/./node_modules/semver/functions/rcompare.js","webpack://vue3-sfc-loader/./node_modules/semver/functions/compare-loose.js","webpack://vue3-sfc-loader/./node_modules/semver/functions/sort.js","webpack://vue3-sfc-loader/./node_modules/semver/functions/rsort.js","webpack://vue3-sfc-loader/./node_modules/semver/functions/coerce.js","webpack://vue3-sfc-loader/./node_modules/yallist/yallist.js","webpack://vue3-sfc-loader/./node_modules/yallist/iterator.js","webpack://vue3-sfc-loader/./node_modules/semver/ranges/to-comparators.js","webpack://vue3-sfc-loader/./node_modules/semver/ranges/max-satisfying.js","webpack://vue3-sfc-loader/./node_modules/semver/ranges/min-satisfying.js","webpack://vue3-sfc-loader/./node_modules/semver/ranges/min-version.js","webpack://vue3-sfc-loader/./node_modules/semver/ranges/valid.js","webpack://vue3-sfc-loader/./node_modules/semver/ranges/gtr.js","webpack://vue3-sfc-loader/./node_modules/semver/ranges/ltr.js","webpack://vue3-sfc-loader/./node_modules/semver/ranges/intersects.js","webpack://vue3-sfc-loader/./node_modules/semver/ranges/simplify.js","webpack://vue3-sfc-loader/./node_modules/semver/ranges/subset.js","webpack://vue3-sfc-loader/./node_modules/@babel/core/lib/config/helpers/environment.js","webpack://vue3-sfc-loader/./node_modules/@babel/core/lib/gensync-utils/async.js","webpack://vue3-sfc-loader/./node_modules/@babel/core/lib/config/config-descriptors.js","webpack://vue3-sfc-loader/./node_modules/@babel/core/lib/config/resolve-targets-browser.js","webpack://vue3-sfc-loader/./node_modules/@babel/helper-compilation-targets/lib/index.js","webpack://vue3-sfc-loader/./node_modules/browserslist/index.js","webpack://vue3-sfc-loader/./node_modules/caniuse-lite/data/browsers.js","webpack://vue3-sfc-loader/./node_modules/caniuse-lite/data/browserVersions.js","webpack://vue3-sfc-loader/./node_modules/caniuse-lite/data/agents.js","webpack://vue3-sfc-loader/./node_modules/electron-to-chromium/versions.js","webpack://vue3-sfc-loader/./node_modules/browserslist/browser.js","webpack://vue3-sfc-loader/./node_modules/@babel/helper-validator-option/lib/index.js","webpack://vue3-sfc-loader/./node_modules/@babel/helper-validator-option/lib/find-suggestion.js","webpack://vue3-sfc-loader/./node_modules/@babel/helper-compilation-targets/lib/pretty.js","webpack://vue3-sfc-loader/./node_modules/@babel/core/lib/config/config-chain.js","webpack://vue3-sfc-loader/./node_modules/@babel/core/lib/config/validation/option-assertions.js","webpack://vue3-sfc-loader/./node_modules/@babel/core/lib/config/partial.js","webpack://vue3-sfc-loader/./node_modules/@babel/core/lib/transformation/index.js","webpack://vue3-sfc-loader/./node_modules/@babel/core/lib/transformation/normalize-opts.js","webpack://vue3-sfc-loader/./node_modules/@babel/core/lib/parser/index.js","webpack://vue3-sfc-loader/./node_modules/url/util.js","webpack://vue3-sfc-loader/./node_modules/postcss/lib/processor.js","webpack://vue3-sfc-loader/./node_modules/postcss/lib/fromJSON.js","webpack://vue3-sfc-loader/./node_modules/postcss-modules/build/index.js","webpack://vue3-sfc-loader/./node_modules/@babel/helper-create-class-features-plugin/lib/decorators.js","webpack://vue3-sfc-loader/./node_modules/@vue/compiler-sfc/dist|sync","webpack://vue3-sfc-loader/./node_modules/spark-md5/spark-md5.js","webpack://vue3-sfc-loader/./node_modules/@vue/compiler-dom/dist/compiler-dom.cjs.prod.js","webpack://vue3-sfc-loader/./node_modules/@vue/compiler-core/index.js","webpack://vue3-sfc-loader/./node_modules/@vue/compiler-sfc/node_modules/hash-sum/hash-sum.js","webpack://vue3-sfc-loader/./node_modules/querystring/decode.js","webpack://vue3-sfc-loader/./node_modules/querystring/encode.js","webpack://vue3-sfc-loader/./node_modules/postcss/lib/map-generator.js","webpack://vue3-sfc-loader/./node_modules/postcss/lib/warn-once.js","webpack://vue3-sfc-loader/./node_modules/postcss/lib/parser.js","webpack://vue3-sfc-loader/./node_modules/postcss/lib/tokenize.js","webpack://vue3-sfc-loader/./node_modules/nanoid/non-secure/index.cjs","webpack://vue3-sfc-loader/./node_modules/postcss-selector-parser/dist/selectors/attribute.js","webpack://vue3-sfc-loader/./node_modules/util-deprecate/browser.js","webpack://vue3-sfc-loader/./node_modules/postcss-selector-parser/dist/tokenTypes.js","webpack://vue3-sfc-loader/../src/BitSet.js","webpack://vue3-sfc-loader/../src/Chunk.js","webpack://vue3-sfc-loader/../src/SourceMap.js","webpack://vue3-sfc-loader/../src/utils/guessIndent.js","webpack://vue3-sfc-loader/../src/utils/getRelativePath.js","webpack://vue3-sfc-loader/../src/utils/isObject.js","webpack://vue3-sfc-loader/../src/utils/getLocator.js","webpack://vue3-sfc-loader/../src/utils/Mappings.js","webpack://vue3-sfc-loader/../src/MagicString.js","webpack://vue3-sfc-loader/../src/Bundle.js","webpack://vue3-sfc-loader/../src/index-legacy.js","webpack://vue3-sfc-loader/./node_modules/lodash.camelcase/index.js","webpack://vue3-sfc-loader/./node_modules/generic-names/index.js","webpack://vue3-sfc-loader/./node_modules/postcss-modules/build/css-loader-core/parser.js","webpack://vue3-sfc-loader/./node_modules/string-hash/index.js","webpack://vue3-sfc-loader/./node_modules/postcss-modules-local-by-default/src/index.js","webpack://vue3-sfc-loader/./node_modules/postcss-value-parser/lib/index.js","webpack://vue3-sfc-loader/./node_modules/postcss-value-parser/lib/parse.js","webpack://vue3-sfc-loader/./node_modules/postcss-value-parser/lib/walk.js","webpack://vue3-sfc-loader/./node_modules/postcss-value-parser/lib/stringify.js","webpack://vue3-sfc-loader/./node_modules/postcss-value-parser/lib/unit.js","webpack://vue3-sfc-loader/./node_modules/icss-utils/src/index.js","webpack://vue3-sfc-loader/./node_modules/icss-utils/src/replaceSymbols.js","webpack://vue3-sfc-loader/./node_modules/icss-utils/src/extractICSS.js","webpack://vue3-sfc-loader/./node_modules/icss-utils/src/createICSSRules.js","webpack://vue3-sfc-loader/./node_modules/postcss-modules-extract-imports/src/index.js","webpack://vue3-sfc-loader/./node_modules/postcss-modules-extract-imports/src/topologicalSort.js","webpack://vue3-sfc-loader/./node_modules/@babel/plugin-proposal-class-static-block/lib/index.js","webpack://vue3-sfc-loader/./node_modules/@babel/helper-annotate-as-pure/lib/index.js","webpack://vue3-sfc-loader/./node_modules/@babel/plugin-proposal-private-property-in-object/lib/index.js","webpack://vue3-sfc-loader/./node_modules/@babel/plugin-proposal-class-properties/lib/index.js","webpack://vue3-sfc-loader/./node_modules/@babel/plugin-proposal-private-methods/lib/index.js","webpack://vue3-sfc-loader/./node_modules/@babel/plugin-proposal-logical-assignment-operators/lib/index.js","webpack://vue3-sfc-loader/./node_modules/@babel/plugin-proposal-nullish-coalescing-operator/lib/index.js","webpack://vue3-sfc-loader/../src/util.js","webpack://vue3-sfc-loader/../src/transform.js","webpack://vue3-sfc-loader/../src/index.js","webpack://vue3-sfc-loader/./node_modules/@babel/plugin-proposal-export-namespace-from/lib/index.js","webpack://vue3-sfc-loader/./src/bootstrap.js","webpack://vue3-sfc-loader/./node_modules/core-js/modules/es.typed-array.sort.js","webpack://vue3-sfc-loader/./node_modules/core-js/modules/web.immediate.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/object-property-is-enumerable.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/object-get-own-property-names.js","webpack://vue3-sfc-loader/./node_modules/core-js/internals/object-get-own-property-symbols.js","webpack://vue3-sfc-loader/./src/createVue3SFCModule.ts","webpack://vue3-sfc-loader/./src/tools.ts","webpack://vue3-sfc-loader/./src/index.ts","webpack://vue3-sfc-loader/./node_modules/@babel/traverse/lib/context.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/validators/react/isReactComponent.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/validators/react/isCompatTag.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/builders/react/buildChildren.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/utils/react/cleanJSXElementLiteralChild.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/builders/builder.js","webpack://vue3-sfc-loader/./node_modules/@babel/helper-validator-identifier/lib/identifier.js","webpack://vue3-sfc-loader/./node_modules/@babel/helper-validator-identifier/lib/keyword.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/definitions/flow.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/definitions/jsx.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/definitions/misc.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/definitions/experimental.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/definitions/typescript.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/asserts/assertNode.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/asserts/generated/index.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/builders/flow/createTypeAnnotationBasedOnTypeof.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/builders/flow/createFlowUnionType.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/builders/typescript/createTSUnionType.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/modifications/typescript/removeTypeDuplicates.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/builders/generated/uppercase.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/clone/clone.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/clone/cloneDeep.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/clone/cloneDeepWithoutLoc.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/clone/cloneWithoutLoc.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/comments/addComment.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/comments/removeComments.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/constants/generated/index.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/converters/ensureBlock.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/converters/toBindingIdentifierName.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/converters/toComputedKey.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/converters/toExpression.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/converters/toKeyAlias.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/converters/toSequenceExpression.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/converters/gatherSequenceExpressions.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/converters/toStatement.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/converters/valueToNode.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/modifications/appendToMemberExpression.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/modifications/inherits.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/modifications/prependToMemberExpression.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/retrievers/getOuterBindingIdentifiers.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/traverse/traverse.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/validators/isBinding.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/validators/isBlockScoped.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/validators/isImmutable.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/validators/isNodesEquivalent.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/validators/isReferenced.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/validators/isScope.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/validators/isSpecifierDefault.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/validators/isValidES3Identifier.js","webpack://vue3-sfc-loader/./node_modules/@babel/types/lib/validators/isVar.js","webpack://vue3-sfc-loader/./node_modules/@babel/traverse/lib/scope/lib/renamer.js","webpack://vue3-sfc-loader/./node_modules/globals/index.js","webpack://vue3-sfc-loader/./node_modules/@babel/generator/lib/source-map.js","webpack://vue3-sfc-loader/./node_modules/@babel/generator/lib/printer.js","webpack://vue3-sfc-loader/./node_modules/@babel/generator/lib/buffer.js","webpack://vue3-sfc-loader/./node_modules/@babel/generator/lib/node/whitespace.js","webpack://vue3-sfc-loader/./node_modules/@babel/generator/lib/node/parentheses.js","webpack://vue3-sfc-loader/./node_modules/@babel/generator/lib/generators/template-literals.js","webpack://vue3-sfc-loader/./node_modules/@babel/generator/lib/generators/expressions.js","webpack://vue3-sfc-loader/./node_modules/@babel/generator/lib/generators/statements.js","webpack://vue3-sfc-loader/./node_modules/@babel/generator/lib/generators/classes.js","webpack://vue3-sfc-loader/./node_modules/@babel/generator/lib/generators/methods.js","webpack://vue3-sfc-loader/./node_modules/base64-js/index.js","webpack://vue3-sfc-loader/./node_modules/ieee754/index.js","webpack://vue3-sfc-loader/./node_modules/@babel/generator/lib/generators/flow.js","webpack://vue3-sfc-loader/./node_modules/@babel/generator/lib/generators/base.js","webpack://vue3-sfc-loader/./node_modules/@babel/generator/lib/generators/jsx.js","webpack://vue3-sfc-loader/./node_modules/@babel/generator/lib/generators/typescript.js","webpack://vue3-sfc-loader/./node_modules/@babel/traverse/lib/path/ancestry.js","webpack://vue3-sfc-loader/./node_modules/@babel/traverse/lib/path/inference/index.js","webpack://vue3-sfc-loader/./node_modules/@babel/traverse/lib/path/inference/inferers.js","webpack://vue3-sfc-loader/./node_modules/@babel/traverse/lib/path/inference/inferer-reference.js","webpack://vue3-sfc-loader/./node_modules/@babel/traverse/lib/path/replacement.js","webpack://vue3-sfc-loader/./build/noopBabelHighlight.mjs","webpack://vue3-sfc-loader/./node_modules/@babel/helper-hoist-variables/lib/index.js","webpack://vue3-sfc-loader/./node_modules/@babel/traverse/lib/path/evaluation.js","webpack://vue3-sfc-loader/./node_modules/@babel/traverse/lib/path/conversion.js","webpack://vue3-sfc-loader/./node_modules/@babel/helper-get-function-arity/lib/index.js","webpack://vue3-sfc-loader/./node_modules/@babel/template/lib/formatters.js","webpack://vue3-sfc-loader/./node_modules/@babel/template/lib/builder.js","webpack://vue3-sfc-loader/./node_modules/@babel/template/lib/string.js","webpack://vue3-sfc-loader/./node_modules/@babel/template/lib/literal.js","webpack://vue3-sfc-loader/./node_modules/@babel/traverse/lib/path/introspection.js","webpack://vue3-sfc-loader/./node_modules/@babel/traverse/lib/path/context.js","webpack://vue3-sfc-loader/./node_modules/@babel/traverse/lib/path/removal.js","webpack://vue3-sfc-loader/./node_modules/@babel/traverse/lib/path/lib/removal-hooks.js","webpack://vue3-sfc-loader/./node_modules/@babel/traverse/lib/path/modification.js","webpack://vue3-sfc-loader/./node_modules/@babel/traverse/lib/path/lib/hoister.js","webpack://vue3-sfc-loader/./node_modules/@babel/traverse/lib/path/family.js","webpack://vue3-sfc-loader/./node_modules/@babel/traverse/lib/path/comments.js","webpack://vue3-sfc-loader/./node_modules/@babel/traverse/lib/visitors.js","webpack://vue3-sfc-loader/./node_modules/@babel/traverse/lib/hub.js","webpack://vue3-sfc-loader/./node_modules/@babel/helpers/lib/helpers.js","webpack://vue3-sfc-loader/./node_modules/@babel/helpers/lib/helpers-generated.js","webpack://vue3-sfc-loader/./node_modules/@babel/helper-module-imports/lib/import-injector.js","webpack://vue3-sfc-loader/./node_modules/@babel/helper-module-imports/lib/import-builder.js","webpack://vue3-sfc-loader/./node_modules/@babel/helper-module-transforms/lib/rewrite-this.js","webpack://vue3-sfc-loader/./node_modules/@babel/helper-module-transforms/lib/rewrite-live-references.js","webpack://vue3-sfc-loader/./node_modules/@babel/helper-module-transforms/lib/normalize-and-load-metadata.js","webpack://vue3-sfc-loader/./node_modules/@babel/helper-module-transforms/lib/get-module-name.js","webpack://vue3-sfc-loader/./node_modules/@babel/core/lib/tools/build-external-helpers.js","webpack://vue3-sfc-loader/./node_modules/@babel/core/lib/config/full.js","webpack://vue3-sfc-loader/./node_modules/caniuse-lite/dist/unpacker/agents.js","webpack://vue3-sfc-loader/./node_modules/caniuse-lite/dist/unpacker/browsers.js","webpack://vue3-sfc-loader/./node_modules/caniuse-lite/dist/unpacker/browserVersions.js","webpack://vue3-sfc-loader/./node_modules/@babel/helper-validator-option/lib/validator.js","webpack://vue3-sfc-loader/./node_modules/@babel/compat-data/native-modules.js","webpack://vue3-sfc-loader/./node_modules/@babel/helper-compilation-targets/lib/options.js","webpack://vue3-sfc-loader/./node_modules/@babel/helper-compilation-targets/lib/debug.js","webpack://vue3-sfc-loader/./node_modules/@babel/helper-compilation-targets/lib/filter-items.js","webpack://vue3-sfc-loader/./node_modules/@babel/compat-data/plugins.js","webpack://vue3-sfc-loader/./node_modules/@babel/core/lib/config/validation/removed.js","webpack://vue3-sfc-loader/./node_modules/@babel/core/lib/config/pattern-to-regex.js","webpack://vue3-sfc-loader/./node_modules/@babel/core/lib/config/printer.js","webpack://vue3-sfc-loader/./node_modules/@babel/core/lib/config/validation/plugins.js","webpack://vue3-sfc-loader/./node_modules/@babel/core/lib/config/helpers/config-api.js","webpack://vue3-sfc-loader/./node_modules/@babel/core/lib/transform.js","webpack://vue3-sfc-loader/./node_modules/@babel/core/lib/transformation/plugin-pass.js","webpack://vue3-sfc-loader/./node_modules/@babel/core/lib/transformation/block-hoist-plugin.js","webpack://vue3-sfc-loader/./node_modules/@babel/core/lib/transformation/normalize-file.js","webpack://vue3-sfc-loader/./node_modules/@babel/core/lib/parser/util/missing-plugin-helper.js","webpack://vue3-sfc-loader/./node_modules/@babel/core/lib/transformation/util/clone-deep-browser.js","webpack://vue3-sfc-loader/./node_modules/@babel/core/lib/transformation/file/generate.js","webpack://vue3-sfc-loader/./node_modules/@babel/core/lib/transformation/file/merge-map.js","webpack://vue3-sfc-loader/./node_modules/@babel/core/lib/transform-file-browser.js","webpack://vue3-sfc-loader/./node_modules/@babel/core/lib/transform-ast.js","webpack://vue3-sfc-loader/./node_modules/@babel/core/lib/parse.js","webpack://vue3-sfc-loader/./node_modules/@babel/plugin-transform-modules-commonjs/lib/index.js","webpack://vue3-sfc-loader/./node_modules/babel-plugin-dynamic-import-node/utils.js","webpack://vue3-sfc-loader/./node_modules/babel-plugin-dynamic-import-node/lib/utils.js","webpack://vue3-sfc-loader/./node_modules/@vue/compiler-sfc/dist/compiler-sfc.cjs.js","webpack://vue3-sfc-loader/./node_modules/@vue/compiler-dom/index.js","webpack://vue3-sfc-loader/./node_modules/@vue/compiler-core/dist/compiler-core.cjs.prod.js","webpack://vue3-sfc-loader/./node_modules/@vue/shared/dist/shared.cjs.prod.js","webpack://vue3-sfc-loader/./node_modules/url/url.js","webpack://vue3-sfc-loader/./node_modules/querystring/index.js","webpack://vue3-sfc-loader/./node_modules/postcss-selector-parser/dist/tokenize.js","webpack://vue3-sfc-loader/./node_modules/postcss-selector-parser/dist/selectors/constructors.js","webpack://vue3-sfc-loader/./node_modules/postcss-selector-parser/dist/selectors/guards.js","webpack://vue3-sfc-loader/./node_modules/icss-replace-symbols/lib/index.js","webpack://vue3-sfc-loader/./node_modules/postcss-modules/build/css-loader-core/loader.js","webpack://vue3-sfc-loader/./node_modules/postcss-modules/build/css-loader-core|sync","webpack://vue3-sfc-loader/./node_modules/postcss-modules/build/generateScopedName.js","webpack://vue3-sfc-loader/./node_modules/postcss-modules/build/saveJSON.js","webpack://vue3-sfc-loader/./node_modules/postcss-modules/build/behaviours.js","webpack://vue3-sfc-loader/./node_modules/@babel/plugin-syntax-jsx/lib/index.js","webpack://vue3-sfc-loader/./node_modules/@vue/babel-plugin-jsx/node_modules/html-tags/index.js","webpack://vue3-sfc-loader/./node_modules/svg-tags/lib/index.js","webpack://vue3-sfc-loader/./node_modules/@babel/plugin-syntax-class-static-block/lib/index.js","webpack://vue3-sfc-loader/./node_modules/@babel/helper-create-class-features-plugin/lib/fields.js","webpack://vue3-sfc-loader/./node_modules/@babel/helper-create-class-features-plugin/lib/typescript.js","webpack://vue3-sfc-loader/./node_modules/@babel/helper-create-class-features-plugin/lib/misc.js","webpack://vue3-sfc-loader/./node_modules/@babel/helper-create-class-features-plugin/lib/features.js","webpack://vue3-sfc-loader/./node_modules/@babel/plugin-syntax-private-property-in-object/lib/index.js","webpack://vue3-sfc-loader/./node_modules/@babel/plugin-syntax-logical-assignment-operators/lib/index.js","webpack://vue3-sfc-loader/./node_modules/@babel/plugin-syntax-nullish-coalescing-operator/lib/index.js","webpack://vue3-sfc-loader/./node_modules/@babel/plugin-syntax-optional-chaining/lib/index.js","webpack://vue3-sfc-loader/./node_modules/@babel/helper-skip-transparent-expression-wrappers/lib/index.js","webpack://vue3-sfc-loader/./node_modules/@babel/plugin-syntax-export-namespace-from/lib/index.js","webpack://vue3-sfc-loader/webpack/bootstrap","webpack://vue3-sfc-loader/webpack/runtime/compat get default export","webpack://vue3-sfc-loader/webpack/runtime/define property getters","webpack://vue3-sfc-loader/webpack/runtime/global","webpack://vue3-sfc-loader/webpack/runtime/hasOwnProperty shorthand","webpack://vue3-sfc-loader/webpack/runtime/make namespace object","webpack://vue3-sfc-loader/webpack/runtime/node module decorator","webpack://vue3-sfc-loader/webpack/startup"],"names":["root","factory","exports","module","define","amd","self","Object","defineProperty","value","_exportNames","react","assertNode","createTypeAnnotationBasedOnTypeof","createUnionTypeAnnotation","createFlowUnionType","createTSUnionType","cloneNode","clone","cloneDeep","cloneDeepWithoutLoc","cloneWithoutLoc","addComment","addComments","inheritInnerComments","inheritLeadingComments","inheritsComments","inheritTrailingComments","removeComments","ensureBlock","toBindingIdentifierName","toBlock","toComputedKey","toExpression","toIdentifier","toKeyAlias","toSequenceExpression","toStatement","valueToNode","appendToMemberExpression","inherits","prependToMemberExpression","removeProperties","removePropertiesDeep","removeTypeDuplicates","getBindingIdentifiers","getOuterBindingIdentifiers","traverse","traverseFast","shallowEqual","is","isBinding","isBlockScoped","isImmutable","isLet","isNode","isNodesEquivalent","isPlaceholderType","isReferenced","isScope","isSpecifierDefault","isType","isValidES3Identifier","isValidIdentifier","isVar","matchesPattern","validate","buildMatchMemberExpression","enumerable","get","_assertNode","default","_createTypeAnnotationBasedOnTypeof","_createFlowUnionType","_createTSUnionType","_cloneNode","_clone","_cloneDeep","_cloneDeepWithoutLoc","_cloneWithoutLoc","_addComment","_addComments","_inheritInnerComments","_inheritLeadingComments","_inheritsComments","_inheritTrailingComments","_removeComments","_ensureBlock","_toBindingIdentifierName","_toBlock","_toComputedKey","_toExpression","_toIdentifier","_toKeyAlias","_toSequenceExpression","_toStatement","_valueToNode","_appendToMemberExpression","_inherits","_prependToMemberExpression","_removeProperties","_removePropertiesDeep","_removeTypeDuplicates","_getBindingIdentifiers","_getOuterBindingIdentifiers","_traverse","_traverseFast","_shallowEqual","_is","_isBinding","_isBlockScoped","_isImmutable","_isLet","_isNode","_isNodesEquivalent","_isPlaceholderType","_isReferenced","_isScope","_isSpecifierDefault","_isType","_isValidES3Identifier","_isValidIdentifier","_isVar","_matchesPattern","_validate","_buildMatchMemberExpression","_isReactComponent","require","_isCompatTag","_buildChildren","_generated","keys","forEach","key","prototype","hasOwnProperty","call","_generated2","_uppercase","_generated3","_constants","_definitions","_generated4","_generated5","isReactComponent","isCompatTag","buildChildren","isArrayExpression","node","opts","type","isAssignmentExpression","isBinaryExpression","isInterpreterDirective","isDirective","isDirectiveLiteral","isBlockStatement","isBreakStatement","isCallExpression","isCatchClause","isConditionalExpression","isContinueStatement","isDebuggerStatement","isDoWhileStatement","isEmptyStatement","isExpressionStatement","isFile","isForInStatement","isForStatement","isFunctionDeclaration","isFunctionExpression","isIdentifier","isIfStatement","isLabeledStatement","isStringLiteral","isNumericLiteral","isNullLiteral","isBooleanLiteral","isRegExpLiteral","isLogicalExpression","isMemberExpression","isNewExpression","isProgram","isObjectExpression","isObjectMethod","isObjectProperty","isRestElement","isReturnStatement","isSequenceExpression","isParenthesizedExpression","isSwitchCase","isSwitchStatement","isThisExpression","isThrowStatement","isTryStatement","isUnaryExpression","isUpdateExpression","isVariableDeclaration","isVariableDeclarator","isWhileStatement","isWithStatement","isAssignmentPattern","isArrayPattern","isArrowFunctionExpression","isClassBody","isClassExpression","isClassDeclaration","isExportAllDeclaration","isExportDefaultDeclaration","isExportNamedDeclaration","isExportSpecifier","isForOfStatement","isImportDeclaration","isImportDefaultSpecifier","isImportNamespaceSpecifier","isImportSpecifier","isMetaProperty","isClassMethod","isObjectPattern","isSpreadElement","isSuper","isTaggedTemplateExpression","isTemplateElement","isTemplateLiteral","isYieldExpression","isAwaitExpression","isImport","isBigIntLiteral","isExportNamespaceSpecifier","isOptionalMemberExpression","isOptionalCallExpression","isAnyTypeAnnotation","isArrayTypeAnnotation","isBooleanTypeAnnotation","isBooleanLiteralTypeAnnotation","isNullLiteralTypeAnnotation","isClassImplements","isDeclareClass","isDeclareFunction","isDeclareInterface","isDeclareModule","isDeclareModuleExports","isDeclareTypeAlias","isDeclareOpaqueType","isDeclareVariable","isDeclareExportDeclaration","isDeclareExportAllDeclaration","isDeclaredPredicate","isExistsTypeAnnotation","isFunctionTypeAnnotation","isFunctionTypeParam","isGenericTypeAnnotation","isInferredPredicate","isInterfaceExtends","isInterfaceDeclaration","isInterfaceTypeAnnotation","isIntersectionTypeAnnotation","isMixedTypeAnnotation","isEmptyTypeAnnotation","isNullableTypeAnnotation","isNumberLiteralTypeAnnotation","isNumberTypeAnnotation","isObjectTypeAnnotation","isObjectTypeInternalSlot","isObjectTypeCallProperty","isObjectTypeIndexer","isObjectTypeProperty","isObjectTypeSpreadProperty","isOpaqueType","isQualifiedTypeIdentifier","isStringLiteralTypeAnnotation","isStringTypeAnnotation","isSymbolTypeAnnotation","isThisTypeAnnotation","isTupleTypeAnnotation","isTypeofTypeAnnotation","isTypeAlias","isTypeAnnotation","isTypeCastExpression","isTypeParameter","isTypeParameterDeclaration","isTypeParameterInstantiation","isUnionTypeAnnotation","isVariance","isVoidTypeAnnotation","isEnumDeclaration","isEnumBooleanBody","isEnumNumberBody","isEnumStringBody","isEnumSymbolBody","isEnumBooleanMember","isEnumNumberMember","isEnumStringMember","isEnumDefaultedMember","isIndexedAccessType","isOptionalIndexedAccessType","isJSXAttribute","isJSXClosingElement","isJSXElement","isJSXEmptyExpression","isJSXExpressionContainer","isJSXSpreadChild","isJSXIdentifier","isJSXMemberExpression","isJSXNamespacedName","isJSXOpeningElement","isJSXSpreadAttribute","isJSXText","isJSXFragment","isJSXOpeningFragment","isJSXClosingFragment","isNoop","isPlaceholder","isV8IntrinsicIdentifier","isArgumentPlaceholder","isBindExpression","isClassProperty","isPipelineTopicExpression","isPipelineBareFunction","isPipelinePrimaryTopicReference","isClassPrivateProperty","isClassPrivateMethod","isImportAttribute","isDecorator","isDoExpression","isExportDefaultSpecifier","isPrivateName","isRecordExpression","isTupleExpression","isDecimalLiteral","isStaticBlock","isModuleExpression","isTSParameterProperty","isTSDeclareFunction","isTSDeclareMethod","isTSQualifiedName","isTSCallSignatureDeclaration","isTSConstructSignatureDeclaration","isTSPropertySignature","isTSMethodSignature","isTSIndexSignature","isTSAnyKeyword","isTSBooleanKeyword","isTSBigIntKeyword","isTSIntrinsicKeyword","isTSNeverKeyword","isTSNullKeyword","isTSNumberKeyword","isTSObjectKeyword","isTSStringKeyword","isTSSymbolKeyword","isTSUndefinedKeyword","isTSUnknownKeyword","isTSVoidKeyword","isTSThisType","isTSFunctionType","isTSConstructorType","isTSTypeReference","isTSTypePredicate","isTSTypeQuery","isTSTypeLiteral","isTSArrayType","isTSTupleType","isTSOptionalType","isTSRestType","isTSNamedTupleMember","isTSUnionType","isTSIntersectionType","isTSConditionalType","isTSInferType","isTSParenthesizedType","isTSTypeOperator","isTSIndexedAccessType","isTSMappedType","isTSLiteralType","isTSExpressionWithTypeArguments","isTSInterfaceDeclaration","isTSInterfaceBody","isTSTypeAliasDeclaration","isTSAsExpression","isTSTypeAssertion","isTSEnumDeclaration","isTSEnumMember","isTSModuleDeclaration","isTSModuleBlock","isTSImportType","isTSImportEqualsDeclaration","isTSExternalModuleReference","isTSNonNullExpression","isTSExportAssignment","isTSNamespaceExportDeclaration","isTSTypeAnnotation","isTSTypeParameterInstantiation","isTSTypeParameterDeclaration","isTSTypeParameter","isExpression","nodeType","expectedNode","isBinary","isScopable","isBlockParent","isBlock","isStatement","isTerminatorless","isCompletionStatement","isConditional","isLoop","isWhile","isExpressionWrapper","isFor","isForXStatement","isFunction","isFunctionParent","isPureish","isDeclaration","isPatternLike","isLVal","isTSEntityName","isLiteral","isUserWhitespacable","isMethod","isObjectMember","isProperty","isUnaryLike","isPattern","isClass","isModuleDeclaration","isExportDeclaration","isModuleSpecifier","isFlow","isFlowType","isFlowBaseAnnotation","isFlowDeclaration","isFlowPredicate","isEnumBody","isEnumMember","isJSX","isPrivate","isTSTypeElement","isTSType","isTSBaseType","isNumberLiteral","isRegexLiteral","isRestProperty","isSpreadProperty","check","it","Math","globalThis","window","g","this","Function","debug","MAX_LENGTH","MAX_SAFE_INTEGER","re","t","parseOptions","compareIdentifiers","SemVer","constructor","version","options","loose","includePrerelease","TypeError","length","m","trim","match","LOOSE","FULL","raw","major","minor","patch","prerelease","split","map","id","test","num","build","format","join","toString","compare","other","compareMain","comparePre","i","a","b","undefined","compareBuild","inc","release","identifier","push","isNaN","Error","declare","builder","api","dirname","_clonedApi2","clonedApi","name","apiPolyfills","_clonedApi","copyApiObject","assertVersion","range","Number","isInteger","limit","stackTraceLimit","err","slice","assign","code","throwVersionError","targets","assumption","proto","getPrototypeOf","has","obj","__esModule","UNIVERSAL","ATTRIBUTE","CLASS","COMBINATOR","COMMENT","ID","NESTING","PSEUDO","ROOT","SELECTOR","STRING","TAG","arrayExpression","elements","_builder","arguments","assignmentExpression","operator","left","right","binaryExpression","interpreterDirective","directive","directiveLiteral","blockStatement","body","directives","breakStatement","label","callExpression","callee","_arguments","catchClause","param","conditionalExpression","consequent","alternate","continueStatement","debuggerStatement","doWhileStatement","emptyStatement","expressionStatement","expression","file","program","comments","tokens","forInStatement","forStatement","init","update","functionDeclaration","params","generator","async","functionExpression","ifStatement","labeledStatement","stringLiteral","numericLiteral","nullLiteral","booleanLiteral","regExpLiteral","pattern","flags","logicalExpression","memberExpression","object","property","computed","optional","newExpression","sourceType","interpreter","objectExpression","properties","objectMethod","kind","objectProperty","shorthand","decorators","restElement","argument","returnStatement","sequenceExpression","expressions","parenthesizedExpression","switchCase","switchStatement","discriminant","cases","thisExpression","throwStatement","tryStatement","block","handler","finalizer","unaryExpression","prefix","updateExpression","variableDeclaration","declarations","variableDeclarator","whileStatement","withStatement","assignmentPattern","arrayPattern","arrowFunctionExpression","classBody","classExpression","superClass","classDeclaration","exportAllDeclaration","source","exportDefaultDeclaration","declaration","exportNamedDeclaration","specifiers","exportSpecifier","local","exported","forOfStatement","_await","importDeclaration","importDefaultSpecifier","importNamespaceSpecifier","importSpecifier","imported","metaProperty","meta","classMethod","_static","objectPattern","spreadElement","super","taggedTemplateExpression","tag","quasi","templateElement","tail","templateLiteral","quasis","yieldExpression","delegate","awaitExpression","import","bigIntLiteral","exportNamespaceSpecifier","optionalMemberExpression","optionalCallExpression","anyTypeAnnotation","arrayTypeAnnotation","elementType","booleanTypeAnnotation","booleanLiteralTypeAnnotation","nullLiteralTypeAnnotation","classImplements","typeParameters","declareClass","_extends","declareFunction","declareInterface","declareModule","declareModuleExports","typeAnnotation","declareTypeAlias","declareOpaqueType","supertype","declareVariable","declareExportDeclaration","declareExportAllDeclaration","declaredPredicate","existsTypeAnnotation","functionTypeAnnotation","rest","returnType","functionTypeParam","genericTypeAnnotation","inferredPredicate","interfaceExtends","interfaceDeclaration","interfaceTypeAnnotation","intersectionTypeAnnotation","types","mixedTypeAnnotation","emptyTypeAnnotation","nullableTypeAnnotation","numberLiteralTypeAnnotation","numberTypeAnnotation","objectTypeAnnotation","indexers","callProperties","internalSlots","exact","objectTypeInternalSlot","method","objectTypeCallProperty","objectTypeIndexer","variance","objectTypeProperty","objectTypeSpreadProperty","opaqueType","impltype","qualifiedTypeIdentifier","qualification","stringLiteralTypeAnnotation","stringTypeAnnotation","symbolTypeAnnotation","thisTypeAnnotation","tupleTypeAnnotation","typeofTypeAnnotation","typeAlias","typeCastExpression","typeParameter","bound","_default","typeParameterDeclaration","typeParameterInstantiation","unionTypeAnnotation","voidTypeAnnotation","enumDeclaration","enumBooleanBody","members","enumNumberBody","enumStringBody","enumSymbolBody","enumBooleanMember","enumNumberMember","enumStringMember","enumDefaultedMember","indexedAccessType","objectType","indexType","optionalIndexedAccessType","jSXAttribute","jsxAttribute","jSXClosingElement","jsxClosingElement","jSXElement","jsxElement","openingElement","closingElement","children","selfClosing","jSXEmptyExpression","jsxEmptyExpression","jSXExpressionContainer","jsxExpressionContainer","jSXSpreadChild","jsxSpreadChild","jSXIdentifier","jsxIdentifier","jSXMemberExpression","jsxMemberExpression","jSXNamespacedName","jsxNamespacedName","namespace","jSXOpeningElement","jsxOpeningElement","attributes","jSXSpreadAttribute","jsxSpreadAttribute","jSXText","jsxText","jSXFragment","jsxFragment","openingFragment","closingFragment","jSXOpeningFragment","jsxOpeningFragment","jSXClosingFragment","jsxClosingFragment","noop","placeholder","v8IntrinsicIdentifier","argumentPlaceholder","bindExpression","classProperty","pipelineTopicExpression","pipelineBareFunction","pipelinePrimaryTopicReference","classPrivateProperty","classPrivateMethod","importAttribute","decorator","doExpression","exportDefaultSpecifier","privateName","recordExpression","tupleExpression","decimalLiteral","staticBlock","moduleExpression","tSParameterProperty","tsParameterProperty","parameter","tSDeclareFunction","tsDeclareFunction","tSDeclareMethod","tsDeclareMethod","tSQualifiedName","tsQualifiedName","tSCallSignatureDeclaration","tsCallSignatureDeclaration","parameters","tSConstructSignatureDeclaration","tsConstructSignatureDeclaration","tSPropertySignature","tsPropertySignature","initializer","tSMethodSignature","tsMethodSignature","tSIndexSignature","tsIndexSignature","tSAnyKeyword","tsAnyKeyword","tSBooleanKeyword","tsBooleanKeyword","tSBigIntKeyword","tsBigIntKeyword","tSIntrinsicKeyword","tsIntrinsicKeyword","tSNeverKeyword","tsNeverKeyword","tSNullKeyword","tsNullKeyword","tSNumberKeyword","tsNumberKeyword","tSObjectKeyword","tsObjectKeyword","tSStringKeyword","tsStringKeyword","tSSymbolKeyword","tsSymbolKeyword","tSUndefinedKeyword","tsUndefinedKeyword","tSUnknownKeyword","tsUnknownKeyword","tSVoidKeyword","tsVoidKeyword","tSThisType","tsThisType","tSFunctionType","tsFunctionType","tSConstructorType","tsConstructorType","tSTypeReference","tsTypeReference","typeName","tSTypePredicate","tsTypePredicate","parameterName","asserts","tSTypeQuery","tsTypeQuery","exprName","tSTypeLiteral","tsTypeLiteral","tSArrayType","tsArrayType","tSTupleType","tsTupleType","elementTypes","tSOptionalType","tsOptionalType","tSRestType","tsRestType","tSNamedTupleMember","tsNamedTupleMember","tSUnionType","tsUnionType","tSIntersectionType","tsIntersectionType","tSConditionalType","tsConditionalType","checkType","extendsType","trueType","falseType","tSInferType","tsInferType","tSParenthesizedType","tsParenthesizedType","tSTypeOperator","tsTypeOperator","tSIndexedAccessType","tsIndexedAccessType","tSMappedType","tsMappedType","nameType","tSLiteralType","tsLiteralType","literal","tSExpressionWithTypeArguments","tsExpressionWithTypeArguments","tSInterfaceDeclaration","tsInterfaceDeclaration","tSInterfaceBody","tsInterfaceBody","tSTypeAliasDeclaration","tsTypeAliasDeclaration","tSAsExpression","tsAsExpression","tSTypeAssertion","tsTypeAssertion","tSEnumDeclaration","tsEnumDeclaration","tSEnumMember","tsEnumMember","tSModuleDeclaration","tsModuleDeclaration","tSModuleBlock","tsModuleBlock","tSImportType","tsImportType","qualifier","tSImportEqualsDeclaration","tsImportEqualsDeclaration","moduleReference","tSExternalModuleReference","tsExternalModuleReference","tSNonNullExpression","tsNonNullExpression","tSExportAssignment","tsExportAssignment","tSNamespaceExportDeclaration","tsNamespaceExportDeclaration","tSTypeAnnotation","tsTypeAnnotation","tSTypeParameterInstantiation","tsTypeParameterInstantiation","tSTypeParameterDeclaration","tsTypeParameterDeclaration","tSTypeParameter","tsTypeParameter","constraint","numberLiteral","args","regexLiteral","restProperty","spreadProperty","cachedSetTimeout","cachedClearTimeout","process","defaultSetTimout","defaultClearTimeout","runTimeout","fun","setTimeout","e","clearTimeout","currentQueue","queue","draining","queueIndex","cleanUpNextTick","concat","drainQueue","timeout","len","run","marker","runClearTimeout","Item","array","nextTick","Array","apply","title","browser","env","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","binding","cwd","chdir","dir","umask","assertPath","path","JSON","stringify","normalizeStringPosix","allowAboveRoot","res","lastSegmentLength","lastSlash","dots","charCodeAt","lastSlashIndex","lastIndexOf","posix","resolve","resolvedPath","resolvedAbsolute","normalize","isAbsolute","trailingSeparator","joined","arg","relative","from","to","fromStart","fromEnd","fromLen","toStart","toLen","lastCommonSep","fromCode","out","_makeLong","hasRoot","end","matchedSlash","basename","ext","start","extIdx","firstNonSlashEnd","extname","startDot","startPart","preDotState","pathObject","sep","base","_format","parse","ret","delimiter","win32","Plugin","alias","_file","_buildExternalHelpers","_files","resolvePlugin","resolvePreset","_environment","getEnv","_parser","tokTypes","_template","_config","createConfigItem","createConfigItemSync","createConfigItemAsync","loadPartialConfig","loadPartialConfigSync","loadPartialConfigAsync","loadOptions","loadOptionsSync","loadOptionsAsync","_transform","transform","transformSync","transformAsync","_transformFile","transformFile","transformFileSync","transformFileAsync","_transformAst","transformFromAst","transformFromAstSync","transformFromAstAsync","_parse","parseSync","parseAsync","OptionManager","DEFAULT_EXTENSIONS","_types","data","freeze","_path","_scope","_hub","visitors","_context","cache","parent","scope","state","parentPath","noScope","VISITOR_KEYS","explode","hasDenylistedType","stop","verify","cheap","enter","skipKeys","context","visit","clearNode","delete","tree","hasType","denylistTypes","includes","denylist","_utils","ALIAS_KEYS","FLIPPED_ALIAS_KEYS","NODE_FIELDS","BUILDER_KEYS","DEPRECATED_KEYS","NODE_PARENT_VALIDATIONS","_placeholders","PLACEHOLDERS","PLACEHOLDERS_ALIAS","PLACEHOLDERS_FLIPPED_ALIAS","TYPES","_toFastProperties","Range","Comparator","set","parseRange","filter","c","first","isNullSet","isAny","comps","memoKey","cached","hr","HYPHENRANGELOOSE","HYPHENRANGE","replace","hyphenReplace","COMPARATORTRIM","comparatorTrimReplace","TILDETRIM","tildeTrimReplace","CARETTRIM","caretTrimReplace","compRe","COMPARATORLOOSE","COMPARATOR","rangeList","comp","parseComparator","replaceGTE0","rangeMap","Map","size","result","values","intersects","some","thisComparators","isSatisfiable","rangeComparators","every","thisComparator","rangeComparator","er","testSet","max","comparators","remainingComparators","testComparator","pop","otherComparator","replaceCarets","replaceTildes","replaceXRanges","replaceStars","isX","toLowerCase","replaceTilde","r","TILDELOOSE","TILDE","_","M","p","pr","replaceCaret","CARETLOOSE","CARET","z","replaceXRange","XRANGELOOSE","XRANGE","gtlt","xM","xm","xp","anyX","STAR","GTE0PRE","GTE0","incPr","$0","fM","fm","fp","fpr","fb","tM","tm","tp","tpr","tb","semver","ANY","allowed","GENSYNC_START","Symbol","for","GENSYNC_SUSPEND","GENSYNC_OPTIONS_ERROR","GENSYNC_RACE_NONEMPTY","assertTypeof","allowUndefined","msg","makeError","buildOperation","arity","sync","setFunctionMetadata","resume","evaluateSync","gen","next","done","assertStart","evaluateAsync","reject","step","didSyncResume","assertSuspend","throwError","throw","fn","nameDesc","getOwnPropertyDescriptor","configurable","lengthDesc","optsOrFn","genFn","errback","fnName","then","newGenerator","wrapGenerator","Promise","cb","val","makeFunctionAPI","all","item","items","count","results","race","_util","_defineProperties","target","props","descriptor","writable","cloned","j","Node","spaces","before","after","Constructor","protoProps","_proto","remove","removeChild","replaceWith","index","insertBefore","at","prev","overrides","appendToPropertyAndEscape","valueEscaped","raws","originalValue","originalEscaped","setPropertyAndEscape","setPropertyWithoutEscape","isAtPosition","line","column","stringifyProperty","valueToString","String","rawSpaceBefore","rawSpaceAfter","rawSpace","ensureObject","exec","error","toObject","hasOwn","__createBinding","create","o","k","k2","__setModuleDefault","v","__importStar","mod","__importDefault","template_1","plugin_syntax_jsx_1","helper_module_imports_1","transform_vue_jsx_1","sugar_fragment_1","JSX_ANNOTATION_REGEX","visitor","Program","fileHasJSX","JSXElement","JSXFragment","hasJSX","importNames","isModule","importMap","addNamed","ensureLiveReference","enableObjectSlots","runtimeIsSlot","isVNodeName","isSlot","generateUidIdentifier","ast","lastImport","insertAfter","sourceName","addNamespace","pragma","comment","jsxMatches","exit","specifiersMap","nodePath","shouldRemove","specifier","loc","unshiftContainer","SHOULD_SKIP","SHOULD_STOP","REMOVED","virtualTypes","_debug","_index","_cache","_generator","NodePath_ancestry","NodePath_inference","NodePath_replacement","NodePath_evaluation","NodePath_conversion","NodePath_introspection","NodePath_context","NodePath_removal","NodePath_modification","NodePath_family","NodePath_comments","NodePath","hub","contexts","_traverseFlags","container","listKey","targetNode","paths","setup","getScope","setData","getData","def","buildCodeFrameError","SyntaxError","buildError","getPathLocation","parts","inList","unshift","message","enabled","typeKey","indexOf","virtualType","checkPath","typeIs","validateType","validateOptional","validateOptionalType","arrayOf","arrayOfType","validateArrayOfType","assertEach","assertOneOf","oneOf","assertNodeType","assertNodeOrValueType","getType","validateChild","oneOfNodeOrValueTypes","assertValueType","assertShape","shape","errors","validateField","shapeOf","assertOptionalChainStart","_current","current","chain","store","fields","getOwnPropertyNames","field","isArray","aliases","validTypeOpts","deprecatedAlias","validFieldKeys","callback","validator","subkey","each","oneOfNodeTypes","fns","chainOf","statements","statement","smart","formatters","bind","Rule","AtRule","isClean","my","Declaration","Comment","cleanSource","nodes","markDirtyUp","proxyOf","Container","child","iterator","getIterator","indexes","walk","addToError","walkDecls","prop","RegExp","walkRules","selector","walkAtRules","walkComments","append","last","markDirty","prepend","reverse","cleanRaws","keepBetween","exist","add","splice","removeAll","replaceValues","decl","fast","condition","sample","text","rebuild","getProxyProcessor","startsWith","toProxy","lastEach","registerParse","dependant","registerRule","registerAtRule","setPrototypeOf","MAX_SAFE_COMPONENT_LENGTH","src","R","createToken","isGlobal","NUMERICIDENTIFIER","NUMERICIDENTIFIERLOOSE","NONNUMERICIDENTIFIER","PRERELEASEIDENTIFIER","PRERELEASEIDENTIFIERLOOSE","BUILDIDENTIFIER","MAINVERSION","PRERELEASE","BUILD","FULLPLAIN","MAINVERSIONLOOSE","PRERELEASELOOSE","LOOSEPLAIN","XRANGEIDENTIFIER","XRANGEIDENTIFIERLOOSE","GTLT","XRANGEPLAIN","XRANGEPLAINLOOSE","COERCE","LONETILDE","LONECARET","NOT_LOCAL_BINDING","BLOCK_SCOPED_SYMBOL","INHERIT_KEYS","UNARY_OPERATORS","STRING_UNARY_OPERATORS","NUMBER_UNARY_OPERATORS","BOOLEAN_UNARY_OPERATORS","ASSIGNMENT_OPERATORS","BINARY_OPERATORS","NUMBER_BINARY_OPERATORS","BOOLEAN_BINARY_OPERATORS","COMPARISON_BINARY_OPERATORS","EQUALITY_BINARY_OPERATORS","BOOLEAN_NUMBER_BINARY_OPERATORS","UPDATE_OPERATORS","LOGICAL_OPERATORS","COMMENT_KEYS","FOR_INIT_KEYS","FLATTENABLE_KEYS","STATEMENT_OR_BLOCK_KEYS","op","force","cloneIfNode","deep","withoutLoc","cloneIfNodeOrArray","newNode","maybeCloneComments","leadingComments","innerComments","trailingComments","extra","beforeExpr","startsExpr","isAssign","TokenType","conf","keyword","rightAssociative","postfix","binop","updateContext","keywords$1","createKeyword","token","createBinop","types$1","bigint","decimal","regexp","string","eof","bracketL","bracketHashL","bracketBarL","bracketR","bracketBarR","braceL","braceBarL","braceHashL","braceR","braceBarR","parenL","parenR","comma","semi","colon","doubleColon","dot","question","questionDot","arrow","template","ellipsis","backQuote","dollarBraceL","hash","eq","slashAssign","incDec","bang","tilde","pipeline","nullishCoalescing","logicalOR","logicalAND","bitwiseOR","bitwiseXOR","bitwiseAND","equality","relational","bitShift","plusMin","modulo","star","slash","exponent","_break","_case","_catch","_continue","_debugger","_do","_else","_finally","_for","_function","_if","_return","_switch","_throw","_try","_var","_const","_while","_with","_new","_this","_super","_class","_export","_import","_null","_true","_false","_in","_instanceof","_typeof","_void","_delete","lineBreak","lineBreakG","isNewLine","skipWhiteSpace","isWhitespace","Position","col","SourceLocation","filename","identifierName","stack","ErrorCodes","SourceTypeModuleError","ErrorMessages","makeErrorTemplates","AccessorIsGenerator","ArgumentsInClass","AsyncFunctionInSingleStatementContext","AwaitBindingIdentifier","AwaitBindingIdentifierInStaticBlock","AwaitExpressionFormalParameter","AwaitNotInAsyncContext","AwaitNotInAsyncFunction","BadGetterArity","BadSetterArity","BadSetterRestParameter","ConstructorClassField","ConstructorClassPrivateField","ConstructorIsAccessor","ConstructorIsAsync","ConstructorIsGenerator","DeclarationMissingInitializer","DecoratorBeforeExport","DecoratorConstructor","DecoratorExportClass","DecoratorSemicolon","DecoratorStaticBlock","DeletePrivateField","DestructureNamedImport","DuplicateConstructor","DuplicateDefaultExport","DuplicateExport","DuplicateProto","DuplicateRegExpFlags","ElementAfterRest","EscapedCharNotAnIdentifier","ExportBindingIsString","ExportDefaultFromAsIdentifier","ForInOfLoopInitializer","ForOfAsync","ForOfLet","GeneratorInSingleStatementContext","IllegalBreakContinue","IllegalLanguageModeDirective","IllegalReturn","ImportBindingIsString","ImportCallArgumentTrailingComma","ImportCallArity","ImportCallNotNewExpression","ImportCallSpreadArgument","InvalidBigIntLiteral","InvalidCodePoint","InvalidDecimal","InvalidDigit","InvalidEscapeSequence","InvalidEscapeSequenceTemplate","InvalidEscapedReservedWord","InvalidIdentifier","InvalidLhs","InvalidLhsBinding","InvalidNumber","InvalidOrMissingExponent","InvalidOrUnexpectedToken","InvalidParenthesizedAssignment","InvalidPrivateFieldResolution","InvalidPropertyBindingPattern","InvalidRecordProperty","InvalidRestAssignmentPattern","LabelRedeclaration","LetInLexicalBinding","LineTerminatorBeforeArrow","MalformedRegExpFlags","MissingClassName","MissingEqInAssignment","MissingSemicolon","MissingUnicodeEscape","MixingCoalesceWithLogical","ModuleAttributeDifferentFromType","ModuleAttributeInvalidValue","ModuleAttributesWithDuplicateKeys","ModuleExportNameHasLoneSurrogate","ModuleExportUndefined","MultipleDefaultsInSwitch","NewlineAfterThrow","NoCatchOrFinally","NumberIdentifier","NumericSeparatorInEscapeSequence","ObsoleteAwaitStar","OptionalChainingNoNew","OptionalChainingNoTemplate","OverrideOnConstructor","ParamDupe","PatternHasAccessor","PatternHasMethod","PipelineBodyNoArrow","PipelineBodySequenceExpression","PipelineHeadSequenceExpression","PipelineTopicUnused","PrimaryTopicNotAllowed","PrimaryTopicRequiresSmartPipeline","PrivateInExpectedIn","PrivateNameRedeclaration","RecordExpressionBarIncorrectEndSyntaxType","RecordExpressionBarIncorrectStartSyntaxType","RecordExpressionHashIncorrectStartSyntaxType","RecordNoProto","RestTrailingComma","SloppyFunction","StaticPrototype","StrictDelete","StrictEvalArguments","StrictEvalArgumentsBinding","StrictFunction","StrictNumericEscape","StrictOctalLiteral","StrictWith","SuperNotAllowed","SuperPrivateField","TrailingDecorator","TupleExpressionBarIncorrectEndSyntaxType","TupleExpressionBarIncorrectStartSyntaxType","TupleExpressionHashIncorrectStartSyntaxType","UnexpectedArgumentPlaceholder","UnexpectedAwaitAfterPipelineBody","UnexpectedDigitAfterHash","UnexpectedImportExport","UnexpectedKeyword","UnexpectedLeadingDecorator","UnexpectedLexicalDeclaration","UnexpectedNewTarget","UnexpectedNumericSeparator","UnexpectedPrivateField","UnexpectedReservedWord","UnexpectedSuper","UnexpectedToken","UnexpectedTokenUnaryExponentiation","UnsupportedBind","UnsupportedDecoratorExport","UnsupportedDefaultExport","UnsupportedImport","UnsupportedMetaProperty","UnsupportedParameterDecorator","UnsupportedPropertyDecorator","UnsupportedSuper","UnterminatedComment","UnterminatedRegExp","UnterminatedString","UnterminatedTemplate","VarRedeclaration","YieldBindingIdentifier","YieldInParameter","ZeroDigitNumericSeparator","SourceTypeModuleErrorMessages","ImportMetaOutsideModule","ImportOutsideModule","messages","templates","reasonCode","TokContext","preserveSpace","brace","nonASCIIidentifierStartChars","nonASCIIidentifierChars","nonASCIIidentifierStart","nonASCIIidentifier","astralIdentifierStartCodes","astralIdentifierCodes","isInAstralSet","pos","isIdentifierStart","fromCharCode","isIdentifierChar","keywords","Set","reservedWordsStrictSet","reservedWordsStrictBindSet","isReservedWord","word","inModule","isStrictReservedWord","isStrictBindOnlyReservedWord","isStrictBindReservedWord","isKeyword","reservedWordLikeSet","Scope","var","lexical","functions","ScopeHandler","raise","scopeStack","undefinedExports","undefinedPrivateNames","currentVarScopeFlags","currentThisScopeFlags","treatFunctionsAsVarInScope","currentScope","createScope","declareName","bindingType","checkRedeclarationInScope","maybeExportDefined","SCOPE_PROGRAM","isRedeclaredInScope","checkLocalExport","topLevelScope","FlowScope","declareFunctions","FlowScopeHandler","reservedTypes","FlowErrors","AmbiguousConditionalArrow","AmbiguousDeclareModuleKind","AssignReservedType","DeclareClassElement","DeclareClassFieldInitializer","DuplicateDeclareModuleExports","EnumBooleanMemberNotInitialized","EnumDuplicateMemberName","EnumInconsistentMemberValues","EnumInvalidExplicitType","EnumInvalidExplicitTypeUnknownSupplied","EnumInvalidMemberInitializerPrimaryType","EnumInvalidMemberInitializerSymbolType","EnumInvalidMemberInitializerUnknownType","EnumInvalidMemberName","EnumNumberMemberNotInitialized","EnumStringMemberInconsistentlyInitailized","GetterMayNotHaveThisParam","ImportTypeShorthandOnlyInPureImport","InexactInsideExact","InexactInsideNonObject","InexactVariance","InvalidNonTypeImportInDeclareModule","MissingTypeParamDefault","NestedDeclareModule","NestedFlowComment","OptionalBindingPattern","SetterMayNotHaveThisParam","SpreadVariance","ThisParamAnnotationRequired","ThisParamBannedInConstructor","ThisParamMayNotBeOptional","ThisParamMustBeFirst","ThisParamNoDefault","TypeBeforeInitializer","TypeCastInPattern","UnexpectedExplicitInexactInObject","UnexpectedReservedType","UnexpectedReservedUnderscore","UnexpectedSpaceBetweenModuloChecks","UnexpectedSpreadType","UnexpectedSubtractionOperand","UnexpectedTokenAfterTypeParameter","UnexpectedTypeParameterBeforeAsyncArrowFunction","UnsupportedDeclareExportKind","UnsupportedStatementInDeclareModule","UnterminatedFlowComment","hasTypeImportKind","importKind","isMaybeDefaultImport","exportSuggestions","const","let","interface","FLOW_PRAGMA_REGEX","entities","quot","amp","apos","lt","gt","nbsp","iexcl","cent","pound","curren","yen","brvbar","sect","uml","copy","ordf","laquo","not","shy","reg","macr","deg","plusmn","sup2","sup3","acute","micro","para","middot","cedil","sup1","ordm","raquo","frac14","frac12","frac34","iquest","Agrave","Aacute","Acirc","Atilde","Auml","Aring","AElig","Ccedil","Egrave","Eacute","Ecirc","Euml","Igrave","Iacute","Icirc","Iuml","ETH","Ntilde","Ograve","Oacute","Ocirc","Otilde","Ouml","times","Oslash","Ugrave","Uacute","Ucirc","Uuml","Yacute","THORN","szlig","agrave","aacute","acirc","atilde","auml","aring","aelig","ccedil","egrave","eacute","ecirc","euml","igrave","iacute","icirc","iuml","eth","ntilde","ograve","oacute","ocirc","otilde","ouml","divide","oslash","ugrave","uacute","ucirc","uuml","yacute","thorn","yuml","OElig","oelig","Scaron","scaron","Yuml","fnof","circ","Alpha","Beta","Gamma","Delta","Epsilon","Zeta","Eta","Theta","Iota","Kappa","Lambda","Mu","Nu","Xi","Omicron","Pi","Rho","Sigma","Tau","Upsilon","Phi","Chi","Psi","Omega","alpha","beta","gamma","delta","epsilon","zeta","eta","theta","iota","kappa","lambda","mu","nu","xi","omicron","pi","rho","sigmaf","sigma","tau","upsilon","phi","chi","psi","omega","thetasym","upsih","piv","ensp","emsp","thinsp","zwnj","zwj","lrm","rlm","ndash","mdash","lsquo","rsquo","sbquo","ldquo","rdquo","bdquo","dagger","Dagger","bull","hellip","permil","prime","Prime","lsaquo","rsaquo","oline","frasl","euro","image","weierp","real","trade","alefsym","larr","uarr","rarr","darr","harr","crarr","lArr","uArr","rArr","dArr","hArr","forall","part","empty","nabla","isin","notin","ni","prod","sum","minus","lowast","radic","infin","ang","and","or","cap","cup","int","there4","sim","cong","asymp","ne","equiv","le","ge","sub","sup","nsub","sube","supe","oplus","otimes","perp","sdot","lceil","rceil","lfloor","rfloor","lang","rang","loz","spades","clubs","hearts","diams","State","strict","curLine","startLoc","endLoc","potentialArrowAt","noArrowAt","noArrowParamsConversionAt","maybeInArrowParameters","inPipeline","inType","noAnonFunctionType","inPropertyName","hasFlowComment","isAmbientContext","inAbstractClass","topicContext","maxNumOfResolvableTopics","maxTopicIndex","soloAwait","inFSharpPipelineDirectBody","labels","decoratorStack","commentStack","commentPreviousNode","lineStart","lastTokEndLoc","lastTokStartLoc","lastTokStart","lastTokEnd","exprAllowed","containsEsc","strictErrors","tokensLength","strictMode","startLine","curPosition","skipArrays","HEX_NUMBER","DECIMAL_NUMBER","JsxErrors","AttributeIsEmpty","MissingClosingTagElement","MissingClosingTagFragment","UnexpectedSequenceExpression","UnsupportedJsxValue","UnterminatedJsxContent","UnwrappedAdjacentJSXElements","isFragment","getQualifiedJSXName","j_oTag","j_cTag","j_expr","jsxName","jsxTagStart","jsxTagEnd","TypeScriptScope","enums","constEnums","classes","exportOnlyBindings","TypeScriptScopeHandler","ProductionParameterHandler","stacks","currentFlags","functionFlags","isAsync","isGenerator","nonNull","x","assert","TSErrors","AbstractMethodHasImplementation","AccesorCannotDeclareThisParameter","AccesorCannotHaveTypeParameters","ClassMethodHasDeclare","ClassMethodHasReadonly","ConstructorHasTypeParameters","DeclareAccessor","DeclareClassFieldHasInitializer","DeclareFunctionHasImplementation","DuplicateAccessibilityModifier","DuplicateModifier","EmptyHeritageClauseType","EmptyTypeArguments","EmptyTypeParameters","ExpectedAmbientAfterExportDeclare","ImportAliasHasImportType","IncompatibleModifiers","IndexSignatureHasAbstract","IndexSignatureHasAccessibility","IndexSignatureHasDeclare","IndexSignatureHasOverride","IndexSignatureHasStatic","InvalidModifierOnTypeMember","InvalidModifiersOrder","InvalidTupleMemberLabel","MixedLabeledAndUnlabeledElements","NonAbstractClassHasAbstractMethod","NonClassMethodPropertyHasAbstractModifer","OptionalTypeBeforeRequired","OverrideNotInSubClass","PatternIsOptional","PrivateElementHasAbstract","PrivateElementHasAccessibility","ReadonlyForMethodSignature","SetAccesorCannotHaveOptionalParameter","SetAccesorCannotHaveRestParameter","SetAccesorCannotHaveReturnType","StaticBlockCannotHaveModifier","TypeAnnotationAfterAssign","TypeImportCannotSpecifyDefaultAndNamed","UnexpectedParameterModifier","UnexpectedReadonly","UnexpectedTypeAnnotation","UnexpectedTypeCastInParameter","UnsupportedImportTypeArgument","UnsupportedParameterPropertyKind","UnsupportedSignatureParameterKind","tsIsAccessModifier","modifier","PlaceHolderErrors","ClassNameIsRequired","hasPlugin","plugins","plugin","getPluginOption","option","find","PIPELINE_PROPOSALS","RECORD_AND_TUPLE_SYNTAX_TYPES","mixinPlugins","estree","parseRegExpLiteral","regex","estreeParseLiteral","parseBigIntLiteral","bigInt","BigInt","_unused","parseDecimalLiteral","parseLiteral","parseStringLiteral","parseNumericLiteral","parseNullLiteral","parseBooleanLiteral","directiveToStmt","stmt","startNodeAt","expressionValue","finishNodeAt","initFunction","checkDeclaration","getObjectOrClassMethodParams","isValidDirective","_stmt$expression$extr","parenthesized","stmtToDirective","addExtra","parseBlockBody","directiveStatements","d","pushClassMethod","isConstructor","allowsDirectSuper","parseMethod","parseMaybePrivateName","convertPrivateNameToPrivateIdentifier","getPrivateNameSV","parseFunctionBody","allowExpression","allowDirectSuper","inClassScope","funcNode","startNode","finishNode","parseClassProperty","propertyNode","parseClassPrivateProperty","parseObjectMethod","isAccessor","parseObjectProperty","startPos","refExpressionErrors","toAssignable","isLHS","toAssignableObjectExpressionProp","finishCallExpression","_node$arguments$","toReferencedArguments","parseExport","parseSubscript","noCalls","optionalChainMember","substring","startNodeAtNode","hasPropertyAsPrivateName","isOptionalChain","jsx","jsxReadToken","chunkStart","ch","input","finishToken","getTokenFromCode","jsxReadEntity","jsxReadNewLine","normalizeCRLF","jsxReadString","quote","entity","str","substr","fromCodePoint","parseInt","jsxReadWord","jsxParseIdentifier","unexpected","jsxParseNamespacedName","eat","jsxParseElementName","jsxParseAttributeValue","jsxParseExpressionContainer","parseExprAtom","jsxParseEmptyExpression","jsxParseSpreadChild","parseExpression","expect","jsxParseAttribute","parseMaybeAssignAllowIn","jsxParseOpeningElementAt","jsxParseOpeningElementAfterName","jsxParseClosingElementAt","jsxParseElementAt","contents","isRelational","jsxParseElement","createLookaheadState","lookaheadState","curContext","prevType","flow","flowPragma","getScopeHandler","shouldParseTypes","shouldParseEnums","matches","flowParseTypeInitialiser","tok","oldInType","flowParseType","flowParsePredicate","moduloPos","expectContextual","flowParseTypeAndPredicateInitialiser","predicate","flowParseDeclareClass","flowParseInterfaceish","flowParseDeclareFunction","parseIdentifier","typeNode","typeContainer","flowParseTypeParameterDeclaration","tmp","flowParseFunctionTypeParams","resetEndLocation","semicolon","BIND_FLAGS_FLOW_DECLARE_FN","flowParseDeclare","insideModule","flowParseDeclareVariable","eatContextual","flowParseDeclareModuleExports","flowParseDeclareModule","isContextual","flowParseDeclareTypeAlias","flowParseDeclareOpaqueType","flowParseDeclareInterface","flowParseDeclareExportDeclaration","flowParseTypeAnnotatableIdentifier","BIND_KIND_VALUE","bodyNode","parseImport","hasModuleExport","bodyElement","isEsModuleType","suggestion","exportKind","flowParseTypeAnnotation","flowParseTypeAlias","flowParseOpaqueType","flowParseRestrictedIdentifier","extends","implements","mixins","flowParseInterfaceExtends","flowParseObjectType","allowStatic","allowExact","allowSpread","allowProto","allowInexact","flowParseQualifiedTypeIdentifier","flowParseTypeParameterInstantiation","flowParseInterface","checkNotUnderscore","checkReservedType","liberal","flowParseTypeParameter","requireDefault","nodeStart","flowParseVariance","ident","defaultRequired","expectRelational","oldNoAnonFunctionType","flowParseTypeParameterInstantiationCallOrNew","flowParseTypeOrImplicitInstantiation","flowParseInterfaceType","flowParseObjectPropertyKey","flowParseObjectTypeIndexer","isStatic","static","lookahead","flowParseObjectTypeInternalSlot","flowParseObjectTypeMethodish","flowParseFunctionTypeParam","flowParseObjectTypeCallProperty","valueNode","endDelim","inexact","protoStart","inexactStart","propOrInexact","flowParseObjectTypeProperty","flowObjectTypeSemicolon","flowCheckGetterSetterParams","paramCount","node2","flowParseGenericType","flowParseTypeofType","flowParsePrimaryType","flowParseTupleType","lh","isThis","reinterpretTypeAsFunctionTypeParam","flowIdentToTypeAnnotation","isGroupedType","parseLiteralAtNode","createIdentifier","flowParsePostfixType","seenOptionalIndexedAccess","canInsertSemicolon","flowParsePrefixType","flowParseAnonFunctionWithoutParens","flowParseIntersectionType","flowParseUnionType","allowPrimitiveOverride","typeCastToParameter","allowExpressionBody","forwardNoArrowParamsConversionAt","parseFunctionBodyAndFinish","parseStatement","topLevel","flowParseEnumDeclaration","parseExpressionStatement","expr","shouldParseExportDeclaration","parseExportDefaultExpression","parseConditional","tryParse","failState","setOptionalParametersError","originalNoArrowAt","failed","tryParseConditionalConsequent","valid","invalid","getArrowLikeExpressions","parseMaybeAssign","disallowInvalid","arrows","finishArrowValidation","list","list1","list2","partition","isAssignable","_node$extra","toAssignableList","trailingComma","SCOPE_FUNCTION","checkParams","parseParenItem","typeCastNode","assertModuleNodeAllowed","parseExportDeclaration","declarationNode","parseExportSpecifiers","parseExportFrom","eatExportStar","maybeParseExportNamespaceSpecifier","hasNamespace","parseClassId","optionalId","parseClassMember","member","parseClassMemberFromModifier","isIterator","readIterator","readWord1","fullWord","finishOp","isIteratorStart","element","exprList","trailingCommaPos","toReferencedList","isParenthesizedExpr","_expr$extra","parseArrayLike","close","canBePattern","isTuple","checkLVal","isNonstaticConstructor","isThisParam","pushClassPrivateMethod","parseClassSuper","superTypeParameters","implemented","checkGetterSetterParams","parsePropertyName","isPrivateNameAllowed","parseObjPropValue","parseAssignableListItemTypes","parseMaybeDefault","shouldParseDefaultImport","parseImportSpecifierLocal","contextDescription","maybeParseDefaultImportSpecifier","parseImportSpecifier","firstIdentIsString","firstIdent","parseModuleExportName","specifierTypeKind","isLookaheadContextual","as_ident","__clone","nodeIsTypeImport","specifierIsTypeImport","checkReservedWord","parseBindingAtom","parseFunctionParams","allowModifiers","parseVarId","parseAsyncArrowFromCallExpression","shouldParseAsyncArrow","afterLeftParse","_jsx","_jsx2","_jsx3","abort","_arrowExpression$extr","arrowExpression","resetStartLocationFromNode","maybeUnwrapTypeCastExpression","aborted","thrown","parseArrow","shouldParseArrow","setArrowFunctionParameters","allowDuplicates","isArrowFunction","parseParenAndDistinguishExpression","canBeArrow","parseSubscripts","parseCallExpressionArguments","parseAsyncArrowWithTypeParameters","subscriptState","isLookaheadToken_lt","typeArguments","parseNewArguments","targs","parseArrowExpression","readToken_mult_modulo","nextToken","readToken_pipe_amp","parseTopLevel","fileNode","skipBlockComment","skipFlowComment","hasFlowCommentCompletion","shiftToFirstNonWhiteSpace","ch2","ch3","flowEnumErrorBooleanMemberNotInitialized","enumName","memberName","flowEnumErrorInvalidMemberName","toUpperCase","flowEnumErrorDuplicateMemberName","flowEnumErrorInconsistentMemberValues","flowEnumErrorInvalidExplicitType","suppliedType","flowEnumErrorInvalidMemberInitializer","explicitType","flowEnumErrorNumberMemberNotInitialized","flowEnumErrorStringMemberInconsistentlyInitailized","flowEnumMemberInit","endOfInit","flowEnumMemberRaw","flowEnumCheckExplicitTypeMismatch","expectedType","flowEnumMembers","seenNames","booleanMembers","numberMembers","stringMembers","defaultedMembers","hasUnknownMembers","memberNode","flowEnumStringMembers","initializedMembers","flowEnumParseExplicitType","flowEnumBody","nameLoc","boolsLen","numsLen","strsLen","defaultedLen","nextTokenStart","afterNext","typescript","tsIsIdentifier","tsTokenCanFollowModifier","isLiteralPropertyName","hasPrecedingLineBreak","tsNextTokenCanFollowModifier","tsParseModifier","allowedModifiers","tsTryParse","tsParseModifiers","modified","disallowedModifiers","errorTemplate","enforceOrder","incompatible","mod1","mod2","accessibility","tsIsListTerminator","tsParseList","parseElement","tsParseDelimitedList","tsParseDelimitedListWorker","expectSuccess","tsParseBracketedList","bracket","skipFirstToken","tsParseImportType","tsParseEntityName","tsParseTypeArguments","allowReservedWords","tsParseTypeReference","tsParseThisTypePredicate","lhs","tsParseTypeAnnotation","tsParseThisTypeNode","tsParseTypeQuery","tsParseTypeParameter","parseIdentifierName","tsEatThenParseType","tsTryParseTypeParameters","tsParseTypeParameters","tsTryNextParseConstantContext","tsFillSignature","returnToken","signature","returnTokenRequired","tsParseBindingListForSignature","tsParseTypeOrTypePredicateAnnotation","parseBindingList","tsParseTypeMemberSemicolon","isLineTerminator","tsParseSignatureMember","tsIsUnambiguouslyIndexSignature","tsTryParseIndexSignature","tsLookAhead","tsTryParseTypeAnnotation","tsParsePropertyOrMethodSignature","readonly","nodeAny","firstParameter","tsParseTypeMember","tsParseTypeLiteral","tsParseObjectTypeMembers","tsIsStartOfMappedType","tsParseMappedTypeParameter","tsExpectThenParseType","tsParseMappedType","tsParseType","tsTryParseType","tsParseTupleType","tsParseTupleElementType","seenOptionalElement","labeledElements","elementNode","_labeledElements","isLabeled","labeledNode","optionalTypeNode","restNode","tsParseParenthesizedType","tsParseFunctionOrConstructorType","abstract","tsParseLiteralTypeNode","tsParseTemplateLiteralType","parseTemplate","parseTemplateSubstitution","tsParseThisTypeOrThisTypePredicate","thisKeyword","tsParseNonArrayType","keywordTypeFromName","lookaheadCharCode","parseMaybeUnary","tsParseArrayTypeOrHigher","tsParseTypeOperator","tsParseTypeOperatorOrHigher","tsCheckTypeAnnotationForReadOnly","tsParseInferType","kw","tsParseUnionOrIntersectionType","parseConstituentType","hasLeadingOperator","tsParseIntersectionTypeOrHigher","tsParseUnionTypeOrHigher","tsIsStartOfFunctionType","tsIsUnambiguouslyStartOfFunctionType","tsSkipParameterStart","braceStackCounter","tsInType","tsParseTypePredicateAsserts","thisTypePredicate","typePredicateVariable","tsParseTypePredicatePrefix","tsTryParseTypeOrTypePredicateAnnotation","eatColon","tsParseNonConditionalType","isAbstractConstructorSignature","tsParseTypeAssertion","tsNextThenParseType","tsParseHeritageClause","originalStart","delimitedList","tsParseExpressionWithTypeArguments","tsParseInterfaceDeclaration","tsParseTypeAliasDeclaration","tsInNoContext","oldContext","tsDoThenParseType","tsParseEnumMember","tsParseEnumDeclaration","isConst","BIND_TS_ENUM","tsParseModuleBlock","parseBlockOrModuleBlockBody","tsParseModuleOrNamespaceDeclaration","nested","inner","prodParam","tsParseAmbientExternalModuleDeclaration","global","tsParseImportEqualsDeclaration","isExport","tsParseModuleReference","tsIsExternalModuleReference","tsParseExternalModuleReference","f","tsTryParseAndCatch","tsTryParseDeclare","nany","starttype","tsInAmbientContext","parseFunctionStatement","parseClass","parseVarStatement","tsParseDeclaration","tsTryParseExportDeclaration","tsParseExpressionStatement","tsCheckLineTerminator","tsParseAbstractDeclaration","hasFollowingLineBreak","tsTryParseGenericAsyncArrowFunction","oldMaybeInArrowParameters","tsIsDeclarationStart","parseAssignableListItem","override","elt","pp","bodilessType","registerFunctionStatementId","tsCheckForInvalidTypeCasts","isInParens","nonNullExpression","atPossibleAsyncArrow","asyncArrowFn","parseTaggedTemplateExpression","parseExprOp","leftStartPos","leftStartLoc","minPrec","reScan_lt_gt","checkKeywords","checkDuplicateExports","ahead","importNode","isAbstractClass","cls","parseStatementContent","parseAccessModifier","tsHasSomeModifiers","modifiers","invalidModifersForStaticBlocks","callParseClassMemberWithIsStatic","parseClassStaticBlock","parseClassMemberWithIsStatic","idx","hadSuperClass","parsePostMemberNameModifiers","methodOrProp","isDeclare","resetStartLocation","parseClassPropertyAnnotation","definite","_typeCast","_typeCast2","_jsx4","_typeCast3","typeCast","_typeParameters","toAssignableParenthesizedExpression","_expr$extra2","parseMaybeDecoratorArguments","checkCommaAfterRest","readToken_lt_gt","canHaveLeadingDecorator","getGetterSetterExpectedParamCount","baseCount","firstParam","parseCatchClauseParam","oldIsAmbientContext","oldInAbstractClass","shouldParseAsAmbientContext","getExpression","v8intrinsic","parseV8Intrinsic","v8IntrinsicStart","placeholders","parsePlaceholder","assertNoSpace","finishPlaceholder","isFinished","verifyBreakContinue","parseBlock","parseFunctionId","takeDecorators","oldStrict","parseClassBody","expectPlugin","isUnparsedContextual","nextTokenStartSince","maybeParseExportDefaultSpecifier","checkExport","maybeParseStarImportSpecifier","parseNamedImportSpecifiers","parseImportSource","mixinPluginNames","defaultOptions","sourceFilename","allowAwaitOutsideFunction","allowReturnOutsideFunction","allowImportExportEverywhere","allowSuperOutsideMethod","allowUndeclaredExports","ranges","createParenthesizedExpressions","errorRecovery","_isDigit","VALID_REGEX_FLAGS","forbiddenNumericSeparatorSiblings","decBinOct","hex","allowedNumericSeparatorSiblings","oct","bin","dec","Token","ClassScope","privateNames","loneAccessors","ClassScopeHandler","oldClassScope","declarePrivateName","classScope","redefined","CLASS_ELEMENT_KIND_GETTER","accessor","oldStatic","newStatic","usePrivateName","ExpressionScope","canBeArrowParameterDeclaration","isCertainlyParameterDeclaration","ArrowHeadParsingScope","recordDeclarationError","clearDeclarationError","iterateErrors","ExpressionScopeHandler","recordParameterInitializerError","recordParenthesizedIdentifierError","recordAsyncArrowParametersError","validateAsPattern","newExpressionScope","ExpressionErrors","shorthandAssign","doubleProto","optionalParameters","parser","unwrapParenthesizedExpression","loopLabel","switchLabel","loneSurrogate","keywordRelationalOperator","Parser","sawUnambiguousESM","ambiguousScriptDifferentAst","adjustCommentsAfterTrailingComma","takeAllComments","lastElement","newTrailingComments","leadingComment","processComment","firstChild","lastChild","lastInStack","firstTrailingCommentIndex","findIndex","getLocationForPosition","offset","lastIndex","getLineInfo","raiseWithData","raiseOverwrite","_raise","errorContext","isLookahead","pushToken","checkKeywordEscapes","old","curr","codePointAtPos","cp","trail","setStrict","clear","skipSpace","readTmplToken","pushComment","skipLineComment","startSkip","loop","readToken_numberSign","readToken_interpreter","nextPos","readToken_dot","readNumber","readToken_slash","width","readToken_caret","readToken_plus_min","readToken_eq_excl","readToken_question","next2","readRadixNumber","readString","readWord","readRegexp","escaped","inClass","content","mods","char","readInt","radix","forceLen","allowNumSeparator","forbiddenSiblings","allowedSiblings","total","Infinity","isBigInt","startsWithDot","isFloat","isDecimal","hasExponent","isOctal","hasLeadingZero","integer","recordStrictModeErrors","underscorePos","parseFloat","readCodePoint","throwOnInvalid","codePos","readHexChar","readEscapedChar","containsInvalid","inTemplate","octalStr","octal","n","firstCode","escStart","identifierCheck","esc","_this$state$type$upda","_this$state$type","nameStart","nameEnd","nextCh","allowAsi","messageOrType","missingPlugin","expectOnePlugin","names","oldState","abortSignal","checkExpressionErrors","andThrow","initializeScopes","oldLabels","oldExportedIdentifiers","exportedIdentifiers","oldInModule","oldScope","oldProdParam","oldExpressionScope","expressionScope","enterInitialScopes","paramFlags","locationNode","_node$extra3","_node$extra2","isLast","raiseRestNotLast","checkToRestConversion","raiseTrailingCommaAfterRest","toReferencedListDeep","parseSpread","refNeedsArrowPos","parseRestBinding","parseObjectLike","closeCharCode","allowEmpty","elts","parseDecorator","_startLoc","_startPos","_left","checkClashes","disallowLetBinding","strictModeChanged","elem","checkProto","isRecord","protoRef","used","shouldExitDescending","disallowIn","disallowInAnd","parseExpressionBase","allowInAnd","parseMaybeAssignDisallowIn","resultError","_resultError$pos","hasYield","parseYield","ownExpressionErrors","parseMaybeConditional","parseExprOps","prec","hasIn","checkPipelineAtInfixOperator","logical","coalesce","hasAwait","parseExprOpRightExpr","nextOp","withTopicPermittingContext","parseSmartPipelineBody","parseExprOpBaseRightExpr","withSoloAwaitPermittingContext","parseFSharpPipelineBody","checkExponentialAfterUnary","sawUnary","isAwait","isAwaitAllowed","parseAwait","parseModuleExpression","isDelete","parseUpdate","isAmbiguousAwait","parseExprSubscripts","maybeAsyncArrow","parseBind","parseCoverCallAndAsyncArrowHead","parseMember","parsePrivateName","parseNoCallExpr","dynamicImport","allowPlaceholder","nodeForExtra","oldInFSharpPipelineDirectBody","parseExprListItem","_call$extra","parseSuper","parseImportMetaProperty","parseFunction","parseAsyncArrowUnaryFunction","parseDo","parseFunctionOrFunctionSent","parseDecorators","parseNewOrNewTarget","primaryTopicReferenceIsAllowedInCurrentTopicContext","registerTopicReference","lookaheadCh","codePointAt","allowSuper","parseMetaProperty","propertyName","innerStartPos","innerStartLoc","spreadStart","optionalCommaStart","spreadNodeStartPos","spreadNodeStartLoc","innerEndPos","innerEndLoc","arrowNode","parenExpression","metaProp","inNonArrowFunction","parseNew","parseExprList","parseTemplateElement","isTagged","cooked","curElt","propHash","parsePropertyDefinition","maybeAsyncOrAccessorProp","keyName","_params","oldInPropertyName","hasStrictModeDirective","nonSimple","isSimpleParamList","errorPos","canBeReservedWord","inStaticBlock","inClassAndNotInNonArrowFunction","inFunction","delegating","childExpression","checkSmartPipelineBodyEarlyErrors","parseSmartPipelineBodyInStyle","isSimpleReference","topicReferenceWasUsedInCurrentTopicContext","outerContextTopicState","withTopicForbiddingContext","outerContextSoloAwaitState","revertScopes","parseProgram","hashEndPos","hashEndLoc","babel7CompatTokens","parseInterpreterDirective","isLetKeyword","matched","endCh","parseBreakContinueStatement","parseDebuggerStatement","parseDoStatement","parseForStatement","parseIfStatement","parseReturnStatement","parseSwitchStatement","parseThrowStatement","parseTryStatement","parseWhileStatement","parseWithStatement","parseEmptyStatement","nextTokenCharCode","isAsyncFunction","maybeName","parseLabeledStatement","allowExport","currentContextDecorators","isBreak","lab","parseHeaderExpression","awaitAt","parseFor","startsWithLet","parseVar","parseForIn","startsWithUnescapedName","isForOf","description","declarationPosition","hasReturn","cur","sawDefault","isCase","simple","clause","statementStart","allowDirectives","createNewLexicalScope","afterBlockParse","parsedNonDirective","isForIn","await","isTypescript","isHangingStatement","requireId","treatFunctionsAsVar","hadConstructor","publicMethod","privateMethod","publicProp","privateProp","publicMember","parseClassElementName","isSimple","maybeQuestionTokenStart","pushClassPrivateProperty","pushClassProperty","_member$decorators","SCOPE_CLASS","CLASS_ELEMENT_KIND_SETTER","parseInitializer","hasDefault","parseAfterDefault","hasStar","parseAfterNamespace","isFromRequired","hasSpecifiers","maybeParseExportNamedSpecifiers","hasDeclaration","maybeParseExportDeclaration","FUNC_STATEMENT","l","hasFrom","nextAfterFrom","assertions","maybeParseImportAssertions","checkNames","isDefault","isFrom","_declaration$extra","exportedName","surrogate","parseNext","maybeParseModuleAttributes","parseAssertEntries","attrs","attrNames","importedIsString","getOptions","pluginMap","pluginsMap","getParser","decoratorsBeforeExport","missingPlugins","validatePlugins","pluginsFromOptions","pluginList","parserClassCache","getParserClass","_options","moduleError","_unused2","internalRe","SEMVER_SPEC_VERSION","rcompareIdentifiers","clean","diff","rcompare","compareLoose","sort","rsort","neq","gte","lte","cmp","coerce","satisfies","toComparators","maxSatisfying","minSatisfying","minVersion","validRange","outside","gtr","ltr","simplifyRange","subset","isDeepEqual","isDeepStrictEqual","_require$codes","codes","ERR_AMBIGUOUS_ARGUMENT","ERR_INVALID_ARG_TYPE","ERR_INVALID_ARG_VALUE","ERR_INVALID_RETURN_VALUE","ERR_MISSING_ARGS","AssertionError","inspect","_require$types","isPromise","isRegExp","objectAssign","objectIs","lazyLoadComparison","comparison","warned","ok","NO_EXCEPTION_SENTINEL","innerFail","innerOk","argLen","generatedMessage","actual","expected","stackStartFn","_len","_key","fail","internalMessage","argsLen","warn","emitWarning","console","errArgs","equal","notEqual","deepEqual","notDeepEqual","deepStrictEqual","notDeepStrictEqual","strictEqual","notStrictEqual","Comparison","instance","_classCallCheck","compareExceptionKey","expectedException","isPrototypeOf","getActual","checkIsPromise","catch","waitForActual","promiseFn","resultPromise","expectsError","details","fnType","expectsNoError","_len6","_key6","throws","_len2","_key2","rejects","_len3","_key3","doesNotThrow","_len4","_key4","doesNotReject","_len5","_key5","ifError","newErr","origStack","tmp2","shift","tmp1","fails","DESCRIPTORS","definePropertyModule","createPropertyDescriptor","getBuiltIn","clearPath","clearScope","WeakMap","LazyResult","Processor","Root","defaults","ignore","toResult","registerLazyResult","registerProcessor","getOwnPropertyDescriptors","descriptors","formatRegExp","isString","objects","isNull","isObject","deprecate","noDeprecation","throwDeprecation","traceDeprecation","debugs","debugEnvRegex","ctx","seen","stylize","stylizeNoColor","depth","colors","isBoolean","showHidden","_extend","isUndefined","customInspect","stylizeWithColor","formatValue","styleType","style","styles","recurseTimes","primitive","isNumber","formatPrimitive","visibleKeys","arrayToHash","isError","formatError","isDate","Date","output","braces","toUTCString","formatProperty","formatArray","reduce","reduceToSingleString","desc","ar","objectToString","debuglog","pid","isNullOrUndefined","isSymbol","isNativeError","isPrimitive","isBuffer","log","origin","kCustomPromisifiedSymbol","callbackifyOnRejected","reason","newReason","promisify","original","promiseResolve","promiseReject","promise","defineProperties","custom","callbackify","callbackified","maybeCb","rej","base64","ieee754","customInspectSymbol","Buffer","SlowBuffer","alloc","INSPECT_MAX_BYTES","K_MAX_LENGTH","createBuffer","RangeError","buf","Uint8Array","encodingOrOffset","allocUnsafe","encoding","isEncoding","byteLength","write","fromString","ArrayBuffer","isView","arrayView","isInstance","fromArrayBuffer","buffer","byteOffset","fromArrayLike","fromArrayView","SharedArrayBuffer","valueOf","checked","numberIsNaN","fromObject","toPrimitive","assertSize","mustMatch","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","bidirectionalIndexOf","arrayIndexOf","arr","indexSize","arrLength","valLength","read","readUInt16BE","foundIndex","found","hexWrite","remaining","strLen","parsed","utf8Write","blitBuffer","asciiWrite","byteArray","asciiToBytes","base64Write","ucs2Write","units","hi","lo","utf16leToBytes","fromByteArray","min","firstByte","codePoint","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","codePoints","MAX_ARGUMENTS_LENGTH","decodeCodePointsArray","kMaxLength","TYPED_ARRAY_SUPPORT","foo","typedArraySupport","poolSize","fill","allocUnsafeSlow","_isBuffer","y","swap16","swap32","swap64","toLocaleString","equals","thisStart","thisEnd","thisCopy","targetCopy","isFinite","toJSON","_arr","hexSliceLookupTable","bytes","checkOffset","checkInt","wrtBigUInt64LE","checkIntBI","wrtBigUInt64BE","checkIEEE754","writeFloat","littleEndian","noAssert","writeDouble","newBuf","subarray","readUintLE","readUIntLE","mul","readUintBE","readUIntBE","readUint8","readUInt8","readUint16LE","readUInt16LE","readUint16BE","readUint32LE","readUInt32LE","readUint32BE","readUInt32BE","readBigUInt64LE","defineBigIntMethod","validateNumber","boundsError","readBigUInt64BE","readIntLE","pow","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readBigInt64LE","readBigInt64BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUintLE","writeUIntLE","writeUintBE","writeUIntBE","writeUint8","writeUInt8","writeUint16LE","writeUInt16LE","writeUint16BE","writeUInt16BE","writeUint32LE","writeUInt32LE","writeUint32BE","writeUInt32BE","writeBigUInt64LE","writeBigUInt64BE","writeIntLE","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeBigInt64LE","writeBigInt64BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","copyWithin","E","sym","getMessage","Base","addNumericalSeparator","ERR_OUT_OF_RANGE","checkBounds","floor","ERR_BUFFER_OUT_OF_BOUNDS","received","abs","INVALID_BASE64_RE","leadSurrogate","toByteArray","base64clean","dst","alphabet","table","i16","BufferBigIntNotDefined","reserved","_helperValidatorIdentifier","isIdentifierName","codeFrameColumns","rawLines","lineNumber","colNumber","deprecationWarningShown","_highlight","NEWLINE","highlighted","highlightCode","forceColor","shouldHighlight","chalk","getChalk","defs","gutter","grey","red","bold","getDefs","maybeHighlight","chalkFn","lines","markerLines","linesAbove","linesBelow","startColumn","endLine","endColumn","lineDiff","sourceLength","getMarkerLines","hasColumns","numberMaxWidth","frame","number","hasMarker","lastMarkerLine","markerLine","markerSpacing","numberOfMarkers","repeat","reset","hasSymbols","toStr","origDefineProperty","supportsDescriptors","arePropertyDescriptorsSupported","predicates","getOwnPropertySymbols","sameDirectionIncreasing","sameDirectionDecreasing","sameSemVer","differentDirectionsInclusive","oppositeDirectionsLessThan","oppositeDirectionsGreaterThan","CssSyntaxError","Stringifier","positionBy","stringifier","cloneBefore","cloneAfter","bookmark","foundSelf","defaultType","between","inputs","fixed","emitInputs","inputsNextIndex","inputId","positionInside","proxyCache","Proxy","postcssNode","s","transformJSXSpreadAttribute","isConstant","dedupeProperties","isOn","buildIIFE","walksScope","transformJSXSpreadChild","transformJSXExpressionContainer","transformJSXText","getJSXAttributeName","getTag","transformJSXMemberExpression","checkIsComponent","shouldTransformedToSlots","KEEP_ALIVE","FRAGMENT","JSX_HELPER_KEY","html_tags_1","svg_tags_1","endsWith","namePath","objectPath","propertyPath","transformedObject","transformedProperty","_a","_b","hasBinding","isCustomElement","nameNode","lastNonEmptyLine","isFirstLine","isLastLine","isLastNonEmptyLine","trimmedLine","slotFlag","insertName","onRE","mergeProps","knownProps","deduped","existing","incoming","mergeAsArray","GetIntrinsic","$apply","$call","$reflectApply","$gOPD","$defineProperty","$max","originalFunction","func","applyBind","_node","_getRequireWildcardCache","newObj","hasPropertyDescriptor","_interopRequireWildcard","_arrayLikeToArray","arr2","_setPrototypeOf","__proto__","_Node","subClass","_step","_iterator","allowArrayLike","minLen","_unsupportedIterableToArray","_createForOfIteratorHelperLoose","oldNode","oldIndex","_findChildAtPosition","atPosition","foundChild","_inferEndPosition","walkAttributes","_this2","walkClasses","_this3","walkCombinators","_this4","_this5","walkIds","_this6","walkNesting","_this7","walkPseudos","_this8","walkTags","_this9","walkUniversals","_this10","_this11","memo","_cssesc","_interopRequireDefault","Namespace","qualifiedName","namespaceString","_namespace","ns","shared","uid","NATIVE_SYMBOL","USE_SYMBOL_AS_UID","WellKnownSymbolsStore","createWellKnownSymbol","withoutSetter","setGlobal","SHARED","createNonEnumerableProperty","random","aFunction","variable","IndexedObject","requireObjectCoercible","_identifier","_keyword","duplicates","outerOnly","search","ids","DeclareClass","DeclareFunction","DeclareModule","DeclareVariable","DeclareInterface","DeclareTypeAlias","DeclareOpaqueType","InterfaceDeclaration","TypeAlias","OpaqueType","CatchClause","LabeledStatement","UnaryExpression","AssignmentExpression","ImportSpecifier","ImportNamespaceSpecifier","ImportDefaultSpecifier","ImportDeclaration","ExportSpecifier","ExportNamespaceSpecifier","ExportDefaultSpecifier","FunctionDeclaration","FunctionExpression","ArrowFunctionExpression","ObjectMethod","ClassMethod","ForInStatement","ForOfStatement","ClassDeclaration","ClassExpression","RestElement","UpdateExpression","ObjectProperty","AssignmentPattern","ArrayPattern","ObjectPattern","VariableDeclaration","VariableDeclarator","callBind","$indexOf","allowMissing","intrinsic","$SyntaxError","$Function","$TypeError","getEvalledConstructor","expressionSyntax","throwTypeError","ThrowTypeError","calleeThrows","gOPDthrows","getProto","needsEval","TypedArray","INTRINSICS","AggregateError","Atomics","Boolean","DataView","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","eval","EvalError","Float32Array","Float64Array","FinalizationRegistry","Int8Array","Int16Array","Int32Array","ReferenceError","Reflect","Uint8ClampedArray","Uint16Array","Uint32Array","URIError","WeakRef","WeakSet","doEval","LEGACY_ALIASES","$concat","$spliceApply","$replace","$strSlice","rePropName","reEscapeChar","stringToPath","subString","getBaseIntrinsic","intrinsicName","intrinsicBaseName","intrinsicRealName","skipFurtherCaching","isOwn","origSymbol","hasSymbolSham","implementation","skipAllButComputedKey","environmentVisitor","_helperMemberExpressionToFunctions","_helperOptimiseCallExpression","getPrototypeOfExpression","objectRef","isPrivateMethod","targetRef","addHelper","skip","skipKey","merge","Super","handle","unshadowSuperBindingVisitor","Scopable","refName","getOwnBinding","rename","specHandlers","memoise","superMember","maybeGenerateMemoised","memoiser","_get","_getThisRefs","thisRefs","getObjectRef","isDerivedConstructor","thisRef","generateDeclaredUidIdentifier","isInStrictMode","destructureSet","optionalCall","looseHandlers","getSuperRef","_getSuperRef","_getSuperRef2","_opts$constantSuper","methodPath","superRef","constantSuper","isLoose","refToPreserve","versionA","versionB","hilo","gtfn","ltefn","ltfn","ecomp","high","low","comparator","findConfigUpwards","rootDir","findPackageData","filepath","directories","pkg","isPackage","findRelativeConfig","pkgData","envName","caller","config","findRootConfig","loadConfig","resolveShowConfigPath","loadPlugin","loadPreset","ROOT_CONFIG_FILENAMES","_gensync","createConfigItemRunner","_full","_partial","_item","loadOptionsRunner","_config$options","maybeErrback","runner","manipulateOptions","post","pre","parserOverride","generatorOverride","createItemFromDescriptor","_configDescriptors","createDescriptor","getItemDescriptor","CONFIG_ITEM_BRAND","_descriptor","ConfigItem","request","resolved","makeWeakCache","makeWeakCacheSync","synchronize","makeStrongCache","makeStrongCacheSync","assertSimpleType","_async","genTrue","makeCachedFunction","CallCache","callCacheSync","callCacheAsync","futureCache","asyncContext","callCache","getCachedValue","waitFor","getCachedValueOrWait","CacheConfigurator","handlerResult","finishLock","isIterableIterator","onFirstPause","Lock","updateFunctionCache","setupAsyncLocks","cachedValue","configured","forever","deactivate","mode","_active","_never","_forever","_invalidate","_configured","_pairs","_data","cacheFn","using","never","invalidate","makeSimpleConfigurator","maybeAsync","isThenable","pairs","released","_resolve","validateNested","checkNoUnwrappedItemOptionPairs","lastItem","thisItem","assumptionsNames","_removed","_optionAssertions","ROOT_VALIDATORS","assertString","rootMode","assertRootMode","configFile","assertConfigFileSearch","assertCallerMetadata","filenameRelative","assertBoolean","cloneInputAst","BABELRC_VALIDATORS","babelrc","babelrcRoots","assertBabelrcSearch","NONPRESET_VALIDATORS","assertIgnoreList","only","assertTargets","browserslistConfigFile","browserslistEnv","COMMON_VALIDATORS","inputSourceMap","assertInputSourceMap","presets","assertPluginList","passPerPreset","assumptions","assertAssumptions","assertObject","access","assertArray","entries","objLoc","assertConfigApplicableTest","include","exclude","retainLines","shouldPrintComment","assertFunction","compact","assertCompact","minified","auxiliaryCommentBefore","auxiliaryCommentAfter","assertSourceType","wrapPluginVisitorMethod","sourceMaps","assertSourceMaps","sourceMap","sourceFileName","sourceRoot","parserOpts","generatorOpts","getModuleId","moduleRoot","moduleIds","moduleId","getSource","assertNoDuplicateSourcemap","optLoc","throwUnknownError","unknownOptErr","fromJSON","Document","Warning","Result","Input","postcss","creator","transformer","postcssPlugin","postcssVersion","LANG","css","processOpts","pluginOpts","atRule","rule","document","registerPostcss","gray","colorette","terminalHighlight","setMessage","captureStackTrace","showSourceCode","color","mark","aside","maxWidth","spacing","SourceMapConsumer","SourceMapGenerator","fileURLToPath","pathToFileURL","nanoid","PreviousMap","fromOffsetCache","sourceMapAvailable","pathAvailable","hasBOM","consumer","mapResolve","fromOffset","lastLine","lineToIndex","prevIndex","mid","url","fromUrl","originalPositionFor","URL","mapFile","protocol","sourceContentFor","json","consumerCache","registerInput","stripComments","getProp","unesc","_unesc","_getProp","_ensureObject","_stripComments","regexAnySingleEscape","regexSingleEscape","regexExcessiveSpaces","cssesc","quotes","firstChar","charAt","counter","character","escapeEverything","$1","$2","wrap","createClassFeaturePlugin","feature","setPublicClassFields","privateFieldsAsProperties","noDocumentAll","explicit","_features","enableFeature","versionKey","Class","verifyUsedFeatures","isDecorated","_decorators","hasOwnDecorators","computedPaths","getName","setName","innerBinding","ref","_helperFunctionName","_core","privateNamesMap","_fields","buildPrivateNamesMap","privateNamesNodes","buildPrivateNamesNodes","keysNodes","staticNodes","pureStaticNodes","instanceNodes","wrapClass","transformPrivateNamesUsage","buildDecoratedClass","_misc","extractComputedKeys","buildFieldsInitNodes","injectInitialization","referenceVisitor","PrivateName","ExportDefaultDeclaration","hasDecorators","_helperSplitExportDeclaration","FEATURES","numeric","anum","bnum","WalkerBase","should_skip","should_remove","replacement","SyncWalker","leave","_should_skip","_should_remove","_replacement","skipped","removed","AsyncWalker","asyncWalk","_processor","selectors","processor","_container","_Container","_error","gobbleHex","lower","spaceTerminated","CONTAINS_ESCAPE","gobbled","Selector","ClassName","_constructed","_value","Tag","_Namespace","Pseudo","Universal","Combinator","Nesting","IS_PURE","copyright","IE8_DOM_DEFINE","anObject","O","P","Attributes","createElement","EXISTS","PREFERRED_STRING","bitmap","V8_VERSION","symbol","sham","userAgent","v8","inspectSource","InternalStateModule","getInternalState","enforceInternalState","enforce","TEMPLATE","unsafe","noTargetGet","functionToString","toInteger","ceil","helpers","_codeFrame","_helperModuleTransforms","_semver","errorVisitor","File","inputMap","_map","metadata","getCode","setContext","getModuleName","addImport","availableHelper","versionRange","declar","ensure","dependencies","dep","getDependencies","globals","getAllBindings","_compact","registerDeclaration","addTemplateObject","_Error","_loc","txt","classMethodOrDeclareMethodCommon","classMethodOrPropertyCommon","patternLikeCommon","functionDeclarationCommon","functionTypeAnnotationCommon","functionCommon","inOp","normal","sourceFile","sourced","targetType","exportDeclaration","standaloneDeclaration","needBindingRegistration","updatedDeclaration","updatedExportDeclaration","bindingIdentifiers","aliasDeclar","Generator","generate","CodeGenerator","_sourceMap","_printer","retainFunctionParens","concise","indent","adjustMultilineComment","jsescOption","minimal","recordAndTupleSyntaxType","jsonCompatibleStrings","normalizeOptions","localBinding","getBinding","constant","getNameFromLiteralId","selfReference","hasGlobal","buildPropertyMethodAssignmentWrapper","buildGeneratorPropertyMethodAssignmentWrapper","FUNCTION","FUNCTION_ID","FUNCTION_KEY","_helperGetFunctionArity","getProgramParent","references","selfAssignment","outerDeclar","getBindingIdentifier","placeholderWhitelist","placeholderPattern","preserveComments","syntacticPlaceholders","_ref","excluded","sourceKeys","_objectWithoutPropertiesLoose","normalizeReplacements","replacements","acc","possibleNames","availableTypedArrays","callBound","$toString","hasToStringTag","toStringTag","typedArrays","$slice","toStrTags","gOPD","typedArray","superProto","anyTrue","getter","tryTypedArrays","getPolyfill","shim","polyfill","isArgs","NaN","addDefault","importedSource","_importInjector","addSideEffect","_isModule","Yallist","MAX","LENGTH","LENGTH_CALCULATOR","ALLOW_STALE","MAX_AGE","DISPOSE","NO_DISPOSE_ON_SET","LRU_LIST","CACHE","UPDATE_AGE_ON_GET","naiveLength","doUse","hit","isStale","del","now","unshiftNode","maxAge","walker","removeNode","Entry","forEachStep","thisp","lc","stale","dispose","noDisposeOnSet","updateAgeOnGet","mL","allowStale","mA","lC","rforEach","head","toArray","dump","h","dumpLru","peek","load","expiresAt","prune","mergeDefaultFields","mergeOptions","BrowserslistError","browserslist","semverMin","semverify","invariant","versionRegExp","isUnreleasedVersion","unreleasedLabel","_targets","unreleasedLabels","getLowestUnreleased","getHighestUnreleased","getLowestImplementedVersion","environment","chrome","_helperValidatorOption","OptionValidator","second","hasUnreleased","browserNameMap","safari","and_chr","and_ff","android","edge","firefox","ie","ie_mob","ios_saf","op_mob","opera","samsung","DEFAULT_RAW","beforeDecl","beforeRule","beforeOpen","beforeClose","beforeComment","emptyBody","commentLeft","commentRight","rawValue","important","ownSemicolon","atrule","afterName","own","detect","rawCache","beforeAfter","rawSemicolon","rawEmptyBody","rawIndent","rawBeforeComment","rawBeforeDecl","rawBeforeRule","rawBeforeClose","rawBeforeOpen","rawColon","MapGenerator","TYPE_TO_CLASS_NAME","PLUGIN_PROPS","prepare","Once","DeclarationExit","RuleExit","AtRuleExit","CommentExit","RootExit","DocumentExit","OnceExit","NOT_VISITORS","getEvents","toStack","events","eventIndex","visitorIndex","cleanMarks","stringified","processed","inline","syntax","warnings","onFulfilled","onRejected","finally","onFinally","processing","runAsync","getAsyncError","runOnRoot","prepareVisitors","hasListener","walkSync","subRoot","visitSync","event","lastPlugin","handleError","roots","visitTick","warning","opt","separators","escape","letter","space","existsSync","readFileSync","loadAnnotation","startWith","annotation","loadMap","withContent","sourcesContent","getAnnotationURL","sourceMapString","annotations","lastAnnotation","decodeInline","lastMatch","atob","loadFile","fromSourceMap","isMap","prevPath","mappings","_mappings","sections","matchValueName","_templateLiterals","_expressions","_statements","_classes","_methods","_modules","_flow","_base","_typescript","_constructors","_guards","utils_1","parseDirectives_1","xlinkRE","transformJSXElement","transformedText","referencePaths","referencePath","getChildren","isComponent","patchFlag","dynamicPropNames","slots","hasRef","hasClassBinding","hasStyleBinding","hasHydrationEventBinding","hasDynamicKeys","mergeArgs","attributeValue","valuePath","getJSXAttributeValue","transformOn","nameHint","directiveName","_c","_d","propName","isDynamic","updateName","firstCharacter","propsExpression","buildProps","optimize","VNodeChild","slotId","assignment","createVNode","freeGlobal","punycode","maxInt","regexPunycode","regexNonASCII","regexSeparators","stringFromCharCode","mapDomain","ucs2decode","ucs2encode","digitToBasic","digit","flag","adapt","numPoints","firstTime","baseMinusTMin","decode","basic","oldi","w","baseMinusT","inputLength","bias","encode","handledCPCount","basicLength","q","currentValue","handledCPCountPlusOne","qMinusT","parseModifiers","el","resolveDirective","modelToUse","typePath","attribute","vals","modifiersSet","underscoreModifiers","isVModels","isVModel","shouldResolve","third","fragmentCallee","Fragment","transformFragment","ctor","superCtor","super_","TempCtor","funcRes","_shouldUpdateSelector","updateSelector","_isLossy","lossless","_root","_parseOptions","lossy","_run","_runSync","astSync","processSync","_WHITESPACE_TOKENS","_Object$assign","_selector","_className","_comment","_id","_tag","_string","_pseudo","_attribute","_universal","_combinator","_nesting","_sortAscending","_tokenize","WHITESPACE_TOKENS","cr","feed","newline","tab","WHITESPACE_EQUIV_TOKENS","tokenStart","FIELDS","START_LINE","START_COL","tokenEnd","END_LINE","END_COL","getTokenSource","getTokenSourceSpan","startToken","endToken","unescapeProp","indexesOf","safe","position","_errorGenerator","rootSource","errorGenerator","errorOptions","attr","startingToken","currToken","TYPE","closeSquare","START_POS","sourceIndex","spaceBefore","commentBefore","lastAdded","spaceAfterMeaningfulToken","prevContent","existingComment","asterisk","dollar","oldRawValue","caret","combinator","_unescaped","_oldRawValue","oldValue","quoteMark","insensitive","insensitiveFlag","_unescapeValue","unescapeValue","unescaped","lastComment","rawLastComment","lastValue","rawLastValue","parseWhitespaceEquivalentTokens","stopPosition","startPosition","firstToken","lastToken","convertWhitespaceNodesToSpace","requiredSpace","lossySpace","isNamedCombinator","namedCombinator","nameRaw","nextSigTokenPos","locateNextMeaningfulToken","spaceOrDescendantSelectorNodes","_this$convertWhitespa2","_space","_rawSpace","_this$convertWhitespa3","_space2","_rawSpace2","optionalSpace","_this$convertWhitespa","missingBackslash","missingParenthesis","missingSquareBracket","prevToken","universal","nesting","parentheses","unbalanced","openParenthesis","closeParenthesis","parenEnd","parenStart","parenValue","parseParenthesisToken","pseudo","pseudoStr","splitWord","firstCallback","hasClass","hasId","interpolations","hashIndex","indices","uniqs","ind","classNameOpts","idOpts","tagOpts","throwOnParenthesis","openSquare","ampersand","an","required","END_POS","searchPosition","commentStart","lastEnd","commentEnd","charToInteger","chars","segmentify","segment","encodeInteger","clamped","decoded","hasContinuationBit","shouldNegate","sourceFileIndex","sourceCodeLine","sourceCodeColumn","nameIndex","generatedCodeColumn","lineMappings","segmentMappings","NAME","NATIVE_ARRAY_BUFFER","classof","redefine","wellKnownSymbol","Int8ArrayPrototype","Uint8ClampedArrayPrototype","TypedArrayPrototype","ObjectPrototype","TO_STRING_TAG","TYPED_ARRAY_TAG","NATIVE_ARRAY_BUFFER_VIEWS","TYPED_ARRAY_TAG_REQIRED","TypedArrayConstructorsList","BigIntArrayConstructorsList","BigInt64Array","BigUint64Array","isTypedArray","klass","aTypedArray","aTypedArrayConstructor","C","ARRAY","TypedArrayConstructor","exportTypedArrayMethod","KEY","forced","exportTypedArrayStaticMethod","TO_STRING_TAG_SUPPORT","classofRaw","CORRECT_ARGUMENTS","tryGet","NATIVE_WEAK_MAP","objectHas","sharedKey","hiddenKeys","OBJECT_ALREADY_INITIALIZED","wmget","wmhas","wmset","facade","STATE","getterFor","CORRECT_PROTOTYPE_GETTER","IE_PROTO","F","aPossiblePrototype","setter","CORRECT_SETTER","mergeSort","comparefn","middle","insertionSort","llength","rlength","lindex","rindex","UA","webkit","copyConstructorProperties","isForced","targetProperty","sourceProperty","TARGET","GLOBAL","STATIC","stat","propertyIsEnumerableModule","toIndexedObject","$getOwnPropertyDescriptor","propertyIsEnumerable","ownKeys","getOwnPropertyDescriptorModule","getOwnPropertyNamesModule","getOwnPropertySymbolsModule","toLength","toAbsoluteIndex","createMethod","IS_INCLUDES","$this","fromIndex","detection","POLYFILL","NATIVE","defer","channel","port","html","IS_IOS","IS_NODE","location","setImmediate","clearImmediate","MessageChannel","Dispatch","listener","postMessage","host","port2","port1","onmessage","addEventListener","importScripts","appendChild","that","loadHelper","newFileClass","fileClass","_helpers","makePath","helperData","helper","localBindingNames","exportName","exportPath","exportBindingAssignments","importPaths","importBindingsReferences","dependencyVisitor","bindingIdentifier","ExportAllDeclaration","ExportNamedDeclaration","Statement","bindings","ReferencedIdentifier","getHelperMetadata","getDependency","localBindings","dependenciesRefs","toRename","newName","exp","imps","impsBindingRefs","assignPath","pushContainer","permuteHelperAST","ForAwaitStatement","NumericLiteralTypeAnnotation","ExistentialTypeParam","SpreadProperty","RestProperty","Flow","Pure","Generated","User","Var","BlockScoped","Referenced","Expression","BindingIdentifier","ReferencedMemberExpression","grandparent","isReferencedIdentifier","isUser","isPure","allowPartial","fastProto","FastObject","placeholderType","Pattern","generics","bases","typeGroups","getQualifiedName","_inherit","blockNodes","subNode","CLEAR_KEYS","CLEAR_KEYS_PLUS_COMMENTS","symbols","_renamer","_binding","_globals","gatherNodeParts","collectorVisitor","For","getFunctionParent","registerBinding","ForXStatement","constantViolations","ExportDeclaration","reference","getBlockParent","assignments","inited","uids","crawling","_parent","isKey","generateUid","_generateUid","hasLabel","hasReference","generateUidBasedOnNode","defaultName","generateUidIdentifierBasedOnNode","dontPush","checkBlockScopedCollisions","oldName","_renameFromMap","arrayLikeIsIterable","isGenericType","helperName","getLabel","registerLabel","buildUndefinedNode","registerConstantViolation","reassign","bindingPath","declarators","addGlobal","hasUid","constantsOnly","removeData","crawl","programParent","_exploded","typeVisitors","unique","blockHoist","_blockHoist","dataKey","declarPath","declarator","getAllBindingsOfKind","kinds","bindingIdentifierEquals","previousPath","_previousPath","_this$getBinding","getOwnBindingIdentifier","hasOwnBinding","noGlobals","parentHasBinding","contextVariables","_this$parent","moveBindingTo","info","removeOwnBinding","removeBinding","_this$getBinding2","builtin","referenced","clearValue","deoptValue","hasDeoptedValue","setValue","hasValue","dereference","needsWhitespace","needsWhitespaceBefore","needsWhitespaceAfter","needsParens","printStack","isOrHasCallExpression","expandedParens","whitespace","parens","expandAliases","expandedWhitespaceNodes","expandedWhitespaceList","linesInfo","print","printAssertions","printJoin","printList","_node$attributes","ImportAttribute","hasSpecial","Identifier","exactSource","ArgumentPlaceholder","SpreadElement","ObjectExpression","printInnerComments","_methodHead","ArrayExpression","elems","RecordExpression","TupleExpression","RegExpLiteral","BooleanLiteral","NullLiteral","NumericLiteral","getPossibleRaw","numbers","_jsesc","StringLiteral","BigIntLiteral","DecimalLiteral","PipelineTopicExpression","PipelineBareFunction","PipelinePrimaryTopicReference","forOwn","singleEscapes","regexDigit","regexWhitelist","jsesc","increaseIndentation","oldIndent","indentLevel","destination","lowercaseHex","inline1","__inline1__","inline2","__inline2__","newLine","isEmpty","useBinNumbers","useOctNumbers","useDecNumbers","useHexNumbers","isSet","hexadecimal","es6","charCode","longhand","isScriptContext","formatter","parseWithCodeFrame","syntactic","placeholderNames","legacy","isLegacyRef","placeholderVisitorHandler","PATTERN","ancestors","_state$placeholderWhi","resolveAncestors","isDuplicate","placeholderName","applyReplacement","rewriteModuleStatementsAndPrepareHeader","allowTopLevelThis","noInterop","importInterop","lazy","esNamespaceOnly","constantReexports","enumerableModuleMeta","_normalizeAndLoadMetadata","validateImportInteropOption","_assert","_helperModuleImports","initializeReexports","_rewriteThis","_rewriteLiveReferences","headers","hasExports","EXPORTS","buildESModuleHeader","nameList","programPath","exportedVars","hasReexport","reexports","reexportNamespace","reexportAll","buildExportNameListDeclaration","exportNameListName","initStatements","exportNames","localName","buildInitStatement","buildReexportsFromMeta","chunks","chunk","buildExportInitializationStatements","ensureStatementsHoisted","header","wrapInterop","buildNamespaceInitStatements","sourceMetadata","srcNamespace","importsNamespace","SOURCE","NAMESPACE","VERIFY_NAME_LIST","EXPORTS_LIST","buildNamespaceReexport","isSideEffectImport","_getModuleName","ReexportTemplate","constantComputed","spec","stringSpecifiers","importName","NAMESPACE_IMPORT","interop","astNodes","EXPORT_NAME","InitTemplate","initExpr","VALUE","_getPrototypeOf","util","createErrorType","NodeError","_Base","arg1","arg2","arg3","_assertThisInitialized","_possibleConstructorReturn","thing","determiner","this_len","inspected","isArgumentsObject","isGeneratorFunction","whichTypedArray","uncurryThis","BigIntSupported","SymbolSupported","ObjectToString","numberValue","stringValue","booleanValue","bigIntValue","symbolValue","checkBoxedPrimitive","prototypeValueOf","isMapToString","isSetToString","isWeakMapToString","isWeakSetToString","isArrayBufferToString","isArrayBuffer","working","isDataViewToString","isDataView","isArrayBufferView","isUint8Array","isUint8ClampedArray","isUint16Array","isUint32Array","isInt8Array","isInt16Array","isInt32Array","isFloat32Array","isFloat64Array","isBigInt64Array","isBigUint64Array","isWeakMap","isWeakSet","SharedArrayBufferCopy","isSharedArrayBufferToString","isSharedArrayBuffer","isNumberObject","isStringObject","isBooleanObject","isBigIntObject","isSymbolObject","isMapIterator","isSetIterator","isGeneratorObject","isWebAssemblyCompiledModule","isBoxedPrimitive","isAnyArrayBuffer","isStandardArguments","isLegacyArguments","supportsStandardArguments","symObj","syms","ERROR_MESSAGE","funcType","binder","boundLength","boundArgs","Empty","GeneratorFunction","fnToStr","isFnRegex","generatorFunc","getGeneratorFunc","foundName","_defineProperty","_wrapNativeSuper","Wrapper","_construct","isNativeReflectConstruct","construct","Parent","blue","white","kReadableOperator","strictEqualObject","notStrictEqualObject","notIdentical","copyError","inspectValue","maxArrayLength","breakLength","showProxy","sorted","getters","lastPos","actualInspected","actualLines","expectedLines","indicator","maxCount","maxLines","_actualLines","printedLines","skippedMsg","expectedLine","actualLine","divergingLines","createErrDiff","_res","knownOperators","_objectSpread","firstSource","nextSource","keysArray","nextIndex","nextKey","origKeys","keysShim","originalKeys","isEnumerable","hasDontEnumBug","hasProtoEnumBug","dontEnums","equalsConstructorPrototype","excludedKeys","$applicationCache","$console","$external","$frame","$frameElement","$frames","$innerHeight","$innerWidth","$onmozfullscreenchange","$onmozfullscreenerror","$outerHeight","$outerWidth","$pageXOffset","$pageYOffset","$parent","$scrollLeft","$scrollTop","$scrollX","$scrollY","$self","$webkitIndexedDB","$webkitStorageInfo","$window","hasAutomationEqualityBug","isArguments","theKeys","skipProto","skipConstructor","equalsConstructorPrototypeIfNotBuggy","_slicedToArray","_arrayWithHoles","_n","_e","_s","_i","_iterableToArrayLimit","_nonIterableRest","regexFlagsSupported","arrayFromSet","arrayFromMap","objectGetOwnPropertySymbols","isNonIndex","getOwnNonIndexProperties","innerDeepEqual","val1","val2","memos","buf1","buf2","val1Tag","keys1","keys2","keyCheck","getTime","areSimilarTypedArrays","areSimilarFloatArrays","_keys","_keys2","isEqualBoxedPrimitive","getEnumerables","iterationType","aKeys","bKeys","symbolKeysA","symbolKeysB","_symbolKeysB","val2MemoA","val2MemoB","areEq","objEquiv","setHasEqualElement","setValues","findLooseMatchingPrimitives","prim","setMightHaveLoosePrim","altValue","mapMightHaveLoosePrim","curB","mapHasEqualEntry","key1","item1","key2","aValues","bValues","_val","setEquiv","aEntries","_aEntries$i","item2","bEntries","_i2","_bEntries$_i","mapEquiv","keysA","willPathCastToBoolean","maybeWrapped","AssignmentMemoiser","record","toNonOptional","parentNode","isInDetachedTree","endPath","willEndPathCastToBoolean","rootParentPath","isDeleteOperation","startingOptional","startingProp","startingNode","baseNeedsMemoised","baseRef","parentIsOptionalCall","parentIsCall","boundGet","regular","endParentPath","replacementPath","baseMemoised","nonNullishCheck","nullishCheck","endParent","simpleSet","operatorTrunc","thisNode","bindingNames","simpleAssignmentVisitor","isCompletionRecord","varName","binary","version1","version2","v1","v2","hasPre","defaultResult","rtl","COERCERTL","insert","inserted","pushNode","forEachReverse","getReverse","mapReverse","initial","reduceReverse","toArrayReverse","sliceReverse","deleteCount","maxSV","rangeObj","minSV","minver","setMin","compver","r1","r2","simplified","simpleSubset","dom","eqSet","gtltComp","higher","hasDomLT","hasDomGT","higherGT","lowerLT","needDomLTPre","needDomGTPre","sawNonNull","OUTER","simpleSub","simpleDom","isSub","defaultValue","forwardAsync","action","withKind","adapted","runGenerator","firstPause","completed","createCachedDescriptors","optionsWithResolvedBrowserslistConfigFile","createCachedPluginDescriptors","handlerOf","createCachedPresetDescriptors","createUncachedDescriptors","createPluginDescriptors","createPresetDescriptors","_caching","_resolveTargets","resolveBrowserslistConfigFile","PRESET_DESCRIPTOR_CACHE","loadCachedDescriptor","PLUGIN_DESCRIPTOR_CACHE","DEFAULT_OPTIONS","cacheByOptions","possibilities","possibility","isEqualDescriptor","ownPass","createDescriptors","nameMap","conflicts","assertNoDuplicates","pair","resolver","_helperCompilationTargets","configFilePath","resolveTargets","browsers","esmodules","ignoreBrowserslistConfig","isBrowsersQueryValid","inputTargets","_browsers","configPath","validateBrowsers","validTargets","TargetNames","formatMessage","findSuggestion","validateTargetNames","generateTargets","hasTargets","shouldSearchForConfig","_browserslist","ESM_SUPPORT","queryBrowsers","browserName","browserVersion","normalizedBrowserName","splitVersion","isSplitUnreleased","isUnreleased","parsedBrowserVersion","getLowestVersions","mobileToDesktop","decimalWarnings","_targetParserMap$targ","targetParserMap","__default","parsedTarget","parsedValue","decimalTargets","_pretty","prettifyTargets","getInclusionReasons","_filterItems","isRequired","_nativeModules","semverifyTarget","jsReleases","agents","jsEOL","e2c","isVersionsMatch","normalizeElectron","versionToUse","nameMapper","getMajor","getMajorVersions","majorVersions","uniq","minimum","selected","filtered","fillUsage","generateFilter","sign","parseSimpleInt","compareSemver","semverFilterLoose","compareSemverLoose","normalizeVersion","versionAliases","resolveVersion","filterByYear","since","byName","releaseDate","cloneData","desktopNames","desktop","normalizeAndroidVersions","fixedDate","mapVersions","androidVersions","chromeVersions","checkName","unknownQuery","query","filterAndroid","queries","flatten","selection","queryString","isExclude","QUERIES","select","ignoreUnknownVersions","dangerousExtend","oldDataWarning","stats","getStat","customUsage","cacheKey","name1","name2","BROWSERSLIST_DISABLE_CACHE","qs","doMatch","nodeQuery","sinceQuery","year","month","date","UTC","coverQuery","coverage","statMode","usage","place","loadCountry","coveraged","fx","ff","ios","explorer","blackberry","explorermobile","operamini","operamobile","chromeandroid","firefoxandroid","ucandroid","qqandroid","clearCaches","parseConfig","readConfig","findConfig","customStats","dataByBrowser","years","popularity","loadStat","loadFeature","features","fromToUse","toToUse","generateSemverFilter","currentNode","loadQueries","release_date","usage_global","full","interval","A","B","D","G","H","I","J","K","L","N","Q","S","T","U","V","W","X","Y","Z","u","AB","BB","CB","DB","EB","FB","GB","HB","IB","JB","KB","LB","MB","NB","OB","PB","QB","RB","SB","TB","UB","VB","WB","XB","YB","ZB","aB","bB","cB","dB","eB","fB","gB","hB","iB","jB","kB","lB","mB","nB","oB","pB","qB","rB","sB","tB","uB","vB","wB","xB","yB","zB","AC","BC","CC","DC","EC","FC","GC","HC","IC","JC","KC","LC","MC","NC","OC","PC","QC","RC","SC","TC","UC","VC","WC","XC","YC","ZC","aC","bC","cC","dC","_validator","_findSuggestion","distances","levenshtein","prettifyVersion","buildPresetChain","buildPresetChainWalker","dedupDescriptors","files","buildRootChain","configReport","babelRcReport","programmaticLogger","ConfigPrinter","programmaticChain","loadProgrammaticChain","babelrcRootsDirectory","configFileChain","emptyChain","configFileLogger","validatedFile","validateConfigFile","loadFileChain","mergeChain","ignoreFile","babelrcFile","isIgnored","fileChain","absoluteRoot","babelrcPatterns","pat","_patternToRegex","directory","matchPattern","babelrcLoadEnabled","shouldIgnore","validateBabelrcFile","babelrcLogger","showConfig","fileHandling","makeChainWalker","preset","loadPresetDescriptors","loadPresetEnvDescriptors","loadPresetOverridesDescriptors","overridesEnv","loadPresetOverridesEnvDescriptors","createLogger","buildRootDescriptors","buildEnvDescriptors","buildOverrideDescriptors","buildOverrideEnvDescriptors","validateExtendFile","baseLogger","_context$caller","configure","ChainFormatter","Programmatic","callerName","buildProgrammaticLogger","loadFileChainWalker","loadFileDescriptors","loadFileEnvDescriptors","loadFileOverridesDescriptors","loadFileOverridesEnvDescriptors","Config","buildFileLogger","flattenedConfigs","rootOpts","configIsApplicable","envOpts","overrideOps","overrideEnvOpts","logger","mergeExtendsChain","mergeChainOpts","fnKey","configFieldIsApplicable","matchesPatterns","_context$filename","_context$filename2","patterns","pathToTest","propLoc","assertIgnoreItem","checkValidTest","assertPluginTarget","assertPluginItem","browsersLoc","esmodulesLoc","assertBrowsersList","subLoc","assertBrowserVersion","inPreset","round","loadPrivatePartialConfig","_plugin","_configChain","inputOpts","absoluteCwd","absoluteRootDir","upwardRootDir","resolveRootMode","configChain","merged","showIgnoredFiles","_opts","PartialConfig","babelignore","hasFilesystemConfig","_normalizeFile","passes","_normalizeOpts","pluginPasses","pluginPairs","passPairs","_blockHoistPlugin","pass","_pluginPass","_opts$filename","outputCode","outputMap","_generate","_opts$filename2","codeFrame","_missingPluginHelper","use","hideNothingWarning","normalized","ownInputs","inputHydrated","_postcss2","_lodash2","_genericNames2","_parser2","_loader2","_generateScopedName2","_saveJSON2","_behaviours","PLUGIN_NAME","dashesCamelCase","firstLetter","getJSON","inputFile","globalModulesList","globalModulePaths","exportGlobals","defaultBehaviour","scopeBehaviour","isValidBehaviour","behaviours","LOCAL","getDefaultScopeBehaviour","generateScopedName","scopedNameGenerator","hashPrefix","getScopedNameGenerator","globalModules","isGlobalModule","getDefaultPlugins","behaviour","getDefaultPluginsList","resultPluginIndex","isOurPlugin","loaderPlugins","loader","Loader","getLoader","fetch","finalSource","localsConvention","isFunc","exportTokens","className","initializeId","isStrict","superId","classDecorators","definitions","extractElementDescriptor","wrapperCall","addDecorateHelper","classPathDesc","_helperReplaceSupers","getKey","classRef","webpackEmptyContext","req","hex_chr","md5cycle","md5blk","md5blks","md5blk_array","md51","rhex","toUtf8","unescape","hexToBinaryString","SparkMD5","clamp","targetArray","sourceArray","begin","appendBinary","_buff","_length","_hash","buff","_finish","getState","setState","destroy","hashBinary","returnUInt8Array","utf8Str2ArrayBuffer","md51_array","compilerCore","V_MODEL_RADIO","V_MODEL_CHECKBOX","V_MODEL_TEXT","V_MODEL_SELECT","V_MODEL_DYNAMIC","V_ON_WITH_MODIFIERS","V_ON_WITH_KEYS","V_SHOW","TRANSITION","TRANSITION_GROUP","registerRuntimeHelpers","namedCharacterReferences","GT","LT","AMP","REG","COPY","QUOT","maxCRNameLength","CCR_REPLACEMENTS","isRawTextContainer","makeMap","parserOptions","isVoidTag","isNativeTag","isHTMLTag","isSVGTag","isPreTag","decodeEntities","rawText","asAttr","decodedText","advance","isBuiltInComponent","isBuiltInType","getNamespace","getTextMode","transformStyle","createSimpleExpression","parseInlineCSS","cssText","parseStringStyle","createDOMCompilerError","createCompilerError","DOMErrorMessages","isEventOptionModifier","isNonKeyModifier","maybeKeyModifier","isKeyboardEvent","transformClick","isStaticExp","createCompoundExpression","stringifyStatic","scopes","vSlot","nc","ec","currentChunk","stringifyCurrentChunk","currentIndex","staticCall","createCallExpression","CREATE_STATIC","stringifyNode","replaceHoist","getHoistedNode","analyzeNode","tagType","codegenNode","hoisted","dataAriaRE","isStringifiableAttr","isKnownAttr","hoistToReplace","hoists","isNonStringifiable","bailed","bail","escapeHtml","evaluated","evaluateConstant","normalizeClass","stringifyStyle","normalizeStyle","scopeId","stringifyElement","toDisplayString","ignoreSideEffectTags","onError","DOMNodeTransforms","DOMDirectiveTransforms","cloak","noopDirectiveTransform","createObjectProperty","helperString","TO_DISPLAY_STRING","model","baseResult","transformModel","directiveToUse","isInvalidType","findProp","hasDynamicKeyVBind","needRuntime","handlerExp","keyModifiers","nonKeyModifiers","eventOptionModifiers","checkCompatEnabled","resolveModifiers","modifierPostfix","capitalize","show","compile","baseCompile","extend","nodeTransforms","directiveTransforms","transformHoist","baseParse","fold","foldValue","objHash","foldObject","pad","maxKeys","kstr","vstr","stringifyPrimitive","ks","mapOpts","previous","previousMaps","isInline","isSourcesContent","clearAnnotation","setSourcesContent","already","setSourceContent","toUrl","applyPrevMaps","applySourceMap","isAnnotation","toBase64","btoa","addAnnotation","outputFile","eol","generateMap","generateString","absolute","sourcePath","noSource","mapping","generated","addMapping","printed","tokenizer","customProperty","createTokenizer","endOfFile","freeSemicolon","emptyRule","endFile","getPosition","brackets","back","unclosedBracket","unknownWord","spacesAndCommentsFromEnd","firstSpaces","spacesAndCommentsFromStart","precheckMissedSemicolon","stringFrom","spacesFromEnd","hasWord","checkMissedSemicolon","unnamedAtrule","open","unexpectedClose","unclosedBlock","lastTokenType","founded","SINGLE_QUOTE","DOUBLE_QUOTE","BACKSLASH","SLASH","SPACE","FEED","TAB","CR","OPEN_SQUARE","CLOSE_SQUARE","OPEN_PARENTHESES","CLOSE_PARENTHESES","OPEN_CURLY","CLOSE_CURLY","SEMICOLON","ASTERISK","COLON","AT","RE_AT_END","RE_WORD_END","RE_BAD_BRACKET","RE_HEX_ESCAPE","escapePos","currentToken","ignoreErrors","returned","unclosed","what","ignoreUnclosed","controlChar","customAlphabet","_CSSESC_QUOTE_OPTIONS","WRAPPED_IN_QUOTES","warnOfDeprecatedValueAssignment","warnOfDeprecatedQuotedAssignment","warnOfDeprecatedConstructor","deprecatedUsage","Attribute","handleDeprecatedContructorOpts","getQuotedValue","_determineQuoteMark","cssescopts","CSSESC_QUOTE_OPTIONS","smartQuoteMark","preferredQuoteMark","_quoteMark","_syncRawValue","numSingleQuotes","numDoubleQuotes","NO_QUOTE","pref","preferCurrentQuoteMark","_handleEscapes","_spacesFor","rawSpaces","_stringFor","spaceName","defaultAttrConcat","attrSpaces","offsetOf","attributeSpaces","operatorSpaces","valueSpaces","attrValue","quoted","qm","_unescapeValue2","localStorage","backslash","doubleQuote","singleQuote","greaterThan","pipe","plus","BitSet","bits","Chunk","intro","outro","storeName","edited","appendLeft","appendRight","contains","eachNext","eachPrevious","edit","contentOnly","prependLeft","prependRight","sliceIndex","originalBefore","originalAfter","newChunk","trimEnd","rx","trimmed","trimStart","SourceMap","sources","guessIndent","tabbed","spaced","numSpaces","getRelativePath","fromParts","toParts","getLocator","originalLines","lineOffsets","Mappings","hires","generatedCodeLine","rawSegments","pending","addEdit","addUneditedChunk","sourcemapLocations","originalCharIndex","insertLeft","insertRight","MagicString","indentExclusionRanges","indentStr","byStart","byEnd","addSourcemapLocation","_split","originalChunk","firstChunk","clonedChunk","lastSearchedChunk","nextOriginalChunk","nextClonedChunk","lastChunk","generateDecodedMap","storedNames","locate","includeContent","getIndentString","isExcluded","exclusion","shouldIndentNextCharacter","indentStart","replacer","charIndex","_splitChunk","move","oldLeft","oldRight","newRight","newLeft","overwrite","lastChar","lineIndex","lineStr","startChunk","containsEnd","sliceStart","sliceEnd","snip","searchForward","trimLines","charType","trimEndAborted","trimStartAborted","hasOwnProp","Bundle","separator","uniqueSources","uniqueSourceIndexByFilename","addSource","uniqueSource","bundle","magicString","indentStringCounts","trailingNewline","reAsciiWord","reLatin","rsLowerRange","rsUpperRange","rsBreakRange","rsMathOpRange","rsBreak","rsCombo","rsDigits","rsLower","rsMisc","rsFitz","rsNonAstral","rsRegional","rsSurrPair","rsUpper","rsLowerMisc","rsUpperMisc","rsOptLowerContr","rsOptUpperContr","reOptMod","rsModifier","rsOptVar","rsSeq","rsEmoji","rsSymbol","reApos","reComboMark","reUnicode","reUnicodeWord","reHasUnicode","reHasUnicodeWord","freeSelf","deburrLetter","hasUnicode","symbolProto","symbolToString","isObjectLike","baseToString","camelCase","upperFirst","iteratee","accumulator","initAccum","arrayReduce","guard","hasUnicodeWord","unicodeWords","asciiWords","words","deburr","strSymbols","unicodeToArray","asciiToArray","stringToArray","chr","trailing","baseSlice","interpolateName","loaderContext","resourcePath","loaderOptions","_icssReplaceSymbols2","importRegexp","pathFetcher","trace","translations","fetchAllImports","linkImportedSymbols","extractExports","imports","fetchImport","handleExport","exportNode","translation","relativeTo","depNr","depTrace","selectorParser","valueParser","extractICSS","isSpacing","normalizeNodeArray","localizeDeclNode","localizeNextItem","localAliasMap","rewriteUrl","nestedNode","newUrl","localizeDeclarationValues","localize","valueNodes","subContext","localizeDeclaration","validIdent","animationKeywords","$alternate","$backwards","$both","$ease","$forwards","$infinite","$linear","$none","$normal","$paused","$reverse","$running","$initial","$inherit","$unset","didParseAnimationName","parsedAnimationKeywords","stepsFunctionNode","wordNode","functionNode","functionNodeChild","shouldParseAnimationName","pureMode","globalMode","icssImports","globalMatch","localMatch","globalKeyframes","ignoreNextSpacing","enforceNoSpacing","newNodes","resultingGlobal","hasPureGlobals","nContext","lastWasSpacing","hasLocals","childNode","childContext","isNested","isScoped","inside","addBackSpacing","isImportedValue","isImportedWithExplicitScope","innerNode","rootContext","localizeNode","ValueParser","bubble","unit","openParentheses","closeParentheses","uLower","uUpper","isUnicodeRange","whitespacePos","parenthesesOpenPos","balanced","customResult","EXP","nextCode","nextNextCode","likeNumber","replaceValueSymbols","replaceSymbols","createICSSRules","importPattern","balancedQuotes","getDeclsObject","removeRules","icssExports","addImports","unquoted","addExports","createImports","hasDeclarations","createExports","topologicalSort","matchImports","icssImport","addImportToGraph","importId","parentId","graph","visited","siblingsId","visitedId","siblings","importIndex","createImportedName","failOnWrongOrder","existingImports","importDecls","doubleQuotePath","singleQuotePath","importPath","tmpSymbols","parentIndexes","importsOrder","lastImportRule","importedSymbols","importedSymbol","walkGraph","relatedNode","createError","_helperPluginUtils","_pluginSyntaxClassStaticBlock","_helperCreateClassFeaturesPlugin","denyList","staticBlocks","ClassBody","staticBlockPrivateId","staticBlockRef","pathOrNode","isPureAnnotated","_pluginSyntaxPrivatePropertyInObject","_helperAnnotateAsPure","classWeakSets","injectToFieldInit","fieldPath","classPath","firstFieldPath","consturctorPath","getWeakSetId","weakSets","outerClass","inject","newExpr","privateIn","BinaryExpression","privateElement","findParent","targetScope","unshadow","_outerClass$node$id","fieldsWeakSets","privateMethods","_pluginSyntaxLogicalAssignmentOperators","_pluginSyntaxNullishCoalescingOperator","_api$assumption","LogicalExpression","findOutermostTransparentParent","isTransparentExprWrapper","isSimpleMemberExpression","skipTransparentExprWrappers","willReplacementCastToBoolean","optionals","optionalPath","childKey","childPath","needsMemoize","isCall","replaceKey","chainWithTypes","pureGetters","returnValue","syntaxOptionalChaining","_pluginSyntaxExportNamespaceFrom","_exported$name","replaceWithMultiple","OriginalRegExp","originalExec","PolyfilledRegExp","_sticky","ArrayBufferViewCore","internalSort","FF","IE_OR_EDGE","V8","WEBKIT","nativeSort","ACCEPT_INCORRECT_ARGUMENTS","STABLE_SORT","arrayLength","getSortCompare","$","task","$propertyIsEnumerable","NASHORN_BUG","internalObjectKeys","targetBrowserBabelPluginsHash","isProd","formatErrorLineColumn","valueList","hashInstance","withCache","cacheInstance","valueFactory","cachePrevented","preventCache","hashedKey","valueStr","Loading","targetBrowserBabelPlugins","transformJSCode","moduleSourceType","additionalBabelParserPlugins","additionalBabelPlugins","ex","fileAst","CallExpression","requireList","parseDeps","loadModuleInternal","pathCx","moduleCache","loadModule","handleModule","getContent","getResource","getContentData","strFilename","component","delimiters","compiledCache","addStyle","customBlockHandler","customBlockCallbacks","customBlocks","componentHash","hasScoped","scoped","__scopeId","refPath","relPath","compileTemplateOptions","compiler","slotted","compilerOptions","preprocessLang","preprocessCustomRequire","script","scriptSetup","depsList","transformedScriptSource","scriptBlock","babelParserPlugins","inlineTemplate","templateOptions","bindingMetadata","loadDeps","createCJSModule","templateDepsList","templateTransformedSource","tips","descStyle","compiledStyle","createSFCModule","createJSModule","defaultHandleModule","pathResolve","transformedSource","deps","throwNotDefined","defaultPathResolve","relPathStr","defaultGetResource","getFile","pathStr","asBinary","normalizedOptions","buildTemplateProcessor","render","preprocessOptions","priorityQueue","shouldVisit","maybeQueue","notPriority","visitMultiple","visitQueue","visitSingle","resync","pushContext","popContext","tagName","_cleanJSXElementLiteralChild","countArgs","isFirst","defineInterfaceishType","typeParameterType","bool","tSFunctionTypeAnnotationCommon","signatureDeclarationCommon","callConstructSignatureDeclaration","namedTypeElementCommon","tsKeywordTypes","fnOrCtrBase","unionOrIntersection","_node$type","assertArrayExpression","assertAssignmentExpression","assertBinaryExpression","assertInterpreterDirective","assertDirective","assertDirectiveLiteral","assertBlockStatement","assertBreakStatement","assertCallExpression","assertCatchClause","assertConditionalExpression","assertContinueStatement","assertDebuggerStatement","assertDoWhileStatement","assertEmptyStatement","assertExpressionStatement","assertFile","assertForInStatement","assertForStatement","assertFunctionDeclaration","assertFunctionExpression","assertIdentifier","assertIfStatement","assertLabeledStatement","assertStringLiteral","assertNumericLiteral","assertNullLiteral","assertBooleanLiteral","assertRegExpLiteral","assertLogicalExpression","assertMemberExpression","assertNewExpression","assertProgram","assertObjectExpression","assertObjectMethod","assertObjectProperty","assertRestElement","assertReturnStatement","assertSequenceExpression","assertParenthesizedExpression","assertSwitchCase","assertSwitchStatement","assertThisExpression","assertThrowStatement","assertTryStatement","assertUnaryExpression","assertUpdateExpression","assertVariableDeclaration","assertVariableDeclarator","assertWhileStatement","assertWithStatement","assertAssignmentPattern","assertArrayPattern","assertArrowFunctionExpression","assertClassBody","assertClassExpression","assertClassDeclaration","assertExportAllDeclaration","assertExportDefaultDeclaration","assertExportNamedDeclaration","assertExportSpecifier","assertForOfStatement","assertImportDeclaration","assertImportDefaultSpecifier","assertImportNamespaceSpecifier","assertImportSpecifier","assertMetaProperty","assertClassMethod","assertObjectPattern","assertSpreadElement","assertSuper","assertTaggedTemplateExpression","assertTemplateElement","assertTemplateLiteral","assertYieldExpression","assertAwaitExpression","assertImport","assertBigIntLiteral","assertExportNamespaceSpecifier","assertOptionalMemberExpression","assertOptionalCallExpression","assertAnyTypeAnnotation","assertArrayTypeAnnotation","assertBooleanTypeAnnotation","assertBooleanLiteralTypeAnnotation","assertNullLiteralTypeAnnotation","assertClassImplements","assertDeclareClass","assertDeclareFunction","assertDeclareInterface","assertDeclareModule","assertDeclareModuleExports","assertDeclareTypeAlias","assertDeclareOpaqueType","assertDeclareVariable","assertDeclareExportDeclaration","assertDeclareExportAllDeclaration","assertDeclaredPredicate","assertExistsTypeAnnotation","assertFunctionTypeAnnotation","assertFunctionTypeParam","assertGenericTypeAnnotation","assertInferredPredicate","assertInterfaceExtends","assertInterfaceDeclaration","assertInterfaceTypeAnnotation","assertIntersectionTypeAnnotation","assertMixedTypeAnnotation","assertEmptyTypeAnnotation","assertNullableTypeAnnotation","assertNumberLiteralTypeAnnotation","assertNumberTypeAnnotation","assertObjectTypeAnnotation","assertObjectTypeInternalSlot","assertObjectTypeCallProperty","assertObjectTypeIndexer","assertObjectTypeProperty","assertObjectTypeSpreadProperty","assertOpaqueType","assertQualifiedTypeIdentifier","assertStringLiteralTypeAnnotation","assertStringTypeAnnotation","assertSymbolTypeAnnotation","assertThisTypeAnnotation","assertTupleTypeAnnotation","assertTypeofTypeAnnotation","assertTypeAlias","assertTypeAnnotation","assertTypeCastExpression","assertTypeParameter","assertTypeParameterDeclaration","assertTypeParameterInstantiation","assertUnionTypeAnnotation","assertVariance","assertVoidTypeAnnotation","assertEnumDeclaration","assertEnumBooleanBody","assertEnumNumberBody","assertEnumStringBody","assertEnumSymbolBody","assertEnumBooleanMember","assertEnumNumberMember","assertEnumStringMember","assertEnumDefaultedMember","assertIndexedAccessType","assertOptionalIndexedAccessType","assertJSXAttribute","assertJSXClosingElement","assertJSXElement","assertJSXEmptyExpression","assertJSXExpressionContainer","assertJSXSpreadChild","assertJSXIdentifier","assertJSXMemberExpression","assertJSXNamespacedName","assertJSXOpeningElement","assertJSXSpreadAttribute","assertJSXText","assertJSXFragment","assertJSXOpeningFragment","assertJSXClosingFragment","assertNoop","assertPlaceholder","assertV8IntrinsicIdentifier","assertArgumentPlaceholder","assertBindExpression","assertClassProperty","assertPipelineTopicExpression","assertPipelineBareFunction","assertPipelinePrimaryTopicReference","assertClassPrivateProperty","assertClassPrivateMethod","assertImportAttribute","assertDecorator","assertDoExpression","assertExportDefaultSpecifier","assertPrivateName","assertRecordExpression","assertTupleExpression","assertDecimalLiteral","assertStaticBlock","assertModuleExpression","assertTSParameterProperty","assertTSDeclareFunction","assertTSDeclareMethod","assertTSQualifiedName","assertTSCallSignatureDeclaration","assertTSConstructSignatureDeclaration","assertTSPropertySignature","assertTSMethodSignature","assertTSIndexSignature","assertTSAnyKeyword","assertTSBooleanKeyword","assertTSBigIntKeyword","assertTSIntrinsicKeyword","assertTSNeverKeyword","assertTSNullKeyword","assertTSNumberKeyword","assertTSObjectKeyword","assertTSStringKeyword","assertTSSymbolKeyword","assertTSUndefinedKeyword","assertTSUnknownKeyword","assertTSVoidKeyword","assertTSThisType","assertTSFunctionType","assertTSConstructorType","assertTSTypeReference","assertTSTypePredicate","assertTSTypeQuery","assertTSTypeLiteral","assertTSArrayType","assertTSTupleType","assertTSOptionalType","assertTSRestType","assertTSNamedTupleMember","assertTSUnionType","assertTSIntersectionType","assertTSConditionalType","assertTSInferType","assertTSParenthesizedType","assertTSTypeOperator","assertTSIndexedAccessType","assertTSMappedType","assertTSLiteralType","assertTSExpressionWithTypeArguments","assertTSInterfaceDeclaration","assertTSInterfaceBody","assertTSTypeAliasDeclaration","assertTSAsExpression","assertTSTypeAssertion","assertTSEnumDeclaration","assertTSEnumMember","assertTSModuleDeclaration","assertTSModuleBlock","assertTSImportType","assertTSImportEqualsDeclaration","assertTSExternalModuleReference","assertTSNonNullExpression","assertTSExportAssignment","assertTSNamespaceExportDeclaration","assertTSTypeAnnotation","assertTSTypeParameterInstantiation","assertTSTypeParameterDeclaration","assertTSTypeParameter","assertExpression","assertBinary","assertScopable","assertBlockParent","assertBlock","assertStatement","assertTerminatorless","assertCompletionStatement","assertConditional","assertLoop","assertWhile","assertExpressionWrapper","assertFor","assertForXStatement","assertFunctionParent","assertPureish","assertDeclaration","assertPatternLike","assertLVal","assertTSEntityName","assertLiteral","assertImmutable","assertUserWhitespacable","assertMethod","assertObjectMember","assertProperty","assertUnaryLike","assertPattern","assertClass","assertModuleDeclaration","assertExportDeclaration","assertModuleSpecifier","assertFlow","assertFlowType","assertFlowBaseAnnotation","assertFlowDeclaration","assertFlowPredicate","assertEnumBody","assertEnumMember","assertJSX","assertPrivate","assertTSTypeElement","assertTSType","assertTSBaseType","assertNumberLiteral","assertRegexLiteral","assertRestProperty","assertSpreadProperty","flattened","typeAnnotations","TSBASETYPE_TYPES","TSTYPE_TYPES","TSTYPEELEMENT_TYPES","PRIVATE_TYPES","JSX_TYPES","ENUMMEMBER_TYPES","ENUMBODY_TYPES","FLOWPREDICATE_TYPES","FLOWDECLARATION_TYPES","FLOWBASEANNOTATION_TYPES","FLOWTYPE_TYPES","FLOW_TYPES","MODULESPECIFIER_TYPES","EXPORTDECLARATION_TYPES","MODULEDECLARATION_TYPES","CLASS_TYPES","PATTERN_TYPES","UNARYLIKE_TYPES","PROPERTY_TYPES","OBJECTMEMBER_TYPES","METHOD_TYPES","USERWHITESPACABLE_TYPES","IMMUTABLE_TYPES","LITERAL_TYPES","TSENTITYNAME_TYPES","LVAL_TYPES","PATTERNLIKE_TYPES","DECLARATION_TYPES","PUREISH_TYPES","FUNCTIONPARENT_TYPES","FUNCTION_TYPES","FORXSTATEMENT_TYPES","FOR_TYPES","EXPRESSIONWRAPPER_TYPES","WHILE_TYPES","LOOP_TYPES","CONDITIONAL_TYPES","COMPLETIONSTATEMENT_TYPES","TERMINATORLESS_TYPES","STATEMENT_TYPES","BLOCK_TYPES","BLOCKPARENT_TYPES","SCOPABLE_TYPES","BINARY_TYPES","EXPRESSION_TYPES","increment","declars","_gatherSequenceExpressions","gatherSequenceExpressions","exprs","ensureLastUndefined","newType","mustHaveId","numerator","isPlainObject","nodeKey","handlers","traverseSimpleImpl","visitorKeys","RESERVED_WORDS_ES3_ONLY","renameVisitor","skipAllButComputedMethodKey","maybeConvertFromExportDeclaration","parentDeclar","maybeExportDeclar","maybeConvertFromClassFunctionDeclaration","maybeConvertFromClassFunctionExpression","blockToTraverse","_cachedMap","_code","_rawMappings","_lastGenLine","_lastSourceLine","_lastSourceColumn","getRawMappings","generatedLine","generatedColumn","_buffer","generatorFunctions","SCIENTIFIC_NOTATION","ZERO_DECIMAL_INTEGER","NON_DECIMAL_LITERAL","PURE_ANNOTATION_RE","Printer","inForStatementInitCounter","_printStack","_indent","_insideAux","_parenPushNewlineState","_noLineTerminator","_printAuxAfterOnNextUserNode","_printedComments","_endsWithInteger","_endsWithWord","_buf","_maybeAddAuxComment","dedent","_append","rightBrace","removeLastSemicolon","hasContent","_newline","removeTrailingNewline","_catchUp","withSource","_maybeAddParen","_maybeIndent","_getIndent","parenPushNewlineState","cha","chaPost","getCurrentLine","startTerminatorless","isLabel","endTerminatorless","oldConcise","printMethod","oldInAux","_printLeadingComments","_printTrailingComments","enteredPositionlessNode","_printAuxBeforeComment","_printAuxAfterComment","_printComment","newlineOpts","addNewlines","_printNewline","printAndIndentOnComments","printBlock","_printComments","_getComments","_node$innerComments","printSequence","commaSeparator","leading","skipNewLines","isBlockComment","printNewLines","_comment$loc","newlineRegex","indentSize","getCurrentColumn","inlinePureAnnotation","_node$assertions","Noop","SPACES_RE","_last","_queue","_position","_sourcePosition","_disallowedPop","_flush","trimRight","rawMappings","_mark","_this$_map","suffix","_disallowPop","_normalizePosition","originalLine","originalColumn","originalFilename","originalIdentifierName","targetObj","origLine","origColumn","origFilename","hasCall","hasFunction","hasHelper","isHelper","SwitchCase","Literal","OptionalCallExpression","IfStatement","ObjectTypeProperty","ObjectTypeCallProperty","_parent$properties","ObjectTypeIndexer","_parent$properties2","_parent$callPropertie","ObjectTypeInternalSlot","_parent$properties3","_parent$callPropertie2","_parent$indexers","amounts","NullableTypeAnnotation","FunctionTypeAnnotation","hasPostfixPart","isClassExtendsClause","isFirstInContext","arrowBody","DoExpression","Binary","parentOp","parentPos","PRECEDENCE","nodeOp","nodePos","IntersectionTypeAnnotation","UnionTypeAnnotation","OptionalIndexedAccessType","TSAsExpression","TSTypeAssertion","TSIntersectionType","TSUnionType","TSInferType","SequenceExpression","AwaitExpression","YieldExpression","exportDefault","UnaryLike","ConditionalExpression","OptionalMemberExpression","isFollowedByBracket","forHead","forInHead","forOfHead","in","instanceof","TaggedTemplateExpression","TemplateElement","TemplateLiteral","ParenthesizedExpression","NewExpression","ThisExpression","Decorator","Import","EmptyStatement","ExpressionStatement","BindExpression","MemberExpression","MetaProperty","V8IntrinsicIdentifier","ModuleExpression","buildYieldAwait","terminatorState","WithStatement","needsBlock","getLastStatement","ForStatement","WhileStatement","DoWhileStatement","TryStatement","SwitchStatement","cas","DebuggerStatement","hasInits","constDeclarationIndent","variableDeclarationIndent","ThrowStatement","BreakStatement","ReturnStatement","ContinueStatement","buildForXStatement","buildLabelStatement","ClassProperty","tsPrintClassMemberModifiers","_variance","ClassPrivateProperty","_classMethodHead","ClassPrivateMethod","StaticBlock","_parameters","_param","_predicate","_functionHead","_param$leadingComment","_param$trailingCommen","hasTypesOrComments","b64","lens","getLens","validLen","placeHoldersLen","Arr","_byteLength","curByte","revLookup","uint8","extraBytes","maxChunkLength","len2","encodeChunk","lookup","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","rt","LN2","AnyTypeAnnotation","ArrayTypeAnnotation","BooleanTypeAnnotation","BooleanLiteralTypeAnnotation","NullLiteralTypeAnnotation","_interfaceish","InferredPredicate","DeclaredPredicate","DeclareModuleExports","DeclareExportDeclaration","FlowExportDeclaration","DeclareExportAllDeclaration","EnumDeclaration","EnumBooleanBody","enumExplicitType","enumBody","EnumNumberBody","EnumStringBody","EnumSymbolBody","EnumDefaultedMember","EnumBooleanMember","enumInitializedMember","EnumNumberMember","EnumStringMember","ExistsTypeAnnotation","FunctionTypeParam","GenericTypeAnnotation","ClassImplements","InterfaceExtends","_node$extends","InterfaceTypeAnnotation","andSeparator","MixedTypeAnnotation","EmptyTypeAnnotation","NumberTypeAnnotation","StringTypeAnnotation","ThisTypeAnnotation","TupleTypeAnnotation","TypeofTypeAnnotation","TypeAnnotation","TypeParameterDeclaration","TypeParameterInstantiation","TypeParameter","ObjectTypeAnnotation","ObjectTypeSpreadProperty","QualifiedTypeIdentifier","SymbolTypeAnnotation","orSeparator","TypeCastExpression","Variance","VoidTypeAnnotation","IndexedAccessType","_types2","hasExplicitType","BlockStatement","_node$directives","hasDirectives","Directive","DirectiveLiteral","unescapedDoubleQuoteRE","unescapedSingleQuoteRE","InterpreterDirective","Placeholder","spaceSeparator","JSXAttribute","JSXIdentifier","JSXNamespacedName","JSXMemberExpression","JSXSpreadAttribute","JSXExpressionContainer","JSXSpreadChild","JSXText","JSXOpeningElement","JSXClosingElement","JSXEmptyExpression","JSXOpeningFragment","JSXClosingFragment","tokenIfPlusMinus","TSTypeAnnotation","TSTypeParameterDeclaration","TSTypeParameterInstantiation","TSTypeParameter","TSParameterProperty","TSDeclareFunction","TSDeclareMethod","TSQualifiedName","TSCallSignatureDeclaration","tsPrintSignatureDeclarationBase","TSConstructSignatureDeclaration","TSPropertySignature","tsPrintPropertyOrMethodName","TSMethodSignature","TSIndexSignature","TSAnyKeyword","TSBigIntKeyword","TSUnknownKeyword","TSNumberKeyword","TSObjectKeyword","TSBooleanKeyword","TSStringKeyword","TSSymbolKeyword","TSVoidKeyword","TSUndefinedKeyword","TSNullKeyword","TSNeverKeyword","TSIntrinsicKeyword","TSThisType","TSFunctionType","tsPrintFunctionOrConstructorType","TSConstructorType","TSTypeReference","TSTypePredicate","TSTypeQuery","TSTypeLiteral","tsPrintTypeLiteralOrInterfaceBody","tsPrintBraced","TSArrayType","TSTupleType","TSOptionalType","TSRestType","TSNamedTupleMember","tsPrintUnionOrIntersectionType","TSConditionalType","TSParenthesizedType","TSTypeOperator","TSIndexedAccessType","TSMappedType","TSLiteralType","TSExpressionWithTypeArguments","TSInterfaceDeclaration","extendz","TSInterfaceBody","TSTypeAliasDeclaration","TSEnumDeclaration","TSEnumMember","TSModuleDeclaration","TSModuleBlock","TSImportType","TSImportEqualsDeclaration","TSExternalModuleReference","TSNonNullExpression","TSExportAssignment","TSNamespaceExportDeclaration","isField","getStatementParent","getEarliestCommonAncestorFrom","getDeepestCommonAncestorFrom","deepest","ancestries","earliest","ancestry","parentKey","lastCommonIndex","lastCommon","minDepth","depthLoop","shouldMatch","getAncestry","isAncestor","maybeDescendant","isDescendant","maybeAncestor","candidateTypes","getTypeAnnotation","_getTypeAnnotation","typeAnnotationInferringNodes","_inferer","inferer","inferers","validParent","declarParent","isBaseType","baseName","soft","_isBaseType","couldBeBaseType","type2","baseTypeStrictlyMatches","rightArg","genericName","_type","argumentTypes","isObjectKeys","isArrayFrom","isObjectValues","isObjectEntries","resolveCall","_infererReference","functionConstantViolations","getConstantViolationsBefore","testType","getConditionalAnnotation","testConstantViolations","violation","getTypeAnnotationBindingConstantViolations","violations","status","_guessExecutionStatusRelativeTo","inferAnnotationFromBinaryExpression","typeofPath","typeValue","getParentConditionalPath","_pathCache$get","_verifyNodeList","requeue","replaceWithSourceString","_index2","isNodeType","canHaveVariableDeclarationOrExpression","canSwapBetweenExpressionAndStatement","replaceExpressionWithStatements","_replaceWith","setScope","_pathCache$get2","functionParent","isParentAsync","isParentGenerator","_helperHoistVariables","completionRecords","getCompletionRecords","arrowFunctionToExpression","newCallee","needToAwaitFunction","needToYieldFunction","replaceInline","_containerInsertAfter","FunctionParent","firstId","evaluateTruthy","evaluate","confident","deoptPath","evaluateCached","deopt","VALID_CALLEES","INVALID_METHODS","evaluateQuasis","testResult","elemValue","wasConfident","leftConfident","rightConfident","_evaluate","stringPath","arrowFunctionToShadowed","unwrapFunctionEnvironment","hoistFunctionEnvironment","allowInsertArrow","specCompliant","noNewArrows","thisBinding","checkBinding","fnPath","thisEnvFn","inConstructor","thisPaths","argumentsPaths","newTargetPaths","superProps","superCalls","getScopeInformation","allSuperCalls","superBinding","argsBinding","getSuperBinding","superCall","argumentsBinding","argumentsChild","argsRef","newTargetBinding","targetChild","superProp","assignmentPath","updateExpr","computedKey","standardizeSuperProperty","isAssignment","argsList","fnBody","valueIdent","getSuperPropBinding","hasSuperClass","supers","getThisBinding","thisChild","makeStatementFormatter","unwrap","createTemplateBuilder","defaultOpts","templateFnCache","templateAstCache","cachedOpts","tpl","extendedTrace","_literal","NO_PLACEHOLDER","rootStack","_populate","nameSet","buildTemplateCode","buildLiteralData","defaultReplacements","isnt","allowInsideFunction","isStatementOrBlock","referencesImport","moduleSource","willIMaybeExecuteBefore","funcParent","getOuterFunction","_guessExecutionStatusRelativeToDifferentFunctions","commonPath","commonIndex","isExecutionUncertainInList","divergence","keyPosition","allStatus","executionOrderCheckedNodes","dangerous","targetKey","targetName","isConstantExpression","isExecutionUncertain","maxIndex","_call","isBlacklisted","isDenylisted","_this$opts$denylist","blacklist","shouldSkip","shouldStop","_resyncParent","_resyncList","_resyncKey","setKey","newContainer","_resyncRemoved","_markRemoved","_this$node","pathToQueue","_getQueueContexts","_this$opts","_assertUnremoved","_removeFromScope","_callRemovalHooks","shareCommentsWithSiblings","_remove","_removalHooks","hooks","updateSiblingKeys","nodes_","_containerInsertBefore","shouldInsertCurrentNode","_containerInsert","getSibling","temp","incrementBy","verifiedNodes","hoist","_hoister","breakOnScopePaths","mutableBinding","attachAfter","isCompatibleScope","getCompatibleScopes","getAttachmentPath","_getAttachmentPath","getAttachmentParentForPath","violationPath","hasOwnParamBindings","getNextScopeAttachmentParent","bodies","attachTo","insertFn","attached","getOpposite","_getCompletionRecords","canHaveBreak","shouldPopulateBreak","inCaseClause","getPrevSibling","getNextSibling","getAllNextSiblings","sibling","getAllPrevSiblings","_getKey","_getPattern","getBindingIdentifierPaths","getOuterBindingIdentifierPaths","addCompletionRecords","records","normalCompletionToBreak","completions","replaceBreakStatementInBreakCompletion","reachable","getStatementListCompletion","lastNormalCompletions","newContext","statementCompletions","caseCompletions","normalCompletions","breakCompletions","completionRecordForSwitch","BreakCompletion","NormalCompletion","hasPrev","hasNext","states","wrapper","rootVisitor","visitorType","wrapWithStateOrWrapper","mergePair","shouldIgnoreKey","ensureEntranceObjects","ensureCallbackArrays","wrapCheck","deprecatedKey","_verified","validateVisitorMethods","visitorKey","oldVisitor","newVisitor","newFn","dest","asyncIterator","AwaitValue","AsyncGenerator","wrapAsyncGenerator","awaitAsyncGenerator","asyncGeneratorDelegate","asyncToGenerator","classCallCheck","createClass","defineEnumerableProperties","objectSpread","inheritsLoose","isNativeFunction","wrapNativeSuper","interopRequireDefault","interopRequireWildcard","newArrowCheck","objectDestructuringEmpty","objectWithoutPropertiesLoose","objectWithoutProperties","assertThisInitialized","possibleConstructorReturn","createSuper","superPropBase","taggedTemplateLiteral","taggedTemplateLiteralLoose","readOnlyError","writeOnlyError","classNameTDZError","temporalUndefined","tdz","temporalRef","slicedToArray","slicedToArrayLoose","toConsumableArray","arrayWithoutHoles","arrayWithHoles","maybeArrayLike","iterableToArray","iterableToArrayLimit","iterableToArrayLimitLoose","unsupportedIterableToArray","arrayLikeToArray","nonIterableSpread","nonIterableRest","createForOfIteratorHelper","createForOfIteratorHelperLoose","skipFirstGeneratorNext","toPropertyKey","initializerWarningHelper","initializerDefineProperty","applyDecoratedDescriptor","classPrivateFieldLooseKey","classPrivateFieldLooseBase","classPrivateFieldGet","classPrivateFieldSet","classPrivateFieldDestructureSet","classExtractFieldDescriptor","classStaticPrivateFieldSpecGet","classStaticPrivateFieldSpecSet","classStaticPrivateMethodGet","classStaticPrivateMethodSet","classApplyDescriptorGet","classApplyDescriptorSet","classApplyDescriptorDestructureSet","classStaticPrivateFieldDestructureSet","classCheckPrivateStaticAccess","classCheckPrivateStaticFieldDescriptor","decorate","classPrivateMethodGet","classPrivateMethodSet","wrapRegExp","typeof","objectSpread2","_importBuilder","_defaultOpts","importedType","importedInterop","importingInterop","ensureNoContext","importPosition","_programPath","_programScope","_applyDefaults","importedSourceIn","_generateImport","isInit","optsList","newOpts","isNamed","isNamespace","isMod","isModuleForNode","isModuleForBabel","named","es6Default","wildcardInterop","defaultInterop","resultName","_insertStatements","targetPath","_resultName","_importedSource","_interop","rewriteThisVisitor","requeueInParent","exportMeta","rewriteBindingInitVisitorState","rewriteBindingInitVisitor","_helperSimpleAccess","rewriteReferencesVisitorState","buildImportReference","identNode","rewriteReferencesVisitor","buildBindingExportAssignmentExpression","localExpr","buildImportThrow","importData","exportedNames","programScopeIds","programScope","didTransform","bodyPath","loopBodyScope","newLoopId","nameAnonymousExports","localData","bindingKindLookup","localMetadata","getLocalMetadata","idPath","getExportSpecifierName","getLocalExportMetadata","sourceData","sourceNode","reexport","needsDefault","needsNamed","getModuleMetadata","removeModuleDeclarations","resolvedInterop","resolveImportInterop","originalGetModuleName","_pluginOpts$moduleId","_pluginOpts$moduleIds","_pluginOpts$getModule","_pluginOpts$moduleRoo","moduleName","sourceRootReplacer","allowlist","outputType","buildGlobal","buildModule","umd","buildUmd","buildVar","buildHelpers","refs","FACTORY_PARAMETERS","BROWSER_ARGUMENTS","COMMON_ARGUMENTS","AMD_ARGUMENTS","FACTORY_BODY","UMD_ROOT","getHelperReference","_plugins","_configApi","_opts$assumptions","optionDefaults","presetContext","toDescriptor","presetsDescriptors","initialPluginsDescriptors","pluginDescriptorsByPass","enhanceError","recursePresetDescriptors","rawPresets","pluginDescriptorsPass","loadPresetDescriptor","pluginContext","descs","loadPluginDescriptor","makeDescriptorLoader","apiFactory","pluginDescriptorLoader","makePluginAPI","presetDescriptorLoader","makePresetAPI","instantiatePlugin","pluginObj","validatePluginObject","inheritsDescriptor","validateIfOptionNeedsFilename","formattedPresetName","instantiatePreset","overrideOptions","validatePreset","agentsData","unpackBrowserVersions","versionsData","entry","prefix_exceptions","map2","browserVersions","validateTopLevelOptions","TopLevelOptionShape","validOptionNames","validateBooleanOption","validateStringOption","electron","targetVersions","minVersions","targetVersion","minIsUnreleased","targetsSupported","excludes","defaultIncludes","defaultExcludes","pluginSyntaxMap","compatData","shippedProposalsSyntax","support","targetEnvironments","lowestImplementedVersion","lowestTargetedVersion","auxiliaryComment","breakConfig","experimental","externalHelpers","jsxPragma","metadataUsedHelpers","modules","nonStandard","sourceMapName","stage","whitelist","resolveModuleSource","sourceMapTarget","starStarPatLast","starStarPat","starPatLast","starPat","substitution","escapeRegExp","endSep","Formatter","pluginDescriptors","descriptorToConfig","presetDescriptors","_d$file","_stack","optionsAndDescriptors","rootPath","VALIDATORS","invalidPluginPropertyError","assertVisitorHandler","makeConfigAPI","_transformation","transformRunner","PluginPass","LOADED_PLUGIN","blockHoistPlugin","priority","Block","hasChange","buckets","bucket","stableSort","_fs","_convertSourceMap","extractComments","INLINE_SOURCEMAP_REGEX","fromComment","EXTERNAL_SOURCEMAP_REGEX","inputMapContent","extractCommentsFromList","missingPluginName","helpMessage","pluginInfo","pluginNameMap","syntaxPlugin","transformPlugin","syntaxPluginInfo","getNameURLCombination","asyncDoExpressions","classProperties","classPrivateProperties","classPrivateMethods","classStaticBlock","doExpressions","exportDefaultFrom","exportNamespaceFrom","functionBind","functionSent","importMeta","importAssertions","moduleStringNames","numericSeparator","optionalChaining","pipelineOperator","recordAndTuple","throwExpressions","asyncGenerators","logicalAssignment","nullishCoalescingOperator","objectRestSpread","optionalCatchBinding","serialize","revive","serialized","_mergeMap","toComment","makeMappingKey","columnStart","buildMappingData","computeColumnSpans","eachMapping","columnEnd","allGeneratedPositionsFor","lastColumn","ORIGINAL_ORDER","mergedGenerator","defaultSource","insertedMappings","eachInputGeneratedRange","inputGeneratedRange","overlappingOriginal","findInsertionLocation","filterSortedArray","outOriginal","filterApplicableOriginalRanges","eachOverlappingGeneratedOutputRange","clearItem","transformFromAstRunner","parseRunner","_api$assumption2","transformImportCall","createDynamicImportTransform","strictNamespace","mjsStrictNamespace","allowCommonJSExports","getAssertion","moduleExportsVisitor","loadExpr","getImportSource","callNode","importArguments","sliceIterator","builders","dynamic","newImport","INTEROP","CompilerDOM","CompilerSSR","estreeWalker","_interopDefaultLegacy","_interopNamespace","CompilerDOM__namespace","hash__default","path__default","CompilerSSR__namespace","postcss__default","selectorParser__default","merge__default","MagicString__default","cssVarRE","genCssVarsFromList","vars","genVarName","cssVarsPlugin","$3","genCssVarsCode","varsExp","createTransformContext","createRoot","prefixIdentifiers","__isScriptSetup","transformed","processExpression","hasWarned","warnOnce","warnExperimental","rfcId","sourceToSFC","createDuplicateBlockError","isScriptSetup","createBlock","replaceRE","splitRE","padChar","padContent","emptyRE","generateSourceMap","lineOffset","isRelativeUrl","externalRE","isExternalUrl","dataUrlRE","isDataUrl","parseUrl","secondChar","parseUriParts","urlString","defaultAssetUrlOptions","includeAbsolute","tags","video","img","createAssetUrlTransformWithOptions","transformAssetUrl","wildCardAttrs","assetAttrs","basePath","getImportsExpressionExp","srcsetTags","escapedSpaceCharacters","createSrcsetTransformWithOptions","transformSrcset","imageCandidates","compoundExpression","existingImportsIndex","isNotLast","constType","preprocess","preprocessor","_err","compileTemplate","doCompileTemplate","inMap","ssr","ssrCssVars","transformAssetUrls","assetOptions","shortId","longId","preamble","hoistStatic","cacheHandlers","onWarn","oldMap","newMap","oldMapConsumer","newMapConsumer","mergedMapGenerator","origPosInOldMap","_sources","sourceContent","_sourceRoot","mapLines","originalSource","patchErrors","generateCodeFrame","trimPlugin","animationNameRE","animationRE","scopedPlugin","keyframes","processedRules","selectorRoot","rewriteSelector","processRule","shouldInject","ss","isSpaceCombinator","idToAdd","scss","nodeSass","finalOptions","additionalData","outFile","renderSync","includedFiles","styl","nodeStylus","sourcemap","processors","less","nodeLess","syncImport","sass","indentedSyntax","stylus","defaultExportRE","namedDefaultExportRE","exportDefaultClassRE","hasDefaultExport","DEFINE_PROPS","DEFINE_EMIT","DEFINE_EXPOSE","WITH_DEFAULTS","DEFINE_EMITS","rangeNode","walkDeclaration","userImportAlias","isDefineCall","isCallOf","userReactiveBinding","canNeverBeRef","walkObjectPattern","walkArrayPattern","walkPattern","recordType","declaredTypes","inferRuntimeType","extractEventNames","eventName","emits","markScopeIdentifier","knownIds","scopeIds","walkIdentifiers","onIdentifier","parentStack","isStaticPropertyKey","isInDestructureAssignment","isRefIdentifier","extractIdentifiers","inPattern","isStaticProperty","userReactiveImport","analyzeScriptBindings","analyzeBindingsFromOptions","bodyItem","getObjectExpressionKeys","getObjectOrArrayExpressionKeys","getArrayExpressionKeys","toTextRange","sfc","enableRefSugar","refSugar","parseOnly","locStub","cssVars","scriptLang","scriptSetupLang","isTS","babelParserDefaultPlugins","scriptAst","as","parserPlugins","replaced","classMatch","rewriteDefault","genNormalScriptCssVarsCode","scriptBindings","scriptSetupBindings","helperImports","userImports","setupBindings","refBindings","refIdentifiers","defaultExport","propsRuntimeDecl","propsRuntimeDefaults","propsTypeDecl","propsTypeDeclRaw","propsIdentifier","emitsRuntimeDecl","emitsTypeDecl","emitsTypeDeclRaw","emitIdentifier","hasDefinePropsCall","hasDefineEmitCall","hasDefineExposeCall","hasInlinedSsrRenderFn","typeDeclaredProps","typeDeclaredEmits","startOffset","endOffset","scriptStartOffset","scriptEndOffset","registerUserImport","isFromSetup","processDefineProps","resolveQualifiedType","processWithDefaults","processDefineEmits","isQualifiedType","scriptSetupAst","qualified","processDefineExpose","checkInvalidScopeReference","processRefExpression","registerRefBinding","processRefObjectPattern","processRefArrayPattern","nameId","defaultSpecifier","removeSpecifier","removeLeft","isDefineProps","isDefineEmits","propsRuntimeArg","propsTypeArg","emitsRuntimeArg","emitsTypeArg","withDefaultsArg","extractRuntimeProps","extractRuntimeEmits","destructureElements","UNREF","allBindings","runtimeOptions","hasStaticDefaults","propsDecls","defaultString","genRuntimeProps","exposeCall","modulesOptions","postcssOptions","postcssPlugins","preProcessedSource","preprocess$1","cssModules","_cssFileName","postCSSOptions","outMap","recordPlainCssDependencies","rawResult","doCompileStyle","sourceKey","hasSrc","templateBlock","functional","isSetup","styleBlock","genMap","parseCssVars","slottedRE","defaultOnError","defaultOnWarn","additionalMessage","errorMessages","TELEPORT","SUSPENSE","BASE_TRANSITION","OPEN_BLOCK","CREATE_BLOCK","CREATE_VNODE","CREATE_COMMENT","CREATE_TEXT","RESOLVE_COMPONENT","RESOLVE_DYNAMIC_COMPONENT","RESOLVE_DIRECTIVE","RESOLVE_FILTER","WITH_DIRECTIVES","RENDER_LIST","RENDER_SLOT","CREATE_SLOTS","MERGE_PROPS","TO_HANDLERS","CAMELIZE","CAPITALIZE","TO_HANDLER_KEY","SET_BLOCK_TRACKING","PUSH_SCOPE_ID","POP_SCOPE_ID","WITH_SCOPE_ID","WITH_CTX","IS_REF","helperNameMap","components","temps","createVNodeCall","dynamicProps","disableTracking","createArrayExpression","createObjectExpression","createFunctionExpression","returns","createConditionalExpression","createCacheExpression","isVNode","hyphenate","isCoreComponent","nonIdentifierRE","isSimpleIdentifier","validFirstIdentCharRE","validIdentCharRE","whitespaceRE","prevState","currentOpenBracketCount","currentStringType","getInnerRange","newLoc","advancePositionWithClone","numberOfCharacters","advancePositionWithMutation","linesCount","lastNewLinePos","findDir","dynamicOnly","isBindKey","isText","isVSlot","isTemplateNode","isSlotOutlet","injectProp","propsWithInjection","alreadyExists","propKeyName","toValidAssetId","hasScopeRef","branches","deprecationData","link","getCompatValue","compatConfig","isCompatEnabled","decodeRE","decodeMap","defaultParserOptions","NO","p1","rawOptions","inPre","inVPre","createParserContext","getCursor","parseChildren","getSelection","isEnd","parseInterpolation","emitError","parseComment","parseBogusComment","parseCDATA","advanceBy","parseTag","isSpecialTemplateDirective","parseText","removedWhitespace","preserve","nestedIndex","contentStart","closeIndex","wasInPre","wasInVPre","isPreBoundary","isVPreBoundary","isSelfClosing","inlineTemplateProp","startsWithEndTagOpen","advanceSpaces","cursor","currentSource","parseAttributes","attributeNames","parseAttribute","isQuoted","endIndex","parseTextData","unexpectedChars","parseAttributeValue","dirName","getNewPosition","valueLoc","innerStart","innerEnd","rawContentLength","rawContent","preTrimContent","endTokens","xs","searchString","isSingleElementRoot","doNotHoistNode","hasHoistedNode","canStringify","constantType","getConstantType","getPatchFlag","getGeneratedPropsConstantType","getNodeProps","contentType","constantCache","generatedPropsType","childType","expType","removeHelper","keyType","valueType","NOOP","expressionPlugins","EMPTY_OBJ","nameMatch","selfName","camelize","identifiers","vFor","vPre","vOnce","childIndex","currentCount","replaceNode","removalIndex","onNodeRemoved","addIdentifiers","addId","removeIdentifiers","removeId","filters","traverseNode","PatchFlagNames","createRootCodegen","exitFns","onExit","nodeRemoved","traverseChildren","createStructuralDirectiveTransform","PURE_ANNOTATION","createCodegenContext","sourceMap$1","optimizeImports","runtimeGlobalName","runtimeModuleName","pure","deindent","withoutNewLine","onContextCreated","hasHelpers","useWithBlock","genScopeId","isSetupInlined","preambleContext","ssrHelpers","importsOptions","genNode","genImports","genHoists","genModulePreamble","VueBinding","aliasHelper","genFunctionPreamble","functionName","genAssets","assets","maybeSelfReference","genNodeListAsArray","multilines","isText$1","genNodeList","genText","genExpression","genInterpolation","genCompoundExpression","genComment","genNullableArgs","genVNodeCall","genCallExpression","genExpressionAsPropertyKey","genObjectExpression","genArrayExpression","isNonScopedSlot","genFunctionExpression","needNewline","genConditionalExpression","genCacheExpression","genTemplateLiteral","genIfStatement","genAssignmentExpression","genSequenceExpression","genReturnStatement","isLiteralWhitelisted","transformExpression","asParams","asRawStatements","rewriteIdentifier","isAssignmentLVal","isUpdateArg","isDestructureAssignment","rVal","rExpString","stringifyExpression","rawExp","isPrefix","bailConstant","isScopeVarReference","isAllowedGlobal","isGloballyWhitelisted","needPrefix","shouldPrefix","leadingText","transformIf","processIf","ifNode","branch","isRoot","createCodegenNodeForBranch","getParentCondition","processCodegen","createIfBranch","userKey","isSameKey","keyIndex","createChildrenCodegenNode","keyProperty","vnodeCall","branchExp","transformFor","processFor","forNode","renderExp","keyProp","isStableFragment","fragmentFlag","childBlock","isTemplate","needFragmentWrapper","slotOutlet","createForLoopParams","parseResult","parseForExpression","valueAlias","keyAlias","objectIndexAlias","forAliasRE","forIteratorRE","stripParensRE","inMatch","LHS","RHS","createAliasExpression","valueContent","trimmedOffset","iteratorMatch","keyContent","keyOffset","indexContent","defaultFallback","trackSlotScopes","slotProps","trackVForSlotScopes","buildClientSlotFn","buildSlots","buildSlotFn","slotsProperties","dynamicSlots","hasDynamicSlots","onComponentSlot","hasTemplateSlots","hasNamedDefaultSlot","implicitDefaultChildren","seenSlotNames","slotElement","slotDir","slotChildren","slotLoc","slotName","dirLoc","staticSlotName","slotFunction","vIf","vElse","buildDynamicSlot","conditional","buildDefaultSlotProperty","isNonWhitespaceContent","hasForwardedSlots","directiveImportMap","transformElement","vnodeProps","vnodeChildren","vnodePatchFlag","vnodeDynamicProps","vnodeDirectives","vnodeTag","resolveComponentType","shouldUseBlock","propsBuildResult","dirArgs","runtime","fromSetup","resolveSetupReference","trueExpression","buildDirectiveArgs","hasDynamicTextChild","propsNamesString","stringifyDynamicPropNames","isExplicitDynamic","isComponentTag","isProp","isDir","builtIn","camelName","PascalName","fromConst","fromMaybeRef","elementLoc","runtimeDirectives","hasVnodeHook","analyzePatchFlag","isEventHandler","isReservedProp","isVBind","isVOn","directiveTransform","camelizeRE","cacheStringFunction","transformSlotOutlet","processSlotOutlet","slotArgs","nonNameProps","fnExpRE","augmentor","rawName","toHandlerKey","shouldCache","isMemberExp","isInlineStatement","hasMultipleStatements","transformBind","transformText","currentContainer","hasText","callArgs","transformOnce","createTransformProps","expString","maybeRef","assignmentExp","eventArg","altAssignment","modifiersKey","validDivisionCharRE","transformFilter","rewriteFilter","parseFilter","inSingle","inDouble","inTemplateString","inRegex","curly","square","paren","lastFilterIndex","pushFilter","wrapFilter","getBaseTransformPreset","isModuleMode","createAssignmentExpression","createBlockStatement","createIfStatement","createInterpolation","createReturnStatement","createSequenceExpression","createTemplateLiteral","warnDeprecation","expectsLowerCase","specialBooleanAttrs","isSpecialBooleanAttr","isBooleanAttr","unsafeAttrCharRE","attrValidationCache","isNoUnitNumericStyleProp","listDelimiterRE","propertyDelimiterRE","escapeRE","commentStripRE","looseEqual","aValidType","bValidType","looseCompareArrays","aHasKey","bHasKey","toTypeString","hyphenateRE","_globalThis","EMPTY_ARR","escapeHtmlComment","lineLength","getGlobalThis","hasChanged","invokeArrayFns","isIntegerKey","isModelListener","isSSRSafeAttrName","isUnsafe","looseIndexOf","propsToAttrMap","acceptCharset","htmlFor","httpEquiv","slotFlagsText","normalizedKey","toNumber","toRawType","Url","slashes","auth","hostname","pathname","href","urlParse","resolveObject","protocolPattern","portPattern","simplePathPattern","unwise","autoEscape","nonHostChars","hostEndingChars","hostnamePartPattern","hostnamePartStart","unsafeProtocol","hostlessProtocol","slashedProtocol","querystring","parseQueryString","slashesDenoteHost","queryIndex","splitter","uSplit","simplePath","lowerProto","atSign","hostEnd","hec","parseHost","ipv6Hostname","hostparts","newpart","validParts","notHost","bit","toASCII","ae","rel","tkeys","tk","tkey","rkeys","rk","rkey","isSourceAbs","isRelAbs","mustEndAbs","removeAllDots","srcPath","psychotic","authInHost","hasTrailingSlash","up","nextLine","nextOffset","tokenType","fix","consumeWord","_unescapable","_wordDelimiters","unescapable","wordDelimiters","hexChars","consumeEscape","hexDigits","isPseudoElement","isPseudoClass","isPseudo","isContainer","isAttribute","isTag","isUniversal","isSelector","isNesting","isComment","isCombinator","isClassName","_IS_TYPE","IS_TYPE","replaceAll","matchConstName","_fs2","_path2","Core","defaultPlugins","sourceString","injectableSource","traceKeySorter","traces","importNr","core","tokensByFile","_newPath","_trace","newPath","relativeDir","rootRelativePath","fileRelativePath","readFile","written","_stringHash2","cssFile","writeFile","_postcssModulesScope2","_postcssModulesValues2","_postcssModulesLocalByDefault2","_postcssModulesExtractImports2","getId","setId","methodId","initNodes","privateNameHandlerLoose","privateNameHandlerSpec","privateNameVisitor","privateInVisitor","innerBindingRef","injectSuperRef","needsClassRef","ts","assertFieldTransformed","isPublic","replaceThisContext","buildPrivateFieldInitLoose","buildPrivateStaticFieldInitSpec","buildPublicFieldInitLoose","buildPublicFieldInitSpec","buildPrivateInstanceFieldInitSpec","buildPrivateMethodInitLoose","buildPrivateMethodDeclaration","buildPrivateInstanceMethodInitSpec","buildPrivateStaticMethodInitLoose","privateNameVisitorFactory","visiblePrivateNames","redeclared","nestedVisitor","receiver","BASE","REF","PROP","initAdded","getterDeclared","setterDeclared","isGetter","isSetter","declId","thisContextVisitor","innerReferencesVisitor","_state$classRef","renamer","isDerived","newConstructor","bareSupers","findBareSupers","bareSuper","classBinding","computedPath","handleClassTDZ","classFieldDefinitionEvaluationTDZVisitor","computedNode","throwNode","resolvedLoose","higherPriorityPluginName","hasFeature","canIgnoreLoose","featuresKey","setLoose","looseLowPriorityKey","mask","featuresSameLoose","looseKey","__webpack_module_cache__","__webpack_require__","cachedModule","loaded","__webpack_modules__","definition","nmd"],"mappings":"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G,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,IAAK,GAAI,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,IAAK,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,IAAK,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,IAAK,GAAI,IAAK,EAAG,GAAI,IAAK,IAAK,IAAK,GAAI,IAAK,KAAM,KAAM,KAAM,IAAK,KAAM,IAAK,EAAG,GAAI,IAAK,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,IAAK,GAAI,IAAK,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,KAAM,EAAG,KAAM,GAAI,EAAG,KAAM,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,KAAM,IAAK,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,KAAM,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,KAAM,GAAI,GAAI,EAAG,GAAI,EAAG,IAAK,GAAI,KAAM,IAAK,GAAI,GAAI,EAAG,EAAG,KAAM,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,KAAM,MAAO,GAAI,KAAM,GAAI,IAAK,EAAG,KAAM,GAAI,KAAM,KAAM,IAAK,KAAM,MAC3wDC,EAAwB,CAAC,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,KAAM,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,GAAI,IAAK,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG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ACT,QAAS,KACT,QAAS,KACT,QAAS,IACT,QAAS,IACT,QAAS,KACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,KACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,KACT,QAAS,KACT,QAAS,KACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,KACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,KACT,QAAS,IACT,QAAS,KACT5B,MAAO,IACPgC,MAAO,IACP,QAAS,IACT,QAAS,IACT,QAAS,IACT7E,MAAO,IACP,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,KACT,QAAS,KACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,KACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,KACT,QAAS,KACT,QAAS,KACT,QAAS,KACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,KACT,QAAS,KACT,QAAS,KACT,QAAS,KACT,QAAS,IACT,QAAS,IACTU,MAAO,IACP,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,KACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,KACT,QAAS,KACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,KACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,KACT,QAAS,IACT,QAAS,IACT,QAAS,IACTU,MAAO,IACP,QAAS,IACT,QAAS,IACT,QAAS,KACT,QAAS,KACT,QAAS,IACT,QAAS,KACT,QAAS,KACT,QAAS,KACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,KACT,QAAS,IACT,QAAS,KACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,KACT,QAAS,KACT,QAAS,IACT,QAAS,IACT,QAAS,KACT,QAAS,IACT,QAAS,KACT,QAAS,KACT,QAAS,KACT,QAAS,KACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,KACT,QAAS,KACT,QAAS,KACT,QAAS,KACT,QAAS,KACT,QAAS,IACT,QAAS,IACT+B,MAAO,IACPgC,MAAO,IACP,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,KACT,QAAS,KACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,KACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,KACTjF,MAAO,IACP,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,KACT,QAAS,KACT,QAAS,IACT,QAAS,IACT,QAAS,KACT,QAAS,KACT,QAAS,KACT,QAAS,IACT,QAAS,IACT,QAAS,KACT,QAAS,IACT,QAAS,IACTwB,MAAO,IACP,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,KACT,QAAS,IACT,QAAS,IACT,QAAS,KACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,KACT,QAAS,KACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,KACT,QAAS,KACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACToC,MAAO,IACP,QAAS,IACT,QAAS,IACTD,MAAO,IACPgC,MAAO,IACPvC,MAAO,IACP,QAAS,IACT,QAAS,IACT,QAAS,KACT,QAAS,KACT,QAAS,IACT,QAAS,IACT,QAAS,KACT,QAAS,KACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACTI,MAAO,IACPgC,MAAO,IACP,QAAS,IACT,QAAS,KACT,QAAS,KACT,QAAS,IACT,QAAS,IACT,QAAS,KACT,QAAS,KACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,KACT,QAAS,KACT,QAAS,KACT,QAAS,KACT,QAAS,KACT,QAAS,KACT,QAAS,KACT,QAAS,KACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,KACT,QAAS,KACT,QAAS,KACT,QAAS,KACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,KACT,QAAS,KACT,QAAS,KACT,QAAS,KACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,KACT,QAAS,KACT,QAAS,KACT,QAAS,IACT1D,OAAQ,IACRgC,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACVjC,OAAQ,IACRgC,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV7B,OAAQ,IACRgC,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IAC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SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACVjC,OAAQ,IACRgC,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV5B,OAAQ,IACRgC,OAAQ,IACR,SAAU,IACV,SAAU,IACV,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,KACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,KACX,UAAW,KACX,UAAW,IACX,UAAW,KACX,UAAW,KACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,KACX,UAAW,KACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,KACX,UAAW,KACX,UAAW,KACX,UAAW,KACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,KACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,KACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,KACZ,WAAY,IACZ,WAAY,IACZ,WAAY,KACZ,WAAY,KACZ,WAAY,KACZ,WAAY,IACZ,WAAY,KACZ,WAAY,KACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,KACb,YAAa,IACb,YAAa,KACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,aAAc,IACd,aAAc,IACd,aAAc,IACd,aAAc,IACd,aAAc,IACd,aAAc,IACd,aAAc,IACd,aAAc,IACd,aAAc,IACd,aAAc,IACd,aAAc,IACd,aAAc,IACd,aAAc,IACd,aAAc,IACd,aAAc,IACd,aAAc,IACd,aAAc,IACd,aAAc,IACd,aAAc,IACd,aAAc,KACd,aAAc,IACd,aAAc,IACd,aAAc,IACd,aAAc,IACd,aAAc,IACd,aAAc,IACd,aAAc,IACd,aAAc,IACd,aAAc,KACd,aAAc,IACd,aAAc,IACd,aAAc,KACd,aAAc,KACd,aAAc,IACd,aAAc,IACd,aAAc,KACd,aAAc,IACd,aAAc,IACd,aAAc,IACd,aAAc,IACd,aAAc,IACd,aAAc,IACd,aAAc,IACd,aAAc,IACd,aAAc,IACd,aAAc,IACd,aAAc,IACd,aAAc,IACd,aAAc,IACd,aAAc,IACd,aAAc,IACd,aAAc,IACd,aAAc,IACd,aAAc,IACd,aAAc,IACd,aAAc,IACd,cAAe,IACf,cAAe,IACf,cAAe,IACf,cAAe,IACf,cAAe,IACf,cAAe,IACf,cAAe,IACf,cAAe,IACf,cAAe,IACf,cAAe,IACf,cAAe,IACf,cAAe,IACf,cAAe,IACf,cAAe,IACf,cAAe,IACf,cAAe,IACf,cAAe,IACf,cAAe,IACf,cAAe,IACf,cAAe,IACf,cAAe,IACf,cAAe,IACf,cAAe,IACf,cAAe,KACf,cAAe,KACf,cAAe,IACf,cAAe,IACf,cAAe,IACf,cAAe,IACf,cAAe,IACf,cAAe,IACf,cAAe,IACf,cAAe,IACf,cAAe,IACf,cAAe,IACf,cAAe,IACf,cAAe,IACf,cAAe,KACf,cAAe,IACf,cAAe,IACf,cAAe,IACf,cAAe,IACf,cAAe,IACf,cAAe,IACf,cAAe,IACf,cAAe,IACf,eAAgB,IAChB,eAAgB,IAChB,eAAgB,IAChB,eAAgB,IAChB,eAAgB,IAChB,eAAgB,IAChB,eAAgB,IAChB,eAAgB,IAChB,eAAgB,IAChB,eAAgB,IAChB,eAAgB,IAChB,eAAgB,IAChB,eAAgB,IAChB,eAAgB,IAChB,eAAgB,IAChB,eAAgB,IAChB,eAAgB,KAChB,eAAgB,IAChB,eAAgB,IAChB,eAAgB,KAChB,eAAgB,IAChB,eAAgB,IAChB,eAAgB,IAChB,eAAgB,IAChB,eAAgB,IAChB,eAAgB,IAChB,eAAgB,IAChB,eAAgB,IAChB,eAAgB,IAChB,eAAgB,IAChB,eAAgB,IAChB,eAAgB,IAChB,eAAgB,IAChB,eAAgB,IAChB,eAAgB,IAChB,eAAgB,IAChB,eAAgB,IAChB,eAAgB,IAChB,eAAgB,IAChB,eAAgB,IAChB,gBAAiB,IACjB,gBAAiB,IACjB,gBAAiB,IACjB,gBAAiB,IACjB,gBAAiB,IACjB,gBAAiB,IACjB,gBAAiB,IACjB,gBAAiB,IACjB,gBAAiB,IACjB,gBAAiB,IACjB,gBAAiB,IACjB,gBAAiB,IACjB,gBAAiB,IACjB,gBAAiB,IACjB,gBAAiB,IACjB,gBAAiB,KACjB,gBAAiB,IACjB,gBAAiB,IACjB,gBAAiB,IACjB,gBAAiB,IACjB,gBAAiB,IACjB,gBAAiB,IACjB,gBAAiB,IACjB,gBAAiB,IACjB,gBAAiB,IACjB,gBAAiB,IACjB,gBAAiB,IACjB,gBAAiB,KACjB,gBAAiB,KACjB,gBAAiB,IACjB,iBAAkB,IAClB,iBAAkB,IAClB,iBAAkB,IAClB,iBAAkB,IAClB,iBAAkB,IAClB,iBAAkB,IAClB,iBAAkB,IAClB,iBAAkB,IAClB,iBAAkB,IAClB,iBAAkB,IAClB,iBAAkB,IAClB,iBAAkB,IAClB,iBAAkB,IAClB,iBAAkB,IAClB,iBAAkB,IAClB,iBAAkB,IAClB,iBAAkB,IAClB,iBAAkB,IAClB,iBAAkB,IAClB,iBAAkB,KAClB,iBAAkB,IAClB,iBAAkB,IAClB,iBAAkB,IAClB,iBAAkB,IAClB,iBAAkB,IAClB,iBAAkB,IAClB,iBAAkB,IAClB,iBAAkB,IAClB,iBAAkB,IAClB,iBAAkB,IAClB,iBAAkB,IAClB,iBAAkB,IAClB,iBAAkB,IAClB,iBAAkB,IAClB,iBAAkB,IAClB,iBAAkB,IAClB,iBAAkB,IAClB,iBAAkB,IAClB,iBAAkB,KAClB,iBAAkB,KAClB,iBAAkB,IAClB,iBAAkB,IAClB,kBAAmB,IACnB,kBAAmB,IACnB,kBAAmB,IACnB,kBAAmB,IACnB,kBAAmB,IACnB,kBAAmB,IACnB,kBAAmB,IACnB,kBAAmB,IACnB,kBAAmB,IACnB,kBAAmB,IACnB,kBAAmB,IACnB,kBAAmB,IACnB,kBAAmB,IACnB,kBAAmB,IACnB,kBAAmB,IACnB,kBAAmB,IACnB,kBAAmB,IACnB,kBAAmB,IACnB,kBAAmB,IACnB,kBAAmB,IACnB,kBAAmB,IACnB,kBAAmB,IACnB,kBAAmB,IACnB,kBAAmB,IACnB,kBAAmB,IACnB,kBAAmB,IACnB,kBAAmB,IACnB,kBAAmB,IACnB,kBAAmB,IACnB,kBAAmB,IACnB,kBAAmB,IACnB,kBAAmB,IACnB,kBAAmB,IACnB,kBAAmB,IACnB,kBAAmB,IACnB,kBAAmB,IACnB,kBAAmB,IACnB,kBAAmB,IACnB,kBAAmB,IACnB,kBAAmB,IACnB,kBAAmB,IACnB,kBAAmB,IACnB,kBAAmB,IACnB,kBAAmB,IACnB,mBAAoB,IACpB,mBAAoB,IACpB,mBAAoB,IACpB,mBAAoB,IACpB,mBAAoB,IACpB,mBAAoB,IACpB,mBAAoB,IACpB,mBAAoB,IACpB,mBAAoB,IACpB,mBAAoB,IACpB,mBAAoB,IACpB,mBAAoB,IACpB,mBAAoB,IACpB,mBAAoB,IACpB,mBAAoB,IACpB,mBAAoB,IACpB,mBAAoB,IACpB,mBAAoB,IACpB,mBAAoB,IACpB,mBAAoB,IACpB,mBAAoB,KACpB,mBAAoB,IACpB,mBAAoB,KACpB,mBAAoB,IACpB,mBAAoB,IACpB,mBAAoB,IACpB,mBAAoB,IACpB,mBAAoB,IACpB,mBAAoB,IACpB,mBAAoB,IACpB,mBAAoB,IACpB,mBAAoB,IACpB,mBAAoB,IACpB,mBAAoB,IACpB,oBAAqB,IACrB,oBAAqB,IACrB,oBAAqB,IACrB,oBAAqB,IACrB,oBAAqB,IACrB,oBAAqB,IACrB,oBAAqB,IACrB,oBAAqB,IACrB,oBAAqB,IACrB,oBAAqB,IACrB,oBAAqB,IACrB,oBAAqB,IACrB,oBAAqB,IACrB,oBAAqB,IACrB,oBAAqB,KACrB,oBAAqB,IACrB,oBAAqB,KACrB,oBAAqB,KACrB,oBAAqB,IACrB,oBAAqB,IACrB,oBAAqB,IACrB,oBAAqB,IACrB,oBAAqB,IACrB,oBAAqB,IACrB,oBAAqB,IACrB,oBAAqB,IACrB,oBAAqB,IACrB,oBAAqB,IACrB,oBAAqB,IACrB,qBAAsB,IACtB,qBAAsB,IACtB,qBAAsB,IACtB,qBAAsB,IACtB,qBAAsB,IACtB,qBAAsB,IACtB,qBAAsB,IACtB,qBAAsB,IACtB,qBAAsB,IACtB,qBAAsB,IACtB,qBAAsB,IACtB,qBAAsB,IACtB,qBAAsB,IACtB,qBAAsB,IACtB,qBAAsB,KACtB,qBAAsB,KACtB,qBAAsB,KACtB,qBAAsB,IACtB,qBAAsB,KACtB,qBAAsB,IACtB,qBAAsB,IACtB,qBAAsB,IACtB,qBAAsB,IACtB,qBAAsB,IACtB,qBAAsB,IACtB,qBAAsB,IACtB,sBAAuB,IACvB,sBAAuB,IACvB,sBAAuB,IACvB,sBAAuB,IACvB,sBAAuB,IACvB,sBAAuB,IACvB,sBAAuB,IACvB,sBAAuB,KACvB,sBAAuB,IACvB,sBAAuB,IACvB,sBAAuB,IACvB,sBAAuB,IACvB,sBAAuB,IACvB,sBAAuB,IACvB,sBAAuB,IACvB,sBAAuB,IACvB,uBAAwB,IACxB,uBAAwB,IACxB,uBAAwB,IACxB,uBAAwB,IACxB,uBAAwB,IACxB,uBAAwB,KACxB,uBAAwB,KACxB,uBAAwB,IACxB,uBAAwB,IACxB,wBAAyB,IACzB,wBAAyB,IACzB,wBAAyB,IACzB,wBAAyB,IACzB,wBAAyB,IACzB,wBAAyB,IACzB,wBAAyB,KACzB,wBAAyB,IACzB,wBAAyB,IACzB,wBAAyB,IACzB,wBAAyB,IACzB,yBAA0B,IAC1B,yBAA0B,IAC1B,yBAA0B,IAC1B,yBAA0B,IAC1B,yBAA0B,IAC1B,yBAA0B,IAC1B,yBAA0B,IAC1B,0BAA2B,IAC3B,0BAA2B,IAC3B,2BAA4B,KAC5B,4BAA6B,IAC7B,4BAA6B,IAC7B,mCAAoC,KAIrC,IAAI+mI,EACJ,MA0FMC,EAAmB,CACrB,IAAM,KACN,IAAM,KACN,IAAM,IACN,IAAM,KACN,IAAM,KACN,IAAM,KACN,IAAM,KACN,IAAM,IACN,IAAM,KACN,IAAM,IACN,IAAM,KACN,IAAM,IACN,IAAM,IACN,IAAM,KACN,IAAM,KACN,IAAM,KACN,IAAM,KACN,IAAM,KACN,IAAM,KACN,IAAM,KACN,IAAM,IACN,IAAM,KACN,IAAM,IACN,IAAM,KACN,IAAM,IACN,IAAM,IACN,IAAM,KAGJC,EAAmC5uE,EAAO6uE,QAAQ,gCAAgC,GAClFC,EAAgB,CAClBC,UAAW/uE,EAAO+uE,UAClBC,YAAa1+K,GAAO0vG,EAAOivE,UAAU3+K,IAAQ0vG,EAAOkvE,SAAS5+K,GAC7D6+K,SAAU7+K,GAAe,QAARA,EACjB8+K,eA7He,CAACC,EAASC,KACzB,IAAIlpG,EAAS,EACb,MAAM39D,EAAM4mK,EAAQtrL,OACpB,IAAIwrL,EAAc,GAClB,SAASC,EAAQzrL,GACbqiF,GAAUriF,EACVsrL,EAAUA,EAAQloL,MAAMpD,GAE5B,KAAOqiF,EAAS39D,GAAK,CACjB,MAAM4gH,EAAO,aAAa9uG,KAAK80J,GAC/B,IAAKhmD,GAAQjjD,EAASijD,EAAKpwG,OAASxQ,EAAK,CACrC,MAAMijF,EAAYjjF,EAAM29D,EACxBmpG,GAAeF,EAAQloL,MAAM,EAAGukG,GAChC8jF,EAAQ9jF,GACR,MAKJ,GAFA6jF,GAAeF,EAAQloL,MAAM,EAAGkiI,EAAKpwG,OACrCu2J,EAAQnmD,EAAKpwG,OACG,MAAZowG,EAAK,GAAY,CAEjB,IACIhiJ,EADAmf,EAAO,GAEX,GAAI,YAAY3B,KAAKwqL,EAAQ,IAAK,CACzBX,IACDA,EAAkBvnM,OAAO4H,KAAKo/L,GAA0BhoF,QAAO,CAACv0E,EAAKprB,IAAS7D,KAAKivB,IAAIA,EAAKprB,EAAKzC,SAAS,IAE9G,IAAK,IAAIA,EAAS2qL,GAAkBrnM,GAAS0c,EAAS,IAAKA,EACvDyC,EAAO6oL,EAAQ9wH,OAAO,EAAGx6D,GACzB1c,EAAQ8mM,EAAyB3nL,GAErC,GAAInf,EAAO,CACP,MAAM8kD,EAAO3lC,EAAKo0G,SAAS,KACvB00E,IACCnjJ,GACD,aAAatnC,KAAKwqL,EAAQ7oL,EAAKzC,OAAS,IAAM,KAC9CwrL,GAAe,IAAM/oL,EACrBgpL,EAAQ,EAAIhpL,EAAKzC,UAGjBwrL,GAAeloM,EACfmoM,EAAQ,EAAIhpL,EAAKzC,cAIrBwrL,GAAe,IAAM/oL,EACrBgpL,EAAQ,EAAIhpL,EAAKzC,aAIrBwrL,GAAe,IACfC,EAAQ,OAGX,CAED,MAAM7sG,EAAkB,QAAZ0mD,EAAK,GAEX9/H,GADUo5E,EAAM,qBAAuB,iBACxBpoD,KAAK80J,GAC1B,GAAK9lL,EAIA,CAED,IAAI09E,EAAKngF,OAAO23D,SAASl1D,EAAK,GAAIo5E,EAAM,GAAK,IAClC,IAAPsE,GAGKA,EAAK,SAGLA,GAAM,OAAUA,GAAM,MAL3BA,EAAK,MAQCA,GAAM,OAAUA,GAAM,OAA6B,QAAZ,MAALA,KAClCA,GAAM,GAAQA,GAAM,GACnB,KAAPA,GACCA,GAAM,IAAQA,GAAM,IACpBA,GAAM,KAAQA,GAAM,OACrBA,EAAK0nG,EAAiB1nG,IAAOA,GAEjCsoG,GAAer1J,OAAOskC,cAAcyoB,GACpCuoG,EAAQjmL,EAAK,GAAGxF,aAvBhBwrL,GAAelmD,EAAK,GACpBmmD,EAAQnmD,EAAK,GAAGtlI,SA0B5B,OAAOwrL,GAuCPE,mBAAqBn/K,GACbi9K,EAAamC,cAAcp/K,EAAM,cAC1B09K,EAEFT,EAAamC,cAAcp/K,EAAM,mBAC/B29K,OADN,EAKT0B,aAAar/K,EAAKsc,GACd,IAAImzF,EAAKnzF,EAASA,EAAOmzF,GAAK,EAC9B,GAAInzF,GAAiB,IAAPmzF,EACV,GAAmB,mBAAfnzF,EAAOtc,IAA0B,CACjC,GAAY,QAARA,EACA,OAAO,EAEPsc,EAAOsL,MAAM/G,MAAK3rB,GAAgB,IAAXA,EAAEtV,MACd,aAAXsV,EAAEgB,MACS,MAAXhB,EAAEne,QACmB,cAApBme,EAAEne,MAAMwhG,SACe,0BAApBrjF,EAAEne,MAAMwhG,aACZk3B,EAAK,OAGJ,qBAAqBl7G,KAAK+nB,EAAOtc,MAC9B,WAARA,GACQ,eAARA,IACAyvG,EAAK,QAGJnzF,GAAiB,IAAPmzF,IACI,kBAAfnzF,EAAOtc,KACQ,SAAfsc,EAAOtc,KACQ,UAAfsc,EAAOtc,MACPyvG,EAAK,IAGb,GAAW,IAAPA,EAAqB,CACrB,GAAY,QAARzvG,EACA,OAAO,EAEX,GAAY,SAARA,EACA,OAAO,EAGf,OAAOyvG,GAGX6vE,aAAY,IAAEt/K,EAAF,GAAOyvG,IACf,GAAW,IAAPA,EAAqB,CACrB,GAAY,aAARzvG,GAA8B,UAARA,EACtB,OAAO,EAEX,GAAIs+K,EAAmBt+K,GACnB,OAAO,EAGf,OAAO,IAUTu/K,EAAiB7/L,IACD,IAAdA,EAAKE,MACLF,EAAKkoC,MAAMlpC,SAAQ,CAAC8jC,EAAGvtB,KACJ,IAAXutB,EAAE5iC,MAAyC,UAAX4iC,EAAEtsB,MAAoBssB,EAAEzrC,QAExD2I,EAAKkoC,MAAM3yB,GAAK,CACZrV,KAAM,EACNsW,KAAO,OACPmhB,IAAK4lK,EAAauC,uBAAwB,SAAQ,EAAMh9J,EAAE0K,KAC1D+sH,IAAKwlC,EAAej9J,EAAEzrC,MAAMwhG,QAAS/1D,EAAE0K,KACvC6gD,UAAW,GACX7gD,IAAK1K,EAAE0K,UAMrBuyJ,EAAiB,CAACC,EAASxyJ,KAC7B,MAAMuqJ,EAAa/nE,EAAOiwE,iBAAiBD,GAC3C,OAAOzC,EAAauC,uBAAuBtpK,KAAKC,UAAUshK,IAAa,EAAOvqJ,EAAK,IAGvF,SAAS0yJ,EAAuB7oL,EAAMm2B,GAClC,OAAO+vJ,EAAa4C,oBAAoB9oL,EAAMm2B,EAAK4yJ,GAEvD,MAAMA,EAAmB,CACrB,GAAoC,gCACpC,GAAoC,yCACpC,GAAoC,gCACpC,GAAoC,yCACpC,GAA0C,yEAC1C,GAAsC,uDACtC,GAA6C,sGAC7C,GAAyC,+FACzC,GAAoC,gCACpC,GAA2C,+DAC3C,GAAuC,2FAwGrCC,EAAsCrwE,EAAO6uE,QAAS,wBACtDyB,EAAiCtwE,EAAO6uE,QAE7C,sDAMK0B,EAAiCvwE,EAAO6uE,QAAQ,cAChD2B,EAAgCxwE,EAAO6uE,QAAS,gCAA+B,GAgD/E4B,EAAiB,CAACxhM,EAAK+gJ,IACHu9C,EAAamD,YAAYzhM,IAAsC,YAA9BA,EAAI45F,QAAQt2D,cAE7Dg7J,EAAauC,uBAAuB9/C,GAAO,GAC9B,IAAb/gJ,EAAIiB,KACAq9L,EAAaoD,yBAAyB,CACnC,IACD1hM,EACC,sBAAqB+gJ,SACtB/gJ,EACC,MAEHA,EA+ER2hM,EAAkB,CAAC55K,EAAUyW,EAASb,KAExC,GAAIa,EAAQojK,OAAOC,MAAQ,EACvB,OAEJ,IAAIC,EAAK,EACLC,EAAK,EACT,MAAMC,EAAe,GACfC,EAAyBC,IAC3B,GAAIJ,GAAM,IACNC,GAAM,EAAoC,CAE1C,MAAMI,EAAa7D,EAAa8D,qBAAqB5jK,EAAQ07H,OAAOokC,EAAa+D,eAAgB,CAC7F9qK,KAAKC,UAAUwqK,EAAatsL,KAAI3U,GAAQuhM,EAAcvhM,EAAMy9B,KAAUxoB,KAAK,KAG3Ei1B,OAAO+2J,EAAaltL,UAIxB,GADAytL,EAAaP,EAAa,GAAIG,EAAY3jK,GACtCwjK,EAAaltL,OAAS,EAAG,CACzB,IAAK,IAAIwB,EAAI,EAAGA,EAAI0rL,EAAaltL,OAAQwB,IAErCisL,EAAaP,EAAa1rL,GAAI,KAAMkoB,GAGxC,MAAM8+I,EAAc0kB,EAAaltL,OAAS,EAE1C,OADAiT,EAASsuB,OAAO6rJ,EAAeF,EAAaltL,OAAS,EAAGwoK,GACjDA,GAGf,OAAO,GAEX,IAAIhnK,EAAI,EACR,KAAOA,EAAIyR,EAASjT,OAAQwB,IAAK,CAC7B,MAAMy+B,EAAQhtB,EAASzR,GAEvB,GADgBksL,EAAeztJ,GAClB,CAET,MAAMh0C,EAAOg0C,EACPhT,EAAS0gK,EAAY1hM,GAC3B,GAAIghC,EAAQ,CAER+/J,GAAM//J,EAAO,GACbggK,GAAMhgK,EAAO,GACbigK,EAAalrL,KAAK/V,GAClB,UAMRuV,GAAK2rL,EAAsB3rL,GAE3BwrL,EAAK,EACLC,EAAK,EACLC,EAAaltL,OAAS,EAG1BmtL,EAAsB3rL,IAEpBksL,EAAkBzhM,IAAyB,IAAdA,EAAKE,MAA6C,IAAjBF,EAAK2hM,SACxD,IAAb3hM,EAAKE,OACLF,EAAK4hM,aACqB,IAA1B5hM,EAAK4hM,YAAY1hM,MACjBF,EAAK4hM,YAAYC,QACfC,EAAa,gBACbC,EAAuBvrL,GAClBw5G,EAAOgyE,YAAYxrL,IAASsrL,EAAWjtL,KAAK2B,GAEjDgrL,EAAe,CAACxhM,EAAMwsI,EAAa/uG,KACrC,MAAMwkK,EAAiBjiM,EAAK4hM,YAAYC,QACxCpkK,EAAQykK,OAAOzkK,EAAQykK,OAAO9xJ,QAAQ6xJ,IAAmBz1D,GAEvD21D,EAAmCnyE,EAAO6uE,QAAS,mDAQzD,SAAS6C,EAAY1hM,GACjB,GAAkB,IAAdA,EAAKE,MAA4BiiM,EAAmBniM,EAAKsgB,KACzD,OAAO,EAEX,GAAkB,KAAdtgB,EAAKE,KACL,MAAO,CAAC,EAAG,GAEf,IAAI6gM,EAAK,EACLC,EAAKhhM,EAAKkoC,MAAMn0B,OAAS,EAAI,EAAI,EACjCquL,GAAS,EACb,MAAMC,EAAO,KACTD,GAAS,GACF,GAqCX,QA/BA,SAAShuJ,EAAKp0C,GACV,IAAK,IAAIuV,EAAI,EAAGA,EAAIvV,EAAKkoC,MAAMn0B,OAAQwB,IAAK,CACxC,MAAMutB,EAAI9iC,EAAKkoC,MAAM3yB,GAErB,GAAe,IAAXutB,EAAE5iC,OAA+B6hM,EAAoBj/J,EAAEtsB,MACvD,OAAO6rL,IAEX,GAAe,IAAXv/J,EAAE5iC,MAAyC,SAAX4iC,EAAEtsB,MAE9BssB,EAAEnL,MACc,IAAfmL,EAAEnL,IAAIz3B,MACF4iC,EAAEnL,IAAIy9C,WAAa2sH,EAAoBj/J,EAAEnL,IAAIkhE,UAClD,OAAOwpG,IAInB,IAAK,IAAI9sL,EAAI,EAAGA,EAAIvV,EAAKgnB,SAASjT,OAAQwB,IAAK,CAC3CwrL,IACA,MAAM/sJ,EAAQh0C,EAAKgnB,SAASzR,GAC5B,GAAmB,IAAfy+B,EAAM9zC,OACF8zC,EAAM9L,MAAMn0B,OAAS,GACrBitL,IAEJ5sJ,EAAKJ,GACDouJ,GACA,OAAO,EAInB,OAAO,EAEJhuJ,CAAKp0C,IAAQ,CAAC+gM,EAAIC,GAE7B,SAASO,EAAcvhM,EAAMy9B,GACzB,GAAIuyF,EAAOtc,SAAS1zG,GAChB,OAAOA,EAEX,GAAIgwH,EAAOrZ,SAAS32G,GAChB,MAAQ,GAEZ,OAAQA,EAAKE,MACT,KAAK,EACD,OAgBZ,SAA0BF,EAAMy9B,GAC5B,IAAI7G,EAAO,IAAG52B,EAAKsgB,MACnB,IAAK,IAAI/K,EAAI,EAAGA,EAAIvV,EAAKkoC,MAAMn0B,OAAQwB,IAAK,CACxC,MAAMutB,EAAI9iC,EAAKkoC,MAAM3yB,GACrB,GAAe,IAAXutB,EAAE5iC,KACF02B,GAAQ,IAAGkM,EAAEtsB,OACTssB,EAAEzrC,QACFu/B,GAAQ,KAAIo5F,EAAOsyE,WAAWx/J,EAAEzrC,MAAMwhG,kBAGzC,GAAe,IAAX/1D,EAAE5iC,MAAyC,SAAX4iC,EAAEtsB,KAAiB,CAExD,IAAI+rL,EAAYC,EAAiB1/J,EAAEy3H,KACnC,GAAiB,MAAbgoC,EAAmB,CACnB,MAAM5qK,EAAMmL,EAAEnL,KAAOmL,EAAEnL,IAAIkhE,QACf,UAARlhE,EACA4qK,EAAYvyE,EAAOyyE,eAAeF,GAErB,UAAR5qK,IACL4qK,EAAYvyE,EAAO0yE,eAAe1yE,EAAO2yE,eAAeJ,KAE5D3rK,GAAQ,IAAGkM,EAAEnL,IAAIkhE,YAAYm3B,EAAOsyE,WAAWC,QAIvD9kK,EAAQmlK,UACRhsK,GAAQ,IAAG6G,EAAQmlK,WAEvBhsK,GAAQ,IACR,IAAK,IAAIrhB,EAAI,EAAGA,EAAIvV,EAAKgnB,SAASjT,OAAQwB,IACtCqhB,GAAO2qK,EAAcvhM,EAAKgnB,SAASzR,GAAIkoB,GAK3C,OAHKuyF,EAAO+uE,UAAU/+L,EAAKsgB,OACvBsW,GAAQ,KAAI52B,EAAKsgB,QAEdsW,EAnDQisK,CAAiB7iM,EAAMy9B,GAClC,KAAK,EACD,OAAOuyF,EAAOsyE,WAAWtiM,EAAK64F,SAClC,KAAK,EACD,MAAQ,UAAMm3B,EAAOsyE,WAAWtiM,EAAK64F,iBACzC,KAAK,EACD,OAAOm3B,EAAOsyE,WAAWtyE,EAAO8yE,gBAAgBN,EAAiBxiM,EAAK64F,WAC1E,KAAK,EACD,OAAOm3B,EAAOsyE,WAAWE,EAAiBxiM,IAC9C,KAAK,GACD,OAAOuhM,EAAcvhM,EAAK64F,QAASp7D,GACvC,QAEI,MAAO,IA+CnB,SAAS+kK,EAAiBjoC,GACtB,GAAiB,IAAbA,EAAIr6J,KACJ,OAAO,IAAI8S,SAAU,UAASunJ,EAAI1hE,UAA3B,GAEN,CAED,IAAIjiE,EAAO,GAeX,OAdA2jI,EAAIvzI,SAAShoB,SAAQogC,IACb4wF,EAAOtc,SAASt0E,IAAM4wF,EAAOrZ,SAASv3E,KAG3B,IAAXA,EAAEl/B,KACF02B,GAAOwI,EAAEy5D,QAEO,IAAXz5D,EAAEl/B,KACP02B,GAAOo5F,EAAO8yE,gBAAgBN,EAAiBpjK,EAAEy5D,UAGjDjiE,GAAO4rK,EAAiBpjK,OAGzBxI,GAIf,MAAMmsK,EAAuB,CAAC/iM,EAAMy9B,KACd,IAAdz9B,EAAKE,MACY,IAAjBF,EAAK2hM,SACS,WAAb3hM,EAAKsgB,KAAiC,UAAbtgB,EAAKsgB,MAC/Bmd,EAAQulK,QAAQ9C,EAAuB,GAAoClgM,EAAKwtC,MAChF/P,EAAQ86G,eAIV0qD,EAAoB,CACtBpD,GAGEqD,EAAyB,CAC3BC,MAAO5F,EAAa6F,uBACpBzrC,KA5emB,CAACvhI,EAAKp2B,EAAMy9B,KAC/B,MAAM,IAAE88H,EAAF,IAAO/sH,GAAQpX,EAQrB,OAPKmkI,GACD98H,EAAQulK,QAAQ9C,EAAuB,GAAiC1yJ,IAExExtC,EAAKgnB,SAASjT,SACd0pB,EAAQulK,QAAQ9C,EAAuB,GAAiC1yJ,IACxExtC,EAAKgnB,SAASjT,OAAS,GAEpB,CACHm0B,MAAO,CACHq1J,EAAa8F,qBAAqB9F,EAAauC,uBAAwB,aAAY,EAAMtyJ,GAAM+sH,GAAOgjC,EAAauC,uBAAuB,IAAI,OAketJjqJ,KA7dmB,CAACzf,EAAKp2B,EAAMy9B,KAC/B,MAAM,IAAE88H,EAAF,IAAO/sH,GAAQpX,EAQrB,OAPKmkI,GACD98H,EAAQulK,QAAQ9C,EAAuB,GAAiC1yJ,IAExExtC,EAAKgnB,SAASjT,SACd0pB,EAAQulK,QAAQ9C,EAAuB,GAAiC1yJ,IACxExtC,EAAKgnB,SAASjT,OAAS,GAEpB,CACHm0B,MAAO,CACHq1J,EAAa8F,qBAAqB9F,EAAauC,uBAAwB,eAAc,GAAOvlC,EACtFgjC,EAAa8D,qBAAqB5jK,EAAQ6lK,aAAa/F,EAAagG,mBAAoB,CAAChpC,GAAM/sH,GAC/F+vJ,EAAauC,uBAAuB,IAAI,OAidtD0D,MA5cmB,CAACptK,EAAKp2B,EAAMy9B,KAC/B,MAAMgmK,EAAalG,EAAamG,eAAettK,EAAKp2B,EAAMy9B,GAE1D,IAAKgmK,EAAWv7J,MAAMn0B,QAA2B,IAAjB/T,EAAK2hM,QACjC,OAAO8B,EAEPrtK,EAAIuB,KACJ8F,EAAQulK,QAAQ9C,EAAuB,GAAmC9pK,EAAIuB,IAAI6V,MAEtF,MAAM,IAAEltB,GAAQtgB,EACVqrH,EAAkB5tF,EAAQ4tF,gBAAgB/qG,GAChD,GAAY,UAARA,GACQ,aAARA,GACQ,WAARA,GACA+qG,EAAiB,CACjB,IAAIs4E,EAAiBjG,EACjBkG,GAAgB,EACpB,GAAY,UAARtjL,GAAmB+qG,EAAiB,CACpC,MAAMnrH,EAAOq9L,EAAasG,SAAS7jM,EAAO,QAC1C,GAAIE,GACA,GAAkB,IAAdA,EAAKA,KAELyjM,EAAiB/F,OAEhB,GAAI19L,EAAK7I,MACV,OAAQ6I,EAAK7I,MAAMwhG,SACf,IAAK,QACD8qG,EAAiBnG,EACjB,MACJ,IAAK,WACDmG,EAAiBlG,EACjB,MACJ,IAAK,OACDmG,GAAgB,EAChBnmK,EAAQulK,QAAQ9C,EAAuB,GAA0C9pK,EAAIoX,YAK5F+vJ,EAAauG,mBAAmB9jM,KAGrC2jM,EAAiB/F,OAIR,WAARt9K,IACLqjL,EAAiBhG,GAMhBiG,IACDH,EAAWM,YAActmK,EAAQ07H,OAAOwqC,SAI5ClmK,EAAQulK,QAAQ9C,EAAuB,GAAuC9pK,EAAIoX,MAMtF,OAFAi2J,EAAWv7J,MAAQu7J,EAAWv7J,MAAM/I,QAAO2D,KAAsB,IAAfA,EAAE7jC,IAAIiB,MAClC,eAAlB4iC,EAAE7jC,IAAI45F,WACH4qG,GA6YPluK,GAlUgB,CAACa,EAAKp2B,EAAMy9B,IACrB8/J,EAAar5C,YAAY9tH,EAAKp2B,EAAMy9B,GAASgmK,IAChD,MAAM,UAAEp1G,GAAcj4D,EACtB,IAAKi4D,EAAUt6E,OACX,OAAO0vL,EACX,IAAI,IAAExkM,EAAK5H,MAAO2sM,GAAeP,EAAWv7J,MAAM,GAClD,MAAM,aAAE+7J,EAAF,gBAAgBC,EAAhB,qBAAiCC,GAnEtB,EAACllM,EAAKovF,EAAW5wD,EAAS+P,KAC/C,MAAMy2J,EAAe,GACfC,EAAkB,GAClBC,EAAuB,GAC7B,IAAK,IAAI5uL,EAAI,EAAGA,EAAI84E,EAAUt6E,OAAQwB,IAAK,CACvC,MAAMozD,EAAW0lB,EAAU94E,GACV,WAAbozD,GACA40H,EAAa6G,mBAAmB,uBAAmD3mK,EAAS+P,IAGvF6yJ,EAAsB13H,GAF3Bw7H,EAAqBpuL,KAAK4yD,GAStB43H,EAAiB53H,GACb40H,EAAamD,YAAYzhM,GACrBuhM,EAAgBvhM,EAAI45F,SACpBorG,EAAaluL,KAAK4yD,GAGlBu7H,EAAgBnuL,KAAK4yD,IAIzBs7H,EAAaluL,KAAK4yD,GAClBu7H,EAAgBnuL,KAAK4yD,IAIrB23H,EAAiB33H,GACjBu7H,EAAgBnuL,KAAK4yD,GAGrBs7H,EAAaluL,KAAK4yD,GAKlC,MAAO,CACHs7H,eACAC,kBACAC,yBAuBgEE,CAAiBplM,EAAKovF,EAAW5wD,EAASrH,EAAIoX,KAsB9G,GApBI02J,EAAgBlmK,SAAS,WACzB/+B,EAAMwhM,EAAexhM,EAAM,kBAE3BilM,EAAgBlmK,SAAS,YACzB/+B,EAAMwhM,EAAexhM,EAAM,cAE3BilM,EAAgBnwL,SAChBiwL,EAAazG,EAAa8D,qBAAqB5jK,EAAQ07H,OAAO0kC,GAAsB,CAChFmG,EACAxtK,KAAKC,UAAUytK,OAGnBD,EAAalwL,QAEXwpL,EAAamD,YAAYzhM,KAAQuhM,EAAgBvhM,EAAI45F,WACvDmrG,EAAazG,EAAa8D,qBAAqB5jK,EAAQ07H,OAAO2kC,GAAiB,CAC3EkG,EACAxtK,KAAKC,UAAUwtK,MAGnBE,EAAqBpwL,OAAQ,CAC7B,MAAMuwL,EAAkBH,EAAqBxvL,IAAIq7G,EAAOu0E,YAAYtvL,KAAK,IACzEhW,EAAMs+L,EAAamD,YAAYzhM,GACzBs+L,EAAauC,uBAAwB,GAAE7gM,EAAI45F,UAAUyrG,KAAmB,GACxE/G,EAAaoD,yBAAyB,CAAE,IAAI1hM,EAAM,QAAOqlM,OAEnE,MAAO,CACHp8J,MAAO,CAACq1J,EAAa8F,qBAAqBpkM,EAAK+kM,QAgSvDQ,KA3RkB,CAACpuK,EAAKp2B,EAAMy9B,KAC9B,MAAM,IAAE88H,EAAF,IAAO/sH,GAAQpX,EAIrB,OAHKmkI,GACD98H,EAAQulK,QAAQ9C,EAAuB,GAAiC1yJ,IAErE,CACHtF,MAAO,GACP67J,YAAatmK,EAAQ07H,OAAO4kC,MAwSpC5mM,OAAO4H,KAAKw+L,GAAcv+L,SAAQ,SAAU8rC,GAChC,YAANA,IAAiBh0C,EAAQg0C,GAAKyyJ,EAAazyJ,OAEjDh0C,EAAQosM,uBAAyBA,EACjCpsM,EAAQmsM,kBAAoBA,EAC5BnsM,EAAQknM,WAAaA,EACrBlnM,EAAQmnM,iBAAmBA,EAC3BnnM,EAAQ2mM,iBAAmBA,EAC3B3mM,EAAQ8mM,gBAAkBA,EAC1B9mM,EAAQ0mM,cAAgBA,EACxB1mM,EAAQ6mM,eAAiBA,EACzB7mM,EAAQ4mM,aAAeA,EACvB5mM,EAAQgnM,eAAiBA,EACzBhnM,EAAQ+mM,oBAAsBA,EAC9B/mM,EAAQinM,OAASA,EACjBjnM,EAAQ2tM,QAjCR,SAAiB/nJ,EAAU/oC,EAAU,IACjC,OAAO4pL,EAAamH,YAAYhoJ,EAAUszE,EAAO20E,OAAO,GAAI7F,EAAenrL,EAAS,CAChFixL,eAAgB,CAIZ7B,KACGE,KACCtvL,EAAQixL,gBAAkB,IAElCC,oBAAqB70E,EAAO20E,OAAO,GAAIzB,EAAwBvvL,EAAQkxL,qBAAuB,IAC9FC,eAAgBlE,MAuBxB9pM,EAAQopM,uBAAyBA,EACjCppM,EAAQ0iC,MArBR,SAAekjB,EAAU/oC,EAAU,IAC/B,OAAO4pL,EAAawH,UAAUroJ,EAAUszE,EAAO20E,OAAO,GAAI7F,EAAenrL,KAqB7E7c,EAAQgoM,cAAgBA,EACxBhoM,EAAQ+oM,eAAiBA,G,uBCt9FvB9oM,EAAOD,QAAU,EAAjBC,M,iBCMF,SAASiuM,EAAMloJ,EAAMjH,GACnB,IAAItgC,EAEAkf,EACJ,GAAoB,IAAhBohB,EAAK9hC,OACP,OAAO+oC,EAET,IAAKvnC,EAAI,EAAGkf,EAAMohB,EAAK9hC,OAAQwB,EAAIkf,EAAKlf,IAEtCunC,GAASA,GAAQ,GAAKA,EADhBjH,EAAK7e,WAAWzhB,GAEtBunC,GAAQ,EAEV,OAAOA,EAAO,GAAY,EAARA,EAAYA,EAUhC,SAASmoJ,EAAWp3H,EAAOx2E,EAAO4H,EAAKo1G,GACrC,IA4BiBxpE,EA5BbiS,EAAOkoJ,EAAKA,EAAKA,EAAKn3H,EAAO5uE,IA4BhB4rC,EA5B+BxzC,EA6BzCF,OAAO+H,UAAUgW,SAAS9V,KAAKyrC,YA7B0BxzC,GAChE,GAAc,OAAVA,EACF,OAAO2tM,EAAKloJ,EAAM,QAEpB,QAAcpnC,IAAVre,EACF,OAAO2tM,EAAKloJ,EAAM,aAEpB,GAAqB,iBAAVzlD,GAAuC,mBAAVA,EAAsB,CAC5D,IAA6B,IAAzBg9G,EAAKjkE,QAAQ/4C,GACf,OAAO2tM,EAAKloJ,EAAM,aAAe79C,GAEnCo1G,EAAKt+F,KAAK1e,GAEV,IAAI6tM,EArBR,SAAqBpoJ,EAAMjS,EAAGwpE,GAC5B,OAAOl9G,OAAO4H,KAAK8rC,GAAGuhE,OAAO+J,QAC7B,SAAkBr5D,EAAM79C,GACtB,OAAOgmM,EAAUnoJ,EAAMjS,EAAE5rC,GAAMA,EAAKo1G,KAFOv3D,GAoB7BqoJ,CAAWroJ,EAAMzlD,EAAOg9G,GAEtC,KAAM,YAAah9G,IAAmC,mBAAlBA,EAAMwiH,QACxC,OAAOqrF,EAGT,IACE,OAAOF,EAAKE,EAASh7J,OAAO7yC,EAAMwiH,YAClC,MAAO3iG,GACP,OAAO8tL,EAAKE,EAAS,uBAAyBhuL,EAAI4pC,OAAS5pC,EAAI+4B,WAGnE,OAAO+0J,EAAKloJ,EAAMzlD,EAAM6d,YAW1Bne,EAAOD,QAJP,SAAc+zC,GACZ,OA/DF,SAAciS,EAAMroB,GAClB,KAAOqoB,EAAK/oC,OA8DqC,GA7D/C+oC,EAAO,IAAMA,EAEf,OAAOA,EA2DAsoJ,CAAIH,EAAU,EAAGp6J,EAAG,GAAI,IAAI31B,SAAS,O,iBCvC9C,SAAS/V,EAAeyY,EAAK28B,GAC3B,OAAOp9C,OAAO+H,UAAUC,eAAeC,KAAKwY,EAAK28B,GAGnDx9C,EAAOD,QAAU,SAAS4vL,EAAIrtJ,EAAK0jB,EAAIppC,GACrC0lB,EAAMA,GAAO,IACb0jB,EAAKA,GAAM,IACX,IAAInlC,EAAM,GAEV,GAAkB,iBAAP8uK,GAAiC,IAAdA,EAAG3yK,OAC/B,OAAO6D,EAGT,IAAIujC,EAAS,MACburI,EAAKA,EAAGhyK,MAAM2kB,GAEd,IAAIgsK,EAAU,IACV1xL,GAAsC,iBAApBA,EAAQ0xL,UAC5BA,EAAU1xL,EAAQ0xL,SAGpB,IAAI5wK,EAAMiyJ,EAAG3yK,OAETsxL,EAAU,GAAK5wK,EAAM4wK,IACvB5wK,EAAM4wK,GAGR,IAAK,IAAI9vL,EAAI,EAAGA,EAAIkf,IAAOlf,EAAG,CAC5B,IAEI+vL,EAAMC,EAAMz6J,EAAGG,EAFfu6B,EAAIkhH,EAAGnxK,GAAGuqB,QAAQqb,EAAQ,OAC1BuzC,EAAMlpB,EAAEp1B,QAAQ2M,GAGhB2xC,GAAO,GACT42G,EAAO9/H,EAAE+I,OAAO,EAAGmgB,GACnB62G,EAAO//H,EAAE+I,OAAOmgB,EAAM,KAEtB42G,EAAO9/H,EACP+/H,EAAO,IAGTz6J,EAAImqF,mBAAmBqwE,GACvBr6J,EAAIgqF,mBAAmBswE,GAElBpmM,EAAeyY,EAAKkzB,GAEd9V,MAAMod,QAAQx6B,EAAIkzB,IAC3BlzB,EAAIkzB,GAAG/0B,KAAKk1B,GAEZrzB,EAAIkzB,GAAK,CAAClzB,EAAIkzB,GAAIG,GAJlBrzB,EAAIkzB,GAAKG,EAQb,OAAOrzB,I,iBCvDT,IAAI4tL,EAAqB,SAASv6J,GAChC,cAAeA,GACb,IAAK,SACH,OAAOA,EAET,IAAK,UACH,OAAOA,EAAI,OAAS,QAEtB,IAAK,SACH,OAAOqzE,SAASrzE,GAAKA,EAAI,GAE3B,QACE,MAAO,KAIbl0C,EAAOD,QAAU,SAAS8gB,EAAKyhB,EAAK0jB,EAAIvmC,GAOtC,OANA6iB,EAAMA,GAAO,IACb0jB,EAAKA,GAAM,IACC,OAARnlC,IACFA,OAAMlC,GAGW,iBAARkC,EACFzgB,OAAO4H,KAAK6Y,GAAKjD,KAAI,SAASm2B,GACnC,IAAI26J,EAAKtwE,mBAAmBqwE,EAAmB16J,IAAMiS,EACrD,OAAI/nB,MAAMod,QAAQx6B,EAAIkzB,IACblzB,EAAIkzB,GAAGn2B,KAAI,SAASs2B,GACzB,OAAOw6J,EAAKtwE,mBAAmBqwE,EAAmBv6J,OACjDh2B,KAAKokB,GAEDosK,EAAKtwE,mBAAmBqwE,EAAmB5tL,EAAIkzB,QAEvD71B,KAAKokB,GAIL7iB,EACE2+G,mBAAmBqwE,EAAmBhvL,IAASumC,EAC/Co4E,mBAAmBqwE,EAAmB5tL,IAF3B,K,iDC1DpB,IAAI,kBAAE4uH,EAAF,mBAAqBC,GAAuB9nI,EAAQ,MACpD,QAAE0X,EAAF,QAAW+gB,EAAX,SAAoBQ,EAApB,IAA8ByB,GAAQ16B,EAAQ,MAC9C,cAAEgoI,GAAkBhoI,EAAQ,KAE5BooI,EAAqBjS,QAAQ0R,GAAqBC,GAClDO,EAAgBlS,QAAQz+G,GAAW+gB,GAAWQ,GAAYyB,GAoS9DtiC,EAAOD,QAlSP,MACE2c,YAAYgjB,EAAW7/B,EAAMqJ,GAC3B8S,KAAK0jB,UAAYA,EACjB1jB,KAAK2yL,QAAUzlM,EAAK0U,KAAO,GAC3B5B,KAAKnc,KAAOA,EACZmc,KAAK9S,KAAOA,EAGd2hJ,QACE,YAA6B,IAAlB7uI,KAAK9S,KAAK0U,MACV5B,KAAK9S,KAAK0U,IAEd5B,KAAK4yL,WAAW5xL,OAAS,EAGlC4xL,WAaE,OAZK5yL,KAAK6yL,eACR7yL,KAAK6yL,aAAe,GACpB7yL,KAAKnc,KAAKw9C,MAAKp0C,IACb,GAAIA,EAAK+e,QAAU/e,EAAK+e,OAAO8uD,MAAMl5D,IAAK,CACxC,IAAIA,EAAM3U,EAAK+e,OAAO8uD,MAAMl5D,IACvB5B,KAAK6yL,aAAa5nK,SAASrpB,IAC9B5B,KAAK6yL,aAAa7vL,KAAKpB,QAMxB5B,KAAK6yL,aAGdC,WACE,QAAmC,IAAxB9yL,KAAK2yL,QAAQ1mD,OACtB,OAAOjsI,KAAK2yL,QAAQ1mD,OAGtB,IAAI+B,EAAahuI,KAAK2yL,QAAQ3kD,WAC9B,YAA0B,IAAfA,IAA6C,IAAfA,MAIrChuI,KAAK4yL,WAAW5xL,QACXhB,KAAK4yL,WAAWxkK,MAAK5rB,GAAKA,EAAEypI,UAKvC8mD,mBACE,YAA2C,IAAhC/yL,KAAK2yL,QAAQxkD,eACfnuI,KAAK2yL,QAAQxkD,gBAElBnuI,KAAK4yL,WAAW5xL,QACXhB,KAAK4yL,WAAWxkK,MAAK5rB,GAAKA,EAAE0rI,gBAKvC8kD,kBACE,IAAgC,IAA5BhzL,KAAK2yL,QAAQ3kD,WAAsB,OAEvC,IAAI/gJ,EACJ,IAAK,IAAIuV,EAAIxC,KAAKnc,KAAKg9C,MAAM7/B,OAAS,EAAGwB,GAAK,EAAGA,IAC/CvV,EAAO+S,KAAKnc,KAAKg9C,MAAMr+B,GACL,YAAdvV,EAAKE,MACwC,IAA7CF,EAAK61C,KAAKzF,QAAQ,wBACpBr9B,KAAKnc,KAAKmyC,YAAYxzB,GAK5BywL,oBACE,IAAIC,EAAU,GACdlzL,KAAKnc,KAAKw9C,MAAKp0C,IACb,GAAIA,EAAK+e,OAAQ,CACf,IAAI8Y,EAAO73B,EAAK+e,OAAO8uD,MAAMh2C,KACzBA,IAASouK,EAAQpuK,KACnBouK,EAAQpuK,IAAQ,EAChB9kB,KAAK4B,IAAIuxL,iBACPnzL,KAAKozL,MAAMpzL,KAAKwjB,KAAKsB,IACrB73B,EAAK+e,OAAO8uD,MAAMy3D,UAO5B8gE,gBACE,IAAK,IAAIh9J,KAAQr2B,KAAK4yL,WAAY,CAChC,IAEIhxL,EAFAkjB,EAAO9kB,KAAKozL,MAAMpzL,KAAKwjB,KAAK6S,EAAK3uB,OACjC7jB,EAAOwyC,EAAKxyC,MAAQyf,EAAQ+yB,EAAK3uB,OAGD,IAAhC1H,KAAK2yL,QAAQxkD,gBACfvsI,EAAM,IAAI6xH,EAAkBp9F,EAAKyM,MAC7BlhC,EAAIusI,iBACNvsI,EAAIusI,eAAiBvsI,EAAIusI,eAAevsI,KAAI,IAAM,SAGpDA,EAAMy0B,EAAK89F,WAGbn0H,KAAK4B,IAAI0xL,eAAe1xL,EAAKkjB,EAAM9kB,KAAKozL,MAAMpzL,KAAKwjB,KAAK3/B,MAI5D0vM,eACE,QAAIvzL,KAAK8yL,kBAG8B,IAA5B9yL,KAAK2yL,QAAQ3kD,WACfhuI,KAAK2yL,QAAQ3kD,YAElBhuI,KAAK4yL,WAAW5xL,QACXhB,KAAK4yL,WAAWxkK,MAAK5rB,GAAKA,EAAEwrI,cAKvCwlD,SAASj4H,GACP,OAAI6pC,EACKA,EAAOtgF,KAAKy2C,GAAKp5D,SAAS,UAG1BrC,OAAO2zL,KAAKrK,SAAShnE,mBAAmB7mD,KAInDm4H,gBACE,IAAI5tG,EAGFA,EADE9lF,KAAK8yL,WAEL,gCAAkC9yL,KAAKwzL,SAASxzL,KAAK4B,IAAIO,YACf,iBAA5BnC,KAAK2yL,QAAQ3kD,WACnBhuI,KAAK2yL,QAAQ3kD,WACqB,mBAA5BhuI,KAAK2yL,QAAQ3kD,WACnBhuI,KAAK2yL,QAAQ3kD,WAAWhuI,KAAK9S,KAAK63B,GAAI/kB,KAAKnc,MAE3Cmc,KAAK2zL,aAAe,OAGhC,IAAIC,EAAM,KACN5zL,KAAKuyH,IAAItnG,SAAS,UAAS2oK,EAAM,QAErC5zL,KAAKuyH,KAAOqhE,EAAM,wBAA0B9tG,EAAU,MAGxD6tG,aACE,OAAI3zL,KAAK9S,KAAK63B,GACL/kB,KAAKwjB,KAAKxjB,KAAK9S,KAAK63B,IAEzB/kB,KAAK9S,KAAK43B,KACL9kB,KAAKwjB,KAAKxjB,KAAK9S,KAAK43B,MAEtB,SAGT+uK,cAME,OALA7zL,KAAK8zL,iBACD9zL,KAAK+yL,oBAAoB/yL,KAAKizL,oBAC9BjzL,KAAK4yL,WAAW5xL,OAAS,GAAGhB,KAAKqzL,gBACjCrzL,KAAKuzL,gBAAgBvzL,KAAK0zL,gBAE1B1zL,KAAK8yL,WACA,CAAC9yL,KAAKuyH,KAER,CAACvyH,KAAKuyH,IAAKvyH,KAAK4B,KAGzB4hB,KAAK9b,GACH,GAA0B,IAAtBA,EAAK21B,QAAQ,KAAY,OAAO31B,EACpC,GAAI,YAAY5F,KAAK4F,GAAO,OAAOA,EACnC,GAAI1H,KAAK2yL,QAAQoB,SAAU,OAAOrsL,EAElC,IAAIod,EAAO9kB,KAAK9S,KAAK63B,GAAKzhB,EAAQtD,KAAK9S,KAAK63B,IAAM,IAOlD,MALuC,iBAA5B/kB,KAAK2yL,QAAQ3kD,aACtBlpH,EAAOxhB,EAAQ+gB,EAAQS,EAAM9kB,KAAK2yL,QAAQ3kD,cAGrCnpH,EAASC,EAAMpd,GAIxB0rL,MAAM5vK,GAKJ,MAJY,OAAR8C,IAEF9C,EAAOA,EAAKuJ,QAAQ,MAAO,MAEtBo1F,UAAU3+F,GAAMuJ,QAAQ,QAASq1F,oBAG1C4xE,WAAW/mM,GACT,GAAI+S,KAAK2yL,QAAQ7tK,KACf,OAAO9kB,KAAKozL,MAAMpzL,KAAK2yL,QAAQ7tK,MAC1B,GAAI9kB,KAAK2yL,QAAQoB,SAAU,CAChC,GAAIngE,EACF,OAAOA,EAAc3mI,EAAK+e,OAAO8uD,MAAMh2C,MAAM3iB,WAG7C,MAAM,IAAIe,MACR,gEAIJ,OAAOlD,KAAKozL,MAAMpzL,KAAKwjB,KAAKv2B,EAAK+e,OAAO8uD,MAAMh2C,OAIlDgvK,iBACE9zL,KAAKuyH,IAAM,GACXvyH,KAAK4B,IAAM,IAAI8xH,EAAmB,CAAEhsH,KAAM1H,KAAK2zL,eAE/C,IAUIvgF,EAAOrxE,EAVPhL,EAAO,EACPC,EAAS,EAETi9J,EAAW,cACXC,EAAU,CACZloL,OAAQ,GACRmoL,UAAW,CAAEp9J,KAAM,EAAGC,OAAQ,GAC9ButE,SAAU,CAAExtE,KAAM,EAAGC,OAAQ,IAI/Bh3B,KAAK0jB,UAAU1jB,KAAKnc,MAAM,CAAC03E,EAAKtuE,EAAME,KA4BpC,GA3BA6S,KAAKuyH,KAAOh3D,EAERtuE,GAAiB,QAATE,IACV+mM,EAAQC,UAAUp9J,KAAOA,EACzBm9J,EAAQC,UAAUn9J,OAASA,EAAS,EAChC/pC,EAAK+e,QAAU/e,EAAK+e,OAAO8Z,OAC7BouK,EAAQloL,OAAShM,KAAKg0L,WAAW/mM,GACjCinM,EAAQ3vF,SAASxtE,KAAO9pC,EAAK+e,OAAO8Z,MAAMiR,KAC1Cm9J,EAAQ3vF,SAASvtE,OAAS/pC,EAAK+e,OAAO8Z,MAAMkR,OAAS,EACrDh3B,KAAK4B,IAAIwyL,WAAWF,KAEpBA,EAAQloL,OAASioL,EACjBC,EAAQ3vF,SAASxtE,KAAO,EACxBm9J,EAAQ3vF,SAASvtE,OAAS,EAC1Bh3B,KAAK4B,IAAIwyL,WAAWF,KAIxB9gF,EAAQ73C,EAAIp6D,MAAM,OACdiyG,GACFr8E,GAAQq8E,EAAMpyG,OACd+gC,EAAOw5B,EAAIp3C,YAAY,MACvB6S,EAASukC,EAAIv6D,OAAS+gC,GAEtB/K,GAAUukC,EAAIv6D,OAGZ/T,GAAiB,UAATE,EAAkB,CAC5B,IAAI4iC,EAAI9iC,EAAK48B,QAAU,CAAE4M,KAAM,KACb,SAAdxpC,EAAKE,MAAmBF,IAAS8iC,EAAEgS,MAAQhS,EAAE0G,KAAKqoC,aAChD7xE,EAAK+e,QAAU/e,EAAK+e,OAAO0Z,KAC7BwuK,EAAQloL,OAAShM,KAAKg0L,WAAW/mM,GACjCinM,EAAQ3vF,SAASxtE,KAAO9pC,EAAK+e,OAAO0Z,IAAIqR,KACxCm9J,EAAQ3vF,SAASvtE,OAAS/pC,EAAK+e,OAAO0Z,IAAIsR,OAAS,EACnDk9J,EAAQC,UAAUp9J,KAAOA,EACzBm9J,EAAQC,UAAUn9J,OAASA,EAAS,EACpCh3B,KAAK4B,IAAIwyL,WAAWF,KAEpBA,EAAQloL,OAASioL,EACjBC,EAAQ3vF,SAASxtE,KAAO,EACxBm9J,EAAQ3vF,SAASvtE,OAAS,EAC1Bk9J,EAAQC,UAAUp9J,KAAOA,EACzBm9J,EAAQC,UAAUn9J,OAASA,EAAS,EACpCh3B,KAAK4B,IAAIwyL,WAAWF,SAO9Bh0D,WAGE,GAFAlgI,KAAKgzL,kBAED/+D,GAAiBD,GAAsBh0H,KAAK6uI,QAC9C,OAAO7uI,KAAK6zL,cAGd,IAAI5lK,EAAS,GAIb,OAHAjuB,KAAK0jB,UAAU1jB,KAAKnc,MAAM2e,IACxByrB,GAAUzrB,KAEL,CAACyrB,M,wBCrSZ,IAAIomK,EAAU,GAEdrwM,EAAOD,QAAU,SAAkBm5C,GAC7Bm3J,EAAQn3J,KACZm3J,EAAQn3J,IAAW,EAEI,oBAAZw/D,SAA2BA,QAAQF,Q,uBCNhD,IAAI97D,EAAc90C,EAAQ,IACtB0oM,EAAY1oM,EAAQ,KACpB+0C,EAAU/0C,EAAQ,IAClB20C,EAAS30C,EAAQ,IACjBs0G,EAAOt0G,EAAQ,IACf00C,EAAO10C,EAAQ,IAuiBnB5H,EAAOD,QAriBP,MACE2c,YAAYo6D,GACV96D,KAAK86D,MAAQA,EAEb96D,KAAKnc,KAAO,IAAIq8G,EAChBlgG,KAAK++B,QAAU/+B,KAAKnc,KACpBmc,KAAKy1B,OAAS,GACdz1B,KAAK8+D,WAAY,EACjB9+D,KAAKu0L,gBAAiB,EAEtBv0L,KAAKw0L,kBACLx0L,KAAKnc,KAAKmoB,OAAS,CAAE8uD,QAAOh1C,MAAO,CAAEu9D,OAAQ,EAAGtsD,KAAM,EAAGC,OAAQ,IAGnEw9J,kBACEx0L,KAAKs0L,UAAYA,EAAUt0L,KAAK86D,OAGlCr0C,QACE,IAAIshB,EACJ,MAAQ/nC,KAAKs0L,UAAUG,aAGrB,OAFA1sJ,EAAQ/nC,KAAKs0L,UAAU5nH,YAEf3kC,EAAM,IACZ,IAAK,QACH/nC,KAAKy1B,QAAUsS,EAAM,GACrB,MAEF,IAAK,IACH/nC,KAAK00L,cAAc3sJ,GACnB,MAEF,IAAK,IACH/nC,KAAK0lB,IAAIqiB,GACT,MAEF,IAAK,UACH/nC,KAAKk6B,QAAQ6N,GACb,MAEF,IAAK,UACH/nC,KAAK6pI,OAAO9hG,GACZ,MAEF,IAAK,IACH/nC,KAAK20L,UAAU5sJ,GACf,MAEF,QACE/nC,KAAKqC,MAAM0lC,GAIjB/nC,KAAK40L,UAGP16J,QAAQ6N,GACN,IAAI96C,EAAO,IAAI0zC,EACf3gC,KAAKgI,KAAK/a,EAAM86C,EAAM,IACtB96C,EAAK+e,OAAO0Z,IAAM1lB,KAAK60L,YAAY9sJ,EAAM,IAAMA,EAAM,IAErD,IAAIjF,EAAOiF,EAAM,GAAG3jC,MAAM,GAAI,GAC9B,GAAI,QAAQtC,KAAKghC,GACf71C,EAAK61C,KAAO,GACZ71C,EAAKwpC,KAAKxwB,KAAO68B,EACjB71C,EAAKwpC,KAAKvwB,MAAQ,OACb,CACL,IAAI/E,EAAQ2hC,EAAK3hC,MAAM,wBACvBlU,EAAK61C,KAAO3hC,EAAM,GAClBlU,EAAKwpC,KAAKxwB,KAAO9E,EAAM,GACvBlU,EAAKwpC,KAAKvwB,MAAQ/E,EAAM,IAI5BwzL,UAAU5sJ,GACR,IAAI96C,EAAO,IAAIqzC,EACftgC,KAAKgI,KAAK/a,EAAM86C,EAAM,IACtB96C,EAAK00C,SAAW,GAChB10C,EAAKwpC,KAAKs/E,QAAU,GACpB/1G,KAAK++B,QAAU9xC,EAGjBoV,MAAMyjB,GACJ,IAAIJ,GAAM,EACNv4B,EAAO,KACPk8C,GAAQ,EACR6nC,EAAU,KACV4jH,EAAW,GACXP,EAAiBzuK,EAAM,GAAGmd,WAAW,MAErCp7B,EAAS,GACTkgC,EAAQjiB,EACZ,KAAOiiB,GAAO,CAIZ,GAHA56C,EAAO46C,EAAM,GACblgC,EAAO7E,KAAK+kC,GAEC,MAAT56C,GAAyB,MAATA,EACb+jF,IAASA,EAAUnpC,GACxB+sJ,EAAS9xL,KAAc,MAAT7V,EAAe,IAAM,UAC9B,GAAIonM,GAAkBlrJ,GAAkB,MAATl8C,EAC/B+jF,IAASA,EAAUnpC,GACxB+sJ,EAAS9xL,KAAK,UACT,GAAwB,IAApB8xL,EAAS9zL,OAAc,CAChC,GAAa,MAAT7T,EAAc,CAChB,GAAIk8C,EAEF,YADArpC,KAAK0iC,KAAK76B,EAAQ0sL,GAGlB,MAEG,GAAa,MAATpnM,EAET,YADA6S,KAAK2yH,KAAK9qH,GAEL,GAAa,MAAT1a,EAAc,CACvB6S,KAAKs0L,UAAUS,KAAKltL,EAAOonB,OAC3BvJ,GAAM,EACN,MACkB,MAATv4B,IACTk8C,GAAQ,QAEDl8C,IAAS2nM,EAASA,EAAS9zL,OAAS,KAC7C8zL,EAAS7lK,MACe,IAApB6lK,EAAS9zL,SAAckwE,EAAU,OAGvCnpC,EAAQ/nC,KAAKs0L,UAAU5nH,YAMzB,GAHI1sE,KAAKs0L,UAAUG,cAAa/uK,GAAM,GAClCovK,EAAS9zL,OAAS,GAAGhB,KAAKg1L,gBAAgB9jH,GAE1CxrD,GAAO2jB,EAAO,CAChB,KAAOxhC,EAAO7G,SACZ+mC,EAAQlgC,EAAOA,EAAO7G,OAAS,GAAG,GACpB,UAAV+mC,GAA+B,YAAVA,IACzB/nC,KAAKs0L,UAAUS,KAAKltL,EAAOonB,OAE7BjvB,KAAK0iC,KAAK76B,EAAQ0sL,QAElBv0L,KAAKi1L,YAAYptL,GAIrB8qH,KAAK9qH,GACHA,EAAOonB,MAEP,IAAIhiC,EAAO,IAAIqzC,EACftgC,KAAKgI,KAAK/a,EAAM4a,EAAO,GAAG,IAE1B5a,EAAKwpC,KAAKs/E,QAAU/1G,KAAKk1L,yBAAyBrtL,GAClD7H,KAAKsB,IAAIrU,EAAM,WAAY4a,GAC3B7H,KAAK++B,QAAU9xC,EAGjBy1C,KAAK76B,EAAQ0sL,GACX,IAAItnM,EAAO,IAAIyzC,EACf1gC,KAAKgI,KAAK/a,EAAM4a,EAAO,GAAG,IAE1B,IAwBIkgC,EAxBAhG,EAAOl6B,EAAOA,EAAO7G,OAAS,GAOlC,IANgB,MAAZ+gC,EAAK,KACP/hC,KAAK8+D,WAAY,EACjBj3D,EAAOonB,OAEThiC,EAAK+e,OAAO0Z,IAAM1lB,KAAK60L,YAAY9yJ,EAAK,IAAMA,EAAK,IAE3B,SAAjBl6B,EAAO,GAAG,IACO,IAAlBA,EAAO7G,QAAchB,KAAKi1L,YAAYptL,GAC1C5a,EAAKwpC,KAAKf,QAAU7tB,EAAOy3F,QAAQ,GAKrC,IAHAryG,EAAK+e,OAAO8Z,MAAQ9lB,KAAK60L,YAAYhtL,EAAO,GAAG,IAE/C5a,EAAKu0C,KAAO,GACL35B,EAAO7G,QAAQ,CACpB,IAAI7T,EAAO0a,EAAO,GAAG,GACrB,GAAa,MAAT1a,GAAyB,UAATA,GAA6B,YAATA,EACtC,MAEFF,EAAKu0C,MAAQ35B,EAAOy3F,QAAQ,GAM9B,IAHAryG,EAAKwpC,KAAKs/E,QAAU,GAGbluG,EAAO7G,QAAQ,CAGpB,GAFA+mC,EAAQlgC,EAAOy3F,QAEE,MAAbv3D,EAAM,GAAY,CACpB96C,EAAKwpC,KAAKs/E,SAAWhuE,EAAM,GAC3B,MAEiB,SAAbA,EAAM,IAAiB,KAAKjmC,KAAKimC,EAAM,KACzC/nC,KAAKi1L,YAAY,CAACltJ,IAEpB96C,EAAKwpC,KAAKs/E,SAAWhuE,EAAM,GAIV,MAAjB96C,EAAKu0C,KAAK,IAA+B,MAAjBv0C,EAAKu0C,KAAK,KACpCv0C,EAAKwpC,KAAKf,QAAUzoC,EAAKu0C,KAAK,GAC9Bv0C,EAAKu0C,KAAOv0C,EAAKu0C,KAAKp9B,MAAM,IAE9B,IAAI+wL,EAAcn1L,KAAKo1L,2BAA2BvtL,GAClD7H,KAAKq1L,wBAAwBxtL,GAE7B,IAAK,IAAIrF,EAAIqF,EAAO7G,OAAS,EAAGwB,GAAK,EAAGA,IAAK,CAE3C,GADAulC,EAAQlgC,EAAOrF,GACgB,eAA3BulC,EAAM,GAAGvY,cAAgC,CAC3CviC,EAAK08I,WAAY,EACjB,IAAIthG,EAASroC,KAAKs1L,WAAWztL,EAAQrF,GACrC6lC,EAASroC,KAAKu1L,cAAc1tL,GAAUwgC,EACvB,gBAAXA,IAA0Bp7C,EAAKwpC,KAAKkzG,UAAYthG,GACpD,MACK,GAA+B,cAA3BN,EAAM,GAAGvY,cAA+B,CACjD,IAAI5F,EAAQ/hB,EAAOzD,MAAM,GACrBm3D,EAAM,GACV,IAAK,IAAIhmC,EAAI/yB,EAAG+yB,EAAI,EAAGA,IAAK,CAC1B,IAAIpoC,EAAOy8B,EAAM2L,GAAG,GACpB,GAAgC,IAA5BgmC,EAAIr6D,OAAOm8B,QAAQ,MAAuB,UAATlwC,EACnC,MAEFouE,EAAM3xC,EAAMqF,MAAM,GAAKssC,EAEO,IAA5BA,EAAIr6D,OAAOm8B,QAAQ,OACrBpwC,EAAK08I,WAAY,EACjB18I,EAAKwpC,KAAKkzG,UAAYpuE,EACtB1zD,EAAS+hB,GAIb,GAAiB,UAAbme,EAAM,IAA+B,YAAbA,EAAM,GAChC,MAIJ,IAAIytJ,EAAU3tL,EAAOumB,MAAK5rB,GAAc,UAATA,EAAE,IAA2B,YAATA,EAAE,KACrDxC,KAAKsB,IAAIrU,EAAM,QAAS4a,GACpB2tL,EACFvoM,EAAKwpC,KAAKs/E,SAAWo/E,EAErBloM,EAAK3I,MAAQ6wM,EAAcloM,EAAK3I,MAG9B2I,EAAK3I,MAAM2mC,SAAS,OAASspK,GAC/Bv0L,KAAKy1L,qBAAqB5tL,GAI9BgiI,OAAO9hG,GACL,IAOI56C,EACAkpC,EACAipE,EATAryG,EAAO,IAAIszC,EACftzC,EAAKwW,KAAOskC,EAAM,GAAG3jC,MAAM,GACT,KAAdnX,EAAKwW,MACPzD,KAAK01L,cAAczoM,EAAM86C,GAE3B/nC,KAAKgI,KAAK/a,EAAM86C,EAAM,IAKtB,IAAIhG,GAAO,EACP4zJ,GAAO,EACPxtL,EAAS,GACT2sL,EAAW,GAEf,MAAQ90L,KAAKs0L,UAAUG,aAAa,CAYlC,GAVAtnM,GADA46C,EAAQ/nC,KAAKs0L,UAAU5nH,aACV,GAEA,MAATv/E,GAAyB,MAATA,EAClB2nM,EAAS9xL,KAAc,MAAT7V,EAAe,IAAM,KACjB,MAATA,GAAgB2nM,EAAS9zL,OAAS,EAC3C8zL,EAAS9xL,KAAK,KACL7V,IAAS2nM,EAASA,EAAS9zL,OAAS,IAC7C8zL,EAAS7lK,MAGa,IAApB6lK,EAAS9zL,OAAc,CACzB,GAAa,MAAT7T,EAAc,CAChBF,EAAK+e,OAAO0Z,IAAM1lB,KAAK60L,YAAY9sJ,EAAM,IACzC/nC,KAAK8+D,WAAY,EACjB,MACK,GAAa,MAAT3xE,EAAc,CACvBwoM,GAAO,EACP,MACK,GAAa,MAATxoM,EAAc,CACvB,GAAIgb,EAAOnH,OAAS,EAAG,CAGrB,IAFAs+F,EAAQn3F,EAAOnH,OAAS,EACxBq1B,EAAOluB,EAAOm3F,GACPjpE,GAAoB,UAAZA,EAAK,IAClBA,EAAOluB,IAASm3F,GAEdjpE,IACFppC,EAAK+e,OAAO0Z,IAAM1lB,KAAK60L,YAAYx+J,EAAK,IAAMA,EAAK,KAGvDr2B,KAAK0lB,IAAIqiB,GACT,MAEA5/B,EAAOnF,KAAK+kC,QAGd5/B,EAAOnF,KAAK+kC,GAGd,GAAI/nC,KAAKs0L,UAAUG,YAAa,CAC9B1yJ,GAAO,EACP,OAIJ90C,EAAKwpC,KAAKs/E,QAAU/1G,KAAKk1L,yBAAyB/sL,GAC9CA,EAAOnH,QACT/T,EAAKwpC,KAAKqzG,UAAY9pI,KAAKo1L,2BAA2BjtL,GACtDnI,KAAKsB,IAAIrU,EAAM,SAAUkb,GACrB45B,IACFgG,EAAQ5/B,EAAOA,EAAOnH,OAAS,GAC/B/T,EAAK+e,OAAO0Z,IAAM1lB,KAAK60L,YAAY9sJ,EAAM,IAAMA,EAAM,IACrD/nC,KAAKy1B,OAASxoC,EAAKwpC,KAAKs/E,QACxB9oH,EAAKwpC,KAAKs/E,QAAU,MAGtB9oH,EAAKwpC,KAAKqzG,UAAY,GACtB78I,EAAKkb,OAAS,IAGZwtL,IACF1oM,EAAK4zC,MAAQ,GACb7gC,KAAK++B,QAAU9xC,GAInBy4B,IAAIqiB,GACE/nC,KAAK++B,QAAQ8B,OAAS7gC,KAAK++B,QAAQ8B,MAAM7/B,SAC3ChB,KAAK++B,QAAQtI,KAAKqoC,UAAY9+D,KAAK8+D,WAErC9+D,KAAK8+D,WAAY,EAEjB9+D,KAAK++B,QAAQtI,KAAKd,OAAS31B,KAAK++B,QAAQtI,KAAKd,OAAS,IAAM31B,KAAKy1B,OACjEz1B,KAAKy1B,OAAS,GAEVz1B,KAAK++B,QAAQlV,QACf7pB,KAAK++B,QAAQ/yB,OAAO0Z,IAAM1lB,KAAK60L,YAAY9sJ,EAAM,IACjD/nC,KAAK++B,QAAU/+B,KAAK++B,QAAQlV,QAE5B7pB,KAAK41L,gBAAgB7tJ,GAIzB6sJ,UACM50L,KAAK++B,QAAQlV,QAAQ7pB,KAAK61L,gBAC1B71L,KAAK++B,QAAQ8B,OAAS7gC,KAAK++B,QAAQ8B,MAAM7/B,SAC3ChB,KAAK++B,QAAQtI,KAAKqoC,UAAY9+D,KAAK8+D,WAErC9+D,KAAK++B,QAAQtI,KAAKd,OAAS31B,KAAK++B,QAAQtI,KAAKd,OAAS,IAAM31B,KAAKy1B,OAGnEi/J,cAAc3sJ,GAEZ,GADA/nC,KAAKy1B,QAAUsS,EAAM,GACjB/nC,KAAK++B,QAAQ8B,MAAO,CACtB,IAAIxK,EAAOr2B,KAAK++B,QAAQ8B,MAAM7gC,KAAK++B,QAAQ8B,MAAM7/B,OAAS,GACtDq1B,GAAsB,SAAdA,EAAKlpC,OAAoBkpC,EAAKI,KAAKmzG,eAC7CvzG,EAAKI,KAAKmzG,aAAe5pI,KAAKy1B,OAC9Bz1B,KAAKy1B,OAAS,KAOpBo/J,YAAYxxG,GACV,IAAI9qC,EAAMv4C,KAAK86D,MAAMu5D,WAAWhxC,GAChC,MAAO,CACLA,SACAtsD,KAAMwhB,EAAIxhB,KACVC,OAAQuhB,EAAI5K,KAIhB3lC,KAAK/a,EAAMo2F,GACTrjF,KAAK++B,QAAQ/7B,KAAK/V,GAClBA,EAAK+e,OAAS,CACZ8Z,MAAO9lB,KAAK60L,YAAYxxG,GACxBvoB,MAAO96D,KAAK86D,OAEd7tE,EAAKwpC,KAAKf,OAAS11B,KAAKy1B,OACxBz1B,KAAKy1B,OAAS,GACI,YAAdxoC,EAAKE,OAAoB6S,KAAK8+D,WAAY,GAGhDx9D,IAAIrU,EAAMu0C,EAAM35B,GACd,IAAIkgC,EAAO56C,EAIP6lC,EAAMqD,EAHNr1B,EAAS6G,EAAO7G,OAChB1c,EAAQ,GACR20G,GAAQ,EAERnwF,EAAU,kBAEd,IAAK,IAAItG,EAAI,EAAGA,EAAIxB,EAAQwB,GAAK,EAC/BulC,EAAQlgC,EAAOrF,GACfrV,EAAO46C,EAAM,GAEA,YAAT56C,GAAoC,SAAdF,EAAKE,KAkBlB,YAATA,GAAgC,UAATA,GAAoBqV,IAAMxB,EAAS,EAC5Di4F,GAAQ,EAER30G,GAASyjD,EAAM,IApBf1R,EAAOxuB,EAAOrF,EAAI,GAClBwwB,EAAOnrB,EAAOrF,EAAI,GAGJ,UAAZ6zB,EAAK,IACO,UAAZrD,EAAK,IACLlqB,EAAQhH,KAAKu0B,EAAK,KAClBvtB,EAAQhH,KAAKkxB,EAAK,IAElB1uC,GAASyjD,EAAM,GAEfkxD,GAAQ,GAYd,IAAKA,EAAO,CACV,IAAI33F,EAAMuG,EAAOu7F,QAAO,CAAC1uE,EAAKlyB,IAAMkyB,EAAMlyB,EAAE,IAAI,IAChDvV,EAAKwpC,KAAK+K,GAAQ,CAAEl9C,QAAOgd,OAE7BrU,EAAKu0C,GAAQl9C,EAGf4wM,yBAAyBrtL,GACvB,IAAIiuL,EACArgK,EAAS,GACb,KAAO5tB,EAAO7G,SACZ80L,EAAgBjuL,EAAOA,EAAO7G,OAAS,GAAG,GACpB,UAAlB80L,GAA+C,YAAlBA,IACjCrgK,EAAS5tB,EAAOonB,MAAM,GAAKwG,EAE7B,OAAOA,EAGT2/J,2BAA2BvtL,GACzB,IAAImrB,EACAyC,EAAS,GACb,KAAO5tB,EAAO7G,SACZgyB,EAAOnrB,EAAO,GAAG,GACJ,UAATmrB,GAA6B,YAATA,IACxByC,GAAU5tB,EAAOy3F,QAAQ,GAE3B,OAAO7pE,EAGT8/J,cAAc1tL,GACZ,IAAIiuL,EACArgK,EAAS,GACb,KAAO5tB,EAAO7G,SACZ80L,EAAgBjuL,EAAOA,EAAO7G,OAAS,GAAG,GACpB,UAAlB80L,IACJrgK,EAAS5tB,EAAOonB,MAAM,GAAKwG,EAE7B,OAAOA,EAGT6/J,WAAWztL,EAAQid,GACjB,IAAImJ,EAAS,GACb,IAAK,IAAIzrB,EAAIsiB,EAAMtiB,EAAIqF,EAAO7G,OAAQwB,IACpCyrB,GAAUpmB,EAAOrF,GAAG,GAGtB,OADAqF,EAAO06B,OAAOzd,EAAMjd,EAAO7G,OAAS8jB,GAC7BmJ,EAGTob,MAAMxhC,GACJ,IACIkgC,EAAO56C,EAAMkpC,EADby+J,EAAW,EAEf,IAAK,IAAKtyL,EAAG0lE,KAAYrgE,EAAOgoH,UAAW,CAUzC,GATA9nF,EAAQmgC,EACR/6E,EAAO46C,EAAM,GAEA,MAAT56C,IACF2nM,GAAY,GAED,MAAT3nM,IACF2nM,GAAY,GAEG,IAAbA,GAA2B,MAAT3nM,EAAc,CAClC,GAAKkpC,EAEE,IAAgB,SAAZA,EAAK,IAA6B,WAAZA,EAAK,GACpC,SAEA,OAAO7zB,EAJPxC,KAAKspC,YAAYvB,GAQrB1R,EAAO0R,EAET,OAAO,EAKTitJ,gBAAgB9jH,GACd,MAAMlxE,KAAK86D,MAAMrjC,MAAM,mBAAoBy5C,EAAQ,IAGrD+jH,YAAYptL,GACV,MAAM7H,KAAK86D,MAAMrjC,MAAM,eAAgB5vB,EAAO,GAAG,IAGnD+tL,gBAAgB7tJ,GACd,MAAM/nC,KAAK86D,MAAMrjC,MAAM,eAAgBsQ,EAAM,IAG/C8tJ,gBACE,IAAIt9I,EAAMv4C,KAAK++B,QAAQ/yB,OAAO8Z,MAC9B,MAAM9lB,KAAK86D,MAAMrjC,MAAM,iBAAkB8gB,EAAIxhB,KAAMwhB,EAAIvhB,QAGzDsS,YAAYvB,GACV,MAAM/nC,KAAK86D,MAAMrjC,MAAM,eAAgBsQ,EAAM,IAG/C2tJ,cAAczoM,EAAM86C,GAClB,MAAM/nC,KAAK86D,MAAMrjC,MAAM,uBAAwBsQ,EAAM,IAGvDstJ,2BAIAI,qBAAqB5tL,GACnB,IAAIwhC,EAAQrpC,KAAKqpC,MAAMxhC,GACvB,IAAc,IAAVwhC,EAAiB,OAErB,IACItB,EADAguJ,EAAU,EAEd,IAAK,IAAIxgK,EAAI8T,EAAQ,EAAG9T,GAAK,IAC3BwS,EAAQlgC,EAAO0tB,GACE,UAAbwS,EAAM,KACRguJ,GAAW,EACK,IAAZA,IAJwBxgK,KAOhC,MAAMv1B,KAAK86D,MAAMrjC,MAAM,mBAAoBsQ,EAAM,O,iBCxiBrD,MAAMiuJ,EAAe,IAAI/xK,WAAW,GAC9BgyK,EAAe,IAAIhyK,WAAW,GAC9BiyK,EAAY,KAAKjyK,WAAW,GAC5BkyK,EAAQ,IAAIlyK,WAAW,GACvBouF,EAAU,KAAKpuF,WAAW,GAC1BmyK,EAAQ,IAAInyK,WAAW,GACvBoyK,EAAO,KAAKpyK,WAAW,GACvBqyK,EAAM,KAAKryK,WAAW,GACtBsyK,EAAK,KAAKtyK,WAAW,GACrBuyK,EAAc,IAAIvyK,WAAW,GAC7BwyK,EAAe,IAAIxyK,WAAW,GAC9ByyK,EAAmB,IAAIzyK,WAAW,GAClC0yK,EAAoB,IAAI1yK,WAAW,GACnC2yK,EAAa,IAAI3yK,WAAW,GAC5B4yK,EAAc,IAAI5yK,WAAW,GAC7B6yK,EAAY,IAAI7yK,WAAW,GAC3B8yK,EAAW,IAAI9yK,WAAW,GAC1B+yK,EAAQ,IAAI/yK,WAAW,GACvBgzK,EAAK,IAAIhzK,WAAW,GAEpBizK,EAAY,6BACZC,EAAc,wCACdC,EAAiB,cACjBC,EAAgB,WAEtBrzM,EAAOD,QAAU,SAAmB+2E,EAAOl6D,EAAU,IACnD,IAGI0D,EAAM0uB,EAAMqoC,EAAOyqB,EAAS2nD,EAC5B7nD,EAAS0xG,EAAWjhK,EAAMwxD,EAAG0vG,EAJ7BhlE,EAAMz3D,EAAMy3D,IAAIzrB,UAChB1G,EAASx/F,EAAQ42L,aAKjBx2L,EAASuxH,EAAIvxH,OACbu3C,EAAM,EACNkuD,EAAS,GACTgxF,EAAW,GAMf,SAASC,EAASC,GAChB,MAAM78H,EAAMrjC,MAAM,YAAckgK,EAAMp/I,GAuNxC,MAAO,CACLw8I,KALF,SAAchtJ,GACZ0vJ,EAASz0L,KAAK+kC,IAKd2kC,UAlNF,SAAmBx/E,GACjB,GAAIuqM,EAASz2L,OAAQ,OAAOy2L,EAASxoK,MACrC,GAAIspB,GAAOv3C,EAAQ,OAEnB,IAAI42L,IAAiB1qM,GAAOA,EAAK0qM,eAIjC,OAFAtzL,EAAOiuH,EAAItuG,WAAWs0B,GAEdj0C,GACN,KAAK+tG,EACL,KAAK+jF,EACL,KAAKE,EACL,KAAKC,EACL,KAAKF,EACHrjK,EAAOulB,EACP,GACEvlB,GAAQ,EACR1uB,EAAOiuH,EAAItuG,WAAW+O,SAEtB1uB,IAAS8xL,GACT9xL,IAAS+tG,GACT/tG,IAASgyL,GACThyL,IAASiyL,GACTjyL,IAAS+xL,GAGXkB,EAAe,CAAC,QAAShlE,EAAInuH,MAAMm0C,EAAKvlB,IACxCulB,EAAMvlB,EAAO,EACb,MAGF,KAAKwjK,EACL,KAAKC,EACL,KAAKG,EACL,KAAKC,EACL,KAAKG,EACL,KAAKF,EACL,KAAKH,EAAmB,CACtB,IAAIkB,EAAc1gK,OAAOshB,aAAan0C,GACtCizL,EAAe,CAACM,EAAaA,EAAat/I,GAC1C,MAGF,KAAKm+I,EAGH,GAFArgK,EAAOowE,EAAOzlG,OAASylG,EAAOx3E,MAAM,GAAK,GACzC44D,EAAI0qC,EAAItuG,WAAWs0B,EAAM,GAEd,QAATliB,GACAwxD,IAAMmuG,GACNnuG,IAAMouG,GACNpuG,IAAMuuG,GACNvuG,IAAMwqB,GACNxqB,IAAMyuG,GACNzuG,IAAMwuG,GACNxuG,IAAM0uG,EACN,CACAvjK,EAAOulB,EACP,EAAG,CAGD,GAFAqtC,GAAU,EACV5yD,EAAOu/F,EAAIl1F,QAAQ,IAAKrK,EAAO,IACjB,IAAVA,EAAa,CACf,GAAIotE,GAAUw3F,EAAgB,CAC5B5kK,EAAOulB,EACP,MAEAm/I,EAAS,WAIb,IADAJ,EAAYtkK,EACLu/F,EAAItuG,WAAWqzK,EAAY,KAAOpB,GACvCoB,GAAa,EACb1xG,GAAWA,QAENA,GAET2xG,EAAe,CAAC,WAAYhlE,EAAInuH,MAAMm0C,EAAKvlB,EAAO,GAAIulB,EAAKvlB,GAE3DulB,EAAMvlB,OAENA,EAAOu/F,EAAIl1F,QAAQ,IAAKkb,EAAM,GAC9ButC,EAAUysC,EAAInuH,MAAMm0C,EAAKvlB,EAAO,IAElB,IAAVA,GAAeokK,EAAet1L,KAAKgkF,GACrCyxG,EAAe,CAAC,IAAK,IAAKh/I,IAE1Bg/I,EAAe,CAAC,WAAYzxG,EAASvtC,EAAKvlB,GAC1CulB,EAAMvlB,GAIV,MAGF,KAAKgjK,EACL,KAAKC,EACH56H,EAAQ/2D,IAAS0xL,EAAe,IAAM,IACtChjK,EAAOulB,EACP,EAAG,CAGD,GAFAqtC,GAAU,EACV5yD,EAAOu/F,EAAIl1F,QAAQg+B,EAAOroC,EAAO,IACnB,IAAVA,EAAa,CACf,GAAIotE,GAAUw3F,EAAgB,CAC5B5kK,EAAOulB,EAAM,EACb,MAEAm/I,EAAS,UAIb,IADAJ,EAAYtkK,EACLu/F,EAAItuG,WAAWqzK,EAAY,KAAOpB,GACvCoB,GAAa,EACb1xG,GAAWA,QAENA,GAET2xG,EAAe,CAAC,SAAUhlE,EAAInuH,MAAMm0C,EAAKvlB,EAAO,GAAIulB,EAAKvlB,GACzDulB,EAAMvlB,EACN,MAGF,KAAKikK,EACHC,EAAU5zG,UAAY/qC,EAAM,EAC5B2+I,EAAUp1L,KAAKywH,GAEbv/F,EAD0B,IAAxBkkK,EAAU5zG,UACLivC,EAAIvxH,OAAS,EAEbk2L,EAAU5zG,UAAY,EAG/Bi0G,EAAe,CAAC,UAAWhlE,EAAInuH,MAAMm0C,EAAKvlB,EAAO,GAAIulB,EAAKvlB,GAE1DulB,EAAMvlB,EACN,MAGF,KAAKkjK,EAGH,IAFAljK,EAAOulB,EACPk1F,GAAS,EACFlb,EAAItuG,WAAW+O,EAAO,KAAOkjK,GAClCljK,GAAQ,EACRy6G,GAAUA,EAGZ,GADAnpI,EAAOiuH,EAAItuG,WAAW+O,EAAO,GAE3By6G,GACAnpI,IAAS6xL,GACT7xL,IAAS8xL,GACT9xL,IAAS+tG,GACT/tG,IAASgyL,GACThyL,IAASiyL,GACTjyL,IAAS+xL,IAETrjK,GAAQ,EACJqkK,EAAcv1L,KAAKywH,EAAI0D,OAAOjjG,KAAQ,CACxC,KAAOqkK,EAAcv1L,KAAKywH,EAAI0D,OAAOjjG,EAAO,KAC1CA,GAAQ,EAENu/F,EAAItuG,WAAW+O,EAAO,KAAOojK,IAC/BpjK,GAAQ,GAKdukK,EAAe,CAAC,OAAQhlE,EAAInuH,MAAMm0C,EAAKvlB,EAAO,GAAIulB,EAAKvlB,GAEvDulB,EAAMvlB,EACN,MAGF,QACM1uB,IAAS6xL,GAAS5jE,EAAItuG,WAAWs0B,EAAM,KAAOw+I,GAChD/jK,EAAOu/F,EAAIl1F,QAAQ,KAAMkb,EAAM,GAAK,EACvB,IAATvlB,IACEotE,GAAUw3F,EACZ5kK,EAAOu/F,EAAIvxH,OAEX02L,EAAS,YAIbH,EAAe,CAAC,UAAWhlE,EAAInuH,MAAMm0C,EAAKvlB,EAAO,GAAIulB,EAAKvlB,GAC1DulB,EAAMvlB,IAENmkK,EAAY7zG,UAAY/qC,EAAM,EAC9B4+I,EAAYr1L,KAAKywH,GAEfv/F,EAD4B,IAA1BmkK,EAAY7zG,UACPivC,EAAIvxH,OAAS,EAEbm2L,EAAY7zG,UAAY,EAGjCi0G,EAAe,CAAC,OAAQhlE,EAAInuH,MAAMm0C,EAAKvlB,EAAO,GAAIulB,EAAKvlB,GACvDyzE,EAAOzjG,KAAKu0L,GACZh/I,EAAMvlB,GAQZ,OADAulB,IACOg/I,GAUP9C,UAvNF,WACE,OAA2B,IAApBgD,EAASz2L,QAAgBu3C,GAAOv3C,GAuNvCq3I,SAhOF,WACE,OAAO9/F,M,ICXXv0D,EAAOD,QAAU,CAAE8vI,OAXN,CAAC7lG,EAAO,MACnB,IAAInsB,EAAK,GAELW,EAAIwrB,EACR,KAAOxrB,KAELX,GArBF,mEAqBqC,GAAhBjC,KAAK+9G,SAAiB,GAE3C,OAAO97G,GAGkBi2L,eAxBN,CAACtmF,EAAUxjF,IACvB,KACL,IAAInsB,EAAK,GAELW,EAAIwrB,EACR,KAAOxrB,KAELX,GAAM2vG,EAAU5xG,KAAK+9G,SAAWnM,EAASxwG,OAAU,GAErD,OAAOa,K,uBCZX9d,EAAQ+gB,YAAa,EACrB/gB,EAAQo2J,cAAgBA,EACxBp2J,eAAqB,EAErB,IAQIg0M,EARAr7E,EAAUC,EAAuB/wH,EAAQ,KAEzC2pI,EAAS5Y,EAAuB/wH,EAAQ,KAExCmxH,EAAaJ,EAAuB/wH,EAAQ,KAE5Cw9B,EAASx9B,EAAQ,GAIrB,SAAS+wH,EAAuB93G,GAAO,OAAOA,GAAOA,EAAIC,WAAaD,EAAM,CAAE,QAAWA,GAEzF,SAASowB,EAAkBC,EAAQC,GAAS,IAAK,IAAI3yB,EAAI,EAAGA,EAAI2yB,EAAMn0B,OAAQwB,IAAK,CAAE,IAAI4yB,EAAaD,EAAM3yB,GAAI4yB,EAAWntC,WAAamtC,EAAWntC,aAAc,EAAOmtC,EAAWvB,cAAe,EAAU,UAAWuB,IAAYA,EAAWC,UAAW,GAAMjxC,OAAOC,eAAe6wC,EAAQE,EAAWlpC,IAAKkpC,IAM7S,SAASmlF,EAAgBziF,EAAG/H,GAA+G,OAA1GwqF,EAAkBn2H,OAAOo/C,gBAAkB,SAAyB1L,EAAG/H,GAAsB,OAAjB+H,EAAE0iF,UAAYzqF,EAAU+H,IAA6BA,EAAG/H,GAErK,IAAIgxE,EAAYn1G,EAAQ,KAEpBosM,EAAoB,kBACpBC,EAAkCl3F,GAAU,cAAgB,wIAC5Dm3F,EAAmCn3F,GAAU,cAAgB,4FAC7Do3F,EAA8Bp3F,GAAU,cAAgB,wIAE5D,SAASo5C,EAAc71J,GACrB,IAAI8zM,GAAkB,EAClBr+C,EAAY,KACZK,EAAY91J,EACZ2c,EAAIm5I,EAAUj5I,MAAM62L,GAaxB,OAXI/2L,IACF84I,EAAY94I,EAAE,GACdm5I,EAAYn5I,EAAE,KAGhBm5I,GAAY,EAAI7kB,EAAM,SAAa6kB,MAEjB91J,IAChB8zM,GAAkB,GAGb,CACLA,gBAAiBA,EACjBh+C,UAAWA,EACXL,UAAWA,GAgCf,IAAIs+C,EAAyB,SAAUl9D,GA/DvC,IAAwBzgB,EAAU7uG,EAkEhC,SAASwsL,EAAUnrM,GACjB,IAAIs/C,EAkBJ,YAhBa,IAATt/C,IACFA,EAAO,KAGTs/C,EAAQ2uF,EAAW9uI,KAAK2T,KAtC5B,SAAwC9S,GACtC,QAAuByV,IAAnBzV,EAAK6sJ,UACP,OAAO7sJ,EAGT,QAAmByV,IAAfzV,EAAK5I,MACP,OAAO4I,EAGTirM,IAEA,IAAIj+C,EAAiBC,EAAcjtJ,EAAK5I,OACpCy1J,EAAYG,EAAeH,UAC3BK,EAAYF,EAAeE,UAY/B,OAVKltJ,EAAKupC,OACRvpC,EAAKupC,KAAO,SAGU9zB,IAApBzV,EAAKupC,KAAKnyC,QACZ4I,EAAKupC,KAAKnyC,MAAQ4I,EAAK5I,OAGzB4I,EAAK5I,MAAQ81J,EACbltJ,EAAK6sJ,UAAYA,EACV7sJ,EAayBorM,CAA+BprM,KAAU8S,MACjE7S,KAAOi8B,EAAOpkB,UACpBwnC,EAAM/V,KAAO+V,EAAM/V,MAAQ,GAC3BryC,OAAOC,eAAemoD,EAAM/V,KAAM,WAAY,CAC5CvuC,IAAK64G,GAAU,WACb,OAAOv0D,EAAMloD,QACZ,8DACH4nC,IAAK60E,GAAU,WACb,OAAOv0D,EAAMloD,QACZ,yGAELkoD,EAAMwuF,cAAe,EACdxuF,EArFuB3gC,EAgENsvH,GAhEJzgB,EAgEP29E,GAhEwClsM,UAAY/H,OAAOyzC,OAAOhsB,EAAW1f,WAAYuuH,EAASvuH,UAAUuU,YAAcg6G,EAAUH,EAAgBG,EAAU7uG,GA8G7K,IAhHoB+pB,EAAaC,EAgH7BC,EAASuiK,EAAUlsM,UAwWvB,OAtWA2pC,EAAOyiK,eAAiB,SAAwB33L,QAC9B,IAAZA,IACFA,EAAU,IAGZ,IAAIm5I,EAAY/5I,KAAKw4L,oBAAoB53L,GAErC63L,EAAaC,EAAqB3+C,GAEtC,OADc,EAAIr9B,EAAO,SAAa18G,KAAKi7H,OAAQw9D,IAIrD3iK,EAAO0iK,oBAAsB,SAA6B53L,GACxD,OAAOA,EAAQu/B,MAAQngC,KAAK24L,eAAe/3L,GAAWZ,KAAK44L,mBAAmBh4L,IAShFk1B,EAAO84H,SAAW,SAAkBtqK,EAAOsc,QACzB,IAAZA,IACFA,EAAU,IAGZZ,KAAKi7H,OAAS32I,EACd0b,KAAK64L,WAAa74L,KAAKw4L,oBAAoB53L,GAE3CZ,KAAK84L,iBAgBPhjK,EAAO6iK,eAAiB,SAAwB/3L,GAC9C,IAAIs3B,EAAIl4B,KAAK1b,MACTy0M,EAAkB7gK,EAAEnL,QAAQ,QAAS,IAAI/rB,OACzCg4L,EAAkB9gK,EAAEnL,QAAQ,QAAS,IAAI/rB,OAE7C,GAAI+3L,EAAkBC,IAAoB,EAAG,CAC3C,IAAIpzG,GAAU,EAAI82B,EAAO,SAAaxkF,EAAG,CACvC1pC,cAAc,IAGhB,GAAIo3F,IAAY1tD,EACd,OAAOmgK,EAAUY,SAEjB,IAAIC,EAAOl5L,KAAK44L,mBAAmBh4L,GAEnC,GAAIs4L,IAASb,EAAUY,SAAU,CAE/B,IAAI59H,EAAQr7D,KAAK+5I,WAAan5I,EAAQm5I,WAAas+C,EAAUpC,aACzD/oM,EAAOwrM,EAAqBr9H,GAGhC,IAFiB,EAAIqhD,EAAO,SAAaxkF,EAAGhrC,GAE7B8T,OAAS4kF,EAAQ5kF,OAC9B,OAAOq6D,EAIX,OAAO69H,EAEJ,OAAIF,IAAoBD,EACtB/4L,KAAK44L,mBAAmBh4L,GACtBo4L,EAAkBD,EACpBV,EAAUpC,aAEVoC,EAAUrC,cAUrBlgK,EAAO8iK,mBAAqB,SAA4Bh4L,GACtD,IAAIm5I,EAAYn5I,EAAQu4L,uBAAyBn5L,KAAK+5I,UAAYn5I,EAAQm5I,UAU1E,YARkBp3I,IAAdo3I,IACFA,EAAYn5I,EAAQu4L,uBAAyBv4L,EAAQm5I,UAAY/5I,KAAK+5I,gBAGtDp3I,IAAdo3I,IACFA,EAAYs+C,EAAUpC,cAGjBl8C,GAGTjkH,EAAOgjK,cAAgB,WACrB,IAAIpvD,GAAW,EAAIhtB,EAAO,SAAa18G,KAAKi7H,OAAQy9D,EAAqB14L,KAAK+5I,YAE1ErQ,IAAa1pI,KAAKi7H,OAChBj7H,KAAKy2B,aACAz2B,KAAKy2B,KAAKnyC,MAGnB0b,KAAKy2B,KAAKnyC,MAAQolJ,GAItB5zG,EAAOsjK,eAAiB,SAAwB53J,EAAMl9C,GACpD,GAAI0b,KAAKg7H,aAAc,CACrB,IAAIp1C,GAAU,EAAI82B,EAAO,SAAap4H,EAAO,CAC3CkK,cAAc,IAGZo3F,IAAYthG,EACd0b,KAAKy2B,KAAK+K,GAAQokD,SAEX5lF,KAAKy2B,KAAK+K,KAKvB1L,EAAOujK,WAAa,SAAoB51L,GACtC,IAIIgyB,EAASz1B,KAAKy1B,OAAOhyB,IAAS,GAC9B61L,EAAYt5L,KAAKy2B,KAAKhB,QAAUz1B,KAAKy2B,KAAKhB,OAAOhyB,IAAS,GAC9D,OAAOrf,OAAOigB,OANG,CACfqxB,OAAQ,GACRC,MAAO,IAIwBF,EAAQ6jK,IAG3CxjK,EAAOyjK,WAAa,SAAoB91L,EAAM+1L,EAAWj4K,QACrC,IAAdi4K,IACFA,EAAY/1L,QAGC,IAAX8d,IACFA,EAASk4K,GAGX,IAAIC,EAAa15L,KAAKq5L,WAAWG,GAEjC,OAAOj4K,EAAOvhB,KAAKi3B,kBAAkBxzB,GAAOi2L,IAkB9C5jK,EAAO6jK,SAAW,SAAkBl2L,GAClC,IAAIoxB,EAAQ,EAER+kK,EAAkB55L,KAAKq5L,WAAW,aAItC,GAFAxkK,GAAS+kK,EAAgBlkK,OAAO10B,OAEnB,cAATyC,GAAiC,OAATA,EAC1B,OAAOzD,KAAK+U,UAAY8f,GAAS,EAGnC,GAAa,gBAATpxB,EACF,OAAOoxB,EAST,GANAA,GAAS70B,KAAK88G,gBAAgB97G,OAE1BhB,KAAK+U,YACP8f,GAAS,GAGE,cAATpxB,EACF,OAAOoxB,EAGTA,GAAS70B,KAAKi3B,kBAAkB,aAAaj2B,OAC7C6zB,GAAS+kK,EAAgBjkK,MAAM30B,OAE/B,IAAI64L,EAAiB75L,KAAKq5L,WAAW,YAErCxkK,GAASglK,EAAenkK,OAAO10B,OAC/B,IAAIgF,EAAWhG,KAAKi3B,kBAAkB,YAEtC,GAAa,aAATxzB,EACF,OAAOuC,EAAW6uB,GAAS,EAG7BA,GAAS7uB,EAAShF,OAClB6zB,GAASglK,EAAelkK,MAAM30B,OAE9B,IAAI84L,EAAc95L,KAAKq5L,WAAW,SAElCxkK,GAASilK,EAAYpkK,OAAO10B,OAC5B,IAAI1c,EAAQ0b,KAAKi3B,kBAAkB,SAEnC,MAAa,UAATxzB,EACKnf,EAAQuwC,GAAS,GAG1BA,GAASvwC,EAAM0c,OACf6zB,GAASilK,EAAYnkK,MAAM30B,OAI3B6zB,GAFwB70B,KAAKq5L,WAAW,eAEb3jK,OAAO10B,OAErB,gBAATyC,GACKzD,KAAKg6I,YAAcnlH,GAGpB,IAGViB,EAAO3zB,SAAW,WAChB,IAAIq5G,EAASx7G,KAET2hC,EAAW,CAAC3hC,KAAKo3B,eAAgB,KAiBrC,OAhBAuK,EAAS3+B,KAAKhD,KAAKu5L,WAAW,qBAAsB,cAEhDv5L,KAAKgG,WAAahG,KAAK1b,OAAwB,KAAf0b,KAAK1b,SACvCq9C,EAAS3+B,KAAKhD,KAAKu5L,WAAW,aAC9B53J,EAAS3+B,KAAKhD,KAAKu5L,WAAW,UAC9B53J,EAAS3+B,KAAKhD,KAAKu5L,WAAW,kBAAmB,eAAe,SAAUQ,EAAWL,GAKnF,QAJIK,EAAU/4L,OAAS,IAAMw6G,EAAOw+E,QAAuC,IAA7BN,EAAWhkK,OAAO10B,QAAkBw6G,EAAO/lF,OAAOnxC,OAASk3H,EAAO/lF,OAAOnxC,MAAMqxC,QAC3H+jK,EAAWhkK,OAAS,KAGf+jK,EAAkBM,EAAWL,QAIxC/3J,EAAS3+B,KAAK,KACd2+B,EAAS3+B,KAAKhD,KAAKq3B,eACZsK,EAASz/B,KAAK,KA7WH0zB,EAgXPyiK,GAhXoBxiK,EAgXT,CAAC,CACvB3pC,IAAK,SACLhE,IAAK,WACH,IAAI+xM,EAAKj6L,KAAK+5I,UACd,MAAc,MAAPkgD,GAAqB,MAAPA,GAEvB/tK,IAAK,SAAa5nC,GAChB4zM,MASD,CACDhsM,IAAK,YACLhE,IAAK,WACH,OAAO8X,KAAK64L,YAUd3sK,IAAK,SAAa6tH,GACX/5I,KAAKg7H,aAKNh7H,KAAK64L,aAAe9+C,IACtB/5I,KAAK64L,WAAa9+C,EAElB/5I,KAAK84L,iBAPL94L,KAAK64L,WAAa9+C,IAUrB,CACD7tJ,IAAK,qBACLhE,IAAK,WACH,OAAO8X,KAAK68G,cAAc78G,KAAKy2B,KAAK89G,WAAav0I,KAAKu0I,aAEvD,CACDroJ,IAAK,kBACLhE,IAAK,WACH,OAAO8X,KAAKg6I,YAAc,IAAM,KAEjC,CACD9tJ,IAAK,QACLhE,IAAK,WACH,OAAO8X,KAAKi7H,QAed/uG,IAAK,SAAagM,GAChB,GAAIl4B,KAAKg7H,aAAc,CACrB,IAAIk/D,EAAkB//C,EAAcjiH,GAChCkgK,EAAkB8B,EAAgB9B,gBAClCh+C,EAAY8/C,EAAgB9/C,UAC5BL,EAAYmgD,EAAgBngD,UAMhC,GAJIq+C,GACFH,IAGE79C,IAAcp6I,KAAKi7H,QAAU8e,IAAc/5I,KAAK64L,WAClD,OAGF74L,KAAKi7H,OAASmf,EACdp6I,KAAK64L,WAAa9+C,EAElB/5I,KAAK84L,qBAEL94L,KAAKi7H,OAAS/iG,IAGjB,CACDhsC,IAAK,YACLhE,IAAK,WACH,OAAO8X,KAAK22I,YAEdzqH,IAAK,SAAazoB,GAChBzD,KAAKo5L,eAAe,YAAa31L,GAEjCzD,KAAK22I,WAAalzI,OApdsDwxB,EAAkBW,EAAYzpC,UAAW0pC,GAwd9GwiK,EAvZoB,CAwZ3Bt7E,EAAU,SAEZh5H,UAAqBs0M,EACrBA,EAAUY,SAAW,KACrBZ,EAAUrC,aAAe,IACzBqC,EAAUpC,aAAe,IACzB,IAAIyC,IAAwBX,EAAwB,CAClD,IAAK,CACHhiE,OAAQ,SACRQ,MAAM,GAER,IAAK,CACHR,OAAQ,SACRQ,MAAM,KAEc,KAAS,CAC/B/nI,cAAc,GACbupM,GAEH,SAAS0B,EAAkBM,EAAWL,GACpC,MAAO,GAAKA,EAAWhkK,OAASqkK,EAAYL,EAAW/jK,Q,UCzczD,SAAS8yF,EAAQhlH,GAEf,IACE,IAAK20E,IAAO+hH,aAAc,OAAO,EACjC,MAAOtqK,GACP,OAAO,EAET,IAAI2E,EAAM4jD,IAAO+hH,aAAa12L,GAC9B,OAAI,MAAQ+wB,GACyB,SAA9B2C,OAAO3C,GAAKhF,cA5DrBxrC,EAAOD,QAoBP,SAAoB2vC,EAAInB,GACtB,GAAIk2F,EAAO,iBACT,OAAO/0F,EAGT,IAAI+nE,GAAS,EAeb,OAdA,WACE,IAAKA,EAAQ,CACX,GAAIgtB,EAAO,oBACT,MAAM,IAAIvlH,MAAMqvB,GACPk2F,EAAO,oBAKlBhtB,GAAS,EAEX,OAAO/nE,EAAGxR,MAAMliB,KAAM8F,c,qBCxC1B/hB,EAAQ+gB,YAAa,EACrB/gB,EAAQ41J,WAAa51J,EAAQi1D,KAAOj1D,EAAQm2C,QAAUn2C,EAAQw3E,IAAMx3E,EAAQszJ,IAAMtzJ,EAAQqzJ,QAAUrzJ,EAAQozJ,KAAOpzJ,EAAQmzJ,GAAKnzJ,EAAQq2M,UAAYr2M,EAAQomD,KAAOpmD,EAAQmnD,MAAQnnD,EAAQs2M,YAAct2M,EAAQu2M,YAAcv2M,EAAQ4pJ,MAAQ5pJ,EAAQw2M,YAAcx2M,EAAQy2M,KAAOz2M,EAAQmnH,OAASnnH,EAAQ02M,KAAO12M,EAAQ21J,MAAQ31J,EAAQqmD,MAAQrmD,EAAQy1J,OAASz1J,EAAQ+0J,YAAc/0J,EAAQ65J,WAAa75J,EAAQy4J,iBAAmBz4J,EAAQw4J,gBAAkBx4J,EAAQ+6E,UAAY/6E,EAAQslD,MAAQtlD,EAAQolD,MAAQplD,EAAQqyC,GAAKryC,EAAQw1J,SAAWx1J,EAAQ85J,eAAY,EAG7iB95J,EAAQ85J,UAFQ,GAKhB95J,EAAQw1J,SAFO,GAKfx1J,EAAQqyC,GAFC,GAKTryC,EAAQolD,MAFI,GAKZplD,EAAQslD,MAFI,GAKZtlD,EAAQ+6E,UAFQ,GAKhB/6E,EAAQw4J,gBAFc,GAKtBx4J,EAAQy4J,iBAFe,GAKvBz4J,EAAQ65J,WAFS,GAKjB75J,EAAQ+0J,YAFU,GAKlB/0J,EAAQy1J,OAFK,GAKbz1J,EAAQqmD,MAFI,IAKZrmD,EAAQ21J,MAFI,GAKZ31J,EAAQ02M,KAFG,GAKX12M,EAAQmnH,OAFK,GAKbnnH,EAAQy2M,KAFG,IAKXz2M,EAAQw2M,YAFU,GAKlBx2M,EAAQ4pJ,MAFI,GAKZ5pJ,EAAQu2M,YAFU,GAKlBv2M,EAAQs2M,YAFU,GAKlBt2M,EAAQmnD,MAFI,GAKZnnD,EAAQomD,KAFG,GAKXpmD,EAAQq2M,UAFQ,GAKhBr2M,EAAQmzJ,GAFC,GAKTnzJ,EAAQozJ,KAFG,GAKXpzJ,EAAQqzJ,QAFM,GAMdrzJ,EAAQszJ,IAHE,EAMVtzJ,EAAQw3E,IA9BU,GAgClBx3E,EAAQm2C,SADO,EAGfn2C,EAAQi1D,MADI,EAGZj1D,EAAQ41J,YADU,G,mDC7FG+gD,EACpB,WAAY91K,GACX5kB,KAAK26L,KAAO/1K,aAAe81K,EAAS91K,EAAI+1K,KAAKv2L,QAAU,IAGzD,YAACk+B,IAAA,SAAIulD,GACH7nF,KAAK26L,KAAK9yG,GAAK,IAAM,IAAU,GAAJA,IAG7B,YAACjjF,IAAA,SAAIijF,GACJ,SAAW7nF,KAAK26L,KAAK9yG,GAAK,GAAM,IAAU,GAAJA,KCVxB,IAAM+yG,EACpB,SAAY90K,EAAOJ,EAAKogE,GACvB9lF,KAAK8lB,MAAQA,EACb9lB,KAAK0lB,IAAMA,EACX1lB,KAAKukG,SAAWze,EAEhB9lF,KAAK66L,MAAQ,GACb76L,KAAK86L,MAAQ,GAEb96L,KAAK8lF,QAAUA,EACf9lF,KAAK+6L,WAAY,EACjB/6L,KAAKg7L,QAAS,EAGd52M,OAAOugH,iBAAiB3kG,KAAM,CAC9B,SAAW,CAAEq1B,UAAU,EAAM/wC,MAAO,MACpC,KAAW,CAAE+wC,UAAU,EAAM/wC,MAAO,SAItC,YAAC22M,WAAA,SAAWn1G,GACV9lF,KAAK86L,OAASh1G,GAGhB,YAACo1G,YAAA,SAAYp1G,GACZ,KAAM+0G,MAAQ76L,KAAK66L,MAAQ/0G,GAG5B,YAAC/gG,MAAA,WACCs5D,IAAMg4G,EAAQ,IAAIukC,EAAM56L,KAAK8lB,MAAO9lB,KAAK0lB,IAAK1lB,KAAKukG,UAQpD,OANC8xD,EAAMwkC,MAAQ76L,KAAK66L,MACnBxkC,EAAMykC,MAAQ96L,KAAK86L,MACnBzkC,EAAMvwE,QAAU9lF,KAAK8lF,QACrBuwE,EAAM0kC,UAAY/6L,KAAK+6L,UACvB1kC,EAAM2kC,OAASh7L,KAAKg7L,OAEb3kC,GAGT,YAAC8kC,SAAA,SAASjlK,GACR,OAAOl2B,KAAK8lB,MAAQoQ,GAASA,EAAQl2B,KAAK0lB,KAG5C,YAAC01K,SAAA,SAAS1nK,GAET,IADC4qB,IAAI+3G,EAAQr2J,KACLq2J,GACN3iI,EAAG2iI,GACHA,EAAQA,EAAMrjI,MAIjB,YAACqoK,aAAA,SAAa3nK,GAEb,IADC4qB,IAAI+3G,EAAQr2J,KACLq2J,GACN3iI,EAAG2iI,GACHA,EAAQA,EAAMu8B,UAIjB,YAAC0I,KAAA,SAAKx1G,EAASi1G,EAAWQ,GAUzB,OATCv7L,KAAK8lF,QAAUA,EACVy1G,IACJv7L,KAAK66L,MAAQ,GACb76L,KAAK86L,MAAQ,IAEd96L,KAAK+6L,UAAYA,EAEjB/6L,KAAKg7L,QAAS,EAEPh7L,MAGT,YAACw7L,YAAA,SAAY11G,GACZ,KAAMg1G,MAAQh1G,EAAU9lF,KAAK86L,OAG9B,YAACW,aAAA,SAAa31G,GACb,KAAM+0G,MAAQ/0G,EAAU9lF,KAAK66L,OAG9B,YAACl5L,MAAA,SAAMu0B,GACN,IAAOwlK,EAAaxlK,EAAQl2B,KAAK8lB,MAE1B61K,EAAiB37L,KAAKukG,SAASngG,MAAM,EAAGs3L,GACxCE,EAAgB57L,KAAKukG,SAASngG,MAAMs3L,GAE1C17L,KAAKukG,SAAWo3F,EAEhBt9I,IAAMw9I,EAAW,IAAIjB,EAAM1kK,EAAOl2B,KAAK0lB,IAAKk2K,GAmB7C,OAlBCC,EAASf,MAAQ96L,KAAK86L,MACtB96L,KAAK86L,MAAQ,GAEb96L,KAAK0lB,IAAMwQ,EAEPl2B,KAAKg7L,QAET,EAAUM,KAAK,IAAI,GAClBt7L,KAAK8lF,QAAU,IAEf9lF,KAAK8lF,QAAU61G,EAGhBE,EAAS7oK,KAAOhzB,KAAKgzB,KACjB6oK,EAAS7oK,OAAM6oK,EAAS7oK,KAAK4/J,SAAWiJ,GAC5CA,EAASjJ,SAAW5yL,KACpBA,KAAKgzB,KAAO6oK,EAELA,GAGT,YAAC15L,SAAA,WACC,OAAOnC,KAAK66L,MAAQ76L,KAAK8lF,QAAU9lF,KAAK86L,OAG1C,YAACgB,QAAA,SAAQC,GAER,GADC/7L,KAAK86L,MAAQ96L,KAAK86L,MAAM/tK,QAAQgvK,EAAI,IAChC/7L,KAAK86L,MAAM95L,OAAQ,OAAO,EAE9Bq9C,IAAM29I,EAAUh8L,KAAK8lF,QAAQ/4D,QAAQgvK,EAAI,IAEzC,OAAIC,EAAQh7L,QACPg7L,IAAYh8L,KAAK8lF,SACrB,KAAMnkF,MAAM3B,KAAK8lB,MAAQk2K,EAAQh7L,QAAQs6L,KAAK,QAAI34L,GAAW,IAEtD,IAGR,KAAM24L,KAAK,QAAI34L,GAAW,GAEzB3C,KAAK66L,MAAQ76L,KAAK66L,MAAM9tK,QAAQgvK,EAAI,MAChC/7L,KAAK66L,MAAM75L,aAAhB,IAIF,YAACi7L,UAAA,SAAUF,GAEV,GADC/7L,KAAK66L,MAAQ76L,KAAK66L,MAAM9tK,QAAQgvK,EAAI,IAChC/7L,KAAK66L,MAAM75L,OAAQ,OAAO,EAE9Bq9C,IAAM29I,EAAUh8L,KAAK8lF,QAAQ/4D,QAAQgvK,EAAI,IAEzC,OAAIC,EAAQh7L,QACPg7L,IAAYh8L,KAAK8lF,UACpB9lF,KAAK2B,MAAM3B,KAAK0lB,IAAMs2K,EAAQh7L,QAC/B,KAAMs6L,KAAK,QAAI34L,GAAW,KAEnB,IAGR,KAAM24L,KAAK,QAAI34L,GAAW,GAEzB3C,KAAK86L,MAAQ96L,KAAK86L,MAAM/tK,QAAQgvK,EAAI,MAChC/7L,KAAK86L,MAAM95L,aAAhB,ICtJFs9C,IAAIm1I,EAAI,WACP,MAAM,IAAIvwL,MAAM,4EAEK,oBAAXpD,QAAiD,mBAAhBA,OAAO2zL,KAClDA,EAAI,SAAGl4H,GAAI,OAAGz7D,OAAO2zL,KAAKrK,SAAShnE,mBAAmB7mD,MAC1B,mBAAX6pC,IACjBquF,EAAI,SAAGl4H,GAAI,OAAG6pC,EAAOtgF,KAAKy2C,EAAK,SAASp5D,SAAS,YAGnC,IAAM+5L,EACpB,SAAYxyL,GACX1J,KAAKW,QAAU,EACfX,KAAK0H,KAAOgC,EAAWhC,KACvB1H,KAAKm8L,QAAUzyL,EAAWyyL,QAC1Bn8L,KAAKmuI,eAAiBzkI,EAAWykI,eACjCnuI,KAAK2oF,MAAQj/E,EAAWi/E,MACzB,KAAMomD,SAAW4E,SAAOjqI,EAAWqlI,WClBrB,SAASqtD,EAAY93L,GACnC+5C,IAAM+0D,EAAQ9uG,EAAK3C,MAAM,MAEnB06L,EAASjpF,EAAMhnF,QAAM,SAAC2K,GAAK,MAAG,OAAOj1B,KAAKi1B,MAC1CulK,EAASlpF,EAAMhnF,QAAM,SAAC2K,GAAK,MAAG,SAASj1B,KAAKi1B,MAElD,GAAsB,IAAlBslK,EAAOr7L,QAAkC,IAAlBs7L,EAAOt7L,OACjC,OAAO,KAMR,GAAIq7L,EAAOr7L,QAAUs7L,EAAOt7L,OAC3B,MAAO,KAIRq9C,IAAMqrD,EAAM4yF,EAAOl5F,QAAM,SAAEwvF,EAAU7zJ,GACpCsf,IAAMk+I,EAAY,MAAM/kK,KAAKuH,GAAS,GAAG/9B,OACzC,OAAOpB,KAAK8pG,IAAI6yF,EAAW3J,KACzBpsG,KAEH,OAAO,IAAIvkE,MAAMynF,EAAM,GAAGxnG,KAAK,KCvBjB,SAASs6L,EAAgB13K,EAAMC,GAC7Cs5B,IAAMo+I,EAAY33K,EAAKnjB,MAAM,SACvB+6L,EAAU33K,EAAGpjB,MAAM,SAIzB,IAFA86L,EAAUxtK,MAEHwtK,EAAU,KAAOC,EAAQ,IAC/BD,EAAUn9F,QACVo9F,EAAQp9F,QAGT,GAAIm9F,EAAUz7L,OAEb,IADAs9C,IAAI97C,EAAIi6L,EAAUz7L,OACXwB,KAAKi6L,EAAUj6L,GAAK,KAG5B,OAAOi6L,EAAUl7K,OAAOm7K,GAASx6L,KAAK,KFKvC,YAACC,SAAA,WACC,OAAOshB,KAAKC,UAAU1jB,OAGxB,YAACozL,MAAA,WACA,MAAQ,8CAAgDK,EAAKzzL,KAAKmC,aG1BnEk8C,IAAMl8C,EAAW/d,OAAO+H,UAAUgW,SAEnB,SAAS2+F,EAAS63D,GAChC,MAAgC,oBAAzBx2J,EAAS9V,KAAKssK,GCHP,SAASgkC,EAAW3wL,GAIlC,IAHAqyC,IAAMu+I,EAAgB5wL,EAAOrK,MAAM,MAC7Bk7L,EAAc,GAEXr6L,EAAI,EAAG+1C,EAAM,EAAG/1C,EAAIo6L,EAAc57L,OAAQwB,IAClDq6L,EAAY75L,KAAKu1C,GACjBA,GAAOqkJ,EAAcp6L,GAAGxB,OAAS,EAGlC,OAAO,SAAgBk1B,GAGtB,IAFAooB,IAAI97C,EAAI,EACJ+yB,EAAIsnK,EAAY77L,OACbwB,EAAI+yB,GAAG,CACb8oB,IAAMp9C,EAAKuB,EAAI+yB,GAAM,EACjBW,EAAQ2mK,EAAY57L,GACvBs0B,EAAIt0B,EAEJuB,EAAIvB,EAAI,EAGVo9C,IAAMtnB,EAAOv0B,EAAI,EAEjB,MAAO,CAAC,KAACu0B,EAAI,OADEb,EAAQ2mK,EAAY9lK,KCrBtB,IAAM+lK,EACpB,SAAYC,GACX/8L,KAAK+8L,MAAQA,EACb/8L,KAAKg9L,kBAAoB,EACzBh9L,KAAKk/I,oBAAsB,EAC3Bl/I,KAAKsB,IAAM,GACXtB,KAAKi9L,YAAcj9L,KAAKsB,IAAItB,KAAKg9L,mBAAqB,GACtDh9L,KAAKk9L,QAAU,MAGjB,YAACC,QAAA,SAAQnkD,EAAalzD,EAASrrD,EAAKwkH,GAClC,GAAIn5D,EAAQ9kF,OAAQ,CACnBq9C,IAAMmgG,EAAU,CAACx+I,KAAKk/I,oBAAqBlG,EAAav+G,EAAI1D,KAAM0D,EAAIzD,QAClEioH,GAAa,GAChBT,EAAQx7I,KAAKi8I,GAEf,KAAMg+C,YAAYj6L,KAAKw7I,QACZx+I,KAAKk9L,SAChB,KAAMD,YAAYj6L,KAAKhD,KAAKk9L,SAG5Bl9L,KAAKysL,QAAQ3mG,GACb9lF,KAAKk9L,QAAU,MAGjB,YAACE,iBAAA,SAAiBpkD,EAAaqd,EAAO9xD,EAAU9pE,EAAK4iK,GAInD,IAHA/+I,IAAIg/I,EAAoBjnC,EAAMvwI,MAC1BwG,GAAQ,EAELgxK,EAAoBjnC,EAAM3wI,MAC5B1lB,KAAK+8L,OAASzwK,GAAS+wK,EAAmBz4L,IAAI04L,KAClD,KAAML,YAAYj6L,KAAK,CAAChD,KAAKk/I,oBAAqBlG,EAAav+G,EAAI1D,KAAM0D,EAAIzD,SAGzC,OAAhCutE,EAAS+4F,IACZ7iK,EAAI1D,MAAQ,EACZ0D,EAAIzD,OAAS,EACbh3B,KAAKg9L,mBAAqB,EAC1Bh9L,KAAKsB,IAAItB,KAAKg9L,mBAAqBh9L,KAAKi9L,YAAc,GACtDj9L,KAAKk/I,oBAAsB,EAC5B,GAAS,IAERzkH,EAAIzD,QAAU,EACdh3B,KAAKk/I,qBAAuB,EAC7B,GAAS,GAGV,GAAsB,EAGtBl/I,KAAKk9L,QAAU,MAGjB,YAACzQ,QAAA,SAAQlxH,GACP,GAAKA,EAAL,CAED,IAAO63C,EAAQ73C,EAAI55D,MAAM,MAExB,GAAIyxG,EAAMpyG,OAAS,EAAG,CACrB,IAAKs9C,IAAI97C,EAAI,EAAGA,EAAI4wG,EAAMpyG,OAAS,EAAGwB,IACrCxC,KAAKg9L,oBACLh9L,KAAKsB,IAAItB,KAAKg9L,mBAAqBh9L,KAAKi9L,YAAc,GAEvDj9L,KAAKk/I,oBAAsB,EAG5Bl/I,KAAKk/I,qBAAuB9rC,EAAMA,EAAMpyG,OAAS,GAAGA,SCxDtDq9C,IAAMwpC,EAAI,KAEJ4T,EAAS,CACd8hG,YAAY,EACZC,aAAa,EACbzC,WAAW,GAGS0C,EACpB,SAAYp1J,EAAQznC,Q,UAAU,IAC7By9C,IAAMg4G,EAAQ,IAAIukC,EAAM,EAAGvyJ,EAAOrnC,OAAQqnC,GAE1CjkD,OAAOugH,iBAAiB3kG,KAAM,CAC9B,SAAwB,CAAEq1B,UAAU,EAAM/wC,MAAO+jD,GACjD,MAAwB,CAAEhT,UAAU,EAAM/wC,MAAO,IACjD,MAAwB,CAAE+wC,UAAU,EAAM/wC,MAAO,IACjD,WAAwB,CAAE+wC,UAAU,EAAM/wC,MAAO+xK,GACjD,UAAwB,CAAEhhI,UAAU,EAAM/wC,MAAO+xK,GACjD,kBAAwB,CAAEhhI,UAAU,EAAM/wC,MAAO+xK,GACjD,QAAwB,CAAEhhI,UAAU,EAAM/wC,MAAO,IACjD,MAAwB,CAAE+wC,UAAU,EAAM/wC,MAAO,IAChDupD,SAAuB,CAAExY,UAAU,EAAM/wC,MAAOsc,EAAQitC,UACxD6vJ,sBAAuB,CAAEroK,UAAU,EAAM/wC,MAAOsc,EAAQ88L,uBACxDL,mBAAuB,CAAEhoK,UAAU,EAAM/wC,MAAO,IAAIo2M,GACrD,YAAwB,CAAErlK,UAAU,EAAM/wC,MAAO,IAChDq5M,UAAuB,CAAEtoK,UAAU,EAAM/wC,MAAO83M,EAAY/zJ,MAO9D,KAAMu1J,QAAQ,GAAKvnC,EACnB,KAAMwnC,MAAMx1J,EAAOrnC,QAAUq1J,GAG9B,YAACynC,qBAAA,SAAqB93G,GACrB,KAAMq3G,mBAAmB/6J,IAAI0jD,IAG9B,YAAClkD,OAAA,SAAOgkD,GACN,GAAuB,iBAAZA,EAAsB,MAAM,IAAI/kF,UAAU,kCAGtD,OADCf,KAAK86L,OAASh1G,EACP9lF,MAGT,YAACi7L,WAAA,SAAW/kK,EAAO4vD,GACjB,GAAuB,iBAAZA,EAAsB,MAAM,IAAI/kF,UAAU,qCAIrDf,KAAK+9L,OAAO7nK,GAEb,IAAOmgI,EAAQr2J,KAAK69L,MAAM3nK,GAS1B,OAPKmgI,EACHA,EAAM4kC,WAAWn1G,GAEjB9lF,KAAK66L,OAAS/0G,EAIR9lF,MAGT,YAACk7L,YAAA,SAAYhlK,EAAO4vD,GAClB,GAAuB,iBAAZA,EAAsB,MAAM,IAAI/kF,UAAU,qCAIrDf,KAAK+9L,OAAO7nK,GAEb,IAAOmgI,EAAQr2J,KAAK49L,QAAQ1nK,GAS5B,OAPKmgI,EACHA,EAAM6kC,YAAYp1G,GAElB9lF,KAAK86L,OAASh1G,EAIR9lF,MAGT,YAACjb,MAAA,WAMA,IALCs5D,IAAM/oB,EAAS,IAAImoK,EAAYz9L,KAAKukG,SAAU,CAAE12D,SAAU7tC,KAAK6tC,WAE3DmwJ,EAAgBh+L,KAAKi+L,WACrBC,EAAe5oK,EAAO2oK,WAAa3oK,EAAO6oK,kBAAoBH,EAAcj5M,QAEzEi5M,GAAe,CACtB,EAAQJ,QAAQM,EAAYp4K,OAASo4K,EACrC,EAAQL,MAAMK,EAAYx4K,KAAOw4K,EAEhC7/I,IAAM+/I,EAAoBJ,EAAchrK,KAClCqrK,EAAkBD,GAAqBA,EAAkBr5M,QAE3Ds5M,IACHH,EAAYlrK,KAAOqrK,EACnBA,EAAgBzL,SAAWsL,EAE5B,EAAeG,GAGhB,EAAiBD,EAclB,OAXC9oK,EAAOgpK,UAAYJ,EAEfl+L,KAAK09L,wBACT,EAAQA,sBAAwB19L,KAAK09L,sBAAsBt5L,SAG5D,EAAQi5L,mBAAqB,IAAI3C,EAAO16L,KAAKq9L,oBAE5C/nK,EAAOulK,MAAQ76L,KAAK66L,MACpBvlK,EAAOwlK,MAAQ96L,KAAK86L,MAEbxlK,GAGT,YAACipK,mBAAA,SAAmB39L,G,WAClBA,EAAUA,GAAW,GAErBy9C,IACMsqC,EAAQvkG,OAAO4H,KAAKgU,KAAKw+L,aACzBzvD,EAAW,IAAI+tD,EAASl8L,EAAQm8L,OAEhC0B,EAAS9B,EAAW38L,KAAKukG,UAyB/B,OAvBIvkG,KAAK66L,OACT,EAAUpO,QAAQzsL,KAAK66L,OAGxB,KAAMoD,WAAW7C,UAAQ,SAAC/kC,GACzB,IAAO57H,EAAMgkK,EAAOpoC,EAAMvwI,OAErBuwI,EAAMwkC,MAAM75L,QAAQ+tI,EAAS09C,QAAQp2B,EAAMwkC,OAE3CxkC,EAAM2kC,OACV,EAAUmC,QAhBS,EAkBlB,EAAOr3G,QACNrrD,EACA47H,EAAM0kC,UAAYpyG,EAAMtrD,QAAQg5H,EAAM9xD,WAAa,GAGpDwqC,EAASquD,iBAvBS,EAuBqB/mC,EAAOr2J,EAAKukG,SAAU9pE,EAAKz6B,EAAKq9L,oBAGpEhnC,EAAMykC,MAAM95L,QAAQ+tI,EAAS09C,QAAQp2B,EAAMykC,UAGzC,CACNpzL,KAAM9G,EAAQ8G,KAAO9G,EAAQ8G,KAAK/F,MAAM,SAASstB,MAAQ,KAC1D,QAAU,CAACruB,EAAQoL,OAASwwL,EAAgB57L,EAAQ8G,MAAQ,GAAI9G,EAAQoL,QAAU,MACjFmiI,eAAgBvtI,EAAQ89L,eAAiB,CAAC1+L,KAAKukG,UAAY,CAAC,MAC7D,MAAC5b,EACAomD,SAAUA,EAASztI,MAItB,YAACuyL,YAAA,SAAYjzL,GACZ,OAAQ,IAAIs7L,EAAUl8L,KAAKu+L,mBAAmB39L,KAG/C,YAAC+9L,gBAAA,WACC,OAA0B,OAAnB3+L,KAAK29L,UAAqB,KAAO39L,KAAK29L,WAG/C,YAACn9D,OAAA,SAAOm9D,EAAW/8L,GACjBy9C,IAAMv1C,EAAU,aAShB,GAPIg4F,EAAS68F,KACb,EAAWA,EACX,OAAah7L,GAKK,MAFlBg7L,OAA0Bh7L,IAAdg7L,EAA0BA,EAAY39L,KAAK29L,WAAa,MAE9C,OAAO39L,KAK7Bq+C,IAAMugJ,EAAa,IAHnBh+L,EAAUA,GAAW,IAKTqvH,UAEoB,iBAAvBrvH,EAAQqvH,QAAQ,GAAkB,CAACrvH,EAAQqvH,SAAWrvH,EAAQqvH,SAC3DhkI,SAAO,SAAC4yM,GACnB,IAAMvgJ,IAAI97C,EAAIq8L,EAAU,GAAIr8L,EAAIq8L,EAAU,GAAIr8L,GAAK,EACjDo8L,EAAWp8L,IAAK,KAKpB,IAAKs8L,GAAoD,IAAxBl+L,EAAQm+L,YAClCC,EAAQ,SAAG79L,GACjB,OAAK29L,EAAiC,GAAInB,EAAYx8L,GACtD,GAA6B,EACrBA,IAGRnB,KAAK66L,MAAQ76L,KAAK66L,MAAM9tK,QAAQjkB,EAASk2L,GAK1C,IAHC1gJ,IAAI2gJ,EAAY,EACZ5oC,EAAQr2J,KAAKi+L,WAEV5nC,GAAO,CACbh4G,IAAM34B,EAAM2wI,EAAM3wI,IAElB,GAAI2wI,EAAM2kC,OACJ4D,EAAWK,KACf5oC,EAAMvwE,QAAUuwE,EAAMvwE,QAAQ/4D,QAAQjkB,EAASk2L,GAE3C3oC,EAAMvwE,QAAQ9kF,SACjB89L,EAAwE,OAA5CzoC,EAAMvwE,QAAQuwE,EAAMvwE,QAAQ9kF,OAAS,UAMnE,IAFAi+L,EAAY5oC,EAAMvwI,MAEXm5K,EAAYv5K,GAAK,CACvB,IAAKk5K,EAAWK,GAAY,CAC5B,IAAOj5G,EAAOhmF,KAAKukG,SAAS06F,GAEd,OAATj5G,EACJ,GAA6B,EACT,OAATA,GAAiB84G,IAC5B,GAA6B,EAExBG,IAAc5oC,EAAMvwI,MACvBuwI,EAAMolC,aAAakC,IAEpB,KAAMuB,YAAY7oC,EAAO4oC,IACxB5oC,EAAQA,EAAMrjI,MACRyoK,aAAakC,KAKvB,GAAc,EAIfsB,EAAY5oC,EAAM3wI,IAClB2wI,EAAQA,EAAMrjI,KAKhB,OAFChzB,KAAK86L,MAAQ96L,KAAK86L,MAAM/tK,QAAQjkB,EAASk2L,GAElCh/L,MAGT,YAAC8oK,OAAA,WACC,MAAM,IAAI5lK,MAAM,oFAGlB,YAACq6L,WAAA,SAAWrnK,EAAO4vD,GAMlB,OALM2V,EAAO8hG,aAEX9hG,EAAO8hG,YAAa,GAGdv9L,KAAKi7L,WAAW/kK,EAAO4vD,IAGhC,YAAC03G,YAAA,SAAYtnK,EAAO4vD,GAMnB,OALM2V,EAAO+hG,cAEX/hG,EAAO+hG,aAAc,GAGfx9L,KAAKy7L,aAAavlK,EAAO4vD,IAGlC,YAACq5G,KAAA,SAAKr5K,EAAOJ,EAAKwQ,GAChB,GAAIA,GAASpQ,GAASoQ,GAASxQ,EAAK,MAAM,IAAIxiB,MAAM,yCAIpDlD,KAAK+9L,OAAOj4K,GACZ9lB,KAAK+9L,OAAOr4K,GACZ1lB,KAAK+9L,OAAO7nK,GAEb,IAAO5J,EAAQtsB,KAAK49L,QAAQ93K,GACrBic,EAAO/hC,KAAK69L,MAAMn4K,GAElB05K,EAAU9yK,EAAMsmK,SAChByM,EAAWt9J,EAAK/O,KAEhBssK,EAAWt/L,KAAK49L,QAAQ1nK,GAC9B,IAAKopK,GAAYv9J,IAAS/hC,KAAKs+L,UAAW,OAAOt+L,KACjDq+C,IAAMkhJ,EAAUD,EAAWA,EAAS1M,SAAW5yL,KAAKs+L,UAqBrD,OAnBKc,IAASA,EAAQpsK,KAAOqsK,GACxBA,IAAUA,EAASzM,SAAWwM,GAE9BG,IAASA,EAAQvsK,KAAO1G,GACxBgzK,IAAUA,EAAS1M,SAAW7wJ,GAE7BzV,EAAMsmK,WAAU5yL,KAAKi+L,WAAal8J,EAAK/O,MACvC+O,EAAK/O,OACThzB,KAAKs+L,UAAYhyK,EAAMsmK,SACvB5yL,KAAKs+L,UAAUtrK,KAAO,MAGvB1G,EAAMsmK,SAAW2M,EACjBx9J,EAAK/O,KAAOssK,GAAY,KAEnBC,IAASv/L,KAAKi+L,WAAa3xK,GAC3BgzK,IAAUt/L,KAAKs+L,UAAYv8J,GAGzB/hC,MAGT,YAACw/L,UAAA,SAAU15K,EAAOJ,EAAKogE,EAASllF,GAC9B,GAAuB,iBAAZklF,EAAsB,MAAM,IAAI/kF,UAAU,wCAErD,KAAO+kB,EAAQ,GAAGA,GAAS9lB,KAAKukG,SAASvjG,OACzC,KAAO0kB,EAAM,GAAGA,GAAO1lB,KAAKukG,SAASvjG,OAErC,GAAI0kB,EAAM1lB,KAAKukG,SAASvjG,OAAQ,MAAM,IAAIkC,MAAM,wBACjD,GAAK4iB,IAAUJ,EACb,MAAM,IAAIxiB,MAAM,iFAIjBlD,KAAK+9L,OAAOj4K,GACZ9lB,KAAK+9L,OAAOr4K,IAEI,IAAZ9kB,IACE66F,EAAOs/F,YAEXt/F,EAAOs/F,WAAY,GAGpBn6L,EAAU,CAAEm6L,WAAW,IAExB18I,IAAM08I,OAAwBp4L,IAAZ/B,GAAwBA,EAAQm6L,UAC5CQ,OAA0B54L,IAAZ/B,GAAwBA,EAAQ26L,YAErD,GAAKR,EAAW,CACd18I,IAAMkmD,EAAWvkG,KAAKukG,SAASngG,MAAM0hB,EAAOJ,GAC7C,KAAM84K,YAAYj6F,IAAY,EAG/B,IAAOj4E,EAAQtsB,KAAK49L,QAAQ93K,GACrBic,EAAO/hC,KAAK69L,MAAMn4K,GAEzB,GAAK4G,EAAO,CACV,GAAI5G,EAAM4G,EAAM5G,KAAO4G,EAAM0G,OAAShzB,KAAK49L,QAAQtxK,EAAM5G,KACxD,MAAM,IAAIxiB,MAAM,yCAKjB,GAFD,EAAOo4L,KAAKx1G,EAASi1G,EAAWQ,GAE3BjvK,IAAUyV,EAAM,CAEnB,IADAuc,IAAI+3G,EAAQ/pI,EAAM0G,KACXqjI,IAAUt0H,GACjB,EAAOu5J,KAAK,IAAI,GACfjlC,EAAQA,EAAMrjI,KAGhB,EAAOsoK,KAAK,IAAI,QAEV,CAEP,IAAOO,EAAW,IAAIjB,EAAM90K,EAAOJ,EAAK,IAAI41K,KAAKx1G,EAASi1G,GAGzDh5J,EAAK/O,KAAO6oK,EACZA,EAASjJ,SAAW7wJ,EAItB,OAAQ/hC,MAGT,YAACiiC,QAAA,SAAQ6jD,GACP,GAAuB,iBAAZA,EAAsB,MAAM,IAAI/kF,UAAU,kCAGtD,OADA,KAAM85L,MAAQ/0G,EAAU9lF,KAAK66L,MACrB76L,MAGT,YAACw7L,YAAA,SAAYtlK,EAAO4vD,GAClB,GAAuB,iBAAZA,EAAsB,MAAM,IAAI/kF,UAAU,qCAIrDf,KAAK+9L,OAAO7nK,GAEb,IAAOmgI,EAAQr2J,KAAK69L,MAAM3nK,GAS1B,OAPKmgI,EACHA,EAAMmlC,YAAY11G,GAEnB,KAAM+0G,MAAQ/0G,EAAU9lF,KAAK66L,MAItB76L,MAGT,YAACy7L,aAAA,SAAavlK,EAAO4vD,GACnB,GAAuB,iBAAZA,EAAsB,MAAM,IAAI/kF,UAAU,qCAIrDf,KAAK+9L,OAAO7nK,GAEb,IAAOmgI,EAAQr2J,KAAK49L,QAAQ1nK,GAS5B,OAPKmgI,EACHA,EAAMolC,aAAa31G,GAEpB,KAAMg1G,MAAQh1G,EAAU9lF,KAAK86L,MAItB96L,MAGT,YAAC+1B,OAAA,SAAOjQ,EAAOJ,GACb,KAAOI,EAAQ,GAAGA,GAAS9lB,KAAKukG,SAASvjG,OACzC,KAAO0kB,EAAM,GAAGA,GAAO1lB,KAAKukG,SAASvjG,OAErC,GAAI8kB,IAAUJ,EAAK,OAAO1lB,KAE1B,GAAI8lB,EAAQ,GAAKJ,EAAM1lB,KAAKukG,SAASvjG,OAAQ,MAAM,IAAIkC,MAAM,8BAC9D,GAAK4iB,EAAQJ,EAAK,MAAM,IAAIxiB,MAAM,kCAIjClD,KAAK+9L,OAAOj4K,GACZ9lB,KAAK+9L,OAAOr4K,GAIb,IAFA,IAAK2wI,EAAQr2J,KAAK49L,QAAQ93K,GAElBuwI,GACNA,EAAMwkC,MAAQ,GACdxkC,EAAMykC,MAAQ,GACdzkC,EAAMilC,KAAK,IAEXjlC,EAAQ3wI,EAAM2wI,EAAM3wI,IAAM1lB,KAAK49L,QAAQvnC,EAAM3wI,KAAO,KAItD,OAAQ1lB,MAGT,YAACy/L,SAAA,WACC,GAAIz/L,KAAK86L,MAAM95L,OACd,OAAOhB,KAAK86L,MAAM96L,KAAK86L,MAAM95L,OAAS,GACvCs9C,IAAI+3G,EAAQr2J,KAAKs+L,UACjB,EAAG,CACF,GAAIjoC,EAAMykC,MAAM95L,OACf,OAAOq1J,EAAMykC,MAAMzkC,EAAMykC,MAAM95L,OAAS,GACzC,GAAIq1J,EAAMvwE,QAAQ9kF,OACjB,OAAOq1J,EAAMvwE,QAAQuwE,EAAMvwE,QAAQ9kF,OAAS,GAC7C,GAAIq1J,EAAMwkC,MAAM75L,OACf,OAAOq1J,EAAMwkC,MAAMxkC,EAAMwkC,MAAM75L,OAAS,SACjCq1J,EAAQA,EAAMu8B,UACvB,OAAI5yL,KAAK66L,MAAM75L,OACPhB,KAAK66L,MAAM76L,KAAK66L,MAAM75L,OAAS,GAChC,IAGT,YAACszH,SAAA,WACCh2E,IAAIohJ,EAAY1/L,KAAK86L,MAAM32K,YAAY0jE,GACvC,IAAmB,IAAf63G,EACH,OAAO1/L,KAAK86L,MAAMt/H,OAAOkkI,EAAY,GACtCphJ,IAAIqhJ,EAAU3/L,KAAK86L,MACfzkC,EAAQr2J,KAAKs+L,UACjB,EAAG,CACH,GAAKjoC,EAAMykC,MAAM95L,OAAS,EAAG,CAE3B,IAAmB,KADpB,EAAaq1J,EAAMykC,MAAM32K,YAAY0jE,IAEnC,OAAOwuE,EAAMykC,MAAMt/H,OAAOkkI,EAAY,GAAKC,EAC5CA,EAAUtpC,EAAMykC,MAAQ6E,EAG1B,GAAKtpC,EAAMvwE,QAAQ9kF,OAAS,EAAG,CAE7B,IAAmB,KADpB,EAAaq1J,EAAMvwE,QAAQ3hE,YAAY0jE,IAErC,OAAOwuE,EAAMvwE,QAAQtqB,OAAOkkI,EAAY,GAAKC,EAC9CA,EAAUtpC,EAAMvwE,QAAU65G,EAG5B,GAAKtpC,EAAMwkC,MAAM75L,OAAS,EAAG,CAE3B,IAAmB,KADpB,EAAaq1J,EAAMwkC,MAAM12K,YAAY0jE,IAEnC,OAAOwuE,EAAMwkC,MAAMr/H,OAAOkkI,EAAY,GAAKC,EAC5CA,EAAUtpC,EAAMwkC,MAAQ8E,SAEjBtpC,EAAQA,EAAMu8B,UAEvB,OAAmB,KADpB,EAAa5yL,KAAK66L,MAAM12K,YAAY0jE,IAE3B7nF,KAAK66L,MAAMr/H,OAAOkkI,EAAY,GAAKC,EACpC3/L,KAAK66L,MAAQ8E,GAGtB,YAACv7L,MAAA,SAAM0hB,EAAWJ,GAChB,S,UADa,Q,UAAS1lB,KAAKukG,SAASvjG,QAC7B8kB,EAAQ,GAAGA,GAAS9lB,KAAKukG,SAASvjG,OACzC,KAAO0kB,EAAM,GAAGA,GAAO1lB,KAAKukG,SAASvjG,OAMrC,IAJAs9C,IAAIrwB,EAAS,GAGTooI,EAAQr2J,KAAKi+L,WACV5nC,IAAUA,EAAMvwI,MAAQA,GAASuwI,EAAM3wI,KAAOI,IAAQ,CAE5D,GAAIuwI,EAAMvwI,MAAQJ,GAAO2wI,EAAM3wI,KAAOA,EACtC,OAAQuI,EAGRooI,EAAQA,EAAMrjI,KAGhB,GAAKqjI,GAASA,EAAM2kC,QAAU3kC,EAAMvwI,QAAUA,EAC5C,MAAM,IAAI5iB,MAAK,iCAAkC4iB,EAAK,2BAGxD,IADCu4B,IAAMuhJ,EAAavpC,EACZA,GAAO,EACTA,EAAMwkC,OAAU+E,IAAevpC,GAASA,EAAMvwI,QAAUA,IAC3DmI,GAAUooI,EAAMwkC,OAGjBx8I,IAAMwhJ,EAAcxpC,EAAMvwI,MAAQJ,GAAO2wI,EAAM3wI,KAAOA,EACvD,GAAKm6K,GAAexpC,EAAM2kC,QAAU3kC,EAAM3wI,MAAQA,EAChD,MAAM,IAAIxiB,MAAK,iCAAkCwiB,EAAG,yBAErD24B,IAAMyhJ,EAAaF,IAAevpC,EAAQvwI,EAAQuwI,EAAMvwI,MAAQ,EAC1Di6K,EAAWF,EAAcxpC,EAAMvwE,QAAQ9kF,OAAS0kB,EAAM2wI,EAAM3wI,IAAM2wI,EAAMvwE,QAAQ9kF,OAQvF,GANCitB,GAAUooI,EAAMvwE,QAAQ1hF,MAAM07L,EAAYC,IAEtC1pC,EAAMykC,OAAW+E,GAAexpC,EAAM3wI,MAAQA,IACjDuI,GAAUooI,EAAMykC,OAGb+E,EACH,MAGDxpC,EAAQA,EAAMrjI,KAGhB,OAAQ/E,GAIT,YAAC+xK,KAAA,SAAKl6K,EAAOJ,GACZ,IAAO3gC,EAAQib,KAAKjb,QAIpB,OAHA,EAAOgxC,OAAO,EAAGjQ,GAChB/gC,EAAMgxC,OAAOrQ,EAAK3gC,EAAMw/G,SAASvjG,QAE1Bjc,GAGT,YAACg5M,OAAA,SAAO7nK,GACN,IAAIl2B,KAAK49L,QAAQ1nK,KAAUl2B,KAAK69L,MAAM3nK,GAOvC,IAHCooB,IAAI+3G,EAAQr2J,KAAKm+L,kBACX8B,EAAgB/pK,EAAQmgI,EAAM3wI,IAE7B2wI,GAAO,CACb,GAAIA,EAAM8kC,SAASjlK,GAAQ,OAAOl2B,KAAKk/L,YAAY7oC,EAAOngI,GAE3D,EAAS+pK,EAAgBjgM,KAAK49L,QAAQvnC,EAAM3wI,KAAO1lB,KAAK69L,MAAMxnC,EAAMvwI,SAItE,YAACo5K,YAAA,SAAY7oC,EAAOngI,GACnB,GAAKmgI,EAAM2kC,QAAU3kC,EAAMvwE,QAAQ9kF,OAAQ,CAEzCq9C,IAAM5jB,EAAMkiK,EAAW38L,KAAKukG,SAAhBo4F,CAA0BzmK,GACvC,MAAO,IAAIhzB,M,sDAC6Cu3B,EAAI1D,KAAI,IAAI0D,EAAIzD,OAAM,OAC3Eq/H,EAAM9xD,SAAQ,MAKlB,IAAOs3F,EAAWxlC,EAAM10J,MAAMu0B,GAU9B,OARA,KAAM2nK,MAAM3nK,GAASmgI,EACrB,KAAMunC,QAAQ1nK,GAAS2lK,EACvB,KAAMgC,MAAMhC,EAASn2K,KAAOm2K,EAEvBxlC,IAAUr2J,KAAKs+L,YAAWt+L,KAAKs+L,UAAYzC,GAE/C77L,KAAKm+L,kBAAoB9nC,GAElB,GAGT,YAACl0J,SAAA,WAIA,IAHCm8C,IAAIid,EAAMv7D,KAAK66L,MAEXxkC,EAAQr2J,KAAKi+L,WACV5nC,GACN96F,GAAO86F,EAAMl0J,WACbk0J,EAAQA,EAAMrjI,KAGf,OAAOuoC,EAAMv7D,KAAK86L,OAGpB,YAACpoC,QAAA,WACCp0G,IAAI+3G,EAAQr2J,KAAKi+L,WACjB,GACC,GAAI5nC,EAAMwkC,MAAM75L,QAAUq1J,EAAMwkC,MAAM35L,QACrC,EAAO4kF,QAAQ9kF,QAAUq1J,EAAMvwE,QAAQ5kF,QACvC,EAAO45L,MAAM95L,QAAUq1J,EAAMykC,MAAM55L,OACnC,OAAO,QACAm1J,EAAQA,EAAMrjI,MACxB,OAAQ,GAGT,YAAChyB,OAAA,WACCs9C,IAAI+3G,EAAQr2J,KAAKi+L,WACbj9L,EAAS,EACb,GACCA,GAAUq1J,EAAMwkC,MAAM75L,OAASq1J,EAAMvwE,QAAQ9kF,OAASq1J,EAAMykC,MAAM95L,aAC1Dq1J,EAAQA,EAAMrjI,MACxB,OAAQhyB,GAGT,YAACk/L,UAAA,WACC,OAAOlgM,KAAKkB,KAAK,aAGnB,YAACA,KAAA,SAAKi/L,GACJ,OAAOngM,KAAKi8L,UAAUkE,GAAUrE,QAAQqE,IAG1C,YAACC,eAAA,SAAeD,GACd9hJ,IAAM09I,EAAK,IAAIt6J,QAAQ0+J,GAAY,OAAS,MAG7C,GADCngM,KAAK86L,MAAQ96L,KAAK86L,MAAM/tK,QAAQgvK,EAAI,IAChC/7L,KAAK86L,MAAM95L,OAAQ,OAAO,EAE9Bs9C,IAAI+3G,EAAQr2J,KAAKs+L,UAEjB,EAAG,CACFjgJ,IAAM34B,EAAM2wI,EAAM3wI,IACZ6lD,EAAU8qF,EAAMylC,QAAQC,GAa9B,GAVI1lC,EAAM3wI,MAAQA,IACb1lB,KAAKs+L,YAAcjoC,IACtBr2J,KAAKs+L,UAAYjoC,EAAMrjI,MAGzB,KAAM6qK,MAAMxnC,EAAM3wI,KAAO2wI,EACxBr2J,KAAK49L,QAAQvnC,EAAMrjI,KAAKlN,OAASuwI,EAAMrjI,KACvChzB,KAAK69L,MAAMxnC,EAAMrjI,KAAKtN,KAAO2wI,EAAMrjI,MAGhCu4C,EAAS,OAAO,EACpB8qF,EAAQA,EAAMu8B,eACNv8B,GAEV,OAAQ,GAGT,YAACylC,QAAA,SAAQqE,GAER,OADCngM,KAAKogM,eAAeD,GACbngM,MAET,YAACqgM,iBAAA,SAAiBF,GAChB9hJ,IAAM09I,EAAK,IAAIt6J,OAAO,KAAO0+J,GAAY,OAAS,KAGnD,GADCngM,KAAK66L,MAAQ76L,KAAK66L,MAAM9tK,QAAQgvK,EAAI,IAChC/7L,KAAK66L,MAAM75L,OAAQ,OAAO,EAE9Bs9C,IAAI+3G,EAAQr2J,KAAKi+L,WAEjB,EAAG,CACF5/I,IAAM34B,EAAM2wI,EAAM3wI,IACZ6lD,EAAU8qF,EAAM4lC,UAAUF,GAWhC,GATI1lC,EAAM3wI,MAAQA,IAEb2wI,IAAUr2J,KAAKs+L,YAAWt+L,KAAKs+L,UAAYjoC,EAAMrjI,MAEtD,KAAM6qK,MAAMxnC,EAAM3wI,KAAO2wI,EACxBr2J,KAAK49L,QAAQvnC,EAAMrjI,KAAKlN,OAASuwI,EAAMrjI,KACvChzB,KAAK69L,MAAMxnC,EAAMrjI,KAAKtN,KAAO2wI,EAAMrjI,MAGhCu4C,EAAS,OAAO,EACpB8qF,EAAQA,EAAMrjI,WACNqjI,GAEV,OAAQ,GAGT,YAAC4lC,UAAA,SAAUkE,GAEV,OADCngM,KAAKqgM,iBAAiBF,GACfngM,MCtsBTq+C,IAAMiiJ,EAAal8M,OAAO+H,UAAUC,eAEfm0M,EACpB,SAAY3/L,Q,UAAU,IACtB,KAAMi6L,MAAQj6L,EAAQi6L,OAAS,GAC9B76L,KAAKwgM,eAAkC79L,IAAtB/B,EAAQ4/L,UAA0B5/L,EAAQ4/L,UAAY,KACvExgM,KAAKm8L,QAAU,GACfn8L,KAAKygM,cAAgB,GACrBzgM,KAAK0gM,4BAA8B,IAGrC,YAACC,UAAA,SAAU30L,GACT,GAAIA,aAAkByxL,EACrB,OAAOz9L,KAAK2gM,UAAU,CACtB,QAAU30L,EACT6hC,SAAU7hC,EAAO6hC,SACjB2yJ,UAAWxgM,KAAKwgM,YAInB,IAAM1/F,EAAS90F,KAAYA,EAAO85E,QAChC,MAAM,IAAI5iF,MAAM,wIAYjB,GATA,CAAC,WAAY,wBAAyB,aAAajX,SAAO,SAACkqE,GACrDmqI,EAAWj0M,KAAK2f,EAAQmqD,KAASnqD,EAAOmqD,GAAUnqD,EAAO85E,QAAQ3vB,YAG9CxzD,IAArBqJ,EAAOw0L,YAEVx0L,EAAOw0L,UAAYxgM,KAAKwgM,WAGrBx0L,EAAO6hC,SACV,GAAKyyJ,EAAWj0M,KAAK2T,KAAK0gM,4BAA6B10L,EAAO6hC,UAGvD,CACNwQ,IAAMuiJ,EAAe5gM,KAAKygM,cAAczgM,KAAK0gM,4BAA4B10L,EAAO6hC,WACjF,GAAK7hC,EAAO85E,QAAQye,WAAaq8F,EAAa96G,QAC7C,MAAO,IAAI5iF,MAAK,kCAAmC8I,EAAO6hC,SAAQ,8BALlE7tC,KAAK0gM,4BAA4B10L,EAAO6hC,UAAY7tC,KAAKygM,cAAcz/L,OACxE,KAAMy/L,cAAcz9L,KAAK,CAAE6qC,SAAU7hC,EAAO6hC,SAAUi4C,QAAS95E,EAAO85E,QAAQye,WAUhF,OADA,KAAM43F,QAAQn5L,KAAKgJ,GACXhM,MAGT,YAAC8hC,OAAA,SAAOy5B,EAAK36D,GAMZ,OALA,KAAM+/L,UAAU,CACd76G,QAAS,IAAI23G,EAAYliI,GAC1B,UAAa36D,GAAWA,EAAQ4/L,WAAc,KAGvCxgM,MAGT,YAACjb,MAAA,WACCs5D,IAAMwiJ,EAAS,IAAIN,EAAO,CACzB1F,MAAO76L,KAAK66L,MACZ2F,UAAWxgM,KAAKwgM,YAWlB,OARA,KAAMrE,QAAQlwM,SAAO,SAAC+f,GACrB,EAAQ20L,UAAU,CAChB9yJ,SAAU7hC,EAAO6hC,SACjBi4C,QAAS95E,EAAO85E,QAAQ/gG,QACxBy7M,UAAWx0L,EAAOw0L,eAIbK,GAGT,YAACtC,mBAAA,SAAmB39L,G,0BAAU,IAC5By9C,IAAMsqC,EAAQ,GACf,KAAMwzG,QAAQlwM,SAAO,SAAC+f,GACpB5nB,OAAO4H,KAAKggB,EAAO85E,QAAQ04G,aAAavyM,SAAO,SAACwX,IACzCklF,EAAMtrD,QAAQ55B,IAAOklF,EAAM3lF,KAAKS,SAIzC,IAAOsrI,EAAW,IAAI+tD,EAASl8L,EAAQm8L,OAqDtC,OAnDI/8L,KAAK66L,OACT,EAAUpO,QAAQzsL,KAAK66L,OAGxB,KAAMsB,QAAQlwM,SAAO,SAAE+f,EAAQxJ,GACzBA,EAAI,GACR,EAAUiqL,QAAQzsL,EAAKwgM,WAGvBniJ,IAAM26F,EAAchtI,EAAO6hC,SAAW7tC,EAAK0gM,4BAA4B10L,EAAO6hC,WAAa,EACrFizJ,EAAc90L,EAAO85E,QACrB24G,EAAS9B,EAAWmE,EAAYv8F,UAElCu8F,EAAYjG,OAChB,EAAUpO,QAAQqU,EAAYjG,OAG/B,EAAaoD,WAAW7C,UAAQ,SAAC/kC,GAChC,IAAO57H,EAAMgkK,EAAOpoC,EAAMvwI,OAErBuwI,EAAMwkC,MAAM75L,QAAQ+tI,EAAS09C,QAAQp2B,EAAMwkC,OAE3C7uL,EAAO6hC,SACNwoH,EAAM2kC,OACV,EAAUmC,QACRnkD,EACD,EAAOlzD,QACNrrD,EACA47H,EAAM0kC,UAAYpyG,EAAMtrD,QAAQg5H,EAAM9xD,WAAa,GAGrD,EAAU64F,iBACRpkD,EACAqd,EACD,EAAa9xD,SACZ9pE,EACD,EAAa4iK,oBAIf,EAAU5Q,QAAQp2B,EAAMvwE,SAGpBuwE,EAAMykC,MAAM95L,QAAQ+tI,EAAS09C,QAAQp2B,EAAMykC,UAG5CgG,EAAYhG,OAChB,EAAUrO,QAAQqU,EAAYhG,UAIxB,CACNpzL,KAAM9G,EAAQ8G,KAAO9G,EAAQ8G,KAAK/F,MAAM,SAASstB,MAAQ,KAC1D,QAAUjvB,KAAKygM,cAAc7+L,KAAG,SAACoK,GAC/B,OAAOpL,EAAQ8G,KAAO80L,EAAgB57L,EAAQ8G,KAAMsE,EAAO6hC,UAAY7hC,EAAO6hC,YAEhF,eAAiB7tC,KAAKygM,cAAc7+L,KAAG,SAACoK,GACvC,OAAQpL,EAAQ89L,eAAiB1yL,EAAO85E,QAAU,QAEnD,MAAC6C,EACAomD,SAAUA,EAASztI,MAItB,YAACuyL,YAAA,SAAYjzL,GACZ,OAAQ,IAAIs7L,EAAUl8L,KAAKu+L,mBAAmB39L,KAG/C,YAAC+9L,gBAAA,WACCtgJ,IAAM0iJ,EAAqB,GAW3B,OATD,KAAM5E,QAAQlwM,SAAO,SAAC+f,GACrB,IAAO2xL,EAAY3xL,EAAO85E,QAAQ63G,UAEf,OAAdA,IAECoD,EAAmBpD,KAAYoD,EAAmBpD,GAAa,GACpEoD,EAAmBpD,IAAc,MAIjCv5M,OAAO4H,KAAK+0M,GAAoB1nG,MAAI,SAAE52F,EAAGC,GACzC,OAAQq+L,EAAmBt+L,GAAKs+L,EAAmBr+L,MAChD,IAAM,MAIZ,YAAC89H,OAAA,SAAOm9D,G,WAKN,GAJK73L,UAAU9E,SACd28L,EAAY39L,KAAK2+L,mBAGA,KAAdhB,EAAkB,OAAO39L,KAE9B,IAAKghM,GAAmBhhM,KAAK66L,OAAkC,OAAzB76L,KAAK66L,MAAMz2L,OAAO,GAsBxD,OApBA,KAAM+3L,QAAQlwM,SAAO,SAAE+f,EAAQxJ,GAC7B67C,IAAMmiJ,OAAiC79L,IAArBqJ,EAAOw0L,UAA0Bx0L,EAAOw0L,UAAYxgM,EAAKwgM,UACrEzB,EAAciC,GAAoBx+L,EAAI,GAAK,SAASV,KAAK0+L,GAE/Dx0L,EAAO85E,QAAQ06C,OAAOm9D,EAAW,CAChC1tE,QAASjkH,EAAO0xL,sBACjB,YAACqB,IAGF,EAAiD,OAA9B/yL,EAAO85E,QAAQ25G,cAG9Bz/L,KAAK66L,QACT,KAAMA,MACJ8C,EACA39L,KAAK66L,MAAM9tK,QAAQ,YAAU,SAAG5rB,EAAO+0B,GACvC,OAAQA,EAAQ,EAAIynK,EAAYx8L,EAAQA,MAInCnB,MAGT,YAACiiC,QAAA,SAAQs5B,GAER,OADA,KAAMs/H,MAAQt/H,EAAMv7D,KAAK66L,MACjB76L,MAGT,YAACmC,SAAA,W,WACOqE,EAAOxG,KAAKm8L,QAChBv6L,KAAG,SAAEoK,EAAQxJ,GACb67C,IAAMmiJ,OAAiC79L,IAArBqJ,EAAOw0L,UAA0Bx0L,EAAOw0L,UAAYxgM,EAAKwgM,UAG5E,OAFch+L,EAAI,EAAIg+L,EAAY,IAAMx0L,EAAO85E,QAAQ3jF,cAItDD,KAAK,IAEP,OAAOlC,KAAK66L,MAAQr0L,GAGtB,YAACksJ,QAAO,WACN,QAAI1yJ,KAAK66L,MAAM75L,QAAUhB,KAAK66L,MAAM35L,QAEhClB,KAAKm8L,QAAQ/tK,MAAI,SAACpiB,GAAO,OAAIA,EAAO85E,QAAQ4sE,eAKlD,YAAC1xJ,OAAA,WACC,OAAOhB,KAAKm8L,QAAQ/4F,QAAM,SAAEpiG,EAAQgL,GAAQ,OAAGhL,EAASgL,EAAO85E,QAAQ9kF,WAAUhB,KAAK66L,MAAM75L,SAG9F,YAACk/L,UAAA,WACC,OAAOlgM,KAAKkB,KAAK,aAGnB,YAACA,KAAA,SAAKi/L,GACJ,OAAOngM,KAAKi8L,UAAUkE,GAAUrE,QAAQqE,IAG1C,YAAClE,UAAA,SAAUkE,GACT9hJ,IAAM09I,EAAK,IAAIt6J,OAAO,KAAO0+J,GAAY,OAAS,KAGlD,GAFAngM,KAAK66L,MAAQ76L,KAAK66L,MAAM9tK,QAAQgvK,EAAI,KAE/B/7L,KAAK66L,MAAO,CACjB,IAAK7uL,EACAxJ,EAAI,EAER,GAEA,KADA,EAAUxC,KAAKm8L,QAAQ35L,MAErB,aAEQwJ,EAAO85E,QAAQu6G,iBAAiBF,IAG5C,OAAQngM,MAGT,YAAC87L,QAAA,SAAQqE,GACP9hJ,IAEIryC,EAFE+vL,EAAK,IAAIt6J,QAAQ0+J,GAAY,OAAS,MAGxC39L,EAAIxC,KAAKm8L,QAAQn7L,OAAS,EAE9B,GAEA,KADA,EAAUhB,KAAKm8L,QAAQ35L,MACT,CACZxC,KAAK66L,MAAQ76L,KAAK66L,MAAM9tK,QAAQgvK,EAAI,IACpC,cAEQ/vL,EAAO85E,QAAQs6G,eAAeD,IAEzC,OAAQngM,MCtRTy9L,EAAY8C,OAASA,EACrB9C,EAAYvB,UAAYA,EACxBuB,EAAYr1M,QAAUq1M,E,uBCItB,IA2MwBv0L,EArMpB+3L,EAAc,4CAGdC,EAAU,8CAOVC,EAAe,4BAKfC,EAAe,4BAEfC,EAAeC,8OAKfC,EAAU,IAAMF,EAAe,IAC/BG,EAAU,kDACVC,EAAW,OAEXC,EAAU,IAAMP,EAAe,IAC/BQ,EAAS,oBAAuBN,EAAeI,EAlB9B,kBAkB0DN,EAAeC,EAAe,IACzGQ,EAAS,2BAETC,EAAc,qBACdC,EAAa,kCACbC,EAAa,qCACbC,EAAU,IAAMZ,EAAe,IAI/Ba,EAAc,MAAQP,EAAU,IAAMC,EAAS,IAC/CO,EAAc,MAAQF,EAAU,IAAML,EAAS,IAC/CQ,EAAkB,gCAClBC,EAAkB,gCAClBC,EAZa,MAAQb,EAAU,IAAMI,EAY1BU,KACXC,EAAW,oBAEXC,EAAQD,EAAWF,EADP,gBAAwB,CAACR,EAAaC,EAAYC,GAAY7/L,KAAK,KAAO,IAAMqgM,EAAWF,EAAW,KAElHI,EAAU,MAAQ,CApBN,oBAoBkBX,EAAYC,GAAY7/L,KAAK,KAAO,IAAMsgM,EACxEE,EAAW,MAAQ,CAACb,EAAcL,EAAU,IAAKA,EAASM,EAAYC,EAzB3D,qBAyBiF7/L,KAAK,KAAO,IAGxGygM,EAASlhK,OA7BA,OA6Be,KAMxBmhK,EAAcnhK,OAAO+/J,EAAS,KAG9BqB,EAAYphK,OAAOmgK,EAAS,MAAQA,EAAS,KAAOc,EAAWF,EAAO,KAGtEM,EAAgBrhK,OAAO,CACzBugK,EAAU,IAAMN,EAAU,IAAMS,EAAkB,MAAQ,CAACZ,EAASS,EAAS,KAAK9/L,KAAK,KAAO,IAC9FggM,EAAc,IAAME,EAAkB,MAAQ,CAACb,EAASS,EAAUC,EAAa,KAAK//L,KAAK,KAAO,IAChG8/L,EAAU,IAAMC,EAAc,IAAME,EACpCH,EAAU,IAAMI,EAChBX,EACAgB,GACAvgM,KAAK,KAAM,KAGT6gM,EAAethK,OAAO,uFAGtBuhK,EAAmB,sEA6DnB7wD,EAA8B,iBAAV/5D,KAAsBA,KAAUA,IAAOh0F,SAAWA,QAAUg0F,IAGhF6qH,EAA0B,iBAAR9+M,MAAoBA,MAAQA,KAAKC,SAAWA,QAAUD,KAGxEN,EAAOsuJ,GAAc8wD,GAAYhjM,SAAS,cAATA,GAsEjCijM,GAdoBh6L,EAxHF,CAEpB,EAAQ,IAAM,EAAQ,IAAK,EAAQ,IAAK,EAAQ,IAAK,EAAQ,IAAK,EAAQ,IAC1E,EAAQ,IAAM,EAAQ,IAAK,EAAQ,IAAK,EAAQ,IAAK,EAAQ,IAAK,EAAQ,IAC1E,EAAQ,IAAM,EAAQ,IACtB,EAAQ,IAAM,EAAQ,IACtB,EAAQ,IAAM,EAAQ,IAAK,EAAQ,IAAK,EAAQ,IAChD,EAAQ,IAAM,EAAQ,IAAK,EAAQ,IAAK,EAAQ,IAChD,EAAQ,IAAM,EAAQ,IAAK,EAAQ,IAAK,EAAQ,IAChD,EAAQ,IAAM,EAAQ,IAAK,EAAQ,IAAK,EAAQ,IAChD,EAAQ,IAAM,EAAQ,IACtB,EAAQ,IAAM,EAAQ,IAAK,EAAQ,IAAK,EAAQ,IAAK,EAAQ,IAAK,EAAQ,IAC1E,EAAQ,IAAM,EAAQ,IAAK,EAAQ,IAAK,EAAQ,IAAK,EAAQ,IAAK,EAAQ,IAC1E,EAAQ,IAAM,EAAQ,IAAK,EAAQ,IAAK,EAAQ,IAChD,EAAQ,IAAM,EAAQ,IAAK,EAAQ,IAAK,EAAQ,IAChD,EAAQ,IAAM,EAAQ,IAAK,EAAQ,IACnC,EAAQ,KAAM,EAAQ,KACtB,EAAQ,KAAM,EAAQ,KACtB,EAAQ,KAER,EAAU,IAAM,EAAU,IAAK,EAAU,IACzC,EAAU,IAAM,EAAU,IAAK,EAAU,IACzC,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IACxD,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IACxD,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IACxD,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IAAK,EAAU,IACvE,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IAAK,EAAU,IACvE,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IACxD,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IACxD,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IACxD,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IAAK,EAAU,IACvE,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IAAK,EAAU,IACvE,EAAU,IAAM,EAAU,IAC1B,EAAU,IAAM,EAAU,IAAK,EAAU,IACzC,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IAAK,EAAU,IACvE,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IAAK,EAAU,IACvE,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IACxD,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IACxD,EAAU,IAAM,EAAU,IAAK,EAAU,IACzC,EAAU,IAAM,EAAU,IAAK,EAAU,IACzC,EAAU,IAAM,EAAU,IAAK,EAAU,IACzC,EAAU,IAAM,EAAU,IAAK,EAAU,IACzC,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IACxD,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IACxD,EAAU,IAAM,EAAU,IAAK,EAAU,IACzC,EAAU,IAAM,EAAU,IAAK,EAAU,IACzC,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IAAK,EAAU,IAAK,EAAU,IACtF,EAAU,IAAM,EAAU,IAAK,EAAU,IAAK,EAAU,IAAK,EAAU,IAAK,EAAU,IACtF,EAAU,IAAM,EAAU,IAC1B,EAAU,IAAM,EAAU,IAAK,EAAU,IACzC,EAAU,IAAM,EAAU,IAAK,EAAU,IACzC,EAAU,IAAM,EAAU,IAAK,EAAU,IACzC,EAAU,KAAM,EAAU,KAC1B,EAAU,KAAM,EAAU,KAC1B,EAAU,KAAM,EAAU,MAmEnB,SAAShd,GACd,OAAiB,MAAVgd,OAAiBvG,EAAYuG,EAAOhd,KAqB/C,SAASi3M,EAAW96J,GAClB,OAAO06J,EAAajhM,KAAKumC,GAkD3B,IAOIm7D,EAPcp/G,OAAO+H,UAOQgW,SAG7B6vB,EAASnuC,EAAKmuC,OAGdoxK,EAAcpxK,EAASA,EAAO7lC,eAAYwW,EAC1C0gM,EAAiBD,EAAcA,EAAYjhM,cAAWQ,EAkL1D,SAASR,EAAS7d,GAChB,OAAgB,MAATA,EAAgB,GA3IzB,SAAsBA,GAEpB,GAAoB,iBAATA,EACT,OAAOA,EAET,GA2GF,SAAkBA,GAChB,MAAuB,iBAATA,GAtBhB,SAAsBA,GACpB,QAASA,GAAyB,iBAATA,EAsBtBg/M,CAAah/M,IA1bF,mBA0bYk/G,EAAen3G,KAAK/H,GA7G1Cs/G,CAASt/G,GACX,OAAO++M,EAAiBA,EAAeh3M,KAAK/H,GAAS,GAEvD,IAAI2pC,EAAU3pC,EAAQ,GACtB,MAAkB,KAAV2pC,GAAkB,EAAI3pC,IAAU,IAAa,KAAO2pC,EAkIhCs1K,CAAaj/M,GAuB3C,IArG0Bo7C,EAqGtB8jK,GArGsB9jK,EAqGO,SAASzR,EAAQ+qB,EAAM9iB,GAEtD,OADA8iB,EAAOA,EAAKxpB,cACLvB,GAAUiI,EAmBVutK,EAAWthM,EAnBkB62C,GAmBDxpB,eAnBSwpB,IAtGrC,SAAS3Q,GACd,OAzOJ,SAAqBtmB,EAAO2hL,EAAUC,EAAaC,GAOjD,IANA,IAAI1tK,GAAS,EACTl1B,EAAS+gB,EAAQA,EAAM/gB,OAAS,IAK3Bk1B,EAAQl1B,GACf2iM,EAAcD,EAASC,EAAa5hL,EAAMmU,GAAQA,EAAOnU,GAE3D,OAAO4hL,EA+NEE,CAwLX,SAAex7J,EAAQv/B,EAASg7L,GAI9B,OAHAz7J,EAASlmC,EAASkmC,QAGF1lC,KAFhBmG,EAA8BA,GAvVhC,SAAwBu/B,GACtB,OAAO26J,EAAiBlhM,KAAKumC,GAyVpB07J,CAAe17J,GAvT1B,SAAsBA,GACpB,OAAOA,EAAOlnC,MAAM2hM,IAAkB,GAsTJkB,CAAa37J,GAvYjD,SAAoBA,GAClB,OAAOA,EAAOlnC,MAAM8/L,IAAgB,GAsYqBgD,CAAW57J,GAE7DA,EAAOlnC,MAAM2H,IAAY,GA/LXo7L,CA6IvB,SAAgB77J,GAEd,OADAA,EAASlmC,EAASkmC,KACDA,EAAOtb,QAAQm0K,EAASgC,GAAcn2K,QAAQ61K,EAAa,IA/IjDuB,CAAO97J,GAAQtb,QAAQ41K,EAAQ,KAAMjjK,EAAU,MAmKxE+jK,GAA6B,cA/LxB,SAASp7J,GAGd,IAjBetmB,EAAO+D,EAAOJ,EAC3B1kB,EAgBEojM,EAAajB,EAFjB96J,EAASlmC,EAASkmC,IAvHtB,SAAuBA,GACrB,OAAO86J,EAAW96J,GAYpB,SAAwBA,GACtB,OAAOA,EAAOlnC,MAAM0hM,IAAc,GAZ9BwB,CAAeh8J,GArErB,SAAsBA,GACpB,OAAOA,EAAO1mC,MAAM,IAqEhB2iM,CAAaj8J,GAuHXk8J,CAAcl8J,QACd1lC,EAEA6hM,EAAMJ,EACNA,EAAW,GACX/7J,EAAO4tF,OAAO,GAEdwuE,EAAWL,GAzBAriL,EA0BDqiL,EA1BQt+K,EA0BI,EAzBxB9kB,EAAS+gB,EAAM/gB,OACnB0kB,OAAc/iB,IAAR+iB,EAAoB1kB,EAAS0kB,GAC1BI,GAASJ,GAAO1kB,EAAU+gB,EArDrC,SAAmBA,EAAO+D,EAAOJ,GAC/B,IAAIwQ,GAAS,EACTl1B,EAAS+gB,EAAM/gB,OAEf8kB,EAAQ,IACVA,GAASA,EAAQ9kB,EAAS,EAAKA,EAAS8kB,IAE1CJ,EAAMA,EAAM1kB,EAASA,EAAS0kB,GACpB,IACRA,GAAO1kB,GAETA,EAAS8kB,EAAQJ,EAAM,EAAMA,EAAMI,IAAW,EAC9CA,KAAW,EAGX,IADA,IAAImI,EAAShM,MAAMjhB,KACVk1B,EAAQl1B,GACfitB,EAAOiI,GAASnU,EAAMmU,EAAQpQ,GAEhC,OAAOmI,EAmCoCy2K,CAAU3iL,EAAO+D,EAAOJ,IAuBpCxjB,KAAK,IAC9BmmC,EAAOjkC,MAAM,GAEjB,OAAOogM,EAAG,cAAiBC,IA+M/BzgN,EAAOD,QAAUy/M,G,kCCplBbmB,EAAkB/4M,uBAClB43B,EAAO53B,EAAQ,GASnB5H,EAAOD,QAAU,SAAyB+kB,EAASlI,GAEjD,IAAI8pB,GADJ9pB,EAAUA,GAAW,KAEmB,iBAApBA,EAAQ8pB,QACtB9pB,EAAQ8pB,QACRhK,EAAQyC,MACVwjK,EACF/lL,GAAyC,iBAAvBA,EAAQ+lL,WAA0B/lL,EAAQ+lL,WAAa,GAO3E,OAAO,SAAkB1wB,EAAWhuC,GAClC,IAAIxkH,EAAOqF,EAAQikB,QAAQ,cAAekpI,GACtC2uC,EAAgB,CAClBC,aAAc58E,GAGZ68E,EAAgB,CAClBh/G,QACE6gG,EACAnjK,EAAKqB,SAAS6F,EAASu9F,GAAUl7F,QAAQ,MAAO,KAChD,IACAkpI,EACFvrI,QAASA,GAIX,OADkBi6K,EAAgBC,EAAenhM,EAAMqhM,GAEpD/3K,QAAQ,IAAI0U,OAAO,sBAAiC,KAAM,KAC1D1U,QAAQ,kBAAmB,U,uBC1ClC3oC,OAAOC,eAAeN,EAAS,aAAc,CAC3CO,OAAO,IAGT,IAIgCugB,EAF5BkgM,GAE4BlgM,EAJNjZ,EAAQ,OAImBiZ,EAAIC,WAAaD,EAAM,CAAEzc,QAASyc,GAIvF,MAAMmgM,EAAe,oBAiErBjhN,EAAQqE,QAhER,MACEsY,YAAYukM,EAAaC,GACvBllM,KAAKilM,YAAcA,EACnBjlM,KAAKi2D,OAASj2D,KAAKi2D,OAAO51B,KAAKrgC,MAC/BA,KAAK4nL,aAAe,GACpB5nL,KAAKmlM,aAAe,GACpBnlM,KAAKklM,MAAQA,EAGfjvI,SACE,MAAM+rB,EAAShiF,KACf,MAAO,CACLoyH,cAAe,qBACfmZ,SAAShZ,GACAj+F,QAAQI,IAAIstD,EAAOojH,gBAAgB7yE,IAAMp+F,MAAK,IAAM6tD,EAAOqjH,oBAAoB9yE,KAAMp+F,MAAK,IAAM6tD,EAAOsjH,eAAe/yE,MAKnI6yE,gBAAgB7yE,GACd,IAAIgzE,EAAU,GAMd,OALAhzE,EAAI1yF,MAAK5yC,IACU,QAAbA,EAAKE,MAAkBF,EAAK00C,SAASxgC,MAAM6jM,IAC7CO,EAAQviM,KAAKhD,KAAKwlM,YAAYv4M,EAAMslI,EAAIvmH,OAAO8uD,MAAMh2C,KAAMygL,EAAQvkM,YAGhEukM,EAGTF,oBAAoB9yE,IAClB,EAAIwyE,EAAqB38M,SAASmqI,EAAKvyH,KAAKmlM,cAG9CG,eAAe/yE,GACbA,EAAI1yF,MAAK5yC,IACU,QAAbA,EAAKE,MAAmC,WAAjBF,EAAK00C,UAAuB3hC,KAAKylM,aAAax4M,MAI7Ew4M,aAAaC,GACXA,EAAW7lK,MAAK6C,IACG,QAAbA,EAAKv1C,OACP/I,OAAO4H,KAAKgU,KAAKmlM,cAAcl5M,SAAQ05M,IACrCjjK,EAAKp+C,MAAQo+C,EAAKp+C,MAAMyoC,QAAQ44K,EAAa3lM,KAAKmlM,aAAaQ,OAEjE3lM,KAAK4nL,aAAallJ,EAAKlB,MAAQkB,EAAKp+C,UAGxCohN,EAAW3vK,SAGbyvK,YAAYxqH,EAAY4qH,EAAYC,GAClC,IAAIn+L,EAAOszE,EAAWr5C,SAASxgC,MAAM6jM,GAAc,GAC/Cc,EAAW9lM,KAAKklM,MAAQ/tK,OAAOshB,aAAaotJ,GAChD,OAAO7lM,KAAKilM,YAAYv9L,EAAMk+L,EAAYE,GAAU3xK,MAAKpwC,IACvDi3F,EAAWn7C,MAAK6C,IACG,QAAbA,EAAKv1C,OACP6S,KAAKmlM,aAAaziK,EAAKlB,MAAQz9C,EAAQ2+C,EAAKp+C,WAGhD02F,EAAWjlD,YACV5xB,W,iBC5DPngB,EAAOD,QAdP,SAAcw3E,GAIZ,IAHA,IAAIxxB,EAAO,KACPvnC,EAAO+4D,EAAIv6D,OAETwB,GACJunC,EAAe,GAAPA,EAAawxB,EAAIt3C,aAAazhB,GAMxC,OAAOunC,IAAS,I,uBCXlB,MAAMg8J,EAAiBn6M,EAAQ,IACzBo6M,EAAcp6M,EAAQ,MACtB,YAAEq6M,GAAgBr6M,EAAQ,KAE1Bs6M,EAAaj5M,GAAuB,eAAdA,EAAKE,MAAwC,MAAfF,EAAK3I,MAE/D,SAAS6hN,EAAmBtlK,GAC1B,MAAM9e,EAAQ,GAed,OAbA8e,EAAM50C,SAASwmE,IACTxwC,MAAMod,QAAQozB,GAChB0zI,EAAmB1zI,GAAGxmE,SAAS0oC,IAC7B5S,EAAM/e,KAAK2xB,MAEJ89B,GACT1wC,EAAM/e,KAAKyvD,MAIX1wC,EAAM/gB,OAAS,GAAKklM,EAAUnkL,EAAMA,EAAM/gB,OAAS,KACrD+gB,EAAMkN,MAEDlN,EA2NT,SAASqkL,EAAiBn5M,EAAMy9B,GAC9B,OAAQz9B,EAAKE,MACX,IAAK,OACCu9B,EAAQ27K,mBACL37K,EAAQ47K,cAAc1hM,IAAI3X,EAAK3I,SAClC2I,EAAK3I,MAAQ,UAAY2I,EAAK3I,MAAQ,IACtComC,EAAQ27K,kBAAmB,IAG/B,MAEF,IAAK,WAED37K,EAAQ9pB,SACR8pB,EAAQ9pB,QAAQ2lM,YACa,QAA7Bt5M,EAAK3I,MAAMkrC,eAEXviC,EAAK4zC,MAAMj/B,KAAK4kM,IACd,GAAwB,WAApBA,EAAWr5M,MAAyC,SAApBq5M,EAAWr5M,KAC7C,OAGF,IAAIs5M,EAAS/7K,EAAQ9pB,QAAQ2lM,WAC3B77K,EAAQ0tD,OACRouH,EAAWliN,OAGb,OAAQkiN,EAAWr5M,MACjB,IAAK,SACsB,MAArBq5M,EAAWnrI,QACborI,EAASA,EAAO15K,QAAQ,QAAS,QAAQA,QAAQ,KAAM,QAGhC,MAArBy5K,EAAWnrI,QACborI,EAASA,EAAO15K,QAAQ,QAAS,QAAQA,QAAQ,KAAM,QAGzD,MACF,IAAK,OACH05K,EAASA,EAAO15K,QAAQ,eAAgB,QAI5Cy5K,EAAWliN,MAAQmiN,KAK3B,OAAOx5M,EAYT,SAASy5M,EAA0BC,EAAUz6L,EAAawe,GACxD,MAAMk8K,EAAaZ,EAAY95L,EAAY5nB,OAE3CsiN,EAAWvlK,MAAK,CAACp0C,EAAMipC,EAAO2K,KAC5B,MAAMgmK,EAAa,CACjBjmM,QAAS8pB,EAAQ9pB,QACjBw3E,OAAQ1tD,EAAQ0tD,OAChBiuH,iBAAkBM,IAAaj8K,EAAQ0tD,OACvCkuH,cAAe57K,EAAQ47K,eAEzBzlK,EAAM3K,GAASkwK,EAAiBn5M,EAAM45M,MAGxC36L,EAAY5nB,MAAQsiN,EAAWzkM,WAGjC,SAAS2kM,EAAoB56L,EAAawe,GAGxC,IAFoB,cAAc5oB,KAAKoK,EAAYs1B,MA0FnD,MAFwB,sBAAsB1/B,KAAKoK,EAAYs1B,MAGtDklK,GAA0B,EAAMx6L,EAAawe,GAGvC,SAAS5oB,KAAKoK,EAAY5nB,OAGhCoiN,GAA0B,EAAOx6L,EAAawe,QADvD,EA9FA,CACE,MAAMq8K,EAAa,yBAabC,EAAoB,CACxBC,WAAY,EACZ,qBAAsB,EACtBC,WAAY,EACZC,MAAO,EACPC,MAAO,EACP,WAAY,EACZ,eAAgB,EAChB,YAAa,EACbC,UAAW,EACXC,UAAW,EACXC,QAAS,EACTC,MAAOhhH,IACPihH,QAAS,EACTC,QAAS,EACTC,SAAU,EACVC,SAAU,EACV,YAAa,EACb,cAAe,EACfC,SAAUrhH,IACVshH,SAAUthH,IACVuhH,OAAQvhH,KAGJwhH,GAAwB,EAC9B,IAAIC,EAA0B,GAC1BC,EAAoB,KACxB,MAAMtB,EAAaZ,EAAY95L,EAAY5nB,OAAO+8C,MAAMp0C,IAEpC,QAAdA,EAAKE,OACP86M,EAA0B,IAEV,aAAdh7M,EAAKE,MAAoD,UAA7BF,EAAK3I,MAAMkrC,gBACzC04K,EAAoBj7M,GAEtB,MAAM3I,EACU,SAAd2I,EAAKE,OA9EoBg7M,EA+EAl7M,GA/EUm7M,EA+EJF,IA7EjCE,EAAavnK,MAAMzS,MAChBi6K,GACCA,EAAkBrvD,cAAgBmvD,EAASnvD,eA6EzC,KADA/rJ,EAAK3I,MAAMkrC,cAhFvB,IAAiC24K,EAAUC,EAmFrC,IAAIE,GAA2B,EAuB/B,OArBKN,GAAyB1jN,GAASyiN,EAAWjlM,KAAKxd,KACjD,IAAMA,KAAS0iN,GACjBiB,EAAwB,IAAM3jN,GAC5B,IAAMA,KAAS2jN,EACXA,EAAwB,IAAM3jN,GAAS,EACvC,EAENgkN,EACEL,EAAwB,IAAM3jN,IAC9B0iN,EAAkB,IAAM1iN,IAE1BgkN,GAA2B,GAUxBlC,EAAiBn5M,EANL,CACjB2T,QAAS8pB,EAAQ9pB,QACjBw3E,OAAQ1tD,EAAQ0tD,OAChBiuH,iBAAkBiC,IAA6B59K,EAAQ0tD,OACvDkuH,cAAe57K,EAAQ47K,mBAK3Bp6L,EAAY5nB,MAAQsiN,EAAWzkM,YAkBnCne,EAAOD,QAAU,CAAC6c,EAAU,MAC1B,GACEA,GACAA,EAAQyrH,MACS,WAAjBzrH,EAAQyrH,MACS,UAAjBzrH,EAAQyrH,MACS,SAAjBzrH,EAAQyrH,KAER,MAAM,IAAInpH,MACR,6EAIJ,MAAMqlM,EAAW3nM,GAA4B,SAAjBA,EAAQyrH,KAC9Bm8E,EAAa5nM,GAA4B,WAAjBA,EAAQyrH,KAEtC,MAAO,CACL+F,cAAe,mCACf2Y,UACE,MAAMu7D,EAAgB,IAAIv4K,IAE1B,MAAO,CACLi9G,KAAKnnJ,GACH,MAAM,YAAE4kN,GAAgBxC,EAAYpiN,GAAM,GAE1CO,OAAO4H,KAAKy8M,GAAax8M,SAASC,IAChC9H,OAAO4H,KAAKy8M,EAAYv8M,IAAMD,SAASu1C,IACrC8kK,EAAcp6K,IAAIsV,EAAMinK,EAAYv8M,GAAKs1C,UAI7C39C,EAAK+9C,aAAa8wF,IAChB,GAAI,cAAc5wH,KAAK4wH,EAAOjvH,MAAO,CACnC,MAAMilM,EAAc,6BAA6BlxK,KAC/Ck7F,EAAOvqH,QAEHwgM,EAAa,4BAA4BnxK,KAC7Ck7F,EAAOvqH,QAGT,IAAIygM,EAAkBJ,EAEtB,GAAIE,EAAa,CACf,GAAIH,EACF,MAAM71E,EAAOj7F,MACX,uDAGJi7F,EAAOvqH,OAASugM,EAAY,GAC5BE,GAAkB,OACTD,GACTj2E,EAAOvqH,OAASwgM,EAAW,GAC3BC,GAAkB,GACRJ,GACN91E,EAAOvqH,SAAWm+L,EAAc1hM,IAAI8tH,EAAOvqH,UAC7CuqH,EAAOvqH,OAAS,UAAYuqH,EAAOvqH,OAAS,KAIhDuqH,EAAOnxF,WAAWr1B,IAChB46L,EAAoB56L,EAAa,CAC/Bo6L,gBACA1lM,QAASA,EACTw3E,OAAQwwH,YAGHl2E,EAAO7xF,OAChB6xF,EAAO7xF,MAAM50C,SAASigB,IACK,SAArBA,EAAY/e,MACd25M,EAAoB56L,EAAa,CAC/Bo6L,gBACA1lM,QAASA,EACTw3E,OAAQowH,UAOlB3kN,EAAK69C,WAAWixF,IACd,GACEA,EAAK9oG,QACgB,WAArB8oG,EAAK9oG,OAAO18B,MACZ,cAAc2U,KAAK6wH,EAAK9oG,OAAOpmB,MAG/B,OAGF,MAAMinB,EAnelB,SAAsBioG,EAAMtG,EAAMi6E,GAChC,MAAMl+K,EAAY,CAACn7B,EAAMy9B,KACvB,GAAIA,EAAQm+K,oBAAsB3C,EAAUj5M,GAC1C,MAAM,IAAIiW,MAAM,4BAA8BwnB,EAAQm+K,mBAGxD,GAAIn+K,EAAQo+K,kBAAoB5C,EAAUj5M,GACxC,MAAM,IAAIiW,MAAM,6BAA+BwnB,EAAQo+K,kBAGzD,IAAIC,EAEJ,OAAQ97M,EAAKE,MACX,IAAK,OAAQ,CACX,IAAI67M,EAEJt+K,EAAQu+K,gBAAiB,EAEzBF,EAAW97M,EAAK4zC,MAAMj/B,KAAKimF,IACzB,MAAMqhH,EAAW,CACf9wH,OAAQ1tD,EAAQ0tD,OAChB+wH,gBAAgB,EAChBC,WAAW,EACXvyE,UAAU,GAKZ,GAFAhvC,EAAIz/D,EAAUy/D,EAAGqhH,QAEc,IAApBF,EACTA,EAAkBE,EAAS9wH,YACtB,GAAI4wH,IAAoBE,EAAS9wH,OACtC,MAAM,IAAIl1E,MACR,kDACEjW,EACA,oEAQN,OAJKi8M,EAASE,YACZ1+K,EAAQu+K,gBAAiB,GAGpBphH,KAGTn9D,EAAQ0tD,OAAS4wH,EAEjB/7M,EAAK4zC,MAAQslK,EAAmB4C,GAChC,MAEF,IAAK,WACHA,EAAW97M,EAAK2U,KAAKynM,GAAcjhL,EAAUihL,EAAW3+K,MAExDz9B,EAAOA,EAAKlI,SACP87C,MAAQslK,EAAmB4C,GAChC,MAEF,IAAK,aACH,GAAI7C,EAAUj5M,GACZ,OAAIy9B,EAAQm+K,mBACVn+K,EAAQm+K,mBAAoB,EAC5Bn+K,EAAQy+K,gBAAiB,EACzBz+K,EAAQo+K,kBAAmB,EACpB,OAETp+K,EAAQy+K,gBAAiB,EAClBl8M,GAET,MAEF,IAAK,SAAU,CACb,IAAIq8M,EACJ,MAAMC,IAAat8M,EAAK+T,OAClBwoM,EAA0B,WAAfv8M,EAAK3I,OAAqC,YAAf2I,EAAK3I,MAIjD,GAFiB,YAAf2I,EAAK3I,OAAsC,YAAf2I,EAAK3I,MAGjComC,EAAQ0+K,WAAY,MAEf,IAAIG,EAAU,CACnB,GAAIC,EAAU,CACZ,GAA0B,IAAtBv8M,EAAK4zC,MAAM7/B,OACb,MAAM,IAAIkC,MAAO,GAAEjW,EAAK3I,0BAG1B,GAAIomC,EAAQ++K,OACV,MAAM,IAAIvmM,MACP,KAAIjW,EAAK3I,oCAAoComC,EAAQ++K,eAe1D,GAXAH,EAAe,CACblxH,OAAuB,YAAfnrF,EAAK3I,MACbmlN,OAAQx8M,EAAK3I,MACb8kN,WAAW,EACXvyE,UAAU,GAGZkyE,EAAW97M,EACR2U,KAAKynM,GAAcjhL,EAAUihL,EAAWC,KACxClmG,QAAO,CAACs/B,EAAK1vG,IAAS0vG,EAAInhH,OAAOyR,EAAK6N,QAAQ,IAE7CkoK,EAAS/nM,OAAQ,CACnB,MAAM,OAAE00B,EAAF,MAAUC,GAAU1oC,EAAKwoC,OAEzBnJ,EAAQy8K,EAAS,GACjBhnK,EAAOgnK,EAASA,EAAS/nM,OAAS,GAExCsrB,EAAMmJ,OAAS,CAAEC,SAAQC,MAAOrJ,EAAMmJ,OAAOE,OAC7CoM,EAAKtM,OAAS,CAAEC,OAAQqM,EAAKtM,OAAOC,OAAQC,SAG9C1oC,EAAO87M,EAEP,MAEAO,EAAe,CACblxH,OAAQ1tD,EAAQ0tD,OAChBqxH,OAAQ/+K,EAAQ++K,OAChBN,gBAAgB,EAChBC,WAAW,EACXvyE,SAAUnsG,EAAQmsG,UAEpBkyE,EAAW97M,EAAK2U,KAAKynM,GACnBjhL,EAAUihL,EAAWC,MAGvBr8M,EAAOA,EAAKlI,SACP87C,MAAQslK,EAAmB4C,GAE5BO,EAAaF,YACf1+K,EAAQ0+K,WAAY,GAGxB,MAGK,GAAII,EAAU,CACnB,GAAI9+K,EAAQ++K,OACV,MAAM,IAAIvmM,MACP,KAAIjW,EAAK3I,oCAAoComC,EAAQ++K,eAI1D,MAAMC,IAAmBz8M,EAAKwoC,OAAOC,OAgBrC,OAdAhL,EAAQm+K,oBAAoBn+K,EAAQy+K,gBAChCl8M,EAAK3I,MAGTomC,EAAQo+K,kBAAmBp+K,EAAQy+K,gBAE/Bl8M,EAAK3I,MAETomC,EAAQ0tD,OAAwB,YAAfnrF,EAAK3I,MACtBomC,EAAQmsG,UAAW,EAKZ6yE,EACH3D,EAAepsD,WAAW,CAAEr1J,MAAO,MACnC,MAEN,MAEF,IAAK,KACL,IAAK,QAAS,CACZ,IAAK2I,EAAK3I,MACR,MAAM,IAAI4e,MAAM,uCAGlB,GAAIwnB,EAAQ0tD,OACV,MAGF,MAAMuxH,EAAkBrD,EAAc1hM,IAAI3X,EAAK3I,OACzCslN,EAA8BD,GAAmBj/K,EAAQmsG,SAE/D,IAAK8yE,GAAmBC,EAA6B,CACnD,MAAMC,EAAY58M,EAAKlI,QACvB8kN,EAAUp0K,OAAS,CAAEC,OAAQ,GAAIC,MAAO,IAExC1oC,EAAO84M,EAAelpD,OAAO,CAC3Bv4J,MAAO,SACPu8C,MAAO,CAACgpK,GACRp0K,OAAQxoC,EAAKwoC,SAGf/K,EAAQ0+K,WAAY,EAGtB,OAQJ,OAJA1+K,EAAQy+K,gBAAiB,EACzBz+K,EAAQm+K,mBAAoB,EAC5Bn+K,EAAQo+K,kBAAmB,EAEpB77M,GAGH68M,EAAc,CAClB1xH,OAAiB,WAATi0C,EACR48E,gBAAgB,GAOlB,OAJAa,EAAYnoK,SAAWokK,GAAgBliN,IACrCukC,EAAUvkC,EAAMimN,MACf7zD,YAAYtjB,EAAM,CAAE6iB,gBAAgB,EAAOE,UAAU,IAEjDo0D,EA8QmBC,CAAap3E,EAAM/xH,EAAQyrH,KAAMi6E,GAKjD,GAHA57K,EAAQ9pB,QAAUA,EAClB8pB,EAAQ47K,cAAgBA,EAEpBiC,GAAY79K,EAAQu+K,eACtB,MAAMt2E,EAAKl7F,MACT,aACEk7F,EAAKhxF,SADP,8EAOJgxF,EAAKhxF,SAAWjX,EAAQiX,SAGpBgxF,EAAK9xF,OACP8xF,EAAK9xF,MAAM50C,SAASigB,GAClB46L,EAAoB56L,EAAawe,aASjD1mC,EAAOD,QAAQkuI,SAAU,G,UC1hBzB,IAAIxrG,EAAQ76B,EAAQ,KAChBy1C,EAAOz1C,EAAQ,KACf83B,EAAY93B,EAAQ,KAExB,SAASo+M,EAAY1lN,GACnB,OAAI0b,gBAAgBgqM,GAClBhqM,KAAK6gC,MAAQpa,EAAMniC,GACZ0b,MAEF,IAAIgqM,EAAY1lN,GAGzB0lN,EAAY79M,UAAUgW,SAAW,WAC/B,OAAO8f,MAAMod,QAAQr/B,KAAK6gC,OAASnd,EAAU1jB,KAAK6gC,OAAS,IAG7DmpK,EAAY79M,UAAUk1C,KAAO,SAAS9M,EAAI01K,GAExC,OADA5oK,EAAKrhC,KAAK6gC,MAAOtM,EAAI01K,GACdjqM,MAGTgqM,EAAYE,KAAOt+M,EAAQ,KAE3Bo+M,EAAY3oK,KAAOA,EAEnB2oK,EAAYtmL,UAAYA,EAExB1/B,EAAOD,QAAUimN,G,IC3BjB,IAAIG,EAAkB,IAAIlmL,WAAW,GACjCmmL,EAAmB,IAAInmL,WAAW,GAClCq2K,EAAc,IAAIr2K,WAAW,GAC7Bo2K,EAAc,IAAIp2K,WAAW,GAC7Bm2K,EAAY,KAAKn2K,WAAW,GAC5BinB,EAAQ,IAAIjnB,WAAW,GACvBklB,EAAQ,IAAIllB,WAAW,GACvBolB,EAAQ,IAAIplB,WAAW,GACvBgnB,EAAO,IAAIhnB,WAAW,GACtBomL,EAAS,IAAIpmL,WAAW,GACxBqmL,EAAS,IAAIrmL,WAAW,GACxBw2K,EAAO,IAAIx2K,WAAW,GACtBsmL,EAAiB,iBAErBvmN,EAAOD,QAAU,SAAS+2E,GAuBxB,IAtBA,IAGI9nC,EACFqoC,EACAhlC,EACA0R,EACA0lG,EACA6pD,EACAkT,EACAC,EAME5gL,EAhBAhiB,EAAS,GACTvjB,EAAQw2E,EAURviB,EAAM,EACNj0C,EAAOhgB,EAAM2/B,WAAWs0B,GACxB1pB,EAAMvqC,EAAM0c,OACZ+sC,EAAQ,CAAC,CAAElN,MAAOh5B,IAClB6iM,EAAW,EAGXjnM,EAAO,GACPiyB,EAAS,GACTC,EAAQ,GAEL4iB,EAAM1pB,GAEX,GAAIvqB,GAAQ,GAAI,CACd0uB,EAAOulB,EACP,GACEvlB,GAAQ,EACR1uB,EAAOhgB,EAAM2/B,WAAW+O,SACjB1uB,GAAQ,IACjByjC,EAAQzjD,EAAM8f,MAAMm0C,EAAKvlB,GAEzBqD,EAAOxuB,EAAOA,EAAO7G,OAAS,GAC1BsD,IAAS8lM,GAAoBM,EAC/B/0K,EAAQoS,EACC1R,GAAsB,QAAdA,EAAKlpC,KACtBkpC,EAAKV,MAAQoS,EAEbzjC,IAAS6kC,GACT7kC,IAAS+kC,GACR/kC,IAAS4mC,GACR5mD,EAAM2/B,WAAW+O,EAAO,KAAOiY,KAC7BphB,GACCA,GAA0B,aAAhBA,EAAO18B,MAAwC,SAAjB08B,EAAOvlC,OAEpDoxC,EAASqS,EAETlgC,EAAO7E,KAAK,CACV7V,KAAM,QACN6rJ,YAAazgG,EACbj0D,MAAOyjD,IAIXwQ,EAAMvlB,OAGD,GAAI1uB,IAASg2L,GAAeh2L,IAAS+1L,EAAa,CACvDrnK,EAAOulB,EAEPxQ,EAAQ,CACN56C,KAAM,SACN6rJ,YAAazgG,EACb8iB,MAJFA,EAAQ/2D,IAASg2L,EAAc,IAAM,KAMrC,GAGE,GAFA7sD,GAAS,IACTz6G,EAAO1uC,EAAM+4C,QAAQg+B,EAAOroC,EAAO,IAGjC,IADAskK,EAAYtkK,EACL1uC,EAAM2/B,WAAWqzK,EAAY,KAAO8C,GACzC9C,GAAa,EACb7pD,GAAUA,OAIZz6G,GADA1uC,GAAS+2E,GACIr6D,OAAS,EACtB+mC,EAAM2vJ,UAAW,QAEZjqD,GACT1lG,EAAMzjD,MAAQA,EAAM8f,MAAMm0C,EAAM,EAAGvlB,GAEnCnrB,EAAO7E,KAAK+kC,GACZwQ,EAAMvlB,EAAO,EACb1uB,EAAOhgB,EAAM2/B,WAAWs0B,QAGnB,GAAIj0C,IAAS4mC,GAAS5mD,EAAM2/B,WAAWs0B,EAAM,KAAOtN,EACzDlD,EAAQ,CACN56C,KAAM,UACN6rJ,YAAazgG,IAID,KADdvlB,EAAO1uC,EAAM+4C,QAAQ,KAAMkb,MAEzBxQ,EAAM2vJ,UAAW,EACjB1kK,EAAO1uC,EAAM0c,QAGf+mC,EAAMzjD,MAAQA,EAAM8f,MAAMm0C,EAAM,EAAGvlB,GACnCnrB,EAAO7E,KAAK+kC,GAEZwQ,EAAMvlB,EAAO,EACb1uB,EAAOhgB,EAAM2/B,WAAWs0B,QAGnB,GACJj0C,IAAS4mC,GAAS5mC,IAAS2mC,IAC5BphB,GACgB,aAAhBA,EAAO18B,MACU,SAAjB08B,EAAOvlC,MAYF,GAAIggB,IAAS4mC,GAAS5mC,IAAS6kC,GAAS7kC,IAAS+kC,EACtDtB,EAAQzjD,EAAMi0D,GAEd1wC,EAAO7E,KAAK,CACV7V,KAAM,MACN6rJ,YAAazgG,EAAM7iB,EAAO10B,OAC1B1c,MAAOyjD,EACPrS,OAAQA,EACRC,MAAO,KAETD,EAAS,GAET6iB,GAAO,EACPj0C,EAAOhgB,EAAM2/B,WAAWs0B,QAGnB,GAAI4xJ,IAAoB7lM,EAAM,CAEnC0uB,EAAOulB,EACP,GACEvlB,GAAQ,EACR1uB,EAAOhgB,EAAM2/B,WAAW+O,SACjB1uB,GAAQ,IAUjB,GATAmmM,EAAqBlyJ,EACrBxQ,EAAQ,CACN56C,KAAM,WACN6rJ,YAAazgG,EAAM90C,EAAKzC,OACxB1c,MAAOmf,EACPiyB,OAAQpxC,EAAM8f,MAAMqmM,EAAqB,EAAGz3K,IAE9CulB,EAAMvlB,EAEO,QAATvvB,GAAkBa,IAASg2L,GAAeh2L,IAAS+1L,EAAa,CAClErnK,GAAQ,EACR,GAGE,GAFAy6G,GAAS,IACTz6G,EAAO1uC,EAAM+4C,QAAQ,IAAKrK,EAAO,IAG/B,IADAskK,EAAYtkK,EACL1uC,EAAM2/B,WAAWqzK,EAAY,KAAO8C,GACzC9C,GAAa,EACb7pD,GAAUA,OAIZz6G,GADA1uC,GAAS,KACI0c,OAAS,EACtB+mC,EAAM2vJ,UAAW,QAEZjqD,GAET+8D,EAAgBx3K,EAChB,GACEw3K,GAAiB,EACjBlmM,EAAOhgB,EAAM2/B,WAAWumL,SACjBlmM,GAAQ,IACbmmM,EAAqBD,GAErBziK,EAAMlH,MADJ0X,IAAQiyJ,EAAgB,EACZ,CACZ,CACEr9M,KAAM,OACN6rJ,YAAazgG,EACbj0D,MAAOA,EAAM8f,MAAMm0C,EAAKiyJ,EAAgB,KAI9B,GAEZziK,EAAM2vJ,UAAY8S,EAAgB,IAAMx3K,GAC1C+U,EAAMpS,MAAQ,GACdoS,EAAMlH,MAAM79B,KAAK,CACf7V,KAAM,QACN6rJ,YAAawxD,EAAgB,EAC7BlmN,MAAOA,EAAM8f,MAAMomM,EAAgB,EAAGx3K,MAGxC+U,EAAMpS,MAAQrxC,EAAM8f,MAAMomM,EAAgB,EAAGx3K,KAG/C+U,EAAMpS,MAAQ,GACdoS,EAAMlH,MAAQ,IAEhB0X,EAAMvlB,EAAO,EACb1uB,EAAOhgB,EAAM2/B,WAAWs0B,GACxB1wC,EAAO7E,KAAK+kC,QAEZ2iK,GAAY,EACZ3iK,EAAMpS,MAAQ,GACd9tB,EAAO7E,KAAK+kC,GACZgG,EAAM/qC,KAAK+kC,GACXlgC,EAASkgC,EAAMlH,MAAQ,GACvBhX,EAASke,EAEXtkC,EAAO,QAGF,GAAI2mM,IAAqB9lM,GAAQomM,EACtCnyJ,GAAO,EACPj0C,EAAOhgB,EAAM2/B,WAAWs0B,GAExB1uB,EAAO8L,MAAQA,EACfA,EAAQ,GACR+0K,GAAY,EACZ38J,EAAM9e,MAENpnB,GADAgiB,EAASkkB,EAAM28J,IACC7pK,UAGX,CACL7N,EAAOulB,EACP,GACMj0C,IAAS81L,IACXpnK,GAAQ,GAEVA,GAAQ,EACR1uB,EAAOhgB,EAAM2/B,WAAW+O,SAExBA,EAAOnE,KAELvqB,GAAQ,IACRA,IAASg2L,GACTh2L,IAAS+1L,GACT/1L,IAAS6kC,GACT7kC,IAAS+kC,GACT/kC,IAAS4mC,GACT5mC,IAAS6lM,GACR7lM,IAAS2mC,GACRphB,GACgB,aAAhBA,EAAO18B,MACU,SAAjB08B,EAAOvlC,OACRggB,IAAS4mC,GACQ,aAAhBrhB,EAAO18B,MACU,SAAjB08B,EAAOvlC,OACRggB,IAAS8lM,GAAoBM,IAGlC3iK,EAAQzjD,EAAM8f,MAAMm0C,EAAKvlB,GAErBm3K,IAAoB7lM,EACtBb,EAAOskC,EAENsiK,IAAWtiK,EAAM9jB,WAAW,IAAMqmL,IAAWviK,EAAM9jB,WAAW,IAC/Dw2K,IAAS1yJ,EAAM9jB,WAAW,KAC1BsmL,EAAezoM,KAAKimC,EAAM3jC,MAAM,IAQhCyD,EAAO7E,KAAK,CACV7V,KAAM,OACN6rJ,YAAazgG,EACbj0D,MAAOyjD,IATTlgC,EAAO7E,KAAK,CACV7V,KAAM,gBACN6rJ,YAAazgG,EACbj0D,MAAOyjD,IAUXwQ,EAAMvlB,OAvKN+U,EAAQzjD,EAAMi0D,GACd1wC,EAAO7E,KAAK,CACV7V,KAAM,OACN6rJ,YAAazgG,EAAM7iB,EAAO10B,OAC1B1c,MAAOyjD,IAETwQ,GAAO,EACPj0C,EAAOhgB,EAAM2/B,WAAWs0B,GAoK5B,IAAKA,EAAMxK,EAAM/sC,OAAS,EAAGu3C,EAAKA,GAAO,EACvCxK,EAAMwK,GAAKm/I,UAAW,EAGxB,OAAO3pJ,EAAM,GAAGlN,Q,IC9SlB78C,EAAOD,QAAU,SAASs9C,EAAKR,EAAOtM,EAAI01K,GACxC,IAAIznM,EAAGqsB,EAAK5hC,EAAMghC,EAElB,IAAKzrB,EAAI,EAAGqsB,EAAMgS,EAAM7/B,OAAQwB,EAAIqsB,EAAKrsB,GAAK,EAC5CvV,EAAO4zC,EAAMr+B,GACRynM,IACHh8K,EAASsG,EAAGtnC,EAAMuV,EAAGq+B,KAIV,IAAX5S,GACc,aAAdhhC,EAAKE,MACL80B,MAAMod,QAAQpyC,EAAK4zC,QAEnBQ,EAAKp0C,EAAK4zC,MAAOtM,EAAI01K,GAGnBA,GACF11K,EAAGtnC,EAAMuV,EAAGq+B,K,IClBlB,SAAS2tJ,EAAcvhM,EAAM23G,GAC3B,IAEIe,EACAglG,EAHAx9M,EAAOF,EAAKE,KACZ7I,EAAQ2I,EAAK3I,MAIjB,OAAIsgH,QAA4CjiG,KAAjCgoM,EAAe/lG,EAAO33G,IAC5B09M,EACW,SAATx9M,GAA4B,UAATA,EACrB7I,EACW,WAAT6I,GACTw4G,EAAM14G,EAAKouE,OAAS,IACP/2E,GAAS2I,EAAKyqM,SAAW,GAAK/xF,GACzB,YAATx4G,EACF,KAAO7I,GAAS2I,EAAKyqM,SAAW,GAAK,MAC1B,QAATvqM,GACDF,EAAKyoC,QAAU,IAAMpxC,GAAS2I,EAAK0oC,OAAS,IAC3C1T,MAAMod,QAAQpyC,EAAK4zC,QAC5B8kE,EAAMjiF,EAAUz2B,EAAK4zC,MAAO+jE,GACf,aAATz3G,EACKw4G,EAGPrhH,EACA,KACC2I,EAAKyoC,QAAU,IAChBiwE,GACC14G,EAAK0oC,OAAS,KACd1oC,EAAKyqM,SAAW,GAAK,MAGnBpzM,EAGT,SAASo/B,EAAUmd,EAAO+jE,GACxB,IAAI32E,EAAQzrB,EAEZ,GAAIyf,MAAMod,QAAQwB,GAAQ,CAExB,IADA5S,EAAS,GACJzrB,EAAIq+B,EAAM7/B,OAAS,GAAIwB,EAAGA,GAAK,EAClCyrB,EAASugK,EAAc3tJ,EAAMr+B,GAAIoiG,GAAU32E,EAE7C,OAAOA,EAET,OAAOugK,EAAc3tJ,EAAO+jE,GAG9B5gH,EAAOD,QAAU2/B,G,IC/CjB,IAAIooC,EAAQ,IAAI7nC,WAAW,GACvBw2K,EAAO,IAAIx2K,WAAW,GACtBslB,EAAM,IAAItlB,WAAW,GACrBujI,EAAM,IAAIvjI,WAAW,GACrB2mL,EAAM,IAAI3mL,WAAW,GA2CzBjgC,EAAOD,QAAU,SAASO,GACxB,IAEIggB,EACAumM,EACAC,EAJAvyJ,EAAM,EACNv3C,EAAS1c,EAAM0c,OAKnB,GAAe,IAAXA,IA9CN,SAAoB1c,GAClB,IACIumN,EADAvmM,EAAOhgB,EAAM2/B,WAAW,GAG5B,GAAI3f,IAASm2L,GAAQn2L,IAASwnD,EAAO,CAGnC,IAFA++I,EAAWvmN,EAAM2/B,WAAW,KAEZ,IAAM4mL,GAAY,GAChC,OAAO,EAGT,IAAIC,EAAexmN,EAAM2/B,WAAW,GAEpC,OAAI4mL,IAAathK,GAAOuhK,GAAgB,IAAMA,GAAgB,GAOhE,OAAIxmM,IAASilC,GACXshK,EAAWvmN,EAAM2/B,WAAW,KAEZ,IAAM4mL,GAAY,GAOhCvmM,GAAQ,IAAMA,GAAQ,GAgBLymM,CAAWzmN,GAC9B,OAAO,EAST,KANAggB,EAAOhgB,EAAM2/B,WAAWs0B,MAEXkiJ,GAAQn2L,IAASwnD,GAC5BvT,IAGKA,EAAMv3C,MACXsD,EAAOhgB,EAAM2/B,WAAWs0B,IAEb,IAAMj0C,EAAO,KAIxBi0C,GAAO,EAMT,GAHAj0C,EAAOhgB,EAAM2/B,WAAWs0B,GACxBsyJ,EAAWvmN,EAAM2/B,WAAWs0B,EAAM,GAE9Bj0C,IAASilC,GAAOshK,GAAY,IAAMA,GAAY,GAGhD,IAFAtyJ,GAAO,EAEAA,EAAMv3C,MACXsD,EAAOhgB,EAAM2/B,WAAWs0B,IAEb,IAAMj0C,EAAO,KAIxBi0C,GAAO,EAQX,GAJAj0C,EAAOhgB,EAAM2/B,WAAWs0B,GACxBsyJ,EAAWvmN,EAAM2/B,WAAWs0B,EAAM,GAClCuyJ,EAAexmN,EAAM2/B,WAAWs0B,EAAM,IAGnCj0C,IAASkjJ,GAAOljJ,IAASsmM,KACxBC,GAAY,IAAMA,GAAY,KAC5BA,IAAapQ,GAAQoQ,IAAa/+I,IAClCg/I,GAAgB,IAChBA,GAAgB,IAIpB,IAFAvyJ,GAAOsyJ,IAAapQ,GAAQoQ,IAAa/+I,EAAQ,EAAI,EAE9CvT,EAAMv3C,MACXsD,EAAOhgB,EAAM2/B,WAAWs0B,IAEb,IAAMj0C,EAAO,KAIxBi0C,GAAO,EAIX,MAAO,CACL07D,OAAQ3vH,EAAM8f,MAAM,EAAGm0C,GACvB2xJ,KAAM5lN,EAAM8f,MAAMm0C,M,UCrHtB,MAAMyyJ,EAAsBp/M,EAAQ,KAC9Bq/M,EAAiBr/M,EAAQ,KACzBq6M,EAAcr6M,EAAQ,KACtBs/M,EAAkBt/M,EAAQ,KAEhC5H,EAAOD,QAAU,CACfinN,sBACAC,iBACAhF,cACAiF,oB,UCTF,MAAMF,EAAsBp/M,EAAQ,KAiBpC5H,EAAOD,QAfgB,CAACwuI,EAAKkQ,KAC3BlQ,EAAIlxF,MAAMp0C,IACU,SAAdA,EAAKE,MAAmBF,EAAK3I,MAC/B2I,EAAK3I,MAAQ0mN,EAAoB/9M,EAAK3I,MAAM6d,WAAYsgI,GACjC,SAAdx1I,EAAKE,MAAmBF,EAAK00C,SACtC10C,EAAK00C,SAAWqpK,EACd/9M,EAAK00C,SAASx/B,WACdsgI,GAEqB,WAAdx1I,EAAKE,MAAqBF,EAAKkb,SACxClb,EAAKkb,OAAS6iM,EAAoB/9M,EAAKkb,OAAOhG,WAAYsgI,S,ICZhE,MAAM0oE,EAAgB,wCAChBC,EAAiB,6BAEjBC,EAAkB14E,IACtB,MAAMzpH,EAAS,GAQf,OANAypH,EAAKpxF,WAAWmB,IACd,MAAMhN,EAASgN,EAAKjM,KAAKf,OAASgN,EAAKjM,KAAKf,OAAOx0B,OAAS,GAE5DgI,EAAOwsB,EAASgN,EAAKlB,MAAQkB,EAAKp+C,SAG7B4kB,GA+DTllB,EAAOD,QAvDa,CAACwuI,EAAK+4E,GAAc,EAAMj/E,EAAO,UACnD,MAAMo8E,EAAc,GACd8C,EAAc,GAEpB,SAASC,EAAWv+M,EAAMu2B,GACxB,MAAMioL,EAAWjoL,EAAKuJ,QAAQ,OAAQ,IACtC07K,EAAYgD,GAAYrnN,OAAOigB,OAC7BokM,EAAYgD,IAAa,GACzBJ,EAAep+M,IAGbq+M,GACFr+M,EAAK8oC,SAIT,SAAS21K,EAAWz+M,GAClB7I,OAAOigB,OAAOknM,EAAaF,EAAep+M,IACtCq+M,GACFr+M,EAAK8oC,SAiCT,OA7BAw8F,EAAI1yF,MAAM5yC,IACR,GAAkB,SAAdA,EAAKE,MAA4B,YAATk/H,EAAoB,CAC9C,GAAkC,YAA9Bp/H,EAAK00C,SAASv9B,MAAM,EAAG,GAAkB,CAC3C,MAAMs5D,EAAUytI,EAAc3zK,KAAKvqC,EAAK00C,UAEpC+7B,GACF8tI,EAAWv+M,EAAMywE,EAAQ,IAIP,YAAlBzwE,EAAK00C,UACP+pK,EAAWz+M,GAIf,GAAkB,WAAdA,EAAKE,MAA8B,SAATk/H,EAAiB,CAC7C,GAAkB,gBAAdp/H,EAAKwW,KAAwB,CAC/B,MAAMi6D,EAAU0tI,EAAe5zK,KAAKvqC,EAAKkb,QAErCu1D,GACF8tI,EAAWv+M,EAAMywE,EAAQ,IAGX,gBAAdzwE,EAAKwW,MACPioM,EAAWz+M,OAKV,CAAEw7M,cAAa8C,iB,ICxExB,MAAMI,EAAgB,CAACpG,EAAStzE,EAAS5F,EAAO,SACvCjoI,OAAO4H,KAAKu5M,GAAS3jM,KAAK4hB,IAC/B,MAAM8b,EAAUimK,EAAQ/hL,GAClBpY,EAAehnB,OAAO4H,KAAKszC,GAAS19B,KAAK1V,GAC7C+lI,EAAQvvF,KAAK,CACXlB,KAAMt1C,EACN5H,MAAOg7C,EAAQpzC,GACfuqC,KAAM,CAAEf,OAAQ,YAIdk2K,EAAkBxgM,EAAapK,OAAS,EAExC2xH,EACK,SAATtG,EACI4F,EAAQU,KAAK,CACXhxF,SAAW,YAAWne,MACtBiT,KAAM,CAAEd,MAAOi2K,EAAkB,KAAO,MAE1C35E,EAAQS,OAAO,CACbjvH,KAAM,cACN0E,OAAS,IAAGqb,KACZiT,KAAM,CAAEd,MAAOi2K,EAAkB,KAAO,MAOhD,OAJIA,GACFj5E,EAAK7wF,OAAO12B,GAGPunH,KAILk5E,EAAgB,CAAC9nN,EAASkuI,EAAS5F,EAAO,UAC9C,MAAMjhH,EAAehnB,OAAO4H,KAAKjI,GAAS6d,KAAK1V,GAC7C+lI,EAAQvvF,KAAK,CACXlB,KAAMt1C,EACN5H,MAAOP,EAAQmI,GACfuqC,KAAM,CAAEf,OAAQ,YAIpB,GAA4B,IAAxBtqB,EAAapK,OACf,MAAO,GAET,MAAM2xH,EACK,SAATtG,EACI4F,EAAQU,KAAK,CACXhxF,SAAW,UACXlL,KAAM,CAAEd,MAAO,QAEjBs8F,EAAQS,OAAO,CACbjvH,KAAM,cACNgzB,KAAM,CAAEd,MAAO,QAKvB,OAFAg9F,EAAK7wF,OAAO12B,GAEL,CAACunH,IAQV3uI,EAAOD,QALiB,CAACwhN,EAASxhN,EAASkuI,EAAS5F,IAAS,IACxDs/E,EAAcpG,EAAStzE,EAAS5F,MAChCw/E,EAAc9nN,EAASkuI,EAAS5F,K,UC/DrC,MAAMy/E,EAAkBlgN,EAAQ,KAE1BmgN,EAAe,oDACfC,EAAa,sCAyBnB,SAASC,EAAiBC,EAAUC,EAAUC,EAAOC,GACnD,MAAMC,EAAaH,cACbI,EAAYJ,EAAW,IAAMD,EAEnC,GA3BqB,IA2BjBG,EAAQE,GAA+B,CACpCtqL,MAAMod,QAAQgtK,EAAQC,MACzBD,EAAQC,GAAc,IAGxB,MAAME,EAAWH,EAAQC,GAErBrqL,MAAMod,QAAQ+sK,EAAMF,IACtBE,EAAMF,GAAYE,EAAMF,GAAU3qL,OAAOirL,GAEzCJ,EAAMF,GAAYM,EAASpoM,QAG7BioM,EAAQE,GAxCW,EA0CnBC,EAASxpM,KAAKkpM,IAIlBloN,EAAOD,QAAU,CAAC6c,EAAU,MAC1B,IAAI6rM,EAAc,EAClB,MAAMC,EACkC,mBAA/B9rM,EAAQ8rM,mBACVj1C,GACE,eAAcA,EAAW1qI,QAAQ,MAAO,QAAQ0/K,MACnD7rM,EAAQ8rM,mBACRC,EAAmB/rM,EAAQ+rM,iBAEjC,MAAO,CACLv6E,cAAe,kCACf2Y,UACE,MAAMqhE,EAAQ,GACRC,EAAU,GACVO,EAAkB,GAClBC,EAAc,GACdtH,EAAU,GAEhB,MAAO,CACLv6D,KAAKnnJ,EAAMouI,GAETpuI,EAAK69C,WAAWixF,IACd,MAAMj1D,EAAUsuI,EAAWx0K,KAAKm7F,EAAKhxF,UAErC,GAAI+7B,EAAS,CACX,MAAO,CAAYovI,EAAiBC,GAAmBrvI,EACjDsvI,EAAaF,GAAmBC,EAEtCd,EAAiBe,EAAY,OAAQZ,EAAOC,GAE5CO,EAAgBI,GAAcr6E,MAIlC9uI,EAAK09C,UAAU,cAAer1B,IAC5B,MAAMwxD,EAAUxxD,EAAY5nB,MAAM6c,MAAM4qM,GAExC,IAAKruI,EACH,OAGF,IAAIuvI,GACC,CAEOljD,EACV+iD,EACAC,EACA30H,GACE1a,EAEJ,GAAI0a,EAEF60H,EAAaljD,EAAQpoJ,MAAM,OAAOC,KAAK60G,GAAO,UAASA,WAClD,CACL,MAAMu2F,EAAaF,GAAmBC,EAEtC,IAAIljL,EAAS3d,EAAY2d,OACrBqjL,EAAgB,GAEpB,KAAuB,SAAhBrjL,EAAO18B,MACZ+/M,EACErjL,EAAOA,OAAOqM,MAAMrM,GAAU,IAAMqjL,EACtCrjL,EAASA,EAAOA,OAGlB,MAAM,SAAE8X,GAAaz1B,EAAY2d,OAGjCoiL,EAAiBe,EAFG,IAAGE,IAAgBvrK,IAEEyqK,EAAOC,GAEhDQ,EAAYG,GAAc9gM,EAC1Bq5L,EAAQyH,GAAczH,EAAQyH,IAAe,GAE7CC,EAAaljD,EAAQpoJ,MAAM,OAAOC,KAAK60G,IAChC8uF,EAAQyH,GAAYv2F,KACvB8uF,EAAQyH,GAAYv2F,GAAKi2F,EAAmBj2F,EAAGu2F,IAG1CzH,EAAQyH,GAAYv2F,MAI/BvqG,EAAY5nB,MAAQ2oN,EAAW/qM,KAAK,QAGtC,MAAMirM,EAAerB,EAAgBM,EAAOO,GAE5C,GAAIQ,aAAwBjqM,MAAO,CACjC,MAAM8pM,EAAaG,EAAatsK,MAAMu1B,MAAM42I,GAE1CH,EAAYzgN,eAAe4gN,KAI7B,MAFaH,EAAYG,GAEdv1K,MACT,+CACE01K,EAAatsK,MACVj/B,KAAKorM,GAAe,IAAMA,EAAa,MACvC9qM,KAAK,MACR,IACF,CACE+zD,OAAQ,kCACRjd,KAAM,aAKZ,IAAIo0J,EAEJD,EAAalhN,SAASu3B,IACpB,MAAM6pL,EAAkB9H,EAAQ/hL,GAChC,IAAImvG,EAAOi6E,EAAgBppL,IAEtBmvG,GAAQ06E,IACX16E,EAAOV,EAAQU,KAAK,CAClBhxF,SAAW,YAAWne,MACtBiT,KAAM,CAAEd,MAAO,QAGby3K,EACFvpN,EAAKi2C,YAAYszK,EAAgBz6E,GAEjC9uI,EAAKo+C,QAAQ0wF,IAIjBy6E,EAAiBz6E,EAEZ06E,GAILjpN,OAAO4H,KAAKqhN,GAAiBphN,SAASqhN,IACpC36E,EAAK7wF,OACHmwF,EAAQvvF,KAAK,CACXp+C,MAAOgpN,EACP9rK,KAAM6rK,EAAgBC,GACtB72K,KAAM,CAAEf,OAAQ,sBAWlC1xC,EAAOD,QAAQkuI,SAAU,G,ICvLzB,SAASs7E,EAAUtgN,EAAMm/M,EAAOriL,EAAOkE,EAAQogC,GAC7C,GAjBuB,IAiBnBtkC,EAAM98B,GACR,OAGF,GApBuB,IAoBnB88B,EAAM98B,GACR,OAAIohE,EAnBR,SAAqBphE,EAAMm/M,GACzB,MAAMz9K,EAAK,IAAIzrB,MAAM,mCAGfsqM,EADUpB,EAAMn/M,GACMmpE,MACzBo3I,GAAgBpB,EAAMoB,GAAanwK,QAAQpwC,IAAS,IAKvD,OAFA0hC,EAAGkS,MAAQ,CAAC5zC,EAAMugN,GAEX7+K,EAUI8+K,CAAYxgN,EAAMm/M,QAG3B,EAGFriL,EAAM98B,GA5BiB,EA8BvB,MAAMgnB,EAAWm4L,EAAMn/M,GACjB+T,EAASiT,EAASjT,OAExB,IAAK,IAAIwB,EAAI,EAAGA,EAAIxB,IAAUwB,EAAG,CAC/B,MAAMi1B,EAAQ81K,EAAUt5L,EAASzR,GAAI4pM,EAAOriL,EAAOkE,EAAQogC,GAE3D,GAAI52B,aAAiBv0B,MACnB,OAAOu0B,EAIX1N,EAAM98B,GA1CiB,EA4CvBghC,EAAOjrB,KAAK/V,GAqBdjJ,EAAOD,QAlBP,SAAyBqoN,EAAO/9I,GAC9B,MAAMpgC,EAAS,GACTlE,EAAQ,GAER8W,EAAQz8C,OAAO4H,KAAKogN,GACpBprM,EAAS6/B,EAAM7/B,OAErB,IAAK,IAAIwB,EAAI,EAAGA,EAAIxB,IAAUwB,EAAG,CAC/B,MAAMmsB,EAAK4+K,EAAU1sK,EAAMr+B,GAAI4pM,EAAOriL,EAAOkE,EAAQogC,GAErD,GAAI1/B,aAAczrB,MAChB,OAAOyrB,EAIX,OAAOV,I,uBC5DT7pC,OAAOC,eAAeN,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQqE,aAAU,EAElB,IAAIslN,EAAqB9hN,EAAQ,GAE7B+hN,EAAgC/hN,EAAQ,KAExCgiN,EAAmChiN,EAAQ,IAE/C,SAASu/J,EAAYrhI,EAAO+jL,GAE1B,IAAI3wF,EACA16G,EAAI,EAER,GACE06G,EAAMpzF,EAAMshI,aALD,GAKoB5oJ,GAC/BA,UACOqrM,EAASjpM,IAAIs4G,IAEtB,OAAOA,EAGT,IAAI5qG,GAAW,EAAIo7L,EAAmBvqM,UAAS,EAC7CmN,MAAOhQ,EACPqpC,WACA9lC,oBAEAA,EAAc,WACP,CACLJ,KAAM,8BACNpd,SAAUsnN,EAA8BvlN,QAExCuhI,OACE,EAAIikF,EAAiC72E,eAAe/2H,KAAK0H,KAAMkmM,EAAiC10E,SAAS40E,cAAc,IAGzHl1K,QAAS,CACPm1K,UAAUpiM,GACR,MAAM,MACJme,GACEne,EACEw0E,EAAe,IAAIvnC,IACnBpyC,EAAOmF,EAAUzjB,IAAI,QAE3B,IAAK,MAAMs7B,KAAQhd,EACbgd,EAAKtkB,aACPihF,EAAa79C,IAAI9e,EAAKt7B,IAAI,UAAU+E,KAAKwW,MAI7C,IAAK,MAAM+f,KAAQhd,EAAM,CACvB,IAAKgd,EAAKjrB,gBAAiB,SAC3B,MAAMy1M,EAAuB7iD,EAAYrhI,EAAOq2D,GAChDA,EAAa79C,IAAI0rK,GACjB,MAAMC,EAAiB3tM,EAAEwW,YAAYxW,EAAEyC,WAAWirM,IAClDxqL,EAAKyS,YAAY31B,EAAEkW,qBAAqBy3L,EAAgBtkK,EAASliC,WAAWmyB,GAAI,YAAWpW,EAAKv2B,KAAKuZ,YAAa,IAAI,WAQhIziB,EAAQqE,QAAUkqB,G,uBCjElBluB,OAAOC,eAAeN,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQqE,QAUR,SAAwB8lN,GACtB,MAAMjhN,EAAOihN,EAAU,MAAYA,EALb,GACtBnnK,uBACMA,GAAmBA,EAAgB3Y,MAAK8L,GAAW,eAAep4B,KAAKo4B,EAAQ51C,SAKjF6pN,CAAgBlhN,IAIpBqT,EAAEnb,WAAW8H,EAAM,UAbG,cAFxB,IAAIqT,EAAI1U,EAAQ,I,uBCLhBxH,OAAOC,eAAeN,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQqE,aAAU,EAElB,IAAIslN,EAAqB9hN,EAAQ,GAE7BwiN,EAAuCxiN,EAAQ,KAE/CgiN,EAAmChiN,EAAQ,IAE3CyiN,EAAwBziN,EAAQ,KAEhC0mB,GAAW,EAAIo7L,EAAmBvqM,UAAS,EAC7CU,gBACAyM,MAAOhQ,EACPqpC,aAEA9oC,YAEAgD,EAAc,GACd,MAAMyqM,EAAgB,IAAIvuG,QAU1B,SAASwuG,EAAkBC,EAAWtpI,EAAMxvC,GAAS,GAC/C84K,EAAUvhN,KAAK3I,MACboxC,EACF84K,EAAUtmN,IAAI,SAASiuC,aAAa+uC,GAEpCspI,EAAUtmN,IAAI,SAAS4xC,YAAYorC,GAGrCspI,EAAUtiL,IAAI,QAAS5rB,EAAE0K,gBAAgB,OAAQk6D,IAIrD,SAAS0zD,EAAqB61E,EAAWzmM,GACvC,IAAI0mM,EACAC,EAEJ,IAAK,MAAMx6D,KAAMs6D,EAAUvmN,IAAI,aAAc,CAC3C,IAAKisJ,EAAG18I,mBAAqB08I,EAAGt8I,4BAA8Bs8I,EAAGlnJ,KAAKq1E,OAAQ,CAC5EosI,EAAiBv6D,EACjB,OAGGw6D,GAAmBx6D,EAAG7iJ,cAAc,CACvCsY,KAAM,kBAEN+kM,EAAkBx6D,GAIlBu6D,EACFH,EAAkBG,EAAgB1mM,GAAM,IAExC,EAAI4lM,EAAiCh1E,sBAAsB61E,EAAWE,EAAiB,CAACruM,EAAEkH,oBAAoBQ,KAIlH,SAAS4mM,EAAaC,EAAUC,EAAYnkD,EAAWlnJ,EAAO,GAAIsrM,GAChE,IAAIltM,EAAKysM,EAAcpmN,IAAIyiK,EAAU19J,MAErC,IAAK4U,EAAI,CACPA,EAAKitM,EAAWhlL,MAAM6P,sBAAuB,GAAEl2B,GAAQ,iBACvD6qM,EAAcpiL,IAAIy+H,EAAU19J,KAAM4U,GAClCktM,EAAOpkD,EAAWhhH,EAASliC,WAAWmyB,GAAI,GAAEt5B,EAAExb,UAAU+c,gBACxD,MAAMmtM,EAAU1uM,EAAEgJ,cAAchJ,EAAEyC,WAAW,WAAY,KACzD,EAAIsrM,EAAsBjmN,SAAS4mN,GACnCF,EAAW34K,aAAawT,EAAS/P,GAAI,OAAM/3B,OAAQmtM,KAGrD,OAAO1uM,EAAExb,UAAU+c,GAGrB,OA5DuB,IAAIk+F,QA4DpB,CACLt8F,KAAM,sCACNpd,SAAU+nN,EAAqChmN,QAE/CuhI,OACE,EAAIikF,EAAiC72E,eAAe/2H,KAAK0H,KAAMkmM,EAAiC10E,SAAS+1E,UAAWpuM,IAGtH+3B,QAAS,CACPs2K,iBAAiB1rL,GACf,MAAM,KACJv2B,GACEu2B,EACJ,GAAsB,OAAlBv2B,EAAK+Y,SAAmB,OAC5B,IAAK1F,EAAEnI,cAAclL,EAAKgZ,MAAO,OACjC,MAAM,KACJxC,GACExW,EAAKgZ,KAAKpE,GACd,IAAIstM,EACJ,MAAML,EAAatrL,EAAK4rL,YAAW5rL,KAC5BA,EAAKllB,YACV6wM,EAAiB3rL,EAAKt7B,IAAI,aAAakuE,MAAK,EAC1CnpE,UACIqT,EAAEpB,UAAUjS,IAASA,EAAKf,IAAI2V,GAAG4B,OAASA,MACvC0rM,KAGX,GAAIL,EAAW9kL,WAAWF,MAAMtG,KAAKnlB,YACnCywM,EAAW74K,YAAY0T,EAAS/P,GAAI,UAASk1K,EAAW7hN,gBAI1D,GAAIkiN,EAAelxM,WACjB,GAAIkxM,EAAeliN,KAAKq1E,OAClBwsI,EAAW7hN,KAAK4U,GA5F9B,SAAkB4B,EAAM4rM,EAAavlL,GACnC,KAAOA,IAAUulL,GACXvlL,EAAM+jI,cAAcpqJ,IAAOqmB,EAAM47F,OAAOjiH,GAC5CqmB,EAAQA,EAAMD,OA0FNylL,CAASR,EAAW7hN,KAAK4U,GAAG4B,KAAMqrM,EAAWhlL,MAAOtG,EAAKsG,OAEzDglL,EAAW5iL,IAAI,KAAM1I,EAAKsG,MAAM6P,sBAAsB,UAGxDnW,EAAKyS,YAAY0T,EAASliC,WAAWmyB,GAAI;kBACnCt5B,EAAExb,UAAUgqN,EAAW7hN,KAAK4U,WAAW2hB,EAAKv2B,KAAKiZ;qBAElD,CACL,IAAIqpM,EAEJ,MAAM1tM,EAAK+sM,EAAaN,EAAeQ,EAAYA,EAA0D,OAA7CS,EAAsBT,EAAW7hN,KAAK4U,SAAc,EAAS0tM,EAAoB9rM,KAAMm1H,GACvJp1G,EAAKyS,YAAY0T,EAASliC,WAAWmyB,GAAI,GAAE/3B,SAAU2hB,EAAKv2B,KAAKiZ,cAE5D,CACL,MAAMrE,EAAK+sM,EAAaY,EAAgBV,EAAYK,EAAgBA,EAAeliN,KAAKf,IAAI2V,GAAG4B,KAAM8qM,GACrG/qL,EAAKyS,YAAY0T,EAASliC,WAAWmyB,GAAI,GAAE/3B,SAAU2hB,EAAKv2B,KAAKiZ,iBAQzEniB,EAAQqE,QAAUkqB,G,uBC7IlBluB,OAAOC,eAAeN,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQqE,aAAU,EAElB,IAAIslN,EAAqB9hN,EAAQ,GAE7BgiN,EAAmChiN,EAAQ,IAE3C0mB,GAAW,EAAIo7L,EAAmBvqM,UAAS,CAACE,EAAKzC,KACnDyC,EAAIQ,cAAc,IACX,EAAI+pM,EAAiCp3E,0BAA0B,CACpE/yH,KAAM,4BACNJ,MACAozH,QAASm3E,EAAiC10E,SAASh6F,OACnDr+B,MAAOD,EAAQC,MAEf4oH,kBAAkBv8H,EAAM+jI,GACtBA,EAAWj7D,QAAQhzD,KAAK,kBAAmB,gCAMjDjf,EAAQqE,QAAUkqB,G,uBCxBlBluB,OAAOC,eAAeN,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQqE,aAAU,EAElB,IAAIslN,EAAqB9hN,EAAQ,GAE7BgiN,EAAmChiN,EAAQ,IAE3C0mB,GAAW,EAAIo7L,EAAmBvqM,UAAS,CAACE,EAAKzC,KACnDyC,EAAIQ,cAAc,IACX,EAAI+pM,EAAiCp3E,0BAA0B,CACpE/yH,KAAM,2BACNJ,MACAozH,QAASm3E,EAAiC10E,SAASu2E,eACnD5uM,MAAOD,EAAQC,MAEf4oH,kBAAkBv8H,EAAM+jI,GACtBA,EAAWj7D,QAAQhzD,KAAK,6BAM9Bjf,EAAQqE,QAAUkqB,G,uBCxBlBluB,OAAOC,eAAeN,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQqE,aAAU,EAElB,IAAIslN,EAAqB9hN,EAAQ,GAE7B8jN,EAA0C9jN,EAAQ,KAElDgsI,EAAQhsI,EAAQ,GAEhB0mB,GAAW,EAAIo7L,EAAmBvqM,UAASE,IAC7CA,EAAIQ,cAAc,GACX,CACLJ,KAAM,wCACNpd,SAAUqpN,EAAwCtnN,QAClDwwC,QAAS,CACPumF,qBAAqB37F,GACnB,MAAM,KACJv2B,EADI,MAEJ68B,GACEtG,GACE,SACJxd,EADI,KAEJC,EAFI,MAGJC,GACEjZ,EACE86K,EAAgB/hK,EAAS5B,MAAM,GAAI,GAEzC,IAAKwzH,EAAMtnH,MAAM41B,kBAAkBjb,SAAS88I,GAC1C,OAGF,MAAMr2F,EAAMkmD,EAAMtnH,MAAMxrB,UAAUmhB,GAElC,GAAI2xH,EAAMtnH,MAAMrhB,mBAAmBgX,GAAO,CACxC,MAAM,OACJiD,EADI,SAEJC,EAFI,SAGJC,GACEnD,EACEw2G,EAAO3yF,EAAMg8F,sBAAsB58G,GAOzC,GALIuzG,IACFx2G,EAAKiD,OAASuzG,EACd/qC,EAAIxoE,OAAS0uH,EAAMtnH,MAAMvK,qBAAqB,IAAK6xH,EAAMtnH,MAAMxrB,UAAU23H,GAAOvzG,IAG9EE,EAAU,CACZ,MAAMqzG,EAAO3yF,EAAMg8F,sBAAsB38G,GAErCszG,IACFx2G,EAAKkD,SAAWszG,EAChB/qC,EAAIvoE,SAAWyuH,EAAMtnH,MAAMvK,qBAAqB,IAAK6xH,EAAMtnH,MAAMxrB,UAAU23H,GAAOtzG,KAKxFqa,EAAKyS,YAAY2hG,EAAMtnH,MAAMtH,kBAAkB++J,EAAer2F,EAAKkmD,EAAMtnH,MAAMvK,qBAAqB,IAAKE,EAAMC,WAOvHniB,EAAQqE,QAAUkqB,G,uBCjElBluB,OAAOC,eAAeN,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQqE,aAAU,EAElB,IAAIslN,EAAqB9hN,EAAQ,GAE7B+jN,EAAyC/jN,EAAQ,KAEjDgsI,EAAQhsI,EAAQ,GAEhB0mB,GAAW,EAAIo7L,EAAmBvqM,UAAS,CAACE,GAC9CxC,SAAQ,MAER,IAAI+uM,EAEJvsM,EAAIQ,cAAc,GAClB,MAAM+yH,EAAuE,OAAtDg5E,EAAkBvsM,EAAIoB,WAAW,kBAA4BmrM,EAAkB/uM,EACtG,MAAO,CACL4C,KAAM,uCACNpd,SAAUspN,EAAuCvnN,QACjDwwC,QAAS,CACPi3K,kBAAkBrsL,GAChB,MAAM,KACJv2B,EADI,MAEJ68B,GACEtG,EAEJ,GAAsB,OAAlBv2B,EAAK+Y,SACP,OAGF,IAAI0xH,EACAua,EAEJ,GAAInoH,EAAMu4C,SAASp1E,EAAKgZ,MACtByxH,EAAMzqI,EAAKgZ,KACXgsI,EAAara,EAAMtnH,MAAMxrB,UAAUmI,EAAKgZ,UACnC,IAAI6jB,EAAMtG,KAAKnlB,YAEpB,YADAmlB,EAAKyS,YAAY2hG,EAAMjuF,SAAS/P,GAAI,UAASpW,EAAKv2B,WAGlDyqI,EAAM5tG,EAAM2hI,iCAAiCx+J,EAAKgZ,MAClD6jB,EAAM9mB,KAAK,CACTnB,GAAI+1H,EAAMtnH,MAAMxrB,UAAU4yI,KAE5Bua,EAAara,EAAMtnH,MAAMvK,qBAAqB,IAAK2xH,EAAKzqI,EAAKgZ,MAG/Dud,EAAKyS,YAAY2hG,EAAMtnH,MAAMrJ,sBAAsB2vH,EAAgBgB,EAAMtnH,MAAMnK,iBAAiB,KAAM8rI,EAAYra,EAAMtnH,MAAM3H,eAAiBivH,EAAMtnH,MAAMtH,kBAAkB,KAAM4uH,EAAMtnH,MAAMnK,iBAAiB,MAAO8rI,EAAYra,EAAMtnH,MAAM3H,eAAgBivH,EAAMtnH,MAAMnK,iBAAiB,MAAOyxH,EAAMtnH,MAAMxrB,UAAU4yI,GAAM5tG,EAAMqiI,uBAAwBv0B,EAAMtnH,MAAMxrB,UAAU4yI,GAAMzqI,EAAKiZ,cAOtYniB,EAAQqE,QAAUkqB,G,+LC1CX,SAAS8zJ,EAAsB5iJ,GACpC,MAAM6iJ,EAAeypC,EAArB,IACM,KAAC,EAAD,WAAQ9lL,GAAd,EACA,GAAIA,EAAJ,sBAAsC,CACpC,MAAM,SAAC,EAAD,MAAY9jB,GAAU8jB,EAA5B,KACA,GACEhkB,iBACAA,GACCA,UAAqB/Y,IAHxB,EAKE,OAAOm5K,EAAP,GAGJ,GAAIp8I,EAAJ,uBAAuC,CACrC,MAAM,YAAE5f,GAAgB4f,EAAxB,KACA,OAAI5f,EAAYA,SAAZA,KAAJ,GACSg8J,EAAP,GAQJ,OACEp8I,EAAA,cAAyB,CAAEloB,KAAM7U,KACjC+8B,EAAA,kBAA6B,CAAEhkB,SAAU,OACzCgkB,EAAA,OAAkB,CAAEloB,KAAM7U,IAcvB,SAAS6iN,EAA+BtsL,GAC7C,IAAI6iJ,EAAJ,EAKA,OAJA7iJ,cAAgBuM,IACd,IAAKggL,2BAAL,GAAkC,OAAO,EACzC1pC,OAEKA,ECxDT,MAAM,IAAEzsI,GAAQ+P,WAAhB,WAEA,SAASqmK,EAAyBvoM,GAEhC,OADAA,EAAawoM,8BAAbxoM,GAEEnH,yBACAA,gBADAA,IAECA,gCACEmH,EADFnH,UAEC0vM,EAAyBvoM,EAL7B,QAkCK,SAAS2gB,EAAU,GAExB,YAAC,EAAD,cAEEwuG,IAGF,MAAM,MAAE9sG,GAAR,EAGMu8I,EAAeypC,EAArB,IACM,WAAE9lL,GAAR,EACMkmL,EAA+B9pC,EAArC,GACA,IAAIU,GAAJ,EACA,MAAMO,EACJr9I,EAAA,iBAA4B,CAAEnjB,OAAQw/J,EAAap5K,QAGnDu2B,EAJF,6BAMM2sL,EAAN,GAEA,IAAIC,EAAJ,EAGA,GAAItmL,oBA7CN,SAAsBtG,GACpB,IAAI4sL,EAAJ,EACA,MAAM,MAAEtmL,GAAR,EACA,KACEsmL,gCACAA,EAFF,4BAGE,CACA,MAAM,KAAEnjN,GAAR,EACMojN,EAAWD,wCAAjB,SAGME,EAAYL,8BAA4BG,MAA9C,IACA,GAAInjN,EAAJ,SACE,OAAQ68B,WAAewmL,EAAvB,MAGFF,KA6B4BG,CAA9B,GAGE,YAFA/sL,cAAiBmmB,WAAS/P,GAAI,UAASpW,EAAKv2B,WAI9C,KACEmjN,gCACAA,EAFF,4BAGE,CACA,MAAM,KAAEnjN,GAAR,EACIA,EAAJ,UACEkjN,UAGEC,EAAJ,8BACEA,+BACAA,EAAeH,8BAA4BG,MAA3CA,YACSA,EAAJ,6BACLA,6BACAA,EAAeH,8BAA4BG,MAA3CA,YAIJ,IAAI3oC,EAAJ,EACIz9I,EAAA,kBAA6B,CAAEhkB,SAAU,aAC3CyhK,IACAX,MAEF,IAAK,IAAItkK,EAAI2tM,SAAb,EAAmC3tM,GAAnC,EAA2CA,IAAK,CAC9C,MAAMvV,EAAOkjN,EAAb,GAEMK,EAASlwM,yBAAf,GACMmwM,EAAaD,EAAM,SAAzB,SAEME,EAAiBzjN,EAAvB,GACA,IAMIyqI,EACAh4H,EAPAs/B,EAAJ,EAEA,KAAO+wK,2BAAP,IACE/wK,EAAQA,EAARA,WAkCF,GA7BIwxK,GAAU,uBAAsB,CAAE/sM,KAAM,UAC1C/D,EAAQg4H,EAARh4H,EAEAzS,KAAmBqT,2BAAqB,CAACA,uBAAD,GAAxCrT,KACS0jN,MAAyBX,EAA7B,GAILtwM,EAAQg4H,EAARh4H,GAEAg4H,EAAM5tG,wBAAN4tG,GACA,GACEh4H,EAAQY,iCAENA,kBAFMA,GAARZ,GASAzS,QAEAyS,EAAQg4H,EAARh4H,GAMA8wM,GAAUlwM,2BAAd,GACE,GAAIqwM,GAAeX,EAAnB,GAGE/iN,eACK,CAGL,MAAM,OAAEic,GAAR,EACA,IAAIwhB,EAAUZ,wBAAd,GACA,EACEkV,SAAe1+B,mCAAf0+B,GAEAtU,EADSpqB,gBAAJ,GACKA,QAAVoqB,iBAEAA,EAGFz9B,oBAAuBqT,kBAAvBrT,IACAA,SAAcqT,yBAAmBrT,EAAnBqT,OAAgCA,mBAA9CrT,SAGJ,IAAIwsI,EAAcguC,EAAlB,KAKA,GAAIjlK,OAAJ,EAA6B,CAAC,IAAD,EAE3B,MAAM0G,EAAS+mM,8BACbxoC,MADawoC,WAAf,KAGA,IAAI9oC,EACCwpC,GAAgBX,EAArB,KAIE7oC,EAAUr9I,wBAAVq9I,GACA,IACE1tC,SAAqBn5H,mCAArBm5H,KAGJA,EAAcn5H,uBACZA,2BAAgCA,mBADpBA,SAEZ,CAACA,gCAFHm5H,KAMF,KAAkC,CAIhC,MAAMkuC,EAAkB/wC,EACpBh9F,CAAI,GAAEt5B,+BACNs5B,CAAI;cACAt5B,oCAAkCA,kCAC1CmnK,cACEnnK,iCADFmnK,IAGAA,EAAkBwoC,8BAChBxoC,MADFA,cAGK,CACL,MAAMG,EAAehxC,EACjBh9F,CAAI,GAAEt5B,+BACNs5B,CAAI;cACAt5B,oCAAkCA,kCAEpCswM,EAAc9pC,EAAoBltI,CAAH,OAAeA,CAApD,SACA6tI,cACEnnK,kCADFmnK,IAGAA,EAAkBwoC,8BAChBxoC,MADFA,gBClNN,MAAetkK,WAAQ,CAACE,EAAI,KAAc,IAAD,IACvCA,mBAEA,MAAM,MAAExC,GAAQ,GAAhB,EACM+1H,EAAa,SAAGvzH,aAAH,oBAAnB,EACMstM,EAAW,SAAGttM,aAAH,kBAAjB,EAEA,MAAO,CACLI,KADK,6BAELpd,SAAUwqN,UAFL,QAILj4K,QAAS,CACP,kDAAkDpV,GAChD4E,EAAU5E,EAAM,CAAC,gBAAgBmtL,sB,kDCfzCvsN,OAAOC,eAAeN,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQqE,aAAU,EAElB,IAAIslN,EAAqB9hN,EAAQ,GAE7BklN,EAAmCllN,EAAQ,KAE3CgsI,EAAQhsI,EAAQ,GAEhB0mB,GAAW,EAAIo7L,EAAmBvqM,UAASE,IAC7CA,EAAIQ,cAAc,GACX,CACLJ,KAAM,iCACNpd,SAAUyqN,EAAiC1oN,QAC3CwwC,QAAS,CACPkuH,uBAAuBtjI,GACrB,IAAIutL,EAEJ,MAAM,KACJ9jN,EADI,MAEJ68B,GACEtG,GACE,WACJpX,GACEnf,EACEipC,EAAQ0hG,EAAMtnH,MAAMpY,yBAAyBkU,EAAW,IAAM,EAAI,EACxE,IAAKwrH,EAAMtnH,MAAMre,2BAA2Bma,EAAW8pB,IAAS,OAChE,MAAM2K,EAAQ,GAEA,IAAV3K,GACF2K,EAAM79B,KAAK40H,EAAMtnH,MAAMnE,uBAAuB,KAAM,CAACC,EAAWkzF,SAAUryG,EAAK+e,SAGjF,MAAMwuB,EAAYpuB,EAAWkzF,SACvB,SACJ/yF,GACEiuB,EACE0iF,EAAMpzF,EAAM6P,sBAA0D,OAAnCo3K,EAAiBxkM,EAAS9I,MAAgBstM,EAAiBxkM,EAASjoB,OAC7Gu8C,EAAM79B,KAAK40H,EAAMtnH,MAAM5D,kBAAkB,CAACkrH,EAAMtnH,MAAM1D,yBAAyBswG,IAAO0a,EAAMtnH,MAAMxrB,UAAUmI,EAAK+e,SAAU4rH,EAAMtnH,MAAMnE,uBAAuB,KAAM,CAACyrH,EAAMtnH,MAAMjE,gBAAgBurH,EAAMtnH,MAAMxrB,UAAUo4H,GAAM3wG,MAEzNtf,EAAKmf,WAAWpL,QAAU,GAC5B6/B,EAAM79B,KAAK/V,GAGb,MAAOyf,GAAqB8W,EAAKwtL,oBAAoBnwK,GACrDrd,EAAKsG,MAAM40G,oBAAoBhyH,SAOvC3oB,EAAQqE,QAAUkqB,G,uBC/ClB,G,gBAAO,WAAY8lE,IAAO32C,OAAOt1C,WAAa,CAE5C,MAAM8kN,EAAiB74H,IAAO32C,OAExByvK,EAAeD,EAAe9kN,UAAUqrC,KAoB9C,SAAS25K,EAAiBroM,EAASC,GAEjC,MAAMvG,EAAaG,MAAToG,EAAqBA,EAAMs0B,QAAQ,MAAQ,EAC/Co1B,EAAI,IAAIw+I,EAAenoM,GAAgB,IAAPtG,EAAWuG,EAAQA,EAAM3E,MAAM,EAAG5B,GAAKuG,EAAM3E,MAAM5B,EAAI,KAA8B,IAAxBuG,EAAMs0B,QAAQ,KAAc,IAAM,KAGrI,OAFAo1B,EAAE2+I,SAAiB,IAAP5uM,EAELiwD,EAzBTw+I,EAAe9kN,UAAUqrC,KAAO,SAAU6Q,GAExC,MAAMi7C,EAAYtjF,KAAKsjF,UACjBr1D,EAASijL,EAAa7kN,KAAK2T,KAAMqoC,GAEvC,OAAKroC,KAAKoxM,SAAqB,MAAVnjL,GAAkBjuB,KAAKsjF,UAAYr1D,EAAO,GAAGjtB,SAAWsiF,GAE3EtjF,KAAKsjF,UAAY,EACV,MAGFr1D,GAGTgjL,EAAe9kN,UAAU2V,KAAO,SAASumC,GAEvC,QAASroC,KAAKw3B,KAAK6Q,IAYrB8oK,EAAiBhlN,UAAY8kN,EAAe9kN,UAE5CisF,IAAO32C,OAAS0vK,EAgBlB,IAAM,IAAI1tM,IAAQ,CACjB,YACA,aACA,oBACA,aACA,cACA,aACA,cACA,eACA,eACA,gBACA,kBAGM20E,IAAO30E,MAAWuuB,OAAOgxG,eAAe5qD,IAAO30E,GAAMtX,YACxD/H,OAAOC,eAAe+zF,IAAO30E,GAAMtX,UAAW6lC,OAAOgxG,YAAa,CAAE1+I,MAAOmf,K,uBC1E/E,IAAI4tM,EAAsB,EAAQ,KAC9Bj5H,EAAS,EAAQ,GACjBonB,EAAQ,EAAQ,IAChBoe,EAAY,EAAQ,KACpBomC,EAAW,EAAQ,KACnBstD,EAAe,EAAQ,KACvBC,EAAK,EAAQ,KACbC,EAAa,EAAQ,KACrBC,EAAK,EAAQ,KACbC,EAAS,EAAQ,KAEjBlxD,EAAc6wD,EAAoB7wD,YAClCK,EAAyBwwD,EAAoBxwD,uBAC7C79B,EAAc5qC,EAAO4qC,YACrB2uF,EAAa3uF,GAAeA,EAAY72H,UAAUktG,KAGlDu4G,IAA+BD,IAAenyG,GAAM,WACtD,IAAIz9E,EAAQ,IAAIihG,EAAY,GAC5BjhG,EAAMs3E,KAAK,MACXt3E,EAAMs3E,KAAK,OAGTw4G,IAAgBF,IAAenyG,GAAM,WAEvC,GAAIiyG,EAAI,OAAOA,EAAK,GACpB,GAAIF,EAAI,OAAOA,EAAK,GACpB,GAAIC,EAAY,OAAO,EACvB,GAAIE,EAAQ,OAAOA,EAAS,IAE5B,IAEIx7K,EAAOkC,EAFPrW,EAAQ,IAAIihG,EAAY,KACxB/mB,EAAWh6E,MAAM,KAGrB,IAAKiU,EAAQ,EAAGA,EAAQ,IAAKA,IAC3BkC,EAAMlC,EAAQ,EACdnU,EAAMmU,GAAS,IAAMA,EACrB+lE,EAAS/lE,GAASA,EAAQ,EAAIkC,EAAM,EAOtC,IAJArW,EAAMs3E,MAAK,SAAU52F,EAAGC,GACtB,OAAQD,EAAI,EAAI,IAAMC,EAAI,EAAI,MAG3BwzB,EAAQ,EAAGA,EAAQ,IAAKA,IAC3B,GAAInU,EAAMmU,KAAW+lE,EAAS/lE,GAAQ,OAAO,KAkBjD2qH,EAAuB,QAAQ,SAAc0B,GAC3C,IAAIxgI,EAAQ/hB,KAEZ,QADkB2C,IAAd4/I,GAAyB3kC,EAAU2kC,GACnCsvD,EAAa,OAAOF,EAAWtlN,KAAK01B,EAAOwgI,GAE/C/B,EAAYz+H,GACZ,IAEImU,EAFA47K,EAAc9tD,EAASjiI,EAAM/gB,QAC7B4zB,EAAQ3S,MAAM6vL,GAGlB,IAAK57K,EAAQ,EAAGA,EAAQ47K,EAAa57K,IACnCtB,EAAMsB,GAASnU,EAAMmU,GAKvB,IAFAtB,EAAQ08K,EAAavvL,EA5BF,SAAUwgI,GAC7B,OAAO,SAAU9vF,EAAGo4C,GAClB,YAAkBloG,IAAd4/I,GAAiCA,EAAU9vF,EAAGo4C,IAAM,EAEpDA,GAAMA,GAAW,EAEjBp4C,GAAMA,EAAU,EACV,IAANA,GAAiB,IAANo4C,EAAgB,EAAIp4C,EAAI,GAAK,EAAIo4C,EAAI,EAAI,GAAK,EACtDp4C,EAAIo4C,GAoBeknG,CAAexvD,IAEtCrsH,EAAQ,EAAGA,EAAQ47K,EAAa57K,IACnCnU,EAAMmU,GAAStB,EAAMsB,GAGvB,OAAOnU,KACL8vL,GAAeD,I,UCrFnB,IAAII,EAAI,EAAQ,KACZ55H,EAAS,EAAQ,GACjB65H,EAAO,EAAQ,KAKnBD,EAAE,CAAE55H,QAAQ,EAAM/3C,MAAM,EAAMp4C,YAAY,EAAM84J,QAHlC3oE,EAAO4sE,eAAiB5sE,EAAO6sE,gBAGqB,CAGhED,aAAcitD,EAAK/lL,IAGnB+4H,eAAgBgtD,EAAK5tH,S,qBCZvB,IAAI6tH,EAAwB,GAAGvuD,qBAE3B/vH,EAA2BxvC,OAAOwvC,yBAGlCu+K,EAAcv+K,IAA6Bs+K,EAAsB7lN,KAAK,CAAE,EAAG,GAAK,GAIpFtI,EAAQ20F,EAAIy5H,EAAc,SAA8B36B,GACtD,IAAIpiJ,EAAaxB,EAAyB5zB,KAAMw3K,GAChD,QAASpiJ,GAAcA,EAAWntC,YAChCiqN,G,UCbJ,IAAIE,EAAqB,EAAQ,KAG7B5wD,EAFc,EAAQ,KAEGjgI,OAAO,SAAU,aAK9Cx9B,EAAQ20F,EAAIt0F,OAAO+6C,qBAAuB,SAA6By8F,GACrE,OAAOw2E,EAAmBx2E,EAAG4lB,K,QCR/Bz9J,EAAQ20F,EAAIt0F,OAAO2wH,uB,wQCoDbs9F,EAAyCtoK,KAAQ3lD,OAAO4H,KAAK,CAAM,mUAOnEsmN,GAAmB,ECPlB,SAAS1vG,EAAY1lE,EAAkB1Z,EAAexX,GAC5D,OAAOwX,EAAO,KAAO0Z,EAOf,SAASq1K,EAAsBr1K,EAAkB1Z,EAAexX,EAAiB+qB,EAAgBC,GACvG,IAAKD,EACJ,OAAO6rE,EAAY1lE,EAAS1Z,GAG5B,MAAMuhI,EAAW,CACfj/H,MAAO,CAAEiR,OAAMC,WAGjB,OAAO4rE,GAAY,IAAAmP,kBAAiB/lG,EAAQ+4I,EAAU,CAAE7nH,YAAY1Z,GAyB9D,SAASumB,KAAQyoK,GAExB,OAAOA,EAAUpvG,QAAO,CAACqvG,EAAcj+K,IAAQi+K,EAAa3wK,OAAO3K,OAAO3C,KAAO,IAAI,GAAY9O,MAAMthB,MAAM,EAAG,GAU1GiE,eAAeqqM,EAAWC,EAAuBzmN,EAAa0mN,GAEpE,IAAIC,GAAiB,EAErB,MAAMxvM,EAAM,CACXyvM,aAAc,IAAMD,GAAiB,GAGtC,IAAMF,EACL,aAAaC,EAAavvM,GAE3B,MAAM0vM,EAAYhpK,KAAQ79C,GACpB8mN,QAAiBL,EAAczqN,IAAI6qN,GACzC,GAAKC,EACJ,OAAOvvL,KAAKgD,MAAMusL,GAEnB,MAAM1uN,QAAcsuN,EAAavvM,GAKjC,OAHMwvM,SACCF,EAAczmL,IAAI6mL,EAAWtvL,KAAKC,UAAUp/B,IAE5CA,EAMD,MAAM2uN,EAIZvyM,YAAYgkG,G,eAA+B,G,EAAA,kB,sBAAA,K,uDAAA,K,KAE1C1kG,KAAK0kG,QAAUA,GAgEjB,MAAMwuG,EAA4B,CAAM,iUAMjC7qM,eAAe8qM,EAAgBnnM,EAAiBonM,EAA4BvlK,EAAyBwlK,EAAwEC,EAA4DtvG,GAE/O,IAAIpqE,EACJ,IAECA,GAAM,WAAY5tB,EAAQ,CAEzBzC,WAAY6pM,EAAmB,SAAW,SAC1Cr0H,eAAgBlxC,EAAS1rC,WACzB6zD,QAAU,SAG2BrzD,IAAjC0wM,EAA6CA,EAA+B,MAGhF,MAAME,GAGP,MADAvvG,WAAM,QAAS,eAAgBuuG,EAAsBgB,EAAGr2K,QAAS2Q,EAAS1rC,WAAY6J,EAAQunM,EAAG94K,IAAI1D,KAAMw8K,EAAG94K,IAAIzD,OAAS,IACrHu8K,EAnED,IAA6BC,EAwFnC,OAxFmCA,EAsEf55K,GApEpB,IAAAhzC,UAAS4sN,EAAS,CACjBC,eAAejwL,GAET,iBAAWA,EAAKv2B,KAAK4Z,SACzB2c,EAAKyS,YAAY,uBAAiB,mBAAa,YAAazS,EAAKv2B,KAAK6Y,eAkFlE,CAzED,SAAmB0tM,GAEzB,MAAME,EAAyB,GAqB/B,OAnBA,IAAA9sN,UAAS4sN,EAAS,CACjBj0F,kBAAkB/7F,GAEjBkwL,EAAY1wM,KAAKwgB,EAAKv2B,KAAK+e,OAAO1nB,QAEnCmvN,eAAejwL,GAIgB,YAA1BA,EAAKv2B,KAAK4Z,OAAOpD,MACc,IAA/B+f,EAAKv2B,KAAK6Y,UAAU9E,QACpB,wBAAkBwiB,EAAKv2B,KAAK6Y,UAAU,KAGzC4tM,EAAY1wM,KAAKwgB,EAAKv2B,KAAK6Y,UAAU,GAAGxhB,UAKpCovN,EAiCUC,CAAU/5K,UAEK,2BAA4BA,EAAK5tB,EAAQ,CACxE4kH,YA/L6B,EAgM7B56D,QAAS,IACLo9I,EAAmB,CAAE,KAAwC,MAE7DhvN,OAAO8pC,OAAOglL,WACavwM,IAA3B2wM,EAAuClvN,OAAO8pC,OAAOolL,GAA0B,IAEnF7kF,SAAS,EACTP,YAAY,EACZ3b,eAAe,EACf8d,SAAS,EACTzoH,UAAU,KAG0BtD,MAQ/B+D,eAAeurM,EAAmBC,EAAsBjzM,GAE9D,MAAM,YAAEkzM,EAAF,WAAeC,EAAf,aAA2BC,GAAiBpzM,GAE5C,GAAEiB,EAAF,KAAM2hB,EAAN,WAAYywL,GAAerzM,EAAQszM,YAAYL,EAAQjzM,GAE7D,OAAKiB,KAAMiyM,EAELA,EAAYjyM,aAAeoxM,QACjBa,EAAYjyM,GAAgB6iG,QAEnCovG,EAAYjyM,IAIrBiyM,EAAYjyM,GAAM,IAAIoxM,EAAQ,WAE7B,GAAKc,EAAa,CAEjB,MAAM/vN,QAAe+vN,EAAWlyM,EAAIjB,GACpC,QAAgB+B,IAAX3e,EACJ,OAAO8vN,EAAYjyM,GAAM7d,EAG3B,MAAM,eAAEmwN,EAAF,KAAkBhnN,SAAe8mN,IAGvC,IAAIjwN,EAQJ,QANsB2e,IAAjBqxM,IACJhwN,QAAegwN,EAAa7mN,EAAMgnN,EAAgB3wL,EAAM5iB,SAEzC+B,IAAX3e,IACJA,QA+EFqkB,eAAmClb,EAAegnN,EAAyC3wL,EAAqB5iB,GAEhH,OAAQzT,GACP,IAAK,OAAQ,ODhTRkb,eAA+B2D,EAAiB6hC,EAAyBjtC,GAE/E,MAAMwzM,EAAcvmK,EAAS1rC,WAEvBkyM,EAAqC,IAErC,WAAEC,EAAF,YAAcR,EAAd,cAA2BS,EAA3B,YAA0CL,EAA1C,SAAuDM,EAAvD,IAAiExwG,EAAjE,6BAAsEqvG,EAA+B,GAArG,uBAAyGC,EAAyB,GAAlI,mBAAsImB,GAAuB7zM,GAG7J,WAAEw0B,EAAF,OAAcsJ,IAAW,OAAU1yB,EAAQ,CAChD6hC,SAAUumK,EACVtjF,WAxB6B,IA4BxB4jF,OAAsE/xM,IAAvB8xM,QAAyCngL,QAAQI,IAAKU,EAAWu/K,aAAa/yM,KAAKiJ,GAAU4pM,EAAmB5pM,EAAOgjC,EAAUjtC,MAAc,GAE9Lg0M,EAAgB7qK,EAAKqqK,EAnCH,QAmCyB/B,GAC3CxiB,EAAU,UAAU+kB,IAEpBC,EAAYz/K,EAAWgtE,OAAOh0E,MAAKpN,GAAKA,EAAE8zL,SAE3CD,IAIJR,EAAUU,UAAYllB,GAIlBz6J,EAAWuU,UAAYvU,EAAWuU,SAASkkB,YACzC+lJ,EAAmB,CAAEoB,QAASnnK,EAAUonK,QAAS7/K,EAAWuU,SAASkkB,MAAQjtD,GAGpF,MAAMs0M,EAAqD9/K,EAAWuU,SAAW,CAEhFwrK,SAAU,IAAK,EAAiBzjB,QAAS,CAAC/nJ,EAAU/oC,IAAY,UAAwB+oC,EAAU,IAAK/oC,EAASkwH,WAjDnF,KAkD7B9kH,OAAQopB,EAAWuU,SAASjG,gBAAoBwwK,EAAY,CAAEc,QAASnnK,EAAUonK,QAAS7/K,EAAWuU,SAASjG,KAAO9iC,GAASqzM,cAAcE,gBAAe,GAAoB/+K,EAAWuU,SAASm8C,QACnMj4C,SAAUzY,EAAWyY,SACrBykK,SACAwC,OAAQD,EACRhzM,GAAIguL,EACJulB,QAAShgL,EAAWggL,QACpBC,gBAAiB,CAChBf,aACAzkB,QAASglB,EAAYhlB,OAAUltL,EAC/B0pH,KAAM,UAGPipF,eAAgBlgL,EAAWuU,SAASkkB,KACpC0nJ,wBAAyB1zM,GAAMiyM,EAAYjyM,IACxC,KAEJ,GAAKuzB,EAAWogL,QAAUpgL,EAAWqgL,YAAc,CAAC,IAAD,MAMlD,UAAKrgL,EAAWogL,cAAhB,OAAK,EAAmB9xK,MACvBtO,EAAWogL,OAAO1vH,oBAAwBouH,EAAY,CAAEc,QAASnnK,EAAUonK,QAAS7/K,EAAWogL,OAAO9xK,KAAO9iC,GAASqzM,cAAcE,gBAAe,IAIpJ,MAAQuB,EAAUC,SAAkCjD,EAAU6B,EAAe,CAAEK,EAAF,UAAiBx/K,EAAWogL,cAA5B,aAAiB,EAAmB1vH,QAApC,UAA6C1wD,EAAWqgL,mBAAxD,aAA6C,EAAwB3vH,QAASutH,EAA8BjvN,OAAO4H,KAAKsnN,KAA2BjrM,OAASyqM,mBAGxO,MAAM8C,GAAc,OAAkBxgL,EAAY,CACjDk9K,SACAzwM,GAAIguL,EAEJgmB,mBAAoBxC,EAGpByC,gBAAgB,EAChBC,gBAAiBb,IAOlB,OAHgC,OAA3BA,IACJA,EAAuBG,gBAAgBW,gBAAkBJ,EAAY5uD,gBAEzDmsD,EAAgByC,EAAY9vH,SAAS,EAAMsuH,EAAa,IAAKf,KAAiC,4BAA+B,OAAS,IAAKC,EAAyB54I,IAA9B,KAAqCspC,YAInLiyG,EAASpoK,EAAU6nK,EAAU90M,GACnCxc,OAAOigB,OAAOgwM,GCNsBxvM,EDMWqxM,EAAgBroK,EAAU8nK,EAAyB/0M,GAAS7c,QCJpG8gB,GAAOA,EAAIC,WAAaD,EAAM,CAAEzc,QAASyc,IDIoEzc,SCN/G,IAA+Byc,EDUrC,GAA6B,OAAxBuwB,EAAWuU,SAAoB,CAGnC,MAAQwsK,EAAkBC,SAAoC1D,EAAU6B,EAAe,CAAEK,EAAeM,EAAuBlpM,SAAU3D,OAASyqM,mBAEjJ,MAAMnpK,GAAW,OAAoBurK,GAErC,GAAKvrK,EAASjL,OAAO19B,OAAS,CAE7B8xM,IACA,IAAM,MAAM3uM,KAAOwlC,EAASjL,OACR,iBAARv6B,EACNA,EAAIs2B,IACPupE,WAAM,QAAS,eAAgBuuG,EAAsBpuM,EAAI+4B,QAASk3K,EAAapoM,EAAQ7H,EAAIs2B,IAAI3U,MAAMiR,KAAO3B,EAAWuU,SAASlP,IAAI3U,MAAMiR,KAAO,EAAG5yB,EAAIs2B,IAAI3U,MAAMkR,SAElKgtE,WAAM,QAAS,eAAgBpB,EAAYz+F,EAAI+4B,QAASk3K,IAGzDpwG,WAAM,QAAS,eAAgBpB,EAAYz+F,EAAKiwM,IAKnD,IAAM,MAAMjwM,KAAOwlC,EAAS0sK,KAC3BryG,WAAM,OAAQ,eAAgB7/F,GAE/B,aAAagvM,EAAgBxpK,EAASrlC,MAAM,EAAM8wB,EAAWyY,SAAUwlK,EAA8BC,EAAwBtvG,YAGxHiyG,EAASpoK,EAAUsoK,EAAkBv1M,GAC3Cxc,OAAOigB,OAAOgwM,EAAW6B,EAAgBroK,EAAUuoK,EAA2Bx1M,GAAS7c,SAIxF,IAAM,MAAMuyN,KAAalhL,EAAWgtE,OAAS,CAGvCk0G,EAAUzoJ,YACR+lJ,EAAmB,CAAEoB,QAASnnK,EAAUonK,QAASqB,EAAUzoJ,MAAQjtD,GAE1E,MAAM8iC,EAAM4yK,EAAU5yK,gBAAoBwwK,EAAY,CAAEc,QAASnnK,EAAUonK,QAASqB,EAAU5yK,KAAO9iC,GAASqzM,cAAcE,gBAAe,GAAoBmC,EAAUxwH,QA6BzK0uH,QA3BoB9B,EAAU6B,EAAe,CAAEK,EAAelxK,IAAOr7B,OAASyqM,mBAG7E,MAAMyD,QAAsB,OAAsB,CACjD1oK,SAAUzY,EAAWyY,SACrB7hC,OAAQ03B,EACR4uK,SACAzwM,GAAIguL,EACJilB,OAAQwB,EAAUxB,OAClB5zM,MAAM,EACNo0M,eAAgBgB,EAAUzoJ,KAC1B0nJ,wBAAyB1zM,GAAMiyM,EAAYjyM,KAG5C,GAAK00M,EAAc73K,OAAO19B,OAAS,CAElC8xM,IACA,IAAM,MAAM3uM,KAAOoyM,EAAc73K,OAGhCslE,WAAM,QAAS,YAAauuG,EAAsBpuM,EAAI+4B,QAAS2Q,EAAU7hC,EAAQ7H,EAAI4yB,KAAOu/K,EAAU77K,IAAI3U,MAAMiR,KAAO,EAAG5yB,EAAI6yB,SAIhI,OAAOu/K,EAAcjyM,QAGNgyM,EAAUxB,OAASjlB,OAAUltL,GAM9C,YAH4BA,IAAvB8xM,SACEngL,QAAQI,IAAIggL,EAAqB9yM,KAAI2yB,GAAMA,aAAJ,EAAIA,EAAK8/K,MAEhDA,EC0IcmC,OAAuBrC,GAAe,GAAmB3wL,EAAM5iB,GACnF,IAAK,MAAO,OAAO61M,QAAsBtC,GAAe,IAAmB,EAAO3wL,EAAM5iB,GACxF,IAAK,OAAQ,OAAO61M,QAAsBtC,GAAe,IAAmB,EAAM3wL,EAAM5iB,IApFxE81M,CAAoBvpN,EAAMgnN,EAAgB3wL,EAAM5iB,SAEhD+B,IAAX3e,EACJ,MAAM,IAAI+c,UAAU,oBAAqB5T,YAAiBq2B,MAE3D,OAAOswL,EAAYjyM,GAAM7d,GAvBI,UA2BhB8vN,EAAYjyM,GAAkC6iG,SAUtD,SAASwxG,EAAgBlB,EAAwBhpM,EAAiBpL,GAExE,MAAM,YAAEkzM,EAAF,YAAe6C,EAAf,YAA4BzC,GAAgBtzM,EAgB5C5c,EAAS,CACdD,QAAS,IAOV,OAFAkc,SAAS,UAAW,UAAW,SAAU,aAAc,YAAa,WAAY+L,GAAQ3f,KAAKrI,EAAOD,QAASC,EAAOD,SApBpG,SAASkxN,GAExB,MAAM,GAAEpzM,GAAOqyM,EAAY,CAAEc,UAASC,WAAWr0M,GACjD,GAAKiB,KAAMiyM,EACV,OAAOA,EAAYjyM,GAEpB,MAAM,IAAIqB,MAAM,WAAYugB,KAAKC,UAAU7hB,iDAc0F7d,EAAQgxN,EAAS2B,EAAY,CAAE3B,UAASC,QAAS,OAXhK5sM,eAAe4sM,GAErC,aAAarB,EAAmB,CAAEoB,UAASC,WAAWr0M,MAWhD5c,EAODqkB,eAAeouM,EAAezqM,EAAiBonM,EAA4BvlK,EAAyBjtC,GAE1G,MAAM,cAAE2zM,EAAF,6BAAiBlB,EAAjB,uBAA+CC,EAA/C,IAAuEtvG,GAAQpjG,GAE7E80M,EAAUkB,SAA4BlE,EAAU6B,EAAe,CA5S/C,QA4S0DvoM,EAAQ6hC,IAAYxlC,eAExF8qM,EAAgBnnM,EAAQonM,EAAkBvlK,EAAUwlK,EAA8BC,EAAwBtvG,KAIxH,aADMiyG,EAASpoK,EAAU6nK,EAAU90M,GAC5Bs1M,EAAgBroK,EAAU+oK,EAAmBh2M,GAAS7c,QAQvDskB,eAAe4tM,EAASjB,EAAwB6B,EAAuBj2M,SAEvE0zB,QAAQI,IAAImiL,EAAKj1M,KAAIqzM,GAAWrB,EAAmB,CAAEoB,UAASC,WAAWr0M,MCjVzE,MAAM,EAAmB,QAchC,SAASk2M,EAAgB74G,GAExB,MAAM,IAAI4kB,eAAe,GAAI5kB,oBAW9B,MAAM84G,EAAmC,EAAG/B,UAASC,cAGpD,QAAiBtyM,IAAZqyM,EACJ,OAAOC,EAER,MAAM+B,EAAa/B,EAAQ9yM,WAG3B,MAAuB,MAAlB60M,EAAW,GACR/B,EAMD,kBAAe,aAAU,gBAAaD,EAAQ7yM,YAAa60M,KAOnE,SAASC,EAAmBpD,EAAsBjzM,GAEjD,MAAM,YAAE+1M,EAAF,QAAeO,EAAf,IAAwBlzG,GAAQpjG,EAChC4iB,EAAOmzL,EAAY9C,GACnBsD,EAAU3zL,EAAKrhB,WACrB,MAAO,CACNN,GAAIs1M,EACJ3zL,KAAMA,EACNywL,WAAY5rM,UAEX,MAAMwb,QAAYqzL,EAAQ1zL,GAE1B,MAAoB,iBAARK,GAAoBA,aAAeuiF,YAEvC,CACNj5G,KAAM,gBAAagqN,GACnBhD,eAAgB9rM,UAEVwb,aAAeuiF,cAAgBgxG,IACnCpzG,WAAM,OAAQ,yBAA0BozG,EAAW,SAAW,6BAA+B5zL,OAEvFK,IAKH,CACN12B,KAAM02B,EAAI12B,MAAQ,gBAAagqN,GAC/BhD,eAAgBtwL,EAAIswL,kBAgDjB9rM,eAAe0rM,EAAWvwL,EAAqB5iB,EAAoBk2M,EAAgB,YAEzF,MAAM,YACLhD,EAAcgD,EAAgB,uBADzB,QAELI,EAAUJ,EAAgB,qBAFrB,SAGLtC,EAAWsC,EAAgB,sBAHtB,YAILH,EAAcI,EAJT,YAKL7C,EAAc+C,GACXr2M,EAGCkzM,aAAuB1vN,QAC3BA,OAAOo/C,eAAeswK,EAAa,MAEpC,MAAMuD,EAAoB,CACzBvD,cACA6C,cACAzC,iBACGtzM,GAGJ,aAAagzM,EAAoB,CAAEoB,aAASryM,EAAWsyM,QAASzxL,GAAQ6zL,GAMjE,SAASC,EAAuBj9E,GACvC,MAAO,CACNk9E,OAAQ,CAACvrM,EAAgBwrM,EAA2BjjL,KACnD,IACC,MAAM7N,EAAM2zG,EAAUruH,EAAQwrM,GACX,iBAAR9wL,EACV6N,EAAG,KAAM7N,IAETA,EAAIyN,MAAK63G,IACRz3G,EAAG,KAAMy3G,MAEVtlH,EAAIk3E,OAAMz5F,IACTowB,EAAGpwB,EAAK,UAGT,MAAOA,GACRowB,EAAGpwB,EAAK,W,uBChMZ/f,OAAOC,eAAeN,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQqE,aAAU,EAElB,IAAImhC,EAAQ39B,EAAQ,IAEhB0U,EAAI1U,EAAQ,GA2HhB7H,EAAQqE,QAzHR,MACEsY,YAAYopB,EAAO58B,EAAM68B,EAAOC,GAC9BhqB,KAAKmhB,MAAQ,KACbnhB,KAAKy3M,cAAgB,KACrBz3M,KAAKgqB,WAAaA,EAClBhqB,KAAK8pB,MAAQA,EACb9pB,KAAK+pB,MAAQA,EACb/pB,KAAK9S,KAAOA,EAGdwqN,YAAYzqN,GACV,MAAMC,EAAO8S,KAAK9S,KAClB,GAAIA,EAAKs9B,OAASt9B,EAAKktC,KAAM,OAAO,EACpC,GAAIltC,EAAKD,EAAKE,MAAO,OAAO,EAC5B,MAAMnB,EAAOsU,EAAE4pB,aAAaj9B,EAAKE,MACjC,GAAc,MAARnB,IAAgBA,EAAKgV,OAAS,OAAO,EAE3C,IAAK,MAAM9U,KAAOF,EAChB,GAAIiB,EAAKf,GAAM,OAAO,EAGxB,OAAO,EAGT2rC,OAAO5qC,EAAM4X,EAAK3Y,EAAKiwC,GACrB,OAAO5S,EAAMnhC,QAAQF,IAAI,CACvB8hC,WAAYhqB,KAAKgqB,WACjBH,OAAQ58B,EACRivC,UAAWr3B,EACX3Y,IAAKA,EACLiwC,YAIJw7K,WAAWn0L,EAAMo0L,GACX53M,KAAKmhB,QACHy2L,EACF53M,KAAKmhB,MAAMne,KAAKwgB,GAEhBxjB,KAAKy3M,cAAcz0M,KAAKwgB,IAK9Bq0L,cAAc37K,EAAWrS,EAAQsS,GAC/B,GAAyB,IAArBD,EAAUl7B,OAAc,OAAO,EACnC,MAAMmgB,EAAQ,GAEd,IAAK,IAAIj1B,EAAM,EAAGA,EAAMgwC,EAAUl7B,OAAQ9U,IAAO,CAC/C,MAAMe,EAAOivC,EAAUhwC,GAEnBe,GAAQ+S,KAAK03M,YAAYzqN,IAC3Bk0B,EAAMne,KAAKhD,KAAK63B,OAAOhO,EAAQqS,EAAWhwC,EAAKiwC,IAInD,OAAOn8B,KAAK83M,WAAW32L,GAGzB42L,YAAY9qN,EAAMf,GAChB,QAAI8T,KAAK03M,YAAYzqN,EAAKf,KACjB8T,KAAK83M,WAAW,CAAC93M,KAAK63B,OAAO5qC,EAAMA,EAAMf,KAMpD4rN,WAAW32L,GACTnhB,KAAKmhB,MAAQA,EACbnhB,KAAKy3M,cAAgB,GACrB,MAAMpL,EAAU,IAAIjpF,QACpB,IAAI/4F,GAAO,EAEX,IAAK,MAAM7G,KAAQrC,EAAO,CAOxB,GANAqC,EAAKw0L,SAEwB,IAAzBx0L,EAAKwY,SAASh7B,QAAgBwiB,EAAKwY,SAASxY,EAAKwY,SAASh7B,OAAS,KAAOhB,MAC5EwjB,EAAKy0L,YAAYj4M,MAGF,OAAbwjB,EAAKt3B,IAAc,SACvB,MAAM,KACJe,GACEu2B,EACJ,IAAI6oL,EAAQznM,IAAI3X,GAAhB,CAGA,GAFIA,GAAMo/M,EAAQ/pK,IAAIr1C,GAElBu2B,EAAKmH,QAAS,CAChBN,GAAO,EACP,MAGF,GAAIrqB,KAAKy3M,cAAcz2M,SACrBqpB,EAAOrqB,KAAK83M,WAAW93M,KAAKy3M,eAC5Bz3M,KAAKy3M,cAAgB,GACrBz3M,KAAKmhB,MAAQA,EACTkJ,GAAM,OAId,IAAK,MAAM7G,KAAQrC,EACjBqC,EAAK00L,aAIP,OADAl4M,KAAKmhB,MAAQ,KACNkJ,EAGTM,MAAM19B,EAAMf,GACV,MAAM20C,EAAQ5zC,EAAKf,GACnB,QAAK20C,IAED5e,MAAMod,QAAQwB,GACT7gC,KAAK63M,cAAch3K,EAAO5zC,EAAMf,GAEhC8T,KAAK+3M,YAAY9qN,EAAMf,O,uBC5HpC9H,OAAOC,eAAeN,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQqE,aAAU,EAKlB,IAAIkqB,GADqB,EAFS1mB,EAAQ,KAEexD,SAAS,mBAElErE,EAAQqE,QAAUkqB,G,qBCTlBluB,OAAOC,eAAeN,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQqE,QAER,SAAqB+vN,GACnB,QAASA,GAAW,SAASr2M,KAAKq2M,K,uBCNpC/zN,OAAOC,eAAeN,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQqE,QAMR,SAAuB6E,GACrB,MAAM2Y,EAAW,GAEjB,IAAK,IAAIpD,EAAI,EAAGA,EAAIvV,EAAKgnB,SAASjT,OAAQwB,IAAK,CAC7C,IAAIy+B,EAAQh0C,EAAKgnB,SAASzR,IAEtB,EAAIzW,EAAWiL,WAAWiqC,IAC5B,EAAIm3K,EAA6BhwN,SAAS64C,EAAOr7B,KAI/C,EAAI7Z,EAAW0K,0BAA0BwqC,KAAQA,EAAQA,EAAMx5B,aAC/D,EAAI1b,EAAWyK,sBAAsByqC,IACzCr7B,EAAS5C,KAAKi+B,IAGhB,OAAOr7B,GApBT,IAAI7Z,EAAaH,EAAQ,GAErBwsN,EAA+BxsN,EAAQ,M,uBCP3CxH,OAAOC,eAAeN,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQqE,QAIR,SAAqC64C,EAAO7gB,GAC1C,MAAMgzF,EAAQnyE,EAAM38C,MAAMqd,MAAM,cAChC,IAAI62G,EAAmB,EAEvB,IAAK,IAAIh2G,EAAI,EAAGA,EAAI4wG,EAAMpyG,OAAQwB,IAC5B4wG,EAAM5wG,GAAGrB,MAAM,YACjBq3G,EAAmBh2G,GAIvB,IAAI+4D,EAAM,GAEV,IAAK,IAAI/4D,EAAI,EAAGA,EAAI4wG,EAAMpyG,OAAQwB,IAAK,CACrC,MAAMu0B,EAAOq8E,EAAM5wG,GACbi2G,EAAoB,IAANj2G,EACdk2G,EAAal2G,IAAM4wG,EAAMpyG,OAAS,EAClC23G,EAAqBn2G,IAAMg2G,EACjC,IAAII,EAAc7hF,EAAKhK,QAAQ,MAAO,KAEjC0rF,IACHG,EAAcA,EAAY7rF,QAAQ,QAAS,KAGxC2rF,IACHE,EAAcA,EAAY7rF,QAAQ,QAAS,KAGzC6rF,IACGD,IACHC,GAAe,KAGjBr9C,GAAOq9C,GAIPr9C,GAAKn7C,EAAKpd,MAAK,EAAIjX,EAAW0c,eAAe8yD,KAtCnD,IAAIxvE,EAAaH,EAAQ,I,uBCLzBxH,OAAOC,eAAeN,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQqE,QAMR,SAAiB+E,KAASizB,GACxB,MAAMp0B,EAAOU,EAAa6+B,aAAap+B,GACjCkrN,EAAYj4L,EAAKpf,OAEvB,GAAIq3M,EAAYrsN,EAAKgV,OACnB,MAAM,IAAIkC,MAAO,GAAE/V,0CAA6CkrN,kCAA0CrsN,EAAKgV,UAGjH,MAAM/T,EAAO,CACXE,QAEF,IAAIqV,EAAI,EACRxW,EAAKC,SAAQC,IACX,MAAMkzC,EAAQ1yC,EAAa4+B,YAAYn+B,GAAMjB,GAC7C,IAAI04B,EACApiB,EAAI61M,IAAWzzL,EAAMxE,EAAK5d,SAElBG,IAARiiB,IACFA,EAAM3C,MAAMod,QAAQD,EAAMh3C,SAAW,GAAKg3C,EAAMh3C,SAGlD6E,EAAKf,GAAO04B,EACZpiB,OAGF,IAAK,MAAMtW,KAAO9H,OAAO4H,KAAKiB,IAC5B,EAAIxB,EAAUrD,SAAS6E,EAAMf,EAAKe,EAAKf,IAGzC,OAAOe,GAjCT,IAAIP,EAAed,EAAQ,IAEvBH,EAAYG,EAAQ,M,qBCPxBxH,OAAOC,eAAeN,EAAS,aAAc,CAC3CO,OAAO,IAETP,EAAQy0D,kBAAoBA,EAC5Bz0D,EAAQ20D,iBAAmBA,EAC3B30D,EAAQ+tH,iBAkDR,SAA0BruG,GACxB,IAAI60M,GAAU,EAEd,IAAK,IAAI91M,EAAI,EAAGA,EAAIiB,EAAKzC,OAAQwB,IAAK,CACpC,IAAI0hF,EAAKzgF,EAAKwgB,WAAWzhB,GAEzB,GAAsB,QAAZ,MAAL0hF,IAA2B1hF,EAAI,EAAIiB,EAAKzC,OAAQ,CACnD,MAAMmjF,EAAQ1gF,EAAKwgB,aAAazhB,GAEP,QAAZ,MAAR2hF,KACHD,EAAK,QAAiB,KAALA,IAAe,KAAe,KAARC,IAI3C,GAAIm0H,GAGF,GAFAA,GAAU,GAEL9/J,EAAkB0rC,GACrB,OAAO,OAEJ,IAAKxrC,EAAiBwrC,GAC3B,OAAO,EAIX,OAAQo0H,GA1EV,IAAItgK,EAA+B,w6BAC/BC,EAA0B,kjBAC9B,MAAMC,EAA0B,IAAIzW,OAAO,IAAMuW,EAA+B,KAC1EG,EAAqB,IAAI1W,OAAO,IAAMuW,EAA+BC,EAA0B,KACrGD,EAA+BC,EAA0B,KACzD,MAAMG,EAA6B,CAAC,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,IAAK,GAAI,GAAI,IAAK,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,IAAK,IAAK,GAAI,GAAI,GAAI,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,IAAK,GAAI,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,IAAK,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,IAAK,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,IAAK,GAAI,IAAK,EAAG,GAAI,IAAK,IAAK,IAAK,GAAI,IAAK,KAAM,KAAM,KAAM,IAAK,KAAM,IAAK,EAAG,GAAI,IAAK,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,IAAK,GAAI,IAAK,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,KAAM,EAAG,KAAM,GAAI,EAAG,KAAM,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,KAAM,IAAK,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,KAAM,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,KAAM,GAAI,GAAI,EAAG,GAAI,EAAG,IAAK,GAAI,KAAM,IAAK,GAAI,GAAI,EAAG,EAAG,KAAM,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,KAAM,MAAO,GAAI,KAAM,GAAI,IAAK,EAAG,KAAM,GAAI,KAAM,KAAM,IAAK,KAAM,MAC3wDC,EAAwB,CAAC,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,KAAM,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,GAAI,IAAK,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,IAAK,GAAI,EA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","file":"vue3-sfc-loader.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"vue3-sfc-loader\"] = factory();\n\telse\n\t\troot[\"vue3-sfc-loader\"] = factory();\n})(self, function() {\nreturn ","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar _exportNames = {\n react: true,\n assertNode: true,\n createTypeAnnotationBasedOnTypeof: true,\n createUnionTypeAnnotation: true,\n createFlowUnionType: true,\n createTSUnionType: true,\n cloneNode: true,\n clone: true,\n cloneDeep: true,\n cloneDeepWithoutLoc: true,\n cloneWithoutLoc: true,\n addComment: true,\n addComments: true,\n inheritInnerComments: true,\n inheritLeadingComments: true,\n inheritsComments: true,\n inheritTrailingComments: true,\n removeComments: true,\n ensureBlock: true,\n toBindingIdentifierName: true,\n toBlock: true,\n toComputedKey: true,\n toExpression: true,\n toIdentifier: true,\n toKeyAlias: true,\n toSequenceExpression: true,\n toStatement: true,\n valueToNode: true,\n appendToMemberExpression: true,\n inherits: true,\n prependToMemberExpression: true,\n removeProperties: true,\n removePropertiesDeep: true,\n removeTypeDuplicates: true,\n getBindingIdentifiers: true,\n getOuterBindingIdentifiers: true,\n traverse: true,\n traverseFast: true,\n shallowEqual: true,\n is: true,\n isBinding: true,\n isBlockScoped: true,\n isImmutable: true,\n isLet: true,\n isNode: true,\n isNodesEquivalent: true,\n isPlaceholderType: true,\n isReferenced: true,\n isScope: true,\n isSpecifierDefault: true,\n isType: true,\n isValidES3Identifier: true,\n isValidIdentifier: true,\n isVar: true,\n matchesPattern: true,\n validate: true,\n buildMatchMemberExpression: true\n};\nObject.defineProperty(exports, \"assertNode\", {\n enumerable: true,\n get: function () {\n return _assertNode.default;\n }\n});\nObject.defineProperty(exports, \"createTypeAnnotationBasedOnTypeof\", {\n enumerable: true,\n get: function () {\n return _createTypeAnnotationBasedOnTypeof.default;\n }\n});\nObject.defineProperty(exports, \"createUnionTypeAnnotation\", {\n enumerable: true,\n get: function () {\n return _createFlowUnionType.default;\n }\n});\nObject.defineProperty(exports, \"createFlowUnionType\", {\n enumerable: true,\n get: function () {\n return _createFlowUnionType.default;\n }\n});\nObject.defineProperty(exports, \"createTSUnionType\", {\n enumerable: true,\n get: function () {\n return _createTSUnionType.default;\n }\n});\nObject.defineProperty(exports, \"cloneNode\", {\n enumerable: true,\n get: function () {\n return _cloneNode.default;\n }\n});\nObject.defineProperty(exports, \"clone\", {\n enumerable: true,\n get: function () {\n return _clone.default;\n }\n});\nObject.defineProperty(exports, \"cloneDeep\", {\n enumerable: true,\n get: function () {\n return _cloneDeep.default;\n }\n});\nObject.defineProperty(exports, \"cloneDeepWithoutLoc\", {\n enumerable: true,\n get: function () {\n return _cloneDeepWithoutLoc.default;\n }\n});\nObject.defineProperty(exports, \"cloneWithoutLoc\", {\n enumerable: true,\n get: function () {\n return _cloneWithoutLoc.default;\n }\n});\nObject.defineProperty(exports, \"addComment\", {\n enumerable: true,\n get: function () {\n return _addComment.default;\n }\n});\nObject.defineProperty(exports, \"addComments\", {\n enumerable: true,\n get: function () {\n return _addComments.default;\n }\n});\nObject.defineProperty(exports, \"inheritInnerComments\", {\n enumerable: true,\n get: function () {\n return _inheritInnerComments.default;\n }\n});\nObject.defineProperty(exports, \"inheritLeadingComments\", {\n enumerable: true,\n get: function () {\n return _inheritLeadingComments.default;\n }\n});\nObject.defineProperty(exports, \"inheritsComments\", {\n enumerable: true,\n get: function () {\n return _inheritsComments.default;\n }\n});\nObject.defineProperty(exports, \"inheritTrailingComments\", {\n enumerable: true,\n get: function () {\n return _inheritTrailingComments.default;\n }\n});\nObject.defineProperty(exports, \"removeComments\", {\n enumerable: true,\n get: function () {\n return _removeComments.default;\n }\n});\nObject.defineProperty(exports, \"ensureBlock\", {\n enumerable: true,\n get: function () {\n return _ensureBlock.default;\n }\n});\nObject.defineProperty(exports, \"toBindingIdentifierName\", {\n enumerable: true,\n get: function () {\n return _toBindingIdentifierName.default;\n }\n});\nObject.defineProperty(exports, \"toBlock\", {\n enumerable: true,\n get: function () {\n return _toBlock.default;\n }\n});\nObject.defineProperty(exports, \"toComputedKey\", {\n enumerable: true,\n get: function () {\n return _toComputedKey.default;\n }\n});\nObject.defineProperty(exports, \"toExpression\", {\n enumerable: true,\n get: function () {\n return _toExpression.default;\n }\n});\nObject.defineProperty(exports, \"toIdentifier\", {\n enumerable: true,\n get: function () {\n return _toIdentifier.default;\n }\n});\nObject.defineProperty(exports, \"toKeyAlias\", {\n enumerable: true,\n get: function () {\n return _toKeyAlias.default;\n }\n});\nObject.defineProperty(exports, \"toSequenceExpression\", {\n enumerable: true,\n get: function () {\n return _toSequenceExpression.default;\n }\n});\nObject.defineProperty(exports, \"toStatement\", {\n enumerable: true,\n get: function () {\n return _toStatement.default;\n }\n});\nObject.defineProperty(exports, \"valueToNode\", {\n enumerable: true,\n get: function () {\n return _valueToNode.default;\n }\n});\nObject.defineProperty(exports, \"appendToMemberExpression\", {\n enumerable: true,\n get: function () {\n return _appendToMemberExpression.default;\n }\n});\nObject.defineProperty(exports, \"inherits\", {\n enumerable: true,\n get: function () {\n return _inherits.default;\n }\n});\nObject.defineProperty(exports, \"prependToMemberExpression\", {\n enumerable: true,\n get: function () {\n return _prependToMemberExpression.default;\n }\n});\nObject.defineProperty(exports, \"removeProperties\", {\n enumerable: true,\n get: function () {\n return _removeProperties.default;\n }\n});\nObject.defineProperty(exports, \"removePropertiesDeep\", {\n enumerable: true,\n get: function () {\n return _removePropertiesDeep.default;\n }\n});\nObject.defineProperty(exports, \"removeTypeDuplicates\", {\n enumerable: true,\n get: function () {\n return _removeTypeDuplicates.default;\n }\n});\nObject.defineProperty(exports, \"getBindingIdentifiers\", {\n enumerable: true,\n get: function () {\n return _getBindingIdentifiers.default;\n }\n});\nObject.defineProperty(exports, \"getOuterBindingIdentifiers\", {\n enumerable: true,\n get: function () {\n return _getOuterBindingIdentifiers.default;\n }\n});\nObject.defineProperty(exports, \"traverse\", {\n enumerable: true,\n get: function () {\n return _traverse.default;\n }\n});\nObject.defineProperty(exports, \"traverseFast\", {\n enumerable: true,\n get: function () {\n return _traverseFast.default;\n }\n});\nObject.defineProperty(exports, \"shallowEqual\", {\n enumerable: true,\n get: function () {\n return _shallowEqual.default;\n }\n});\nObject.defineProperty(exports, \"is\", {\n enumerable: true,\n get: function () {\n return _is.default;\n }\n});\nObject.defineProperty(exports, \"isBinding\", {\n enumerable: true,\n get: function () {\n return _isBinding.default;\n }\n});\nObject.defineProperty(exports, \"isBlockScoped\", {\n enumerable: true,\n get: function () {\n return _isBlockScoped.default;\n }\n});\nObject.defineProperty(exports, \"isImmutable\", {\n enumerable: true,\n get: function () {\n return _isImmutable.default;\n }\n});\nObject.defineProperty(exports, \"isLet\", {\n enumerable: true,\n get: function () {\n return _isLet.default;\n }\n});\nObject.defineProperty(exports, \"isNode\", {\n enumerable: true,\n get: function () {\n return _isNode.default;\n }\n});\nObject.defineProperty(exports, \"isNodesEquivalent\", {\n enumerable: true,\n get: function () {\n return _isNodesEquivalent.default;\n }\n});\nObject.defineProperty(exports, \"isPlaceholderType\", {\n enumerable: true,\n get: function () {\n return _isPlaceholderType.default;\n }\n});\nObject.defineProperty(exports, \"isReferenced\", {\n enumerable: true,\n get: function () {\n return _isReferenced.default;\n }\n});\nObject.defineProperty(exports, \"isScope\", {\n enumerable: true,\n get: function () {\n return _isScope.default;\n }\n});\nObject.defineProperty(exports, \"isSpecifierDefault\", {\n enumerable: true,\n get: function () {\n return _isSpecifierDefault.default;\n }\n});\nObject.defineProperty(exports, \"isType\", {\n enumerable: true,\n get: function () {\n return _isType.default;\n }\n});\nObject.defineProperty(exports, \"isValidES3Identifier\", {\n enumerable: true,\n get: function () {\n return _isValidES3Identifier.default;\n }\n});\nObject.defineProperty(exports, \"isValidIdentifier\", {\n enumerable: true,\n get: function () {\n return _isValidIdentifier.default;\n }\n});\nObject.defineProperty(exports, \"isVar\", {\n enumerable: true,\n get: function () {\n return _isVar.default;\n }\n});\nObject.defineProperty(exports, \"matchesPattern\", {\n enumerable: true,\n get: function () {\n return _matchesPattern.default;\n }\n});\nObject.defineProperty(exports, \"validate\", {\n enumerable: true,\n get: function () {\n return _validate.default;\n }\n});\nObject.defineProperty(exports, \"buildMatchMemberExpression\", {\n enumerable: true,\n get: function () {\n return _buildMatchMemberExpression.default;\n }\n});\nexports.react = void 0;\n\nvar _isReactComponent = require(\"./validators/react/isReactComponent\");\n\nvar _isCompatTag = require(\"./validators/react/isCompatTag\");\n\nvar _buildChildren = require(\"./builders/react/buildChildren\");\n\nvar _assertNode = require(\"./asserts/assertNode\");\n\nvar _generated = require(\"./asserts/generated\");\n\nObject.keys(_generated).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;\n if (key in exports && exports[key] === _generated[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _generated[key];\n }\n });\n});\n\nvar _createTypeAnnotationBasedOnTypeof = require(\"./builders/flow/createTypeAnnotationBasedOnTypeof\");\n\nvar _createFlowUnionType = require(\"./builders/flow/createFlowUnionType\");\n\nvar _createTSUnionType = require(\"./builders/typescript/createTSUnionType\");\n\nvar _generated2 = require(\"./builders/generated\");\n\nObject.keys(_generated2).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;\n if (key in exports && exports[key] === _generated2[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _generated2[key];\n }\n });\n});\n\nvar _uppercase = require(\"./builders/generated/uppercase\");\n\nObject.keys(_uppercase).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;\n if (key in exports && exports[key] === _uppercase[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _uppercase[key];\n }\n });\n});\n\nvar _cloneNode = require(\"./clone/cloneNode\");\n\nvar _clone = require(\"./clone/clone\");\n\nvar _cloneDeep = require(\"./clone/cloneDeep\");\n\nvar _cloneDeepWithoutLoc = require(\"./clone/cloneDeepWithoutLoc\");\n\nvar _cloneWithoutLoc = require(\"./clone/cloneWithoutLoc\");\n\nvar _addComment = require(\"./comments/addComment\");\n\nvar _addComments = require(\"./comments/addComments\");\n\nvar _inheritInnerComments = require(\"./comments/inheritInnerComments\");\n\nvar _inheritLeadingComments = require(\"./comments/inheritLeadingComments\");\n\nvar _inheritsComments = require(\"./comments/inheritsComments\");\n\nvar _inheritTrailingComments = require(\"./comments/inheritTrailingComments\");\n\nvar _removeComments = require(\"./comments/removeComments\");\n\nvar _generated3 = require(\"./constants/generated\");\n\nObject.keys(_generated3).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;\n if (key in exports && exports[key] === _generated3[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _generated3[key];\n }\n });\n});\n\nvar _constants = require(\"./constants\");\n\nObject.keys(_constants).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;\n if (key in exports && exports[key] === _constants[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _constants[key];\n }\n });\n});\n\nvar _ensureBlock = require(\"./converters/ensureBlock\");\n\nvar _toBindingIdentifierName = require(\"./converters/toBindingIdentifierName\");\n\nvar _toBlock = require(\"./converters/toBlock\");\n\nvar _toComputedKey = require(\"./converters/toComputedKey\");\n\nvar _toExpression = require(\"./converters/toExpression\");\n\nvar _toIdentifier = require(\"./converters/toIdentifier\");\n\nvar _toKeyAlias = require(\"./converters/toKeyAlias\");\n\nvar _toSequenceExpression = require(\"./converters/toSequenceExpression\");\n\nvar _toStatement = require(\"./converters/toStatement\");\n\nvar _valueToNode = require(\"./converters/valueToNode\");\n\nvar _definitions = require(\"./definitions\");\n\nObject.keys(_definitions).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;\n if (key in exports && exports[key] === _definitions[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _definitions[key];\n }\n });\n});\n\nvar _appendToMemberExpression = require(\"./modifications/appendToMemberExpression\");\n\nvar _inherits = require(\"./modifications/inherits\");\n\nvar _prependToMemberExpression = require(\"./modifications/prependToMemberExpression\");\n\nvar _removeProperties = require(\"./modifications/removeProperties\");\n\nvar _removePropertiesDeep = require(\"./modifications/removePropertiesDeep\");\n\nvar _removeTypeDuplicates = require(\"./modifications/flow/removeTypeDuplicates\");\n\nvar _getBindingIdentifiers = require(\"./retrievers/getBindingIdentifiers\");\n\nvar _getOuterBindingIdentifiers = require(\"./retrievers/getOuterBindingIdentifiers\");\n\nvar _traverse = require(\"./traverse/traverse\");\n\nObject.keys(_traverse).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;\n if (key in exports && exports[key] === _traverse[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _traverse[key];\n }\n });\n});\n\nvar _traverseFast = require(\"./traverse/traverseFast\");\n\nvar _shallowEqual = require(\"./utils/shallowEqual\");\n\nvar _is = require(\"./validators/is\");\n\nvar _isBinding = require(\"./validators/isBinding\");\n\nvar _isBlockScoped = require(\"./validators/isBlockScoped\");\n\nvar _isImmutable = require(\"./validators/isImmutable\");\n\nvar _isLet = require(\"./validators/isLet\");\n\nvar _isNode = require(\"./validators/isNode\");\n\nvar _isNodesEquivalent = require(\"./validators/isNodesEquivalent\");\n\nvar _isPlaceholderType = require(\"./validators/isPlaceholderType\");\n\nvar _isReferenced = require(\"./validators/isReferenced\");\n\nvar _isScope = require(\"./validators/isScope\");\n\nvar _isSpecifierDefault = require(\"./validators/isSpecifierDefault\");\n\nvar _isType = require(\"./validators/isType\");\n\nvar _isValidES3Identifier = require(\"./validators/isValidES3Identifier\");\n\nvar _isValidIdentifier = require(\"./validators/isValidIdentifier\");\n\nvar _isVar = require(\"./validators/isVar\");\n\nvar _matchesPattern = require(\"./validators/matchesPattern\");\n\nvar _validate = require(\"./validators/validate\");\n\nvar _buildMatchMemberExpression = require(\"./validators/buildMatchMemberExpression\");\n\nvar _generated4 = require(\"./validators/generated\");\n\nObject.keys(_generated4).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;\n if (key in exports && exports[key] === _generated4[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _generated4[key];\n }\n });\n});\n\nvar _generated5 = require(\"./ast-types/generated\");\n\nObject.keys(_generated5).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;\n if (key in exports && exports[key] === _generated5[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _generated5[key];\n }\n });\n});\nconst react = {\n isReactComponent: _isReactComponent.default,\n isCompatTag: _isCompatTag.default,\n buildChildren: _buildChildren.default\n};\nexports.react = react;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.isArrayExpression = isArrayExpression;\nexports.isAssignmentExpression = isAssignmentExpression;\nexports.isBinaryExpression = isBinaryExpression;\nexports.isInterpreterDirective = isInterpreterDirective;\nexports.isDirective = isDirective;\nexports.isDirectiveLiteral = isDirectiveLiteral;\nexports.isBlockStatement = isBlockStatement;\nexports.isBreakStatement = isBreakStatement;\nexports.isCallExpression = isCallExpression;\nexports.isCatchClause = isCatchClause;\nexports.isConditionalExpression = isConditionalExpression;\nexports.isContinueStatement = isContinueStatement;\nexports.isDebuggerStatement = isDebuggerStatement;\nexports.isDoWhileStatement = isDoWhileStatement;\nexports.isEmptyStatement = isEmptyStatement;\nexports.isExpressionStatement = isExpressionStatement;\nexports.isFile = isFile;\nexports.isForInStatement = isForInStatement;\nexports.isForStatement = isForStatement;\nexports.isFunctionDeclaration = isFunctionDeclaration;\nexports.isFunctionExpression = isFunctionExpression;\nexports.isIdentifier = isIdentifier;\nexports.isIfStatement = isIfStatement;\nexports.isLabeledStatement = isLabeledStatement;\nexports.isStringLiteral = isStringLiteral;\nexports.isNumericLiteral = isNumericLiteral;\nexports.isNullLiteral = isNullLiteral;\nexports.isBooleanLiteral = isBooleanLiteral;\nexports.isRegExpLiteral = isRegExpLiteral;\nexports.isLogicalExpression = isLogicalExpression;\nexports.isMemberExpression = isMemberExpression;\nexports.isNewExpression = isNewExpression;\nexports.isProgram = isProgram;\nexports.isObjectExpression = isObjectExpression;\nexports.isObjectMethod = isObjectMethod;\nexports.isObjectProperty = isObjectProperty;\nexports.isRestElement = isRestElement;\nexports.isReturnStatement = isReturnStatement;\nexports.isSequenceExpression = isSequenceExpression;\nexports.isParenthesizedExpression = isParenthesizedExpression;\nexports.isSwitchCase = isSwitchCase;\nexports.isSwitchStatement = isSwitchStatement;\nexports.isThisExpression = isThisExpression;\nexports.isThrowStatement = isThrowStatement;\nexports.isTryStatement = isTryStatement;\nexports.isUnaryExpression = isUnaryExpression;\nexports.isUpdateExpression = isUpdateExpression;\nexports.isVariableDeclaration = isVariableDeclaration;\nexports.isVariableDeclarator = isVariableDeclarator;\nexports.isWhileStatement = isWhileStatement;\nexports.isWithStatement = isWithStatement;\nexports.isAssignmentPattern = isAssignmentPattern;\nexports.isArrayPattern = isArrayPattern;\nexports.isArrowFunctionExpression = isArrowFunctionExpression;\nexports.isClassBody = isClassBody;\nexports.isClassExpression = isClassExpression;\nexports.isClassDeclaration = isClassDeclaration;\nexports.isExportAllDeclaration = isExportAllDeclaration;\nexports.isExportDefaultDeclaration = isExportDefaultDeclaration;\nexports.isExportNamedDeclaration = isExportNamedDeclaration;\nexports.isExportSpecifier = isExportSpecifier;\nexports.isForOfStatement = isForOfStatement;\nexports.isImportDeclaration = isImportDeclaration;\nexports.isImportDefaultSpecifier = isImportDefaultSpecifier;\nexports.isImportNamespaceSpecifier = isImportNamespaceSpecifier;\nexports.isImportSpecifier = isImportSpecifier;\nexports.isMetaProperty = isMetaProperty;\nexports.isClassMethod = isClassMethod;\nexports.isObjectPattern = isObjectPattern;\nexports.isSpreadElement = isSpreadElement;\nexports.isSuper = isSuper;\nexports.isTaggedTemplateExpression = isTaggedTemplateExpression;\nexports.isTemplateElement = isTemplateElement;\nexports.isTemplateLiteral = isTemplateLiteral;\nexports.isYieldExpression = isYieldExpression;\nexports.isAwaitExpression = isAwaitExpression;\nexports.isImport = isImport;\nexports.isBigIntLiteral = isBigIntLiteral;\nexports.isExportNamespaceSpecifier = isExportNamespaceSpecifier;\nexports.isOptionalMemberExpression = isOptionalMemberExpression;\nexports.isOptionalCallExpression = isOptionalCallExpression;\nexports.isAnyTypeAnnotation = isAnyTypeAnnotation;\nexports.isArrayTypeAnnotation = isArrayTypeAnnotation;\nexports.isBooleanTypeAnnotation = isBooleanTypeAnnotation;\nexports.isBooleanLiteralTypeAnnotation = isBooleanLiteralTypeAnnotation;\nexports.isNullLiteralTypeAnnotation = isNullLiteralTypeAnnotation;\nexports.isClassImplements = isClassImplements;\nexports.isDeclareClass = isDeclareClass;\nexports.isDeclareFunction = isDeclareFunction;\nexports.isDeclareInterface = isDeclareInterface;\nexports.isDeclareModule = isDeclareModule;\nexports.isDeclareModuleExports = isDeclareModuleExports;\nexports.isDeclareTypeAlias = isDeclareTypeAlias;\nexports.isDeclareOpaqueType = isDeclareOpaqueType;\nexports.isDeclareVariable = isDeclareVariable;\nexports.isDeclareExportDeclaration = isDeclareExportDeclaration;\nexports.isDeclareExportAllDeclaration = isDeclareExportAllDeclaration;\nexports.isDeclaredPredicate = isDeclaredPredicate;\nexports.isExistsTypeAnnotation = isExistsTypeAnnotation;\nexports.isFunctionTypeAnnotation = isFunctionTypeAnnotation;\nexports.isFunctionTypeParam = isFunctionTypeParam;\nexports.isGenericTypeAnnotation = isGenericTypeAnnotation;\nexports.isInferredPredicate = isInferredPredicate;\nexports.isInterfaceExtends = isInterfaceExtends;\nexports.isInterfaceDeclaration = isInterfaceDeclaration;\nexports.isInterfaceTypeAnnotation = isInterfaceTypeAnnotation;\nexports.isIntersectionTypeAnnotation = isIntersectionTypeAnnotation;\nexports.isMixedTypeAnnotation = isMixedTypeAnnotation;\nexports.isEmptyTypeAnnotation = isEmptyTypeAnnotation;\nexports.isNullableTypeAnnotation = isNullableTypeAnnotation;\nexports.isNumberLiteralTypeAnnotation = isNumberLiteralTypeAnnotation;\nexports.isNumberTypeAnnotation = isNumberTypeAnnotation;\nexports.isObjectTypeAnnotation = isObjectTypeAnnotation;\nexports.isObjectTypeInternalSlot = isObjectTypeInternalSlot;\nexports.isObjectTypeCallProperty = isObjectTypeCallProperty;\nexports.isObjectTypeIndexer = isObjectTypeIndexer;\nexports.isObjectTypeProperty = isObjectTypeProperty;\nexports.isObjectTypeSpreadProperty = isObjectTypeSpreadProperty;\nexports.isOpaqueType = isOpaqueType;\nexports.isQualifiedTypeIdentifier = isQualifiedTypeIdentifier;\nexports.isStringLiteralTypeAnnotation = isStringLiteralTypeAnnotation;\nexports.isStringTypeAnnotation = isStringTypeAnnotation;\nexports.isSymbolTypeAnnotation = isSymbolTypeAnnotation;\nexports.isThisTypeAnnotation = isThisTypeAnnotation;\nexports.isTupleTypeAnnotation = isTupleTypeAnnotation;\nexports.isTypeofTypeAnnotation = isTypeofTypeAnnotation;\nexports.isTypeAlias = isTypeAlias;\nexports.isTypeAnnotation = isTypeAnnotation;\nexports.isTypeCastExpression = isTypeCastExpression;\nexports.isTypeParameter = isTypeParameter;\nexports.isTypeParameterDeclaration = isTypeParameterDeclaration;\nexports.isTypeParameterInstantiation = isTypeParameterInstantiation;\nexports.isUnionTypeAnnotation = isUnionTypeAnnotation;\nexports.isVariance = isVariance;\nexports.isVoidTypeAnnotation = isVoidTypeAnnotation;\nexports.isEnumDeclaration = isEnumDeclaration;\nexports.isEnumBooleanBody = isEnumBooleanBody;\nexports.isEnumNumberBody = isEnumNumberBody;\nexports.isEnumStringBody = isEnumStringBody;\nexports.isEnumSymbolBody = isEnumSymbolBody;\nexports.isEnumBooleanMember = isEnumBooleanMember;\nexports.isEnumNumberMember = isEnumNumberMember;\nexports.isEnumStringMember = isEnumStringMember;\nexports.isEnumDefaultedMember = isEnumDefaultedMember;\nexports.isIndexedAccessType = isIndexedAccessType;\nexports.isOptionalIndexedAccessType = isOptionalIndexedAccessType;\nexports.isJSXAttribute = isJSXAttribute;\nexports.isJSXClosingElement = isJSXClosingElement;\nexports.isJSXElement = isJSXElement;\nexports.isJSXEmptyExpression = isJSXEmptyExpression;\nexports.isJSXExpressionContainer = isJSXExpressionContainer;\nexports.isJSXSpreadChild = isJSXSpreadChild;\nexports.isJSXIdentifier = isJSXIdentifier;\nexports.isJSXMemberExpression = isJSXMemberExpression;\nexports.isJSXNamespacedName = isJSXNamespacedName;\nexports.isJSXOpeningElement = isJSXOpeningElement;\nexports.isJSXSpreadAttribute = isJSXSpreadAttribute;\nexports.isJSXText = isJSXText;\nexports.isJSXFragment = isJSXFragment;\nexports.isJSXOpeningFragment = isJSXOpeningFragment;\nexports.isJSXClosingFragment = isJSXClosingFragment;\nexports.isNoop = isNoop;\nexports.isPlaceholder = isPlaceholder;\nexports.isV8IntrinsicIdentifier = isV8IntrinsicIdentifier;\nexports.isArgumentPlaceholder = isArgumentPlaceholder;\nexports.isBindExpression = isBindExpression;\nexports.isClassProperty = isClassProperty;\nexports.isPipelineTopicExpression = isPipelineTopicExpression;\nexports.isPipelineBareFunction = isPipelineBareFunction;\nexports.isPipelinePrimaryTopicReference = isPipelinePrimaryTopicReference;\nexports.isClassPrivateProperty = isClassPrivateProperty;\nexports.isClassPrivateMethod = isClassPrivateMethod;\nexports.isImportAttribute = isImportAttribute;\nexports.isDecorator = isDecorator;\nexports.isDoExpression = isDoExpression;\nexports.isExportDefaultSpecifier = isExportDefaultSpecifier;\nexports.isPrivateName = isPrivateName;\nexports.isRecordExpression = isRecordExpression;\nexports.isTupleExpression = isTupleExpression;\nexports.isDecimalLiteral = isDecimalLiteral;\nexports.isStaticBlock = isStaticBlock;\nexports.isModuleExpression = isModuleExpression;\nexports.isTSParameterProperty = isTSParameterProperty;\nexports.isTSDeclareFunction = isTSDeclareFunction;\nexports.isTSDeclareMethod = isTSDeclareMethod;\nexports.isTSQualifiedName = isTSQualifiedName;\nexports.isTSCallSignatureDeclaration = isTSCallSignatureDeclaration;\nexports.isTSConstructSignatureDeclaration = isTSConstructSignatureDeclaration;\nexports.isTSPropertySignature = isTSPropertySignature;\nexports.isTSMethodSignature = isTSMethodSignature;\nexports.isTSIndexSignature = isTSIndexSignature;\nexports.isTSAnyKeyword = isTSAnyKeyword;\nexports.isTSBooleanKeyword = isTSBooleanKeyword;\nexports.isTSBigIntKeyword = isTSBigIntKeyword;\nexports.isTSIntrinsicKeyword = isTSIntrinsicKeyword;\nexports.isTSNeverKeyword = isTSNeverKeyword;\nexports.isTSNullKeyword = isTSNullKeyword;\nexports.isTSNumberKeyword = isTSNumberKeyword;\nexports.isTSObjectKeyword = isTSObjectKeyword;\nexports.isTSStringKeyword = isTSStringKeyword;\nexports.isTSSymbolKeyword = isTSSymbolKeyword;\nexports.isTSUndefinedKeyword = isTSUndefinedKeyword;\nexports.isTSUnknownKeyword = isTSUnknownKeyword;\nexports.isTSVoidKeyword = isTSVoidKeyword;\nexports.isTSThisType = isTSThisType;\nexports.isTSFunctionType = isTSFunctionType;\nexports.isTSConstructorType = isTSConstructorType;\nexports.isTSTypeReference = isTSTypeReference;\nexports.isTSTypePredicate = isTSTypePredicate;\nexports.isTSTypeQuery = isTSTypeQuery;\nexports.isTSTypeLiteral = isTSTypeLiteral;\nexports.isTSArrayType = isTSArrayType;\nexports.isTSTupleType = isTSTupleType;\nexports.isTSOptionalType = isTSOptionalType;\nexports.isTSRestType = isTSRestType;\nexports.isTSNamedTupleMember = isTSNamedTupleMember;\nexports.isTSUnionType = isTSUnionType;\nexports.isTSIntersectionType = isTSIntersectionType;\nexports.isTSConditionalType = isTSConditionalType;\nexports.isTSInferType = isTSInferType;\nexports.isTSParenthesizedType = isTSParenthesizedType;\nexports.isTSTypeOperator = isTSTypeOperator;\nexports.isTSIndexedAccessType = isTSIndexedAccessType;\nexports.isTSMappedType = isTSMappedType;\nexports.isTSLiteralType = isTSLiteralType;\nexports.isTSExpressionWithTypeArguments = isTSExpressionWithTypeArguments;\nexports.isTSInterfaceDeclaration = isTSInterfaceDeclaration;\nexports.isTSInterfaceBody = isTSInterfaceBody;\nexports.isTSTypeAliasDeclaration = isTSTypeAliasDeclaration;\nexports.isTSAsExpression = isTSAsExpression;\nexports.isTSTypeAssertion = isTSTypeAssertion;\nexports.isTSEnumDeclaration = isTSEnumDeclaration;\nexports.isTSEnumMember = isTSEnumMember;\nexports.isTSModuleDeclaration = isTSModuleDeclaration;\nexports.isTSModuleBlock = isTSModuleBlock;\nexports.isTSImportType = isTSImportType;\nexports.isTSImportEqualsDeclaration = isTSImportEqualsDeclaration;\nexports.isTSExternalModuleReference = isTSExternalModuleReference;\nexports.isTSNonNullExpression = isTSNonNullExpression;\nexports.isTSExportAssignment = isTSExportAssignment;\nexports.isTSNamespaceExportDeclaration = isTSNamespaceExportDeclaration;\nexports.isTSTypeAnnotation = isTSTypeAnnotation;\nexports.isTSTypeParameterInstantiation = isTSTypeParameterInstantiation;\nexports.isTSTypeParameterDeclaration = isTSTypeParameterDeclaration;\nexports.isTSTypeParameter = isTSTypeParameter;\nexports.isExpression = isExpression;\nexports.isBinary = isBinary;\nexports.isScopable = isScopable;\nexports.isBlockParent = isBlockParent;\nexports.isBlock = isBlock;\nexports.isStatement = isStatement;\nexports.isTerminatorless = isTerminatorless;\nexports.isCompletionStatement = isCompletionStatement;\nexports.isConditional = isConditional;\nexports.isLoop = isLoop;\nexports.isWhile = isWhile;\nexports.isExpressionWrapper = isExpressionWrapper;\nexports.isFor = isFor;\nexports.isForXStatement = isForXStatement;\nexports.isFunction = isFunction;\nexports.isFunctionParent = isFunctionParent;\nexports.isPureish = isPureish;\nexports.isDeclaration = isDeclaration;\nexports.isPatternLike = isPatternLike;\nexports.isLVal = isLVal;\nexports.isTSEntityName = isTSEntityName;\nexports.isLiteral = isLiteral;\nexports.isImmutable = isImmutable;\nexports.isUserWhitespacable = isUserWhitespacable;\nexports.isMethod = isMethod;\nexports.isObjectMember = isObjectMember;\nexports.isProperty = isProperty;\nexports.isUnaryLike = isUnaryLike;\nexports.isPattern = isPattern;\nexports.isClass = isClass;\nexports.isModuleDeclaration = isModuleDeclaration;\nexports.isExportDeclaration = isExportDeclaration;\nexports.isModuleSpecifier = isModuleSpecifier;\nexports.isFlow = isFlow;\nexports.isFlowType = isFlowType;\nexports.isFlowBaseAnnotation = isFlowBaseAnnotation;\nexports.isFlowDeclaration = isFlowDeclaration;\nexports.isFlowPredicate = isFlowPredicate;\nexports.isEnumBody = isEnumBody;\nexports.isEnumMember = isEnumMember;\nexports.isJSX = isJSX;\nexports.isPrivate = isPrivate;\nexports.isTSTypeElement = isTSTypeElement;\nexports.isTSType = isTSType;\nexports.isTSBaseType = isTSBaseType;\nexports.isNumberLiteral = isNumberLiteral;\nexports.isRegexLiteral = isRegexLiteral;\nexports.isRestProperty = isRestProperty;\nexports.isSpreadProperty = isSpreadProperty;\n\nvar _shallowEqual = require(\"../../utils/shallowEqual\");\n\nfunction isArrayExpression(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"ArrayExpression\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isAssignmentExpression(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"AssignmentExpression\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isBinaryExpression(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"BinaryExpression\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isInterpreterDirective(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"InterpreterDirective\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isDirective(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"Directive\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isDirectiveLiteral(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"DirectiveLiteral\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isBlockStatement(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"BlockStatement\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isBreakStatement(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"BreakStatement\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isCallExpression(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"CallExpression\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isCatchClause(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"CatchClause\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isConditionalExpression(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"ConditionalExpression\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isContinueStatement(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"ContinueStatement\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isDebuggerStatement(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"DebuggerStatement\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isDoWhileStatement(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"DoWhileStatement\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isEmptyStatement(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"EmptyStatement\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isExpressionStatement(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"ExpressionStatement\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isFile(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"File\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isForInStatement(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"ForInStatement\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isForStatement(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"ForStatement\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isFunctionDeclaration(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"FunctionDeclaration\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isFunctionExpression(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"FunctionExpression\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isIdentifier(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"Identifier\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isIfStatement(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"IfStatement\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isLabeledStatement(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"LabeledStatement\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isStringLiteral(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"StringLiteral\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isNumericLiteral(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"NumericLiteral\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isNullLiteral(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"NullLiteral\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isBooleanLiteral(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"BooleanLiteral\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isRegExpLiteral(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"RegExpLiteral\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isLogicalExpression(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"LogicalExpression\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isMemberExpression(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"MemberExpression\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isNewExpression(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"NewExpression\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isProgram(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"Program\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isObjectExpression(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"ObjectExpression\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isObjectMethod(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"ObjectMethod\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isObjectProperty(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"ObjectProperty\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isRestElement(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"RestElement\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isReturnStatement(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"ReturnStatement\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isSequenceExpression(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"SequenceExpression\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isParenthesizedExpression(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"ParenthesizedExpression\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isSwitchCase(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"SwitchCase\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isSwitchStatement(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"SwitchStatement\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isThisExpression(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"ThisExpression\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isThrowStatement(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"ThrowStatement\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTryStatement(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TryStatement\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isUnaryExpression(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"UnaryExpression\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isUpdateExpression(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"UpdateExpression\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isVariableDeclaration(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"VariableDeclaration\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isVariableDeclarator(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"VariableDeclarator\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isWhileStatement(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"WhileStatement\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isWithStatement(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"WithStatement\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isAssignmentPattern(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"AssignmentPattern\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isArrayPattern(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"ArrayPattern\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isArrowFunctionExpression(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"ArrowFunctionExpression\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isClassBody(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"ClassBody\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isClassExpression(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"ClassExpression\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isClassDeclaration(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"ClassDeclaration\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isExportAllDeclaration(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"ExportAllDeclaration\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isExportDefaultDeclaration(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"ExportDefaultDeclaration\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isExportNamedDeclaration(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"ExportNamedDeclaration\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isExportSpecifier(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"ExportSpecifier\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isForOfStatement(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"ForOfStatement\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isImportDeclaration(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"ImportDeclaration\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isImportDefaultSpecifier(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"ImportDefaultSpecifier\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isImportNamespaceSpecifier(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"ImportNamespaceSpecifier\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isImportSpecifier(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"ImportSpecifier\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isMetaProperty(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"MetaProperty\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isClassMethod(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"ClassMethod\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isObjectPattern(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"ObjectPattern\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isSpreadElement(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"SpreadElement\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isSuper(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"Super\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTaggedTemplateExpression(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TaggedTemplateExpression\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTemplateElement(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TemplateElement\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTemplateLiteral(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TemplateLiteral\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isYieldExpression(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"YieldExpression\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isAwaitExpression(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"AwaitExpression\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isImport(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"Import\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isBigIntLiteral(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"BigIntLiteral\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isExportNamespaceSpecifier(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"ExportNamespaceSpecifier\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isOptionalMemberExpression(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"OptionalMemberExpression\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isOptionalCallExpression(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"OptionalCallExpression\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isAnyTypeAnnotation(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"AnyTypeAnnotation\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isArrayTypeAnnotation(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"ArrayTypeAnnotation\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isBooleanTypeAnnotation(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"BooleanTypeAnnotation\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isBooleanLiteralTypeAnnotation(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"BooleanLiteralTypeAnnotation\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isNullLiteralTypeAnnotation(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"NullLiteralTypeAnnotation\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isClassImplements(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"ClassImplements\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isDeclareClass(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"DeclareClass\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isDeclareFunction(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"DeclareFunction\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isDeclareInterface(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"DeclareInterface\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isDeclareModule(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"DeclareModule\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isDeclareModuleExports(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"DeclareModuleExports\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isDeclareTypeAlias(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"DeclareTypeAlias\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isDeclareOpaqueType(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"DeclareOpaqueType\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isDeclareVariable(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"DeclareVariable\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isDeclareExportDeclaration(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"DeclareExportDeclaration\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isDeclareExportAllDeclaration(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"DeclareExportAllDeclaration\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isDeclaredPredicate(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"DeclaredPredicate\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isExistsTypeAnnotation(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"ExistsTypeAnnotation\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isFunctionTypeAnnotation(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"FunctionTypeAnnotation\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isFunctionTypeParam(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"FunctionTypeParam\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isGenericTypeAnnotation(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"GenericTypeAnnotation\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isInferredPredicate(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"InferredPredicate\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isInterfaceExtends(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"InterfaceExtends\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isInterfaceDeclaration(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"InterfaceDeclaration\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isInterfaceTypeAnnotation(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"InterfaceTypeAnnotation\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isIntersectionTypeAnnotation(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"IntersectionTypeAnnotation\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isMixedTypeAnnotation(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"MixedTypeAnnotation\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isEmptyTypeAnnotation(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"EmptyTypeAnnotation\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isNullableTypeAnnotation(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"NullableTypeAnnotation\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isNumberLiteralTypeAnnotation(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"NumberLiteralTypeAnnotation\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isNumberTypeAnnotation(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"NumberTypeAnnotation\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isObjectTypeAnnotation(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"ObjectTypeAnnotation\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isObjectTypeInternalSlot(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"ObjectTypeInternalSlot\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isObjectTypeCallProperty(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"ObjectTypeCallProperty\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isObjectTypeIndexer(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"ObjectTypeIndexer\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isObjectTypeProperty(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"ObjectTypeProperty\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isObjectTypeSpreadProperty(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"ObjectTypeSpreadProperty\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isOpaqueType(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"OpaqueType\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isQualifiedTypeIdentifier(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"QualifiedTypeIdentifier\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isStringLiteralTypeAnnotation(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"StringLiteralTypeAnnotation\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isStringTypeAnnotation(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"StringTypeAnnotation\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isSymbolTypeAnnotation(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"SymbolTypeAnnotation\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isThisTypeAnnotation(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"ThisTypeAnnotation\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTupleTypeAnnotation(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TupleTypeAnnotation\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTypeofTypeAnnotation(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TypeofTypeAnnotation\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTypeAlias(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TypeAlias\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTypeAnnotation(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TypeAnnotation\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTypeCastExpression(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TypeCastExpression\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTypeParameter(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TypeParameter\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTypeParameterDeclaration(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TypeParameterDeclaration\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTypeParameterInstantiation(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TypeParameterInstantiation\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isUnionTypeAnnotation(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"UnionTypeAnnotation\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isVariance(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"Variance\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isVoidTypeAnnotation(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"VoidTypeAnnotation\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isEnumDeclaration(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"EnumDeclaration\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isEnumBooleanBody(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"EnumBooleanBody\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isEnumNumberBody(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"EnumNumberBody\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isEnumStringBody(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"EnumStringBody\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isEnumSymbolBody(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"EnumSymbolBody\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isEnumBooleanMember(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"EnumBooleanMember\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isEnumNumberMember(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"EnumNumberMember\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isEnumStringMember(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"EnumStringMember\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isEnumDefaultedMember(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"EnumDefaultedMember\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isIndexedAccessType(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"IndexedAccessType\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isOptionalIndexedAccessType(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"OptionalIndexedAccessType\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isJSXAttribute(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"JSXAttribute\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isJSXClosingElement(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"JSXClosingElement\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isJSXElement(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"JSXElement\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isJSXEmptyExpression(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"JSXEmptyExpression\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isJSXExpressionContainer(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"JSXExpressionContainer\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isJSXSpreadChild(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"JSXSpreadChild\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isJSXIdentifier(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"JSXIdentifier\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isJSXMemberExpression(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"JSXMemberExpression\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isJSXNamespacedName(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"JSXNamespacedName\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isJSXOpeningElement(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"JSXOpeningElement\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isJSXSpreadAttribute(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"JSXSpreadAttribute\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isJSXText(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"JSXText\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isJSXFragment(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"JSXFragment\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isJSXOpeningFragment(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"JSXOpeningFragment\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isJSXClosingFragment(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"JSXClosingFragment\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isNoop(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"Noop\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isPlaceholder(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"Placeholder\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isV8IntrinsicIdentifier(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"V8IntrinsicIdentifier\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isArgumentPlaceholder(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"ArgumentPlaceholder\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isBindExpression(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"BindExpression\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isClassProperty(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"ClassProperty\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isPipelineTopicExpression(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"PipelineTopicExpression\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isPipelineBareFunction(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"PipelineBareFunction\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isPipelinePrimaryTopicReference(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"PipelinePrimaryTopicReference\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isClassPrivateProperty(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"ClassPrivateProperty\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isClassPrivateMethod(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"ClassPrivateMethod\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isImportAttribute(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"ImportAttribute\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isDecorator(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"Decorator\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isDoExpression(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"DoExpression\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isExportDefaultSpecifier(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"ExportDefaultSpecifier\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isPrivateName(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"PrivateName\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isRecordExpression(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"RecordExpression\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTupleExpression(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TupleExpression\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isDecimalLiteral(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"DecimalLiteral\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isStaticBlock(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"StaticBlock\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isModuleExpression(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"ModuleExpression\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSParameterProperty(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSParameterProperty\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSDeclareFunction(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSDeclareFunction\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSDeclareMethod(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSDeclareMethod\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSQualifiedName(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSQualifiedName\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSCallSignatureDeclaration(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSCallSignatureDeclaration\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSConstructSignatureDeclaration(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSConstructSignatureDeclaration\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSPropertySignature(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSPropertySignature\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSMethodSignature(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSMethodSignature\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSIndexSignature(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSIndexSignature\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSAnyKeyword(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSAnyKeyword\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSBooleanKeyword(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSBooleanKeyword\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSBigIntKeyword(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSBigIntKeyword\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSIntrinsicKeyword(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSIntrinsicKeyword\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSNeverKeyword(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSNeverKeyword\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSNullKeyword(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSNullKeyword\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSNumberKeyword(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSNumberKeyword\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSObjectKeyword(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSObjectKeyword\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSStringKeyword(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSStringKeyword\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSSymbolKeyword(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSSymbolKeyword\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSUndefinedKeyword(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSUndefinedKeyword\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSUnknownKeyword(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSUnknownKeyword\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSVoidKeyword(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSVoidKeyword\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSThisType(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSThisType\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSFunctionType(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSFunctionType\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSConstructorType(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSConstructorType\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSTypeReference(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSTypeReference\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSTypePredicate(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSTypePredicate\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSTypeQuery(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSTypeQuery\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSTypeLiteral(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSTypeLiteral\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSArrayType(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSArrayType\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSTupleType(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSTupleType\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSOptionalType(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSOptionalType\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSRestType(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSRestType\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSNamedTupleMember(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSNamedTupleMember\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSUnionType(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSUnionType\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSIntersectionType(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSIntersectionType\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSConditionalType(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSConditionalType\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSInferType(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSInferType\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSParenthesizedType(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSParenthesizedType\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSTypeOperator(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSTypeOperator\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSIndexedAccessType(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSIndexedAccessType\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSMappedType(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSMappedType\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSLiteralType(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSLiteralType\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSExpressionWithTypeArguments(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSExpressionWithTypeArguments\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSInterfaceDeclaration(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSInterfaceDeclaration\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSInterfaceBody(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSInterfaceBody\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSTypeAliasDeclaration(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSTypeAliasDeclaration\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSAsExpression(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSAsExpression\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSTypeAssertion(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSTypeAssertion\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSEnumDeclaration(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSEnumDeclaration\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSEnumMember(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSEnumMember\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSModuleDeclaration(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSModuleDeclaration\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSModuleBlock(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSModuleBlock\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSImportType(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSImportType\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSImportEqualsDeclaration(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSImportEqualsDeclaration\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSExternalModuleReference(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSExternalModuleReference\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSNonNullExpression(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSNonNullExpression\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSExportAssignment(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSExportAssignment\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSNamespaceExportDeclaration(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSNamespaceExportDeclaration\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSTypeAnnotation(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSTypeAnnotation\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSTypeParameterInstantiation(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSTypeParameterInstantiation\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSTypeParameterDeclaration(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSTypeParameterDeclaration\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSTypeParameter(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"TSTypeParameter\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isExpression(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (\"ArrayExpression\" === nodeType || \"AssignmentExpression\" === nodeType || \"BinaryExpression\" === nodeType || \"CallExpression\" === nodeType || \"ConditionalExpression\" === nodeType || \"FunctionExpression\" === nodeType || \"Identifier\" === nodeType || \"StringLiteral\" === nodeType || \"NumericLiteral\" === nodeType || \"NullLiteral\" === nodeType || \"BooleanLiteral\" === nodeType || \"RegExpLiteral\" === nodeType || \"LogicalExpression\" === nodeType || \"MemberExpression\" === nodeType || \"NewExpression\" === nodeType || \"ObjectExpression\" === nodeType || \"SequenceExpression\" === nodeType || \"ParenthesizedExpression\" === nodeType || \"ThisExpression\" === nodeType || \"UnaryExpression\" === nodeType || \"UpdateExpression\" === nodeType || \"ArrowFunctionExpression\" === nodeType || \"ClassExpression\" === nodeType || \"MetaProperty\" === nodeType || \"Super\" === nodeType || \"TaggedTemplateExpression\" === nodeType || \"TemplateLiteral\" === nodeType || \"YieldExpression\" === nodeType || \"AwaitExpression\" === nodeType || \"Import\" === nodeType || \"BigIntLiteral\" === nodeType || \"OptionalMemberExpression\" === nodeType || \"OptionalCallExpression\" === nodeType || \"TypeCastExpression\" === nodeType || \"JSXElement\" === nodeType || \"JSXFragment\" === nodeType || \"BindExpression\" === nodeType || \"PipelinePrimaryTopicReference\" === nodeType || \"DoExpression\" === nodeType || \"RecordExpression\" === nodeType || \"TupleExpression\" === nodeType || \"DecimalLiteral\" === nodeType || \"ModuleExpression\" === nodeType || \"TSAsExpression\" === nodeType || \"TSTypeAssertion\" === nodeType || \"TSNonNullExpression\" === nodeType || nodeType === \"Placeholder\" && (\"Expression\" === node.expectedNode || \"Identifier\" === node.expectedNode || \"StringLiteral\" === node.expectedNode)) {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isBinary(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (\"BinaryExpression\" === nodeType || \"LogicalExpression\" === nodeType) {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isScopable(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (\"BlockStatement\" === nodeType || \"CatchClause\" === nodeType || \"DoWhileStatement\" === nodeType || \"ForInStatement\" === nodeType || \"ForStatement\" === nodeType || \"FunctionDeclaration\" === nodeType || \"FunctionExpression\" === nodeType || \"Program\" === nodeType || \"ObjectMethod\" === nodeType || \"SwitchStatement\" === nodeType || \"WhileStatement\" === nodeType || \"ArrowFunctionExpression\" === nodeType || \"ClassExpression\" === nodeType || \"ClassDeclaration\" === nodeType || \"ForOfStatement\" === nodeType || \"ClassMethod\" === nodeType || \"ClassPrivateMethod\" === nodeType || \"StaticBlock\" === nodeType || \"TSModuleBlock\" === nodeType || nodeType === \"Placeholder\" && \"BlockStatement\" === node.expectedNode) {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isBlockParent(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (\"BlockStatement\" === nodeType || \"CatchClause\" === nodeType || \"DoWhileStatement\" === nodeType || \"ForInStatement\" === nodeType || \"ForStatement\" === nodeType || \"FunctionDeclaration\" === nodeType || \"FunctionExpression\" === nodeType || \"Program\" === nodeType || \"ObjectMethod\" === nodeType || \"SwitchStatement\" === nodeType || \"WhileStatement\" === nodeType || \"ArrowFunctionExpression\" === nodeType || \"ForOfStatement\" === nodeType || \"ClassMethod\" === nodeType || \"ClassPrivateMethod\" === nodeType || \"StaticBlock\" === nodeType || \"TSModuleBlock\" === nodeType || nodeType === \"Placeholder\" && \"BlockStatement\" === node.expectedNode) {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isBlock(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (\"BlockStatement\" === nodeType || \"Program\" === nodeType || \"TSModuleBlock\" === nodeType || nodeType === \"Placeholder\" && \"BlockStatement\" === node.expectedNode) {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isStatement(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (\"BlockStatement\" === nodeType || \"BreakStatement\" === nodeType || \"ContinueStatement\" === nodeType || \"DebuggerStatement\" === nodeType || \"DoWhileStatement\" === nodeType || \"EmptyStatement\" === nodeType || \"ExpressionStatement\" === nodeType || \"ForInStatement\" === nodeType || \"ForStatement\" === nodeType || \"FunctionDeclaration\" === nodeType || \"IfStatement\" === nodeType || \"LabeledStatement\" === nodeType || \"ReturnStatement\" === nodeType || \"SwitchStatement\" === nodeType || \"ThrowStatement\" === nodeType || \"TryStatement\" === nodeType || \"VariableDeclaration\" === nodeType || \"WhileStatement\" === nodeType || \"WithStatement\" === nodeType || \"ClassDeclaration\" === nodeType || \"ExportAllDeclaration\" === nodeType || \"ExportDefaultDeclaration\" === nodeType || \"ExportNamedDeclaration\" === nodeType || \"ForOfStatement\" === nodeType || \"ImportDeclaration\" === nodeType || \"DeclareClass\" === nodeType || \"DeclareFunction\" === nodeType || \"DeclareInterface\" === nodeType || \"DeclareModule\" === nodeType || \"DeclareModuleExports\" === nodeType || \"DeclareTypeAlias\" === nodeType || \"DeclareOpaqueType\" === nodeType || \"DeclareVariable\" === nodeType || \"DeclareExportDeclaration\" === nodeType || \"DeclareExportAllDeclaration\" === nodeType || \"InterfaceDeclaration\" === nodeType || \"OpaqueType\" === nodeType || \"TypeAlias\" === nodeType || \"EnumDeclaration\" === nodeType || \"TSDeclareFunction\" === nodeType || \"TSInterfaceDeclaration\" === nodeType || \"TSTypeAliasDeclaration\" === nodeType || \"TSEnumDeclaration\" === nodeType || \"TSModuleDeclaration\" === nodeType || \"TSImportEqualsDeclaration\" === nodeType || \"TSExportAssignment\" === nodeType || \"TSNamespaceExportDeclaration\" === nodeType || nodeType === \"Placeholder\" && (\"Statement\" === node.expectedNode || \"Declaration\" === node.expectedNode || \"BlockStatement\" === node.expectedNode)) {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTerminatorless(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (\"BreakStatement\" === nodeType || \"ContinueStatement\" === nodeType || \"ReturnStatement\" === nodeType || \"ThrowStatement\" === nodeType || \"YieldExpression\" === nodeType || \"AwaitExpression\" === nodeType) {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isCompletionStatement(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (\"BreakStatement\" === nodeType || \"ContinueStatement\" === nodeType || \"ReturnStatement\" === nodeType || \"ThrowStatement\" === nodeType) {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isConditional(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (\"ConditionalExpression\" === nodeType || \"IfStatement\" === nodeType) {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isLoop(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (\"DoWhileStatement\" === nodeType || \"ForInStatement\" === nodeType || \"ForStatement\" === nodeType || \"WhileStatement\" === nodeType || \"ForOfStatement\" === nodeType) {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isWhile(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (\"DoWhileStatement\" === nodeType || \"WhileStatement\" === nodeType) {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isExpressionWrapper(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (\"ExpressionStatement\" === nodeType || \"ParenthesizedExpression\" === nodeType || \"TypeCastExpression\" === nodeType) {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isFor(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (\"ForInStatement\" === nodeType || \"ForStatement\" === nodeType || \"ForOfStatement\" === nodeType) {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isForXStatement(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (\"ForInStatement\" === nodeType || \"ForOfStatement\" === nodeType) {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isFunction(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (\"FunctionDeclaration\" === nodeType || \"FunctionExpression\" === nodeType || \"ObjectMethod\" === nodeType || \"ArrowFunctionExpression\" === nodeType || \"ClassMethod\" === nodeType || \"ClassPrivateMethod\" === nodeType) {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isFunctionParent(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (\"FunctionDeclaration\" === nodeType || \"FunctionExpression\" === nodeType || \"ObjectMethod\" === nodeType || \"ArrowFunctionExpression\" === nodeType || \"ClassMethod\" === nodeType || \"ClassPrivateMethod\" === nodeType) {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isPureish(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (\"FunctionDeclaration\" === nodeType || \"FunctionExpression\" === nodeType || \"StringLiteral\" === nodeType || \"NumericLiteral\" === nodeType || \"NullLiteral\" === nodeType || \"BooleanLiteral\" === nodeType || \"RegExpLiteral\" === nodeType || \"ArrowFunctionExpression\" === nodeType || \"BigIntLiteral\" === nodeType || \"DecimalLiteral\" === nodeType || nodeType === \"Placeholder\" && \"StringLiteral\" === node.expectedNode) {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isDeclaration(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (\"FunctionDeclaration\" === nodeType || \"VariableDeclaration\" === nodeType || \"ClassDeclaration\" === nodeType || \"ExportAllDeclaration\" === nodeType || \"ExportDefaultDeclaration\" === nodeType || \"ExportNamedDeclaration\" === nodeType || \"ImportDeclaration\" === nodeType || \"DeclareClass\" === nodeType || \"DeclareFunction\" === nodeType || \"DeclareInterface\" === nodeType || \"DeclareModule\" === nodeType || \"DeclareModuleExports\" === nodeType || \"DeclareTypeAlias\" === nodeType || \"DeclareOpaqueType\" === nodeType || \"DeclareVariable\" === nodeType || \"DeclareExportDeclaration\" === nodeType || \"DeclareExportAllDeclaration\" === nodeType || \"InterfaceDeclaration\" === nodeType || \"OpaqueType\" === nodeType || \"TypeAlias\" === nodeType || \"EnumDeclaration\" === nodeType || \"TSDeclareFunction\" === nodeType || \"TSInterfaceDeclaration\" === nodeType || \"TSTypeAliasDeclaration\" === nodeType || \"TSEnumDeclaration\" === nodeType || \"TSModuleDeclaration\" === nodeType || nodeType === \"Placeholder\" && \"Declaration\" === node.expectedNode) {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isPatternLike(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (\"Identifier\" === nodeType || \"RestElement\" === nodeType || \"AssignmentPattern\" === nodeType || \"ArrayPattern\" === nodeType || \"ObjectPattern\" === nodeType || nodeType === \"Placeholder\" && (\"Pattern\" === node.expectedNode || \"Identifier\" === node.expectedNode)) {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isLVal(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (\"Identifier\" === nodeType || \"MemberExpression\" === nodeType || \"RestElement\" === nodeType || \"AssignmentPattern\" === nodeType || \"ArrayPattern\" === nodeType || \"ObjectPattern\" === nodeType || \"TSParameterProperty\" === nodeType || nodeType === \"Placeholder\" && (\"Pattern\" === node.expectedNode || \"Identifier\" === node.expectedNode)) {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSEntityName(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (\"Identifier\" === nodeType || \"TSQualifiedName\" === nodeType || nodeType === \"Placeholder\" && \"Identifier\" === node.expectedNode) {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isLiteral(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (\"StringLiteral\" === nodeType || \"NumericLiteral\" === nodeType || \"NullLiteral\" === nodeType || \"BooleanLiteral\" === nodeType || \"RegExpLiteral\" === nodeType || \"TemplateLiteral\" === nodeType || \"BigIntLiteral\" === nodeType || \"DecimalLiteral\" === nodeType || nodeType === \"Placeholder\" && \"StringLiteral\" === node.expectedNode) {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isImmutable(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (\"StringLiteral\" === nodeType || \"NumericLiteral\" === nodeType || \"NullLiteral\" === nodeType || \"BooleanLiteral\" === nodeType || \"BigIntLiteral\" === nodeType || \"JSXAttribute\" === nodeType || \"JSXClosingElement\" === nodeType || \"JSXElement\" === nodeType || \"JSXExpressionContainer\" === nodeType || \"JSXSpreadChild\" === nodeType || \"JSXOpeningElement\" === nodeType || \"JSXText\" === nodeType || \"JSXFragment\" === nodeType || \"JSXOpeningFragment\" === nodeType || \"JSXClosingFragment\" === nodeType || \"DecimalLiteral\" === nodeType || nodeType === \"Placeholder\" && \"StringLiteral\" === node.expectedNode) {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isUserWhitespacable(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (\"ObjectMethod\" === nodeType || \"ObjectProperty\" === nodeType || \"ObjectTypeInternalSlot\" === nodeType || \"ObjectTypeCallProperty\" === nodeType || \"ObjectTypeIndexer\" === nodeType || \"ObjectTypeProperty\" === nodeType || \"ObjectTypeSpreadProperty\" === nodeType) {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isMethod(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (\"ObjectMethod\" === nodeType || \"ClassMethod\" === nodeType || \"ClassPrivateMethod\" === nodeType) {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isObjectMember(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (\"ObjectMethod\" === nodeType || \"ObjectProperty\" === nodeType) {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isProperty(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (\"ObjectProperty\" === nodeType || \"ClassProperty\" === nodeType || \"ClassPrivateProperty\" === nodeType) {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isUnaryLike(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (\"UnaryExpression\" === nodeType || \"SpreadElement\" === nodeType) {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isPattern(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (\"AssignmentPattern\" === nodeType || \"ArrayPattern\" === nodeType || \"ObjectPattern\" === nodeType || nodeType === \"Placeholder\" && \"Pattern\" === node.expectedNode) {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isClass(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (\"ClassExpression\" === nodeType || \"ClassDeclaration\" === nodeType) {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isModuleDeclaration(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (\"ExportAllDeclaration\" === nodeType || \"ExportDefaultDeclaration\" === nodeType || \"ExportNamedDeclaration\" === nodeType || \"ImportDeclaration\" === nodeType) {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isExportDeclaration(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (\"ExportAllDeclaration\" === nodeType || \"ExportDefaultDeclaration\" === nodeType || \"ExportNamedDeclaration\" === nodeType) {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isModuleSpecifier(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (\"ExportSpecifier\" === nodeType || \"ImportDefaultSpecifier\" === nodeType || \"ImportNamespaceSpecifier\" === nodeType || \"ImportSpecifier\" === nodeType || \"ExportNamespaceSpecifier\" === nodeType || \"ExportDefaultSpecifier\" === nodeType) {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isFlow(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (\"AnyTypeAnnotation\" === nodeType || \"ArrayTypeAnnotation\" === nodeType || \"BooleanTypeAnnotation\" === nodeType || \"BooleanLiteralTypeAnnotation\" === nodeType || \"NullLiteralTypeAnnotation\" === nodeType || \"ClassImplements\" === nodeType || \"DeclareClass\" === nodeType || \"DeclareFunction\" === nodeType || \"DeclareInterface\" === nodeType || \"DeclareModule\" === nodeType || \"DeclareModuleExports\" === nodeType || \"DeclareTypeAlias\" === nodeType || \"DeclareOpaqueType\" === nodeType || \"DeclareVariable\" === nodeType || \"DeclareExportDeclaration\" === nodeType || \"DeclareExportAllDeclaration\" === nodeType || \"DeclaredPredicate\" === nodeType || \"ExistsTypeAnnotation\" === nodeType || \"FunctionTypeAnnotation\" === nodeType || \"FunctionTypeParam\" === nodeType || \"GenericTypeAnnotation\" === nodeType || \"InferredPredicate\" === nodeType || \"InterfaceExtends\" === nodeType || \"InterfaceDeclaration\" === nodeType || \"InterfaceTypeAnnotation\" === nodeType || \"IntersectionTypeAnnotation\" === nodeType || \"MixedTypeAnnotation\" === nodeType || \"EmptyTypeAnnotation\" === nodeType || \"NullableTypeAnnotation\" === nodeType || \"NumberLiteralTypeAnnotation\" === nodeType || \"NumberTypeAnnotation\" === nodeType || \"ObjectTypeAnnotation\" === nodeType || \"ObjectTypeInternalSlot\" === nodeType || \"ObjectTypeCallProperty\" === nodeType || \"ObjectTypeIndexer\" === nodeType || \"ObjectTypeProperty\" === nodeType || \"ObjectTypeSpreadProperty\" === nodeType || \"OpaqueType\" === nodeType || \"QualifiedTypeIdentifier\" === nodeType || \"StringLiteralTypeAnnotation\" === nodeType || \"StringTypeAnnotation\" === nodeType || \"SymbolTypeAnnotation\" === nodeType || \"ThisTypeAnnotation\" === nodeType || \"TupleTypeAnnotation\" === nodeType || \"TypeofTypeAnnotation\" === nodeType || \"TypeAlias\" === nodeType || \"TypeAnnotation\" === nodeType || \"TypeCastExpression\" === nodeType || \"TypeParameter\" === nodeType || \"TypeParameterDeclaration\" === nodeType || \"TypeParameterInstantiation\" === nodeType || \"UnionTypeAnnotation\" === nodeType || \"Variance\" === nodeType || \"VoidTypeAnnotation\" === nodeType || \"IndexedAccessType\" === nodeType || \"OptionalIndexedAccessType\" === nodeType) {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isFlowType(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (\"AnyTypeAnnotation\" === nodeType || \"ArrayTypeAnnotation\" === nodeType || \"BooleanTypeAnnotation\" === nodeType || \"BooleanLiteralTypeAnnotation\" === nodeType || \"NullLiteralTypeAnnotation\" === nodeType || \"ExistsTypeAnnotation\" === nodeType || \"FunctionTypeAnnotation\" === nodeType || \"GenericTypeAnnotation\" === nodeType || \"InterfaceTypeAnnotation\" === nodeType || \"IntersectionTypeAnnotation\" === nodeType || \"MixedTypeAnnotation\" === nodeType || \"EmptyTypeAnnotation\" === nodeType || \"NullableTypeAnnotation\" === nodeType || \"NumberLiteralTypeAnnotation\" === nodeType || \"NumberTypeAnnotation\" === nodeType || \"ObjectTypeAnnotation\" === nodeType || \"StringLiteralTypeAnnotation\" === nodeType || \"StringTypeAnnotation\" === nodeType || \"SymbolTypeAnnotation\" === nodeType || \"ThisTypeAnnotation\" === nodeType || \"TupleTypeAnnotation\" === nodeType || \"TypeofTypeAnnotation\" === nodeType || \"UnionTypeAnnotation\" === nodeType || \"VoidTypeAnnotation\" === nodeType || \"IndexedAccessType\" === nodeType || \"OptionalIndexedAccessType\" === nodeType) {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isFlowBaseAnnotation(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (\"AnyTypeAnnotation\" === nodeType || \"BooleanTypeAnnotation\" === nodeType || \"NullLiteralTypeAnnotation\" === nodeType || \"MixedTypeAnnotation\" === nodeType || \"EmptyTypeAnnotation\" === nodeType || \"NumberTypeAnnotation\" === nodeType || \"StringTypeAnnotation\" === nodeType || \"SymbolTypeAnnotation\" === nodeType || \"ThisTypeAnnotation\" === nodeType || \"VoidTypeAnnotation\" === nodeType) {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isFlowDeclaration(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (\"DeclareClass\" === nodeType || \"DeclareFunction\" === nodeType || \"DeclareInterface\" === nodeType || \"DeclareModule\" === nodeType || \"DeclareModuleExports\" === nodeType || \"DeclareTypeAlias\" === nodeType || \"DeclareOpaqueType\" === nodeType || \"DeclareVariable\" === nodeType || \"DeclareExportDeclaration\" === nodeType || \"DeclareExportAllDeclaration\" === nodeType || \"InterfaceDeclaration\" === nodeType || \"OpaqueType\" === nodeType || \"TypeAlias\" === nodeType) {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isFlowPredicate(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (\"DeclaredPredicate\" === nodeType || \"InferredPredicate\" === nodeType) {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isEnumBody(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (\"EnumBooleanBody\" === nodeType || \"EnumNumberBody\" === nodeType || \"EnumStringBody\" === nodeType || \"EnumSymbolBody\" === nodeType) {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isEnumMember(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (\"EnumBooleanMember\" === nodeType || \"EnumNumberMember\" === nodeType || \"EnumStringMember\" === nodeType || \"EnumDefaultedMember\" === nodeType) {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isJSX(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (\"JSXAttribute\" === nodeType || \"JSXClosingElement\" === nodeType || \"JSXElement\" === nodeType || \"JSXEmptyExpression\" === nodeType || \"JSXExpressionContainer\" === nodeType || \"JSXSpreadChild\" === nodeType || \"JSXIdentifier\" === nodeType || \"JSXMemberExpression\" === nodeType || \"JSXNamespacedName\" === nodeType || \"JSXOpeningElement\" === nodeType || \"JSXSpreadAttribute\" === nodeType || \"JSXText\" === nodeType || \"JSXFragment\" === nodeType || \"JSXOpeningFragment\" === nodeType || \"JSXClosingFragment\" === nodeType) {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isPrivate(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (\"ClassPrivateProperty\" === nodeType || \"ClassPrivateMethod\" === nodeType || \"PrivateName\" === nodeType) {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSTypeElement(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (\"TSCallSignatureDeclaration\" === nodeType || \"TSConstructSignatureDeclaration\" === nodeType || \"TSPropertySignature\" === nodeType || \"TSMethodSignature\" === nodeType || \"TSIndexSignature\" === nodeType) {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSType(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (\"TSAnyKeyword\" === nodeType || \"TSBooleanKeyword\" === nodeType || \"TSBigIntKeyword\" === nodeType || \"TSIntrinsicKeyword\" === nodeType || \"TSNeverKeyword\" === nodeType || \"TSNullKeyword\" === nodeType || \"TSNumberKeyword\" === nodeType || \"TSObjectKeyword\" === nodeType || \"TSStringKeyword\" === nodeType || \"TSSymbolKeyword\" === nodeType || \"TSUndefinedKeyword\" === nodeType || \"TSUnknownKeyword\" === nodeType || \"TSVoidKeyword\" === nodeType || \"TSThisType\" === nodeType || \"TSFunctionType\" === nodeType || \"TSConstructorType\" === nodeType || \"TSTypeReference\" === nodeType || \"TSTypePredicate\" === nodeType || \"TSTypeQuery\" === nodeType || \"TSTypeLiteral\" === nodeType || \"TSArrayType\" === nodeType || \"TSTupleType\" === nodeType || \"TSOptionalType\" === nodeType || \"TSRestType\" === nodeType || \"TSUnionType\" === nodeType || \"TSIntersectionType\" === nodeType || \"TSConditionalType\" === nodeType || \"TSInferType\" === nodeType || \"TSParenthesizedType\" === nodeType || \"TSTypeOperator\" === nodeType || \"TSIndexedAccessType\" === nodeType || \"TSMappedType\" === nodeType || \"TSLiteralType\" === nodeType || \"TSExpressionWithTypeArguments\" === nodeType || \"TSImportType\" === nodeType) {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isTSBaseType(node, opts) {\n if (!node) return false;\n const nodeType = node.type;\n\n if (\"TSAnyKeyword\" === nodeType || \"TSBooleanKeyword\" === nodeType || \"TSBigIntKeyword\" === nodeType || \"TSIntrinsicKeyword\" === nodeType || \"TSNeverKeyword\" === nodeType || \"TSNullKeyword\" === nodeType || \"TSNumberKeyword\" === nodeType || \"TSObjectKeyword\" === nodeType || \"TSStringKeyword\" === nodeType || \"TSSymbolKeyword\" === nodeType || \"TSUndefinedKeyword\" === nodeType || \"TSUnknownKeyword\" === nodeType || \"TSVoidKeyword\" === nodeType || \"TSThisType\" === nodeType || \"TSLiteralType\" === nodeType) {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isNumberLiteral(node, opts) {\n console.trace(\"The node type NumberLiteral has been renamed to NumericLiteral\");\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"NumberLiteral\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isRegexLiteral(node, opts) {\n console.trace(\"The node type RegexLiteral has been renamed to RegExpLiteral\");\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"RegexLiteral\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isRestProperty(node, opts) {\n console.trace(\"The node type RestProperty has been renamed to RestElement\");\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"RestProperty\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}\n\nfunction isSpreadProperty(node, opts) {\n console.trace(\"The node type SpreadProperty has been renamed to SpreadElement\");\n if (!node) return false;\n const nodeType = node.type;\n\n if (nodeType === \"SpreadProperty\") {\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n }\n\n return false;\n}","var check = function (it) {\n return it && it.Math == Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n // eslint-disable-next-line es/no-global-this -- safe\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n // eslint-disable-next-line no-restricted-globals -- safe\n check(typeof self == 'object' && self) ||\n check(typeof global == 'object' && global) ||\n // eslint-disable-next-line no-new-func -- fallback\n (function () { return this; })() || Function('return this')();\n","const debug = require('../internal/debug')\nconst { MAX_LENGTH, MAX_SAFE_INTEGER } = require('../internal/constants')\nconst { re, t } = require('../internal/re')\n\nconst parseOptions = require('../internal/parse-options')\nconst { compareIdentifiers } = require('../internal/identifiers')\nclass SemVer {\n constructor (version, options) {\n options = parseOptions(options)\n\n if (version instanceof SemVer) {\n if (version.loose === !!options.loose &&\n version.includePrerelease === !!options.includePrerelease) {\n return version\n } else {\n version = version.version\n }\n } else if (typeof version !== 'string') {\n throw new TypeError(`Invalid Version: ${version}`)\n }\n\n if (version.length > MAX_LENGTH) {\n throw new TypeError(\n `version is longer than ${MAX_LENGTH} characters`\n )\n }\n\n debug('SemVer', version, options)\n this.options = options\n this.loose = !!options.loose\n // this isn't actually relevant for versions, but keep it so that we\n // don't run into trouble passing this.options around.\n this.includePrerelease = !!options.includePrerelease\n\n const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL])\n\n if (!m) {\n throw new TypeError(`Invalid Version: ${version}`)\n }\n\n this.raw = version\n\n // these are actually numbers\n this.major = +m[1]\n this.minor = +m[2]\n this.patch = +m[3]\n\n if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n throw new TypeError('Invalid major version')\n }\n\n if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n throw new TypeError('Invalid minor version')\n }\n\n if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n throw new TypeError('Invalid patch version')\n }\n\n // numberify any prerelease numeric ids\n if (!m[4]) {\n this.prerelease = []\n } else {\n this.prerelease = m[4].split('.').map((id) => {\n if (/^[0-9]+$/.test(id)) {\n const num = +id\n if (num >= 0 && num < MAX_SAFE_INTEGER) {\n return num\n }\n }\n return id\n })\n }\n\n this.build = m[5] ? m[5].split('.') : []\n this.format()\n }\n\n format () {\n this.version = `${this.major}.${this.minor}.${this.patch}`\n if (this.prerelease.length) {\n this.version += `-${this.prerelease.join('.')}`\n }\n return this.version\n }\n\n toString () {\n return this.version\n }\n\n compare (other) {\n debug('SemVer.compare', this.version, this.options, other)\n if (!(other instanceof SemVer)) {\n if (typeof other === 'string' && other === this.version) {\n return 0\n }\n other = new SemVer(other, this.options)\n }\n\n if (other.version === this.version) {\n return 0\n }\n\n return this.compareMain(other) || this.comparePre(other)\n }\n\n compareMain (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n return (\n compareIdentifiers(this.major, other.major) ||\n compareIdentifiers(this.minor, other.minor) ||\n compareIdentifiers(this.patch, other.patch)\n )\n }\n\n comparePre (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n // NOT having a prerelease is > having one\n if (this.prerelease.length && !other.prerelease.length) {\n return -1\n } else if (!this.prerelease.length && other.prerelease.length) {\n return 1\n } else if (!this.prerelease.length && !other.prerelease.length) {\n return 0\n }\n\n let i = 0\n do {\n const a = this.prerelease[i]\n const b = other.prerelease[i]\n debug('prerelease compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n compareBuild (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n let i = 0\n do {\n const a = this.build[i]\n const b = other.build[i]\n debug('prerelease compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n // preminor will bump the version up to the next minor release, and immediately\n // down to pre-release. premajor and prepatch work the same way.\n inc (release, identifier) {\n switch (release) {\n case 'premajor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor = 0\n this.major++\n this.inc('pre', identifier)\n break\n case 'preminor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor++\n this.inc('pre', identifier)\n break\n case 'prepatch':\n // If this is already a prerelease, it will bump to the next version\n // drop any prereleases that might already exist, since they are not\n // relevant at this point.\n this.prerelease.length = 0\n this.inc('patch', identifier)\n this.inc('pre', identifier)\n break\n // If the input is a non-prerelease version, this acts the same as\n // prepatch.\n case 'prerelease':\n if (this.prerelease.length === 0) {\n this.inc('patch', identifier)\n }\n this.inc('pre', identifier)\n break\n\n case 'major':\n // If this is a pre-major version, bump up to the same major version.\n // Otherwise increment major.\n // 1.0.0-5 bumps to 1.0.0\n // 1.1.0 bumps to 2.0.0\n if (\n this.minor !== 0 ||\n this.patch !== 0 ||\n this.prerelease.length === 0\n ) {\n this.major++\n }\n this.minor = 0\n this.patch = 0\n this.prerelease = []\n break\n case 'minor':\n // If this is a pre-minor version, bump up to the same minor version.\n // Otherwise increment minor.\n // 1.2.0-5 bumps to 1.2.0\n // 1.2.1 bumps to 1.3.0\n if (this.patch !== 0 || this.prerelease.length === 0) {\n this.minor++\n }\n this.patch = 0\n this.prerelease = []\n break\n case 'patch':\n // If this is not a pre-release version, it will increment the patch.\n // If it is a pre-release it will bump up to the same patch version.\n // 1.2.0-5 patches to 1.2.0\n // 1.2.0 patches to 1.2.1\n if (this.prerelease.length === 0) {\n this.patch++\n }\n this.prerelease = []\n break\n // This probably shouldn't be used publicly.\n // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.\n case 'pre':\n if (this.prerelease.length === 0) {\n this.prerelease = [0]\n } else {\n let i = this.prerelease.length\n while (--i >= 0) {\n if (typeof this.prerelease[i] === 'number') {\n this.prerelease[i]++\n i = -2\n }\n }\n if (i === -1) {\n // didn't increment anything\n this.prerelease.push(0)\n }\n }\n if (identifier) {\n // 1.2.0-beta.1 bumps to 1.2.0-beta.2,\n // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0\n if (this.prerelease[0] === identifier) {\n if (isNaN(this.prerelease[1])) {\n this.prerelease = [identifier, 0]\n }\n } else {\n this.prerelease = [identifier, 0]\n }\n }\n break\n\n default:\n throw new Error(`invalid increment argument: ${release}`)\n }\n this.format()\n this.raw = this.version\n return this\n }\n}\n\nmodule.exports = SemVer\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.declare = declare;\n\nfunction declare(builder) {\n return (api, options, dirname) => {\n var _clonedApi2;\n\n let clonedApi;\n\n for (const name of Object.keys(apiPolyfills)) {\n var _clonedApi;\n\n if (api[name]) continue;\n clonedApi = (_clonedApi = clonedApi) != null ? _clonedApi : copyApiObject(api);\n clonedApi[name] = apiPolyfills[name](clonedApi);\n }\n\n return builder((_clonedApi2 = clonedApi) != null ? _clonedApi2 : api, options || {}, dirname);\n };\n}\n\nconst apiPolyfills = {\n assertVersion: api => range => {\n throwVersionError(range, api.version);\n },\n targets: () => () => {\n return {};\n },\n assumption: () => () => {}\n};\n\nfunction copyApiObject(api) {\n let proto = null;\n\n if (typeof api.version === \"string\" && /^7\\./.test(api.version)) {\n proto = Object.getPrototypeOf(api);\n\n if (proto && (!has(proto, \"version\") || !has(proto, \"transform\") || !has(proto, \"template\") || !has(proto, \"types\"))) {\n proto = null;\n }\n }\n\n return Object.assign({}, proto, api);\n}\n\nfunction has(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\n\nfunction throwVersionError(range, version) {\n if (typeof range === \"number\") {\n if (!Number.isInteger(range)) {\n throw new Error(\"Expected string or integer value.\");\n }\n\n range = `^${range}.0.0-0`;\n }\n\n if (typeof range !== \"string\") {\n throw new Error(\"Expected string or integer value.\");\n }\n\n const limit = Error.stackTraceLimit;\n\n if (typeof limit === \"number\" && limit < 25) {\n Error.stackTraceLimit = 25;\n }\n\n let err;\n\n if (version.slice(0, 2) === \"7.\") {\n err = new Error(`Requires Babel \"^7.0.0-beta.41\", but was loaded with \"${version}\". ` + `You'll need to update your @babel/core version.`);\n } else {\n err = new Error(`Requires Babel \"${range}\", but was loaded with \"${version}\". ` + `If you are sure you have a compatible version of @babel/core, ` + `it is likely that something in your build process is loading the ` + `wrong version. Inspect the stack trace of this error to look for ` + `the first entry that doesn't mention \"@babel/core\" or \"babel-core\" ` + `to see what is calling Babel.`);\n }\n\n if (typeof limit === \"number\") {\n Error.stackTraceLimit = limit;\n }\n\n throw Object.assign(err, {\n code: \"BABEL_VERSION_UNSUPPORTED\",\n version,\n range\n });\n}","\"use strict\";\n\nexports.__esModule = true;\nexports.UNIVERSAL = exports.ATTRIBUTE = exports.CLASS = exports.COMBINATOR = exports.COMMENT = exports.ID = exports.NESTING = exports.PSEUDO = exports.ROOT = exports.SELECTOR = exports.STRING = exports.TAG = void 0;\nvar TAG = 'tag';\nexports.TAG = TAG;\nvar STRING = 'string';\nexports.STRING = STRING;\nvar SELECTOR = 'selector';\nexports.SELECTOR = SELECTOR;\nvar ROOT = 'root';\nexports.ROOT = ROOT;\nvar PSEUDO = 'pseudo';\nexports.PSEUDO = PSEUDO;\nvar NESTING = 'nesting';\nexports.NESTING = NESTING;\nvar ID = 'id';\nexports.ID = ID;\nvar COMMENT = 'comment';\nexports.COMMENT = COMMENT;\nvar COMBINATOR = 'combinator';\nexports.COMBINATOR = COMBINATOR;\nvar CLASS = 'class';\nexports.CLASS = CLASS;\nvar ATTRIBUTE = 'attribute';\nexports.ATTRIBUTE = ATTRIBUTE;\nvar UNIVERSAL = 'universal';\nexports.UNIVERSAL = UNIVERSAL;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.arrayExpression = arrayExpression;\nexports.assignmentExpression = assignmentExpression;\nexports.binaryExpression = binaryExpression;\nexports.interpreterDirective = interpreterDirective;\nexports.directive = directive;\nexports.directiveLiteral = directiveLiteral;\nexports.blockStatement = blockStatement;\nexports.breakStatement = breakStatement;\nexports.callExpression = callExpression;\nexports.catchClause = catchClause;\nexports.conditionalExpression = conditionalExpression;\nexports.continueStatement = continueStatement;\nexports.debuggerStatement = debuggerStatement;\nexports.doWhileStatement = doWhileStatement;\nexports.emptyStatement = emptyStatement;\nexports.expressionStatement = expressionStatement;\nexports.file = file;\nexports.forInStatement = forInStatement;\nexports.forStatement = forStatement;\nexports.functionDeclaration = functionDeclaration;\nexports.functionExpression = functionExpression;\nexports.identifier = identifier;\nexports.ifStatement = ifStatement;\nexports.labeledStatement = labeledStatement;\nexports.stringLiteral = stringLiteral;\nexports.numericLiteral = numericLiteral;\nexports.nullLiteral = nullLiteral;\nexports.booleanLiteral = booleanLiteral;\nexports.regExpLiteral = regExpLiteral;\nexports.logicalExpression = logicalExpression;\nexports.memberExpression = memberExpression;\nexports.newExpression = newExpression;\nexports.program = program;\nexports.objectExpression = objectExpression;\nexports.objectMethod = objectMethod;\nexports.objectProperty = objectProperty;\nexports.restElement = restElement;\nexports.returnStatement = returnStatement;\nexports.sequenceExpression = sequenceExpression;\nexports.parenthesizedExpression = parenthesizedExpression;\nexports.switchCase = switchCase;\nexports.switchStatement = switchStatement;\nexports.thisExpression = thisExpression;\nexports.throwStatement = throwStatement;\nexports.tryStatement = tryStatement;\nexports.unaryExpression = unaryExpression;\nexports.updateExpression = updateExpression;\nexports.variableDeclaration = variableDeclaration;\nexports.variableDeclarator = variableDeclarator;\nexports.whileStatement = whileStatement;\nexports.withStatement = withStatement;\nexports.assignmentPattern = assignmentPattern;\nexports.arrayPattern = arrayPattern;\nexports.arrowFunctionExpression = arrowFunctionExpression;\nexports.classBody = classBody;\nexports.classExpression = classExpression;\nexports.classDeclaration = classDeclaration;\nexports.exportAllDeclaration = exportAllDeclaration;\nexports.exportDefaultDeclaration = exportDefaultDeclaration;\nexports.exportNamedDeclaration = exportNamedDeclaration;\nexports.exportSpecifier = exportSpecifier;\nexports.forOfStatement = forOfStatement;\nexports.importDeclaration = importDeclaration;\nexports.importDefaultSpecifier = importDefaultSpecifier;\nexports.importNamespaceSpecifier = importNamespaceSpecifier;\nexports.importSpecifier = importSpecifier;\nexports.metaProperty = metaProperty;\nexports.classMethod = classMethod;\nexports.objectPattern = objectPattern;\nexports.spreadElement = spreadElement;\nexports.super = _super;\nexports.taggedTemplateExpression = taggedTemplateExpression;\nexports.templateElement = templateElement;\nexports.templateLiteral = templateLiteral;\nexports.yieldExpression = yieldExpression;\nexports.awaitExpression = awaitExpression;\nexports.import = _import;\nexports.bigIntLiteral = bigIntLiteral;\nexports.exportNamespaceSpecifier = exportNamespaceSpecifier;\nexports.optionalMemberExpression = optionalMemberExpression;\nexports.optionalCallExpression = optionalCallExpression;\nexports.anyTypeAnnotation = anyTypeAnnotation;\nexports.arrayTypeAnnotation = arrayTypeAnnotation;\nexports.booleanTypeAnnotation = booleanTypeAnnotation;\nexports.booleanLiteralTypeAnnotation = booleanLiteralTypeAnnotation;\nexports.nullLiteralTypeAnnotation = nullLiteralTypeAnnotation;\nexports.classImplements = classImplements;\nexports.declareClass = declareClass;\nexports.declareFunction = declareFunction;\nexports.declareInterface = declareInterface;\nexports.declareModule = declareModule;\nexports.declareModuleExports = declareModuleExports;\nexports.declareTypeAlias = declareTypeAlias;\nexports.declareOpaqueType = declareOpaqueType;\nexports.declareVariable = declareVariable;\nexports.declareExportDeclaration = declareExportDeclaration;\nexports.declareExportAllDeclaration = declareExportAllDeclaration;\nexports.declaredPredicate = declaredPredicate;\nexports.existsTypeAnnotation = existsTypeAnnotation;\nexports.functionTypeAnnotation = functionTypeAnnotation;\nexports.functionTypeParam = functionTypeParam;\nexports.genericTypeAnnotation = genericTypeAnnotation;\nexports.inferredPredicate = inferredPredicate;\nexports.interfaceExtends = interfaceExtends;\nexports.interfaceDeclaration = interfaceDeclaration;\nexports.interfaceTypeAnnotation = interfaceTypeAnnotation;\nexports.intersectionTypeAnnotation = intersectionTypeAnnotation;\nexports.mixedTypeAnnotation = mixedTypeAnnotation;\nexports.emptyTypeAnnotation = emptyTypeAnnotation;\nexports.nullableTypeAnnotation = nullableTypeAnnotation;\nexports.numberLiteralTypeAnnotation = numberLiteralTypeAnnotation;\nexports.numberTypeAnnotation = numberTypeAnnotation;\nexports.objectTypeAnnotation = objectTypeAnnotation;\nexports.objectTypeInternalSlot = objectTypeInternalSlot;\nexports.objectTypeCallProperty = objectTypeCallProperty;\nexports.objectTypeIndexer = objectTypeIndexer;\nexports.objectTypeProperty = objectTypeProperty;\nexports.objectTypeSpreadProperty = objectTypeSpreadProperty;\nexports.opaqueType = opaqueType;\nexports.qualifiedTypeIdentifier = qualifiedTypeIdentifier;\nexports.stringLiteralTypeAnnotation = stringLiteralTypeAnnotation;\nexports.stringTypeAnnotation = stringTypeAnnotation;\nexports.symbolTypeAnnotation = symbolTypeAnnotation;\nexports.thisTypeAnnotation = thisTypeAnnotation;\nexports.tupleTypeAnnotation = tupleTypeAnnotation;\nexports.typeofTypeAnnotation = typeofTypeAnnotation;\nexports.typeAlias = typeAlias;\nexports.typeAnnotation = typeAnnotation;\nexports.typeCastExpression = typeCastExpression;\nexports.typeParameter = typeParameter;\nexports.typeParameterDeclaration = typeParameterDeclaration;\nexports.typeParameterInstantiation = typeParameterInstantiation;\nexports.unionTypeAnnotation = unionTypeAnnotation;\nexports.variance = variance;\nexports.voidTypeAnnotation = voidTypeAnnotation;\nexports.enumDeclaration = enumDeclaration;\nexports.enumBooleanBody = enumBooleanBody;\nexports.enumNumberBody = enumNumberBody;\nexports.enumStringBody = enumStringBody;\nexports.enumSymbolBody = enumSymbolBody;\nexports.enumBooleanMember = enumBooleanMember;\nexports.enumNumberMember = enumNumberMember;\nexports.enumStringMember = enumStringMember;\nexports.enumDefaultedMember = enumDefaultedMember;\nexports.indexedAccessType = indexedAccessType;\nexports.optionalIndexedAccessType = optionalIndexedAccessType;\nexports.jSXAttribute = exports.jsxAttribute = jsxAttribute;\nexports.jSXClosingElement = exports.jsxClosingElement = jsxClosingElement;\nexports.jSXElement = exports.jsxElement = jsxElement;\nexports.jSXEmptyExpression = exports.jsxEmptyExpression = jsxEmptyExpression;\nexports.jSXExpressionContainer = exports.jsxExpressionContainer = jsxExpressionContainer;\nexports.jSXSpreadChild = exports.jsxSpreadChild = jsxSpreadChild;\nexports.jSXIdentifier = exports.jsxIdentifier = jsxIdentifier;\nexports.jSXMemberExpression = exports.jsxMemberExpression = jsxMemberExpression;\nexports.jSXNamespacedName = exports.jsxNamespacedName = jsxNamespacedName;\nexports.jSXOpeningElement = exports.jsxOpeningElement = jsxOpeningElement;\nexports.jSXSpreadAttribute = exports.jsxSpreadAttribute = jsxSpreadAttribute;\nexports.jSXText = exports.jsxText = jsxText;\nexports.jSXFragment = exports.jsxFragment = jsxFragment;\nexports.jSXOpeningFragment = exports.jsxOpeningFragment = jsxOpeningFragment;\nexports.jSXClosingFragment = exports.jsxClosingFragment = jsxClosingFragment;\nexports.noop = noop;\nexports.placeholder = placeholder;\nexports.v8IntrinsicIdentifier = v8IntrinsicIdentifier;\nexports.argumentPlaceholder = argumentPlaceholder;\nexports.bindExpression = bindExpression;\nexports.classProperty = classProperty;\nexports.pipelineTopicExpression = pipelineTopicExpression;\nexports.pipelineBareFunction = pipelineBareFunction;\nexports.pipelinePrimaryTopicReference = pipelinePrimaryTopicReference;\nexports.classPrivateProperty = classPrivateProperty;\nexports.classPrivateMethod = classPrivateMethod;\nexports.importAttribute = importAttribute;\nexports.decorator = decorator;\nexports.doExpression = doExpression;\nexports.exportDefaultSpecifier = exportDefaultSpecifier;\nexports.privateName = privateName;\nexports.recordExpression = recordExpression;\nexports.tupleExpression = tupleExpression;\nexports.decimalLiteral = decimalLiteral;\nexports.staticBlock = staticBlock;\nexports.moduleExpression = moduleExpression;\nexports.tSParameterProperty = exports.tsParameterProperty = tsParameterProperty;\nexports.tSDeclareFunction = exports.tsDeclareFunction = tsDeclareFunction;\nexports.tSDeclareMethod = exports.tsDeclareMethod = tsDeclareMethod;\nexports.tSQualifiedName = exports.tsQualifiedName = tsQualifiedName;\nexports.tSCallSignatureDeclaration = exports.tsCallSignatureDeclaration = tsCallSignatureDeclaration;\nexports.tSConstructSignatureDeclaration = exports.tsConstructSignatureDeclaration = tsConstructSignatureDeclaration;\nexports.tSPropertySignature = exports.tsPropertySignature = tsPropertySignature;\nexports.tSMethodSignature = exports.tsMethodSignature = tsMethodSignature;\nexports.tSIndexSignature = exports.tsIndexSignature = tsIndexSignature;\nexports.tSAnyKeyword = exports.tsAnyKeyword = tsAnyKeyword;\nexports.tSBooleanKeyword = exports.tsBooleanKeyword = tsBooleanKeyword;\nexports.tSBigIntKeyword = exports.tsBigIntKeyword = tsBigIntKeyword;\nexports.tSIntrinsicKeyword = exports.tsIntrinsicKeyword = tsIntrinsicKeyword;\nexports.tSNeverKeyword = exports.tsNeverKeyword = tsNeverKeyword;\nexports.tSNullKeyword = exports.tsNullKeyword = tsNullKeyword;\nexports.tSNumberKeyword = exports.tsNumberKeyword = tsNumberKeyword;\nexports.tSObjectKeyword = exports.tsObjectKeyword = tsObjectKeyword;\nexports.tSStringKeyword = exports.tsStringKeyword = tsStringKeyword;\nexports.tSSymbolKeyword = exports.tsSymbolKeyword = tsSymbolKeyword;\nexports.tSUndefinedKeyword = exports.tsUndefinedKeyword = tsUndefinedKeyword;\nexports.tSUnknownKeyword = exports.tsUnknownKeyword = tsUnknownKeyword;\nexports.tSVoidKeyword = exports.tsVoidKeyword = tsVoidKeyword;\nexports.tSThisType = exports.tsThisType = tsThisType;\nexports.tSFunctionType = exports.tsFunctionType = tsFunctionType;\nexports.tSConstructorType = exports.tsConstructorType = tsConstructorType;\nexports.tSTypeReference = exports.tsTypeReference = tsTypeReference;\nexports.tSTypePredicate = exports.tsTypePredicate = tsTypePredicate;\nexports.tSTypeQuery = exports.tsTypeQuery = tsTypeQuery;\nexports.tSTypeLiteral = exports.tsTypeLiteral = tsTypeLiteral;\nexports.tSArrayType = exports.tsArrayType = tsArrayType;\nexports.tSTupleType = exports.tsTupleType = tsTupleType;\nexports.tSOptionalType = exports.tsOptionalType = tsOptionalType;\nexports.tSRestType = exports.tsRestType = tsRestType;\nexports.tSNamedTupleMember = exports.tsNamedTupleMember = tsNamedTupleMember;\nexports.tSUnionType = exports.tsUnionType = tsUnionType;\nexports.tSIntersectionType = exports.tsIntersectionType = tsIntersectionType;\nexports.tSConditionalType = exports.tsConditionalType = tsConditionalType;\nexports.tSInferType = exports.tsInferType = tsInferType;\nexports.tSParenthesizedType = exports.tsParenthesizedType = tsParenthesizedType;\nexports.tSTypeOperator = exports.tsTypeOperator = tsTypeOperator;\nexports.tSIndexedAccessType = exports.tsIndexedAccessType = tsIndexedAccessType;\nexports.tSMappedType = exports.tsMappedType = tsMappedType;\nexports.tSLiteralType = exports.tsLiteralType = tsLiteralType;\nexports.tSExpressionWithTypeArguments = exports.tsExpressionWithTypeArguments = tsExpressionWithTypeArguments;\nexports.tSInterfaceDeclaration = exports.tsInterfaceDeclaration = tsInterfaceDeclaration;\nexports.tSInterfaceBody = exports.tsInterfaceBody = tsInterfaceBody;\nexports.tSTypeAliasDeclaration = exports.tsTypeAliasDeclaration = tsTypeAliasDeclaration;\nexports.tSAsExpression = exports.tsAsExpression = tsAsExpression;\nexports.tSTypeAssertion = exports.tsTypeAssertion = tsTypeAssertion;\nexports.tSEnumDeclaration = exports.tsEnumDeclaration = tsEnumDeclaration;\nexports.tSEnumMember = exports.tsEnumMember = tsEnumMember;\nexports.tSModuleDeclaration = exports.tsModuleDeclaration = tsModuleDeclaration;\nexports.tSModuleBlock = exports.tsModuleBlock = tsModuleBlock;\nexports.tSImportType = exports.tsImportType = tsImportType;\nexports.tSImportEqualsDeclaration = exports.tsImportEqualsDeclaration = tsImportEqualsDeclaration;\nexports.tSExternalModuleReference = exports.tsExternalModuleReference = tsExternalModuleReference;\nexports.tSNonNullExpression = exports.tsNonNullExpression = tsNonNullExpression;\nexports.tSExportAssignment = exports.tsExportAssignment = tsExportAssignment;\nexports.tSNamespaceExportDeclaration = exports.tsNamespaceExportDeclaration = tsNamespaceExportDeclaration;\nexports.tSTypeAnnotation = exports.tsTypeAnnotation = tsTypeAnnotation;\nexports.tSTypeParameterInstantiation = exports.tsTypeParameterInstantiation = tsTypeParameterInstantiation;\nexports.tSTypeParameterDeclaration = exports.tsTypeParameterDeclaration = tsTypeParameterDeclaration;\nexports.tSTypeParameter = exports.tsTypeParameter = tsTypeParameter;\nexports.numberLiteral = NumberLiteral;\nexports.regexLiteral = RegexLiteral;\nexports.restProperty = RestProperty;\nexports.spreadProperty = SpreadProperty;\n\nvar _builder = require(\"../builder\");\n\nfunction arrayExpression(elements) {\n return (0, _builder.default)(\"ArrayExpression\", ...arguments);\n}\n\nfunction assignmentExpression(operator, left, right) {\n return (0, _builder.default)(\"AssignmentExpression\", ...arguments);\n}\n\nfunction binaryExpression(operator, left, right) {\n return (0, _builder.default)(\"BinaryExpression\", ...arguments);\n}\n\nfunction interpreterDirective(value) {\n return (0, _builder.default)(\"InterpreterDirective\", ...arguments);\n}\n\nfunction directive(value) {\n return (0, _builder.default)(\"Directive\", ...arguments);\n}\n\nfunction directiveLiteral(value) {\n return (0, _builder.default)(\"DirectiveLiteral\", ...arguments);\n}\n\nfunction blockStatement(body, directives) {\n return (0, _builder.default)(\"BlockStatement\", ...arguments);\n}\n\nfunction breakStatement(label) {\n return (0, _builder.default)(\"BreakStatement\", ...arguments);\n}\n\nfunction callExpression(callee, _arguments) {\n return (0, _builder.default)(\"CallExpression\", ...arguments);\n}\n\nfunction catchClause(param, body) {\n return (0, _builder.default)(\"CatchClause\", ...arguments);\n}\n\nfunction conditionalExpression(test, consequent, alternate) {\n return (0, _builder.default)(\"ConditionalExpression\", ...arguments);\n}\n\nfunction continueStatement(label) {\n return (0, _builder.default)(\"ContinueStatement\", ...arguments);\n}\n\nfunction debuggerStatement() {\n return (0, _builder.default)(\"DebuggerStatement\", ...arguments);\n}\n\nfunction doWhileStatement(test, body) {\n return (0, _builder.default)(\"DoWhileStatement\", ...arguments);\n}\n\nfunction emptyStatement() {\n return (0, _builder.default)(\"EmptyStatement\", ...arguments);\n}\n\nfunction expressionStatement(expression) {\n return (0, _builder.default)(\"ExpressionStatement\", ...arguments);\n}\n\nfunction file(program, comments, tokens) {\n return (0, _builder.default)(\"File\", ...arguments);\n}\n\nfunction forInStatement(left, right, body) {\n return (0, _builder.default)(\"ForInStatement\", ...arguments);\n}\n\nfunction forStatement(init, test, update, body) {\n return (0, _builder.default)(\"ForStatement\", ...arguments);\n}\n\nfunction functionDeclaration(id, params, body, generator, async) {\n return (0, _builder.default)(\"FunctionDeclaration\", ...arguments);\n}\n\nfunction functionExpression(id, params, body, generator, async) {\n return (0, _builder.default)(\"FunctionExpression\", ...arguments);\n}\n\nfunction identifier(name) {\n return (0, _builder.default)(\"Identifier\", ...arguments);\n}\n\nfunction ifStatement(test, consequent, alternate) {\n return (0, _builder.default)(\"IfStatement\", ...arguments);\n}\n\nfunction labeledStatement(label, body) {\n return (0, _builder.default)(\"LabeledStatement\", ...arguments);\n}\n\nfunction stringLiteral(value) {\n return (0, _builder.default)(\"StringLiteral\", ...arguments);\n}\n\nfunction numericLiteral(value) {\n return (0, _builder.default)(\"NumericLiteral\", ...arguments);\n}\n\nfunction nullLiteral() {\n return (0, _builder.default)(\"NullLiteral\", ...arguments);\n}\n\nfunction booleanLiteral(value) {\n return (0, _builder.default)(\"BooleanLiteral\", ...arguments);\n}\n\nfunction regExpLiteral(pattern, flags) {\n return (0, _builder.default)(\"RegExpLiteral\", ...arguments);\n}\n\nfunction logicalExpression(operator, left, right) {\n return (0, _builder.default)(\"LogicalExpression\", ...arguments);\n}\n\nfunction memberExpression(object, property, computed, optional) {\n return (0, _builder.default)(\"MemberExpression\", ...arguments);\n}\n\nfunction newExpression(callee, _arguments) {\n return (0, _builder.default)(\"NewExpression\", ...arguments);\n}\n\nfunction program(body, directives, sourceType, interpreter) {\n return (0, _builder.default)(\"Program\", ...arguments);\n}\n\nfunction objectExpression(properties) {\n return (0, _builder.default)(\"ObjectExpression\", ...arguments);\n}\n\nfunction objectMethod(kind, key, params, body, computed, generator, async) {\n return (0, _builder.default)(\"ObjectMethod\", ...arguments);\n}\n\nfunction objectProperty(key, value, computed, shorthand, decorators) {\n return (0, _builder.default)(\"ObjectProperty\", ...arguments);\n}\n\nfunction restElement(argument) {\n return (0, _builder.default)(\"RestElement\", ...arguments);\n}\n\nfunction returnStatement(argument) {\n return (0, _builder.default)(\"ReturnStatement\", ...arguments);\n}\n\nfunction sequenceExpression(expressions) {\n return (0, _builder.default)(\"SequenceExpression\", ...arguments);\n}\n\nfunction parenthesizedExpression(expression) {\n return (0, _builder.default)(\"ParenthesizedExpression\", ...arguments);\n}\n\nfunction switchCase(test, consequent) {\n return (0, _builder.default)(\"SwitchCase\", ...arguments);\n}\n\nfunction switchStatement(discriminant, cases) {\n return (0, _builder.default)(\"SwitchStatement\", ...arguments);\n}\n\nfunction thisExpression() {\n return (0, _builder.default)(\"ThisExpression\", ...arguments);\n}\n\nfunction throwStatement(argument) {\n return (0, _builder.default)(\"ThrowStatement\", ...arguments);\n}\n\nfunction tryStatement(block, handler, finalizer) {\n return (0, _builder.default)(\"TryStatement\", ...arguments);\n}\n\nfunction unaryExpression(operator, argument, prefix) {\n return (0, _builder.default)(\"UnaryExpression\", ...arguments);\n}\n\nfunction updateExpression(operator, argument, prefix) {\n return (0, _builder.default)(\"UpdateExpression\", ...arguments);\n}\n\nfunction variableDeclaration(kind, declarations) {\n return (0, _builder.default)(\"VariableDeclaration\", ...arguments);\n}\n\nfunction variableDeclarator(id, init) {\n return (0, _builder.default)(\"VariableDeclarator\", ...arguments);\n}\n\nfunction whileStatement(test, body) {\n return (0, _builder.default)(\"WhileStatement\", ...arguments);\n}\n\nfunction withStatement(object, body) {\n return (0, _builder.default)(\"WithStatement\", ...arguments);\n}\n\nfunction assignmentPattern(left, right) {\n return (0, _builder.default)(\"AssignmentPattern\", ...arguments);\n}\n\nfunction arrayPattern(elements) {\n return (0, _builder.default)(\"ArrayPattern\", ...arguments);\n}\n\nfunction arrowFunctionExpression(params, body, async) {\n return (0, _builder.default)(\"ArrowFunctionExpression\", ...arguments);\n}\n\nfunction classBody(body) {\n return (0, _builder.default)(\"ClassBody\", ...arguments);\n}\n\nfunction classExpression(id, superClass, body, decorators) {\n return (0, _builder.default)(\"ClassExpression\", ...arguments);\n}\n\nfunction classDeclaration(id, superClass, body, decorators) {\n return (0, _builder.default)(\"ClassDeclaration\", ...arguments);\n}\n\nfunction exportAllDeclaration(source) {\n return (0, _builder.default)(\"ExportAllDeclaration\", ...arguments);\n}\n\nfunction exportDefaultDeclaration(declaration) {\n return (0, _builder.default)(\"ExportDefaultDeclaration\", ...arguments);\n}\n\nfunction exportNamedDeclaration(declaration, specifiers, source) {\n return (0, _builder.default)(\"ExportNamedDeclaration\", ...arguments);\n}\n\nfunction exportSpecifier(local, exported) {\n return (0, _builder.default)(\"ExportSpecifier\", ...arguments);\n}\n\nfunction forOfStatement(left, right, body, _await) {\n return (0, _builder.default)(\"ForOfStatement\", ...arguments);\n}\n\nfunction importDeclaration(specifiers, source) {\n return (0, _builder.default)(\"ImportDeclaration\", ...arguments);\n}\n\nfunction importDefaultSpecifier(local) {\n return (0, _builder.default)(\"ImportDefaultSpecifier\", ...arguments);\n}\n\nfunction importNamespaceSpecifier(local) {\n return (0, _builder.default)(\"ImportNamespaceSpecifier\", ...arguments);\n}\n\nfunction importSpecifier(local, imported) {\n return (0, _builder.default)(\"ImportSpecifier\", ...arguments);\n}\n\nfunction metaProperty(meta, property) {\n return (0, _builder.default)(\"MetaProperty\", ...arguments);\n}\n\nfunction classMethod(kind, key, params, body, computed, _static, generator, async) {\n return (0, _builder.default)(\"ClassMethod\", ...arguments);\n}\n\nfunction objectPattern(properties) {\n return (0, _builder.default)(\"ObjectPattern\", ...arguments);\n}\n\nfunction spreadElement(argument) {\n return (0, _builder.default)(\"SpreadElement\", ...arguments);\n}\n\nfunction _super() {\n return (0, _builder.default)(\"Super\", ...arguments);\n}\n\nfunction taggedTemplateExpression(tag, quasi) {\n return (0, _builder.default)(\"TaggedTemplateExpression\", ...arguments);\n}\n\nfunction templateElement(value, tail) {\n return (0, _builder.default)(\"TemplateElement\", ...arguments);\n}\n\nfunction templateLiteral(quasis, expressions) {\n return (0, _builder.default)(\"TemplateLiteral\", ...arguments);\n}\n\nfunction yieldExpression(argument, delegate) {\n return (0, _builder.default)(\"YieldExpression\", ...arguments);\n}\n\nfunction awaitExpression(argument) {\n return (0, _builder.default)(\"AwaitExpression\", ...arguments);\n}\n\nfunction _import() {\n return (0, _builder.default)(\"Import\", ...arguments);\n}\n\nfunction bigIntLiteral(value) {\n return (0, _builder.default)(\"BigIntLiteral\", ...arguments);\n}\n\nfunction exportNamespaceSpecifier(exported) {\n return (0, _builder.default)(\"ExportNamespaceSpecifier\", ...arguments);\n}\n\nfunction optionalMemberExpression(object, property, computed, optional) {\n return (0, _builder.default)(\"OptionalMemberExpression\", ...arguments);\n}\n\nfunction optionalCallExpression(callee, _arguments, optional) {\n return (0, _builder.default)(\"OptionalCallExpression\", ...arguments);\n}\n\nfunction anyTypeAnnotation() {\n return (0, _builder.default)(\"AnyTypeAnnotation\", ...arguments);\n}\n\nfunction arrayTypeAnnotation(elementType) {\n return (0, _builder.default)(\"ArrayTypeAnnotation\", ...arguments);\n}\n\nfunction booleanTypeAnnotation() {\n return (0, _builder.default)(\"BooleanTypeAnnotation\", ...arguments);\n}\n\nfunction booleanLiteralTypeAnnotation(value) {\n return (0, _builder.default)(\"BooleanLiteralTypeAnnotation\", ...arguments);\n}\n\nfunction nullLiteralTypeAnnotation() {\n return (0, _builder.default)(\"NullLiteralTypeAnnotation\", ...arguments);\n}\n\nfunction classImplements(id, typeParameters) {\n return (0, _builder.default)(\"ClassImplements\", ...arguments);\n}\n\nfunction declareClass(id, typeParameters, _extends, body) {\n return (0, _builder.default)(\"DeclareClass\", ...arguments);\n}\n\nfunction declareFunction(id) {\n return (0, _builder.default)(\"DeclareFunction\", ...arguments);\n}\n\nfunction declareInterface(id, typeParameters, _extends, body) {\n return (0, _builder.default)(\"DeclareInterface\", ...arguments);\n}\n\nfunction declareModule(id, body, kind) {\n return (0, _builder.default)(\"DeclareModule\", ...arguments);\n}\n\nfunction declareModuleExports(typeAnnotation) {\n return (0, _builder.default)(\"DeclareModuleExports\", ...arguments);\n}\n\nfunction declareTypeAlias(id, typeParameters, right) {\n return (0, _builder.default)(\"DeclareTypeAlias\", ...arguments);\n}\n\nfunction declareOpaqueType(id, typeParameters, supertype) {\n return (0, _builder.default)(\"DeclareOpaqueType\", ...arguments);\n}\n\nfunction declareVariable(id) {\n return (0, _builder.default)(\"DeclareVariable\", ...arguments);\n}\n\nfunction declareExportDeclaration(declaration, specifiers, source) {\n return (0, _builder.default)(\"DeclareExportDeclaration\", ...arguments);\n}\n\nfunction declareExportAllDeclaration(source) {\n return (0, _builder.default)(\"DeclareExportAllDeclaration\", ...arguments);\n}\n\nfunction declaredPredicate(value) {\n return (0, _builder.default)(\"DeclaredPredicate\", ...arguments);\n}\n\nfunction existsTypeAnnotation() {\n return (0, _builder.default)(\"ExistsTypeAnnotation\", ...arguments);\n}\n\nfunction functionTypeAnnotation(typeParameters, params, rest, returnType) {\n return (0, _builder.default)(\"FunctionTypeAnnotation\", ...arguments);\n}\n\nfunction functionTypeParam(name, typeAnnotation) {\n return (0, _builder.default)(\"FunctionTypeParam\", ...arguments);\n}\n\nfunction genericTypeAnnotation(id, typeParameters) {\n return (0, _builder.default)(\"GenericTypeAnnotation\", ...arguments);\n}\n\nfunction inferredPredicate() {\n return (0, _builder.default)(\"InferredPredicate\", ...arguments);\n}\n\nfunction interfaceExtends(id, typeParameters) {\n return (0, _builder.default)(\"InterfaceExtends\", ...arguments);\n}\n\nfunction interfaceDeclaration(id, typeParameters, _extends, body) {\n return (0, _builder.default)(\"InterfaceDeclaration\", ...arguments);\n}\n\nfunction interfaceTypeAnnotation(_extends, body) {\n return (0, _builder.default)(\"InterfaceTypeAnnotation\", ...arguments);\n}\n\nfunction intersectionTypeAnnotation(types) {\n return (0, _builder.default)(\"IntersectionTypeAnnotation\", ...arguments);\n}\n\nfunction mixedTypeAnnotation() {\n return (0, _builder.default)(\"MixedTypeAnnotation\", ...arguments);\n}\n\nfunction emptyTypeAnnotation() {\n return (0, _builder.default)(\"EmptyTypeAnnotation\", ...arguments);\n}\n\nfunction nullableTypeAnnotation(typeAnnotation) {\n return (0, _builder.default)(\"NullableTypeAnnotation\", ...arguments);\n}\n\nfunction numberLiteralTypeAnnotation(value) {\n return (0, _builder.default)(\"NumberLiteralTypeAnnotation\", ...arguments);\n}\n\nfunction numberTypeAnnotation() {\n return (0, _builder.default)(\"NumberTypeAnnotation\", ...arguments);\n}\n\nfunction objectTypeAnnotation(properties, indexers, callProperties, internalSlots, exact) {\n return (0, _builder.default)(\"ObjectTypeAnnotation\", ...arguments);\n}\n\nfunction objectTypeInternalSlot(id, value, optional, _static, method) {\n return (0, _builder.default)(\"ObjectTypeInternalSlot\", ...arguments);\n}\n\nfunction objectTypeCallProperty(value) {\n return (0, _builder.default)(\"ObjectTypeCallProperty\", ...arguments);\n}\n\nfunction objectTypeIndexer(id, key, value, variance) {\n return (0, _builder.default)(\"ObjectTypeIndexer\", ...arguments);\n}\n\nfunction objectTypeProperty(key, value, variance) {\n return (0, _builder.default)(\"ObjectTypeProperty\", ...arguments);\n}\n\nfunction objectTypeSpreadProperty(argument) {\n return (0, _builder.default)(\"ObjectTypeSpreadProperty\", ...arguments);\n}\n\nfunction opaqueType(id, typeParameters, supertype, impltype) {\n return (0, _builder.default)(\"OpaqueType\", ...arguments);\n}\n\nfunction qualifiedTypeIdentifier(id, qualification) {\n return (0, _builder.default)(\"QualifiedTypeIdentifier\", ...arguments);\n}\n\nfunction stringLiteralTypeAnnotation(value) {\n return (0, _builder.default)(\"StringLiteralTypeAnnotation\", ...arguments);\n}\n\nfunction stringTypeAnnotation() {\n return (0, _builder.default)(\"StringTypeAnnotation\", ...arguments);\n}\n\nfunction symbolTypeAnnotation() {\n return (0, _builder.default)(\"SymbolTypeAnnotation\", ...arguments);\n}\n\nfunction thisTypeAnnotation() {\n return (0, _builder.default)(\"ThisTypeAnnotation\", ...arguments);\n}\n\nfunction tupleTypeAnnotation(types) {\n return (0, _builder.default)(\"TupleTypeAnnotation\", ...arguments);\n}\n\nfunction typeofTypeAnnotation(argument) {\n return (0, _builder.default)(\"TypeofTypeAnnotation\", ...arguments);\n}\n\nfunction typeAlias(id, typeParameters, right) {\n return (0, _builder.default)(\"TypeAlias\", ...arguments);\n}\n\nfunction typeAnnotation(typeAnnotation) {\n return (0, _builder.default)(\"TypeAnnotation\", ...arguments);\n}\n\nfunction typeCastExpression(expression, typeAnnotation) {\n return (0, _builder.default)(\"TypeCastExpression\", ...arguments);\n}\n\nfunction typeParameter(bound, _default, variance) {\n return (0, _builder.default)(\"TypeParameter\", ...arguments);\n}\n\nfunction typeParameterDeclaration(params) {\n return (0, _builder.default)(\"TypeParameterDeclaration\", ...arguments);\n}\n\nfunction typeParameterInstantiation(params) {\n return (0, _builder.default)(\"TypeParameterInstantiation\", ...arguments);\n}\n\nfunction unionTypeAnnotation(types) {\n return (0, _builder.default)(\"UnionTypeAnnotation\", ...arguments);\n}\n\nfunction variance(kind) {\n return (0, _builder.default)(\"Variance\", ...arguments);\n}\n\nfunction voidTypeAnnotation() {\n return (0, _builder.default)(\"VoidTypeAnnotation\", ...arguments);\n}\n\nfunction enumDeclaration(id, body) {\n return (0, _builder.default)(\"EnumDeclaration\", ...arguments);\n}\n\nfunction enumBooleanBody(members) {\n return (0, _builder.default)(\"EnumBooleanBody\", ...arguments);\n}\n\nfunction enumNumberBody(members) {\n return (0, _builder.default)(\"EnumNumberBody\", ...arguments);\n}\n\nfunction enumStringBody(members) {\n return (0, _builder.default)(\"EnumStringBody\", ...arguments);\n}\n\nfunction enumSymbolBody(members) {\n return (0, _builder.default)(\"EnumSymbolBody\", ...arguments);\n}\n\nfunction enumBooleanMember(id) {\n return (0, _builder.default)(\"EnumBooleanMember\", ...arguments);\n}\n\nfunction enumNumberMember(id, init) {\n return (0, _builder.default)(\"EnumNumberMember\", ...arguments);\n}\n\nfunction enumStringMember(id, init) {\n return (0, _builder.default)(\"EnumStringMember\", ...arguments);\n}\n\nfunction enumDefaultedMember(id) {\n return (0, _builder.default)(\"EnumDefaultedMember\", ...arguments);\n}\n\nfunction indexedAccessType(objectType, indexType) {\n return (0, _builder.default)(\"IndexedAccessType\", ...arguments);\n}\n\nfunction optionalIndexedAccessType(objectType, indexType) {\n return (0, _builder.default)(\"OptionalIndexedAccessType\", ...arguments);\n}\n\nfunction jsxAttribute(name, value) {\n return (0, _builder.default)(\"JSXAttribute\", ...arguments);\n}\n\nfunction jsxClosingElement(name) {\n return (0, _builder.default)(\"JSXClosingElement\", ...arguments);\n}\n\nfunction jsxElement(openingElement, closingElement, children, selfClosing) {\n return (0, _builder.default)(\"JSXElement\", ...arguments);\n}\n\nfunction jsxEmptyExpression() {\n return (0, _builder.default)(\"JSXEmptyExpression\", ...arguments);\n}\n\nfunction jsxExpressionContainer(expression) {\n return (0, _builder.default)(\"JSXExpressionContainer\", ...arguments);\n}\n\nfunction jsxSpreadChild(expression) {\n return (0, _builder.default)(\"JSXSpreadChild\", ...arguments);\n}\n\nfunction jsxIdentifier(name) {\n return (0, _builder.default)(\"JSXIdentifier\", ...arguments);\n}\n\nfunction jsxMemberExpression(object, property) {\n return (0, _builder.default)(\"JSXMemberExpression\", ...arguments);\n}\n\nfunction jsxNamespacedName(namespace, name) {\n return (0, _builder.default)(\"JSXNamespacedName\", ...arguments);\n}\n\nfunction jsxOpeningElement(name, attributes, selfClosing) {\n return (0, _builder.default)(\"JSXOpeningElement\", ...arguments);\n}\n\nfunction jsxSpreadAttribute(argument) {\n return (0, _builder.default)(\"JSXSpreadAttribute\", ...arguments);\n}\n\nfunction jsxText(value) {\n return (0, _builder.default)(\"JSXText\", ...arguments);\n}\n\nfunction jsxFragment(openingFragment, closingFragment, children) {\n return (0, _builder.default)(\"JSXFragment\", ...arguments);\n}\n\nfunction jsxOpeningFragment() {\n return (0, _builder.default)(\"JSXOpeningFragment\", ...arguments);\n}\n\nfunction jsxClosingFragment() {\n return (0, _builder.default)(\"JSXClosingFragment\", ...arguments);\n}\n\nfunction noop() {\n return (0, _builder.default)(\"Noop\", ...arguments);\n}\n\nfunction placeholder(expectedNode, name) {\n return (0, _builder.default)(\"Placeholder\", ...arguments);\n}\n\nfunction v8IntrinsicIdentifier(name) {\n return (0, _builder.default)(\"V8IntrinsicIdentifier\", ...arguments);\n}\n\nfunction argumentPlaceholder() {\n return (0, _builder.default)(\"ArgumentPlaceholder\", ...arguments);\n}\n\nfunction bindExpression(object, callee) {\n return (0, _builder.default)(\"BindExpression\", ...arguments);\n}\n\nfunction classProperty(key, value, typeAnnotation, decorators, computed, _static) {\n return (0, _builder.default)(\"ClassProperty\", ...arguments);\n}\n\nfunction pipelineTopicExpression(expression) {\n return (0, _builder.default)(\"PipelineTopicExpression\", ...arguments);\n}\n\nfunction pipelineBareFunction(callee) {\n return (0, _builder.default)(\"PipelineBareFunction\", ...arguments);\n}\n\nfunction pipelinePrimaryTopicReference() {\n return (0, _builder.default)(\"PipelinePrimaryTopicReference\", ...arguments);\n}\n\nfunction classPrivateProperty(key, value, decorators, _static) {\n return (0, _builder.default)(\"ClassPrivateProperty\", ...arguments);\n}\n\nfunction classPrivateMethod(kind, key, params, body, _static) {\n return (0, _builder.default)(\"ClassPrivateMethod\", ...arguments);\n}\n\nfunction importAttribute(key, value) {\n return (0, _builder.default)(\"ImportAttribute\", ...arguments);\n}\n\nfunction decorator(expression) {\n return (0, _builder.default)(\"Decorator\", ...arguments);\n}\n\nfunction doExpression(body, async) {\n return (0, _builder.default)(\"DoExpression\", ...arguments);\n}\n\nfunction exportDefaultSpecifier(exported) {\n return (0, _builder.default)(\"ExportDefaultSpecifier\", ...arguments);\n}\n\nfunction privateName(id) {\n return (0, _builder.default)(\"PrivateName\", ...arguments);\n}\n\nfunction recordExpression(properties) {\n return (0, _builder.default)(\"RecordExpression\", ...arguments);\n}\n\nfunction tupleExpression(elements) {\n return (0, _builder.default)(\"TupleExpression\", ...arguments);\n}\n\nfunction decimalLiteral(value) {\n return (0, _builder.default)(\"DecimalLiteral\", ...arguments);\n}\n\nfunction staticBlock(body) {\n return (0, _builder.default)(\"StaticBlock\", ...arguments);\n}\n\nfunction moduleExpression(body) {\n return (0, _builder.default)(\"ModuleExpression\", ...arguments);\n}\n\nfunction tsParameterProperty(parameter) {\n return (0, _builder.default)(\"TSParameterProperty\", ...arguments);\n}\n\nfunction tsDeclareFunction(id, typeParameters, params, returnType) {\n return (0, _builder.default)(\"TSDeclareFunction\", ...arguments);\n}\n\nfunction tsDeclareMethod(decorators, key, typeParameters, params, returnType) {\n return (0, _builder.default)(\"TSDeclareMethod\", ...arguments);\n}\n\nfunction tsQualifiedName(left, right) {\n return (0, _builder.default)(\"TSQualifiedName\", ...arguments);\n}\n\nfunction tsCallSignatureDeclaration(typeParameters, parameters, typeAnnotation) {\n return (0, _builder.default)(\"TSCallSignatureDeclaration\", ...arguments);\n}\n\nfunction tsConstructSignatureDeclaration(typeParameters, parameters, typeAnnotation) {\n return (0, _builder.default)(\"TSConstructSignatureDeclaration\", ...arguments);\n}\n\nfunction tsPropertySignature(key, typeAnnotation, initializer) {\n return (0, _builder.default)(\"TSPropertySignature\", ...arguments);\n}\n\nfunction tsMethodSignature(key, typeParameters, parameters, typeAnnotation) {\n return (0, _builder.default)(\"TSMethodSignature\", ...arguments);\n}\n\nfunction tsIndexSignature(parameters, typeAnnotation) {\n return (0, _builder.default)(\"TSIndexSignature\", ...arguments);\n}\n\nfunction tsAnyKeyword() {\n return (0, _builder.default)(\"TSAnyKeyword\", ...arguments);\n}\n\nfunction tsBooleanKeyword() {\n return (0, _builder.default)(\"TSBooleanKeyword\", ...arguments);\n}\n\nfunction tsBigIntKeyword() {\n return (0, _builder.default)(\"TSBigIntKeyword\", ...arguments);\n}\n\nfunction tsIntrinsicKeyword() {\n return (0, _builder.default)(\"TSIntrinsicKeyword\", ...arguments);\n}\n\nfunction tsNeverKeyword() {\n return (0, _builder.default)(\"TSNeverKeyword\", ...arguments);\n}\n\nfunction tsNullKeyword() {\n return (0, _builder.default)(\"TSNullKeyword\", ...arguments);\n}\n\nfunction tsNumberKeyword() {\n return (0, _builder.default)(\"TSNumberKeyword\", ...arguments);\n}\n\nfunction tsObjectKeyword() {\n return (0, _builder.default)(\"TSObjectKeyword\", ...arguments);\n}\n\nfunction tsStringKeyword() {\n return (0, _builder.default)(\"TSStringKeyword\", ...arguments);\n}\n\nfunction tsSymbolKeyword() {\n return (0, _builder.default)(\"TSSymbolKeyword\", ...arguments);\n}\n\nfunction tsUndefinedKeyword() {\n return (0, _builder.default)(\"TSUndefinedKeyword\", ...arguments);\n}\n\nfunction tsUnknownKeyword() {\n return (0, _builder.default)(\"TSUnknownKeyword\", ...arguments);\n}\n\nfunction tsVoidKeyword() {\n return (0, _builder.default)(\"TSVoidKeyword\", ...arguments);\n}\n\nfunction tsThisType() {\n return (0, _builder.default)(\"TSThisType\", ...arguments);\n}\n\nfunction tsFunctionType(typeParameters, parameters, typeAnnotation) {\n return (0, _builder.default)(\"TSFunctionType\", ...arguments);\n}\n\nfunction tsConstructorType(typeParameters, parameters, typeAnnotation) {\n return (0, _builder.default)(\"TSConstructorType\", ...arguments);\n}\n\nfunction tsTypeReference(typeName, typeParameters) {\n return (0, _builder.default)(\"TSTypeReference\", ...arguments);\n}\n\nfunction tsTypePredicate(parameterName, typeAnnotation, asserts) {\n return (0, _builder.default)(\"TSTypePredicate\", ...arguments);\n}\n\nfunction tsTypeQuery(exprName) {\n return (0, _builder.default)(\"TSTypeQuery\", ...arguments);\n}\n\nfunction tsTypeLiteral(members) {\n return (0, _builder.default)(\"TSTypeLiteral\", ...arguments);\n}\n\nfunction tsArrayType(elementType) {\n return (0, _builder.default)(\"TSArrayType\", ...arguments);\n}\n\nfunction tsTupleType(elementTypes) {\n return (0, _builder.default)(\"TSTupleType\", ...arguments);\n}\n\nfunction tsOptionalType(typeAnnotation) {\n return (0, _builder.default)(\"TSOptionalType\", ...arguments);\n}\n\nfunction tsRestType(typeAnnotation) {\n return (0, _builder.default)(\"TSRestType\", ...arguments);\n}\n\nfunction tsNamedTupleMember(label, elementType, optional) {\n return (0, _builder.default)(\"TSNamedTupleMember\", ...arguments);\n}\n\nfunction tsUnionType(types) {\n return (0, _builder.default)(\"TSUnionType\", ...arguments);\n}\n\nfunction tsIntersectionType(types) {\n return (0, _builder.default)(\"TSIntersectionType\", ...arguments);\n}\n\nfunction tsConditionalType(checkType, extendsType, trueType, falseType) {\n return (0, _builder.default)(\"TSConditionalType\", ...arguments);\n}\n\nfunction tsInferType(typeParameter) {\n return (0, _builder.default)(\"TSInferType\", ...arguments);\n}\n\nfunction tsParenthesizedType(typeAnnotation) {\n return (0, _builder.default)(\"TSParenthesizedType\", ...arguments);\n}\n\nfunction tsTypeOperator(typeAnnotation) {\n return (0, _builder.default)(\"TSTypeOperator\", ...arguments);\n}\n\nfunction tsIndexedAccessType(objectType, indexType) {\n return (0, _builder.default)(\"TSIndexedAccessType\", ...arguments);\n}\n\nfunction tsMappedType(typeParameter, typeAnnotation, nameType) {\n return (0, _builder.default)(\"TSMappedType\", ...arguments);\n}\n\nfunction tsLiteralType(literal) {\n return (0, _builder.default)(\"TSLiteralType\", ...arguments);\n}\n\nfunction tsExpressionWithTypeArguments(expression, typeParameters) {\n return (0, _builder.default)(\"TSExpressionWithTypeArguments\", ...arguments);\n}\n\nfunction tsInterfaceDeclaration(id, typeParameters, _extends, body) {\n return (0, _builder.default)(\"TSInterfaceDeclaration\", ...arguments);\n}\n\nfunction tsInterfaceBody(body) {\n return (0, _builder.default)(\"TSInterfaceBody\", ...arguments);\n}\n\nfunction tsTypeAliasDeclaration(id, typeParameters, typeAnnotation) {\n return (0, _builder.default)(\"TSTypeAliasDeclaration\", ...arguments);\n}\n\nfunction tsAsExpression(expression, typeAnnotation) {\n return (0, _builder.default)(\"TSAsExpression\", ...arguments);\n}\n\nfunction tsTypeAssertion(typeAnnotation, expression) {\n return (0, _builder.default)(\"TSTypeAssertion\", ...arguments);\n}\n\nfunction tsEnumDeclaration(id, members) {\n return (0, _builder.default)(\"TSEnumDeclaration\", ...arguments);\n}\n\nfunction tsEnumMember(id, initializer) {\n return (0, _builder.default)(\"TSEnumMember\", ...arguments);\n}\n\nfunction tsModuleDeclaration(id, body) {\n return (0, _builder.default)(\"TSModuleDeclaration\", ...arguments);\n}\n\nfunction tsModuleBlock(body) {\n return (0, _builder.default)(\"TSModuleBlock\", ...arguments);\n}\n\nfunction tsImportType(argument, qualifier, typeParameters) {\n return (0, _builder.default)(\"TSImportType\", ...arguments);\n}\n\nfunction tsImportEqualsDeclaration(id, moduleReference) {\n return (0, _builder.default)(\"TSImportEqualsDeclaration\", ...arguments);\n}\n\nfunction tsExternalModuleReference(expression) {\n return (0, _builder.default)(\"TSExternalModuleReference\", ...arguments);\n}\n\nfunction tsNonNullExpression(expression) {\n return (0, _builder.default)(\"TSNonNullExpression\", ...arguments);\n}\n\nfunction tsExportAssignment(expression) {\n return (0, _builder.default)(\"TSExportAssignment\", ...arguments);\n}\n\nfunction tsNamespaceExportDeclaration(id) {\n return (0, _builder.default)(\"TSNamespaceExportDeclaration\", ...arguments);\n}\n\nfunction tsTypeAnnotation(typeAnnotation) {\n return (0, _builder.default)(\"TSTypeAnnotation\", ...arguments);\n}\n\nfunction tsTypeParameterInstantiation(params) {\n return (0, _builder.default)(\"TSTypeParameterInstantiation\", ...arguments);\n}\n\nfunction tsTypeParameterDeclaration(params) {\n return (0, _builder.default)(\"TSTypeParameterDeclaration\", ...arguments);\n}\n\nfunction tsTypeParameter(constraint, _default, name) {\n return (0, _builder.default)(\"TSTypeParameter\", ...arguments);\n}\n\nfunction NumberLiteral(...args) {\n console.trace(\"The node type NumberLiteral has been renamed to NumericLiteral\");\n return (0, _builder.default)(\"NumberLiteral\", ...args);\n}\n\nfunction RegexLiteral(...args) {\n console.trace(\"The node type RegexLiteral has been renamed to RegExpLiteral\");\n return (0, _builder.default)(\"RegexLiteral\", ...args);\n}\n\nfunction RestProperty(...args) {\n console.trace(\"The node type RestProperty has been renamed to RestElement\");\n return (0, _builder.default)(\"RestProperty\", ...args);\n}\n\nfunction SpreadProperty(...args) {\n console.trace(\"The node type SpreadProperty has been renamed to SpreadElement\");\n return (0, _builder.default)(\"SpreadProperty\", ...args);\n}","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","// 'path' module extracted from Node.js v8.11.1 (only the posix part)\n// transplited with Babel\n\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nfunction assertPath(path) {\n if (typeof path !== 'string') {\n throw new TypeError('Path must be a string. Received ' + JSON.stringify(path));\n }\n}\n\n// Resolves . and .. elements in a path with directory names\nfunction normalizeStringPosix(path, allowAboveRoot) {\n var res = '';\n var lastSegmentLength = 0;\n var lastSlash = -1;\n var dots = 0;\n var code;\n for (var i = 0; i <= path.length; ++i) {\n if (i < path.length)\n code = path.charCodeAt(i);\n else if (code === 47 /*/*/)\n break;\n else\n code = 47 /*/*/;\n if (code === 47 /*/*/) {\n if (lastSlash === i - 1 || dots === 1) {\n // NOOP\n } else if (lastSlash !== i - 1 && dots === 2) {\n if (res.length < 2 || lastSegmentLength !== 2 || res.charCodeAt(res.length - 1) !== 46 /*.*/ || res.charCodeAt(res.length - 2) !== 46 /*.*/) {\n if (res.length > 2) {\n var lastSlashIndex = res.lastIndexOf('/');\n if (lastSlashIndex !== res.length - 1) {\n if (lastSlashIndex === -1) {\n res = '';\n lastSegmentLength = 0;\n } else {\n res = res.slice(0, lastSlashIndex);\n lastSegmentLength = res.length - 1 - res.lastIndexOf('/');\n }\n lastSlash = i;\n dots = 0;\n continue;\n }\n } else if (res.length === 2 || res.length === 1) {\n res = '';\n lastSegmentLength = 0;\n lastSlash = i;\n dots = 0;\n continue;\n }\n }\n if (allowAboveRoot) {\n if (res.length > 0)\n res += '/..';\n else\n res = '..';\n lastSegmentLength = 2;\n }\n } else {\n if (res.length > 0)\n res += '/' + path.slice(lastSlash + 1, i);\n else\n res = path.slice(lastSlash + 1, i);\n lastSegmentLength = i - lastSlash - 1;\n }\n lastSlash = i;\n dots = 0;\n } else if (code === 46 /*.*/ && dots !== -1) {\n ++dots;\n } else {\n dots = -1;\n }\n }\n return res;\n}\n\nfunction _format(sep, pathObject) {\n var dir = pathObject.dir || pathObject.root;\n var base = pathObject.base || (pathObject.name || '') + (pathObject.ext || '');\n if (!dir) {\n return base;\n }\n if (dir === pathObject.root) {\n return dir + base;\n }\n return dir + sep + base;\n}\n\nvar posix = {\n // path.resolve([from ...], to)\n resolve: function resolve() {\n var resolvedPath = '';\n var resolvedAbsolute = false;\n var cwd;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path;\n if (i >= 0)\n path = arguments[i];\n else {\n if (cwd === undefined)\n cwd = process.cwd();\n path = cwd;\n }\n\n assertPath(path);\n\n // Skip empty entries\n if (path.length === 0) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charCodeAt(0) === 47 /*/*/;\n }\n\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n\n // Normalize the path\n resolvedPath = normalizeStringPosix(resolvedPath, !resolvedAbsolute);\n\n if (resolvedAbsolute) {\n if (resolvedPath.length > 0)\n return '/' + resolvedPath;\n else\n return '/';\n } else if (resolvedPath.length > 0) {\n return resolvedPath;\n } else {\n return '.';\n }\n },\n\n normalize: function normalize(path) {\n assertPath(path);\n\n if (path.length === 0) return '.';\n\n var isAbsolute = path.charCodeAt(0) === 47 /*/*/;\n var trailingSeparator = path.charCodeAt(path.length - 1) === 47 /*/*/;\n\n // Normalize the path\n path = normalizeStringPosix(path, !isAbsolute);\n\n if (path.length === 0 && !isAbsolute) path = '.';\n if (path.length > 0 && trailingSeparator) path += '/';\n\n if (isAbsolute) return '/' + path;\n return path;\n },\n\n isAbsolute: function isAbsolute(path) {\n assertPath(path);\n return path.length > 0 && path.charCodeAt(0) === 47 /*/*/;\n },\n\n join: function join() {\n if (arguments.length === 0)\n return '.';\n var joined;\n for (var i = 0; i < arguments.length; ++i) {\n var arg = arguments[i];\n assertPath(arg);\n if (arg.length > 0) {\n if (joined === undefined)\n joined = arg;\n else\n joined += '/' + arg;\n }\n }\n if (joined === undefined)\n return '.';\n return posix.normalize(joined);\n },\n\n relative: function relative(from, to) {\n assertPath(from);\n assertPath(to);\n\n if (from === to) return '';\n\n from = posix.resolve(from);\n to = posix.resolve(to);\n\n if (from === to) return '';\n\n // Trim any leading backslashes\n var fromStart = 1;\n for (; fromStart < from.length; ++fromStart) {\n if (from.charCodeAt(fromStart) !== 47 /*/*/)\n break;\n }\n var fromEnd = from.length;\n var fromLen = fromEnd - fromStart;\n\n // Trim any leading backslashes\n var toStart = 1;\n for (; toStart < to.length; ++toStart) {\n if (to.charCodeAt(toStart) !== 47 /*/*/)\n break;\n }\n var toEnd = to.length;\n var toLen = toEnd - toStart;\n\n // Compare paths to find the longest common path from root\n var length = fromLen < toLen ? fromLen : toLen;\n var lastCommonSep = -1;\n var i = 0;\n for (; i <= length; ++i) {\n if (i === length) {\n if (toLen > length) {\n if (to.charCodeAt(toStart + i) === 47 /*/*/) {\n // We get here if `from` is the exact base path for `to`.\n // For example: from='/foo/bar'; to='/foo/bar/baz'\n return to.slice(toStart + i + 1);\n } else if (i === 0) {\n // We get here if `from` is the root\n // For example: from='/'; to='/foo'\n return to.slice(toStart + i);\n }\n } else if (fromLen > length) {\n if (from.charCodeAt(fromStart + i) === 47 /*/*/) {\n // We get here if `to` is the exact base path for `from`.\n // For example: from='/foo/bar/baz'; to='/foo/bar'\n lastCommonSep = i;\n } else if (i === 0) {\n // We get here if `to` is the root.\n // For example: from='/foo'; to='/'\n lastCommonSep = 0;\n }\n }\n break;\n }\n var fromCode = from.charCodeAt(fromStart + i);\n var toCode = to.charCodeAt(toStart + i);\n if (fromCode !== toCode)\n break;\n else if (fromCode === 47 /*/*/)\n lastCommonSep = i;\n }\n\n var out = '';\n // Generate the relative path based on the path difference between `to`\n // and `from`\n for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) {\n if (i === fromEnd || from.charCodeAt(i) === 47 /*/*/) {\n if (out.length === 0)\n out += '..';\n else\n out += '/..';\n }\n }\n\n // Lastly, append the rest of the destination (`to`) path that comes after\n // the common path parts\n if (out.length > 0)\n return out + to.slice(toStart + lastCommonSep);\n else {\n toStart += lastCommonSep;\n if (to.charCodeAt(toStart) === 47 /*/*/)\n ++toStart;\n return to.slice(toStart);\n }\n },\n\n _makeLong: function _makeLong(path) {\n return path;\n },\n\n dirname: function dirname(path) {\n assertPath(path);\n if (path.length === 0) return '.';\n var code = path.charCodeAt(0);\n var hasRoot = code === 47 /*/*/;\n var end = -1;\n var matchedSlash = true;\n for (var i = path.length - 1; i >= 1; --i) {\n code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n if (!matchedSlash) {\n end = i;\n break;\n }\n } else {\n // We saw the first non-path separator\n matchedSlash = false;\n }\n }\n\n if (end === -1) return hasRoot ? '/' : '.';\n if (hasRoot && end === 1) return '//';\n return path.slice(0, end);\n },\n\n basename: function basename(path, ext) {\n if (ext !== undefined && typeof ext !== 'string') throw new TypeError('\"ext\" argument must be a string');\n assertPath(path);\n\n var start = 0;\n var end = -1;\n var matchedSlash = true;\n var i;\n\n if (ext !== undefined && ext.length > 0 && ext.length <= path.length) {\n if (ext.length === path.length && ext === path) return '';\n var extIdx = ext.length - 1;\n var firstNonSlashEnd = -1;\n for (i = path.length - 1; i >= 0; --i) {\n var code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else {\n if (firstNonSlashEnd === -1) {\n // We saw the first non-path separator, remember this index in case\n // we need it if the extension ends up not matching\n matchedSlash = false;\n firstNonSlashEnd = i + 1;\n }\n if (extIdx >= 0) {\n // Try to match the explicit extension\n if (code === ext.charCodeAt(extIdx)) {\n if (--extIdx === -1) {\n // We matched the extension, so mark this as the end of our path\n // component\n end = i;\n }\n } else {\n // Extension does not match, so our result is the entire path\n // component\n extIdx = -1;\n end = firstNonSlashEnd;\n }\n }\n }\n }\n\n if (start === end) end = firstNonSlashEnd;else if (end === -1) end = path.length;\n return path.slice(start, end);\n } else {\n for (i = path.length - 1; i >= 0; --i) {\n if (path.charCodeAt(i) === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // path component\n matchedSlash = false;\n end = i + 1;\n }\n }\n\n if (end === -1) return '';\n return path.slice(start, end);\n }\n },\n\n extname: function extname(path) {\n assertPath(path);\n var startDot = -1;\n var startPart = 0;\n var end = -1;\n var matchedSlash = true;\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n var preDotState = 0;\n for (var i = path.length - 1; i >= 0; --i) {\n var code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (code === 46 /*.*/) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1)\n startDot = i;\n else if (preDotState !== 1)\n preDotState = 1;\n } else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n\n if (startDot === -1 || end === -1 ||\n // We saw a non-dot character immediately before the dot\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly '..'\n preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n return '';\n }\n return path.slice(startDot, end);\n },\n\n format: function format(pathObject) {\n if (pathObject === null || typeof pathObject !== 'object') {\n throw new TypeError('The \"pathObject\" argument must be of type Object. Received type ' + typeof pathObject);\n }\n return _format('/', pathObject);\n },\n\n parse: function parse(path) {\n assertPath(path);\n\n var ret = { root: '', dir: '', base: '', ext: '', name: '' };\n if (path.length === 0) return ret;\n var code = path.charCodeAt(0);\n var isAbsolute = code === 47 /*/*/;\n var start;\n if (isAbsolute) {\n ret.root = '/';\n start = 1;\n } else {\n start = 0;\n }\n var startDot = -1;\n var startPart = 0;\n var end = -1;\n var matchedSlash = true;\n var i = path.length - 1;\n\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n var preDotState = 0;\n\n // Get non-dir info\n for (; i >= start; --i) {\n code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (code === 46 /*.*/) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1) startDot = i;else if (preDotState !== 1) preDotState = 1;\n } else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n\n if (startDot === -1 || end === -1 ||\n // We saw a non-dot character immediately before the dot\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly '..'\n preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n if (end !== -1) {\n if (startPart === 0 && isAbsolute) ret.base = ret.name = path.slice(1, end);else ret.base = ret.name = path.slice(startPart, end);\n }\n } else {\n if (startPart === 0 && isAbsolute) {\n ret.name = path.slice(1, startDot);\n ret.base = path.slice(1, end);\n } else {\n ret.name = path.slice(startPart, startDot);\n ret.base = path.slice(startPart, end);\n }\n ret.ext = path.slice(startDot, end);\n }\n\n if (startPart > 0) ret.dir = path.slice(0, startPart - 1);else if (isAbsolute) ret.dir = '/';\n\n return ret;\n },\n\n sep: '/',\n delimiter: ':',\n win32: null,\n posix: null\n};\n\nposix.posix = posix;\n\nmodule.exports = posix;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Plugin = Plugin;\nObject.defineProperty(exports, \"File\", {\n enumerable: true,\n get: function () {\n return _file.default;\n }\n});\nObject.defineProperty(exports, \"buildExternalHelpers\", {\n enumerable: true,\n get: function () {\n return _buildExternalHelpers.default;\n }\n});\nObject.defineProperty(exports, \"resolvePlugin\", {\n enumerable: true,\n get: function () {\n return _files.resolvePlugin;\n }\n});\nObject.defineProperty(exports, \"resolvePreset\", {\n enumerable: true,\n get: function () {\n return _files.resolvePreset;\n }\n});\nObject.defineProperty(exports, \"getEnv\", {\n enumerable: true,\n get: function () {\n return _environment.getEnv;\n }\n});\nObject.defineProperty(exports, \"tokTypes\", {\n enumerable: true,\n get: function () {\n return _parser().tokTypes;\n }\n});\nObject.defineProperty(exports, \"traverse\", {\n enumerable: true,\n get: function () {\n return _traverse().default;\n }\n});\nObject.defineProperty(exports, \"template\", {\n enumerable: true,\n get: function () {\n return _template().default;\n }\n});\nObject.defineProperty(exports, \"createConfigItem\", {\n enumerable: true,\n get: function () {\n return _config.createConfigItem;\n }\n});\nObject.defineProperty(exports, \"createConfigItemSync\", {\n enumerable: true,\n get: function () {\n return _config.createConfigItemSync;\n }\n});\nObject.defineProperty(exports, \"createConfigItemAsync\", {\n enumerable: true,\n get: function () {\n return _config.createConfigItemAsync;\n }\n});\nObject.defineProperty(exports, \"loadPartialConfig\", {\n enumerable: true,\n get: function () {\n return _config.loadPartialConfig;\n }\n});\nObject.defineProperty(exports, \"loadPartialConfigSync\", {\n enumerable: true,\n get: function () {\n return _config.loadPartialConfigSync;\n }\n});\nObject.defineProperty(exports, \"loadPartialConfigAsync\", {\n enumerable: true,\n get: function () {\n return _config.loadPartialConfigAsync;\n }\n});\nObject.defineProperty(exports, \"loadOptions\", {\n enumerable: true,\n get: function () {\n return _config.loadOptions;\n }\n});\nObject.defineProperty(exports, \"loadOptionsSync\", {\n enumerable: true,\n get: function () {\n return _config.loadOptionsSync;\n }\n});\nObject.defineProperty(exports, \"loadOptionsAsync\", {\n enumerable: true,\n get: function () {\n return _config.loadOptionsAsync;\n }\n});\nObject.defineProperty(exports, \"transform\", {\n enumerable: true,\n get: function () {\n return _transform.transform;\n }\n});\nObject.defineProperty(exports, \"transformSync\", {\n enumerable: true,\n get: function () {\n return _transform.transformSync;\n }\n});\nObject.defineProperty(exports, \"transformAsync\", {\n enumerable: true,\n get: function () {\n return _transform.transformAsync;\n }\n});\nObject.defineProperty(exports, \"transformFile\", {\n enumerable: true,\n get: function () {\n return _transformFile.transformFile;\n }\n});\nObject.defineProperty(exports, \"transformFileSync\", {\n enumerable: true,\n get: function () {\n return _transformFile.transformFileSync;\n }\n});\nObject.defineProperty(exports, \"transformFileAsync\", {\n enumerable: true,\n get: function () {\n return _transformFile.transformFileAsync;\n }\n});\nObject.defineProperty(exports, \"transformFromAst\", {\n enumerable: true,\n get: function () {\n return _transformAst.transformFromAst;\n }\n});\nObject.defineProperty(exports, \"transformFromAstSync\", {\n enumerable: true,\n get: function () {\n return _transformAst.transformFromAstSync;\n }\n});\nObject.defineProperty(exports, \"transformFromAstAsync\", {\n enumerable: true,\n get: function () {\n return _transformAst.transformFromAstAsync;\n }\n});\nObject.defineProperty(exports, \"parse\", {\n enumerable: true,\n get: function () {\n return _parse.parse;\n }\n});\nObject.defineProperty(exports, \"parseSync\", {\n enumerable: true,\n get: function () {\n return _parse.parseSync;\n }\n});\nObject.defineProperty(exports, \"parseAsync\", {\n enumerable: true,\n get: function () {\n return _parse.parseAsync;\n }\n});\nexports.types = exports.OptionManager = exports.DEFAULT_EXTENSIONS = exports.version = void 0;\n\nvar _file = require(\"./transformation/file/file\");\n\nvar _buildExternalHelpers = require(\"./tools/build-external-helpers\");\n\nvar _files = require(\"./config/files\");\n\nvar _environment = require(\"./config/helpers/environment\");\n\nfunction _types() {\n const data = require(\"@babel/types\");\n\n _types = function () {\n return data;\n };\n\n return data;\n}\n\nObject.defineProperty(exports, \"types\", {\n enumerable: true,\n get: function () {\n return _types();\n }\n});\n\nfunction _parser() {\n const data = require(\"@babel/parser\");\n\n _parser = function () {\n return data;\n };\n\n return data;\n}\n\nfunction _traverse() {\n const data = require(\"@babel/traverse\");\n\n _traverse = function () {\n return data;\n };\n\n return data;\n}\n\nfunction _template() {\n const data = require(\"@babel/template\");\n\n _template = function () {\n return data;\n };\n\n return data;\n}\n\nvar _config = require(\"./config\");\n\nvar _transform = require(\"./transform\");\n\nvar _transformFile = require(\"./transform-file\");\n\nvar _transformAst = require(\"./transform-ast\");\n\nvar _parse = require(\"./parse\");\n\nconst version = \"7.14.6\";\nexports.version = version;\nconst DEFAULT_EXTENSIONS = Object.freeze([\".js\", \".jsx\", \".es6\", \".es\", \".mjs\", \".cjs\"]);\nexports.DEFAULT_EXTENSIONS = DEFAULT_EXTENSIONS;\n\nclass OptionManager {\n init(opts) {\n return (0, _config.loadOptions)(opts);\n }\n\n}\n\nexports.OptionManager = OptionManager;\n\nfunction Plugin(alias) {\n throw new Error(`The (${alias}) Babel 5 plugin is being run with an unsupported Babel version.`);\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"NodePath\", {\n enumerable: true,\n get: function () {\n return _path.default;\n }\n});\nObject.defineProperty(exports, \"Scope\", {\n enumerable: true,\n get: function () {\n return _scope.default;\n }\n});\nObject.defineProperty(exports, \"Hub\", {\n enumerable: true,\n get: function () {\n return _hub.default;\n }\n});\nexports.visitors = exports.default = void 0;\n\nvar _context = require(\"./context\");\n\nvar visitors = require(\"./visitors\");\n\nexports.visitors = visitors;\n\nvar t = require(\"@babel/types\");\n\nvar cache = require(\"./cache\");\n\nvar _path = require(\"./path\");\n\nvar _scope = require(\"./scope\");\n\nvar _hub = require(\"./hub\");\n\nfunction traverse(parent, opts = {}, scope, state, parentPath) {\n if (!parent) return;\n\n if (!opts.noScope && !scope) {\n if (parent.type !== \"Program\" && parent.type !== \"File\") {\n throw new Error(\"You must pass a scope and parentPath unless traversing a Program/File. \" + `Instead of that you tried to traverse a ${parent.type} node without ` + \"passing scope and parentPath.\");\n }\n }\n\n if (!t.VISITOR_KEYS[parent.type]) {\n return;\n }\n\n visitors.explode(opts);\n traverse.node(parent, opts, scope, state, parentPath);\n}\n\nvar _default = traverse;\nexports.default = _default;\ntraverse.visitors = visitors;\ntraverse.verify = visitors.verify;\ntraverse.explode = visitors.explode;\n\ntraverse.cheap = function (node, enter) {\n return t.traverseFast(node, enter);\n};\n\ntraverse.node = function (node, opts, scope, state, parentPath, skipKeys) {\n const keys = t.VISITOR_KEYS[node.type];\n if (!keys) return;\n const context = new _context.default(scope, opts, state, parentPath);\n\n for (const key of keys) {\n if (skipKeys && skipKeys[key]) continue;\n if (context.visit(node, key)) return;\n }\n};\n\ntraverse.clearNode = function (node, opts) {\n t.removeProperties(node, opts);\n cache.path.delete(node);\n};\n\ntraverse.removeProperties = function (tree, opts) {\n t.traverseFast(tree, traverse.clearNode, opts);\n return tree;\n};\n\nfunction hasDenylistedType(path, state) {\n if (path.node.type === state.type) {\n state.has = true;\n path.stop();\n }\n}\n\ntraverse.hasType = function (tree, type, denylistTypes) {\n if (denylistTypes != null && denylistTypes.includes(tree.type)) return false;\n if (tree.type === type) return true;\n const state = {\n has: false,\n type: type\n };\n traverse(tree, {\n noScope: true,\n denylist: denylistTypes,\n enter: hasDenylistedType\n }, null, state);\n return state.has;\n};\n\ntraverse.cache = cache;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"VISITOR_KEYS\", {\n enumerable: true,\n get: function () {\n return _utils.VISITOR_KEYS;\n }\n});\nObject.defineProperty(exports, \"ALIAS_KEYS\", {\n enumerable: true,\n get: function () {\n return _utils.ALIAS_KEYS;\n }\n});\nObject.defineProperty(exports, \"FLIPPED_ALIAS_KEYS\", {\n enumerable: true,\n get: function () {\n return _utils.FLIPPED_ALIAS_KEYS;\n }\n});\nObject.defineProperty(exports, \"NODE_FIELDS\", {\n enumerable: true,\n get: function () {\n return _utils.NODE_FIELDS;\n }\n});\nObject.defineProperty(exports, \"BUILDER_KEYS\", {\n enumerable: true,\n get: function () {\n return _utils.BUILDER_KEYS;\n }\n});\nObject.defineProperty(exports, \"DEPRECATED_KEYS\", {\n enumerable: true,\n get: function () {\n return _utils.DEPRECATED_KEYS;\n }\n});\nObject.defineProperty(exports, \"NODE_PARENT_VALIDATIONS\", {\n enumerable: true,\n get: function () {\n return _utils.NODE_PARENT_VALIDATIONS;\n }\n});\nObject.defineProperty(exports, \"PLACEHOLDERS\", {\n enumerable: true,\n get: function () {\n return _placeholders.PLACEHOLDERS;\n }\n});\nObject.defineProperty(exports, \"PLACEHOLDERS_ALIAS\", {\n enumerable: true,\n get: function () {\n return _placeholders.PLACEHOLDERS_ALIAS;\n }\n});\nObject.defineProperty(exports, \"PLACEHOLDERS_FLIPPED_ALIAS\", {\n enumerable: true,\n get: function () {\n return _placeholders.PLACEHOLDERS_FLIPPED_ALIAS;\n }\n});\nexports.TYPES = void 0;\n\nvar _toFastProperties = require(\"to-fast-properties\");\n\nrequire(\"./core\");\n\nrequire(\"./flow\");\n\nrequire(\"./jsx\");\n\nrequire(\"./misc\");\n\nrequire(\"./experimental\");\n\nrequire(\"./typescript\");\n\nvar _utils = require(\"./utils\");\n\nvar _placeholders = require(\"./placeholders\");\n\n_toFastProperties(_utils.VISITOR_KEYS);\n\n_toFastProperties(_utils.ALIAS_KEYS);\n\n_toFastProperties(_utils.FLIPPED_ALIAS_KEYS);\n\n_toFastProperties(_utils.NODE_FIELDS);\n\n_toFastProperties(_utils.BUILDER_KEYS);\n\n_toFastProperties(_utils.DEPRECATED_KEYS);\n\n_toFastProperties(_placeholders.PLACEHOLDERS_ALIAS);\n\n_toFastProperties(_placeholders.PLACEHOLDERS_FLIPPED_ALIAS);\n\nconst TYPES = Object.keys(_utils.VISITOR_KEYS).concat(Object.keys(_utils.FLIPPED_ALIAS_KEYS)).concat(Object.keys(_utils.DEPRECATED_KEYS));\nexports.TYPES = TYPES;","const SemVer = require('../classes/semver')\nconst compare = (a, b, loose) =>\n new SemVer(a, loose).compare(new SemVer(b, loose))\n\nmodule.exports = compare\n","// hoisted class for cyclic dependency\nclass Range {\n constructor (range, options) {\n options = parseOptions(options)\n\n if (range instanceof Range) {\n if (\n range.loose === !!options.loose &&\n range.includePrerelease === !!options.includePrerelease\n ) {\n return range\n } else {\n return new Range(range.raw, options)\n }\n }\n\n if (range instanceof Comparator) {\n // just put it in the set and return\n this.raw = range.value\n this.set = [[range]]\n this.format()\n return this\n }\n\n this.options = options\n this.loose = !!options.loose\n this.includePrerelease = !!options.includePrerelease\n\n // First, split based on boolean or ||\n this.raw = range\n this.set = range\n .split(/\\s*\\|\\|\\s*/)\n // map the range to a 2d array of comparators\n .map(range => this.parseRange(range.trim()))\n // throw out any comparator lists that are empty\n // this generally means that it was not a valid range, which is allowed\n // in loose mode, but will still throw if the WHOLE range is invalid.\n .filter(c => c.length)\n\n if (!this.set.length) {\n throw new TypeError(`Invalid SemVer Range: ${range}`)\n }\n\n // if we have any that are not the null set, throw out null sets.\n if (this.set.length > 1) {\n // keep the first one, in case they're all null sets\n const first = this.set[0]\n this.set = this.set.filter(c => !isNullSet(c[0]))\n if (this.set.length === 0)\n this.set = [first]\n else if (this.set.length > 1) {\n // if we have any that are *, then the range is just *\n for (const c of this.set) {\n if (c.length === 1 && isAny(c[0])) {\n this.set = [c]\n break\n }\n }\n }\n }\n\n this.format()\n }\n\n format () {\n this.range = this.set\n .map((comps) => {\n return comps.join(' ').trim()\n })\n .join('||')\n .trim()\n return this.range\n }\n\n toString () {\n return this.range\n }\n\n parseRange (range) {\n range = range.trim()\n\n // memoize range parsing for performance.\n // this is a very hot path, and fully deterministic.\n const memoOpts = Object.keys(this.options).join(',')\n const memoKey = `parseRange:${memoOpts}:${range}`\n const cached = cache.get(memoKey)\n if (cached)\n return cached\n\n const loose = this.options.loose\n // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`\n const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]\n range = range.replace(hr, hyphenReplace(this.options.includePrerelease))\n debug('hyphen replace', range)\n // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`\n range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace)\n debug('comparator trim', range, re[t.COMPARATORTRIM])\n\n // `~ 1.2.3` => `~1.2.3`\n range = range.replace(re[t.TILDETRIM], tildeTrimReplace)\n\n // `^ 1.2.3` => `^1.2.3`\n range = range.replace(re[t.CARETTRIM], caretTrimReplace)\n\n // normalize spaces\n range = range.split(/\\s+/).join(' ')\n\n // At this point, the range is completely trimmed and\n // ready to be split into comparators.\n\n const compRe = loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]\n const rangeList = range\n .split(' ')\n .map(comp => parseComparator(comp, this.options))\n .join(' ')\n .split(/\\s+/)\n // >=0.0.0 is equivalent to *\n .map(comp => replaceGTE0(comp, this.options))\n // in loose mode, throw out any that are not valid comparators\n .filter(this.options.loose ? comp => !!comp.match(compRe) : () => true)\n .map(comp => new Comparator(comp, this.options))\n\n // if any comparators are the null set, then replace with JUST null set\n // if more than one comparator, remove any * comparators\n // also, don't include the same comparator more than once\n const l = rangeList.length\n const rangeMap = new Map()\n for (const comp of rangeList) {\n if (isNullSet(comp))\n return [comp]\n rangeMap.set(comp.value, comp)\n }\n if (rangeMap.size > 1 && rangeMap.has(''))\n rangeMap.delete('')\n\n const result = [...rangeMap.values()]\n cache.set(memoKey, result)\n return result\n }\n\n intersects (range, options) {\n if (!(range instanceof Range)) {\n throw new TypeError('a Range is required')\n }\n\n return this.set.some((thisComparators) => {\n return (\n isSatisfiable(thisComparators, options) &&\n range.set.some((rangeComparators) => {\n return (\n isSatisfiable(rangeComparators, options) &&\n thisComparators.every((thisComparator) => {\n return rangeComparators.every((rangeComparator) => {\n return thisComparator.intersects(rangeComparator, options)\n })\n })\n )\n })\n )\n })\n }\n\n // if ANY of the sets match ALL of its comparators, then pass\n test (version) {\n if (!version) {\n return false\n }\n\n if (typeof version === 'string') {\n try {\n version = new SemVer(version, this.options)\n } catch (er) {\n return false\n }\n }\n\n for (let i = 0; i < this.set.length; i++) {\n if (testSet(this.set[i], version, this.options)) {\n return true\n }\n }\n return false\n }\n}\nmodule.exports = Range\n\nconst LRU = require('lru-cache')\nconst cache = new LRU({ max: 1000 })\n\nconst parseOptions = require('../internal/parse-options')\nconst Comparator = require('./comparator')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst {\n re,\n t,\n comparatorTrimReplace,\n tildeTrimReplace,\n caretTrimReplace\n} = require('../internal/re')\n\nconst isNullSet = c => c.value === '<0.0.0-0'\nconst isAny = c => c.value === ''\n\n// take a set of comparators and determine whether there\n// exists a version which can satisfy it\nconst isSatisfiable = (comparators, options) => {\n let result = true\n const remainingComparators = comparators.slice()\n let testComparator = remainingComparators.pop()\n\n while (result && remainingComparators.length) {\n result = remainingComparators.every((otherComparator) => {\n return testComparator.intersects(otherComparator, options)\n })\n\n testComparator = remainingComparators.pop()\n }\n\n return result\n}\n\n// comprised of xranges, tildes, stars, and gtlt's at this point.\n// already replaced the hyphen ranges\n// turn into a set of JUST comparators.\nconst parseComparator = (comp, options) => {\n debug('comp', comp, options)\n comp = replaceCarets(comp, options)\n debug('caret', comp)\n comp = replaceTildes(comp, options)\n debug('tildes', comp)\n comp = replaceXRanges(comp, options)\n debug('xrange', comp)\n comp = replaceStars(comp, options)\n debug('stars', comp)\n return comp\n}\n\nconst isX = id => !id || id.toLowerCase() === 'x' || id === '*'\n\n// ~, ~> --> * (any, kinda silly)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0\nconst replaceTildes = (comp, options) =>\n comp.trim().split(/\\s+/).map((comp) => {\n return replaceTilde(comp, options)\n }).join(' ')\n\nconst replaceTilde = (comp, options) => {\n const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]\n return comp.replace(r, (_, M, m, p, pr) => {\n debug('tilde', comp, _, M, m, p, pr)\n let ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = `>=${M}.0.0 <${+M + 1}.0.0-0`\n } else if (isX(p)) {\n // ~1.2 == >=1.2.0 <1.3.0-0\n ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`\n } else if (pr) {\n debug('replaceTilde pr', pr)\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${+m + 1}.0-0`\n } else {\n // ~1.2.3 == >=1.2.3 <1.3.0-0\n ret = `>=${M}.${m}.${p\n } <${M}.${+m + 1}.0-0`\n }\n\n debug('tilde return', ret)\n return ret\n })\n}\n\n// ^ --> * (any, kinda silly)\n// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0\n// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0\n// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0\n// ^1.2.3 --> >=1.2.3 <2.0.0-0\n// ^1.2.0 --> >=1.2.0 <2.0.0-0\nconst replaceCarets = (comp, options) =>\n comp.trim().split(/\\s+/).map((comp) => {\n return replaceCaret(comp, options)\n }).join(' ')\n\nconst replaceCaret = (comp, options) => {\n debug('caret', comp, options)\n const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]\n const z = options.includePrerelease ? '-0' : ''\n return comp.replace(r, (_, M, m, p, pr) => {\n debug('caret', comp, _, M, m, p, pr)\n let ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`\n } else if (isX(p)) {\n if (M === '0') {\n ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`\n } else {\n ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`\n }\n } else if (pr) {\n debug('replaceCaret pr', pr)\n if (M === '0') {\n if (m === '0') {\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${m}.${+p + 1}-0`\n } else {\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${+m + 1}.0-0`\n }\n } else {\n ret = `>=${M}.${m}.${p}-${pr\n } <${+M + 1}.0.0-0`\n }\n } else {\n debug('no pr')\n if (M === '0') {\n if (m === '0') {\n ret = `>=${M}.${m}.${p\n }${z} <${M}.${m}.${+p + 1}-0`\n } else {\n ret = `>=${M}.${m}.${p\n }${z} <${M}.${+m + 1}.0-0`\n }\n } else {\n ret = `>=${M}.${m}.${p\n } <${+M + 1}.0.0-0`\n }\n }\n\n debug('caret return', ret)\n return ret\n })\n}\n\nconst replaceXRanges = (comp, options) => {\n debug('replaceXRanges', comp, options)\n return comp.split(/\\s+/).map((comp) => {\n return replaceXRange(comp, options)\n }).join(' ')\n}\n\nconst replaceXRange = (comp, options) => {\n comp = comp.trim()\n const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]\n return comp.replace(r, (ret, gtlt, M, m, p, pr) => {\n debug('xRange', comp, ret, gtlt, M, m, p, pr)\n const xM = isX(M)\n const xm = xM || isX(m)\n const xp = xm || isX(p)\n const anyX = xp\n\n if (gtlt === '=' && anyX) {\n gtlt = ''\n }\n\n // if we're including prereleases in the match, then we need\n // to fix this to -0, the lowest possible prerelease value\n pr = options.includePrerelease ? '-0' : ''\n\n if (xM) {\n if (gtlt === '>' || gtlt === '<') {\n // nothing is allowed\n ret = '<0.0.0-0'\n } else {\n // nothing is forbidden\n ret = '*'\n }\n } else if (gtlt && anyX) {\n // we know patch is an x, because we have any x at all.\n // replace X with 0\n if (xm) {\n m = 0\n }\n p = 0\n\n if (gtlt === '>') {\n // >1 => >=2.0.0\n // >1.2 => >=1.3.0\n gtlt = '>='\n if (xm) {\n M = +M + 1\n m = 0\n p = 0\n } else {\n m = +m + 1\n p = 0\n }\n } else if (gtlt === '<=') {\n // <=0.7.x is actually <0.8.0, since any 0.7.x should\n // pass. Similarly, <=7.x is actually <8.0.0, etc.\n gtlt = '<'\n if (xm) {\n M = +M + 1\n } else {\n m = +m + 1\n }\n }\n\n if (gtlt === '<')\n pr = '-0'\n\n ret = `${gtlt + M}.${m}.${p}${pr}`\n } else if (xm) {\n ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`\n } else if (xp) {\n ret = `>=${M}.${m}.0${pr\n } <${M}.${+m + 1}.0-0`\n }\n\n debug('xRange return', ret)\n\n return ret\n })\n}\n\n// Because * is AND-ed with everything else in the comparator,\n// and '' means \"any version\", just remove the *s entirely.\nconst replaceStars = (comp, options) => {\n debug('replaceStars', comp, options)\n // Looseness is ignored here. star is always as loose as it gets!\n return comp.trim().replace(re[t.STAR], '')\n}\n\nconst replaceGTE0 = (comp, options) => {\n debug('replaceGTE0', comp, options)\n return comp.trim()\n .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '')\n}\n\n// This function is passed to string.replace(re[t.HYPHENRANGE])\n// M, m, patch, prerelease, build\n// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5\n// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do\n// 1.2 - 3.4 => >=1.2.0 <3.5.0-0\nconst hyphenReplace = incPr => ($0,\n from, fM, fm, fp, fpr, fb,\n to, tM, tm, tp, tpr, tb) => {\n if (isX(fM)) {\n from = ''\n } else if (isX(fm)) {\n from = `>=${fM}.0.0${incPr ? '-0' : ''}`\n } else if (isX(fp)) {\n from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}`\n } else if (fpr) {\n from = `>=${from}`\n } else {\n from = `>=${from}${incPr ? '-0' : ''}`\n }\n\n if (isX(tM)) {\n to = ''\n } else if (isX(tm)) {\n to = `<${+tM + 1}.0.0-0`\n } else if (isX(tp)) {\n to = `<${tM}.${+tm + 1}.0-0`\n } else if (tpr) {\n to = `<=${tM}.${tm}.${tp}-${tpr}`\n } else if (incPr) {\n to = `<${tM}.${tm}.${+tp + 1}-0`\n } else {\n to = `<=${to}`\n }\n\n return (`${from} ${to}`).trim()\n}\n\nconst testSet = (set, version, options) => {\n for (let i = 0; i < set.length; i++) {\n if (!set[i].test(version)) {\n return false\n }\n }\n\n if (version.prerelease.length && !options.includePrerelease) {\n // Find the set of versions that are allowed to have prereleases\n // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0\n // That should allow `1.2.3-pr.2` to pass.\n // However, `1.2.4-alpha.notready` should NOT be allowed,\n // even though it's within the range set by the comparators.\n for (let i = 0; i < set.length; i++) {\n debug(set[i].semver)\n if (set[i].semver === Comparator.ANY) {\n continue\n }\n\n if (set[i].semver.prerelease.length > 0) {\n const allowed = set[i].semver\n if (allowed.major === version.major &&\n allowed.minor === version.minor &&\n allowed.patch === version.patch) {\n return true\n }\n }\n }\n\n // Version has a -pre, but it's not one of the ones we like.\n return false\n }\n\n return true\n}\n","\"use strict\";\n\n// These use the global symbol registry so that multiple copies of this\n// library can work together in case they are not deduped.\nconst GENSYNC_START = Symbol.for(\"gensync:v1:start\");\nconst GENSYNC_SUSPEND = Symbol.for(\"gensync:v1:suspend\");\n\nconst GENSYNC_EXPECTED_START = \"GENSYNC_EXPECTED_START\";\nconst GENSYNC_EXPECTED_SUSPEND = \"GENSYNC_EXPECTED_SUSPEND\";\nconst GENSYNC_OPTIONS_ERROR = \"GENSYNC_OPTIONS_ERROR\";\nconst GENSYNC_RACE_NONEMPTY = \"GENSYNC_RACE_NONEMPTY\";\nconst GENSYNC_ERRBACK_NO_CALLBACK = \"GENSYNC_ERRBACK_NO_CALLBACK\";\n\nmodule.exports = Object.assign(\n function gensync(optsOrFn) {\n let genFn = optsOrFn;\n if (typeof optsOrFn !== \"function\") {\n genFn = newGenerator(optsOrFn);\n } else {\n genFn = wrapGenerator(optsOrFn);\n }\n\n return Object.assign(genFn, makeFunctionAPI(genFn));\n },\n {\n all: buildOperation({\n name: \"all\",\n arity: 1,\n sync: function(args) {\n const items = Array.from(args[0]);\n return items.map(item => evaluateSync(item));\n },\n async: function(args, resolve, reject) {\n const items = Array.from(args[0]);\n\n if (items.length === 0) {\n Promise.resolve().then(() => resolve([]));\n return;\n }\n\n let count = 0;\n const results = items.map(() => undefined);\n items.forEach((item, i) => {\n evaluateAsync(\n item,\n val => {\n results[i] = val;\n count += 1;\n\n if (count === results.length) resolve(results);\n },\n reject\n );\n });\n },\n }),\n race: buildOperation({\n name: \"race\",\n arity: 1,\n sync: function(args) {\n const items = Array.from(args[0]);\n if (items.length === 0) {\n throw makeError(\"Must race at least 1 item\", GENSYNC_RACE_NONEMPTY);\n }\n\n return evaluateSync(items[0]);\n },\n async: function(args, resolve, reject) {\n const items = Array.from(args[0]);\n if (items.length === 0) {\n throw makeError(\"Must race at least 1 item\", GENSYNC_RACE_NONEMPTY);\n }\n\n for (const item of items) {\n evaluateAsync(item, resolve, reject);\n }\n },\n }),\n }\n);\n\n/**\n * Given a generator function, return the standard API object that executes\n * the generator and calls the callbacks.\n */\nfunction makeFunctionAPI(genFn) {\n const fns = {\n sync: function(...args) {\n return evaluateSync(genFn.apply(this, args));\n },\n async: function(...args) {\n return new Promise((resolve, reject) => {\n evaluateAsync(genFn.apply(this, args), resolve, reject);\n });\n },\n errback: function(...args) {\n const cb = args.pop();\n if (typeof cb !== \"function\") {\n throw makeError(\n \"Asynchronous function called without callback\",\n GENSYNC_ERRBACK_NO_CALLBACK\n );\n }\n\n let gen;\n try {\n gen = genFn.apply(this, args);\n } catch (err) {\n cb(err);\n return;\n }\n\n evaluateAsync(gen, val => cb(undefined, val), err => cb(err));\n },\n };\n return fns;\n}\n\nfunction assertTypeof(type, name, value, allowUndefined) {\n if (\n typeof value === type ||\n (allowUndefined && typeof value === \"undefined\")\n ) {\n return;\n }\n\n let msg;\n if (allowUndefined) {\n msg = `Expected opts.${name} to be either a ${type}, or undefined.`;\n } else {\n msg = `Expected opts.${name} to be a ${type}.`;\n }\n\n throw makeError(msg, GENSYNC_OPTIONS_ERROR);\n}\nfunction makeError(msg, code) {\n return Object.assign(new Error(msg), { code });\n}\n\n/**\n * Given an options object, return a new generator that dispatches the\n * correct handler based on sync or async execution.\n */\nfunction newGenerator({ name, arity, sync, async, errback }) {\n assertTypeof(\"string\", \"name\", name, true /* allowUndefined */);\n assertTypeof(\"number\", \"arity\", arity, true /* allowUndefined */);\n assertTypeof(\"function\", \"sync\", sync);\n assertTypeof(\"function\", \"async\", async, true /* allowUndefined */);\n assertTypeof(\"function\", \"errback\", errback, true /* allowUndefined */);\n if (async && errback) {\n throw makeError(\n \"Expected one of either opts.async or opts.errback, but got _both_.\",\n GENSYNC_OPTIONS_ERROR\n );\n }\n\n if (typeof name !== \"string\") {\n let fnName;\n if (errback && errback.name && errback.name !== \"errback\") {\n fnName = errback.name;\n }\n if (async && async.name && async.name !== \"async\") {\n fnName = async.name.replace(/Async$/, \"\");\n }\n if (sync && sync.name && sync.name !== \"sync\") {\n fnName = sync.name.replace(/Sync$/, \"\");\n }\n\n if (typeof fnName === \"string\") {\n name = fnName;\n }\n }\n\n if (typeof arity !== \"number\") {\n arity = sync.length;\n }\n\n return buildOperation({\n name,\n arity,\n sync: function(args) {\n return sync.apply(this, args);\n },\n async: function(args, resolve, reject) {\n if (async) {\n async.apply(this, args).then(resolve, reject);\n } else if (errback) {\n errback.call(this, ...args, (err, value) => {\n if (err == null) resolve(value);\n else reject(err);\n });\n } else {\n resolve(sync.apply(this, args));\n }\n },\n });\n}\n\nfunction wrapGenerator(genFn) {\n return setFunctionMetadata(genFn.name, genFn.length, function(...args) {\n return genFn.apply(this, args);\n });\n}\n\nfunction buildOperation({ name, arity, sync, async }) {\n return setFunctionMetadata(name, arity, function*(...args) {\n const resume = yield GENSYNC_START;\n if (!resume) {\n // Break the tail call to avoid a bug in V8 v6.X with --harmony enabled.\n const res = sync.call(this, args);\n return res;\n }\n\n let result;\n try {\n async.call(\n this,\n args,\n value => {\n if (result) return;\n\n result = { value };\n resume();\n },\n err => {\n if (result) return;\n\n result = { err };\n resume();\n }\n );\n } catch (err) {\n result = { err };\n resume();\n }\n\n // Suspend until the callbacks run. Will resume synchronously if the\n // callback was already called.\n yield GENSYNC_SUSPEND;\n\n if (result.hasOwnProperty(\"err\")) {\n throw result.err;\n }\n\n return result.value;\n });\n}\n\nfunction evaluateSync(gen) {\n let value;\n while (!({ value } = gen.next()).done) {\n assertStart(value, gen);\n }\n return value;\n}\n\nfunction evaluateAsync(gen, resolve, reject) {\n (function step() {\n try {\n let value;\n while (!({ value } = gen.next()).done) {\n assertStart(value, gen);\n\n // If this throws, it is considered to have broken the contract\n // established for async handlers. If these handlers are called\n // synchronously, it is also considered bad behavior.\n let sync = true;\n let didSyncResume = false;\n const out = gen.next(() => {\n if (sync) {\n didSyncResume = true;\n } else {\n step();\n }\n });\n sync = false;\n\n assertSuspend(out, gen);\n\n if (!didSyncResume) {\n // Callback wasn't called synchronously, so break out of the loop\n // and let it call 'step' later.\n return;\n }\n }\n\n return resolve(value);\n } catch (err) {\n return reject(err);\n }\n })();\n}\n\nfunction assertStart(value, gen) {\n if (value === GENSYNC_START) return;\n\n throwError(\n gen,\n makeError(\n `Got unexpected yielded value in gensync generator: ${JSON.stringify(\n value\n )}. Did you perhaps mean to use 'yield*' instead of 'yield'?`,\n GENSYNC_EXPECTED_START\n )\n );\n}\nfunction assertSuspend({ value, done }, gen) {\n if (!done && value === GENSYNC_SUSPEND) return;\n\n throwError(\n gen,\n makeError(\n done\n ? \"Unexpected generator completion. If you get this, it is probably a gensync bug.\"\n : `Expected GENSYNC_SUSPEND, got ${JSON.stringify(\n value\n )}. If you get this, it is probably a gensync bug.`,\n GENSYNC_EXPECTED_SUSPEND\n )\n );\n}\n\nfunction throwError(gen, err) {\n // Call `.throw` so that users can step in a debugger to easily see which\n // 'yield' passed an unexpected value. If the `.throw` call didn't throw\n // back to the generator, we explicitly do it to stop the error\n // from being swallowed by user code try/catches.\n if (gen.throw) gen.throw(err);\n throw err;\n}\n\nfunction isIterable(value) {\n return (\n !!value &&\n (typeof value === \"object\" || typeof value === \"function\") &&\n !value[Symbol.iterator]\n );\n}\n\nfunction setFunctionMetadata(name, arity, fn) {\n if (typeof name === \"string\") {\n // This should always work on the supported Node versions, but for the\n // sake of users that are compiling to older versions, we check for\n // configurability so we don't throw.\n const nameDesc = Object.getOwnPropertyDescriptor(fn, \"name\");\n if (!nameDesc || nameDesc.configurable) {\n Object.defineProperty(\n fn,\n \"name\",\n Object.assign(nameDesc || {}, {\n configurable: true,\n value: name,\n })\n );\n }\n }\n\n if (typeof arity === \"number\") {\n const lengthDesc = Object.getOwnPropertyDescriptor(fn, \"length\");\n if (!lengthDesc || lengthDesc.configurable) {\n Object.defineProperty(\n fn,\n \"length\",\n Object.assign(lengthDesc || {}, {\n configurable: true,\n value: arity,\n })\n );\n }\n }\n\n return fn;\n}\n","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _util = require(\"../util\");\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar cloneNode = function cloneNode(obj, parent) {\n if (typeof obj !== 'object' || obj === null) {\n return obj;\n }\n\n var cloned = new obj.constructor();\n\n for (var i in obj) {\n if (!obj.hasOwnProperty(i)) {\n continue;\n }\n\n var value = obj[i];\n var type = typeof value;\n\n if (i === 'parent' && type === 'object') {\n if (parent) {\n cloned[i] = parent;\n }\n } else if (value instanceof Array) {\n cloned[i] = value.map(function (j) {\n return cloneNode(j, cloned);\n });\n } else {\n cloned[i] = cloneNode(value, cloned);\n }\n }\n\n return cloned;\n};\n\nvar Node = /*#__PURE__*/function () {\n function Node(opts) {\n if (opts === void 0) {\n opts = {};\n }\n\n Object.assign(this, opts);\n this.spaces = this.spaces || {};\n this.spaces.before = this.spaces.before || '';\n this.spaces.after = this.spaces.after || '';\n }\n\n var _proto = Node.prototype;\n\n _proto.remove = function remove() {\n if (this.parent) {\n this.parent.removeChild(this);\n }\n\n this.parent = undefined;\n return this;\n };\n\n _proto.replaceWith = function replaceWith() {\n if (this.parent) {\n for (var index in arguments) {\n this.parent.insertBefore(this, arguments[index]);\n }\n\n this.remove();\n }\n\n return this;\n };\n\n _proto.next = function next() {\n return this.parent.at(this.parent.index(this) + 1);\n };\n\n _proto.prev = function prev() {\n return this.parent.at(this.parent.index(this) - 1);\n };\n\n _proto.clone = function clone(overrides) {\n if (overrides === void 0) {\n overrides = {};\n }\n\n var cloned = cloneNode(this);\n\n for (var name in overrides) {\n cloned[name] = overrides[name];\n }\n\n return cloned;\n }\n /**\n * Some non-standard syntax doesn't follow normal escaping rules for css.\n * This allows non standard syntax to be appended to an existing property\n * by specifying the escaped value. By specifying the escaped value,\n * illegal characters are allowed to be directly inserted into css output.\n * @param {string} name the property to set\n * @param {any} value the unescaped value of the property\n * @param {string} valueEscaped optional. the escaped value of the property.\n */\n ;\n\n _proto.appendToPropertyAndEscape = function appendToPropertyAndEscape(name, value, valueEscaped) {\n if (!this.raws) {\n this.raws = {};\n }\n\n var originalValue = this[name];\n var originalEscaped = this.raws[name];\n this[name] = originalValue + value; // this may trigger a setter that updates raws, so it has to be set first.\n\n if (originalEscaped || valueEscaped !== value) {\n this.raws[name] = (originalEscaped || originalValue) + valueEscaped;\n } else {\n delete this.raws[name]; // delete any escaped value that was created by the setter.\n }\n }\n /**\n * Some non-standard syntax doesn't follow normal escaping rules for css.\n * This allows the escaped value to be specified directly, allowing illegal\n * characters to be directly inserted into css output.\n * @param {string} name the property to set\n * @param {any} value the unescaped value of the property\n * @param {string} valueEscaped the escaped value of the property.\n */\n ;\n\n _proto.setPropertyAndEscape = function setPropertyAndEscape(name, value, valueEscaped) {\n if (!this.raws) {\n this.raws = {};\n }\n\n this[name] = value; // this may trigger a setter that updates raws, so it has to be set first.\n\n this.raws[name] = valueEscaped;\n }\n /**\n * When you want a value to passed through to CSS directly. This method\n * deletes the corresponding raw value causing the stringifier to fallback\n * to the unescaped value.\n * @param {string} name the property to set.\n * @param {any} value The value that is both escaped and unescaped.\n */\n ;\n\n _proto.setPropertyWithoutEscape = function setPropertyWithoutEscape(name, value) {\n this[name] = value; // this may trigger a setter that updates raws, so it has to be set first.\n\n if (this.raws) {\n delete this.raws[name];\n }\n }\n /**\n *\n * @param {number} line The number (starting with 1)\n * @param {number} column The column number (starting with 1)\n */\n ;\n\n _proto.isAtPosition = function isAtPosition(line, column) {\n if (this.source && this.source.start && this.source.end) {\n if (this.source.start.line > line) {\n return false;\n }\n\n if (this.source.end.line < line) {\n return false;\n }\n\n if (this.source.start.line === line && this.source.start.column > column) {\n return false;\n }\n\n if (this.source.end.line === line && this.source.end.column < column) {\n return false;\n }\n\n return true;\n }\n\n return undefined;\n };\n\n _proto.stringifyProperty = function stringifyProperty(name) {\n return this.raws && this.raws[name] || this[name];\n };\n\n _proto.valueToString = function valueToString() {\n return String(this.stringifyProperty(\"value\"));\n };\n\n _proto.toString = function toString() {\n return [this.rawSpaceBefore, this.valueToString(), this.rawSpaceAfter].join('');\n };\n\n _createClass(Node, [{\n key: \"rawSpaceBefore\",\n get: function get() {\n var rawSpace = this.raws && this.raws.spaces && this.raws.spaces.before;\n\n if (rawSpace === undefined) {\n rawSpace = this.spaces && this.spaces.before;\n }\n\n return rawSpace || \"\";\n },\n set: function set(raw) {\n (0, _util.ensureObject)(this, \"raws\", \"spaces\");\n this.raws.spaces.before = raw;\n }\n }, {\n key: \"rawSpaceAfter\",\n get: function get() {\n var rawSpace = this.raws && this.raws.spaces && this.raws.spaces.after;\n\n if (rawSpace === undefined) {\n rawSpace = this.spaces.after;\n }\n\n return rawSpace || \"\";\n },\n set: function set(raw) {\n (0, _util.ensureObject)(this, \"raws\", \"spaces\");\n this.raws.spaces.after = raw;\n }\n }]);\n\n return Node;\n}();\n\nexports[\"default\"] = Node;\nmodule.exports = exports.default;","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n","var toObject = require('../internals/to-object');\n\nvar hasOwnProperty = {}.hasOwnProperty;\n\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n return hasOwnProperty.call(toObject(it), key);\n};\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst t = __importStar(require(\"@babel/types\"));\nconst template_1 = __importDefault(require(\"@babel/template\"));\nconst plugin_syntax_jsx_1 = __importDefault(require(\"@babel/plugin-syntax-jsx\"));\nconst helper_module_imports_1 = require(\"@babel/helper-module-imports\");\nconst transform_vue_jsx_1 = __importDefault(require(\"./transform-vue-jsx\"));\nconst sugar_fragment_1 = __importDefault(require(\"./sugar-fragment\"));\nconst hasJSX = (parentPath) => {\n let fileHasJSX = false;\n parentPath.traverse({\n JSXElement(path) {\n fileHasJSX = true;\n path.stop();\n },\n JSXFragment(path) {\n fileHasJSX = true;\n path.stop();\n },\n });\n return fileHasJSX;\n};\nconst JSX_ANNOTATION_REGEX = /\\*?\\s*@jsx\\s+([^\\s]+)/;\nexports.default = ({ types }) => ({\n name: 'babel-plugin-jsx',\n inherits: plugin_syntax_jsx_1.default,\n visitor: Object.assign(Object.assign(Object.assign({}, transform_vue_jsx_1.default), sugar_fragment_1.default), { Program: {\n enter(path, state) {\n if (hasJSX(path)) {\n const importNames = [\n 'createVNode',\n 'Fragment',\n 'resolveComponent',\n 'withDirectives',\n 'vShow',\n 'vModelSelect',\n 'vModelText',\n 'vModelCheckbox',\n 'vModelRadio',\n 'vModelText',\n 'vModelDynamic',\n 'resolveDirective',\n 'mergeProps',\n 'createTextVNode',\n 'isVNode',\n ];\n if (helper_module_imports_1.isModule(path)) {\n // import { createVNode } from \"vue\";\n const importMap = {};\n importNames.forEach((name) => {\n state.set(name, () => {\n if (importMap[name]) {\n return types.cloneNode(importMap[name]);\n }\n const identifier = helper_module_imports_1.addNamed(path, name, 'vue', {\n ensureLiveReference: true,\n });\n importMap[name] = identifier;\n return identifier;\n });\n });\n const { enableObjectSlots = true } = state.opts;\n if (enableObjectSlots) {\n state.set('@vue/babel-plugin-jsx/runtimeIsSlot', () => {\n if (importMap.runtimeIsSlot) {\n return importMap.runtimeIsSlot;\n }\n const { name: isVNodeName } = state.get('isVNode')();\n const isSlot = path.scope.generateUidIdentifier('isSlot');\n const ast = template_1.default.ast `\n function ${isSlot.name}(s) {\n return typeof s === 'function' || (Object.prototype.toString.call(s) === '[object Object]' && !${isVNodeName}(s));\n }\n `;\n const lastImport = path.get('body').filter((p) => p.isImportDeclaration()).pop();\n if (lastImport) {\n lastImport.insertAfter(ast);\n }\n importMap.runtimeIsSlot = isSlot;\n return isSlot;\n });\n }\n }\n else {\n // var _vue = require('vue');\n let sourceName = '';\n importNames.forEach((name) => {\n state.set(name, () => {\n if (!sourceName) {\n sourceName = helper_module_imports_1.addNamespace(path, 'vue', {\n ensureLiveReference: true,\n }).name;\n }\n return t.memberExpression(t.identifier(sourceName), t.identifier(name));\n });\n });\n }\n const { opts: { pragma = '' }, file } = state;\n if (pragma) {\n state.set('createVNode', () => t.identifier(pragma));\n }\n if (file.ast.comments) {\n for (const comment of file.ast.comments) {\n const jsxMatches = JSX_ANNOTATION_REGEX.exec(comment.value);\n if (jsxMatches) {\n state.set('createVNode', () => t.identifier(jsxMatches[1]));\n }\n }\n }\n }\n },\n exit(path) {\n const body = path.get('body');\n const specifiersMap = new Map();\n body.filter((nodePath) => t.isImportDeclaration(nodePath.node)\n && nodePath.node.source.value === 'vue')\n .forEach((nodePath) => {\n const { specifiers } = nodePath.node;\n let shouldRemove = false;\n specifiers.forEach((specifier) => {\n if (!specifier.loc && t.isImportSpecifier(specifier) && t.isIdentifier(specifier.imported)) {\n specifiersMap.set(specifier.imported.name, specifier);\n shouldRemove = true;\n }\n });\n if (shouldRemove) {\n nodePath.remove();\n }\n });\n const specifiers = [...specifiersMap.keys()].map((imported) => specifiersMap.get(imported));\n if (specifiers.length) {\n path.unshiftContainer('body', t.importDeclaration(specifiers, t.stringLiteral('vue')));\n }\n },\n } }),\n});\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.SHOULD_SKIP = exports.SHOULD_STOP = exports.REMOVED = void 0;\n\nvar virtualTypes = require(\"./lib/virtual-types\");\n\nvar _debug = require(\"debug\");\n\nvar _index = require(\"../index\");\n\nvar _scope = require(\"../scope\");\n\nvar t = require(\"@babel/types\");\n\nvar _cache = require(\"../cache\");\n\nvar _generator = require(\"@babel/generator\");\n\nvar NodePath_ancestry = require(\"./ancestry\");\n\nvar NodePath_inference = require(\"./inference\");\n\nvar NodePath_replacement = require(\"./replacement\");\n\nvar NodePath_evaluation = require(\"./evaluation\");\n\nvar NodePath_conversion = require(\"./conversion\");\n\nvar NodePath_introspection = require(\"./introspection\");\n\nvar NodePath_context = require(\"./context\");\n\nvar NodePath_removal = require(\"./removal\");\n\nvar NodePath_modification = require(\"./modification\");\n\nvar NodePath_family = require(\"./family\");\n\nvar NodePath_comments = require(\"./comments\");\n\nconst debug = _debug(\"babel\");\n\nconst REMOVED = 1 << 0;\nexports.REMOVED = REMOVED;\nconst SHOULD_STOP = 1 << 1;\nexports.SHOULD_STOP = SHOULD_STOP;\nconst SHOULD_SKIP = 1 << 2;\nexports.SHOULD_SKIP = SHOULD_SKIP;\n\nclass NodePath {\n constructor(hub, parent) {\n this.contexts = [];\n this.state = null;\n this.opts = null;\n this._traverseFlags = 0;\n this.skipKeys = null;\n this.parentPath = null;\n this.container = null;\n this.listKey = null;\n this.key = null;\n this.node = null;\n this.type = null;\n this.parent = parent;\n this.hub = hub;\n this.data = null;\n this.context = null;\n this.scope = null;\n }\n\n static get({\n hub,\n parentPath,\n parent,\n container,\n listKey,\n key\n }) {\n if (!hub && parentPath) {\n hub = parentPath.hub;\n }\n\n if (!parent) {\n throw new Error(\"To get a node path the parent needs to exist\");\n }\n\n const targetNode = container[key];\n\n let paths = _cache.path.get(parent);\n\n if (!paths) {\n paths = new Map();\n\n _cache.path.set(parent, paths);\n }\n\n let path = paths.get(targetNode);\n\n if (!path) {\n path = new NodePath(hub, parent);\n if (targetNode) paths.set(targetNode, path);\n }\n\n path.setup(parentPath, container, listKey, key);\n return path;\n }\n\n getScope(scope) {\n return this.isScope() ? new _scope.default(this) : scope;\n }\n\n setData(key, val) {\n if (this.data == null) {\n this.data = Object.create(null);\n }\n\n return this.data[key] = val;\n }\n\n getData(key, def) {\n if (this.data == null) {\n this.data = Object.create(null);\n }\n\n let val = this.data[key];\n if (val === undefined && def !== undefined) val = this.data[key] = def;\n return val;\n }\n\n buildCodeFrameError(msg, Error = SyntaxError) {\n return this.hub.buildError(this.node, msg, Error);\n }\n\n traverse(visitor, state) {\n (0, _index.default)(this.node, visitor, this.scope, state, this);\n }\n\n set(key, node) {\n t.validate(this.node, key, node);\n this.node[key] = node;\n }\n\n getPathLocation() {\n const parts = [];\n let path = this;\n\n do {\n let key = path.key;\n if (path.inList) key = `${path.listKey}[${key}]`;\n parts.unshift(key);\n } while (path = path.parentPath);\n\n return parts.join(\".\");\n }\n\n debug(message) {\n if (!debug.enabled) return;\n debug(`${this.getPathLocation()} ${this.type}: ${message}`);\n }\n\n toString() {\n return (0, _generator.default)(this.node).code;\n }\n\n get inList() {\n return !!this.listKey;\n }\n\n set inList(inList) {\n if (!inList) {\n this.listKey = null;\n }\n }\n\n get parentKey() {\n return this.listKey || this.key;\n }\n\n get shouldSkip() {\n return !!(this._traverseFlags & SHOULD_SKIP);\n }\n\n set shouldSkip(v) {\n if (v) {\n this._traverseFlags |= SHOULD_SKIP;\n } else {\n this._traverseFlags &= ~SHOULD_SKIP;\n }\n }\n\n get shouldStop() {\n return !!(this._traverseFlags & SHOULD_STOP);\n }\n\n set shouldStop(v) {\n if (v) {\n this._traverseFlags |= SHOULD_STOP;\n } else {\n this._traverseFlags &= ~SHOULD_STOP;\n }\n }\n\n get removed() {\n return !!(this._traverseFlags & REMOVED);\n }\n\n set removed(v) {\n if (v) {\n this._traverseFlags |= REMOVED;\n } else {\n this._traverseFlags &= ~REMOVED;\n }\n }\n\n}\n\nObject.assign(NodePath.prototype, NodePath_ancestry, NodePath_inference, NodePath_replacement, NodePath_evaluation, NodePath_conversion, NodePath_introspection, NodePath_context, NodePath_removal, NodePath_modification, NodePath_family, NodePath_comments);\n\nfor (const type of t.TYPES) {\n const typeKey = `is${type}`;\n const fn = t[typeKey];\n\n NodePath.prototype[typeKey] = function (opts) {\n return fn(this.node, opts);\n };\n\n NodePath.prototype[`assert${type}`] = function (opts) {\n if (!fn(this.node, opts)) {\n throw new TypeError(`Expected node path of type ${type}`);\n }\n };\n}\n\nfor (const type of Object.keys(virtualTypes)) {\n if (type[0] === \"_\") continue;\n if (t.TYPES.indexOf(type) < 0) t.TYPES.push(type);\n const virtualType = virtualTypes[type];\n\n NodePath.prototype[`is${type}`] = function (opts) {\n return virtualType.checkPath(this, opts);\n };\n}\n\nvar _default = NodePath;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.validate = validate;\nexports.typeIs = typeIs;\nexports.validateType = validateType;\nexports.validateOptional = validateOptional;\nexports.validateOptionalType = validateOptionalType;\nexports.arrayOf = arrayOf;\nexports.arrayOfType = arrayOfType;\nexports.validateArrayOfType = validateArrayOfType;\nexports.assertEach = assertEach;\nexports.assertOneOf = assertOneOf;\nexports.assertNodeType = assertNodeType;\nexports.assertNodeOrValueType = assertNodeOrValueType;\nexports.assertValueType = assertValueType;\nexports.assertShape = assertShape;\nexports.assertOptionalChainStart = assertOptionalChainStart;\nexports.chain = chain;\nexports.default = defineType;\nexports.NODE_PARENT_VALIDATIONS = exports.DEPRECATED_KEYS = exports.BUILDER_KEYS = exports.NODE_FIELDS = exports.FLIPPED_ALIAS_KEYS = exports.ALIAS_KEYS = exports.VISITOR_KEYS = void 0;\n\nvar _is = require(\"../validators/is\");\n\nvar _validate = require(\"../validators/validate\");\n\nconst VISITOR_KEYS = {};\nexports.VISITOR_KEYS = VISITOR_KEYS;\nconst ALIAS_KEYS = {};\nexports.ALIAS_KEYS = ALIAS_KEYS;\nconst FLIPPED_ALIAS_KEYS = {};\nexports.FLIPPED_ALIAS_KEYS = FLIPPED_ALIAS_KEYS;\nconst NODE_FIELDS = {};\nexports.NODE_FIELDS = NODE_FIELDS;\nconst BUILDER_KEYS = {};\nexports.BUILDER_KEYS = BUILDER_KEYS;\nconst DEPRECATED_KEYS = {};\nexports.DEPRECATED_KEYS = DEPRECATED_KEYS;\nconst NODE_PARENT_VALIDATIONS = {};\nexports.NODE_PARENT_VALIDATIONS = NODE_PARENT_VALIDATIONS;\n\nfunction getType(val) {\n if (Array.isArray(val)) {\n return \"array\";\n } else if (val === null) {\n return \"null\";\n } else {\n return typeof val;\n }\n}\n\nfunction validate(validate) {\n return {\n validate\n };\n}\n\nfunction typeIs(typeName) {\n return typeof typeName === \"string\" ? assertNodeType(typeName) : assertNodeType(...typeName);\n}\n\nfunction validateType(typeName) {\n return validate(typeIs(typeName));\n}\n\nfunction validateOptional(validate) {\n return {\n validate,\n optional: true\n };\n}\n\nfunction validateOptionalType(typeName) {\n return {\n validate: typeIs(typeName),\n optional: true\n };\n}\n\nfunction arrayOf(elementType) {\n return chain(assertValueType(\"array\"), assertEach(elementType));\n}\n\nfunction arrayOfType(typeName) {\n return arrayOf(typeIs(typeName));\n}\n\nfunction validateArrayOfType(typeName) {\n return validate(arrayOfType(typeName));\n}\n\nfunction assertEach(callback) {\n function validator(node, key, val) {\n if (!Array.isArray(val)) return;\n\n for (let i = 0; i < val.length; i++) {\n const subkey = `${key}[${i}]`;\n const v = val[i];\n callback(node, subkey, v);\n if (process.env.BABEL_TYPES_8_BREAKING) (0, _validate.validateChild)(node, subkey, v);\n }\n }\n\n validator.each = callback;\n return validator;\n}\n\nfunction assertOneOf(...values) {\n function validate(node, key, val) {\n if (values.indexOf(val) < 0) {\n throw new TypeError(`Property ${key} expected value to be one of ${JSON.stringify(values)} but got ${JSON.stringify(val)}`);\n }\n }\n\n validate.oneOf = values;\n return validate;\n}\n\nfunction assertNodeType(...types) {\n function validate(node, key, val) {\n for (const type of types) {\n if ((0, _is.default)(type, val)) {\n (0, _validate.validateChild)(node, key, val);\n return;\n }\n }\n\n throw new TypeError(`Property ${key} of ${node.type} expected node to be of a type ${JSON.stringify(types)} but instead got ${JSON.stringify(val == null ? void 0 : val.type)}`);\n }\n\n validate.oneOfNodeTypes = types;\n return validate;\n}\n\nfunction assertNodeOrValueType(...types) {\n function validate(node, key, val) {\n for (const type of types) {\n if (getType(val) === type || (0, _is.default)(type, val)) {\n (0, _validate.validateChild)(node, key, val);\n return;\n }\n }\n\n throw new TypeError(`Property ${key} of ${node.type} expected node to be of a type ${JSON.stringify(types)} but instead got ${JSON.stringify(val == null ? void 0 : val.type)}`);\n }\n\n validate.oneOfNodeOrValueTypes = types;\n return validate;\n}\n\nfunction assertValueType(type) {\n function validate(node, key, val) {\n const valid = getType(val) === type;\n\n if (!valid) {\n throw new TypeError(`Property ${key} expected type of ${type} but got ${getType(val)}`);\n }\n }\n\n validate.type = type;\n return validate;\n}\n\nfunction assertShape(shape) {\n function validate(node, key, val) {\n const errors = [];\n\n for (const property of Object.keys(shape)) {\n try {\n (0, _validate.validateField)(node, property, val[property], shape[property]);\n } catch (error) {\n if (error instanceof TypeError) {\n errors.push(error.message);\n continue;\n }\n\n throw error;\n }\n }\n\n if (errors.length) {\n throw new TypeError(`Property ${key} of ${node.type} expected to have the following:\\n${errors.join(\"\\n\")}`);\n }\n }\n\n validate.shapeOf = shape;\n return validate;\n}\n\nfunction assertOptionalChainStart() {\n function validate(node) {\n var _current;\n\n let current = node;\n\n while (node) {\n const {\n type\n } = current;\n\n if (type === \"OptionalCallExpression\") {\n if (current.optional) return;\n current = current.callee;\n continue;\n }\n\n if (type === \"OptionalMemberExpression\") {\n if (current.optional) return;\n current = current.object;\n continue;\n }\n\n break;\n }\n\n throw new TypeError(`Non-optional ${node.type} must chain from an optional OptionalMemberExpression or OptionalCallExpression. Found chain from ${(_current = current) == null ? void 0 : _current.type}`);\n }\n\n return validate;\n}\n\nfunction chain(...fns) {\n function validate(...args) {\n for (const fn of fns) {\n fn(...args);\n }\n }\n\n validate.chainOf = fns;\n\n if (fns.length >= 2 && \"type\" in fns[0] && fns[0].type === \"array\" && !(\"each\" in fns[1])) {\n throw new Error(`An assertValueType(\"array\") validator can only be followed by an assertEach(...) validator.`);\n }\n\n return validate;\n}\n\nconst validTypeOpts = [\"aliases\", \"builder\", \"deprecatedAlias\", \"fields\", \"inherits\", \"visitor\", \"validate\"];\nconst validFieldKeys = [\"default\", \"optional\", \"validate\"];\n\nfunction defineType(type, opts = {}) {\n const inherits = opts.inherits && store[opts.inherits] || {};\n let fields = opts.fields;\n\n if (!fields) {\n fields = {};\n\n if (inherits.fields) {\n const keys = Object.getOwnPropertyNames(inherits.fields);\n\n for (const key of keys) {\n const field = inherits.fields[key];\n const def = field.default;\n\n if (Array.isArray(def) ? def.length > 0 : def && typeof def === \"object\") {\n throw new Error(\"field defaults can only be primitives or empty arrays currently\");\n }\n\n fields[key] = {\n default: Array.isArray(def) ? [] : def,\n optional: field.optional,\n validate: field.validate\n };\n }\n }\n }\n\n const visitor = opts.visitor || inherits.visitor || [];\n const aliases = opts.aliases || inherits.aliases || [];\n const builder = opts.builder || inherits.builder || opts.visitor || [];\n\n for (const k of Object.keys(opts)) {\n if (validTypeOpts.indexOf(k) === -1) {\n throw new Error(`Unknown type option \"${k}\" on ${type}`);\n }\n }\n\n if (opts.deprecatedAlias) {\n DEPRECATED_KEYS[opts.deprecatedAlias] = type;\n }\n\n for (const key of visitor.concat(builder)) {\n fields[key] = fields[key] || {};\n }\n\n for (const key of Object.keys(fields)) {\n const field = fields[key];\n\n if (field.default !== undefined && builder.indexOf(key) === -1) {\n field.optional = true;\n }\n\n if (field.default === undefined) {\n field.default = null;\n } else if (!field.validate && field.default != null) {\n field.validate = assertValueType(getType(field.default));\n }\n\n for (const k of Object.keys(field)) {\n if (validFieldKeys.indexOf(k) === -1) {\n throw new Error(`Unknown field key \"${k}\" on ${type}.${key}`);\n }\n }\n }\n\n VISITOR_KEYS[type] = opts.visitor = visitor;\n BUILDER_KEYS[type] = opts.builder = builder;\n NODE_FIELDS[type] = opts.fields = fields;\n ALIAS_KEYS[type] = opts.aliases = aliases;\n aliases.forEach(alias => {\n FLIPPED_ALIAS_KEYS[alias] = FLIPPED_ALIAS_KEYS[alias] || [];\n FLIPPED_ALIAS_KEYS[alias].push(type);\n });\n\n if (opts.validate) {\n NODE_PARENT_VALIDATIONS[type] = opts.validate;\n }\n\n store[type] = opts;\n}\n\nconst store = {};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.program = exports.expression = exports.statements = exports.statement = exports.smart = void 0;\n\nvar formatters = require(\"./formatters\");\n\nvar _builder = require(\"./builder\");\n\nconst smart = (0, _builder.default)(formatters.smart);\nexports.smart = smart;\nconst statement = (0, _builder.default)(formatters.statement);\nexports.statement = statement;\nconst statements = (0, _builder.default)(formatters.statements);\nexports.statements = statements;\nconst expression = (0, _builder.default)(formatters.expression);\nexports.expression = expression;\nconst program = (0, _builder.default)(formatters.program);\nexports.program = program;\n\nvar _default = Object.assign(smart.bind(undefined), {\n smart,\n statement,\n statements,\n expression,\n program,\n ast: smart.ast\n});\n\nexports.default = _default;","'use strict'\n\nlet { isClean, my } = require('./symbols')\nlet Declaration = require('./declaration')\nlet Comment = require('./comment')\nlet Node = require('./node')\n\nlet parse, Rule, AtRule\n\nfunction cleanSource(nodes) {\n return nodes.map(i => {\n if (i.nodes) i.nodes = cleanSource(i.nodes)\n delete i.source\n return i\n })\n}\n\nfunction markDirtyUp(node) {\n node[isClean] = false\n if (node.proxyOf.nodes) {\n for (let i of node.proxyOf.nodes) {\n markDirtyUp(i)\n }\n }\n}\n\nclass Container extends Node {\n push(child) {\n child.parent = this\n this.proxyOf.nodes.push(child)\n return this\n }\n\n each(callback) {\n if (!this.proxyOf.nodes) return undefined\n let iterator = this.getIterator()\n\n let index, result\n while (this.indexes[iterator] < this.proxyOf.nodes.length) {\n index = this.indexes[iterator]\n result = callback(this.proxyOf.nodes[index], index)\n if (result === false) break\n\n this.indexes[iterator] += 1\n }\n\n delete this.indexes[iterator]\n return result\n }\n\n walk(callback) {\n return this.each((child, i) => {\n let result\n try {\n result = callback(child, i)\n } catch (e) {\n throw child.addToError(e)\n }\n if (result !== false && child.walk) {\n result = child.walk(callback)\n }\n\n return result\n })\n }\n\n walkDecls(prop, callback) {\n if (!callback) {\n callback = prop\n return this.walk((child, i) => {\n if (child.type === 'decl') {\n return callback(child, i)\n }\n })\n }\n if (prop instanceof RegExp) {\n return this.walk((child, i) => {\n if (child.type === 'decl' && prop.test(child.prop)) {\n return callback(child, i)\n }\n })\n }\n return this.walk((child, i) => {\n if (child.type === 'decl' && child.prop === prop) {\n return callback(child, i)\n }\n })\n }\n\n walkRules(selector, callback) {\n if (!callback) {\n callback = selector\n\n return this.walk((child, i) => {\n if (child.type === 'rule') {\n return callback(child, i)\n }\n })\n }\n if (selector instanceof RegExp) {\n return this.walk((child, i) => {\n if (child.type === 'rule' && selector.test(child.selector)) {\n return callback(child, i)\n }\n })\n }\n return this.walk((child, i) => {\n if (child.type === 'rule' && child.selector === selector) {\n return callback(child, i)\n }\n })\n }\n\n walkAtRules(name, callback) {\n if (!callback) {\n callback = name\n return this.walk((child, i) => {\n if (child.type === 'atrule') {\n return callback(child, i)\n }\n })\n }\n if (name instanceof RegExp) {\n return this.walk((child, i) => {\n if (child.type === 'atrule' && name.test(child.name)) {\n return callback(child, i)\n }\n })\n }\n return this.walk((child, i) => {\n if (child.type === 'atrule' && child.name === name) {\n return callback(child, i)\n }\n })\n }\n\n walkComments(callback) {\n return this.walk((child, i) => {\n if (child.type === 'comment') {\n return callback(child, i)\n }\n })\n }\n\n append(...children) {\n for (let child of children) {\n let nodes = this.normalize(child, this.last)\n for (let node of nodes) this.proxyOf.nodes.push(node)\n }\n\n this.markDirty()\n\n return this\n }\n\n prepend(...children) {\n children = children.reverse()\n for (let child of children) {\n let nodes = this.normalize(child, this.first, 'prepend').reverse()\n for (let node of nodes) this.proxyOf.nodes.unshift(node)\n for (let id in this.indexes) {\n this.indexes[id] = this.indexes[id] + nodes.length\n }\n }\n\n this.markDirty()\n\n return this\n }\n\n cleanRaws(keepBetween) {\n super.cleanRaws(keepBetween)\n if (this.nodes) {\n for (let node of this.nodes) node.cleanRaws(keepBetween)\n }\n }\n\n insertBefore(exist, add) {\n exist = this.index(exist)\n\n let type = exist === 0 ? 'prepend' : false\n let nodes = this.normalize(add, this.proxyOf.nodes[exist], type).reverse()\n for (let node of nodes) this.proxyOf.nodes.splice(exist, 0, node)\n\n let index\n for (let id in this.indexes) {\n index = this.indexes[id]\n if (exist <= index) {\n this.indexes[id] = index + nodes.length\n }\n }\n\n this.markDirty()\n\n return this\n }\n\n insertAfter(exist, add) {\n exist = this.index(exist)\n\n let nodes = this.normalize(add, this.proxyOf.nodes[exist]).reverse()\n for (let node of nodes) this.proxyOf.nodes.splice(exist + 1, 0, node)\n\n let index\n for (let id in this.indexes) {\n index = this.indexes[id]\n if (exist < index) {\n this.indexes[id] = index + nodes.length\n }\n }\n\n this.markDirty()\n\n return this\n }\n\n removeChild(child) {\n child = this.index(child)\n this.proxyOf.nodes[child].parent = undefined\n this.proxyOf.nodes.splice(child, 1)\n\n let index\n for (let id in this.indexes) {\n index = this.indexes[id]\n if (index >= child) {\n this.indexes[id] = index - 1\n }\n }\n\n this.markDirty()\n\n return this\n }\n\n removeAll() {\n for (let node of this.proxyOf.nodes) node.parent = undefined\n this.proxyOf.nodes = []\n\n this.markDirty()\n\n return this\n }\n\n replaceValues(pattern, opts, callback) {\n if (!callback) {\n callback = opts\n opts = {}\n }\n\n this.walkDecls(decl => {\n if (opts.props && !opts.props.includes(decl.prop)) return\n if (opts.fast && !decl.value.includes(opts.fast)) return\n\n decl.value = decl.value.replace(pattern, callback)\n })\n\n this.markDirty()\n\n return this\n }\n\n every(condition) {\n return this.nodes.every(condition)\n }\n\n some(condition) {\n return this.nodes.some(condition)\n }\n\n index(child) {\n if (typeof child === 'number') return child\n if (child.proxyOf) child = child.proxyOf\n return this.proxyOf.nodes.indexOf(child)\n }\n\n get first() {\n if (!this.proxyOf.nodes) return undefined\n return this.proxyOf.nodes[0]\n }\n\n get last() {\n if (!this.proxyOf.nodes) return undefined\n return this.proxyOf.nodes[this.proxyOf.nodes.length - 1]\n }\n\n normalize(nodes, sample) {\n if (typeof nodes === 'string') {\n nodes = cleanSource(parse(nodes).nodes)\n } else if (Array.isArray(nodes)) {\n nodes = nodes.slice(0)\n for (let i of nodes) {\n if (i.parent) i.parent.removeChild(i, 'ignore')\n }\n } else if (nodes.type === 'root' && this.type !== 'document') {\n nodes = nodes.nodes.slice(0)\n for (let i of nodes) {\n if (i.parent) i.parent.removeChild(i, 'ignore')\n }\n } else if (nodes.type) {\n nodes = [nodes]\n } else if (nodes.prop) {\n if (typeof nodes.value === 'undefined') {\n throw new Error('Value field is missed in node creation')\n } else if (typeof nodes.value !== 'string') {\n nodes.value = String(nodes.value)\n }\n nodes = [new Declaration(nodes)]\n } else if (nodes.selector) {\n nodes = [new Rule(nodes)]\n } else if (nodes.name) {\n nodes = [new AtRule(nodes)]\n } else if (nodes.text) {\n nodes = [new Comment(nodes)]\n } else {\n throw new Error('Unknown node type in node creation')\n }\n\n let processed = nodes.map(i => {\n // istanbul ignore next\n if (!i[my]) Container.rebuild(i)\n i = i.proxyOf\n if (i.parent) i.parent.removeChild(i)\n if (i[isClean]) markDirtyUp(i)\n if (typeof i.raws.before === 'undefined') {\n if (sample && typeof sample.raws.before !== 'undefined') {\n i.raws.before = sample.raws.before.replace(/\\S/g, '')\n }\n }\n i.parent = this\n return i\n })\n\n return processed\n }\n\n getProxyProcessor() {\n return {\n set(node, prop, value) {\n if (node[prop] === value) return true\n node[prop] = value\n if (prop === 'name' || prop === 'params' || prop === 'selector') {\n node.markDirty()\n }\n return true\n },\n\n get(node, prop) {\n if (prop === 'proxyOf') {\n return node\n } else if (!node[prop]) {\n return node[prop]\n } else if (\n prop === 'each' ||\n (typeof prop === 'string' && prop.startsWith('walk'))\n ) {\n return (...args) => {\n return node[prop](\n ...args.map(i => {\n if (typeof i === 'function') {\n return (child, index) => i(child.toProxy(), index)\n } else {\n return i\n }\n })\n )\n }\n } else if (prop === 'every' || prop === 'some') {\n return cb => {\n return node[prop]((child, ...other) =>\n cb(child.toProxy(), ...other)\n )\n }\n } else if (prop === 'root') {\n return () => node.root().toProxy()\n } else if (prop === 'nodes') {\n return node.nodes.map(i => i.toProxy())\n } else if (prop === 'first' || prop === 'last') {\n return node[prop].toProxy()\n } else {\n return node[prop]\n }\n }\n }\n }\n\n getIterator() {\n if (!this.lastEach) this.lastEach = 0\n if (!this.indexes) this.indexes = {}\n\n this.lastEach += 1\n let iterator = this.lastEach\n this.indexes[iterator] = 0\n\n return iterator\n }\n}\n\nContainer.registerParse = dependant => {\n parse = dependant\n}\n\nContainer.registerRule = dependant => {\n Rule = dependant\n}\n\nContainer.registerAtRule = dependant => {\n AtRule = dependant\n}\n\nmodule.exports = Container\nContainer.default = Container\n\n// istanbul ignore next\nContainer.rebuild = node => {\n if (node.type === 'atrule') {\n Object.setPrototypeOf(node, AtRule.prototype)\n } else if (node.type === 'rule') {\n Object.setPrototypeOf(node, Rule.prototype)\n } else if (node.type === 'decl') {\n Object.setPrototypeOf(node, Declaration.prototype)\n } else if (node.type === 'comment') {\n Object.setPrototypeOf(node, Comment.prototype)\n }\n\n node[my] = true\n\n if (node.nodes) {\n node.nodes.forEach(child => {\n Container.rebuild(child)\n })\n }\n}\n","const { MAX_SAFE_COMPONENT_LENGTH } = require('./constants')\nconst debug = require('./debug')\nexports = module.exports = {}\n\n// The actual regexps go on exports.re\nconst re = exports.re = []\nconst src = exports.src = []\nconst t = exports.t = {}\nlet R = 0\n\nconst createToken = (name, value, isGlobal) => {\n const index = R++\n debug(index, value)\n t[name] = index\n src[index] = value\n re[index] = new RegExp(value, isGlobal ? 'g' : undefined)\n}\n\n// The following Regular Expressions can be used for tokenizing,\n// validating, and parsing SemVer version strings.\n\n// ## Numeric Identifier\n// A single `0`, or a non-zero digit followed by zero or more digits.\n\ncreateToken('NUMERICIDENTIFIER', '0|[1-9]\\\\d*')\ncreateToken('NUMERICIDENTIFIERLOOSE', '[0-9]+')\n\n// ## Non-numeric Identifier\n// Zero or more digits, followed by a letter or hyphen, and then zero or\n// more letters, digits, or hyphens.\n\ncreateToken('NONNUMERICIDENTIFIER', '\\\\d*[a-zA-Z-][a-zA-Z0-9-]*')\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\ncreateToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n\ncreateToken('PRERELEASEIDENTIFIER', `(?:${src[t.NUMERICIDENTIFIER]\n}|${src[t.NONNUMERICIDENTIFIER]})`)\n\ncreateToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NUMERICIDENTIFIERLOOSE]\n}|${src[t.NONNUMERICIDENTIFIER]})`)\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\ncreateToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIER]})*))`)\n\ncreateToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`)\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\ncreateToken('BUILDIDENTIFIER', '[0-9A-Za-z-]+')\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\ncreateToken('BUILD', `(?:\\\\+(${src[t.BUILDIDENTIFIER]\n}(?:\\\\.${src[t.BUILDIDENTIFIER]})*))`)\n\n// ## Full Version String\n// A main version, followed optionally by a pre-release version and\n// build metadata.\n\n// Note that the only major, minor, patch, and pre-release sections of\n// the version string are capturing groups. The build metadata is not a\n// capturing group, because it should not ever be used in version\n// comparison.\n\ncreateToken('FULLPLAIN', `v?${src[t.MAINVERSION]\n}${src[t.PRERELEASE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('FULL', `^${src[t.FULLPLAIN]}$`)\n\n// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.\n// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty\n// common in the npm registry.\ncreateToken('LOOSEPLAIN', `[v=\\\\s]*${src[t.MAINVERSIONLOOSE]\n}${src[t.PRERELEASELOOSE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`)\n\ncreateToken('GTLT', '((?:<|>)?=?)')\n\n// Something like \"2.*\" or \"1.2.x\".\n// Note that \"x.x\" is a valid xRange identifer, meaning \"any version\"\n// Only the first item is strictly required.\ncreateToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`)\ncreateToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\\\*`)\n\ncreateToken('XRANGEPLAIN', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:${src[t.PRERELEASE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGEPLAINLOOSE', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:${src[t.PRERELEASELOOSE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAIN]}$`)\ncreateToken('XRANGELOOSE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\ncreateToken('COERCE', `${'(^|[^\\\\d])' +\n '(\\\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +\n `(?:$|[^\\\\d])`)\ncreateToken('COERCERTL', src[t.COERCE], true)\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\ncreateToken('LONETILDE', '(?:~>?)')\n\ncreateToken('TILDETRIM', `(\\\\s*)${src[t.LONETILDE]}\\\\s+`, true)\nexports.tildeTrimReplace = '$1~'\n\ncreateToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\ncreateToken('LONECARET', '(?:\\\\^)')\n\ncreateToken('CARETTRIM', `(\\\\s*)${src[t.LONECARET]}\\\\s+`, true)\nexports.caretTrimReplace = '$1^'\n\ncreateToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\ncreateToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\\\s*(${src[t.LOOSEPLAIN]})$|^$`)\ncreateToken('COMPARATOR', `^${src[t.GTLT]}\\\\s*(${src[t.FULLPLAIN]})$|^$`)\n\n// An expression to strip any whitespace between the gtlt and the thing\n// it modifies, so that `> 1.2.3` ==> `>1.2.3`\ncreateToken('COMPARATORTRIM', `(\\\\s*)${src[t.GTLT]\n}\\\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true)\nexports.comparatorTrimReplace = '$1$2$3'\n\n// Something like `1.2.3 - 1.2.4`\n// Note that these all use the loose form, because they'll be\n// checked against either the strict or loose comparator form\n// later.\ncreateToken('HYPHENRANGE', `^\\\\s*(${src[t.XRANGEPLAIN]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAIN]})` +\n `\\\\s*$`)\n\ncreateToken('HYPHENRANGELOOSE', `^\\\\s*(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s*$`)\n\n// Star ranges basically just allow anything at all.\ncreateToken('STAR', '(<|>)?=?\\\\s*\\\\*')\n// >=0.0.0 is like a star\ncreateToken('GTE0', '^\\\\s*>=\\\\s*0\\.0\\.0\\\\s*$')\ncreateToken('GTE0PRE', '^\\\\s*>=\\\\s*0\\.0\\.0-0\\\\s*$')\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.NOT_LOCAL_BINDING = exports.BLOCK_SCOPED_SYMBOL = exports.INHERIT_KEYS = exports.UNARY_OPERATORS = exports.STRING_UNARY_OPERATORS = exports.NUMBER_UNARY_OPERATORS = exports.BOOLEAN_UNARY_OPERATORS = exports.ASSIGNMENT_OPERATORS = exports.BINARY_OPERATORS = exports.NUMBER_BINARY_OPERATORS = exports.BOOLEAN_BINARY_OPERATORS = exports.COMPARISON_BINARY_OPERATORS = exports.EQUALITY_BINARY_OPERATORS = exports.BOOLEAN_NUMBER_BINARY_OPERATORS = exports.UPDATE_OPERATORS = exports.LOGICAL_OPERATORS = exports.COMMENT_KEYS = exports.FOR_INIT_KEYS = exports.FLATTENABLE_KEYS = exports.STATEMENT_OR_BLOCK_KEYS = void 0;\nconst STATEMENT_OR_BLOCK_KEYS = [\"consequent\", \"body\", \"alternate\"];\nexports.STATEMENT_OR_BLOCK_KEYS = STATEMENT_OR_BLOCK_KEYS;\nconst FLATTENABLE_KEYS = [\"body\", \"expressions\"];\nexports.FLATTENABLE_KEYS = FLATTENABLE_KEYS;\nconst FOR_INIT_KEYS = [\"left\", \"init\"];\nexports.FOR_INIT_KEYS = FOR_INIT_KEYS;\nconst COMMENT_KEYS = [\"leadingComments\", \"trailingComments\", \"innerComments\"];\nexports.COMMENT_KEYS = COMMENT_KEYS;\nconst LOGICAL_OPERATORS = [\"||\", \"&&\", \"??\"];\nexports.LOGICAL_OPERATORS = LOGICAL_OPERATORS;\nconst UPDATE_OPERATORS = [\"++\", \"--\"];\nexports.UPDATE_OPERATORS = UPDATE_OPERATORS;\nconst BOOLEAN_NUMBER_BINARY_OPERATORS = [\">\", \"<\", \">=\", \"<=\"];\nexports.BOOLEAN_NUMBER_BINARY_OPERATORS = BOOLEAN_NUMBER_BINARY_OPERATORS;\nconst EQUALITY_BINARY_OPERATORS = [\"==\", \"===\", \"!=\", \"!==\"];\nexports.EQUALITY_BINARY_OPERATORS = EQUALITY_BINARY_OPERATORS;\nconst COMPARISON_BINARY_OPERATORS = [...EQUALITY_BINARY_OPERATORS, \"in\", \"instanceof\"];\nexports.COMPARISON_BINARY_OPERATORS = COMPARISON_BINARY_OPERATORS;\nconst BOOLEAN_BINARY_OPERATORS = [...COMPARISON_BINARY_OPERATORS, ...BOOLEAN_NUMBER_BINARY_OPERATORS];\nexports.BOOLEAN_BINARY_OPERATORS = BOOLEAN_BINARY_OPERATORS;\nconst NUMBER_BINARY_OPERATORS = [\"-\", \"/\", \"%\", \"*\", \"**\", \"&\", \"|\", \">>\", \">>>\", \"<<\", \"^\"];\nexports.NUMBER_BINARY_OPERATORS = NUMBER_BINARY_OPERATORS;\nconst BINARY_OPERATORS = [\"+\", ...NUMBER_BINARY_OPERATORS, ...BOOLEAN_BINARY_OPERATORS];\nexports.BINARY_OPERATORS = BINARY_OPERATORS;\nconst ASSIGNMENT_OPERATORS = [\"=\", \"+=\", ...NUMBER_BINARY_OPERATORS.map(op => op + \"=\"), ...LOGICAL_OPERATORS.map(op => op + \"=\")];\nexports.ASSIGNMENT_OPERATORS = ASSIGNMENT_OPERATORS;\nconst BOOLEAN_UNARY_OPERATORS = [\"delete\", \"!\"];\nexports.BOOLEAN_UNARY_OPERATORS = BOOLEAN_UNARY_OPERATORS;\nconst NUMBER_UNARY_OPERATORS = [\"+\", \"-\", \"~\"];\nexports.NUMBER_UNARY_OPERATORS = NUMBER_UNARY_OPERATORS;\nconst STRING_UNARY_OPERATORS = [\"typeof\"];\nexports.STRING_UNARY_OPERATORS = STRING_UNARY_OPERATORS;\nconst UNARY_OPERATORS = [\"void\", \"throw\", ...BOOLEAN_UNARY_OPERATORS, ...NUMBER_UNARY_OPERATORS, ...STRING_UNARY_OPERATORS];\nexports.UNARY_OPERATORS = UNARY_OPERATORS;\nconst INHERIT_KEYS = {\n optional: [\"typeAnnotation\", \"typeParameters\", \"returnType\"],\n force: [\"start\", \"loc\", \"end\"]\n};\nexports.INHERIT_KEYS = INHERIT_KEYS;\nconst BLOCK_SCOPED_SYMBOL = Symbol.for(\"var used to be block scoped\");\nexports.BLOCK_SCOPED_SYMBOL = BLOCK_SCOPED_SYMBOL;\nconst NOT_LOCAL_BINDING = Symbol.for(\"should not be considered a local binding\");\nexports.NOT_LOCAL_BINDING = NOT_LOCAL_BINDING;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = cloneNode;\n\nvar _definitions = require(\"../definitions\");\n\nvar _generated = require(\"../validators/generated\");\n\nconst has = Function.call.bind(Object.prototype.hasOwnProperty);\n\nfunction cloneIfNode(obj, deep, withoutLoc) {\n if (obj && typeof obj.type === \"string\") {\n return cloneNode(obj, deep, withoutLoc);\n }\n\n return obj;\n}\n\nfunction cloneIfNodeOrArray(obj, deep, withoutLoc) {\n if (Array.isArray(obj)) {\n return obj.map(node => cloneIfNode(node, deep, withoutLoc));\n }\n\n return cloneIfNode(obj, deep, withoutLoc);\n}\n\nfunction cloneNode(node, deep = true, withoutLoc = false) {\n if (!node) return node;\n const {\n type\n } = node;\n const newNode = {\n type: node.type\n };\n\n if ((0, _generated.isIdentifier)(node)) {\n newNode.name = node.name;\n\n if (has(node, \"optional\") && typeof node.optional === \"boolean\") {\n newNode.optional = node.optional;\n }\n\n if (has(node, \"typeAnnotation\")) {\n newNode.typeAnnotation = deep ? cloneIfNodeOrArray(node.typeAnnotation, true, withoutLoc) : node.typeAnnotation;\n }\n } else if (!has(_definitions.NODE_FIELDS, type)) {\n throw new Error(`Unknown node type: \"${type}\"`);\n } else {\n for (const field of Object.keys(_definitions.NODE_FIELDS[type])) {\n if (has(node, field)) {\n if (deep) {\n newNode[field] = (0, _generated.isFile)(node) && field === \"comments\" ? maybeCloneComments(node.comments, deep, withoutLoc) : cloneIfNodeOrArray(node[field], true, withoutLoc);\n } else {\n newNode[field] = node[field];\n }\n }\n }\n }\n\n if (has(node, \"loc\")) {\n if (withoutLoc) {\n newNode.loc = null;\n } else {\n newNode.loc = node.loc;\n }\n }\n\n if (has(node, \"leadingComments\")) {\n newNode.leadingComments = maybeCloneComments(node.leadingComments, deep, withoutLoc);\n }\n\n if (has(node, \"innerComments\")) {\n newNode.innerComments = maybeCloneComments(node.innerComments, deep, withoutLoc);\n }\n\n if (has(node, \"trailingComments\")) {\n newNode.trailingComments = maybeCloneComments(node.trailingComments, deep, withoutLoc);\n }\n\n if (has(node, \"extra\")) {\n newNode.extra = Object.assign({}, node.extra);\n }\n\n return newNode;\n}\n\nfunction maybeCloneComments(comments, deep, withoutLoc) {\n if (!comments || !deep) {\n return comments;\n }\n\n return comments.map(({\n type,\n value,\n loc\n }) => {\n if (withoutLoc) {\n return {\n type,\n value,\n loc: null\n };\n }\n\n return {\n type,\n value,\n loc\n };\n });\n}","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nconst beforeExpr = true;\nconst startsExpr = true;\nconst isLoop = true;\nconst isAssign = true;\nconst prefix = true;\nconst postfix = true;\nclass TokenType {\n constructor(label, conf = {}) {\n this.label = void 0;\n this.keyword = void 0;\n this.beforeExpr = void 0;\n this.startsExpr = void 0;\n this.rightAssociative = void 0;\n this.isLoop = void 0;\n this.isAssign = void 0;\n this.prefix = void 0;\n this.postfix = void 0;\n this.binop = void 0;\n this.updateContext = void 0;\n this.label = label;\n this.keyword = conf.keyword;\n this.beforeExpr = !!conf.beforeExpr;\n this.startsExpr = !!conf.startsExpr;\n this.rightAssociative = !!conf.rightAssociative;\n this.isLoop = !!conf.isLoop;\n this.isAssign = !!conf.isAssign;\n this.prefix = !!conf.prefix;\n this.postfix = !!conf.postfix;\n this.binop = conf.binop != null ? conf.binop : null;\n this.updateContext = null;\n }\n\n}\nconst keywords$1 = new Map();\n\nfunction createKeyword(name, options = {}) {\n options.keyword = name;\n const token = new TokenType(name, options);\n keywords$1.set(name, token);\n return token;\n}\n\nfunction createBinop(name, binop) {\n return new TokenType(name, {\n beforeExpr,\n binop\n });\n}\n\nconst types$1 = {\n num: new TokenType(\"num\", {\n startsExpr\n }),\n bigint: new TokenType(\"bigint\", {\n startsExpr\n }),\n decimal: new TokenType(\"decimal\", {\n startsExpr\n }),\n regexp: new TokenType(\"regexp\", {\n startsExpr\n }),\n string: new TokenType(\"string\", {\n startsExpr\n }),\n name: new TokenType(\"name\", {\n startsExpr\n }),\n privateName: new TokenType(\"#name\", {\n startsExpr\n }),\n eof: new TokenType(\"eof\"),\n bracketL: new TokenType(\"[\", {\n beforeExpr,\n startsExpr\n }),\n bracketHashL: new TokenType(\"#[\", {\n beforeExpr,\n startsExpr\n }),\n bracketBarL: new TokenType(\"[|\", {\n beforeExpr,\n startsExpr\n }),\n bracketR: new TokenType(\"]\"),\n bracketBarR: new TokenType(\"|]\"),\n braceL: new TokenType(\"{\", {\n beforeExpr,\n startsExpr\n }),\n braceBarL: new TokenType(\"{|\", {\n beforeExpr,\n startsExpr\n }),\n braceHashL: new TokenType(\"#{\", {\n beforeExpr,\n startsExpr\n }),\n braceR: new TokenType(\"}\", {\n beforeExpr\n }),\n braceBarR: new TokenType(\"|}\"),\n parenL: new TokenType(\"(\", {\n beforeExpr,\n startsExpr\n }),\n parenR: new TokenType(\")\"),\n comma: new TokenType(\",\", {\n beforeExpr\n }),\n semi: new TokenType(\";\", {\n beforeExpr\n }),\n colon: new TokenType(\":\", {\n beforeExpr\n }),\n doubleColon: new TokenType(\"::\", {\n beforeExpr\n }),\n dot: new TokenType(\".\"),\n question: new TokenType(\"?\", {\n beforeExpr\n }),\n questionDot: new TokenType(\"?.\"),\n arrow: new TokenType(\"=>\", {\n beforeExpr\n }),\n template: new TokenType(\"template\"),\n ellipsis: new TokenType(\"...\", {\n beforeExpr\n }),\n backQuote: new TokenType(\"`\", {\n startsExpr\n }),\n dollarBraceL: new TokenType(\"${\", {\n beforeExpr,\n startsExpr\n }),\n at: new TokenType(\"@\"),\n hash: new TokenType(\"#\", {\n startsExpr\n }),\n interpreterDirective: new TokenType(\"#!...\"),\n eq: new TokenType(\"=\", {\n beforeExpr,\n isAssign\n }),\n assign: new TokenType(\"_=\", {\n beforeExpr,\n isAssign\n }),\n slashAssign: new TokenType(\"_=\", {\n beforeExpr,\n isAssign\n }),\n incDec: new TokenType(\"++/--\", {\n prefix,\n postfix,\n startsExpr\n }),\n bang: new TokenType(\"!\", {\n beforeExpr,\n prefix,\n startsExpr\n }),\n tilde: new TokenType(\"~\", {\n beforeExpr,\n prefix,\n startsExpr\n }),\n pipeline: createBinop(\"|>\", 0),\n nullishCoalescing: createBinop(\"??\", 1),\n logicalOR: createBinop(\"||\", 1),\n logicalAND: createBinop(\"&&\", 2),\n bitwiseOR: createBinop(\"|\", 3),\n bitwiseXOR: createBinop(\"^\", 4),\n bitwiseAND: createBinop(\"&\", 5),\n equality: createBinop(\"==/!=/===/!==\", 6),\n relational: createBinop(\"/<=/>=\", 7),\n bitShift: createBinop(\"<>/>>>\", 8),\n plusMin: new TokenType(\"+/-\", {\n beforeExpr,\n binop: 9,\n prefix,\n startsExpr\n }),\n modulo: new TokenType(\"%\", {\n beforeExpr,\n binop: 10,\n startsExpr\n }),\n star: new TokenType(\"*\", {\n binop: 10\n }),\n slash: createBinop(\"/\", 10),\n exponent: new TokenType(\"**\", {\n beforeExpr,\n binop: 11,\n rightAssociative: true\n }),\n _break: createKeyword(\"break\"),\n _case: createKeyword(\"case\", {\n beforeExpr\n }),\n _catch: createKeyword(\"catch\"),\n _continue: createKeyword(\"continue\"),\n _debugger: createKeyword(\"debugger\"),\n _default: createKeyword(\"default\", {\n beforeExpr\n }),\n _do: createKeyword(\"do\", {\n isLoop,\n beforeExpr\n }),\n _else: createKeyword(\"else\", {\n beforeExpr\n }),\n _finally: createKeyword(\"finally\"),\n _for: createKeyword(\"for\", {\n isLoop\n }),\n _function: createKeyword(\"function\", {\n startsExpr\n }),\n _if: createKeyword(\"if\"),\n _return: createKeyword(\"return\", {\n beforeExpr\n }),\n _switch: createKeyword(\"switch\"),\n _throw: createKeyword(\"throw\", {\n beforeExpr,\n prefix,\n startsExpr\n }),\n _try: createKeyword(\"try\"),\n _var: createKeyword(\"var\"),\n _const: createKeyword(\"const\"),\n _while: createKeyword(\"while\", {\n isLoop\n }),\n _with: createKeyword(\"with\"),\n _new: createKeyword(\"new\", {\n beforeExpr,\n startsExpr\n }),\n _this: createKeyword(\"this\", {\n startsExpr\n }),\n _super: createKeyword(\"super\", {\n startsExpr\n }),\n _class: createKeyword(\"class\", {\n startsExpr\n }),\n _extends: createKeyword(\"extends\", {\n beforeExpr\n }),\n _export: createKeyword(\"export\"),\n _import: createKeyword(\"import\", {\n startsExpr\n }),\n _null: createKeyword(\"null\", {\n startsExpr\n }),\n _true: createKeyword(\"true\", {\n startsExpr\n }),\n _false: createKeyword(\"false\", {\n startsExpr\n }),\n _in: createKeyword(\"in\", {\n beforeExpr,\n binop: 7\n }),\n _instanceof: createKeyword(\"instanceof\", {\n beforeExpr,\n binop: 7\n }),\n _typeof: createKeyword(\"typeof\", {\n beforeExpr,\n prefix,\n startsExpr\n }),\n _void: createKeyword(\"void\", {\n beforeExpr,\n prefix,\n startsExpr\n }),\n _delete: createKeyword(\"delete\", {\n beforeExpr,\n prefix,\n startsExpr\n })\n};\n\nconst lineBreak = /\\r\\n?|[\\n\\u2028\\u2029]/;\nconst lineBreakG = new RegExp(lineBreak.source, \"g\");\nfunction isNewLine(code) {\n switch (code) {\n case 10:\n case 13:\n case 8232:\n case 8233:\n return true;\n\n default:\n return false;\n }\n}\nconst skipWhiteSpace = /(?:\\s|\\/\\/.*|\\/\\*[^]*?\\*\\/)*/g;\nfunction isWhitespace(code) {\n switch (code) {\n case 0x0009:\n case 0x000b:\n case 0x000c:\n case 32:\n case 160:\n case 5760:\n case 0x2000:\n case 0x2001:\n case 0x2002:\n case 0x2003:\n case 0x2004:\n case 0x2005:\n case 0x2006:\n case 0x2007:\n case 0x2008:\n case 0x2009:\n case 0x200a:\n case 0x202f:\n case 0x205f:\n case 0x3000:\n case 0xfeff:\n return true;\n\n default:\n return false;\n }\n}\n\nclass Position {\n constructor(line, col) {\n this.line = void 0;\n this.column = void 0;\n this.line = line;\n this.column = col;\n }\n\n}\nclass SourceLocation {\n constructor(start, end) {\n this.start = void 0;\n this.end = void 0;\n this.filename = void 0;\n this.identifierName = void 0;\n this.start = start;\n this.end = end;\n }\n\n}\nfunction getLineInfo(input, offset) {\n let line = 1;\n let lineStart = 0;\n let match;\n lineBreakG.lastIndex = 0;\n\n while ((match = lineBreakG.exec(input)) && match.index < offset) {\n line++;\n lineStart = lineBreakG.lastIndex;\n }\n\n return new Position(line, offset - lineStart);\n}\n\nclass BaseParser {\n constructor() {\n this.sawUnambiguousESM = false;\n this.ambiguousScriptDifferentAst = false;\n }\n\n hasPlugin(name) {\n return this.plugins.has(name);\n }\n\n getPluginOption(plugin, name) {\n if (this.hasPlugin(plugin)) return this.plugins.get(plugin)[name];\n }\n\n}\n\nfunction last(stack) {\n return stack[stack.length - 1];\n}\n\nclass CommentsParser extends BaseParser {\n addComment(comment) {\n if (this.filename) comment.loc.filename = this.filename;\n this.state.trailingComments.push(comment);\n this.state.leadingComments.push(comment);\n }\n\n adjustCommentsAfterTrailingComma(node, elements, takeAllComments) {\n if (this.state.leadingComments.length === 0) {\n return;\n }\n\n let lastElement = null;\n let i = elements.length;\n\n while (lastElement === null && i > 0) {\n lastElement = elements[--i];\n }\n\n if (lastElement === null) {\n return;\n }\n\n for (let j = 0; j < this.state.leadingComments.length; j++) {\n if (this.state.leadingComments[j].end < this.state.commentPreviousNode.end) {\n this.state.leadingComments.splice(j, 1);\n j--;\n }\n }\n\n const newTrailingComments = [];\n\n for (let i = 0; i < this.state.leadingComments.length; i++) {\n const leadingComment = this.state.leadingComments[i];\n\n if (leadingComment.end < node.end) {\n newTrailingComments.push(leadingComment);\n\n if (!takeAllComments) {\n this.state.leadingComments.splice(i, 1);\n i--;\n }\n } else {\n if (node.trailingComments === undefined) {\n node.trailingComments = [];\n }\n\n node.trailingComments.push(leadingComment);\n }\n }\n\n if (takeAllComments) this.state.leadingComments = [];\n\n if (newTrailingComments.length > 0) {\n lastElement.trailingComments = newTrailingComments;\n } else if (lastElement.trailingComments !== undefined) {\n lastElement.trailingComments = [];\n }\n }\n\n processComment(node) {\n if (node.type === \"Program\" && node.body.length > 0) return;\n const stack = this.state.commentStack;\n let firstChild, lastChild, trailingComments, i, j;\n\n if (this.state.trailingComments.length > 0) {\n if (this.state.trailingComments[0].start >= node.end) {\n trailingComments = this.state.trailingComments;\n this.state.trailingComments = [];\n } else {\n this.state.trailingComments.length = 0;\n }\n } else if (stack.length > 0) {\n const lastInStack = last(stack);\n\n if (lastInStack.trailingComments && lastInStack.trailingComments[0].start >= node.end) {\n trailingComments = lastInStack.trailingComments;\n delete lastInStack.trailingComments;\n }\n }\n\n if (stack.length > 0 && last(stack).start >= node.start) {\n firstChild = stack.pop();\n }\n\n while (stack.length > 0 && last(stack).start >= node.start) {\n lastChild = stack.pop();\n }\n\n if (!lastChild && firstChild) lastChild = firstChild;\n\n if (firstChild) {\n switch (node.type) {\n case \"ObjectExpression\":\n this.adjustCommentsAfterTrailingComma(node, node.properties);\n break;\n\n case \"ObjectPattern\":\n this.adjustCommentsAfterTrailingComma(node, node.properties, true);\n break;\n\n case \"CallExpression\":\n this.adjustCommentsAfterTrailingComma(node, node.arguments);\n break;\n\n case \"ArrayExpression\":\n this.adjustCommentsAfterTrailingComma(node, node.elements);\n break;\n\n case \"ArrayPattern\":\n this.adjustCommentsAfterTrailingComma(node, node.elements, true);\n break;\n }\n } else if (this.state.commentPreviousNode && (this.state.commentPreviousNode.type === \"ImportSpecifier\" && node.type !== \"ImportSpecifier\" || this.state.commentPreviousNode.type === \"ExportSpecifier\" && node.type !== \"ExportSpecifier\")) {\n this.adjustCommentsAfterTrailingComma(node, [this.state.commentPreviousNode]);\n }\n\n if (lastChild) {\n if (lastChild.leadingComments) {\n if (lastChild !== node && lastChild.leadingComments.length > 0 && last(lastChild.leadingComments).end <= node.start) {\n node.leadingComments = lastChild.leadingComments;\n delete lastChild.leadingComments;\n } else {\n for (i = lastChild.leadingComments.length - 2; i >= 0; --i) {\n if (lastChild.leadingComments[i].end <= node.start) {\n node.leadingComments = lastChild.leadingComments.splice(0, i + 1);\n break;\n }\n }\n }\n }\n } else if (this.state.leadingComments.length > 0) {\n if (last(this.state.leadingComments).end <= node.start) {\n if (this.state.commentPreviousNode) {\n for (j = 0; j < this.state.leadingComments.length; j++) {\n if (this.state.leadingComments[j].end < this.state.commentPreviousNode.end) {\n this.state.leadingComments.splice(j, 1);\n j--;\n }\n }\n }\n\n if (this.state.leadingComments.length > 0) {\n node.leadingComments = this.state.leadingComments;\n this.state.leadingComments = [];\n }\n } else {\n for (i = 0; i < this.state.leadingComments.length; i++) {\n if (this.state.leadingComments[i].end > node.start) {\n break;\n }\n }\n\n const leadingComments = this.state.leadingComments.slice(0, i);\n\n if (leadingComments.length) {\n node.leadingComments = leadingComments;\n }\n\n trailingComments = this.state.leadingComments.slice(i);\n\n if (trailingComments.length === 0) {\n trailingComments = null;\n }\n }\n }\n\n this.state.commentPreviousNode = node;\n\n if (trailingComments) {\n if (trailingComments.length && trailingComments[0].start >= node.start && last(trailingComments).end <= node.end) {\n node.innerComments = trailingComments;\n } else {\n const firstTrailingCommentIndex = trailingComments.findIndex(comment => comment.end >= node.end);\n\n if (firstTrailingCommentIndex > 0) {\n node.innerComments = trailingComments.slice(0, firstTrailingCommentIndex);\n node.trailingComments = trailingComments.slice(firstTrailingCommentIndex);\n } else {\n node.trailingComments = trailingComments;\n }\n }\n }\n\n stack.push(node);\n }\n\n}\n\nconst ErrorCodes = Object.freeze({\n SyntaxError: \"BABEL_PARSER_SYNTAX_ERROR\",\n SourceTypeModuleError: \"BABEL_PARSER_SOURCETYPE_MODULE_REQUIRED\"\n});\n\nconst ErrorMessages = makeErrorTemplates({\n AccessorIsGenerator: \"A %0ter cannot be a generator.\",\n ArgumentsInClass: \"'arguments' is only allowed in functions and class methods.\",\n AsyncFunctionInSingleStatementContext: \"Async functions can only be declared at the top level or inside a block.\",\n AwaitBindingIdentifier: \"Can not use 'await' as identifier inside an async function.\",\n AwaitBindingIdentifierInStaticBlock: \"Can not use 'await' as identifier inside a static block.\",\n AwaitExpressionFormalParameter: \"'await' is not allowed in async function parameters.\",\n AwaitNotInAsyncContext: \"'await' is only allowed within async functions and at the top levels of modules.\",\n AwaitNotInAsyncFunction: \"'await' is only allowed within async functions.\",\n BadGetterArity: \"A 'get' accesor must not have any formal parameters.\",\n BadSetterArity: \"A 'set' accesor must have exactly one formal parameter.\",\n BadSetterRestParameter: \"A 'set' accesor function argument must not be a rest parameter.\",\n ConstructorClassField: \"Classes may not have a field named 'constructor'.\",\n ConstructorClassPrivateField: \"Classes may not have a private field named '#constructor'.\",\n ConstructorIsAccessor: \"Class constructor may not be an accessor.\",\n ConstructorIsAsync: \"Constructor can't be an async function.\",\n ConstructorIsGenerator: \"Constructor can't be a generator.\",\n DeclarationMissingInitializer: \"'%0' require an initialization value.\",\n DecoratorBeforeExport: \"Decorators must be placed *before* the 'export' keyword. You can set the 'decoratorsBeforeExport' option to false to use the 'export @decorator class {}' syntax.\",\n DecoratorConstructor: \"Decorators can't be used with a constructor. Did you mean '@dec class { ... }'?\",\n DecoratorExportClass: \"Using the export keyword between a decorator and a class is not allowed. Please use `export @dec class` instead.\",\n DecoratorSemicolon: \"Decorators must not be followed by a semicolon.\",\n DecoratorStaticBlock: \"Decorators can't be used with a static block.\",\n DeletePrivateField: \"Deleting a private field is not allowed.\",\n DestructureNamedImport: \"ES2015 named imports do not destructure. Use another statement for destructuring after the import.\",\n DuplicateConstructor: \"Duplicate constructor in the same class.\",\n DuplicateDefaultExport: \"Only one default export allowed per module.\",\n DuplicateExport: \"`%0` has already been exported. Exported identifiers must be unique.\",\n DuplicateProto: \"Redefinition of __proto__ property.\",\n DuplicateRegExpFlags: \"Duplicate regular expression flag.\",\n ElementAfterRest: \"Rest element must be last element.\",\n EscapedCharNotAnIdentifier: \"Invalid Unicode escape.\",\n ExportBindingIsString: \"A string literal cannot be used as an exported binding without `from`.\\n- Did you mean `export { '%0' as '%1' } from 'some-module'`?\",\n ExportDefaultFromAsIdentifier: \"'from' is not allowed as an identifier after 'export default'.\",\n ForInOfLoopInitializer: \"'%0' loop variable declaration may not have an initializer.\",\n ForOfAsync: \"The left-hand side of a for-of loop may not be 'async'.\",\n ForOfLet: \"The left-hand side of a for-of loop may not start with 'let'.\",\n GeneratorInSingleStatementContext: \"Generators can only be declared at the top level or inside a block.\",\n IllegalBreakContinue: \"Unsyntactic %0.\",\n IllegalLanguageModeDirective: \"Illegal 'use strict' directive in function with non-simple parameter list.\",\n IllegalReturn: \"'return' outside of function.\",\n ImportBindingIsString: 'A string literal cannot be used as an imported binding.\\n- Did you mean `import { \"%0\" as foo }`?',\n ImportCallArgumentTrailingComma: \"Trailing comma is disallowed inside import(...) arguments.\",\n ImportCallArity: \"`import()` requires exactly %0.\",\n ImportCallNotNewExpression: \"Cannot use new with import(...).\",\n ImportCallSpreadArgument: \"`...` is not allowed in `import()`.\",\n InvalidBigIntLiteral: \"Invalid BigIntLiteral.\",\n InvalidCodePoint: \"Code point out of bounds.\",\n InvalidDecimal: \"Invalid decimal.\",\n InvalidDigit: \"Expected number in radix %0.\",\n InvalidEscapeSequence: \"Bad character escape sequence.\",\n InvalidEscapeSequenceTemplate: \"Invalid escape sequence in template.\",\n InvalidEscapedReservedWord: \"Escape sequence in keyword %0.\",\n InvalidIdentifier: \"Invalid identifier %0.\",\n InvalidLhs: \"Invalid left-hand side in %0.\",\n InvalidLhsBinding: \"Binding invalid left-hand side in %0.\",\n InvalidNumber: \"Invalid number.\",\n InvalidOrMissingExponent: \"Floating-point numbers require a valid exponent after the 'e'.\",\n InvalidOrUnexpectedToken: \"Unexpected character '%0'.\",\n InvalidParenthesizedAssignment: \"Invalid parenthesized assignment pattern.\",\n InvalidPrivateFieldResolution: \"Private name #%0 is not defined.\",\n InvalidPropertyBindingPattern: \"Binding member expression.\",\n InvalidRecordProperty: \"Only properties and spread elements are allowed in record definitions.\",\n InvalidRestAssignmentPattern: \"Invalid rest operator's argument.\",\n LabelRedeclaration: \"Label '%0' is already declared.\",\n LetInLexicalBinding: \"'let' is not allowed to be used as a name in 'let' or 'const' declarations.\",\n LineTerminatorBeforeArrow: \"No line break is allowed before '=>'.\",\n MalformedRegExpFlags: \"Invalid regular expression flag.\",\n MissingClassName: \"A class name is required.\",\n MissingEqInAssignment: \"Only '=' operator can be used for specifying default value.\",\n MissingSemicolon: \"Missing semicolon.\",\n MissingUnicodeEscape: \"Expecting Unicode escape sequence \\\\uXXXX.\",\n MixingCoalesceWithLogical: \"Nullish coalescing operator(??) requires parens when mixing with logical operators.\",\n ModuleAttributeDifferentFromType: \"The only accepted module attribute is `type`.\",\n ModuleAttributeInvalidValue: \"Only string literals are allowed as module attribute values.\",\n ModuleAttributesWithDuplicateKeys: 'Duplicate key \"%0\" is not allowed in module attributes.',\n ModuleExportNameHasLoneSurrogate: \"An export name cannot include a lone surrogate, found '\\\\u%0'.\",\n ModuleExportUndefined: \"Export '%0' is not defined.\",\n MultipleDefaultsInSwitch: \"Multiple default clauses.\",\n NewlineAfterThrow: \"Illegal newline after throw.\",\n NoCatchOrFinally: \"Missing catch or finally clause.\",\n NumberIdentifier: \"Identifier directly after number.\",\n NumericSeparatorInEscapeSequence: \"Numeric separators are not allowed inside unicode escape sequences or hex escape sequences.\",\n ObsoleteAwaitStar: \"'await*' has been removed from the async functions proposal. Use Promise.all() instead.\",\n OptionalChainingNoNew: \"Constructors in/after an Optional Chain are not allowed.\",\n OptionalChainingNoTemplate: \"Tagged Template Literals are not allowed in optionalChain.\",\n OverrideOnConstructor: \"'override' modifier cannot appear on a constructor declaration.\",\n ParamDupe: \"Argument name clash.\",\n PatternHasAccessor: \"Object pattern can't contain getter or setter.\",\n PatternHasMethod: \"Object pattern can't contain methods.\",\n PipelineBodyNoArrow: 'Unexpected arrow \"=>\" after pipeline body; arrow function in pipeline body must be parenthesized.',\n PipelineBodySequenceExpression: \"Pipeline body may not be a comma-separated sequence expression.\",\n PipelineHeadSequenceExpression: \"Pipeline head should not be a comma-separated sequence expression.\",\n PipelineTopicUnused: \"Pipeline is in topic style but does not use topic reference.\",\n PrimaryTopicNotAllowed: \"Topic reference was used in a lexical context without topic binding.\",\n PrimaryTopicRequiresSmartPipeline: \"Primary Topic Reference found but pipelineOperator not passed 'smart' for 'proposal' option.\",\n PrivateInExpectedIn: \"Private names are only allowed in property accesses (`obj.#%0`) or in `in` expressions (`#%0 in obj`).\",\n PrivateNameRedeclaration: \"Duplicate private name #%0.\",\n RecordExpressionBarIncorrectEndSyntaxType: \"Record expressions ending with '|}' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.\",\n RecordExpressionBarIncorrectStartSyntaxType: \"Record expressions starting with '{|' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.\",\n RecordExpressionHashIncorrectStartSyntaxType: \"Record expressions starting with '#{' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'hash'.\",\n RecordNoProto: \"'__proto__' is not allowed in Record expressions.\",\n RestTrailingComma: \"Unexpected trailing comma after rest element.\",\n SloppyFunction: \"In non-strict mode code, functions can only be declared at top level, inside a block, or as the body of an if statement.\",\n StaticPrototype: \"Classes may not have static property named prototype.\",\n StrictDelete: \"Deleting local variable in strict mode.\",\n StrictEvalArguments: \"Assigning to '%0' in strict mode.\",\n StrictEvalArgumentsBinding: \"Binding '%0' in strict mode.\",\n StrictFunction: \"In strict mode code, functions can only be declared at top level or inside a block.\",\n StrictNumericEscape: \"The only valid numeric escape in strict mode is '\\\\0'.\",\n StrictOctalLiteral: \"Legacy octal literals are not allowed in strict mode.\",\n StrictWith: \"'with' in strict mode.\",\n SuperNotAllowed: \"`super()` is only valid inside a class constructor of a subclass. Maybe a typo in the method name ('constructor') or not extending another class?\",\n SuperPrivateField: \"Private fields can't be accessed on super.\",\n TrailingDecorator: \"Decorators must be attached to a class element.\",\n TupleExpressionBarIncorrectEndSyntaxType: \"Tuple expressions ending with '|]' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.\",\n TupleExpressionBarIncorrectStartSyntaxType: \"Tuple expressions starting with '[|' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.\",\n TupleExpressionHashIncorrectStartSyntaxType: \"Tuple expressions starting with '#[' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'hash'.\",\n UnexpectedArgumentPlaceholder: \"Unexpected argument placeholder.\",\n UnexpectedAwaitAfterPipelineBody: 'Unexpected \"await\" after pipeline body; await must have parentheses in minimal proposal.',\n UnexpectedDigitAfterHash: \"Unexpected digit after hash token.\",\n UnexpectedImportExport: \"'import' and 'export' may only appear at the top level.\",\n UnexpectedKeyword: \"Unexpected keyword '%0'.\",\n UnexpectedLeadingDecorator: \"Leading decorators must be attached to a class declaration.\",\n UnexpectedLexicalDeclaration: \"Lexical declaration cannot appear in a single-statement context.\",\n UnexpectedNewTarget: \"`new.target` can only be used in functions or class properties.\",\n UnexpectedNumericSeparator: \"A numeric separator is only allowed between two digits.\",\n UnexpectedPrivateField: \"Private names can only be used as the name of a class element (i.e. class C { #p = 42; #m() {} } )\\n or a property of member expression (i.e. this.#p).\",\n UnexpectedReservedWord: \"Unexpected reserved word '%0'.\",\n UnexpectedSuper: \"'super' is only allowed in object methods and classes.\",\n UnexpectedToken: \"Unexpected token '%0'.\",\n UnexpectedTokenUnaryExponentiation: \"Illegal expression. Wrap left hand side or entire exponentiation in parentheses.\",\n UnsupportedBind: \"Binding should be performed on object property.\",\n UnsupportedDecoratorExport: \"A decorated export must export a class declaration.\",\n UnsupportedDefaultExport: \"Only expressions, functions or classes are allowed as the `default` export.\",\n UnsupportedImport: \"`import` can only be used in `import()` or `import.meta`.\",\n UnsupportedMetaProperty: \"The only valid meta property for %0 is %0.%1.\",\n UnsupportedParameterDecorator: \"Decorators cannot be used to decorate parameters.\",\n UnsupportedPropertyDecorator: \"Decorators cannot be used to decorate object literal properties.\",\n UnsupportedSuper: \"'super' can only be used with function calls (i.e. super()) or in property accesses (i.e. super.prop or super[prop]).\",\n UnterminatedComment: \"Unterminated comment.\",\n UnterminatedRegExp: \"Unterminated regular expression.\",\n UnterminatedString: \"Unterminated string constant.\",\n UnterminatedTemplate: \"Unterminated template.\",\n VarRedeclaration: \"Identifier '%0' has already been declared.\",\n YieldBindingIdentifier: \"Can not use 'yield' as identifier inside a generator.\",\n YieldInParameter: \"Yield expression is not allowed in formal parameters.\",\n ZeroDigitNumericSeparator: \"Numeric separator can not be used after leading 0.\"\n}, ErrorCodes.SyntaxError);\nconst SourceTypeModuleErrorMessages = makeErrorTemplates({\n ImportMetaOutsideModule: `import.meta may appear only with 'sourceType: \"module\"'`,\n ImportOutsideModule: `'import' and 'export' may appear only with 'sourceType: \"module\"'`\n}, ErrorCodes.SourceTypeModuleError);\n\nfunction makeErrorTemplates(messages, code) {\n const templates = {};\n Object.keys(messages).forEach(reasonCode => {\n templates[reasonCode] = Object.freeze({\n code,\n reasonCode,\n template: messages[reasonCode]\n });\n });\n return Object.freeze(templates);\n}\nclass ParserError extends CommentsParser {\n getLocationForPosition(pos) {\n let loc;\n if (pos === this.state.start) loc = this.state.startLoc;else if (pos === this.state.lastTokStart) loc = this.state.lastTokStartLoc;else if (pos === this.state.end) loc = this.state.endLoc;else if (pos === this.state.lastTokEnd) loc = this.state.lastTokEndLoc;else loc = getLineInfo(this.input, pos);\n return loc;\n }\n\n raise(pos, {\n code,\n reasonCode,\n template\n }, ...params) {\n return this.raiseWithData(pos, {\n code,\n reasonCode\n }, template, ...params);\n }\n\n raiseOverwrite(pos, {\n code,\n template\n }, ...params) {\n const loc = this.getLocationForPosition(pos);\n const message = template.replace(/%(\\d+)/g, (_, i) => params[i]) + ` (${loc.line}:${loc.column})`;\n\n if (this.options.errorRecovery) {\n const errors = this.state.errors;\n\n for (let i = errors.length - 1; i >= 0; i--) {\n const error = errors[i];\n\n if (error.pos === pos) {\n return Object.assign(error, {\n message\n });\n } else if (error.pos < pos) {\n break;\n }\n }\n }\n\n return this._raise({\n code,\n loc,\n pos\n }, message);\n }\n\n raiseWithData(pos, data, errorTemplate, ...params) {\n const loc = this.getLocationForPosition(pos);\n const message = errorTemplate.replace(/%(\\d+)/g, (_, i) => params[i]) + ` (${loc.line}:${loc.column})`;\n return this._raise(Object.assign({\n loc,\n pos\n }, data), message);\n }\n\n _raise(errorContext, message) {\n const err = new SyntaxError(message);\n Object.assign(err, errorContext);\n\n if (this.options.errorRecovery) {\n if (!this.isLookahead) this.state.errors.push(err);\n return err;\n } else {\n throw err;\n }\n }\n\n}\n\nvar estree = (superClass => class extends superClass {\n parseRegExpLiteral({\n pattern,\n flags\n }) {\n let regex = null;\n\n try {\n regex = new RegExp(pattern, flags);\n } catch (e) {}\n\n const node = this.estreeParseLiteral(regex);\n node.regex = {\n pattern,\n flags\n };\n return node;\n }\n\n parseBigIntLiteral(value) {\n let bigInt;\n\n try {\n bigInt = BigInt(value);\n } catch (_unused) {\n bigInt = null;\n }\n\n const node = this.estreeParseLiteral(bigInt);\n node.bigint = String(node.value || value);\n return node;\n }\n\n parseDecimalLiteral(value) {\n const decimal = null;\n const node = this.estreeParseLiteral(decimal);\n node.decimal = String(node.value || value);\n return node;\n }\n\n estreeParseLiteral(value) {\n return this.parseLiteral(value, \"Literal\");\n }\n\n parseStringLiteral(value) {\n return this.estreeParseLiteral(value);\n }\n\n parseNumericLiteral(value) {\n return this.estreeParseLiteral(value);\n }\n\n parseNullLiteral() {\n return this.estreeParseLiteral(null);\n }\n\n parseBooleanLiteral(value) {\n return this.estreeParseLiteral(value);\n }\n\n directiveToStmt(directive) {\n const directiveLiteral = directive.value;\n const stmt = this.startNodeAt(directive.start, directive.loc.start);\n const expression = this.startNodeAt(directiveLiteral.start, directiveLiteral.loc.start);\n expression.value = directiveLiteral.extra.expressionValue;\n expression.raw = directiveLiteral.extra.raw;\n stmt.expression = this.finishNodeAt(expression, \"Literal\", directiveLiteral.end, directiveLiteral.loc.end);\n stmt.directive = directiveLiteral.extra.raw.slice(1, -1);\n return this.finishNodeAt(stmt, \"ExpressionStatement\", directive.end, directive.loc.end);\n }\n\n initFunction(node, isAsync) {\n super.initFunction(node, isAsync);\n node.expression = false;\n }\n\n checkDeclaration(node) {\n if (node != null && this.isObjectProperty(node)) {\n this.checkDeclaration(node.value);\n } else {\n super.checkDeclaration(node);\n }\n }\n\n getObjectOrClassMethodParams(method) {\n return method.value.params;\n }\n\n isValidDirective(stmt) {\n var _stmt$expression$extr;\n\n return stmt.type === \"ExpressionStatement\" && stmt.expression.type === \"Literal\" && typeof stmt.expression.value === \"string\" && !((_stmt$expression$extr = stmt.expression.extra) != null && _stmt$expression$extr.parenthesized);\n }\n\n stmtToDirective(stmt) {\n const directive = super.stmtToDirective(stmt);\n const value = stmt.expression.value;\n this.addExtra(directive.value, \"expressionValue\", value);\n return directive;\n }\n\n parseBlockBody(node, ...args) {\n super.parseBlockBody(node, ...args);\n const directiveStatements = node.directives.map(d => this.directiveToStmt(d));\n node.body = directiveStatements.concat(node.body);\n delete node.directives;\n }\n\n pushClassMethod(classBody, method, isGenerator, isAsync, isConstructor, allowsDirectSuper) {\n this.parseMethod(method, isGenerator, isAsync, isConstructor, allowsDirectSuper, \"ClassMethod\", true);\n\n if (method.typeParameters) {\n method.value.typeParameters = method.typeParameters;\n delete method.typeParameters;\n }\n\n classBody.body.push(method);\n }\n\n parseMaybePrivateName(...args) {\n const node = super.parseMaybePrivateName(...args);\n\n if (node.type === \"PrivateName\" && this.getPluginOption(\"estree\", \"classFeatures\")) {\n return this.convertPrivateNameToPrivateIdentifier(node);\n }\n\n return node;\n }\n\n convertPrivateNameToPrivateIdentifier(node) {\n const name = super.getPrivateNameSV(node);\n node = node;\n delete node.id;\n node.name = name;\n node.type = \"PrivateIdentifier\";\n return node;\n }\n\n isPrivateName(node) {\n if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n return super.isPrivateName(node);\n }\n\n return node.type === \"PrivateIdentifier\";\n }\n\n getPrivateNameSV(node) {\n if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n return super.getPrivateNameSV(node);\n }\n\n return node.name;\n }\n\n parseLiteral(value, type) {\n const node = super.parseLiteral(value, type);\n node.raw = node.extra.raw;\n delete node.extra;\n return node;\n }\n\n parseFunctionBody(node, allowExpression, isMethod = false) {\n super.parseFunctionBody(node, allowExpression, isMethod);\n node.expression = node.body.type !== \"BlockStatement\";\n }\n\n parseMethod(node, isGenerator, isAsync, isConstructor, allowDirectSuper, type, inClassScope = false) {\n let funcNode = this.startNode();\n funcNode.kind = node.kind;\n funcNode = super.parseMethod(funcNode, isGenerator, isAsync, isConstructor, allowDirectSuper, type, inClassScope);\n funcNode.type = \"FunctionExpression\";\n delete funcNode.kind;\n node.value = funcNode;\n\n if (type === \"ClassPrivateMethod\") {\n node.computed = false;\n }\n\n type = \"MethodDefinition\";\n return this.finishNode(node, type);\n }\n\n parseClassProperty(...args) {\n const propertyNode = super.parseClassProperty(...args);\n\n if (this.getPluginOption(\"estree\", \"classFeatures\")) {\n propertyNode.type = \"PropertyDefinition\";\n }\n\n return propertyNode;\n }\n\n parseClassPrivateProperty(...args) {\n const propertyNode = super.parseClassPrivateProperty(...args);\n\n if (this.getPluginOption(\"estree\", \"classFeatures\")) {\n propertyNode.type = \"PropertyDefinition\";\n propertyNode.computed = false;\n }\n\n return propertyNode;\n }\n\n parseObjectMethod(prop, isGenerator, isAsync, isPattern, isAccessor) {\n const node = super.parseObjectMethod(prop, isGenerator, isAsync, isPattern, isAccessor);\n\n if (node) {\n node.type = \"Property\";\n if (node.kind === \"method\") node.kind = \"init\";\n node.shorthand = false;\n }\n\n return node;\n }\n\n parseObjectProperty(prop, startPos, startLoc, isPattern, refExpressionErrors) {\n const node = super.parseObjectProperty(prop, startPos, startLoc, isPattern, refExpressionErrors);\n\n if (node) {\n node.kind = \"init\";\n node.type = \"Property\";\n }\n\n return node;\n }\n\n toAssignable(node, isLHS = false) {\n if (node != null && this.isObjectProperty(node)) {\n this.toAssignable(node.value, isLHS);\n return node;\n }\n\n return super.toAssignable(node, isLHS);\n }\n\n toAssignableObjectExpressionProp(prop, ...args) {\n if (prop.kind === \"get\" || prop.kind === \"set\") {\n this.raise(prop.key.start, ErrorMessages.PatternHasAccessor);\n } else if (prop.method) {\n this.raise(prop.key.start, ErrorMessages.PatternHasMethod);\n } else {\n super.toAssignableObjectExpressionProp(prop, ...args);\n }\n }\n\n finishCallExpression(node, optional) {\n super.finishCallExpression(node, optional);\n\n if (node.callee.type === \"Import\") {\n node.type = \"ImportExpression\";\n node.source = node.arguments[0];\n\n if (this.hasPlugin(\"importAssertions\")) {\n var _node$arguments$;\n\n node.attributes = (_node$arguments$ = node.arguments[1]) != null ? _node$arguments$ : null;\n }\n\n delete node.arguments;\n delete node.callee;\n }\n\n return node;\n }\n\n toReferencedArguments(node) {\n if (node.type === \"ImportExpression\") {\n return;\n }\n\n super.toReferencedArguments(node);\n }\n\n parseExport(node) {\n super.parseExport(node);\n\n switch (node.type) {\n case \"ExportAllDeclaration\":\n node.exported = null;\n break;\n\n case \"ExportNamedDeclaration\":\n if (node.specifiers.length === 1 && node.specifiers[0].type === \"ExportNamespaceSpecifier\") {\n node.type = \"ExportAllDeclaration\";\n node.exported = node.specifiers[0].exported;\n delete node.specifiers;\n }\n\n break;\n }\n\n return node;\n }\n\n parseSubscript(base, startPos, startLoc, noCalls, state) {\n const node = super.parseSubscript(base, startPos, startLoc, noCalls, state);\n\n if (state.optionalChainMember) {\n if (node.type === \"OptionalMemberExpression\" || node.type === \"OptionalCallExpression\") {\n node.type = node.type.substring(8);\n }\n\n if (state.stop) {\n const chain = this.startNodeAtNode(node);\n chain.expression = node;\n return this.finishNode(chain, \"ChainExpression\");\n }\n } else if (node.type === \"MemberExpression\" || node.type === \"CallExpression\") {\n node.optional = false;\n }\n\n return node;\n }\n\n hasPropertyAsPrivateName(node) {\n if (node.type === \"ChainExpression\") {\n node = node.expression;\n }\n\n return super.hasPropertyAsPrivateName(node);\n }\n\n isOptionalChain(node) {\n return node.type === \"ChainExpression\";\n }\n\n isObjectProperty(node) {\n return node.type === \"Property\" && node.kind === \"init\" && !node.method;\n }\n\n isObjectMethod(node) {\n return node.method || node.kind === \"get\" || node.kind === \"set\";\n }\n\n});\n\nclass TokContext {\n constructor(token, preserveSpace) {\n this.token = void 0;\n this.preserveSpace = void 0;\n this.token = token;\n this.preserveSpace = !!preserveSpace;\n }\n\n}\nconst types = {\n brace: new TokContext(\"{\"),\n template: new TokContext(\"`\", true)\n};\n\ntypes$1.braceR.updateContext = context => {\n context.pop();\n};\n\ntypes$1.braceL.updateContext = types$1.braceHashL.updateContext = types$1.dollarBraceL.updateContext = context => {\n context.push(types.brace);\n};\n\ntypes$1.backQuote.updateContext = context => {\n if (context[context.length - 1] === types.template) {\n context.pop();\n } else {\n context.push(types.template);\n }\n};\n\nlet nonASCIIidentifierStartChars = \"\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u037f\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u052f\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05d0-\\u05ea\\u05ef-\\u05f2\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086a\\u08a0-\\u08b4\\u08b6-\\u08c7\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u09fc\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0af9\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d\\u0c58-\\u0c5a\\u0c60\\u0c61\\u0c80\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d04-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d54-\\u0d56\\u0d5f-\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e86-\\u0e8a\\u0e8c-\\u0ea3\\u0ea5\\u0ea7-\\u0eb0\\u0eb2\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f5\\u13f8-\\u13fd\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f8\\u1700-\\u170c\\u170e-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1878\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4b\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1c80-\\u1c88\\u1c90-\\u1cba\\u1cbd-\\u1cbf\\u1ce9-\\u1cec\\u1cee-\\u1cf3\\u1cf5\\u1cf6\\u1cfa\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2118-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cee\\u2cf2\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309b-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312f\\u3131-\\u318e\\u31a0-\\u31bf\\u31f0-\\u31ff\\u3400-\\u4dbf\\u4e00-\\u9ffc\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua69d\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7bf\\ua7c2-\\ua7ca\\ua7f5-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua8fd\\ua8fe\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\ua9e0-\\ua9e4\\ua9e6-\\ua9ef\\ua9fa-\\ua9fe\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa7e-\\uaaaf\\uaab1\\uaab5\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab5a\\uab5c-\\uab69\\uab70-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc\";\nlet nonASCIIidentifierChars = \"\\u200c\\u200d\\xb7\\u0300-\\u036f\\u0387\\u0483-\\u0487\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u0669\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u06f0-\\u06f9\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07c0-\\u07c9\\u07eb-\\u07f3\\u07fd\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u08d3-\\u08e1\\u08e3-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962\\u0963\\u0966-\\u096f\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09cb-\\u09cd\\u09d7\\u09e2\\u09e3\\u09e6-\\u09ef\\u09fe\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a66-\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2\\u0ae3\\u0ae6-\\u0aef\\u0afa-\\u0aff\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b55-\\u0b57\\u0b62\\u0b63\\u0b66-\\u0b6f\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0be6-\\u0bef\\u0c00-\\u0c04\\u0c3e-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0c66-\\u0c6f\\u0c81-\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0ce6-\\u0cef\\u0d00-\\u0d03\\u0d3b\\u0d3c\\u0d3e-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4d\\u0d57\\u0d62\\u0d63\\u0d66-\\u0d6f\\u0d81-\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0de6-\\u0def\\u0df2\\u0df3\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0e50-\\u0e59\\u0eb1\\u0eb4-\\u0ebc\\u0ec8-\\u0ecd\\u0ed0-\\u0ed9\\u0f18\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f3e\\u0f3f\\u0f71-\\u0f84\\u0f86\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102b-\\u103e\\u1040-\\u1049\\u1056-\\u1059\\u105e-\\u1060\\u1062-\\u1064\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f-\\u109d\\u135d-\\u135f\\u1369-\\u1371\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b4-\\u17d3\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u1810-\\u1819\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u194f\\u19d0-\\u19da\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1ab0-\\u1abd\\u1abf\\u1ac0\\u1b00-\\u1b04\\u1b34-\\u1b44\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1b80-\\u1b82\\u1ba1-\\u1bad\\u1bb0-\\u1bb9\\u1be6-\\u1bf3\\u1c24-\\u1c37\\u1c40-\\u1c49\\u1c50-\\u1c59\\u1cd0-\\u1cd2\\u1cd4-\\u1ce8\\u1ced\\u1cf4\\u1cf7-\\u1cf9\\u1dc0-\\u1df9\\u1dfb-\\u1dff\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua620-\\ua629\\ua66f\\ua674-\\ua67d\\ua69e\\ua69f\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua823-\\ua827\\ua82c\\ua880\\ua881\\ua8b4-\\ua8c5\\ua8d0-\\ua8d9\\ua8e0-\\ua8f1\\ua8ff-\\ua909\\ua926-\\ua92d\\ua947-\\ua953\\ua980-\\ua983\\ua9b3-\\ua9c0\\ua9d0-\\ua9d9\\ua9e5\\ua9f0-\\ua9f9\\uaa29-\\uaa36\\uaa43\\uaa4c\\uaa4d\\uaa50-\\uaa59\\uaa7b-\\uaa7d\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uaaeb-\\uaaef\\uaaf5\\uaaf6\\uabe3-\\uabea\\uabec\\uabed\\uabf0-\\uabf9\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe2f\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff10-\\uff19\\uff3f\";\nconst nonASCIIidentifierStart = new RegExp(\"[\" + nonASCIIidentifierStartChars + \"]\");\nconst nonASCIIidentifier = new RegExp(\"[\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"]\");\nnonASCIIidentifierStartChars = nonASCIIidentifierChars = null;\nconst astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 14, 29, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 157, 310, 10, 21, 11, 7, 153, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 71, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 28, 43, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 14, 35, 349, 41, 7, 1, 79, 28, 11, 0, 9, 21, 107, 20, 28, 22, 13, 52, 76, 44, 33, 24, 27, 35, 30, 0, 3, 0, 9, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 85, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 159, 52, 19, 3, 21, 2, 31, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 14, 0, 72, 26, 230, 43, 117, 63, 32, 7, 3, 0, 3, 7, 2, 1, 2, 23, 16, 0, 2, 0, 95, 7, 3, 38, 17, 0, 2, 0, 29, 0, 11, 39, 8, 0, 22, 0, 12, 45, 20, 0, 35, 56, 264, 8, 2, 36, 18, 0, 50, 29, 113, 6, 2, 1, 2, 37, 22, 0, 26, 5, 2, 1, 2, 31, 15, 0, 328, 18, 190, 0, 80, 921, 103, 110, 18, 195, 2749, 1070, 4050, 582, 8634, 568, 8, 30, 114, 29, 19, 47, 17, 3, 32, 20, 6, 18, 689, 63, 129, 74, 6, 0, 67, 12, 65, 1, 2, 0, 29, 6135, 9, 1237, 43, 8, 8952, 286, 50, 2, 18, 3, 9, 395, 2309, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 2357, 44, 11, 6, 17, 0, 370, 43, 1301, 196, 60, 67, 8, 0, 1205, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42717, 35, 4148, 12, 221, 3, 5761, 15, 7472, 3104, 541, 1507, 4938];\nconst astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 574, 3, 9, 9, 370, 1, 154, 10, 176, 2, 54, 14, 32, 9, 16, 3, 46, 10, 54, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 161, 11, 6, 9, 7, 3, 56, 1, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 193, 17, 10, 9, 5, 0, 82, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 84, 14, 5, 9, 243, 14, 166, 9, 71, 5, 2, 1, 3, 3, 2, 0, 2, 1, 13, 9, 120, 6, 3, 6, 4, 0, 29, 9, 41, 6, 2, 3, 9, 0, 10, 10, 47, 15, 406, 7, 2, 7, 17, 9, 57, 21, 2, 13, 123, 5, 4, 0, 2, 1, 2, 6, 2, 0, 9, 9, 49, 4, 2, 1, 2, 4, 9, 9, 330, 3, 19306, 9, 135, 4, 60, 6, 26, 9, 1014, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 5319, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 262, 6, 10, 9, 419, 13, 1495, 6, 110, 6, 6, 9, 4759, 9, 787719, 239];\n\nfunction isInAstralSet(code, set) {\n let pos = 0x10000;\n\n for (let i = 0, length = set.length; i < length; i += 2) {\n pos += set[i];\n if (pos > code) return false;\n pos += set[i + 1];\n if (pos >= code) return true;\n }\n\n return false;\n}\n\nfunction isIdentifierStart(code) {\n if (code < 65) return code === 36;\n if (code <= 90) return true;\n if (code < 97) return code === 95;\n if (code <= 122) return true;\n\n if (code <= 0xffff) {\n return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code));\n }\n\n return isInAstralSet(code, astralIdentifierStartCodes);\n}\nfunction isIdentifierChar(code) {\n if (code < 48) return code === 36;\n if (code < 58) return true;\n if (code < 65) return false;\n if (code <= 90) return true;\n if (code < 97) return code === 95;\n if (code <= 122) return true;\n\n if (code <= 0xffff) {\n return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code));\n }\n\n return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes);\n}\n\nconst reservedWords = {\n keyword: [\"break\", \"case\", \"catch\", \"continue\", \"debugger\", \"default\", \"do\", \"else\", \"finally\", \"for\", \"function\", \"if\", \"return\", \"switch\", \"throw\", \"try\", \"var\", \"const\", \"while\", \"with\", \"new\", \"this\", \"super\", \"class\", \"extends\", \"export\", \"import\", \"null\", \"true\", \"false\", \"in\", \"instanceof\", \"typeof\", \"void\", \"delete\"],\n strict: [\"implements\", \"interface\", \"let\", \"package\", \"private\", \"protected\", \"public\", \"static\", \"yield\"],\n strictBind: [\"eval\", \"arguments\"]\n};\nconst keywords = new Set(reservedWords.keyword);\nconst reservedWordsStrictSet = new Set(reservedWords.strict);\nconst reservedWordsStrictBindSet = new Set(reservedWords.strictBind);\nfunction isReservedWord(word, inModule) {\n return inModule && word === \"await\" || word === \"enum\";\n}\nfunction isStrictReservedWord(word, inModule) {\n return isReservedWord(word, inModule) || reservedWordsStrictSet.has(word);\n}\nfunction isStrictBindOnlyReservedWord(word) {\n return reservedWordsStrictBindSet.has(word);\n}\nfunction isStrictBindReservedWord(word, inModule) {\n return isStrictReservedWord(word, inModule) || isStrictBindOnlyReservedWord(word);\n}\nfunction isKeyword(word) {\n return keywords.has(word);\n}\n\nfunction isIteratorStart(current, next) {\n return current === 64 && next === 64;\n}\nconst reservedWordLikeSet = new Set([\"break\", \"case\", \"catch\", \"continue\", \"debugger\", \"default\", \"do\", \"else\", \"finally\", \"for\", \"function\", \"if\", \"return\", \"switch\", \"throw\", \"try\", \"var\", \"const\", \"while\", \"with\", \"new\", \"this\", \"super\", \"class\", \"extends\", \"export\", \"import\", \"null\", \"true\", \"false\", \"in\", \"instanceof\", \"typeof\", \"void\", \"delete\", \"implements\", \"interface\", \"let\", \"package\", \"private\", \"protected\", \"public\", \"static\", \"yield\", \"eval\", \"arguments\", \"enum\", \"await\"]);\nfunction canBeReservedWord(word) {\n return reservedWordLikeSet.has(word);\n}\n\nconst SCOPE_OTHER = 0b000000000,\n SCOPE_PROGRAM = 0b000000001,\n SCOPE_FUNCTION = 0b000000010,\n SCOPE_ARROW = 0b000000100,\n SCOPE_SIMPLE_CATCH = 0b000001000,\n SCOPE_SUPER = 0b000010000,\n SCOPE_DIRECT_SUPER = 0b000100000,\n SCOPE_CLASS = 0b001000000,\n SCOPE_STATIC_BLOCK = 0b010000000,\n SCOPE_TS_MODULE = 0b100000000,\n SCOPE_VAR = SCOPE_PROGRAM | SCOPE_FUNCTION | SCOPE_TS_MODULE;\nconst BIND_KIND_VALUE = 0b000000000001,\n BIND_KIND_TYPE = 0b000000000010,\n BIND_SCOPE_VAR = 0b000000000100,\n BIND_SCOPE_LEXICAL = 0b000000001000,\n BIND_SCOPE_FUNCTION = 0b000000010000,\n BIND_FLAGS_NONE = 0b000001000000,\n BIND_FLAGS_CLASS = 0b000010000000,\n BIND_FLAGS_TS_ENUM = 0b000100000000,\n BIND_FLAGS_TS_CONST_ENUM = 0b001000000000,\n BIND_FLAGS_TS_EXPORT_ONLY = 0b010000000000,\n BIND_FLAGS_FLOW_DECLARE_FN = 0b100000000000;\nconst BIND_CLASS = BIND_KIND_VALUE | BIND_KIND_TYPE | BIND_SCOPE_LEXICAL | BIND_FLAGS_CLASS,\n BIND_LEXICAL = BIND_KIND_VALUE | 0 | BIND_SCOPE_LEXICAL | 0,\n BIND_VAR = BIND_KIND_VALUE | 0 | BIND_SCOPE_VAR | 0,\n BIND_FUNCTION = BIND_KIND_VALUE | 0 | BIND_SCOPE_FUNCTION | 0,\n BIND_TS_INTERFACE = 0 | BIND_KIND_TYPE | 0 | BIND_FLAGS_CLASS,\n BIND_TS_TYPE = 0 | BIND_KIND_TYPE | 0 | 0,\n BIND_TS_ENUM = BIND_KIND_VALUE | BIND_KIND_TYPE | BIND_SCOPE_LEXICAL | BIND_FLAGS_TS_ENUM,\n BIND_TS_AMBIENT = 0 | 0 | 0 | BIND_FLAGS_TS_EXPORT_ONLY,\n BIND_NONE = 0 | 0 | 0 | BIND_FLAGS_NONE,\n BIND_OUTSIDE = BIND_KIND_VALUE | 0 | 0 | BIND_FLAGS_NONE,\n BIND_TS_CONST_ENUM = BIND_TS_ENUM | BIND_FLAGS_TS_CONST_ENUM,\n BIND_TS_NAMESPACE = 0 | 0 | 0 | BIND_FLAGS_TS_EXPORT_ONLY,\n BIND_FLOW_DECLARE_FN = BIND_FLAGS_FLOW_DECLARE_FN;\nconst CLASS_ELEMENT_FLAG_STATIC = 0b100,\n CLASS_ELEMENT_KIND_GETTER = 0b010,\n CLASS_ELEMENT_KIND_SETTER = 0b001,\n CLASS_ELEMENT_KIND_ACCESSOR = CLASS_ELEMENT_KIND_GETTER | CLASS_ELEMENT_KIND_SETTER;\nconst CLASS_ELEMENT_STATIC_GETTER = CLASS_ELEMENT_KIND_GETTER | CLASS_ELEMENT_FLAG_STATIC,\n CLASS_ELEMENT_STATIC_SETTER = CLASS_ELEMENT_KIND_SETTER | CLASS_ELEMENT_FLAG_STATIC,\n CLASS_ELEMENT_INSTANCE_GETTER = CLASS_ELEMENT_KIND_GETTER,\n CLASS_ELEMENT_INSTANCE_SETTER = CLASS_ELEMENT_KIND_SETTER,\n CLASS_ELEMENT_OTHER = 0;\n\nclass Scope {\n constructor(flags) {\n this.var = new Set();\n this.lexical = new Set();\n this.functions = new Set();\n this.flags = flags;\n }\n\n}\nclass ScopeHandler {\n constructor(raise, inModule) {\n this.scopeStack = [];\n this.undefinedExports = new Map();\n this.undefinedPrivateNames = new Map();\n this.raise = raise;\n this.inModule = inModule;\n }\n\n get inFunction() {\n return (this.currentVarScopeFlags() & SCOPE_FUNCTION) > 0;\n }\n\n get allowSuper() {\n return (this.currentThisScopeFlags() & SCOPE_SUPER) > 0;\n }\n\n get allowDirectSuper() {\n return (this.currentThisScopeFlags() & SCOPE_DIRECT_SUPER) > 0;\n }\n\n get inClass() {\n return (this.currentThisScopeFlags() & SCOPE_CLASS) > 0;\n }\n\n get inClassAndNotInNonArrowFunction() {\n const flags = this.currentThisScopeFlags();\n return (flags & SCOPE_CLASS) > 0 && (flags & SCOPE_FUNCTION) === 0;\n }\n\n get inStaticBlock() {\n return (this.currentThisScopeFlags() & SCOPE_STATIC_BLOCK) > 0;\n }\n\n get inNonArrowFunction() {\n return (this.currentThisScopeFlags() & SCOPE_FUNCTION) > 0;\n }\n\n get treatFunctionsAsVar() {\n return this.treatFunctionsAsVarInScope(this.currentScope());\n }\n\n createScope(flags) {\n return new Scope(flags);\n }\n\n enter(flags) {\n this.scopeStack.push(this.createScope(flags));\n }\n\n exit() {\n this.scopeStack.pop();\n }\n\n treatFunctionsAsVarInScope(scope) {\n return !!(scope.flags & SCOPE_FUNCTION || !this.inModule && scope.flags & SCOPE_PROGRAM);\n }\n\n declareName(name, bindingType, pos) {\n let scope = this.currentScope();\n\n if (bindingType & BIND_SCOPE_LEXICAL || bindingType & BIND_SCOPE_FUNCTION) {\n this.checkRedeclarationInScope(scope, name, bindingType, pos);\n\n if (bindingType & BIND_SCOPE_FUNCTION) {\n scope.functions.add(name);\n } else {\n scope.lexical.add(name);\n }\n\n if (bindingType & BIND_SCOPE_LEXICAL) {\n this.maybeExportDefined(scope, name);\n }\n } else if (bindingType & BIND_SCOPE_VAR) {\n for (let i = this.scopeStack.length - 1; i >= 0; --i) {\n scope = this.scopeStack[i];\n this.checkRedeclarationInScope(scope, name, bindingType, pos);\n scope.var.add(name);\n this.maybeExportDefined(scope, name);\n if (scope.flags & SCOPE_VAR) break;\n }\n }\n\n if (this.inModule && scope.flags & SCOPE_PROGRAM) {\n this.undefinedExports.delete(name);\n }\n }\n\n maybeExportDefined(scope, name) {\n if (this.inModule && scope.flags & SCOPE_PROGRAM) {\n this.undefinedExports.delete(name);\n }\n }\n\n checkRedeclarationInScope(scope, name, bindingType, pos) {\n if (this.isRedeclaredInScope(scope, name, bindingType)) {\n this.raise(pos, ErrorMessages.VarRedeclaration, name);\n }\n }\n\n isRedeclaredInScope(scope, name, bindingType) {\n if (!(bindingType & BIND_KIND_VALUE)) return false;\n\n if (bindingType & BIND_SCOPE_LEXICAL) {\n return scope.lexical.has(name) || scope.functions.has(name) || scope.var.has(name);\n }\n\n if (bindingType & BIND_SCOPE_FUNCTION) {\n return scope.lexical.has(name) || !this.treatFunctionsAsVarInScope(scope) && scope.var.has(name);\n }\n\n return scope.lexical.has(name) && !(scope.flags & SCOPE_SIMPLE_CATCH && scope.lexical.values().next().value === name) || !this.treatFunctionsAsVarInScope(scope) && scope.functions.has(name);\n }\n\n checkLocalExport(id) {\n const {\n name\n } = id;\n const topLevelScope = this.scopeStack[0];\n\n if (!topLevelScope.lexical.has(name) && !topLevelScope.var.has(name) && !topLevelScope.functions.has(name)) {\n this.undefinedExports.set(name, id.start);\n }\n }\n\n currentScope() {\n return this.scopeStack[this.scopeStack.length - 1];\n }\n\n currentVarScopeFlags() {\n for (let i = this.scopeStack.length - 1;; i--) {\n const {\n flags\n } = this.scopeStack[i];\n\n if (flags & SCOPE_VAR) {\n return flags;\n }\n }\n }\n\n currentThisScopeFlags() {\n for (let i = this.scopeStack.length - 1;; i--) {\n const {\n flags\n } = this.scopeStack[i];\n\n if (flags & (SCOPE_VAR | SCOPE_CLASS) && !(flags & SCOPE_ARROW)) {\n return flags;\n }\n }\n }\n\n}\n\nclass FlowScope extends Scope {\n constructor(...args) {\n super(...args);\n this.declareFunctions = new Set();\n }\n\n}\n\nclass FlowScopeHandler extends ScopeHandler {\n createScope(flags) {\n return new FlowScope(flags);\n }\n\n declareName(name, bindingType, pos) {\n const scope = this.currentScope();\n\n if (bindingType & BIND_FLAGS_FLOW_DECLARE_FN) {\n this.checkRedeclarationInScope(scope, name, bindingType, pos);\n this.maybeExportDefined(scope, name);\n scope.declareFunctions.add(name);\n return;\n }\n\n super.declareName(...arguments);\n }\n\n isRedeclaredInScope(scope, name, bindingType) {\n if (super.isRedeclaredInScope(...arguments)) return true;\n\n if (bindingType & BIND_FLAGS_FLOW_DECLARE_FN) {\n return !scope.declareFunctions.has(name) && (scope.lexical.has(name) || scope.functions.has(name));\n }\n\n return false;\n }\n\n checkLocalExport(id) {\n if (!this.scopeStack[0].declareFunctions.has(id.name)) {\n super.checkLocalExport(id);\n }\n }\n\n}\n\nconst reservedTypes = new Set([\"_\", \"any\", \"bool\", \"boolean\", \"empty\", \"extends\", \"false\", \"interface\", \"mixed\", \"null\", \"number\", \"static\", \"string\", \"true\", \"typeof\", \"void\"]);\nconst FlowErrors = makeErrorTemplates({\n AmbiguousConditionalArrow: \"Ambiguous expression: wrap the arrow functions in parentheses to disambiguate.\",\n AmbiguousDeclareModuleKind: \"Found both `declare module.exports` and `declare export` in the same module. Modules can only have 1 since they are either an ES module or they are a CommonJS module.\",\n AssignReservedType: \"Cannot overwrite reserved type %0.\",\n DeclareClassElement: \"The `declare` modifier can only appear on class fields.\",\n DeclareClassFieldInitializer: \"Initializers are not allowed in fields with the `declare` modifier.\",\n DuplicateDeclareModuleExports: \"Duplicate `declare module.exports` statement.\",\n EnumBooleanMemberNotInitialized: \"Boolean enum members need to be initialized. Use either `%0 = true,` or `%0 = false,` in enum `%1`.\",\n EnumDuplicateMemberName: \"Enum member names need to be unique, but the name `%0` has already been used before in enum `%1`.\",\n EnumInconsistentMemberValues: \"Enum `%0` has inconsistent member initializers. Either use no initializers, or consistently use literals (either booleans, numbers, or strings) for all member initializers.\",\n EnumInvalidExplicitType: \"Enum type `%1` is not valid. Use one of `boolean`, `number`, `string`, or `symbol` in enum `%0`.\",\n EnumInvalidExplicitTypeUnknownSupplied: \"Supplied enum type is not valid. Use one of `boolean`, `number`, `string`, or `symbol` in enum `%0`.\",\n EnumInvalidMemberInitializerPrimaryType: \"Enum `%0` has type `%2`, so the initializer of `%1` needs to be a %2 literal.\",\n EnumInvalidMemberInitializerSymbolType: \"Symbol enum members cannot be initialized. Use `%1,` in enum `%0`.\",\n EnumInvalidMemberInitializerUnknownType: \"The enum member initializer for `%1` needs to be a literal (either a boolean, number, or string) in enum `%0`.\",\n EnumInvalidMemberName: \"Enum member names cannot start with lowercase 'a' through 'z'. Instead of using `%0`, consider using `%1`, in enum `%2`.\",\n EnumNumberMemberNotInitialized: \"Number enum members need to be initialized, e.g. `%1 = 1` in enum `%0`.\",\n EnumStringMemberInconsistentlyInitailized: \"String enum members need to consistently either all use initializers, or use no initializers, in enum `%0`.\",\n GetterMayNotHaveThisParam: \"A getter cannot have a `this` parameter.\",\n ImportTypeShorthandOnlyInPureImport: \"The `type` and `typeof` keywords on named imports can only be used on regular `import` statements. It cannot be used with `import type` or `import typeof` statements.\",\n InexactInsideExact: \"Explicit inexact syntax cannot appear inside an explicit exact object type.\",\n InexactInsideNonObject: \"Explicit inexact syntax cannot appear in class or interface definitions.\",\n InexactVariance: \"Explicit inexact syntax cannot have variance.\",\n InvalidNonTypeImportInDeclareModule: \"Imports within a `declare module` body must always be `import type` or `import typeof`.\",\n MissingTypeParamDefault: \"Type parameter declaration needs a default, since a preceding type parameter declaration has a default.\",\n NestedDeclareModule: \"`declare module` cannot be used inside another `declare module`.\",\n NestedFlowComment: \"Cannot have a flow comment inside another flow comment.\",\n OptionalBindingPattern: \"A binding pattern parameter cannot be optional in an implementation signature.\",\n SetterMayNotHaveThisParam: \"A setter cannot have a `this` parameter.\",\n SpreadVariance: \"Spread properties cannot have variance.\",\n ThisParamAnnotationRequired: \"A type annotation is required for the `this` parameter.\",\n ThisParamBannedInConstructor: \"Constructors cannot have a `this` parameter; constructors don't bind `this` like other functions.\",\n ThisParamMayNotBeOptional: \"The `this` parameter cannot be optional.\",\n ThisParamMustBeFirst: \"The `this` parameter must be the first function parameter.\",\n ThisParamNoDefault: \"The `this` parameter may not have a default value.\",\n TypeBeforeInitializer: \"Type annotations must come before default assignments, e.g. instead of `age = 25: number` use `age: number = 25`.\",\n TypeCastInPattern: \"The type cast expression is expected to be wrapped with parenthesis.\",\n UnexpectedExplicitInexactInObject: \"Explicit inexact syntax must appear at the end of an inexact object.\",\n UnexpectedReservedType: \"Unexpected reserved type %0.\",\n UnexpectedReservedUnderscore: \"`_` is only allowed as a type argument to call or new.\",\n UnexpectedSpaceBetweenModuloChecks: \"Spaces between `%` and `checks` are not allowed here.\",\n UnexpectedSpreadType: \"Spread operator cannot appear in class or interface definitions.\",\n UnexpectedSubtractionOperand: 'Unexpected token, expected \"number\" or \"bigint\".',\n UnexpectedTokenAfterTypeParameter: \"Expected an arrow function after this type parameter declaration.\",\n UnexpectedTypeParameterBeforeAsyncArrowFunction: \"Type parameters must come after the async keyword, e.g. instead of ` async () => {}`, use `async () => {}`.\",\n UnsupportedDeclareExportKind: \"`declare export %0` is not supported. Use `%1` instead.\",\n UnsupportedStatementInDeclareModule: \"Only declares and type imports are allowed inside declare module.\",\n UnterminatedFlowComment: \"Unterminated flow-comment.\"\n}, ErrorCodes.SyntaxError);\n\nfunction isEsModuleType(bodyElement) {\n return bodyElement.type === \"DeclareExportAllDeclaration\" || bodyElement.type === \"DeclareExportDeclaration\" && (!bodyElement.declaration || bodyElement.declaration.type !== \"TypeAlias\" && bodyElement.declaration.type !== \"InterfaceDeclaration\");\n}\n\nfunction hasTypeImportKind(node) {\n return node.importKind === \"type\" || node.importKind === \"typeof\";\n}\n\nfunction isMaybeDefaultImport(state) {\n return (state.type === types$1.name || !!state.type.keyword) && state.value !== \"from\";\n}\n\nconst exportSuggestions = {\n const: \"declare export var\",\n let: \"declare export var\",\n type: \"export type\",\n interface: \"export interface\"\n};\n\nfunction partition(list, test) {\n const list1 = [];\n const list2 = [];\n\n for (let i = 0; i < list.length; i++) {\n (test(list[i], i, list) ? list1 : list2).push(list[i]);\n }\n\n return [list1, list2];\n}\n\nconst FLOW_PRAGMA_REGEX = /\\*?\\s*@((?:no)?flow)\\b/;\nvar flow = (superClass => class extends superClass {\n constructor(...args) {\n super(...args);\n this.flowPragma = undefined;\n }\n\n getScopeHandler() {\n return FlowScopeHandler;\n }\n\n shouldParseTypes() {\n return this.getPluginOption(\"flow\", \"all\") || this.flowPragma === \"flow\";\n }\n\n shouldParseEnums() {\n return !!this.getPluginOption(\"flow\", \"enums\");\n }\n\n finishToken(type, val) {\n if (type !== types$1.string && type !== types$1.semi && type !== types$1.interpreterDirective) {\n if (this.flowPragma === undefined) {\n this.flowPragma = null;\n }\n }\n\n return super.finishToken(type, val);\n }\n\n addComment(comment) {\n if (this.flowPragma === undefined) {\n const matches = FLOW_PRAGMA_REGEX.exec(comment.value);\n\n if (!matches) ; else if (matches[1] === \"flow\") {\n this.flowPragma = \"flow\";\n } else if (matches[1] === \"noflow\") {\n this.flowPragma = \"noflow\";\n } else {\n throw new Error(\"Unexpected flow pragma\");\n }\n }\n\n return super.addComment(comment);\n }\n\n flowParseTypeInitialiser(tok) {\n const oldInType = this.state.inType;\n this.state.inType = true;\n this.expect(tok || types$1.colon);\n const type = this.flowParseType();\n this.state.inType = oldInType;\n return type;\n }\n\n flowParsePredicate() {\n const node = this.startNode();\n const moduloPos = this.state.start;\n this.next();\n this.expectContextual(\"checks\");\n\n if (this.state.lastTokStart > moduloPos + 1) {\n this.raise(moduloPos, FlowErrors.UnexpectedSpaceBetweenModuloChecks);\n }\n\n if (this.eat(types$1.parenL)) {\n node.value = this.parseExpression();\n this.expect(types$1.parenR);\n return this.finishNode(node, \"DeclaredPredicate\");\n } else {\n return this.finishNode(node, \"InferredPredicate\");\n }\n }\n\n flowParseTypeAndPredicateInitialiser() {\n const oldInType = this.state.inType;\n this.state.inType = true;\n this.expect(types$1.colon);\n let type = null;\n let predicate = null;\n\n if (this.match(types$1.modulo)) {\n this.state.inType = oldInType;\n predicate = this.flowParsePredicate();\n } else {\n type = this.flowParseType();\n this.state.inType = oldInType;\n\n if (this.match(types$1.modulo)) {\n predicate = this.flowParsePredicate();\n }\n }\n\n return [type, predicate];\n }\n\n flowParseDeclareClass(node) {\n this.next();\n this.flowParseInterfaceish(node, true);\n return this.finishNode(node, \"DeclareClass\");\n }\n\n flowParseDeclareFunction(node) {\n this.next();\n const id = node.id = this.parseIdentifier();\n const typeNode = this.startNode();\n const typeContainer = this.startNode();\n\n if (this.isRelational(\"<\")) {\n typeNode.typeParameters = this.flowParseTypeParameterDeclaration();\n } else {\n typeNode.typeParameters = null;\n }\n\n this.expect(types$1.parenL);\n const tmp = this.flowParseFunctionTypeParams();\n typeNode.params = tmp.params;\n typeNode.rest = tmp.rest;\n typeNode.this = tmp._this;\n this.expect(types$1.parenR);\n [typeNode.returnType, node.predicate] = this.flowParseTypeAndPredicateInitialiser();\n typeContainer.typeAnnotation = this.finishNode(typeNode, \"FunctionTypeAnnotation\");\n id.typeAnnotation = this.finishNode(typeContainer, \"TypeAnnotation\");\n this.resetEndLocation(id);\n this.semicolon();\n this.scope.declareName(node.id.name, BIND_FLOW_DECLARE_FN, node.id.start);\n return this.finishNode(node, \"DeclareFunction\");\n }\n\n flowParseDeclare(node, insideModule) {\n if (this.match(types$1._class)) {\n return this.flowParseDeclareClass(node);\n } else if (this.match(types$1._function)) {\n return this.flowParseDeclareFunction(node);\n } else if (this.match(types$1._var)) {\n return this.flowParseDeclareVariable(node);\n } else if (this.eatContextual(\"module\")) {\n if (this.match(types$1.dot)) {\n return this.flowParseDeclareModuleExports(node);\n } else {\n if (insideModule) {\n this.raise(this.state.lastTokStart, FlowErrors.NestedDeclareModule);\n }\n\n return this.flowParseDeclareModule(node);\n }\n } else if (this.isContextual(\"type\")) {\n return this.flowParseDeclareTypeAlias(node);\n } else if (this.isContextual(\"opaque\")) {\n return this.flowParseDeclareOpaqueType(node);\n } else if (this.isContextual(\"interface\")) {\n return this.flowParseDeclareInterface(node);\n } else if (this.match(types$1._export)) {\n return this.flowParseDeclareExportDeclaration(node, insideModule);\n } else {\n throw this.unexpected();\n }\n }\n\n flowParseDeclareVariable(node) {\n this.next();\n node.id = this.flowParseTypeAnnotatableIdentifier(true);\n this.scope.declareName(node.id.name, BIND_VAR, node.id.start);\n this.semicolon();\n return this.finishNode(node, \"DeclareVariable\");\n }\n\n flowParseDeclareModule(node) {\n this.scope.enter(SCOPE_OTHER);\n\n if (this.match(types$1.string)) {\n node.id = this.parseExprAtom();\n } else {\n node.id = this.parseIdentifier();\n }\n\n const bodyNode = node.body = this.startNode();\n const body = bodyNode.body = [];\n this.expect(types$1.braceL);\n\n while (!this.match(types$1.braceR)) {\n let bodyNode = this.startNode();\n\n if (this.match(types$1._import)) {\n this.next();\n\n if (!this.isContextual(\"type\") && !this.match(types$1._typeof)) {\n this.raise(this.state.lastTokStart, FlowErrors.InvalidNonTypeImportInDeclareModule);\n }\n\n this.parseImport(bodyNode);\n } else {\n this.expectContextual(\"declare\", FlowErrors.UnsupportedStatementInDeclareModule);\n bodyNode = this.flowParseDeclare(bodyNode, true);\n }\n\n body.push(bodyNode);\n }\n\n this.scope.exit();\n this.expect(types$1.braceR);\n this.finishNode(bodyNode, \"BlockStatement\");\n let kind = null;\n let hasModuleExport = false;\n body.forEach(bodyElement => {\n if (isEsModuleType(bodyElement)) {\n if (kind === \"CommonJS\") {\n this.raise(bodyElement.start, FlowErrors.AmbiguousDeclareModuleKind);\n }\n\n kind = \"ES\";\n } else if (bodyElement.type === \"DeclareModuleExports\") {\n if (hasModuleExport) {\n this.raise(bodyElement.start, FlowErrors.DuplicateDeclareModuleExports);\n }\n\n if (kind === \"ES\") {\n this.raise(bodyElement.start, FlowErrors.AmbiguousDeclareModuleKind);\n }\n\n kind = \"CommonJS\";\n hasModuleExport = true;\n }\n });\n node.kind = kind || \"CommonJS\";\n return this.finishNode(node, \"DeclareModule\");\n }\n\n flowParseDeclareExportDeclaration(node, insideModule) {\n this.expect(types$1._export);\n\n if (this.eat(types$1._default)) {\n if (this.match(types$1._function) || this.match(types$1._class)) {\n node.declaration = this.flowParseDeclare(this.startNode());\n } else {\n node.declaration = this.flowParseType();\n this.semicolon();\n }\n\n node.default = true;\n return this.finishNode(node, \"DeclareExportDeclaration\");\n } else {\n if (this.match(types$1._const) || this.isLet() || (this.isContextual(\"type\") || this.isContextual(\"interface\")) && !insideModule) {\n const label = this.state.value;\n const suggestion = exportSuggestions[label];\n throw this.raise(this.state.start, FlowErrors.UnsupportedDeclareExportKind, label, suggestion);\n }\n\n if (this.match(types$1._var) || this.match(types$1._function) || this.match(types$1._class) || this.isContextual(\"opaque\")) {\n node.declaration = this.flowParseDeclare(this.startNode());\n node.default = false;\n return this.finishNode(node, \"DeclareExportDeclaration\");\n } else if (this.match(types$1.star) || this.match(types$1.braceL) || this.isContextual(\"interface\") || this.isContextual(\"type\") || this.isContextual(\"opaque\")) {\n node = this.parseExport(node);\n\n if (node.type === \"ExportNamedDeclaration\") {\n node.type = \"ExportDeclaration\";\n node.default = false;\n delete node.exportKind;\n }\n\n node.type = \"Declare\" + node.type;\n return node;\n }\n }\n\n throw this.unexpected();\n }\n\n flowParseDeclareModuleExports(node) {\n this.next();\n this.expectContextual(\"exports\");\n node.typeAnnotation = this.flowParseTypeAnnotation();\n this.semicolon();\n return this.finishNode(node, \"DeclareModuleExports\");\n }\n\n flowParseDeclareTypeAlias(node) {\n this.next();\n this.flowParseTypeAlias(node);\n node.type = \"DeclareTypeAlias\";\n return node;\n }\n\n flowParseDeclareOpaqueType(node) {\n this.next();\n this.flowParseOpaqueType(node, true);\n node.type = \"DeclareOpaqueType\";\n return node;\n }\n\n flowParseDeclareInterface(node) {\n this.next();\n this.flowParseInterfaceish(node);\n return this.finishNode(node, \"DeclareInterface\");\n }\n\n flowParseInterfaceish(node, isClass = false) {\n node.id = this.flowParseRestrictedIdentifier(!isClass, true);\n this.scope.declareName(node.id.name, isClass ? BIND_FUNCTION : BIND_LEXICAL, node.id.start);\n\n if (this.isRelational(\"<\")) {\n node.typeParameters = this.flowParseTypeParameterDeclaration();\n } else {\n node.typeParameters = null;\n }\n\n node.extends = [];\n node.implements = [];\n node.mixins = [];\n\n if (this.eat(types$1._extends)) {\n do {\n node.extends.push(this.flowParseInterfaceExtends());\n } while (!isClass && this.eat(types$1.comma));\n }\n\n if (this.isContextual(\"mixins\")) {\n this.next();\n\n do {\n node.mixins.push(this.flowParseInterfaceExtends());\n } while (this.eat(types$1.comma));\n }\n\n if (this.isContextual(\"implements\")) {\n this.next();\n\n do {\n node.implements.push(this.flowParseInterfaceExtends());\n } while (this.eat(types$1.comma));\n }\n\n node.body = this.flowParseObjectType({\n allowStatic: isClass,\n allowExact: false,\n allowSpread: false,\n allowProto: isClass,\n allowInexact: false\n });\n }\n\n flowParseInterfaceExtends() {\n const node = this.startNode();\n node.id = this.flowParseQualifiedTypeIdentifier();\n\n if (this.isRelational(\"<\")) {\n node.typeParameters = this.flowParseTypeParameterInstantiation();\n } else {\n node.typeParameters = null;\n }\n\n return this.finishNode(node, \"InterfaceExtends\");\n }\n\n flowParseInterface(node) {\n this.flowParseInterfaceish(node);\n return this.finishNode(node, \"InterfaceDeclaration\");\n }\n\n checkNotUnderscore(word) {\n if (word === \"_\") {\n this.raise(this.state.start, FlowErrors.UnexpectedReservedUnderscore);\n }\n }\n\n checkReservedType(word, startLoc, declaration) {\n if (!reservedTypes.has(word)) return;\n this.raise(startLoc, declaration ? FlowErrors.AssignReservedType : FlowErrors.UnexpectedReservedType, word);\n }\n\n flowParseRestrictedIdentifier(liberal, declaration) {\n this.checkReservedType(this.state.value, this.state.start, declaration);\n return this.parseIdentifier(liberal);\n }\n\n flowParseTypeAlias(node) {\n node.id = this.flowParseRestrictedIdentifier(false, true);\n this.scope.declareName(node.id.name, BIND_LEXICAL, node.id.start);\n\n if (this.isRelational(\"<\")) {\n node.typeParameters = this.flowParseTypeParameterDeclaration();\n } else {\n node.typeParameters = null;\n }\n\n node.right = this.flowParseTypeInitialiser(types$1.eq);\n this.semicolon();\n return this.finishNode(node, \"TypeAlias\");\n }\n\n flowParseOpaqueType(node, declare) {\n this.expectContextual(\"type\");\n node.id = this.flowParseRestrictedIdentifier(true, true);\n this.scope.declareName(node.id.name, BIND_LEXICAL, node.id.start);\n\n if (this.isRelational(\"<\")) {\n node.typeParameters = this.flowParseTypeParameterDeclaration();\n } else {\n node.typeParameters = null;\n }\n\n node.supertype = null;\n\n if (this.match(types$1.colon)) {\n node.supertype = this.flowParseTypeInitialiser(types$1.colon);\n }\n\n node.impltype = null;\n\n if (!declare) {\n node.impltype = this.flowParseTypeInitialiser(types$1.eq);\n }\n\n this.semicolon();\n return this.finishNode(node, \"OpaqueType\");\n }\n\n flowParseTypeParameter(requireDefault = false) {\n const nodeStart = this.state.start;\n const node = this.startNode();\n const variance = this.flowParseVariance();\n const ident = this.flowParseTypeAnnotatableIdentifier();\n node.name = ident.name;\n node.variance = variance;\n node.bound = ident.typeAnnotation;\n\n if (this.match(types$1.eq)) {\n this.eat(types$1.eq);\n node.default = this.flowParseType();\n } else {\n if (requireDefault) {\n this.raise(nodeStart, FlowErrors.MissingTypeParamDefault);\n }\n }\n\n return this.finishNode(node, \"TypeParameter\");\n }\n\n flowParseTypeParameterDeclaration() {\n const oldInType = this.state.inType;\n const node = this.startNode();\n node.params = [];\n this.state.inType = true;\n\n if (this.isRelational(\"<\") || this.match(types$1.jsxTagStart)) {\n this.next();\n } else {\n this.unexpected();\n }\n\n let defaultRequired = false;\n\n do {\n const typeParameter = this.flowParseTypeParameter(defaultRequired);\n node.params.push(typeParameter);\n\n if (typeParameter.default) {\n defaultRequired = true;\n }\n\n if (!this.isRelational(\">\")) {\n this.expect(types$1.comma);\n }\n } while (!this.isRelational(\">\"));\n\n this.expectRelational(\">\");\n this.state.inType = oldInType;\n return this.finishNode(node, \"TypeParameterDeclaration\");\n }\n\n flowParseTypeParameterInstantiation() {\n const node = this.startNode();\n const oldInType = this.state.inType;\n node.params = [];\n this.state.inType = true;\n this.expectRelational(\"<\");\n const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n this.state.noAnonFunctionType = false;\n\n while (!this.isRelational(\">\")) {\n node.params.push(this.flowParseType());\n\n if (!this.isRelational(\">\")) {\n this.expect(types$1.comma);\n }\n }\n\n this.state.noAnonFunctionType = oldNoAnonFunctionType;\n this.expectRelational(\">\");\n this.state.inType = oldInType;\n return this.finishNode(node, \"TypeParameterInstantiation\");\n }\n\n flowParseTypeParameterInstantiationCallOrNew() {\n const node = this.startNode();\n const oldInType = this.state.inType;\n node.params = [];\n this.state.inType = true;\n this.expectRelational(\"<\");\n\n while (!this.isRelational(\">\")) {\n node.params.push(this.flowParseTypeOrImplicitInstantiation());\n\n if (!this.isRelational(\">\")) {\n this.expect(types$1.comma);\n }\n }\n\n this.expectRelational(\">\");\n this.state.inType = oldInType;\n return this.finishNode(node, \"TypeParameterInstantiation\");\n }\n\n flowParseInterfaceType() {\n const node = this.startNode();\n this.expectContextual(\"interface\");\n node.extends = [];\n\n if (this.eat(types$1._extends)) {\n do {\n node.extends.push(this.flowParseInterfaceExtends());\n } while (this.eat(types$1.comma));\n }\n\n node.body = this.flowParseObjectType({\n allowStatic: false,\n allowExact: false,\n allowSpread: false,\n allowProto: false,\n allowInexact: false\n });\n return this.finishNode(node, \"InterfaceTypeAnnotation\");\n }\n\n flowParseObjectPropertyKey() {\n return this.match(types$1.num) || this.match(types$1.string) ? this.parseExprAtom() : this.parseIdentifier(true);\n }\n\n flowParseObjectTypeIndexer(node, isStatic, variance) {\n node.static = isStatic;\n\n if (this.lookahead().type === types$1.colon) {\n node.id = this.flowParseObjectPropertyKey();\n node.key = this.flowParseTypeInitialiser();\n } else {\n node.id = null;\n node.key = this.flowParseType();\n }\n\n this.expect(types$1.bracketR);\n node.value = this.flowParseTypeInitialiser();\n node.variance = variance;\n return this.finishNode(node, \"ObjectTypeIndexer\");\n }\n\n flowParseObjectTypeInternalSlot(node, isStatic) {\n node.static = isStatic;\n node.id = this.flowParseObjectPropertyKey();\n this.expect(types$1.bracketR);\n this.expect(types$1.bracketR);\n\n if (this.isRelational(\"<\") || this.match(types$1.parenL)) {\n node.method = true;\n node.optional = false;\n node.value = this.flowParseObjectTypeMethodish(this.startNodeAt(node.start, node.loc.start));\n } else {\n node.method = false;\n\n if (this.eat(types$1.question)) {\n node.optional = true;\n }\n\n node.value = this.flowParseTypeInitialiser();\n }\n\n return this.finishNode(node, \"ObjectTypeInternalSlot\");\n }\n\n flowParseObjectTypeMethodish(node) {\n node.params = [];\n node.rest = null;\n node.typeParameters = null;\n node.this = null;\n\n if (this.isRelational(\"<\")) {\n node.typeParameters = this.flowParseTypeParameterDeclaration();\n }\n\n this.expect(types$1.parenL);\n\n if (this.match(types$1._this)) {\n node.this = this.flowParseFunctionTypeParam(true);\n node.this.name = null;\n\n if (!this.match(types$1.parenR)) {\n this.expect(types$1.comma);\n }\n }\n\n while (!this.match(types$1.parenR) && !this.match(types$1.ellipsis)) {\n node.params.push(this.flowParseFunctionTypeParam(false));\n\n if (!this.match(types$1.parenR)) {\n this.expect(types$1.comma);\n }\n }\n\n if (this.eat(types$1.ellipsis)) {\n node.rest = this.flowParseFunctionTypeParam(false);\n }\n\n this.expect(types$1.parenR);\n node.returnType = this.flowParseTypeInitialiser();\n return this.finishNode(node, \"FunctionTypeAnnotation\");\n }\n\n flowParseObjectTypeCallProperty(node, isStatic) {\n const valueNode = this.startNode();\n node.static = isStatic;\n node.value = this.flowParseObjectTypeMethodish(valueNode);\n return this.finishNode(node, \"ObjectTypeCallProperty\");\n }\n\n flowParseObjectType({\n allowStatic,\n allowExact,\n allowSpread,\n allowProto,\n allowInexact\n }) {\n const oldInType = this.state.inType;\n this.state.inType = true;\n const nodeStart = this.startNode();\n nodeStart.callProperties = [];\n nodeStart.properties = [];\n nodeStart.indexers = [];\n nodeStart.internalSlots = [];\n let endDelim;\n let exact;\n let inexact = false;\n\n if (allowExact && this.match(types$1.braceBarL)) {\n this.expect(types$1.braceBarL);\n endDelim = types$1.braceBarR;\n exact = true;\n } else {\n this.expect(types$1.braceL);\n endDelim = types$1.braceR;\n exact = false;\n }\n\n nodeStart.exact = exact;\n\n while (!this.match(endDelim)) {\n let isStatic = false;\n let protoStart = null;\n let inexactStart = null;\n const node = this.startNode();\n\n if (allowProto && this.isContextual(\"proto\")) {\n const lookahead = this.lookahead();\n\n if (lookahead.type !== types$1.colon && lookahead.type !== types$1.question) {\n this.next();\n protoStart = this.state.start;\n allowStatic = false;\n }\n }\n\n if (allowStatic && this.isContextual(\"static\")) {\n const lookahead = this.lookahead();\n\n if (lookahead.type !== types$1.colon && lookahead.type !== types$1.question) {\n this.next();\n isStatic = true;\n }\n }\n\n const variance = this.flowParseVariance();\n\n if (this.eat(types$1.bracketL)) {\n if (protoStart != null) {\n this.unexpected(protoStart);\n }\n\n if (this.eat(types$1.bracketL)) {\n if (variance) {\n this.unexpected(variance.start);\n }\n\n nodeStart.internalSlots.push(this.flowParseObjectTypeInternalSlot(node, isStatic));\n } else {\n nodeStart.indexers.push(this.flowParseObjectTypeIndexer(node, isStatic, variance));\n }\n } else if (this.match(types$1.parenL) || this.isRelational(\"<\")) {\n if (protoStart != null) {\n this.unexpected(protoStart);\n }\n\n if (variance) {\n this.unexpected(variance.start);\n }\n\n nodeStart.callProperties.push(this.flowParseObjectTypeCallProperty(node, isStatic));\n } else {\n let kind = \"init\";\n\n if (this.isContextual(\"get\") || this.isContextual(\"set\")) {\n const lookahead = this.lookahead();\n\n if (lookahead.type === types$1.name || lookahead.type === types$1.string || lookahead.type === types$1.num) {\n kind = this.state.value;\n this.next();\n }\n }\n\n const propOrInexact = this.flowParseObjectTypeProperty(node, isStatic, protoStart, variance, kind, allowSpread, allowInexact != null ? allowInexact : !exact);\n\n if (propOrInexact === null) {\n inexact = true;\n inexactStart = this.state.lastTokStart;\n } else {\n nodeStart.properties.push(propOrInexact);\n }\n }\n\n this.flowObjectTypeSemicolon();\n\n if (inexactStart && !this.match(types$1.braceR) && !this.match(types$1.braceBarR)) {\n this.raise(inexactStart, FlowErrors.UnexpectedExplicitInexactInObject);\n }\n }\n\n this.expect(endDelim);\n\n if (allowSpread) {\n nodeStart.inexact = inexact;\n }\n\n const out = this.finishNode(nodeStart, \"ObjectTypeAnnotation\");\n this.state.inType = oldInType;\n return out;\n }\n\n flowParseObjectTypeProperty(node, isStatic, protoStart, variance, kind, allowSpread, allowInexact) {\n if (this.eat(types$1.ellipsis)) {\n const isInexactToken = this.match(types$1.comma) || this.match(types$1.semi) || this.match(types$1.braceR) || this.match(types$1.braceBarR);\n\n if (isInexactToken) {\n if (!allowSpread) {\n this.raise(this.state.lastTokStart, FlowErrors.InexactInsideNonObject);\n } else if (!allowInexact) {\n this.raise(this.state.lastTokStart, FlowErrors.InexactInsideExact);\n }\n\n if (variance) {\n this.raise(variance.start, FlowErrors.InexactVariance);\n }\n\n return null;\n }\n\n if (!allowSpread) {\n this.raise(this.state.lastTokStart, FlowErrors.UnexpectedSpreadType);\n }\n\n if (protoStart != null) {\n this.unexpected(protoStart);\n }\n\n if (variance) {\n this.raise(variance.start, FlowErrors.SpreadVariance);\n }\n\n node.argument = this.flowParseType();\n return this.finishNode(node, \"ObjectTypeSpreadProperty\");\n } else {\n node.key = this.flowParseObjectPropertyKey();\n node.static = isStatic;\n node.proto = protoStart != null;\n node.kind = kind;\n let optional = false;\n\n if (this.isRelational(\"<\") || this.match(types$1.parenL)) {\n node.method = true;\n\n if (protoStart != null) {\n this.unexpected(protoStart);\n }\n\n if (variance) {\n this.unexpected(variance.start);\n }\n\n node.value = this.flowParseObjectTypeMethodish(this.startNodeAt(node.start, node.loc.start));\n\n if (kind === \"get\" || kind === \"set\") {\n this.flowCheckGetterSetterParams(node);\n }\n\n if (!allowSpread && node.key.name === \"constructor\" && node.value.this) {\n this.raise(node.value.this.start, FlowErrors.ThisParamBannedInConstructor);\n }\n } else {\n if (kind !== \"init\") this.unexpected();\n node.method = false;\n\n if (this.eat(types$1.question)) {\n optional = true;\n }\n\n node.value = this.flowParseTypeInitialiser();\n node.variance = variance;\n }\n\n node.optional = optional;\n return this.finishNode(node, \"ObjectTypeProperty\");\n }\n }\n\n flowCheckGetterSetterParams(property) {\n const paramCount = property.kind === \"get\" ? 0 : 1;\n const start = property.start;\n const length = property.value.params.length + (property.value.rest ? 1 : 0);\n\n if (property.value.this) {\n this.raise(property.value.this.start, property.kind === \"get\" ? FlowErrors.GetterMayNotHaveThisParam : FlowErrors.SetterMayNotHaveThisParam);\n }\n\n if (length !== paramCount) {\n if (property.kind === \"get\") {\n this.raise(start, ErrorMessages.BadGetterArity);\n } else {\n this.raise(start, ErrorMessages.BadSetterArity);\n }\n }\n\n if (property.kind === \"set\" && property.value.rest) {\n this.raise(start, ErrorMessages.BadSetterRestParameter);\n }\n }\n\n flowObjectTypeSemicolon() {\n if (!this.eat(types$1.semi) && !this.eat(types$1.comma) && !this.match(types$1.braceR) && !this.match(types$1.braceBarR)) {\n this.unexpected();\n }\n }\n\n flowParseQualifiedTypeIdentifier(startPos, startLoc, id) {\n startPos = startPos || this.state.start;\n startLoc = startLoc || this.state.startLoc;\n let node = id || this.flowParseRestrictedIdentifier(true);\n\n while (this.eat(types$1.dot)) {\n const node2 = this.startNodeAt(startPos, startLoc);\n node2.qualification = node;\n node2.id = this.flowParseRestrictedIdentifier(true);\n node = this.finishNode(node2, \"QualifiedTypeIdentifier\");\n }\n\n return node;\n }\n\n flowParseGenericType(startPos, startLoc, id) {\n const node = this.startNodeAt(startPos, startLoc);\n node.typeParameters = null;\n node.id = this.flowParseQualifiedTypeIdentifier(startPos, startLoc, id);\n\n if (this.isRelational(\"<\")) {\n node.typeParameters = this.flowParseTypeParameterInstantiation();\n }\n\n return this.finishNode(node, \"GenericTypeAnnotation\");\n }\n\n flowParseTypeofType() {\n const node = this.startNode();\n this.expect(types$1._typeof);\n node.argument = this.flowParsePrimaryType();\n return this.finishNode(node, \"TypeofTypeAnnotation\");\n }\n\n flowParseTupleType() {\n const node = this.startNode();\n node.types = [];\n this.expect(types$1.bracketL);\n\n while (this.state.pos < this.length && !this.match(types$1.bracketR)) {\n node.types.push(this.flowParseType());\n if (this.match(types$1.bracketR)) break;\n this.expect(types$1.comma);\n }\n\n this.expect(types$1.bracketR);\n return this.finishNode(node, \"TupleTypeAnnotation\");\n }\n\n flowParseFunctionTypeParam(first) {\n let name = null;\n let optional = false;\n let typeAnnotation = null;\n const node = this.startNode();\n const lh = this.lookahead();\n const isThis = this.state.type === types$1._this;\n\n if (lh.type === types$1.colon || lh.type === types$1.question) {\n if (isThis && !first) {\n this.raise(node.start, FlowErrors.ThisParamMustBeFirst);\n }\n\n name = this.parseIdentifier(isThis);\n\n if (this.eat(types$1.question)) {\n optional = true;\n\n if (isThis) {\n this.raise(node.start, FlowErrors.ThisParamMayNotBeOptional);\n }\n }\n\n typeAnnotation = this.flowParseTypeInitialiser();\n } else {\n typeAnnotation = this.flowParseType();\n }\n\n node.name = name;\n node.optional = optional;\n node.typeAnnotation = typeAnnotation;\n return this.finishNode(node, \"FunctionTypeParam\");\n }\n\n reinterpretTypeAsFunctionTypeParam(type) {\n const node = this.startNodeAt(type.start, type.loc.start);\n node.name = null;\n node.optional = false;\n node.typeAnnotation = type;\n return this.finishNode(node, \"FunctionTypeParam\");\n }\n\n flowParseFunctionTypeParams(params = []) {\n let rest = null;\n let _this = null;\n\n if (this.match(types$1._this)) {\n _this = this.flowParseFunctionTypeParam(true);\n _this.name = null;\n\n if (!this.match(types$1.parenR)) {\n this.expect(types$1.comma);\n }\n }\n\n while (!this.match(types$1.parenR) && !this.match(types$1.ellipsis)) {\n params.push(this.flowParseFunctionTypeParam(false));\n\n if (!this.match(types$1.parenR)) {\n this.expect(types$1.comma);\n }\n }\n\n if (this.eat(types$1.ellipsis)) {\n rest = this.flowParseFunctionTypeParam(false);\n }\n\n return {\n params,\n rest,\n _this\n };\n }\n\n flowIdentToTypeAnnotation(startPos, startLoc, node, id) {\n switch (id.name) {\n case \"any\":\n return this.finishNode(node, \"AnyTypeAnnotation\");\n\n case \"bool\":\n case \"boolean\":\n return this.finishNode(node, \"BooleanTypeAnnotation\");\n\n case \"mixed\":\n return this.finishNode(node, \"MixedTypeAnnotation\");\n\n case \"empty\":\n return this.finishNode(node, \"EmptyTypeAnnotation\");\n\n case \"number\":\n return this.finishNode(node, \"NumberTypeAnnotation\");\n\n case \"string\":\n return this.finishNode(node, \"StringTypeAnnotation\");\n\n case \"symbol\":\n return this.finishNode(node, \"SymbolTypeAnnotation\");\n\n default:\n this.checkNotUnderscore(id.name);\n return this.flowParseGenericType(startPos, startLoc, id);\n }\n }\n\n flowParsePrimaryType() {\n const startPos = this.state.start;\n const startLoc = this.state.startLoc;\n const node = this.startNode();\n let tmp;\n let type;\n let isGroupedType = false;\n const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n\n switch (this.state.type) {\n case types$1.name:\n if (this.isContextual(\"interface\")) {\n return this.flowParseInterfaceType();\n }\n\n return this.flowIdentToTypeAnnotation(startPos, startLoc, node, this.parseIdentifier());\n\n case types$1.braceL:\n return this.flowParseObjectType({\n allowStatic: false,\n allowExact: false,\n allowSpread: true,\n allowProto: false,\n allowInexact: true\n });\n\n case types$1.braceBarL:\n return this.flowParseObjectType({\n allowStatic: false,\n allowExact: true,\n allowSpread: true,\n allowProto: false,\n allowInexact: false\n });\n\n case types$1.bracketL:\n this.state.noAnonFunctionType = false;\n type = this.flowParseTupleType();\n this.state.noAnonFunctionType = oldNoAnonFunctionType;\n return type;\n\n case types$1.relational:\n if (this.state.value === \"<\") {\n node.typeParameters = this.flowParseTypeParameterDeclaration();\n this.expect(types$1.parenL);\n tmp = this.flowParseFunctionTypeParams();\n node.params = tmp.params;\n node.rest = tmp.rest;\n node.this = tmp._this;\n this.expect(types$1.parenR);\n this.expect(types$1.arrow);\n node.returnType = this.flowParseType();\n return this.finishNode(node, \"FunctionTypeAnnotation\");\n }\n\n break;\n\n case types$1.parenL:\n this.next();\n\n if (!this.match(types$1.parenR) && !this.match(types$1.ellipsis)) {\n if (this.match(types$1.name) || this.match(types$1._this)) {\n const token = this.lookahead().type;\n isGroupedType = token !== types$1.question && token !== types$1.colon;\n } else {\n isGroupedType = true;\n }\n }\n\n if (isGroupedType) {\n this.state.noAnonFunctionType = false;\n type = this.flowParseType();\n this.state.noAnonFunctionType = oldNoAnonFunctionType;\n\n if (this.state.noAnonFunctionType || !(this.match(types$1.comma) || this.match(types$1.parenR) && this.lookahead().type === types$1.arrow)) {\n this.expect(types$1.parenR);\n return type;\n } else {\n this.eat(types$1.comma);\n }\n }\n\n if (type) {\n tmp = this.flowParseFunctionTypeParams([this.reinterpretTypeAsFunctionTypeParam(type)]);\n } else {\n tmp = this.flowParseFunctionTypeParams();\n }\n\n node.params = tmp.params;\n node.rest = tmp.rest;\n node.this = tmp._this;\n this.expect(types$1.parenR);\n this.expect(types$1.arrow);\n node.returnType = this.flowParseType();\n node.typeParameters = null;\n return this.finishNode(node, \"FunctionTypeAnnotation\");\n\n case types$1.string:\n return this.parseLiteral(this.state.value, \"StringLiteralTypeAnnotation\");\n\n case types$1._true:\n case types$1._false:\n node.value = this.match(types$1._true);\n this.next();\n return this.finishNode(node, \"BooleanLiteralTypeAnnotation\");\n\n case types$1.plusMin:\n if (this.state.value === \"-\") {\n this.next();\n\n if (this.match(types$1.num)) {\n return this.parseLiteralAtNode(-this.state.value, \"NumberLiteralTypeAnnotation\", node);\n }\n\n if (this.match(types$1.bigint)) {\n return this.parseLiteralAtNode(-this.state.value, \"BigIntLiteralTypeAnnotation\", node);\n }\n\n throw this.raise(this.state.start, FlowErrors.UnexpectedSubtractionOperand);\n }\n\n throw this.unexpected();\n\n case types$1.num:\n return this.parseLiteral(this.state.value, \"NumberLiteralTypeAnnotation\");\n\n case types$1.bigint:\n return this.parseLiteral(this.state.value, \"BigIntLiteralTypeAnnotation\");\n\n case types$1._void:\n this.next();\n return this.finishNode(node, \"VoidTypeAnnotation\");\n\n case types$1._null:\n this.next();\n return this.finishNode(node, \"NullLiteralTypeAnnotation\");\n\n case types$1._this:\n this.next();\n return this.finishNode(node, \"ThisTypeAnnotation\");\n\n case types$1.star:\n this.next();\n return this.finishNode(node, \"ExistsTypeAnnotation\");\n\n default:\n if (this.state.type.keyword === \"typeof\") {\n return this.flowParseTypeofType();\n } else if (this.state.type.keyword) {\n const label = this.state.type.label;\n this.next();\n return super.createIdentifier(node, label);\n }\n\n }\n\n throw this.unexpected();\n }\n\n flowParsePostfixType() {\n const startPos = this.state.start;\n const startLoc = this.state.startLoc;\n let type = this.flowParsePrimaryType();\n let seenOptionalIndexedAccess = false;\n\n while ((this.match(types$1.bracketL) || this.match(types$1.questionDot)) && !this.canInsertSemicolon()) {\n const node = this.startNodeAt(startPos, startLoc);\n const optional = this.eat(types$1.questionDot);\n seenOptionalIndexedAccess = seenOptionalIndexedAccess || optional;\n this.expect(types$1.bracketL);\n\n if (!optional && this.match(types$1.bracketR)) {\n node.elementType = type;\n this.next();\n type = this.finishNode(node, \"ArrayTypeAnnotation\");\n } else {\n node.objectType = type;\n node.indexType = this.flowParseType();\n this.expect(types$1.bracketR);\n\n if (seenOptionalIndexedAccess) {\n node.optional = optional;\n type = this.finishNode(node, \"OptionalIndexedAccessType\");\n } else {\n type = this.finishNode(node, \"IndexedAccessType\");\n }\n }\n }\n\n return type;\n }\n\n flowParsePrefixType() {\n const node = this.startNode();\n\n if (this.eat(types$1.question)) {\n node.typeAnnotation = this.flowParsePrefixType();\n return this.finishNode(node, \"NullableTypeAnnotation\");\n } else {\n return this.flowParsePostfixType();\n }\n }\n\n flowParseAnonFunctionWithoutParens() {\n const param = this.flowParsePrefixType();\n\n if (!this.state.noAnonFunctionType && this.eat(types$1.arrow)) {\n const node = this.startNodeAt(param.start, param.loc.start);\n node.params = [this.reinterpretTypeAsFunctionTypeParam(param)];\n node.rest = null;\n node.this = null;\n node.returnType = this.flowParseType();\n node.typeParameters = null;\n return this.finishNode(node, \"FunctionTypeAnnotation\");\n }\n\n return param;\n }\n\n flowParseIntersectionType() {\n const node = this.startNode();\n this.eat(types$1.bitwiseAND);\n const type = this.flowParseAnonFunctionWithoutParens();\n node.types = [type];\n\n while (this.eat(types$1.bitwiseAND)) {\n node.types.push(this.flowParseAnonFunctionWithoutParens());\n }\n\n return node.types.length === 1 ? type : this.finishNode(node, \"IntersectionTypeAnnotation\");\n }\n\n flowParseUnionType() {\n const node = this.startNode();\n this.eat(types$1.bitwiseOR);\n const type = this.flowParseIntersectionType();\n node.types = [type];\n\n while (this.eat(types$1.bitwiseOR)) {\n node.types.push(this.flowParseIntersectionType());\n }\n\n return node.types.length === 1 ? type : this.finishNode(node, \"UnionTypeAnnotation\");\n }\n\n flowParseType() {\n const oldInType = this.state.inType;\n this.state.inType = true;\n const type = this.flowParseUnionType();\n this.state.inType = oldInType;\n return type;\n }\n\n flowParseTypeOrImplicitInstantiation() {\n if (this.state.type === types$1.name && this.state.value === \"_\") {\n const startPos = this.state.start;\n const startLoc = this.state.startLoc;\n const node = this.parseIdentifier();\n return this.flowParseGenericType(startPos, startLoc, node);\n } else {\n return this.flowParseType();\n }\n }\n\n flowParseTypeAnnotation() {\n const node = this.startNode();\n node.typeAnnotation = this.flowParseTypeInitialiser();\n return this.finishNode(node, \"TypeAnnotation\");\n }\n\n flowParseTypeAnnotatableIdentifier(allowPrimitiveOverride) {\n const ident = allowPrimitiveOverride ? this.parseIdentifier() : this.flowParseRestrictedIdentifier();\n\n if (this.match(types$1.colon)) {\n ident.typeAnnotation = this.flowParseTypeAnnotation();\n this.resetEndLocation(ident);\n }\n\n return ident;\n }\n\n typeCastToParameter(node) {\n node.expression.typeAnnotation = node.typeAnnotation;\n this.resetEndLocation(node.expression, node.typeAnnotation.end, node.typeAnnotation.loc.end);\n return node.expression;\n }\n\n flowParseVariance() {\n let variance = null;\n\n if (this.match(types$1.plusMin)) {\n variance = this.startNode();\n\n if (this.state.value === \"+\") {\n variance.kind = \"plus\";\n } else {\n variance.kind = \"minus\";\n }\n\n this.next();\n this.finishNode(variance, \"Variance\");\n }\n\n return variance;\n }\n\n parseFunctionBody(node, allowExpressionBody, isMethod = false) {\n if (allowExpressionBody) {\n return this.forwardNoArrowParamsConversionAt(node, () => super.parseFunctionBody(node, true, isMethod));\n }\n\n return super.parseFunctionBody(node, false, isMethod);\n }\n\n parseFunctionBodyAndFinish(node, type, isMethod = false) {\n if (this.match(types$1.colon)) {\n const typeNode = this.startNode();\n [typeNode.typeAnnotation, node.predicate] = this.flowParseTypeAndPredicateInitialiser();\n node.returnType = typeNode.typeAnnotation ? this.finishNode(typeNode, \"TypeAnnotation\") : null;\n }\n\n super.parseFunctionBodyAndFinish(node, type, isMethod);\n }\n\n parseStatement(context, topLevel) {\n if (this.state.strict && this.match(types$1.name) && this.state.value === \"interface\") {\n const lookahead = this.lookahead();\n\n if (lookahead.type === types$1.name || isKeyword(lookahead.value)) {\n const node = this.startNode();\n this.next();\n return this.flowParseInterface(node);\n }\n } else if (this.shouldParseEnums() && this.isContextual(\"enum\")) {\n const node = this.startNode();\n this.next();\n return this.flowParseEnumDeclaration(node);\n }\n\n const stmt = super.parseStatement(context, topLevel);\n\n if (this.flowPragma === undefined && !this.isValidDirective(stmt)) {\n this.flowPragma = null;\n }\n\n return stmt;\n }\n\n parseExpressionStatement(node, expr) {\n if (expr.type === \"Identifier\") {\n if (expr.name === \"declare\") {\n if (this.match(types$1._class) || this.match(types$1.name) || this.match(types$1._function) || this.match(types$1._var) || this.match(types$1._export)) {\n return this.flowParseDeclare(node);\n }\n } else if (this.match(types$1.name)) {\n if (expr.name === \"interface\") {\n return this.flowParseInterface(node);\n } else if (expr.name === \"type\") {\n return this.flowParseTypeAlias(node);\n } else if (expr.name === \"opaque\") {\n return this.flowParseOpaqueType(node, false);\n }\n }\n }\n\n return super.parseExpressionStatement(node, expr);\n }\n\n shouldParseExportDeclaration() {\n return this.isContextual(\"type\") || this.isContextual(\"interface\") || this.isContextual(\"opaque\") || this.shouldParseEnums() && this.isContextual(\"enum\") || super.shouldParseExportDeclaration();\n }\n\n isExportDefaultSpecifier() {\n if (this.match(types$1.name) && (this.state.value === \"type\" || this.state.value === \"interface\" || this.state.value === \"opaque\" || this.shouldParseEnums() && this.state.value === \"enum\")) {\n return false;\n }\n\n return super.isExportDefaultSpecifier();\n }\n\n parseExportDefaultExpression() {\n if (this.shouldParseEnums() && this.isContextual(\"enum\")) {\n const node = this.startNode();\n this.next();\n return this.flowParseEnumDeclaration(node);\n }\n\n return super.parseExportDefaultExpression();\n }\n\n parseConditional(expr, startPos, startLoc, refExpressionErrors) {\n if (!this.match(types$1.question)) return expr;\n\n if (this.state.maybeInArrowParameters) {\n const result = this.tryParse(() => super.parseConditional(expr, startPos, startLoc));\n\n if (!result.node) {\n if (result.error) {\n super.setOptionalParametersError(refExpressionErrors, result.error);\n }\n\n return expr;\n }\n\n if (result.error) this.state = result.failState;\n return result.node;\n }\n\n this.expect(types$1.question);\n const state = this.state.clone();\n const originalNoArrowAt = this.state.noArrowAt;\n const node = this.startNodeAt(startPos, startLoc);\n let {\n consequent,\n failed\n } = this.tryParseConditionalConsequent();\n let [valid, invalid] = this.getArrowLikeExpressions(consequent);\n\n if (failed || invalid.length > 0) {\n const noArrowAt = [...originalNoArrowAt];\n\n if (invalid.length > 0) {\n this.state = state;\n this.state.noArrowAt = noArrowAt;\n\n for (let i = 0; i < invalid.length; i++) {\n noArrowAt.push(invalid[i].start);\n }\n\n ({\n consequent,\n failed\n } = this.tryParseConditionalConsequent());\n [valid, invalid] = this.getArrowLikeExpressions(consequent);\n }\n\n if (failed && valid.length > 1) {\n this.raise(state.start, FlowErrors.AmbiguousConditionalArrow);\n }\n\n if (failed && valid.length === 1) {\n this.state = state;\n this.state.noArrowAt = noArrowAt.concat(valid[0].start);\n ({\n consequent,\n failed\n } = this.tryParseConditionalConsequent());\n }\n }\n\n this.getArrowLikeExpressions(consequent, true);\n this.state.noArrowAt = originalNoArrowAt;\n this.expect(types$1.colon);\n node.test = expr;\n node.consequent = consequent;\n node.alternate = this.forwardNoArrowParamsConversionAt(node, () => this.parseMaybeAssign(undefined, undefined));\n return this.finishNode(node, \"ConditionalExpression\");\n }\n\n tryParseConditionalConsequent() {\n this.state.noArrowParamsConversionAt.push(this.state.start);\n const consequent = this.parseMaybeAssignAllowIn();\n const failed = !this.match(types$1.colon);\n this.state.noArrowParamsConversionAt.pop();\n return {\n consequent,\n failed\n };\n }\n\n getArrowLikeExpressions(node, disallowInvalid) {\n const stack = [node];\n const arrows = [];\n\n while (stack.length !== 0) {\n const node = stack.pop();\n\n if (node.type === \"ArrowFunctionExpression\") {\n if (node.typeParameters || !node.returnType) {\n this.finishArrowValidation(node);\n } else {\n arrows.push(node);\n }\n\n stack.push(node.body);\n } else if (node.type === \"ConditionalExpression\") {\n stack.push(node.consequent);\n stack.push(node.alternate);\n }\n }\n\n if (disallowInvalid) {\n arrows.forEach(node => this.finishArrowValidation(node));\n return [arrows, []];\n }\n\n return partition(arrows, node => node.params.every(param => this.isAssignable(param, true)));\n }\n\n finishArrowValidation(node) {\n var _node$extra;\n\n this.toAssignableList(node.params, (_node$extra = node.extra) == null ? void 0 : _node$extra.trailingComma, false);\n this.scope.enter(SCOPE_FUNCTION | SCOPE_ARROW);\n super.checkParams(node, false, true);\n this.scope.exit();\n }\n\n forwardNoArrowParamsConversionAt(node, parse) {\n let result;\n\n if (this.state.noArrowParamsConversionAt.indexOf(node.start) !== -1) {\n this.state.noArrowParamsConversionAt.push(this.state.start);\n result = parse();\n this.state.noArrowParamsConversionAt.pop();\n } else {\n result = parse();\n }\n\n return result;\n }\n\n parseParenItem(node, startPos, startLoc) {\n node = super.parseParenItem(node, startPos, startLoc);\n\n if (this.eat(types$1.question)) {\n node.optional = true;\n this.resetEndLocation(node);\n }\n\n if (this.match(types$1.colon)) {\n const typeCastNode = this.startNodeAt(startPos, startLoc);\n typeCastNode.expression = node;\n typeCastNode.typeAnnotation = this.flowParseTypeAnnotation();\n return this.finishNode(typeCastNode, \"TypeCastExpression\");\n }\n\n return node;\n }\n\n assertModuleNodeAllowed(node) {\n if (node.type === \"ImportDeclaration\" && (node.importKind === \"type\" || node.importKind === \"typeof\") || node.type === \"ExportNamedDeclaration\" && node.exportKind === \"type\" || node.type === \"ExportAllDeclaration\" && node.exportKind === \"type\") {\n return;\n }\n\n super.assertModuleNodeAllowed(node);\n }\n\n parseExport(node) {\n const decl = super.parseExport(node);\n\n if (decl.type === \"ExportNamedDeclaration\" || decl.type === \"ExportAllDeclaration\") {\n decl.exportKind = decl.exportKind || \"value\";\n }\n\n return decl;\n }\n\n parseExportDeclaration(node) {\n if (this.isContextual(\"type\")) {\n node.exportKind = \"type\";\n const declarationNode = this.startNode();\n this.next();\n\n if (this.match(types$1.braceL)) {\n node.specifiers = this.parseExportSpecifiers();\n this.parseExportFrom(node);\n return null;\n } else {\n return this.flowParseTypeAlias(declarationNode);\n }\n } else if (this.isContextual(\"opaque\")) {\n node.exportKind = \"type\";\n const declarationNode = this.startNode();\n this.next();\n return this.flowParseOpaqueType(declarationNode, false);\n } else if (this.isContextual(\"interface\")) {\n node.exportKind = \"type\";\n const declarationNode = this.startNode();\n this.next();\n return this.flowParseInterface(declarationNode);\n } else if (this.shouldParseEnums() && this.isContextual(\"enum\")) {\n node.exportKind = \"value\";\n const declarationNode = this.startNode();\n this.next();\n return this.flowParseEnumDeclaration(declarationNode);\n } else {\n return super.parseExportDeclaration(node);\n }\n }\n\n eatExportStar(node) {\n if (super.eatExportStar(...arguments)) return true;\n\n if (this.isContextual(\"type\") && this.lookahead().type === types$1.star) {\n node.exportKind = \"type\";\n this.next();\n this.next();\n return true;\n }\n\n return false;\n }\n\n maybeParseExportNamespaceSpecifier(node) {\n const pos = this.state.start;\n const hasNamespace = super.maybeParseExportNamespaceSpecifier(node);\n\n if (hasNamespace && node.exportKind === \"type\") {\n this.unexpected(pos);\n }\n\n return hasNamespace;\n }\n\n parseClassId(node, isStatement, optionalId) {\n super.parseClassId(node, isStatement, optionalId);\n\n if (this.isRelational(\"<\")) {\n node.typeParameters = this.flowParseTypeParameterDeclaration();\n }\n }\n\n parseClassMember(classBody, member, state) {\n const pos = this.state.start;\n\n if (this.isContextual(\"declare\")) {\n if (this.parseClassMemberFromModifier(classBody, member)) {\n return;\n }\n\n member.declare = true;\n }\n\n super.parseClassMember(classBody, member, state);\n\n if (member.declare) {\n if (member.type !== \"ClassProperty\" && member.type !== \"ClassPrivateProperty\" && member.type !== \"PropertyDefinition\") {\n this.raise(pos, FlowErrors.DeclareClassElement);\n } else if (member.value) {\n this.raise(member.value.start, FlowErrors.DeclareClassFieldInitializer);\n }\n }\n }\n\n isIterator(word) {\n return word === \"iterator\" || word === \"asyncIterator\";\n }\n\n readIterator() {\n const word = super.readWord1();\n const fullWord = \"@@\" + word;\n\n if (!this.isIterator(word) || !this.state.inType) {\n this.raise(this.state.pos, ErrorMessages.InvalidIdentifier, fullWord);\n }\n\n this.finishToken(types$1.name, fullWord);\n }\n\n getTokenFromCode(code) {\n const next = this.input.charCodeAt(this.state.pos + 1);\n\n if (code === 123 && next === 124) {\n return this.finishOp(types$1.braceBarL, 2);\n } else if (this.state.inType && (code === 62 || code === 60)) {\n return this.finishOp(types$1.relational, 1);\n } else if (this.state.inType && code === 63) {\n if (next === 46) {\n return this.finishOp(types$1.questionDot, 2);\n }\n\n return this.finishOp(types$1.question, 1);\n } else if (isIteratorStart(code, next)) {\n this.state.pos += 2;\n return this.readIterator();\n } else {\n return super.getTokenFromCode(code);\n }\n }\n\n isAssignable(node, isBinding) {\n switch (node.type) {\n case \"Identifier\":\n case \"ObjectPattern\":\n case \"ArrayPattern\":\n case \"AssignmentPattern\":\n return true;\n\n case \"ObjectExpression\":\n {\n const last = node.properties.length - 1;\n return node.properties.every((prop, i) => {\n return prop.type !== \"ObjectMethod\" && (i === last || prop.type === \"SpreadElement\") && this.isAssignable(prop);\n });\n }\n\n case \"ObjectProperty\":\n return this.isAssignable(node.value);\n\n case \"SpreadElement\":\n return this.isAssignable(node.argument);\n\n case \"ArrayExpression\":\n return node.elements.every(element => this.isAssignable(element));\n\n case \"AssignmentExpression\":\n return node.operator === \"=\";\n\n case \"ParenthesizedExpression\":\n case \"TypeCastExpression\":\n return this.isAssignable(node.expression);\n\n case \"MemberExpression\":\n case \"OptionalMemberExpression\":\n return !isBinding;\n\n default:\n return false;\n }\n }\n\n toAssignable(node, isLHS = false) {\n if (node.type === \"TypeCastExpression\") {\n return super.toAssignable(this.typeCastToParameter(node), isLHS);\n } else {\n return super.toAssignable(node, isLHS);\n }\n }\n\n toAssignableList(exprList, trailingCommaPos, isLHS) {\n for (let i = 0; i < exprList.length; i++) {\n const expr = exprList[i];\n\n if ((expr == null ? void 0 : expr.type) === \"TypeCastExpression\") {\n exprList[i] = this.typeCastToParameter(expr);\n }\n }\n\n return super.toAssignableList(exprList, trailingCommaPos, isLHS);\n }\n\n toReferencedList(exprList, isParenthesizedExpr) {\n for (let i = 0; i < exprList.length; i++) {\n var _expr$extra;\n\n const expr = exprList[i];\n\n if (expr && expr.type === \"TypeCastExpression\" && !((_expr$extra = expr.extra) != null && _expr$extra.parenthesized) && (exprList.length > 1 || !isParenthesizedExpr)) {\n this.raise(expr.typeAnnotation.start, FlowErrors.TypeCastInPattern);\n }\n }\n\n return exprList;\n }\n\n parseArrayLike(close, canBePattern, isTuple, refExpressionErrors) {\n const node = super.parseArrayLike(close, canBePattern, isTuple, refExpressionErrors);\n\n if (canBePattern && !this.state.maybeInArrowParameters) {\n this.toReferencedList(node.elements);\n }\n\n return node;\n }\n\n checkLVal(expr, ...args) {\n if (expr.type !== \"TypeCastExpression\") {\n return super.checkLVal(expr, ...args);\n }\n }\n\n parseClassProperty(node) {\n if (this.match(types$1.colon)) {\n node.typeAnnotation = this.flowParseTypeAnnotation();\n }\n\n return super.parseClassProperty(node);\n }\n\n parseClassPrivateProperty(node) {\n if (this.match(types$1.colon)) {\n node.typeAnnotation = this.flowParseTypeAnnotation();\n }\n\n return super.parseClassPrivateProperty(node);\n }\n\n isClassMethod() {\n return this.isRelational(\"<\") || super.isClassMethod();\n }\n\n isClassProperty() {\n return this.match(types$1.colon) || super.isClassProperty();\n }\n\n isNonstaticConstructor(method) {\n return !this.match(types$1.colon) && super.isNonstaticConstructor(method);\n }\n\n pushClassMethod(classBody, method, isGenerator, isAsync, isConstructor, allowsDirectSuper) {\n if (method.variance) {\n this.unexpected(method.variance.start);\n }\n\n delete method.variance;\n\n if (this.isRelational(\"<\")) {\n method.typeParameters = this.flowParseTypeParameterDeclaration();\n }\n\n super.pushClassMethod(classBody, method, isGenerator, isAsync, isConstructor, allowsDirectSuper);\n\n if (method.params && isConstructor) {\n const params = method.params;\n\n if (params.length > 0 && this.isThisParam(params[0])) {\n this.raise(method.start, FlowErrors.ThisParamBannedInConstructor);\n }\n } else if (method.type === \"MethodDefinition\" && isConstructor && method.value.params) {\n const params = method.value.params;\n\n if (params.length > 0 && this.isThisParam(params[0])) {\n this.raise(method.start, FlowErrors.ThisParamBannedInConstructor);\n }\n }\n }\n\n pushClassPrivateMethod(classBody, method, isGenerator, isAsync) {\n if (method.variance) {\n this.unexpected(method.variance.start);\n }\n\n delete method.variance;\n\n if (this.isRelational(\"<\")) {\n method.typeParameters = this.flowParseTypeParameterDeclaration();\n }\n\n super.pushClassPrivateMethod(classBody, method, isGenerator, isAsync);\n }\n\n parseClassSuper(node) {\n super.parseClassSuper(node);\n\n if (node.superClass && this.isRelational(\"<\")) {\n node.superTypeParameters = this.flowParseTypeParameterInstantiation();\n }\n\n if (this.isContextual(\"implements\")) {\n this.next();\n const implemented = node.implements = [];\n\n do {\n const node = this.startNode();\n node.id = this.flowParseRestrictedIdentifier(true);\n\n if (this.isRelational(\"<\")) {\n node.typeParameters = this.flowParseTypeParameterInstantiation();\n } else {\n node.typeParameters = null;\n }\n\n implemented.push(this.finishNode(node, \"ClassImplements\"));\n } while (this.eat(types$1.comma));\n }\n }\n\n checkGetterSetterParams(method) {\n super.checkGetterSetterParams(method);\n const params = this.getObjectOrClassMethodParams(method);\n\n if (params.length > 0) {\n const param = params[0];\n\n if (this.isThisParam(param) && method.kind === \"get\") {\n this.raise(param.start, FlowErrors.GetterMayNotHaveThisParam);\n } else if (this.isThisParam(param)) {\n this.raise(param.start, FlowErrors.SetterMayNotHaveThisParam);\n }\n }\n }\n\n parsePropertyName(node, isPrivateNameAllowed) {\n const variance = this.flowParseVariance();\n const key = super.parsePropertyName(node, isPrivateNameAllowed);\n node.variance = variance;\n return key;\n }\n\n parseObjPropValue(prop, startPos, startLoc, isGenerator, isAsync, isPattern, isAccessor, refExpressionErrors) {\n if (prop.variance) {\n this.unexpected(prop.variance.start);\n }\n\n delete prop.variance;\n let typeParameters;\n\n if (this.isRelational(\"<\") && !isAccessor) {\n typeParameters = this.flowParseTypeParameterDeclaration();\n if (!this.match(types$1.parenL)) this.unexpected();\n }\n\n super.parseObjPropValue(prop, startPos, startLoc, isGenerator, isAsync, isPattern, isAccessor, refExpressionErrors);\n\n if (typeParameters) {\n (prop.value || prop).typeParameters = typeParameters;\n }\n }\n\n parseAssignableListItemTypes(param) {\n if (this.eat(types$1.question)) {\n if (param.type !== \"Identifier\") {\n this.raise(param.start, FlowErrors.OptionalBindingPattern);\n }\n\n if (this.isThisParam(param)) {\n this.raise(param.start, FlowErrors.ThisParamMayNotBeOptional);\n }\n\n param.optional = true;\n }\n\n if (this.match(types$1.colon)) {\n param.typeAnnotation = this.flowParseTypeAnnotation();\n } else if (this.isThisParam(param)) {\n this.raise(param.start, FlowErrors.ThisParamAnnotationRequired);\n }\n\n if (this.match(types$1.eq) && this.isThisParam(param)) {\n this.raise(param.start, FlowErrors.ThisParamNoDefault);\n }\n\n this.resetEndLocation(param);\n return param;\n }\n\n parseMaybeDefault(startPos, startLoc, left) {\n const node = super.parseMaybeDefault(startPos, startLoc, left);\n\n if (node.type === \"AssignmentPattern\" && node.typeAnnotation && node.right.start < node.typeAnnotation.start) {\n this.raise(node.typeAnnotation.start, FlowErrors.TypeBeforeInitializer);\n }\n\n return node;\n }\n\n shouldParseDefaultImport(node) {\n if (!hasTypeImportKind(node)) {\n return super.shouldParseDefaultImport(node);\n }\n\n return isMaybeDefaultImport(this.state);\n }\n\n parseImportSpecifierLocal(node, specifier, type, contextDescription) {\n specifier.local = hasTypeImportKind(node) ? this.flowParseRestrictedIdentifier(true, true) : this.parseIdentifier();\n this.checkLVal(specifier.local, contextDescription, BIND_LEXICAL);\n node.specifiers.push(this.finishNode(specifier, type));\n }\n\n maybeParseDefaultImportSpecifier(node) {\n node.importKind = \"value\";\n let kind = null;\n\n if (this.match(types$1._typeof)) {\n kind = \"typeof\";\n } else if (this.isContextual(\"type\")) {\n kind = \"type\";\n }\n\n if (kind) {\n const lh = this.lookahead();\n\n if (kind === \"type\" && lh.type === types$1.star) {\n this.unexpected(lh.start);\n }\n\n if (isMaybeDefaultImport(lh) || lh.type === types$1.braceL || lh.type === types$1.star) {\n this.next();\n node.importKind = kind;\n }\n }\n\n return super.maybeParseDefaultImportSpecifier(node);\n }\n\n parseImportSpecifier(node) {\n const specifier = this.startNode();\n const firstIdentIsString = this.match(types$1.string);\n const firstIdent = this.parseModuleExportName();\n let specifierTypeKind = null;\n\n if (firstIdent.type === \"Identifier\") {\n if (firstIdent.name === \"type\") {\n specifierTypeKind = \"type\";\n } else if (firstIdent.name === \"typeof\") {\n specifierTypeKind = \"typeof\";\n }\n }\n\n let isBinding = false;\n\n if (this.isContextual(\"as\") && !this.isLookaheadContextual(\"as\")) {\n const as_ident = this.parseIdentifier(true);\n\n if (specifierTypeKind !== null && !this.match(types$1.name) && !this.state.type.keyword) {\n specifier.imported = as_ident;\n specifier.importKind = specifierTypeKind;\n specifier.local = as_ident.__clone();\n } else {\n specifier.imported = firstIdent;\n specifier.importKind = null;\n specifier.local = this.parseIdentifier();\n }\n } else if (specifierTypeKind !== null && (this.match(types$1.name) || this.state.type.keyword)) {\n specifier.imported = this.parseIdentifier(true);\n specifier.importKind = specifierTypeKind;\n\n if (this.eatContextual(\"as\")) {\n specifier.local = this.parseIdentifier();\n } else {\n isBinding = true;\n specifier.local = specifier.imported.__clone();\n }\n } else {\n if (firstIdentIsString) {\n throw this.raise(specifier.start, ErrorMessages.ImportBindingIsString, firstIdent.value);\n }\n\n isBinding = true;\n specifier.imported = firstIdent;\n specifier.importKind = null;\n specifier.local = specifier.imported.__clone();\n }\n\n const nodeIsTypeImport = hasTypeImportKind(node);\n const specifierIsTypeImport = hasTypeImportKind(specifier);\n\n if (nodeIsTypeImport && specifierIsTypeImport) {\n this.raise(specifier.start, FlowErrors.ImportTypeShorthandOnlyInPureImport);\n }\n\n if (nodeIsTypeImport || specifierIsTypeImport) {\n this.checkReservedType(specifier.local.name, specifier.local.start, true);\n }\n\n if (isBinding && !nodeIsTypeImport && !specifierIsTypeImport) {\n this.checkReservedWord(specifier.local.name, specifier.start, true, true);\n }\n\n this.checkLVal(specifier.local, \"import specifier\", BIND_LEXICAL);\n node.specifiers.push(this.finishNode(specifier, \"ImportSpecifier\"));\n }\n\n parseBindingAtom() {\n switch (this.state.type) {\n case types$1._this:\n return this.parseIdentifier(true);\n\n default:\n return super.parseBindingAtom();\n }\n }\n\n parseFunctionParams(node, allowModifiers) {\n const kind = node.kind;\n\n if (kind !== \"get\" && kind !== \"set\" && this.isRelational(\"<\")) {\n node.typeParameters = this.flowParseTypeParameterDeclaration();\n }\n\n super.parseFunctionParams(node, allowModifiers);\n }\n\n parseVarId(decl, kind) {\n super.parseVarId(decl, kind);\n\n if (this.match(types$1.colon)) {\n decl.id.typeAnnotation = this.flowParseTypeAnnotation();\n this.resetEndLocation(decl.id);\n }\n }\n\n parseAsyncArrowFromCallExpression(node, call) {\n if (this.match(types$1.colon)) {\n const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n this.state.noAnonFunctionType = true;\n node.returnType = this.flowParseTypeAnnotation();\n this.state.noAnonFunctionType = oldNoAnonFunctionType;\n }\n\n return super.parseAsyncArrowFromCallExpression(node, call);\n }\n\n shouldParseAsyncArrow() {\n return this.match(types$1.colon) || super.shouldParseAsyncArrow();\n }\n\n parseMaybeAssign(refExpressionErrors, afterLeftParse) {\n var _jsx;\n\n let state = null;\n let jsx;\n\n if (this.hasPlugin(\"jsx\") && (this.match(types$1.jsxTagStart) || this.isRelational(\"<\"))) {\n state = this.state.clone();\n jsx = this.tryParse(() => super.parseMaybeAssign(refExpressionErrors, afterLeftParse), state);\n if (!jsx.error) return jsx.node;\n const {\n context\n } = this.state;\n const curContext = context[context.length - 1];\n\n if (curContext === types.j_oTag) {\n context.length -= 2;\n } else if (curContext === types.j_expr) {\n context.length -= 1;\n }\n }\n\n if ((_jsx = jsx) != null && _jsx.error || this.isRelational(\"<\")) {\n var _jsx2, _jsx3;\n\n state = state || this.state.clone();\n let typeParameters;\n const arrow = this.tryParse(abort => {\n var _arrowExpression$extr;\n\n typeParameters = this.flowParseTypeParameterDeclaration();\n const arrowExpression = this.forwardNoArrowParamsConversionAt(typeParameters, () => {\n const result = super.parseMaybeAssign(refExpressionErrors, afterLeftParse);\n this.resetStartLocationFromNode(result, typeParameters);\n return result;\n });\n\n if (arrowExpression.type !== \"ArrowFunctionExpression\" && (_arrowExpression$extr = arrowExpression.extra) != null && _arrowExpression$extr.parenthesized) {\n abort();\n }\n\n const expr = this.maybeUnwrapTypeCastExpression(arrowExpression);\n expr.typeParameters = typeParameters;\n this.resetStartLocationFromNode(expr, typeParameters);\n return arrowExpression;\n }, state);\n let arrowExpression = null;\n\n if (arrow.node && this.maybeUnwrapTypeCastExpression(arrow.node).type === \"ArrowFunctionExpression\") {\n if (!arrow.error && !arrow.aborted) {\n if (arrow.node.async) {\n this.raise(typeParameters.start, FlowErrors.UnexpectedTypeParameterBeforeAsyncArrowFunction);\n }\n\n return arrow.node;\n }\n\n arrowExpression = arrow.node;\n }\n\n if ((_jsx2 = jsx) != null && _jsx2.node) {\n this.state = jsx.failState;\n return jsx.node;\n }\n\n if (arrowExpression) {\n this.state = arrow.failState;\n return arrowExpression;\n }\n\n if ((_jsx3 = jsx) != null && _jsx3.thrown) throw jsx.error;\n if (arrow.thrown) throw arrow.error;\n throw this.raise(typeParameters.start, FlowErrors.UnexpectedTokenAfterTypeParameter);\n }\n\n return super.parseMaybeAssign(refExpressionErrors, afterLeftParse);\n }\n\n parseArrow(node) {\n if (this.match(types$1.colon)) {\n const result = this.tryParse(() => {\n const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n this.state.noAnonFunctionType = true;\n const typeNode = this.startNode();\n [typeNode.typeAnnotation, node.predicate] = this.flowParseTypeAndPredicateInitialiser();\n this.state.noAnonFunctionType = oldNoAnonFunctionType;\n if (this.canInsertSemicolon()) this.unexpected();\n if (!this.match(types$1.arrow)) this.unexpected();\n return typeNode;\n });\n if (result.thrown) return null;\n if (result.error) this.state = result.failState;\n node.returnType = result.node.typeAnnotation ? this.finishNode(result.node, \"TypeAnnotation\") : null;\n }\n\n return super.parseArrow(node);\n }\n\n shouldParseArrow() {\n return this.match(types$1.colon) || super.shouldParseArrow();\n }\n\n setArrowFunctionParameters(node, params) {\n if (this.state.noArrowParamsConversionAt.indexOf(node.start) !== -1) {\n node.params = params;\n } else {\n super.setArrowFunctionParameters(node, params);\n }\n }\n\n checkParams(node, allowDuplicates, isArrowFunction) {\n if (isArrowFunction && this.state.noArrowParamsConversionAt.indexOf(node.start) !== -1) {\n return;\n }\n\n for (let i = 0; i < node.params.length; i++) {\n if (this.isThisParam(node.params[i]) && i > 0) {\n this.raise(node.params[i].start, FlowErrors.ThisParamMustBeFirst);\n }\n }\n\n return super.checkParams(...arguments);\n }\n\n parseParenAndDistinguishExpression(canBeArrow) {\n return super.parseParenAndDistinguishExpression(canBeArrow && this.state.noArrowAt.indexOf(this.state.start) === -1);\n }\n\n parseSubscripts(base, startPos, startLoc, noCalls) {\n if (base.type === \"Identifier\" && base.name === \"async\" && this.state.noArrowAt.indexOf(startPos) !== -1) {\n this.next();\n const node = this.startNodeAt(startPos, startLoc);\n node.callee = base;\n node.arguments = this.parseCallExpressionArguments(types$1.parenR, false);\n base = this.finishNode(node, \"CallExpression\");\n } else if (base.type === \"Identifier\" && base.name === \"async\" && this.isRelational(\"<\")) {\n const state = this.state.clone();\n const arrow = this.tryParse(abort => this.parseAsyncArrowWithTypeParameters(startPos, startLoc) || abort(), state);\n if (!arrow.error && !arrow.aborted) return arrow.node;\n const result = this.tryParse(() => super.parseSubscripts(base, startPos, startLoc, noCalls), state);\n if (result.node && !result.error) return result.node;\n\n if (arrow.node) {\n this.state = arrow.failState;\n return arrow.node;\n }\n\n if (result.node) {\n this.state = result.failState;\n return result.node;\n }\n\n throw arrow.error || result.error;\n }\n\n return super.parseSubscripts(base, startPos, startLoc, noCalls);\n }\n\n parseSubscript(base, startPos, startLoc, noCalls, subscriptState) {\n if (this.match(types$1.questionDot) && this.isLookaheadToken_lt()) {\n subscriptState.optionalChainMember = true;\n\n if (noCalls) {\n subscriptState.stop = true;\n return base;\n }\n\n this.next();\n const node = this.startNodeAt(startPos, startLoc);\n node.callee = base;\n node.typeArguments = this.flowParseTypeParameterInstantiation();\n this.expect(types$1.parenL);\n node.arguments = this.parseCallExpressionArguments(types$1.parenR, false);\n node.optional = true;\n return this.finishCallExpression(node, true);\n } else if (!noCalls && this.shouldParseTypes() && this.isRelational(\"<\")) {\n const node = this.startNodeAt(startPos, startLoc);\n node.callee = base;\n const result = this.tryParse(() => {\n node.typeArguments = this.flowParseTypeParameterInstantiationCallOrNew();\n this.expect(types$1.parenL);\n node.arguments = this.parseCallExpressionArguments(types$1.parenR, false);\n if (subscriptState.optionalChainMember) node.optional = false;\n return this.finishCallExpression(node, subscriptState.optionalChainMember);\n });\n\n if (result.node) {\n if (result.error) this.state = result.failState;\n return result.node;\n }\n }\n\n return super.parseSubscript(base, startPos, startLoc, noCalls, subscriptState);\n }\n\n parseNewArguments(node) {\n let targs = null;\n\n if (this.shouldParseTypes() && this.isRelational(\"<\")) {\n targs = this.tryParse(() => this.flowParseTypeParameterInstantiationCallOrNew()).node;\n }\n\n node.typeArguments = targs;\n super.parseNewArguments(node);\n }\n\n parseAsyncArrowWithTypeParameters(startPos, startLoc) {\n const node = this.startNodeAt(startPos, startLoc);\n this.parseFunctionParams(node);\n if (!this.parseArrow(node)) return;\n return this.parseArrowExpression(node, undefined, true);\n }\n\n readToken_mult_modulo(code) {\n const next = this.input.charCodeAt(this.state.pos + 1);\n\n if (code === 42 && next === 47 && this.state.hasFlowComment) {\n this.state.hasFlowComment = false;\n this.state.pos += 2;\n this.nextToken();\n return;\n }\n\n super.readToken_mult_modulo(code);\n }\n\n readToken_pipe_amp(code) {\n const next = this.input.charCodeAt(this.state.pos + 1);\n\n if (code === 124 && next === 125) {\n this.finishOp(types$1.braceBarR, 2);\n return;\n }\n\n super.readToken_pipe_amp(code);\n }\n\n parseTopLevel(file, program) {\n const fileNode = super.parseTopLevel(file, program);\n\n if (this.state.hasFlowComment) {\n this.raise(this.state.pos, FlowErrors.UnterminatedFlowComment);\n }\n\n return fileNode;\n }\n\n skipBlockComment() {\n if (this.hasPlugin(\"flowComments\") && this.skipFlowComment()) {\n if (this.state.hasFlowComment) {\n this.unexpected(null, FlowErrors.NestedFlowComment);\n }\n\n this.hasFlowCommentCompletion();\n this.state.pos += this.skipFlowComment();\n this.state.hasFlowComment = true;\n return;\n }\n\n if (this.state.hasFlowComment) {\n const end = this.input.indexOf(\"*-/\", this.state.pos += 2);\n\n if (end === -1) {\n throw this.raise(this.state.pos - 2, ErrorMessages.UnterminatedComment);\n }\n\n this.state.pos = end + 3;\n return;\n }\n\n super.skipBlockComment();\n }\n\n skipFlowComment() {\n const {\n pos\n } = this.state;\n let shiftToFirstNonWhiteSpace = 2;\n\n while ([32, 9].includes(this.input.charCodeAt(pos + shiftToFirstNonWhiteSpace))) {\n shiftToFirstNonWhiteSpace++;\n }\n\n const ch2 = this.input.charCodeAt(shiftToFirstNonWhiteSpace + pos);\n const ch3 = this.input.charCodeAt(shiftToFirstNonWhiteSpace + pos + 1);\n\n if (ch2 === 58 && ch3 === 58) {\n return shiftToFirstNonWhiteSpace + 2;\n }\n\n if (this.input.slice(shiftToFirstNonWhiteSpace + pos, shiftToFirstNonWhiteSpace + pos + 12) === \"flow-include\") {\n return shiftToFirstNonWhiteSpace + 12;\n }\n\n if (ch2 === 58 && ch3 !== 58) {\n return shiftToFirstNonWhiteSpace;\n }\n\n return false;\n }\n\n hasFlowCommentCompletion() {\n const end = this.input.indexOf(\"*/\", this.state.pos);\n\n if (end === -1) {\n throw this.raise(this.state.pos, ErrorMessages.UnterminatedComment);\n }\n }\n\n flowEnumErrorBooleanMemberNotInitialized(pos, {\n enumName,\n memberName\n }) {\n this.raise(pos, FlowErrors.EnumBooleanMemberNotInitialized, memberName, enumName);\n }\n\n flowEnumErrorInvalidMemberName(pos, {\n enumName,\n memberName\n }) {\n const suggestion = memberName[0].toUpperCase() + memberName.slice(1);\n this.raise(pos, FlowErrors.EnumInvalidMemberName, memberName, suggestion, enumName);\n }\n\n flowEnumErrorDuplicateMemberName(pos, {\n enumName,\n memberName\n }) {\n this.raise(pos, FlowErrors.EnumDuplicateMemberName, memberName, enumName);\n }\n\n flowEnumErrorInconsistentMemberValues(pos, {\n enumName\n }) {\n this.raise(pos, FlowErrors.EnumInconsistentMemberValues, enumName);\n }\n\n flowEnumErrorInvalidExplicitType(pos, {\n enumName,\n suppliedType\n }) {\n return this.raise(pos, suppliedType === null ? FlowErrors.EnumInvalidExplicitTypeUnknownSupplied : FlowErrors.EnumInvalidExplicitType, enumName, suppliedType);\n }\n\n flowEnumErrorInvalidMemberInitializer(pos, {\n enumName,\n explicitType,\n memberName\n }) {\n let message = null;\n\n switch (explicitType) {\n case \"boolean\":\n case \"number\":\n case \"string\":\n message = FlowErrors.EnumInvalidMemberInitializerPrimaryType;\n break;\n\n case \"symbol\":\n message = FlowErrors.EnumInvalidMemberInitializerSymbolType;\n break;\n\n default:\n message = FlowErrors.EnumInvalidMemberInitializerUnknownType;\n }\n\n return this.raise(pos, message, enumName, memberName, explicitType);\n }\n\n flowEnumErrorNumberMemberNotInitialized(pos, {\n enumName,\n memberName\n }) {\n this.raise(pos, FlowErrors.EnumNumberMemberNotInitialized, enumName, memberName);\n }\n\n flowEnumErrorStringMemberInconsistentlyInitailized(pos, {\n enumName\n }) {\n this.raise(pos, FlowErrors.EnumStringMemberInconsistentlyInitailized, enumName);\n }\n\n flowEnumMemberInit() {\n const startPos = this.state.start;\n\n const endOfInit = () => this.match(types$1.comma) || this.match(types$1.braceR);\n\n switch (this.state.type) {\n case types$1.num:\n {\n const literal = this.parseNumericLiteral(this.state.value);\n\n if (endOfInit()) {\n return {\n type: \"number\",\n pos: literal.start,\n value: literal\n };\n }\n\n return {\n type: \"invalid\",\n pos: startPos\n };\n }\n\n case types$1.string:\n {\n const literal = this.parseStringLiteral(this.state.value);\n\n if (endOfInit()) {\n return {\n type: \"string\",\n pos: literal.start,\n value: literal\n };\n }\n\n return {\n type: \"invalid\",\n pos: startPos\n };\n }\n\n case types$1._true:\n case types$1._false:\n {\n const literal = this.parseBooleanLiteral(this.match(types$1._true));\n\n if (endOfInit()) {\n return {\n type: \"boolean\",\n pos: literal.start,\n value: literal\n };\n }\n\n return {\n type: \"invalid\",\n pos: startPos\n };\n }\n\n default:\n return {\n type: \"invalid\",\n pos: startPos\n };\n }\n }\n\n flowEnumMemberRaw() {\n const pos = this.state.start;\n const id = this.parseIdentifier(true);\n const init = this.eat(types$1.eq) ? this.flowEnumMemberInit() : {\n type: \"none\",\n pos\n };\n return {\n id,\n init\n };\n }\n\n flowEnumCheckExplicitTypeMismatch(pos, context, expectedType) {\n const {\n explicitType\n } = context;\n\n if (explicitType === null) {\n return;\n }\n\n if (explicitType !== expectedType) {\n this.flowEnumErrorInvalidMemberInitializer(pos, context);\n }\n }\n\n flowEnumMembers({\n enumName,\n explicitType\n }) {\n const seenNames = new Set();\n const members = {\n booleanMembers: [],\n numberMembers: [],\n stringMembers: [],\n defaultedMembers: []\n };\n let hasUnknownMembers = false;\n\n while (!this.match(types$1.braceR)) {\n if (this.eat(types$1.ellipsis)) {\n hasUnknownMembers = true;\n break;\n }\n\n const memberNode = this.startNode();\n const {\n id,\n init\n } = this.flowEnumMemberRaw();\n const memberName = id.name;\n\n if (memberName === \"\") {\n continue;\n }\n\n if (/^[a-z]/.test(memberName)) {\n this.flowEnumErrorInvalidMemberName(id.start, {\n enumName,\n memberName\n });\n }\n\n if (seenNames.has(memberName)) {\n this.flowEnumErrorDuplicateMemberName(id.start, {\n enumName,\n memberName\n });\n }\n\n seenNames.add(memberName);\n const context = {\n enumName,\n explicitType,\n memberName\n };\n memberNode.id = id;\n\n switch (init.type) {\n case \"boolean\":\n {\n this.flowEnumCheckExplicitTypeMismatch(init.pos, context, \"boolean\");\n memberNode.init = init.value;\n members.booleanMembers.push(this.finishNode(memberNode, \"EnumBooleanMember\"));\n break;\n }\n\n case \"number\":\n {\n this.flowEnumCheckExplicitTypeMismatch(init.pos, context, \"number\");\n memberNode.init = init.value;\n members.numberMembers.push(this.finishNode(memberNode, \"EnumNumberMember\"));\n break;\n }\n\n case \"string\":\n {\n this.flowEnumCheckExplicitTypeMismatch(init.pos, context, \"string\");\n memberNode.init = init.value;\n members.stringMembers.push(this.finishNode(memberNode, \"EnumStringMember\"));\n break;\n }\n\n case \"invalid\":\n {\n throw this.flowEnumErrorInvalidMemberInitializer(init.pos, context);\n }\n\n case \"none\":\n {\n switch (explicitType) {\n case \"boolean\":\n this.flowEnumErrorBooleanMemberNotInitialized(init.pos, context);\n break;\n\n case \"number\":\n this.flowEnumErrorNumberMemberNotInitialized(init.pos, context);\n break;\n\n default:\n members.defaultedMembers.push(this.finishNode(memberNode, \"EnumDefaultedMember\"));\n }\n }\n }\n\n if (!this.match(types$1.braceR)) {\n this.expect(types$1.comma);\n }\n }\n\n return {\n members,\n hasUnknownMembers\n };\n }\n\n flowEnumStringMembers(initializedMembers, defaultedMembers, {\n enumName\n }) {\n if (initializedMembers.length === 0) {\n return defaultedMembers;\n } else if (defaultedMembers.length === 0) {\n return initializedMembers;\n } else if (defaultedMembers.length > initializedMembers.length) {\n for (const member of initializedMembers) {\n this.flowEnumErrorStringMemberInconsistentlyInitailized(member.start, {\n enumName\n });\n }\n\n return defaultedMembers;\n } else {\n for (const member of defaultedMembers) {\n this.flowEnumErrorStringMemberInconsistentlyInitailized(member.start, {\n enumName\n });\n }\n\n return initializedMembers;\n }\n }\n\n flowEnumParseExplicitType({\n enumName\n }) {\n if (this.eatContextual(\"of\")) {\n if (!this.match(types$1.name)) {\n throw this.flowEnumErrorInvalidExplicitType(this.state.start, {\n enumName,\n suppliedType: null\n });\n }\n\n const {\n value\n } = this.state;\n this.next();\n\n if (value !== \"boolean\" && value !== \"number\" && value !== \"string\" && value !== \"symbol\") {\n this.flowEnumErrorInvalidExplicitType(this.state.start, {\n enumName,\n suppliedType: value\n });\n }\n\n return value;\n }\n\n return null;\n }\n\n flowEnumBody(node, {\n enumName,\n nameLoc\n }) {\n const explicitType = this.flowEnumParseExplicitType({\n enumName\n });\n this.expect(types$1.braceL);\n const {\n members,\n hasUnknownMembers\n } = this.flowEnumMembers({\n enumName,\n explicitType\n });\n node.hasUnknownMembers = hasUnknownMembers;\n\n switch (explicitType) {\n case \"boolean\":\n node.explicitType = true;\n node.members = members.booleanMembers;\n this.expect(types$1.braceR);\n return this.finishNode(node, \"EnumBooleanBody\");\n\n case \"number\":\n node.explicitType = true;\n node.members = members.numberMembers;\n this.expect(types$1.braceR);\n return this.finishNode(node, \"EnumNumberBody\");\n\n case \"string\":\n node.explicitType = true;\n node.members = this.flowEnumStringMembers(members.stringMembers, members.defaultedMembers, {\n enumName\n });\n this.expect(types$1.braceR);\n return this.finishNode(node, \"EnumStringBody\");\n\n case \"symbol\":\n node.members = members.defaultedMembers;\n this.expect(types$1.braceR);\n return this.finishNode(node, \"EnumSymbolBody\");\n\n default:\n {\n const empty = () => {\n node.members = [];\n this.expect(types$1.braceR);\n return this.finishNode(node, \"EnumStringBody\");\n };\n\n node.explicitType = false;\n const boolsLen = members.booleanMembers.length;\n const numsLen = members.numberMembers.length;\n const strsLen = members.stringMembers.length;\n const defaultedLen = members.defaultedMembers.length;\n\n if (!boolsLen && !numsLen && !strsLen && !defaultedLen) {\n return empty();\n } else if (!boolsLen && !numsLen) {\n node.members = this.flowEnumStringMembers(members.stringMembers, members.defaultedMembers, {\n enumName\n });\n this.expect(types$1.braceR);\n return this.finishNode(node, \"EnumStringBody\");\n } else if (!numsLen && !strsLen && boolsLen >= defaultedLen) {\n for (const member of members.defaultedMembers) {\n this.flowEnumErrorBooleanMemberNotInitialized(member.start, {\n enumName,\n memberName: member.id.name\n });\n }\n\n node.members = members.booleanMembers;\n this.expect(types$1.braceR);\n return this.finishNode(node, \"EnumBooleanBody\");\n } else if (!boolsLen && !strsLen && numsLen >= defaultedLen) {\n for (const member of members.defaultedMembers) {\n this.flowEnumErrorNumberMemberNotInitialized(member.start, {\n enumName,\n memberName: member.id.name\n });\n }\n\n node.members = members.numberMembers;\n this.expect(types$1.braceR);\n return this.finishNode(node, \"EnumNumberBody\");\n } else {\n this.flowEnumErrorInconsistentMemberValues(nameLoc, {\n enumName\n });\n return empty();\n }\n }\n }\n }\n\n flowParseEnumDeclaration(node) {\n const id = this.parseIdentifier();\n node.id = id;\n node.body = this.flowEnumBody(this.startNode(), {\n enumName: id.name,\n nameLoc: id.start\n });\n return this.finishNode(node, \"EnumDeclaration\");\n }\n\n isLookaheadToken_lt() {\n const next = this.nextTokenStart();\n\n if (this.input.charCodeAt(next) === 60) {\n const afterNext = this.input.charCodeAt(next + 1);\n return afterNext !== 60 && afterNext !== 61;\n }\n\n return false;\n }\n\n maybeUnwrapTypeCastExpression(node) {\n return node.type === \"TypeCastExpression\" ? node.expression : node;\n }\n\n});\n\nconst entities = {\n quot: \"\\u0022\",\n amp: \"&\",\n apos: \"\\u0027\",\n lt: \"<\",\n gt: \">\",\n nbsp: \"\\u00A0\",\n iexcl: \"\\u00A1\",\n cent: \"\\u00A2\",\n pound: \"\\u00A3\",\n curren: \"\\u00A4\",\n yen: \"\\u00A5\",\n brvbar: \"\\u00A6\",\n sect: \"\\u00A7\",\n uml: \"\\u00A8\",\n copy: \"\\u00A9\",\n ordf: \"\\u00AA\",\n laquo: \"\\u00AB\",\n not: \"\\u00AC\",\n shy: \"\\u00AD\",\n reg: \"\\u00AE\",\n macr: \"\\u00AF\",\n deg: \"\\u00B0\",\n plusmn: \"\\u00B1\",\n sup2: \"\\u00B2\",\n sup3: \"\\u00B3\",\n acute: \"\\u00B4\",\n micro: \"\\u00B5\",\n para: \"\\u00B6\",\n middot: \"\\u00B7\",\n cedil: \"\\u00B8\",\n sup1: \"\\u00B9\",\n ordm: \"\\u00BA\",\n raquo: \"\\u00BB\",\n frac14: \"\\u00BC\",\n frac12: \"\\u00BD\",\n frac34: \"\\u00BE\",\n iquest: \"\\u00BF\",\n Agrave: \"\\u00C0\",\n Aacute: \"\\u00C1\",\n Acirc: \"\\u00C2\",\n Atilde: \"\\u00C3\",\n Auml: \"\\u00C4\",\n Aring: \"\\u00C5\",\n AElig: \"\\u00C6\",\n Ccedil: \"\\u00C7\",\n Egrave: \"\\u00C8\",\n Eacute: \"\\u00C9\",\n Ecirc: \"\\u00CA\",\n Euml: \"\\u00CB\",\n Igrave: \"\\u00CC\",\n Iacute: \"\\u00CD\",\n Icirc: \"\\u00CE\",\n Iuml: \"\\u00CF\",\n ETH: \"\\u00D0\",\n Ntilde: \"\\u00D1\",\n Ograve: \"\\u00D2\",\n Oacute: \"\\u00D3\",\n Ocirc: \"\\u00D4\",\n Otilde: \"\\u00D5\",\n Ouml: \"\\u00D6\",\n times: \"\\u00D7\",\n Oslash: \"\\u00D8\",\n Ugrave: \"\\u00D9\",\n Uacute: \"\\u00DA\",\n Ucirc: \"\\u00DB\",\n Uuml: \"\\u00DC\",\n Yacute: \"\\u00DD\",\n THORN: \"\\u00DE\",\n szlig: \"\\u00DF\",\n agrave: \"\\u00E0\",\n aacute: \"\\u00E1\",\n acirc: \"\\u00E2\",\n atilde: \"\\u00E3\",\n auml: \"\\u00E4\",\n aring: \"\\u00E5\",\n aelig: \"\\u00E6\",\n ccedil: \"\\u00E7\",\n egrave: \"\\u00E8\",\n eacute: \"\\u00E9\",\n ecirc: \"\\u00EA\",\n euml: \"\\u00EB\",\n igrave: \"\\u00EC\",\n iacute: \"\\u00ED\",\n icirc: \"\\u00EE\",\n iuml: \"\\u00EF\",\n eth: \"\\u00F0\",\n ntilde: \"\\u00F1\",\n ograve: \"\\u00F2\",\n oacute: \"\\u00F3\",\n ocirc: \"\\u00F4\",\n otilde: \"\\u00F5\",\n ouml: \"\\u00F6\",\n divide: \"\\u00F7\",\n oslash: \"\\u00F8\",\n ugrave: \"\\u00F9\",\n uacute: \"\\u00FA\",\n ucirc: \"\\u00FB\",\n uuml: \"\\u00FC\",\n yacute: \"\\u00FD\",\n thorn: \"\\u00FE\",\n yuml: \"\\u00FF\",\n OElig: \"\\u0152\",\n oelig: \"\\u0153\",\n Scaron: \"\\u0160\",\n scaron: \"\\u0161\",\n Yuml: \"\\u0178\",\n fnof: \"\\u0192\",\n circ: \"\\u02C6\",\n tilde: \"\\u02DC\",\n Alpha: \"\\u0391\",\n Beta: \"\\u0392\",\n Gamma: \"\\u0393\",\n Delta: \"\\u0394\",\n Epsilon: \"\\u0395\",\n Zeta: \"\\u0396\",\n Eta: \"\\u0397\",\n Theta: \"\\u0398\",\n Iota: \"\\u0399\",\n Kappa: \"\\u039A\",\n Lambda: \"\\u039B\",\n Mu: \"\\u039C\",\n Nu: \"\\u039D\",\n Xi: \"\\u039E\",\n Omicron: \"\\u039F\",\n Pi: \"\\u03A0\",\n Rho: \"\\u03A1\",\n Sigma: \"\\u03A3\",\n Tau: \"\\u03A4\",\n Upsilon: \"\\u03A5\",\n Phi: \"\\u03A6\",\n Chi: \"\\u03A7\",\n Psi: \"\\u03A8\",\n Omega: \"\\u03A9\",\n alpha: \"\\u03B1\",\n beta: \"\\u03B2\",\n gamma: \"\\u03B3\",\n delta: \"\\u03B4\",\n epsilon: \"\\u03B5\",\n zeta: \"\\u03B6\",\n eta: \"\\u03B7\",\n theta: \"\\u03B8\",\n iota: \"\\u03B9\",\n kappa: \"\\u03BA\",\n lambda: \"\\u03BB\",\n mu: \"\\u03BC\",\n nu: \"\\u03BD\",\n xi: \"\\u03BE\",\n omicron: \"\\u03BF\",\n pi: \"\\u03C0\",\n rho: \"\\u03C1\",\n sigmaf: \"\\u03C2\",\n sigma: \"\\u03C3\",\n tau: \"\\u03C4\",\n upsilon: \"\\u03C5\",\n phi: \"\\u03C6\",\n chi: \"\\u03C7\",\n psi: \"\\u03C8\",\n omega: \"\\u03C9\",\n thetasym: \"\\u03D1\",\n upsih: \"\\u03D2\",\n piv: \"\\u03D6\",\n ensp: \"\\u2002\",\n emsp: \"\\u2003\",\n thinsp: \"\\u2009\",\n zwnj: \"\\u200C\",\n zwj: \"\\u200D\",\n lrm: \"\\u200E\",\n rlm: \"\\u200F\",\n ndash: \"\\u2013\",\n mdash: \"\\u2014\",\n lsquo: \"\\u2018\",\n rsquo: \"\\u2019\",\n sbquo: \"\\u201A\",\n ldquo: \"\\u201C\",\n rdquo: \"\\u201D\",\n bdquo: \"\\u201E\",\n dagger: \"\\u2020\",\n Dagger: \"\\u2021\",\n bull: \"\\u2022\",\n hellip: \"\\u2026\",\n permil: \"\\u2030\",\n prime: \"\\u2032\",\n Prime: \"\\u2033\",\n lsaquo: \"\\u2039\",\n rsaquo: \"\\u203A\",\n oline: \"\\u203E\",\n frasl: \"\\u2044\",\n euro: \"\\u20AC\",\n image: \"\\u2111\",\n weierp: \"\\u2118\",\n real: \"\\u211C\",\n trade: \"\\u2122\",\n alefsym: \"\\u2135\",\n larr: \"\\u2190\",\n uarr: \"\\u2191\",\n rarr: \"\\u2192\",\n darr: \"\\u2193\",\n harr: \"\\u2194\",\n crarr: \"\\u21B5\",\n lArr: \"\\u21D0\",\n uArr: \"\\u21D1\",\n rArr: \"\\u21D2\",\n dArr: \"\\u21D3\",\n hArr: \"\\u21D4\",\n forall: \"\\u2200\",\n part: \"\\u2202\",\n exist: \"\\u2203\",\n empty: \"\\u2205\",\n nabla: \"\\u2207\",\n isin: \"\\u2208\",\n notin: \"\\u2209\",\n ni: \"\\u220B\",\n prod: \"\\u220F\",\n sum: \"\\u2211\",\n minus: \"\\u2212\",\n lowast: \"\\u2217\",\n radic: \"\\u221A\",\n prop: \"\\u221D\",\n infin: \"\\u221E\",\n ang: \"\\u2220\",\n and: \"\\u2227\",\n or: \"\\u2228\",\n cap: \"\\u2229\",\n cup: \"\\u222A\",\n int: \"\\u222B\",\n there4: \"\\u2234\",\n sim: \"\\u223C\",\n cong: \"\\u2245\",\n asymp: \"\\u2248\",\n ne: \"\\u2260\",\n equiv: \"\\u2261\",\n le: \"\\u2264\",\n ge: \"\\u2265\",\n sub: \"\\u2282\",\n sup: \"\\u2283\",\n nsub: \"\\u2284\",\n sube: \"\\u2286\",\n supe: \"\\u2287\",\n oplus: \"\\u2295\",\n otimes: \"\\u2297\",\n perp: \"\\u22A5\",\n sdot: \"\\u22C5\",\n lceil: \"\\u2308\",\n rceil: \"\\u2309\",\n lfloor: \"\\u230A\",\n rfloor: \"\\u230B\",\n lang: \"\\u2329\",\n rang: \"\\u232A\",\n loz: \"\\u25CA\",\n spades: \"\\u2660\",\n clubs: \"\\u2663\",\n hearts: \"\\u2665\",\n diams: \"\\u2666\"\n};\n\nclass State {\n constructor() {\n this.strict = void 0;\n this.curLine = void 0;\n this.startLoc = void 0;\n this.endLoc = void 0;\n this.errors = [];\n this.potentialArrowAt = -1;\n this.noArrowAt = [];\n this.noArrowParamsConversionAt = [];\n this.maybeInArrowParameters = false;\n this.inPipeline = false;\n this.inType = false;\n this.noAnonFunctionType = false;\n this.inPropertyName = false;\n this.hasFlowComment = false;\n this.isAmbientContext = false;\n this.inAbstractClass = false;\n this.topicContext = {\n maxNumOfResolvableTopics: 0,\n maxTopicIndex: null\n };\n this.soloAwait = false;\n this.inFSharpPipelineDirectBody = false;\n this.labels = [];\n this.decoratorStack = [[]];\n this.comments = [];\n this.trailingComments = [];\n this.leadingComments = [];\n this.commentStack = [];\n this.commentPreviousNode = null;\n this.pos = 0;\n this.lineStart = 0;\n this.type = types$1.eof;\n this.value = null;\n this.start = 0;\n this.end = 0;\n this.lastTokEndLoc = null;\n this.lastTokStartLoc = null;\n this.lastTokStart = 0;\n this.lastTokEnd = 0;\n this.context = [types.brace];\n this.exprAllowed = true;\n this.containsEsc = false;\n this.strictErrors = new Map();\n this.tokensLength = 0;\n }\n\n init(options) {\n this.strict = options.strictMode === false ? false : options.sourceType === \"module\";\n this.curLine = options.startLine;\n this.startLoc = this.endLoc = this.curPosition();\n }\n\n curPosition() {\n return new Position(this.curLine, this.pos - this.lineStart);\n }\n\n clone(skipArrays) {\n const state = new State();\n const keys = Object.keys(this);\n\n for (let i = 0, length = keys.length; i < length; i++) {\n const key = keys[i];\n let val = this[key];\n\n if (!skipArrays && Array.isArray(val)) {\n val = val.slice();\n }\n\n state[key] = val;\n }\n\n return state;\n }\n\n}\n\nconst HEX_NUMBER = /^[\\da-fA-F]+$/;\nconst DECIMAL_NUMBER = /^\\d+$/;\nconst JsxErrors = makeErrorTemplates({\n AttributeIsEmpty: \"JSX attributes must only be assigned a non-empty expression.\",\n MissingClosingTagElement: \"Expected corresponding JSX closing tag for <%0>.\",\n MissingClosingTagFragment: \"Expected corresponding JSX closing tag for <>.\",\n UnexpectedSequenceExpression: \"Sequence expressions cannot be directly nested inside JSX. Did you mean to wrap it in parentheses (...)?\",\n UnsupportedJsxValue: \"JSX value should be either an expression or a quoted JSX text.\",\n UnterminatedJsxContent: \"Unterminated JSX contents.\",\n UnwrappedAdjacentJSXElements: \"Adjacent JSX elements must be wrapped in an enclosing tag. Did you want a JSX fragment <>...?\"\n}, ErrorCodes.SyntaxError);\ntypes.j_oTag = new TokContext(\"...\", true);\ntypes$1.jsxName = new TokenType(\"jsxName\");\ntypes$1.jsxText = new TokenType(\"jsxText\", {\n beforeExpr: true\n});\ntypes$1.jsxTagStart = new TokenType(\"jsxTagStart\", {\n startsExpr: true\n});\ntypes$1.jsxTagEnd = new TokenType(\"jsxTagEnd\");\n\ntypes$1.jsxTagStart.updateContext = context => {\n context.push(types.j_expr, types.j_oTag);\n};\n\nfunction isFragment(object) {\n return object ? object.type === \"JSXOpeningFragment\" || object.type === \"JSXClosingFragment\" : false;\n}\n\nfunction getQualifiedJSXName(object) {\n if (object.type === \"JSXIdentifier\") {\n return object.name;\n }\n\n if (object.type === \"JSXNamespacedName\") {\n return object.namespace.name + \":\" + object.name.name;\n }\n\n if (object.type === \"JSXMemberExpression\") {\n return getQualifiedJSXName(object.object) + \".\" + getQualifiedJSXName(object.property);\n }\n\n throw new Error(\"Node had unexpected type: \" + object.type);\n}\n\nvar jsx = (superClass => class extends superClass {\n jsxReadToken() {\n let out = \"\";\n let chunkStart = this.state.pos;\n\n for (;;) {\n if (this.state.pos >= this.length) {\n throw this.raise(this.state.start, JsxErrors.UnterminatedJsxContent);\n }\n\n const ch = this.input.charCodeAt(this.state.pos);\n\n switch (ch) {\n case 60:\n case 123:\n if (this.state.pos === this.state.start) {\n if (ch === 60 && this.state.exprAllowed) {\n ++this.state.pos;\n return this.finishToken(types$1.jsxTagStart);\n }\n\n return super.getTokenFromCode(ch);\n }\n\n out += this.input.slice(chunkStart, this.state.pos);\n return this.finishToken(types$1.jsxText, out);\n\n case 38:\n out += this.input.slice(chunkStart, this.state.pos);\n out += this.jsxReadEntity();\n chunkStart = this.state.pos;\n break;\n\n case 62:\n case 125:\n\n default:\n if (isNewLine(ch)) {\n out += this.input.slice(chunkStart, this.state.pos);\n out += this.jsxReadNewLine(true);\n chunkStart = this.state.pos;\n } else {\n ++this.state.pos;\n }\n\n }\n }\n }\n\n jsxReadNewLine(normalizeCRLF) {\n const ch = this.input.charCodeAt(this.state.pos);\n let out;\n ++this.state.pos;\n\n if (ch === 13 && this.input.charCodeAt(this.state.pos) === 10) {\n ++this.state.pos;\n out = normalizeCRLF ? \"\\n\" : \"\\r\\n\";\n } else {\n out = String.fromCharCode(ch);\n }\n\n ++this.state.curLine;\n this.state.lineStart = this.state.pos;\n return out;\n }\n\n jsxReadString(quote) {\n let out = \"\";\n let chunkStart = ++this.state.pos;\n\n for (;;) {\n if (this.state.pos >= this.length) {\n throw this.raise(this.state.start, ErrorMessages.UnterminatedString);\n }\n\n const ch = this.input.charCodeAt(this.state.pos);\n if (ch === quote) break;\n\n if (ch === 38) {\n out += this.input.slice(chunkStart, this.state.pos);\n out += this.jsxReadEntity();\n chunkStart = this.state.pos;\n } else if (isNewLine(ch)) {\n out += this.input.slice(chunkStart, this.state.pos);\n out += this.jsxReadNewLine(false);\n chunkStart = this.state.pos;\n } else {\n ++this.state.pos;\n }\n }\n\n out += this.input.slice(chunkStart, this.state.pos++);\n return this.finishToken(types$1.string, out);\n }\n\n jsxReadEntity() {\n let str = \"\";\n let count = 0;\n let entity;\n let ch = this.input[this.state.pos];\n const startPos = ++this.state.pos;\n\n while (this.state.pos < this.length && count++ < 10) {\n ch = this.input[this.state.pos++];\n\n if (ch === \";\") {\n if (str[0] === \"#\") {\n if (str[1] === \"x\") {\n str = str.substr(2);\n\n if (HEX_NUMBER.test(str)) {\n entity = String.fromCodePoint(parseInt(str, 16));\n }\n } else {\n str = str.substr(1);\n\n if (DECIMAL_NUMBER.test(str)) {\n entity = String.fromCodePoint(parseInt(str, 10));\n }\n }\n } else {\n entity = entities[str];\n }\n\n break;\n }\n\n str += ch;\n }\n\n if (!entity) {\n this.state.pos = startPos;\n return \"&\";\n }\n\n return entity;\n }\n\n jsxReadWord() {\n let ch;\n const start = this.state.pos;\n\n do {\n ch = this.input.charCodeAt(++this.state.pos);\n } while (isIdentifierChar(ch) || ch === 45);\n\n return this.finishToken(types$1.jsxName, this.input.slice(start, this.state.pos));\n }\n\n jsxParseIdentifier() {\n const node = this.startNode();\n\n if (this.match(types$1.jsxName)) {\n node.name = this.state.value;\n } else if (this.state.type.keyword) {\n node.name = this.state.type.keyword;\n } else {\n this.unexpected();\n }\n\n this.next();\n return this.finishNode(node, \"JSXIdentifier\");\n }\n\n jsxParseNamespacedName() {\n const startPos = this.state.start;\n const startLoc = this.state.startLoc;\n const name = this.jsxParseIdentifier();\n if (!this.eat(types$1.colon)) return name;\n const node = this.startNodeAt(startPos, startLoc);\n node.namespace = name;\n node.name = this.jsxParseIdentifier();\n return this.finishNode(node, \"JSXNamespacedName\");\n }\n\n jsxParseElementName() {\n const startPos = this.state.start;\n const startLoc = this.state.startLoc;\n let node = this.jsxParseNamespacedName();\n\n if (node.type === \"JSXNamespacedName\") {\n return node;\n }\n\n while (this.eat(types$1.dot)) {\n const newNode = this.startNodeAt(startPos, startLoc);\n newNode.object = node;\n newNode.property = this.jsxParseIdentifier();\n node = this.finishNode(newNode, \"JSXMemberExpression\");\n }\n\n return node;\n }\n\n jsxParseAttributeValue() {\n let node;\n\n switch (this.state.type) {\n case types$1.braceL:\n node = this.startNode();\n this.next();\n node = this.jsxParseExpressionContainer(node);\n\n if (node.expression.type === \"JSXEmptyExpression\") {\n this.raise(node.start, JsxErrors.AttributeIsEmpty);\n }\n\n return node;\n\n case types$1.jsxTagStart:\n case types$1.string:\n return this.parseExprAtom();\n\n default:\n throw this.raise(this.state.start, JsxErrors.UnsupportedJsxValue);\n }\n }\n\n jsxParseEmptyExpression() {\n const node = this.startNodeAt(this.state.lastTokEnd, this.state.lastTokEndLoc);\n return this.finishNodeAt(node, \"JSXEmptyExpression\", this.state.start, this.state.startLoc);\n }\n\n jsxParseSpreadChild(node) {\n this.next();\n node.expression = this.parseExpression();\n this.expect(types$1.braceR);\n return this.finishNode(node, \"JSXSpreadChild\");\n }\n\n jsxParseExpressionContainer(node) {\n if (this.match(types$1.braceR)) {\n node.expression = this.jsxParseEmptyExpression();\n } else {\n const expression = this.parseExpression();\n node.expression = expression;\n }\n\n this.expect(types$1.braceR);\n return this.finishNode(node, \"JSXExpressionContainer\");\n }\n\n jsxParseAttribute() {\n const node = this.startNode();\n\n if (this.eat(types$1.braceL)) {\n this.expect(types$1.ellipsis);\n node.argument = this.parseMaybeAssignAllowIn();\n this.expect(types$1.braceR);\n return this.finishNode(node, \"JSXSpreadAttribute\");\n }\n\n node.name = this.jsxParseNamespacedName();\n node.value = this.eat(types$1.eq) ? this.jsxParseAttributeValue() : null;\n return this.finishNode(node, \"JSXAttribute\");\n }\n\n jsxParseOpeningElementAt(startPos, startLoc) {\n const node = this.startNodeAt(startPos, startLoc);\n\n if (this.match(types$1.jsxTagEnd)) {\n this.expect(types$1.jsxTagEnd);\n return this.finishNode(node, \"JSXOpeningFragment\");\n }\n\n node.name = this.jsxParseElementName();\n return this.jsxParseOpeningElementAfterName(node);\n }\n\n jsxParseOpeningElementAfterName(node) {\n const attributes = [];\n\n while (!this.match(types$1.slash) && !this.match(types$1.jsxTagEnd)) {\n attributes.push(this.jsxParseAttribute());\n }\n\n node.attributes = attributes;\n node.selfClosing = this.eat(types$1.slash);\n this.expect(types$1.jsxTagEnd);\n return this.finishNode(node, \"JSXOpeningElement\");\n }\n\n jsxParseClosingElementAt(startPos, startLoc) {\n const node = this.startNodeAt(startPos, startLoc);\n\n if (this.match(types$1.jsxTagEnd)) {\n this.expect(types$1.jsxTagEnd);\n return this.finishNode(node, \"JSXClosingFragment\");\n }\n\n node.name = this.jsxParseElementName();\n this.expect(types$1.jsxTagEnd);\n return this.finishNode(node, \"JSXClosingElement\");\n }\n\n jsxParseElementAt(startPos, startLoc) {\n const node = this.startNodeAt(startPos, startLoc);\n const children = [];\n const openingElement = this.jsxParseOpeningElementAt(startPos, startLoc);\n let closingElement = null;\n\n if (!openingElement.selfClosing) {\n contents: for (;;) {\n switch (this.state.type) {\n case types$1.jsxTagStart:\n startPos = this.state.start;\n startLoc = this.state.startLoc;\n this.next();\n\n if (this.eat(types$1.slash)) {\n closingElement = this.jsxParseClosingElementAt(startPos, startLoc);\n break contents;\n }\n\n children.push(this.jsxParseElementAt(startPos, startLoc));\n break;\n\n case types$1.jsxText:\n children.push(this.parseExprAtom());\n break;\n\n case types$1.braceL:\n {\n const node = this.startNode();\n this.next();\n\n if (this.match(types$1.ellipsis)) {\n children.push(this.jsxParseSpreadChild(node));\n } else {\n children.push(this.jsxParseExpressionContainer(node));\n }\n\n break;\n }\n\n default:\n throw this.unexpected();\n }\n }\n\n if (isFragment(openingElement) && !isFragment(closingElement)) {\n this.raise(closingElement.start, JsxErrors.MissingClosingTagFragment);\n } else if (!isFragment(openingElement) && isFragment(closingElement)) {\n this.raise(closingElement.start, JsxErrors.MissingClosingTagElement, getQualifiedJSXName(openingElement.name));\n } else if (!isFragment(openingElement) && !isFragment(closingElement)) {\n if (getQualifiedJSXName(closingElement.name) !== getQualifiedJSXName(openingElement.name)) {\n this.raise(closingElement.start, JsxErrors.MissingClosingTagElement, getQualifiedJSXName(openingElement.name));\n }\n }\n }\n\n if (isFragment(openingElement)) {\n node.openingFragment = openingElement;\n node.closingFragment = closingElement;\n } else {\n node.openingElement = openingElement;\n node.closingElement = closingElement;\n }\n\n node.children = children;\n\n if (this.isRelational(\"<\")) {\n throw this.raise(this.state.start, JsxErrors.UnwrappedAdjacentJSXElements);\n }\n\n return isFragment(openingElement) ? this.finishNode(node, \"JSXFragment\") : this.finishNode(node, \"JSXElement\");\n }\n\n jsxParseElement() {\n const startPos = this.state.start;\n const startLoc = this.state.startLoc;\n this.next();\n return this.jsxParseElementAt(startPos, startLoc);\n }\n\n parseExprAtom(refExpressionErrors) {\n if (this.match(types$1.jsxText)) {\n return this.parseLiteral(this.state.value, \"JSXText\");\n } else if (this.match(types$1.jsxTagStart)) {\n return this.jsxParseElement();\n } else if (this.isRelational(\"<\") && this.input.charCodeAt(this.state.pos) !== 33) {\n this.finishToken(types$1.jsxTagStart);\n return this.jsxParseElement();\n } else {\n return super.parseExprAtom(refExpressionErrors);\n }\n }\n\n createLookaheadState(state) {\n const lookaheadState = super.createLookaheadState(state);\n lookaheadState.inPropertyName = state.inPropertyName;\n return lookaheadState;\n }\n\n getTokenFromCode(code) {\n if (this.state.inPropertyName) return super.getTokenFromCode(code);\n const context = this.curContext();\n\n if (context === types.j_expr) {\n return this.jsxReadToken();\n }\n\n if (context === types.j_oTag || context === types.j_cTag) {\n if (isIdentifierStart(code)) {\n return this.jsxReadWord();\n }\n\n if (code === 62) {\n ++this.state.pos;\n return this.finishToken(types$1.jsxTagEnd);\n }\n\n if ((code === 34 || code === 39) && context === types.j_oTag) {\n return this.jsxReadString(code);\n }\n }\n\n if (code === 60 && this.state.exprAllowed && this.input.charCodeAt(this.state.pos + 1) !== 33) {\n ++this.state.pos;\n return this.finishToken(types$1.jsxTagStart);\n }\n\n return super.getTokenFromCode(code);\n }\n\n updateContext(prevType) {\n super.updateContext(prevType);\n const {\n context,\n type\n } = this.state;\n\n if (type === types$1.slash && prevType === types$1.jsxTagStart) {\n context.splice(-2, 2, types.j_cTag);\n this.state.exprAllowed = false;\n } else if (type === types$1.jsxTagEnd) {\n const out = context.pop();\n\n if (out === types.j_oTag && prevType === types$1.slash || out === types.j_cTag) {\n context.pop();\n this.state.exprAllowed = context[context.length - 1] === types.j_expr;\n } else {\n this.state.exprAllowed = true;\n }\n } else if (type.keyword && (prevType === types$1.dot || prevType === types$1.questionDot)) {\n this.state.exprAllowed = false;\n } else {\n this.state.exprAllowed = type.beforeExpr;\n }\n }\n\n});\n\nclass TypeScriptScope extends Scope {\n constructor(...args) {\n super(...args);\n this.types = new Set();\n this.enums = new Set();\n this.constEnums = new Set();\n this.classes = new Set();\n this.exportOnlyBindings = new Set();\n }\n\n}\n\nclass TypeScriptScopeHandler extends ScopeHandler {\n createScope(flags) {\n return new TypeScriptScope(flags);\n }\n\n declareName(name, bindingType, pos) {\n const scope = this.currentScope();\n\n if (bindingType & BIND_FLAGS_TS_EXPORT_ONLY) {\n this.maybeExportDefined(scope, name);\n scope.exportOnlyBindings.add(name);\n return;\n }\n\n super.declareName(...arguments);\n\n if (bindingType & BIND_KIND_TYPE) {\n if (!(bindingType & BIND_KIND_VALUE)) {\n this.checkRedeclarationInScope(scope, name, bindingType, pos);\n this.maybeExportDefined(scope, name);\n }\n\n scope.types.add(name);\n }\n\n if (bindingType & BIND_FLAGS_TS_ENUM) scope.enums.add(name);\n if (bindingType & BIND_FLAGS_TS_CONST_ENUM) scope.constEnums.add(name);\n if (bindingType & BIND_FLAGS_CLASS) scope.classes.add(name);\n }\n\n isRedeclaredInScope(scope, name, bindingType) {\n if (scope.enums.has(name)) {\n if (bindingType & BIND_FLAGS_TS_ENUM) {\n const isConst = !!(bindingType & BIND_FLAGS_TS_CONST_ENUM);\n const wasConst = scope.constEnums.has(name);\n return isConst !== wasConst;\n }\n\n return true;\n }\n\n if (bindingType & BIND_FLAGS_CLASS && scope.classes.has(name)) {\n if (scope.lexical.has(name)) {\n return !!(bindingType & BIND_KIND_VALUE);\n } else {\n return false;\n }\n }\n\n if (bindingType & BIND_KIND_TYPE && scope.types.has(name)) {\n return true;\n }\n\n return super.isRedeclaredInScope(...arguments);\n }\n\n checkLocalExport(id) {\n const topLevelScope = this.scopeStack[0];\n const {\n name\n } = id;\n\n if (!topLevelScope.types.has(name) && !topLevelScope.exportOnlyBindings.has(name)) {\n super.checkLocalExport(id);\n }\n }\n\n}\n\nconst PARAM = 0b0000,\n PARAM_YIELD = 0b0001,\n PARAM_AWAIT = 0b0010,\n PARAM_RETURN = 0b0100,\n PARAM_IN = 0b1000;\nclass ProductionParameterHandler {\n constructor() {\n this.stacks = [];\n }\n\n enter(flags) {\n this.stacks.push(flags);\n }\n\n exit() {\n this.stacks.pop();\n }\n\n currentFlags() {\n return this.stacks[this.stacks.length - 1];\n }\n\n get hasAwait() {\n return (this.currentFlags() & PARAM_AWAIT) > 0;\n }\n\n get hasYield() {\n return (this.currentFlags() & PARAM_YIELD) > 0;\n }\n\n get hasReturn() {\n return (this.currentFlags() & PARAM_RETURN) > 0;\n }\n\n get hasIn() {\n return (this.currentFlags() & PARAM_IN) > 0;\n }\n\n}\nfunction functionFlags(isAsync, isGenerator) {\n return (isAsync ? PARAM_AWAIT : 0) | (isGenerator ? PARAM_YIELD : 0);\n}\n\nfunction nonNull(x) {\n if (x == null) {\n throw new Error(`Unexpected ${x} value.`);\n }\n\n return x;\n}\n\nfunction assert(x) {\n if (!x) {\n throw new Error(\"Assert fail\");\n }\n}\n\nconst TSErrors = makeErrorTemplates({\n AbstractMethodHasImplementation: \"Method '%0' cannot have an implementation because it is marked abstract.\",\n AccesorCannotDeclareThisParameter: \"'get' and 'set' accessors cannot declare 'this' parameters.\",\n AccesorCannotHaveTypeParameters: \"An accessor cannot have type parameters.\",\n ClassMethodHasDeclare: \"Class methods cannot have the 'declare' modifier.\",\n ClassMethodHasReadonly: \"Class methods cannot have the 'readonly' modifier.\",\n ConstructorHasTypeParameters: \"Type parameters cannot appear on a constructor declaration.\",\n DeclareAccessor: \"'declare' is not allowed in %0ters.\",\n DeclareClassFieldHasInitializer: \"Initializers are not allowed in ambient contexts.\",\n DeclareFunctionHasImplementation: \"An implementation cannot be declared in ambient contexts.\",\n DuplicateAccessibilityModifier: \"Accessibility modifier already seen.\",\n DuplicateModifier: \"Duplicate modifier: '%0'.\",\n EmptyHeritageClauseType: \"'%0' list cannot be empty.\",\n EmptyTypeArguments: \"Type argument list cannot be empty.\",\n EmptyTypeParameters: \"Type parameter list cannot be empty.\",\n ExpectedAmbientAfterExportDeclare: \"'export declare' must be followed by an ambient declaration.\",\n ImportAliasHasImportType: \"An import alias can not use 'import type'.\",\n IncompatibleModifiers: \"'%0' modifier cannot be used with '%1' modifier.\",\n IndexSignatureHasAbstract: \"Index signatures cannot have the 'abstract' modifier.\",\n IndexSignatureHasAccessibility: \"Index signatures cannot have an accessibility modifier ('%0').\",\n IndexSignatureHasDeclare: \"Index signatures cannot have the 'declare' modifier.\",\n IndexSignatureHasOverride: \"'override' modifier cannot appear on an index signature.\",\n IndexSignatureHasStatic: \"Index signatures cannot have the 'static' modifier.\",\n InvalidModifierOnTypeMember: \"'%0' modifier cannot appear on a type member.\",\n InvalidModifiersOrder: \"'%0' modifier must precede '%1' modifier.\",\n InvalidTupleMemberLabel: \"Tuple members must be labeled with a simple identifier.\",\n MixedLabeledAndUnlabeledElements: \"Tuple members must all have names or all not have names.\",\n NonAbstractClassHasAbstractMethod: \"Abstract methods can only appear within an abstract class.\",\n NonClassMethodPropertyHasAbstractModifer: \"'abstract' modifier can only appear on a class, method, or property declaration.\",\n OptionalTypeBeforeRequired: \"A required element cannot follow an optional element.\",\n OverrideNotInSubClass: \"This member cannot have an 'override' modifier because its containing class does not extend another class.\",\n PatternIsOptional: \"A binding pattern parameter cannot be optional in an implementation signature.\",\n PrivateElementHasAbstract: \"Private elements cannot have the 'abstract' modifier.\",\n PrivateElementHasAccessibility: \"Private elements cannot have an accessibility modifier ('%0').\",\n ReadonlyForMethodSignature: \"'readonly' modifier can only appear on a property declaration or index signature.\",\n SetAccesorCannotHaveOptionalParameter: \"A 'set' accessor cannot have an optional parameter.\",\n SetAccesorCannotHaveRestParameter: \"A 'set' accessor cannot have rest parameter.\",\n SetAccesorCannotHaveReturnType: \"A 'set' accessor cannot have a return type annotation.\",\n StaticBlockCannotHaveModifier: \"Static class blocks cannot have any modifier.\",\n TypeAnnotationAfterAssign: \"Type annotations must come before default assignments, e.g. instead of `age = 25: number` use `age: number = 25`.\",\n TypeImportCannotSpecifyDefaultAndNamed: \"A type-only import can specify a default import or named bindings, but not both.\",\n UnexpectedParameterModifier: \"A parameter property is only allowed in a constructor implementation.\",\n UnexpectedReadonly: \"'readonly' type modifier is only permitted on array and tuple literal types.\",\n UnexpectedTypeAnnotation: \"Did not expect a type annotation here.\",\n UnexpectedTypeCastInParameter: \"Unexpected type cast in parameter position.\",\n UnsupportedImportTypeArgument: \"Argument in a type import must be a string literal.\",\n UnsupportedParameterPropertyKind: \"A parameter property may not be declared using a binding pattern.\",\n UnsupportedSignatureParameterKind: \"Name in a signature must be an Identifier, ObjectPattern or ArrayPattern, instead got %0.\"\n}, ErrorCodes.SyntaxError);\n\nfunction keywordTypeFromName(value) {\n switch (value) {\n case \"any\":\n return \"TSAnyKeyword\";\n\n case \"boolean\":\n return \"TSBooleanKeyword\";\n\n case \"bigint\":\n return \"TSBigIntKeyword\";\n\n case \"never\":\n return \"TSNeverKeyword\";\n\n case \"number\":\n return \"TSNumberKeyword\";\n\n case \"object\":\n return \"TSObjectKeyword\";\n\n case \"string\":\n return \"TSStringKeyword\";\n\n case \"symbol\":\n return \"TSSymbolKeyword\";\n\n case \"undefined\":\n return \"TSUndefinedKeyword\";\n\n case \"unknown\":\n return \"TSUnknownKeyword\";\n\n default:\n return undefined;\n }\n}\n\nfunction tsIsAccessModifier(modifier) {\n return modifier === \"private\" || modifier === \"public\" || modifier === \"protected\";\n}\n\nvar typescript = (superClass => class extends superClass {\n getScopeHandler() {\n return TypeScriptScopeHandler;\n }\n\n tsIsIdentifier() {\n return this.match(types$1.name);\n }\n\n tsTokenCanFollowModifier() {\n return (this.match(types$1.bracketL) || this.match(types$1.braceL) || this.match(types$1.star) || this.match(types$1.ellipsis) || this.match(types$1.privateName) || this.isLiteralPropertyName()) && !this.hasPrecedingLineBreak();\n }\n\n tsNextTokenCanFollowModifier() {\n this.next();\n return this.tsTokenCanFollowModifier();\n }\n\n tsParseModifier(allowedModifiers) {\n if (!this.match(types$1.name)) {\n return undefined;\n }\n\n const modifier = this.state.value;\n\n if (allowedModifiers.indexOf(modifier) !== -1 && this.tsTryParse(this.tsNextTokenCanFollowModifier.bind(this))) {\n return modifier;\n }\n\n return undefined;\n }\n\n tsParseModifiers(modified, allowedModifiers, disallowedModifiers, errorTemplate) {\n const enforceOrder = (pos, modifier, before, after) => {\n if (modifier === before && modified[after]) {\n this.raise(pos, TSErrors.InvalidModifiersOrder, before, after);\n }\n };\n\n const incompatible = (pos, modifier, mod1, mod2) => {\n if (modified[mod1] && modifier === mod2 || modified[mod2] && modifier === mod1) {\n this.raise(pos, TSErrors.IncompatibleModifiers, mod1, mod2);\n }\n };\n\n for (;;) {\n const startPos = this.state.start;\n const modifier = this.tsParseModifier(allowedModifiers.concat(disallowedModifiers != null ? disallowedModifiers : []));\n if (!modifier) break;\n\n if (tsIsAccessModifier(modifier)) {\n if (modified.accessibility) {\n this.raise(startPos, TSErrors.DuplicateAccessibilityModifier);\n } else {\n enforceOrder(startPos, modifier, modifier, \"override\");\n enforceOrder(startPos, modifier, modifier, \"static\");\n enforceOrder(startPos, modifier, modifier, \"readonly\");\n modified.accessibility = modifier;\n }\n } else {\n if (Object.hasOwnProperty.call(modified, modifier)) {\n this.raise(startPos, TSErrors.DuplicateModifier, modifier);\n } else {\n enforceOrder(startPos, modifier, \"static\", \"readonly\");\n enforceOrder(startPos, modifier, \"static\", \"override\");\n enforceOrder(startPos, modifier, \"override\", \"readonly\");\n enforceOrder(startPos, modifier, \"abstract\", \"override\");\n incompatible(startPos, modifier, \"declare\", \"override\");\n incompatible(startPos, modifier, \"static\", \"abstract\");\n }\n\n modified[modifier] = true;\n }\n\n if (disallowedModifiers != null && disallowedModifiers.includes(modifier)) {\n this.raise(startPos, errorTemplate, modifier);\n }\n }\n }\n\n tsIsListTerminator(kind) {\n switch (kind) {\n case \"EnumMembers\":\n case \"TypeMembers\":\n return this.match(types$1.braceR);\n\n case \"HeritageClauseElement\":\n return this.match(types$1.braceL);\n\n case \"TupleElementTypes\":\n return this.match(types$1.bracketR);\n\n case \"TypeParametersOrArguments\":\n return this.isRelational(\">\");\n }\n\n throw new Error(\"Unreachable\");\n }\n\n tsParseList(kind, parseElement) {\n const result = [];\n\n while (!this.tsIsListTerminator(kind)) {\n result.push(parseElement());\n }\n\n return result;\n }\n\n tsParseDelimitedList(kind, parseElement) {\n return nonNull(this.tsParseDelimitedListWorker(kind, parseElement, true));\n }\n\n tsParseDelimitedListWorker(kind, parseElement, expectSuccess) {\n const result = [];\n\n for (;;) {\n if (this.tsIsListTerminator(kind)) {\n break;\n }\n\n const element = parseElement();\n\n if (element == null) {\n return undefined;\n }\n\n result.push(element);\n\n if (this.eat(types$1.comma)) {\n continue;\n }\n\n if (this.tsIsListTerminator(kind)) {\n break;\n }\n\n if (expectSuccess) {\n this.expect(types$1.comma);\n }\n\n return undefined;\n }\n\n return result;\n }\n\n tsParseBracketedList(kind, parseElement, bracket, skipFirstToken) {\n if (!skipFirstToken) {\n if (bracket) {\n this.expect(types$1.bracketL);\n } else {\n this.expectRelational(\"<\");\n }\n }\n\n const result = this.tsParseDelimitedList(kind, parseElement);\n\n if (bracket) {\n this.expect(types$1.bracketR);\n } else {\n this.expectRelational(\">\");\n }\n\n return result;\n }\n\n tsParseImportType() {\n const node = this.startNode();\n this.expect(types$1._import);\n this.expect(types$1.parenL);\n\n if (!this.match(types$1.string)) {\n this.raise(this.state.start, TSErrors.UnsupportedImportTypeArgument);\n }\n\n node.argument = this.parseExprAtom();\n this.expect(types$1.parenR);\n\n if (this.eat(types$1.dot)) {\n node.qualifier = this.tsParseEntityName(true);\n }\n\n if (this.isRelational(\"<\")) {\n node.typeParameters = this.tsParseTypeArguments();\n }\n\n return this.finishNode(node, \"TSImportType\");\n }\n\n tsParseEntityName(allowReservedWords) {\n let entity = this.parseIdentifier();\n\n while (this.eat(types$1.dot)) {\n const node = this.startNodeAtNode(entity);\n node.left = entity;\n node.right = this.parseIdentifier(allowReservedWords);\n entity = this.finishNode(node, \"TSQualifiedName\");\n }\n\n return entity;\n }\n\n tsParseTypeReference() {\n const node = this.startNode();\n node.typeName = this.tsParseEntityName(false);\n\n if (!this.hasPrecedingLineBreak() && this.isRelational(\"<\")) {\n node.typeParameters = this.tsParseTypeArguments();\n }\n\n return this.finishNode(node, \"TSTypeReference\");\n }\n\n tsParseThisTypePredicate(lhs) {\n this.next();\n const node = this.startNodeAtNode(lhs);\n node.parameterName = lhs;\n node.typeAnnotation = this.tsParseTypeAnnotation(false);\n node.asserts = false;\n return this.finishNode(node, \"TSTypePredicate\");\n }\n\n tsParseThisTypeNode() {\n const node = this.startNode();\n this.next();\n return this.finishNode(node, \"TSThisType\");\n }\n\n tsParseTypeQuery() {\n const node = this.startNode();\n this.expect(types$1._typeof);\n\n if (this.match(types$1._import)) {\n node.exprName = this.tsParseImportType();\n } else {\n node.exprName = this.tsParseEntityName(true);\n }\n\n return this.finishNode(node, \"TSTypeQuery\");\n }\n\n tsParseTypeParameter() {\n const node = this.startNode();\n node.name = this.parseIdentifierName(node.start);\n node.constraint = this.tsEatThenParseType(types$1._extends);\n node.default = this.tsEatThenParseType(types$1.eq);\n return this.finishNode(node, \"TSTypeParameter\");\n }\n\n tsTryParseTypeParameters() {\n if (this.isRelational(\"<\")) {\n return this.tsParseTypeParameters();\n }\n }\n\n tsParseTypeParameters() {\n const node = this.startNode();\n\n if (this.isRelational(\"<\") || this.match(types$1.jsxTagStart)) {\n this.next();\n } else {\n this.unexpected();\n }\n\n node.params = this.tsParseBracketedList(\"TypeParametersOrArguments\", this.tsParseTypeParameter.bind(this), false, true);\n\n if (node.params.length === 0) {\n this.raise(node.start, TSErrors.EmptyTypeParameters);\n }\n\n return this.finishNode(node, \"TSTypeParameterDeclaration\");\n }\n\n tsTryNextParseConstantContext() {\n if (this.lookahead().type === types$1._const) {\n this.next();\n return this.tsParseTypeReference();\n }\n\n return null;\n }\n\n tsFillSignature(returnToken, signature) {\n const returnTokenRequired = returnToken === types$1.arrow;\n signature.typeParameters = this.tsTryParseTypeParameters();\n this.expect(types$1.parenL);\n signature.parameters = this.tsParseBindingListForSignature();\n\n if (returnTokenRequired) {\n signature.typeAnnotation = this.tsParseTypeOrTypePredicateAnnotation(returnToken);\n } else if (this.match(returnToken)) {\n signature.typeAnnotation = this.tsParseTypeOrTypePredicateAnnotation(returnToken);\n }\n }\n\n tsParseBindingListForSignature() {\n return this.parseBindingList(types$1.parenR, 41).map(pattern => {\n if (pattern.type !== \"Identifier\" && pattern.type !== \"RestElement\" && pattern.type !== \"ObjectPattern\" && pattern.type !== \"ArrayPattern\") {\n this.raise(pattern.start, TSErrors.UnsupportedSignatureParameterKind, pattern.type);\n }\n\n return pattern;\n });\n }\n\n tsParseTypeMemberSemicolon() {\n if (!this.eat(types$1.comma) && !this.isLineTerminator()) {\n this.expect(types$1.semi);\n }\n }\n\n tsParseSignatureMember(kind, node) {\n this.tsFillSignature(types$1.colon, node);\n this.tsParseTypeMemberSemicolon();\n return this.finishNode(node, kind);\n }\n\n tsIsUnambiguouslyIndexSignature() {\n this.next();\n return this.eat(types$1.name) && this.match(types$1.colon);\n }\n\n tsTryParseIndexSignature(node) {\n if (!(this.match(types$1.bracketL) && this.tsLookAhead(this.tsIsUnambiguouslyIndexSignature.bind(this)))) {\n return undefined;\n }\n\n this.expect(types$1.bracketL);\n const id = this.parseIdentifier();\n id.typeAnnotation = this.tsParseTypeAnnotation();\n this.resetEndLocation(id);\n this.expect(types$1.bracketR);\n node.parameters = [id];\n const type = this.tsTryParseTypeAnnotation();\n if (type) node.typeAnnotation = type;\n this.tsParseTypeMemberSemicolon();\n return this.finishNode(node, \"TSIndexSignature\");\n }\n\n tsParsePropertyOrMethodSignature(node, readonly) {\n if (this.eat(types$1.question)) node.optional = true;\n const nodeAny = node;\n\n if (this.match(types$1.parenL) || this.isRelational(\"<\")) {\n if (readonly) {\n this.raise(node.start, TSErrors.ReadonlyForMethodSignature);\n }\n\n const method = nodeAny;\n\n if (method.kind && this.isRelational(\"<\")) {\n this.raise(this.state.pos, TSErrors.AccesorCannotHaveTypeParameters);\n }\n\n this.tsFillSignature(types$1.colon, method);\n this.tsParseTypeMemberSemicolon();\n\n if (method.kind === \"get\") {\n if (method.parameters.length > 0) {\n this.raise(this.state.pos, ErrorMessages.BadGetterArity);\n\n if (this.isThisParam(method.parameters[0])) {\n this.raise(this.state.pos, TSErrors.AccesorCannotDeclareThisParameter);\n }\n }\n } else if (method.kind === \"set\") {\n if (method.parameters.length !== 1) {\n this.raise(this.state.pos, ErrorMessages.BadSetterArity);\n } else {\n const firstParameter = method.parameters[0];\n\n if (this.isThisParam(firstParameter)) {\n this.raise(this.state.pos, TSErrors.AccesorCannotDeclareThisParameter);\n }\n\n if (firstParameter.type === \"Identifier\" && firstParameter.optional) {\n this.raise(this.state.pos, TSErrors.SetAccesorCannotHaveOptionalParameter);\n }\n\n if (firstParameter.type === \"RestElement\") {\n this.raise(this.state.pos, TSErrors.SetAccesorCannotHaveRestParameter);\n }\n }\n\n if (method.typeAnnotation) {\n this.raise(method.typeAnnotation.start, TSErrors.SetAccesorCannotHaveReturnType);\n }\n } else {\n method.kind = \"method\";\n }\n\n return this.finishNode(method, \"TSMethodSignature\");\n } else {\n const property = nodeAny;\n if (readonly) property.readonly = true;\n const type = this.tsTryParseTypeAnnotation();\n if (type) property.typeAnnotation = type;\n this.tsParseTypeMemberSemicolon();\n return this.finishNode(property, \"TSPropertySignature\");\n }\n }\n\n tsParseTypeMember() {\n const node = this.startNode();\n\n if (this.match(types$1.parenL) || this.isRelational(\"<\")) {\n return this.tsParseSignatureMember(\"TSCallSignatureDeclaration\", node);\n }\n\n if (this.match(types$1._new)) {\n const id = this.startNode();\n this.next();\n\n if (this.match(types$1.parenL) || this.isRelational(\"<\")) {\n return this.tsParseSignatureMember(\"TSConstructSignatureDeclaration\", node);\n } else {\n node.key = this.createIdentifier(id, \"new\");\n return this.tsParsePropertyOrMethodSignature(node, false);\n }\n }\n\n this.tsParseModifiers(node, [\"readonly\"], [\"declare\", \"abstract\", \"private\", \"protected\", \"public\", \"static\", \"override\"], TSErrors.InvalidModifierOnTypeMember);\n const idx = this.tsTryParseIndexSignature(node);\n\n if (idx) {\n return idx;\n }\n\n this.parsePropertyName(node, false);\n\n if (!node.computed && node.key.type === \"Identifier\" && (node.key.name === \"get\" || node.key.name === \"set\") && this.tsTokenCanFollowModifier()) {\n node.kind = node.key.name;\n this.parsePropertyName(node, false);\n }\n\n return this.tsParsePropertyOrMethodSignature(node, !!node.readonly);\n }\n\n tsParseTypeLiteral() {\n const node = this.startNode();\n node.members = this.tsParseObjectTypeMembers();\n return this.finishNode(node, \"TSTypeLiteral\");\n }\n\n tsParseObjectTypeMembers() {\n this.expect(types$1.braceL);\n const members = this.tsParseList(\"TypeMembers\", this.tsParseTypeMember.bind(this));\n this.expect(types$1.braceR);\n return members;\n }\n\n tsIsStartOfMappedType() {\n this.next();\n\n if (this.eat(types$1.plusMin)) {\n return this.isContextual(\"readonly\");\n }\n\n if (this.isContextual(\"readonly\")) {\n this.next();\n }\n\n if (!this.match(types$1.bracketL)) {\n return false;\n }\n\n this.next();\n\n if (!this.tsIsIdentifier()) {\n return false;\n }\n\n this.next();\n return this.match(types$1._in);\n }\n\n tsParseMappedTypeParameter() {\n const node = this.startNode();\n node.name = this.parseIdentifierName(node.start);\n node.constraint = this.tsExpectThenParseType(types$1._in);\n return this.finishNode(node, \"TSTypeParameter\");\n }\n\n tsParseMappedType() {\n const node = this.startNode();\n this.expect(types$1.braceL);\n\n if (this.match(types$1.plusMin)) {\n node.readonly = this.state.value;\n this.next();\n this.expectContextual(\"readonly\");\n } else if (this.eatContextual(\"readonly\")) {\n node.readonly = true;\n }\n\n this.expect(types$1.bracketL);\n node.typeParameter = this.tsParseMappedTypeParameter();\n node.nameType = this.eatContextual(\"as\") ? this.tsParseType() : null;\n this.expect(types$1.bracketR);\n\n if (this.match(types$1.plusMin)) {\n node.optional = this.state.value;\n this.next();\n this.expect(types$1.question);\n } else if (this.eat(types$1.question)) {\n node.optional = true;\n }\n\n node.typeAnnotation = this.tsTryParseType();\n this.semicolon();\n this.expect(types$1.braceR);\n return this.finishNode(node, \"TSMappedType\");\n }\n\n tsParseTupleType() {\n const node = this.startNode();\n node.elementTypes = this.tsParseBracketedList(\"TupleElementTypes\", this.tsParseTupleElementType.bind(this), true, false);\n let seenOptionalElement = false;\n let labeledElements = null;\n node.elementTypes.forEach(elementNode => {\n var _labeledElements;\n\n let {\n type\n } = elementNode;\n\n if (seenOptionalElement && type !== \"TSRestType\" && type !== \"TSOptionalType\" && !(type === \"TSNamedTupleMember\" && elementNode.optional)) {\n this.raise(elementNode.start, TSErrors.OptionalTypeBeforeRequired);\n }\n\n seenOptionalElement = seenOptionalElement || type === \"TSNamedTupleMember\" && elementNode.optional || type === \"TSOptionalType\";\n\n if (type === \"TSRestType\") {\n elementNode = elementNode.typeAnnotation;\n type = elementNode.type;\n }\n\n const isLabeled = type === \"TSNamedTupleMember\";\n labeledElements = (_labeledElements = labeledElements) != null ? _labeledElements : isLabeled;\n\n if (labeledElements !== isLabeled) {\n this.raise(elementNode.start, TSErrors.MixedLabeledAndUnlabeledElements);\n }\n });\n return this.finishNode(node, \"TSTupleType\");\n }\n\n tsParseTupleElementType() {\n const {\n start: startPos,\n startLoc\n } = this.state;\n const rest = this.eat(types$1.ellipsis);\n let type = this.tsParseType();\n const optional = this.eat(types$1.question);\n const labeled = this.eat(types$1.colon);\n\n if (labeled) {\n const labeledNode = this.startNodeAtNode(type);\n labeledNode.optional = optional;\n\n if (type.type === \"TSTypeReference\" && !type.typeParameters && type.typeName.type === \"Identifier\") {\n labeledNode.label = type.typeName;\n } else {\n this.raise(type.start, TSErrors.InvalidTupleMemberLabel);\n labeledNode.label = type;\n }\n\n labeledNode.elementType = this.tsParseType();\n type = this.finishNode(labeledNode, \"TSNamedTupleMember\");\n } else if (optional) {\n const optionalTypeNode = this.startNodeAtNode(type);\n optionalTypeNode.typeAnnotation = type;\n type = this.finishNode(optionalTypeNode, \"TSOptionalType\");\n }\n\n if (rest) {\n const restNode = this.startNodeAt(startPos, startLoc);\n restNode.typeAnnotation = type;\n type = this.finishNode(restNode, \"TSRestType\");\n }\n\n return type;\n }\n\n tsParseParenthesizedType() {\n const node = this.startNode();\n this.expect(types$1.parenL);\n node.typeAnnotation = this.tsParseType();\n this.expect(types$1.parenR);\n return this.finishNode(node, \"TSParenthesizedType\");\n }\n\n tsParseFunctionOrConstructorType(type, abstract) {\n const node = this.startNode();\n\n if (type === \"TSConstructorType\") {\n node.abstract = !!abstract;\n if (abstract) this.next();\n this.next();\n }\n\n this.tsFillSignature(types$1.arrow, node);\n return this.finishNode(node, type);\n }\n\n tsParseLiteralTypeNode() {\n const node = this.startNode();\n\n node.literal = (() => {\n switch (this.state.type) {\n case types$1.num:\n case types$1.bigint:\n case types$1.string:\n case types$1._true:\n case types$1._false:\n return this.parseExprAtom();\n\n default:\n throw this.unexpected();\n }\n })();\n\n return this.finishNode(node, \"TSLiteralType\");\n }\n\n tsParseTemplateLiteralType() {\n const node = this.startNode();\n node.literal = this.parseTemplate(false);\n return this.finishNode(node, \"TSLiteralType\");\n }\n\n parseTemplateSubstitution() {\n if (this.state.inType) return this.tsParseType();\n return super.parseTemplateSubstitution();\n }\n\n tsParseThisTypeOrThisTypePredicate() {\n const thisKeyword = this.tsParseThisTypeNode();\n\n if (this.isContextual(\"is\") && !this.hasPrecedingLineBreak()) {\n return this.tsParseThisTypePredicate(thisKeyword);\n } else {\n return thisKeyword;\n }\n }\n\n tsParseNonArrayType() {\n switch (this.state.type) {\n case types$1.name:\n case types$1._void:\n case types$1._null:\n {\n const type = this.match(types$1._void) ? \"TSVoidKeyword\" : this.match(types$1._null) ? \"TSNullKeyword\" : keywordTypeFromName(this.state.value);\n\n if (type !== undefined && this.lookaheadCharCode() !== 46) {\n const node = this.startNode();\n this.next();\n return this.finishNode(node, type);\n }\n\n return this.tsParseTypeReference();\n }\n\n case types$1.string:\n case types$1.num:\n case types$1.bigint:\n case types$1._true:\n case types$1._false:\n return this.tsParseLiteralTypeNode();\n\n case types$1.plusMin:\n if (this.state.value === \"-\") {\n const node = this.startNode();\n const nextToken = this.lookahead();\n\n if (nextToken.type !== types$1.num && nextToken.type !== types$1.bigint) {\n throw this.unexpected();\n }\n\n node.literal = this.parseMaybeUnary();\n return this.finishNode(node, \"TSLiteralType\");\n }\n\n break;\n\n case types$1._this:\n return this.tsParseThisTypeOrThisTypePredicate();\n\n case types$1._typeof:\n return this.tsParseTypeQuery();\n\n case types$1._import:\n return this.tsParseImportType();\n\n case types$1.braceL:\n return this.tsLookAhead(this.tsIsStartOfMappedType.bind(this)) ? this.tsParseMappedType() : this.tsParseTypeLiteral();\n\n case types$1.bracketL:\n return this.tsParseTupleType();\n\n case types$1.parenL:\n return this.tsParseParenthesizedType();\n\n case types$1.backQuote:\n return this.tsParseTemplateLiteralType();\n }\n\n throw this.unexpected();\n }\n\n tsParseArrayTypeOrHigher() {\n let type = this.tsParseNonArrayType();\n\n while (!this.hasPrecedingLineBreak() && this.eat(types$1.bracketL)) {\n if (this.match(types$1.bracketR)) {\n const node = this.startNodeAtNode(type);\n node.elementType = type;\n this.expect(types$1.bracketR);\n type = this.finishNode(node, \"TSArrayType\");\n } else {\n const node = this.startNodeAtNode(type);\n node.objectType = type;\n node.indexType = this.tsParseType();\n this.expect(types$1.bracketR);\n type = this.finishNode(node, \"TSIndexedAccessType\");\n }\n }\n\n return type;\n }\n\n tsParseTypeOperator(operator) {\n const node = this.startNode();\n this.expectContextual(operator);\n node.operator = operator;\n node.typeAnnotation = this.tsParseTypeOperatorOrHigher();\n\n if (operator === \"readonly\") {\n this.tsCheckTypeAnnotationForReadOnly(node);\n }\n\n return this.finishNode(node, \"TSTypeOperator\");\n }\n\n tsCheckTypeAnnotationForReadOnly(node) {\n switch (node.typeAnnotation.type) {\n case \"TSTupleType\":\n case \"TSArrayType\":\n return;\n\n default:\n this.raise(node.start, TSErrors.UnexpectedReadonly);\n }\n }\n\n tsParseInferType() {\n const node = this.startNode();\n this.expectContextual(\"infer\");\n const typeParameter = this.startNode();\n typeParameter.name = this.parseIdentifierName(typeParameter.start);\n node.typeParameter = this.finishNode(typeParameter, \"TSTypeParameter\");\n return this.finishNode(node, \"TSInferType\");\n }\n\n tsParseTypeOperatorOrHigher() {\n const operator = [\"keyof\", \"unique\", \"readonly\"].find(kw => this.isContextual(kw));\n return operator ? this.tsParseTypeOperator(operator) : this.isContextual(\"infer\") ? this.tsParseInferType() : this.tsParseArrayTypeOrHigher();\n }\n\n tsParseUnionOrIntersectionType(kind, parseConstituentType, operator) {\n const node = this.startNode();\n const hasLeadingOperator = this.eat(operator);\n const types = [];\n\n do {\n types.push(parseConstituentType());\n } while (this.eat(operator));\n\n if (types.length === 1 && !hasLeadingOperator) {\n return types[0];\n }\n\n node.types = types;\n return this.finishNode(node, kind);\n }\n\n tsParseIntersectionTypeOrHigher() {\n return this.tsParseUnionOrIntersectionType(\"TSIntersectionType\", this.tsParseTypeOperatorOrHigher.bind(this), types$1.bitwiseAND);\n }\n\n tsParseUnionTypeOrHigher() {\n return this.tsParseUnionOrIntersectionType(\"TSUnionType\", this.tsParseIntersectionTypeOrHigher.bind(this), types$1.bitwiseOR);\n }\n\n tsIsStartOfFunctionType() {\n if (this.isRelational(\"<\")) {\n return true;\n }\n\n return this.match(types$1.parenL) && this.tsLookAhead(this.tsIsUnambiguouslyStartOfFunctionType.bind(this));\n }\n\n tsSkipParameterStart() {\n if (this.match(types$1.name) || this.match(types$1._this)) {\n this.next();\n return true;\n }\n\n if (this.match(types$1.braceL)) {\n let braceStackCounter = 1;\n this.next();\n\n while (braceStackCounter > 0) {\n if (this.match(types$1.braceL)) {\n ++braceStackCounter;\n } else if (this.match(types$1.braceR)) {\n --braceStackCounter;\n }\n\n this.next();\n }\n\n return true;\n }\n\n if (this.match(types$1.bracketL)) {\n let braceStackCounter = 1;\n this.next();\n\n while (braceStackCounter > 0) {\n if (this.match(types$1.bracketL)) {\n ++braceStackCounter;\n } else if (this.match(types$1.bracketR)) {\n --braceStackCounter;\n }\n\n this.next();\n }\n\n return true;\n }\n\n return false;\n }\n\n tsIsUnambiguouslyStartOfFunctionType() {\n this.next();\n\n if (this.match(types$1.parenR) || this.match(types$1.ellipsis)) {\n return true;\n }\n\n if (this.tsSkipParameterStart()) {\n if (this.match(types$1.colon) || this.match(types$1.comma) || this.match(types$1.question) || this.match(types$1.eq)) {\n return true;\n }\n\n if (this.match(types$1.parenR)) {\n this.next();\n\n if (this.match(types$1.arrow)) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n tsParseTypeOrTypePredicateAnnotation(returnToken) {\n return this.tsInType(() => {\n const t = this.startNode();\n this.expect(returnToken);\n const node = this.startNode();\n const asserts = !!this.tsTryParse(this.tsParseTypePredicateAsserts.bind(this));\n\n if (asserts && this.match(types$1._this)) {\n let thisTypePredicate = this.tsParseThisTypeOrThisTypePredicate();\n\n if (thisTypePredicate.type === \"TSThisType\") {\n node.parameterName = thisTypePredicate;\n node.asserts = true;\n node.typeAnnotation = null;\n thisTypePredicate = this.finishNode(node, \"TSTypePredicate\");\n } else {\n this.resetStartLocationFromNode(thisTypePredicate, node);\n thisTypePredicate.asserts = true;\n }\n\n t.typeAnnotation = thisTypePredicate;\n return this.finishNode(t, \"TSTypeAnnotation\");\n }\n\n const typePredicateVariable = this.tsIsIdentifier() && this.tsTryParse(this.tsParseTypePredicatePrefix.bind(this));\n\n if (!typePredicateVariable) {\n if (!asserts) {\n return this.tsParseTypeAnnotation(false, t);\n }\n\n node.parameterName = this.parseIdentifier();\n node.asserts = asserts;\n node.typeAnnotation = null;\n t.typeAnnotation = this.finishNode(node, \"TSTypePredicate\");\n return this.finishNode(t, \"TSTypeAnnotation\");\n }\n\n const type = this.tsParseTypeAnnotation(false);\n node.parameterName = typePredicateVariable;\n node.typeAnnotation = type;\n node.asserts = asserts;\n t.typeAnnotation = this.finishNode(node, \"TSTypePredicate\");\n return this.finishNode(t, \"TSTypeAnnotation\");\n });\n }\n\n tsTryParseTypeOrTypePredicateAnnotation() {\n return this.match(types$1.colon) ? this.tsParseTypeOrTypePredicateAnnotation(types$1.colon) : undefined;\n }\n\n tsTryParseTypeAnnotation() {\n return this.match(types$1.colon) ? this.tsParseTypeAnnotation() : undefined;\n }\n\n tsTryParseType() {\n return this.tsEatThenParseType(types$1.colon);\n }\n\n tsParseTypePredicatePrefix() {\n const id = this.parseIdentifier();\n\n if (this.isContextual(\"is\") && !this.hasPrecedingLineBreak()) {\n this.next();\n return id;\n }\n }\n\n tsParseTypePredicateAsserts() {\n if (!this.match(types$1.name) || this.state.value !== \"asserts\" || this.hasPrecedingLineBreak()) {\n return false;\n }\n\n const containsEsc = this.state.containsEsc;\n this.next();\n\n if (!this.match(types$1.name) && !this.match(types$1._this)) {\n return false;\n }\n\n if (containsEsc) {\n this.raise(this.state.lastTokStart, ErrorMessages.InvalidEscapedReservedWord, \"asserts\");\n }\n\n return true;\n }\n\n tsParseTypeAnnotation(eatColon = true, t = this.startNode()) {\n this.tsInType(() => {\n if (eatColon) this.expect(types$1.colon);\n t.typeAnnotation = this.tsParseType();\n });\n return this.finishNode(t, \"TSTypeAnnotation\");\n }\n\n tsParseType() {\n assert(this.state.inType);\n const type = this.tsParseNonConditionalType();\n\n if (this.hasPrecedingLineBreak() || !this.eat(types$1._extends)) {\n return type;\n }\n\n const node = this.startNodeAtNode(type);\n node.checkType = type;\n node.extendsType = this.tsParseNonConditionalType();\n this.expect(types$1.question);\n node.trueType = this.tsParseType();\n this.expect(types$1.colon);\n node.falseType = this.tsParseType();\n return this.finishNode(node, \"TSConditionalType\");\n }\n\n isAbstractConstructorSignature() {\n return this.isContextual(\"abstract\") && this.lookahead().type === types$1._new;\n }\n\n tsParseNonConditionalType() {\n if (this.tsIsStartOfFunctionType()) {\n return this.tsParseFunctionOrConstructorType(\"TSFunctionType\");\n }\n\n if (this.match(types$1._new)) {\n return this.tsParseFunctionOrConstructorType(\"TSConstructorType\");\n } else if (this.isAbstractConstructorSignature()) {\n return this.tsParseFunctionOrConstructorType(\"TSConstructorType\", true);\n }\n\n return this.tsParseUnionTypeOrHigher();\n }\n\n tsParseTypeAssertion() {\n const node = this.startNode();\n\n const _const = this.tsTryNextParseConstantContext();\n\n node.typeAnnotation = _const || this.tsNextThenParseType();\n this.expectRelational(\">\");\n node.expression = this.parseMaybeUnary();\n return this.finishNode(node, \"TSTypeAssertion\");\n }\n\n tsParseHeritageClause(descriptor) {\n const originalStart = this.state.start;\n const delimitedList = this.tsParseDelimitedList(\"HeritageClauseElement\", this.tsParseExpressionWithTypeArguments.bind(this));\n\n if (!delimitedList.length) {\n this.raise(originalStart, TSErrors.EmptyHeritageClauseType, descriptor);\n }\n\n return delimitedList;\n }\n\n tsParseExpressionWithTypeArguments() {\n const node = this.startNode();\n node.expression = this.tsParseEntityName(false);\n\n if (this.isRelational(\"<\")) {\n node.typeParameters = this.tsParseTypeArguments();\n }\n\n return this.finishNode(node, \"TSExpressionWithTypeArguments\");\n }\n\n tsParseInterfaceDeclaration(node) {\n node.id = this.parseIdentifier();\n this.checkLVal(node.id, \"typescript interface declaration\", BIND_TS_INTERFACE);\n node.typeParameters = this.tsTryParseTypeParameters();\n\n if (this.eat(types$1._extends)) {\n node.extends = this.tsParseHeritageClause(\"extends\");\n }\n\n const body = this.startNode();\n body.body = this.tsInType(this.tsParseObjectTypeMembers.bind(this));\n node.body = this.finishNode(body, \"TSInterfaceBody\");\n return this.finishNode(node, \"TSInterfaceDeclaration\");\n }\n\n tsParseTypeAliasDeclaration(node) {\n node.id = this.parseIdentifier();\n this.checkLVal(node.id, \"typescript type alias\", BIND_TS_TYPE);\n node.typeParameters = this.tsTryParseTypeParameters();\n node.typeAnnotation = this.tsInType(() => {\n this.expect(types$1.eq);\n\n if (this.isContextual(\"intrinsic\") && this.lookahead().type !== types$1.dot) {\n const node = this.startNode();\n this.next();\n return this.finishNode(node, \"TSIntrinsicKeyword\");\n }\n\n return this.tsParseType();\n });\n this.semicolon();\n return this.finishNode(node, \"TSTypeAliasDeclaration\");\n }\n\n tsInNoContext(cb) {\n const oldContext = this.state.context;\n this.state.context = [oldContext[0]];\n\n try {\n return cb();\n } finally {\n this.state.context = oldContext;\n }\n }\n\n tsInType(cb) {\n const oldInType = this.state.inType;\n this.state.inType = true;\n\n try {\n return cb();\n } finally {\n this.state.inType = oldInType;\n }\n }\n\n tsEatThenParseType(token) {\n return !this.match(token) ? undefined : this.tsNextThenParseType();\n }\n\n tsExpectThenParseType(token) {\n return this.tsDoThenParseType(() => this.expect(token));\n }\n\n tsNextThenParseType() {\n return this.tsDoThenParseType(() => this.next());\n }\n\n tsDoThenParseType(cb) {\n return this.tsInType(() => {\n cb();\n return this.tsParseType();\n });\n }\n\n tsParseEnumMember() {\n const node = this.startNode();\n node.id = this.match(types$1.string) ? this.parseExprAtom() : this.parseIdentifier(true);\n\n if (this.eat(types$1.eq)) {\n node.initializer = this.parseMaybeAssignAllowIn();\n }\n\n return this.finishNode(node, \"TSEnumMember\");\n }\n\n tsParseEnumDeclaration(node, isConst) {\n if (isConst) node.const = true;\n node.id = this.parseIdentifier();\n this.checkLVal(node.id, \"typescript enum declaration\", isConst ? BIND_TS_CONST_ENUM : BIND_TS_ENUM);\n this.expect(types$1.braceL);\n node.members = this.tsParseDelimitedList(\"EnumMembers\", this.tsParseEnumMember.bind(this));\n this.expect(types$1.braceR);\n return this.finishNode(node, \"TSEnumDeclaration\");\n }\n\n tsParseModuleBlock() {\n const node = this.startNode();\n this.scope.enter(SCOPE_OTHER);\n this.expect(types$1.braceL);\n this.parseBlockOrModuleBlockBody(node.body = [], undefined, true, types$1.braceR);\n this.scope.exit();\n return this.finishNode(node, \"TSModuleBlock\");\n }\n\n tsParseModuleOrNamespaceDeclaration(node, nested = false) {\n node.id = this.parseIdentifier();\n\n if (!nested) {\n this.checkLVal(node.id, \"module or namespace declaration\", BIND_TS_NAMESPACE);\n }\n\n if (this.eat(types$1.dot)) {\n const inner = this.startNode();\n this.tsParseModuleOrNamespaceDeclaration(inner, true);\n node.body = inner;\n } else {\n this.scope.enter(SCOPE_TS_MODULE);\n this.prodParam.enter(PARAM);\n node.body = this.tsParseModuleBlock();\n this.prodParam.exit();\n this.scope.exit();\n }\n\n return this.finishNode(node, \"TSModuleDeclaration\");\n }\n\n tsParseAmbientExternalModuleDeclaration(node) {\n if (this.isContextual(\"global\")) {\n node.global = true;\n node.id = this.parseIdentifier();\n } else if (this.match(types$1.string)) {\n node.id = this.parseExprAtom();\n } else {\n this.unexpected();\n }\n\n if (this.match(types$1.braceL)) {\n this.scope.enter(SCOPE_TS_MODULE);\n this.prodParam.enter(PARAM);\n node.body = this.tsParseModuleBlock();\n this.prodParam.exit();\n this.scope.exit();\n } else {\n this.semicolon();\n }\n\n return this.finishNode(node, \"TSModuleDeclaration\");\n }\n\n tsParseImportEqualsDeclaration(node, isExport) {\n node.isExport = isExport || false;\n node.id = this.parseIdentifier();\n this.checkLVal(node.id, \"import equals declaration\", BIND_LEXICAL);\n this.expect(types$1.eq);\n const moduleReference = this.tsParseModuleReference();\n\n if (node.importKind === \"type\" && moduleReference.type !== \"TSExternalModuleReference\") {\n this.raise(moduleReference.start, TSErrors.ImportAliasHasImportType);\n }\n\n node.moduleReference = moduleReference;\n this.semicolon();\n return this.finishNode(node, \"TSImportEqualsDeclaration\");\n }\n\n tsIsExternalModuleReference() {\n return this.isContextual(\"require\") && this.lookaheadCharCode() === 40;\n }\n\n tsParseModuleReference() {\n return this.tsIsExternalModuleReference() ? this.tsParseExternalModuleReference() : this.tsParseEntityName(false);\n }\n\n tsParseExternalModuleReference() {\n const node = this.startNode();\n this.expectContextual(\"require\");\n this.expect(types$1.parenL);\n\n if (!this.match(types$1.string)) {\n throw this.unexpected();\n }\n\n node.expression = this.parseExprAtom();\n this.expect(types$1.parenR);\n return this.finishNode(node, \"TSExternalModuleReference\");\n }\n\n tsLookAhead(f) {\n const state = this.state.clone();\n const res = f();\n this.state = state;\n return res;\n }\n\n tsTryParseAndCatch(f) {\n const result = this.tryParse(abort => f() || abort());\n if (result.aborted || !result.node) return undefined;\n if (result.error) this.state = result.failState;\n return result.node;\n }\n\n tsTryParse(f) {\n const state = this.state.clone();\n const result = f();\n\n if (result !== undefined && result !== false) {\n return result;\n } else {\n this.state = state;\n return undefined;\n }\n }\n\n tsTryParseDeclare(nany) {\n if (this.isLineTerminator()) {\n return;\n }\n\n let starttype = this.state.type;\n let kind;\n\n if (this.isContextual(\"let\")) {\n starttype = types$1._var;\n kind = \"let\";\n }\n\n return this.tsInAmbientContext(() => {\n switch (starttype) {\n case types$1._function:\n nany.declare = true;\n return this.parseFunctionStatement(nany, false, true);\n\n case types$1._class:\n nany.declare = true;\n return this.parseClass(nany, true, false);\n\n case types$1._const:\n if (this.match(types$1._const) && this.isLookaheadContextual(\"enum\")) {\n this.expect(types$1._const);\n this.expectContextual(\"enum\");\n return this.tsParseEnumDeclaration(nany, true);\n }\n\n case types$1._var:\n kind = kind || this.state.value;\n return this.parseVarStatement(nany, kind);\n\n case types$1.name:\n {\n const value = this.state.value;\n\n if (value === \"global\") {\n return this.tsParseAmbientExternalModuleDeclaration(nany);\n } else {\n return this.tsParseDeclaration(nany, value, true);\n }\n }\n }\n });\n }\n\n tsTryParseExportDeclaration() {\n return this.tsParseDeclaration(this.startNode(), this.state.value, true);\n }\n\n tsParseExpressionStatement(node, expr) {\n switch (expr.name) {\n case \"declare\":\n {\n const declaration = this.tsTryParseDeclare(node);\n\n if (declaration) {\n declaration.declare = true;\n return declaration;\n }\n\n break;\n }\n\n case \"global\":\n if (this.match(types$1.braceL)) {\n this.scope.enter(SCOPE_TS_MODULE);\n this.prodParam.enter(PARAM);\n const mod = node;\n mod.global = true;\n mod.id = expr;\n mod.body = this.tsParseModuleBlock();\n this.scope.exit();\n this.prodParam.exit();\n return this.finishNode(mod, \"TSModuleDeclaration\");\n }\n\n break;\n\n default:\n return this.tsParseDeclaration(node, expr.name, false);\n }\n }\n\n tsParseDeclaration(node, value, next) {\n switch (value) {\n case \"abstract\":\n if (this.tsCheckLineTerminator(next) && (this.match(types$1._class) || this.match(types$1.name))) {\n return this.tsParseAbstractDeclaration(node);\n }\n\n break;\n\n case \"enum\":\n if (next || this.match(types$1.name)) {\n if (next) this.next();\n return this.tsParseEnumDeclaration(node, false);\n }\n\n break;\n\n case \"interface\":\n if (this.tsCheckLineTerminator(next) && this.match(types$1.name)) {\n return this.tsParseInterfaceDeclaration(node);\n }\n\n break;\n\n case \"module\":\n if (this.tsCheckLineTerminator(next)) {\n if (this.match(types$1.string)) {\n return this.tsParseAmbientExternalModuleDeclaration(node);\n } else if (this.match(types$1.name)) {\n return this.tsParseModuleOrNamespaceDeclaration(node);\n }\n }\n\n break;\n\n case \"namespace\":\n if (this.tsCheckLineTerminator(next) && this.match(types$1.name)) {\n return this.tsParseModuleOrNamespaceDeclaration(node);\n }\n\n break;\n\n case \"type\":\n if (this.tsCheckLineTerminator(next) && this.match(types$1.name)) {\n return this.tsParseTypeAliasDeclaration(node);\n }\n\n break;\n }\n }\n\n tsCheckLineTerminator(next) {\n if (next) {\n if (this.hasFollowingLineBreak()) return false;\n this.next();\n return true;\n }\n\n return !this.isLineTerminator();\n }\n\n tsTryParseGenericAsyncArrowFunction(startPos, startLoc) {\n if (!this.isRelational(\"<\")) {\n return undefined;\n }\n\n const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n this.state.maybeInArrowParameters = true;\n const res = this.tsTryParseAndCatch(() => {\n const node = this.startNodeAt(startPos, startLoc);\n node.typeParameters = this.tsParseTypeParameters();\n super.parseFunctionParams(node);\n node.returnType = this.tsTryParseTypeOrTypePredicateAnnotation();\n this.expect(types$1.arrow);\n return node;\n });\n this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n\n if (!res) {\n return undefined;\n }\n\n return this.parseArrowExpression(res, null, true);\n }\n\n tsParseTypeArguments() {\n const node = this.startNode();\n node.params = this.tsInType(() => this.tsInNoContext(() => {\n this.expectRelational(\"<\");\n return this.tsParseDelimitedList(\"TypeParametersOrArguments\", this.tsParseType.bind(this));\n }));\n\n if (node.params.length === 0) {\n this.raise(node.start, TSErrors.EmptyTypeArguments);\n }\n\n this.expectRelational(\">\");\n return this.finishNode(node, \"TSTypeParameterInstantiation\");\n }\n\n tsIsDeclarationStart() {\n if (this.match(types$1.name)) {\n switch (this.state.value) {\n case \"abstract\":\n case \"declare\":\n case \"enum\":\n case \"interface\":\n case \"module\":\n case \"namespace\":\n case \"type\":\n return true;\n }\n }\n\n return false;\n }\n\n isExportDefaultSpecifier() {\n if (this.tsIsDeclarationStart()) return false;\n return super.isExportDefaultSpecifier();\n }\n\n parseAssignableListItem(allowModifiers, decorators) {\n const startPos = this.state.start;\n const startLoc = this.state.startLoc;\n let accessibility;\n let readonly = false;\n let override = false;\n\n if (allowModifiers !== undefined) {\n const modified = {};\n this.tsParseModifiers(modified, [\"public\", \"private\", \"protected\", \"override\", \"readonly\"]);\n accessibility = modified.accessibility;\n override = modified.override;\n readonly = modified.readonly;\n\n if (allowModifiers === false && (accessibility || readonly || override)) {\n this.raise(startPos, TSErrors.UnexpectedParameterModifier);\n }\n }\n\n const left = this.parseMaybeDefault();\n this.parseAssignableListItemTypes(left);\n const elt = this.parseMaybeDefault(left.start, left.loc.start, left);\n\n if (accessibility || readonly || override) {\n const pp = this.startNodeAt(startPos, startLoc);\n\n if (decorators.length) {\n pp.decorators = decorators;\n }\n\n if (accessibility) pp.accessibility = accessibility;\n if (readonly) pp.readonly = readonly;\n if (override) pp.override = override;\n\n if (elt.type !== \"Identifier\" && elt.type !== \"AssignmentPattern\") {\n this.raise(pp.start, TSErrors.UnsupportedParameterPropertyKind);\n }\n\n pp.parameter = elt;\n return this.finishNode(pp, \"TSParameterProperty\");\n }\n\n if (decorators.length) {\n left.decorators = decorators;\n }\n\n return elt;\n }\n\n parseFunctionBodyAndFinish(node, type, isMethod = false) {\n if (this.match(types$1.colon)) {\n node.returnType = this.tsParseTypeOrTypePredicateAnnotation(types$1.colon);\n }\n\n const bodilessType = type === \"FunctionDeclaration\" ? \"TSDeclareFunction\" : type === \"ClassMethod\" ? \"TSDeclareMethod\" : undefined;\n\n if (bodilessType && !this.match(types$1.braceL) && this.isLineTerminator()) {\n this.finishNode(node, bodilessType);\n return;\n }\n\n if (bodilessType === \"TSDeclareFunction\" && this.state.isAmbientContext) {\n this.raise(node.start, TSErrors.DeclareFunctionHasImplementation);\n\n if (node.declare) {\n super.parseFunctionBodyAndFinish(node, bodilessType, isMethod);\n return;\n }\n }\n\n super.parseFunctionBodyAndFinish(node, type, isMethod);\n }\n\n registerFunctionStatementId(node) {\n if (!node.body && node.id) {\n this.checkLVal(node.id, \"function name\", BIND_TS_AMBIENT);\n } else {\n super.registerFunctionStatementId(...arguments);\n }\n }\n\n tsCheckForInvalidTypeCasts(items) {\n items.forEach(node => {\n if ((node == null ? void 0 : node.type) === \"TSTypeCastExpression\") {\n this.raise(node.typeAnnotation.start, TSErrors.UnexpectedTypeAnnotation);\n }\n });\n }\n\n toReferencedList(exprList, isInParens) {\n this.tsCheckForInvalidTypeCasts(exprList);\n return exprList;\n }\n\n parseArrayLike(...args) {\n const node = super.parseArrayLike(...args);\n\n if (node.type === \"ArrayExpression\") {\n this.tsCheckForInvalidTypeCasts(node.elements);\n }\n\n return node;\n }\n\n parseSubscript(base, startPos, startLoc, noCalls, state) {\n if (!this.hasPrecedingLineBreak() && this.match(types$1.bang)) {\n this.state.exprAllowed = false;\n this.next();\n const nonNullExpression = this.startNodeAt(startPos, startLoc);\n nonNullExpression.expression = base;\n return this.finishNode(nonNullExpression, \"TSNonNullExpression\");\n }\n\n if (this.isRelational(\"<\")) {\n const result = this.tsTryParseAndCatch(() => {\n if (!noCalls && this.atPossibleAsyncArrow(base)) {\n const asyncArrowFn = this.tsTryParseGenericAsyncArrowFunction(startPos, startLoc);\n\n if (asyncArrowFn) {\n return asyncArrowFn;\n }\n }\n\n const node = this.startNodeAt(startPos, startLoc);\n node.callee = base;\n const typeArguments = this.tsParseTypeArguments();\n\n if (typeArguments) {\n if (!noCalls && this.eat(types$1.parenL)) {\n node.arguments = this.parseCallExpressionArguments(types$1.parenR, false);\n this.tsCheckForInvalidTypeCasts(node.arguments);\n node.typeParameters = typeArguments;\n\n if (state.optionalChainMember) {\n node.optional = false;\n }\n\n return this.finishCallExpression(node, state.optionalChainMember);\n } else if (this.match(types$1.backQuote)) {\n const result = this.parseTaggedTemplateExpression(base, startPos, startLoc, state);\n result.typeParameters = typeArguments;\n return result;\n }\n }\n\n this.unexpected();\n });\n if (result) return result;\n }\n\n return super.parseSubscript(base, startPos, startLoc, noCalls, state);\n }\n\n parseNewArguments(node) {\n if (this.isRelational(\"<\")) {\n const typeParameters = this.tsTryParseAndCatch(() => {\n const args = this.tsParseTypeArguments();\n if (!this.match(types$1.parenL)) this.unexpected();\n return args;\n });\n\n if (typeParameters) {\n node.typeParameters = typeParameters;\n }\n }\n\n super.parseNewArguments(node);\n }\n\n parseExprOp(left, leftStartPos, leftStartLoc, minPrec) {\n if (nonNull(types$1._in.binop) > minPrec && !this.hasPrecedingLineBreak() && this.isContextual(\"as\")) {\n const node = this.startNodeAt(leftStartPos, leftStartLoc);\n node.expression = left;\n\n const _const = this.tsTryNextParseConstantContext();\n\n if (_const) {\n node.typeAnnotation = _const;\n } else {\n node.typeAnnotation = this.tsNextThenParseType();\n }\n\n this.finishNode(node, \"TSAsExpression\");\n this.reScan_lt_gt();\n return this.parseExprOp(node, leftStartPos, leftStartLoc, minPrec);\n }\n\n return super.parseExprOp(left, leftStartPos, leftStartLoc, minPrec);\n }\n\n checkReservedWord(word, startLoc, checkKeywords, isBinding) {}\n\n checkDuplicateExports() {}\n\n parseImport(node) {\n node.importKind = \"value\";\n\n if (this.match(types$1.name) || this.match(types$1.star) || this.match(types$1.braceL)) {\n let ahead = this.lookahead();\n\n if (this.isContextual(\"type\") && ahead.type !== types$1.comma && !(ahead.type === types$1.name && ahead.value === \"from\") && ahead.type !== types$1.eq) {\n node.importKind = \"type\";\n this.next();\n ahead = this.lookahead();\n }\n\n if (this.match(types$1.name) && ahead.type === types$1.eq) {\n return this.tsParseImportEqualsDeclaration(node);\n }\n }\n\n const importNode = super.parseImport(node);\n\n if (importNode.importKind === \"type\" && importNode.specifiers.length > 1 && importNode.specifiers[0].type === \"ImportDefaultSpecifier\") {\n this.raise(importNode.start, TSErrors.TypeImportCannotSpecifyDefaultAndNamed);\n }\n\n return importNode;\n }\n\n parseExport(node) {\n if (this.match(types$1._import)) {\n this.next();\n\n if (this.isContextual(\"type\") && this.lookaheadCharCode() !== 61) {\n node.importKind = \"type\";\n this.next();\n } else {\n node.importKind = \"value\";\n }\n\n return this.tsParseImportEqualsDeclaration(node, true);\n } else if (this.eat(types$1.eq)) {\n const assign = node;\n assign.expression = this.parseExpression();\n this.semicolon();\n return this.finishNode(assign, \"TSExportAssignment\");\n } else if (this.eatContextual(\"as\")) {\n const decl = node;\n this.expectContextual(\"namespace\");\n decl.id = this.parseIdentifier();\n this.semicolon();\n return this.finishNode(decl, \"TSNamespaceExportDeclaration\");\n } else {\n if (this.isContextual(\"type\") && this.lookahead().type === types$1.braceL) {\n this.next();\n node.exportKind = \"type\";\n } else {\n node.exportKind = \"value\";\n }\n\n return super.parseExport(node);\n }\n }\n\n isAbstractClass() {\n return this.isContextual(\"abstract\") && this.lookahead().type === types$1._class;\n }\n\n parseExportDefaultExpression() {\n if (this.isAbstractClass()) {\n const cls = this.startNode();\n this.next();\n cls.abstract = true;\n this.parseClass(cls, true, true);\n return cls;\n }\n\n if (this.state.value === \"interface\") {\n const result = this.tsParseDeclaration(this.startNode(), this.state.value, true);\n if (result) return result;\n }\n\n return super.parseExportDefaultExpression();\n }\n\n parseStatementContent(context, topLevel) {\n if (this.state.type === types$1._const) {\n const ahead = this.lookahead();\n\n if (ahead.type === types$1.name && ahead.value === \"enum\") {\n const node = this.startNode();\n this.expect(types$1._const);\n this.expectContextual(\"enum\");\n return this.tsParseEnumDeclaration(node, true);\n }\n }\n\n return super.parseStatementContent(context, topLevel);\n }\n\n parseAccessModifier() {\n return this.tsParseModifier([\"public\", \"protected\", \"private\"]);\n }\n\n tsHasSomeModifiers(member, modifiers) {\n return modifiers.some(modifier => {\n if (tsIsAccessModifier(modifier)) {\n return member.accessibility === modifier;\n }\n\n return !!member[modifier];\n });\n }\n\n parseClassMember(classBody, member, state) {\n const invalidModifersForStaticBlocks = [\"declare\", \"private\", \"public\", \"protected\", \"override\", \"abstract\", \"readonly\"];\n this.tsParseModifiers(member, invalidModifersForStaticBlocks.concat([\"static\"]));\n\n const callParseClassMemberWithIsStatic = () => {\n const isStatic = !!member.static;\n\n if (isStatic && this.eat(types$1.braceL)) {\n if (this.tsHasSomeModifiers(member, invalidModifersForStaticBlocks)) {\n this.raise(this.state.pos, TSErrors.StaticBlockCannotHaveModifier);\n }\n\n this.parseClassStaticBlock(classBody, member);\n } else {\n this.parseClassMemberWithIsStatic(classBody, member, state, isStatic);\n }\n };\n\n if (member.declare) {\n this.tsInAmbientContext(callParseClassMemberWithIsStatic);\n } else {\n callParseClassMemberWithIsStatic();\n }\n }\n\n parseClassMemberWithIsStatic(classBody, member, state, isStatic) {\n const idx = this.tsTryParseIndexSignature(member);\n\n if (idx) {\n classBody.body.push(idx);\n\n if (member.abstract) {\n this.raise(member.start, TSErrors.IndexSignatureHasAbstract);\n }\n\n if (member.accessibility) {\n this.raise(member.start, TSErrors.IndexSignatureHasAccessibility, member.accessibility);\n }\n\n if (member.declare) {\n this.raise(member.start, TSErrors.IndexSignatureHasDeclare);\n }\n\n if (member.override) {\n this.raise(member.start, TSErrors.IndexSignatureHasOverride);\n }\n\n return;\n }\n\n if (!this.state.inAbstractClass && member.abstract) {\n this.raise(member.start, TSErrors.NonAbstractClassHasAbstractMethod);\n }\n\n if (member.override) {\n if (!state.hadSuperClass) {\n this.raise(member.start, TSErrors.OverrideNotInSubClass);\n }\n }\n\n super.parseClassMemberWithIsStatic(classBody, member, state, isStatic);\n }\n\n parsePostMemberNameModifiers(methodOrProp) {\n const optional = this.eat(types$1.question);\n if (optional) methodOrProp.optional = true;\n\n if (methodOrProp.readonly && this.match(types$1.parenL)) {\n this.raise(methodOrProp.start, TSErrors.ClassMethodHasReadonly);\n }\n\n if (methodOrProp.declare && this.match(types$1.parenL)) {\n this.raise(methodOrProp.start, TSErrors.ClassMethodHasDeclare);\n }\n }\n\n parseExpressionStatement(node, expr) {\n const decl = expr.type === \"Identifier\" ? this.tsParseExpressionStatement(node, expr) : undefined;\n return decl || super.parseExpressionStatement(node, expr);\n }\n\n shouldParseExportDeclaration() {\n if (this.tsIsDeclarationStart()) return true;\n return super.shouldParseExportDeclaration();\n }\n\n parseConditional(expr, startPos, startLoc, refExpressionErrors) {\n if (!this.state.maybeInArrowParameters || !this.match(types$1.question)) {\n return super.parseConditional(expr, startPos, startLoc, refExpressionErrors);\n }\n\n const result = this.tryParse(() => super.parseConditional(expr, startPos, startLoc));\n\n if (!result.node) {\n if (result.error) {\n super.setOptionalParametersError(refExpressionErrors, result.error);\n }\n\n return expr;\n }\n\n if (result.error) this.state = result.failState;\n return result.node;\n }\n\n parseParenItem(node, startPos, startLoc) {\n node = super.parseParenItem(node, startPos, startLoc);\n\n if (this.eat(types$1.question)) {\n node.optional = true;\n this.resetEndLocation(node);\n }\n\n if (this.match(types$1.colon)) {\n const typeCastNode = this.startNodeAt(startPos, startLoc);\n typeCastNode.expression = node;\n typeCastNode.typeAnnotation = this.tsParseTypeAnnotation();\n return this.finishNode(typeCastNode, \"TSTypeCastExpression\");\n }\n\n return node;\n }\n\n parseExportDeclaration(node) {\n const startPos = this.state.start;\n const startLoc = this.state.startLoc;\n const isDeclare = this.eatContextual(\"declare\");\n\n if (isDeclare && (this.isContextual(\"declare\") || !this.shouldParseExportDeclaration())) {\n throw this.raise(this.state.start, TSErrors.ExpectedAmbientAfterExportDeclare);\n }\n\n let declaration;\n\n if (this.match(types$1.name)) {\n declaration = this.tsTryParseExportDeclaration();\n }\n\n if (!declaration) {\n declaration = super.parseExportDeclaration(node);\n }\n\n if (declaration && (declaration.type === \"TSInterfaceDeclaration\" || declaration.type === \"TSTypeAliasDeclaration\" || isDeclare)) {\n node.exportKind = \"type\";\n }\n\n if (declaration && isDeclare) {\n this.resetStartLocation(declaration, startPos, startLoc);\n declaration.declare = true;\n }\n\n return declaration;\n }\n\n parseClassId(node, isStatement, optionalId) {\n if ((!isStatement || optionalId) && this.isContextual(\"implements\")) {\n return;\n }\n\n super.parseClassId(node, isStatement, optionalId, node.declare ? BIND_TS_AMBIENT : BIND_CLASS);\n const typeParameters = this.tsTryParseTypeParameters();\n if (typeParameters) node.typeParameters = typeParameters;\n }\n\n parseClassPropertyAnnotation(node) {\n if (!node.optional && this.eat(types$1.bang)) {\n node.definite = true;\n }\n\n const type = this.tsTryParseTypeAnnotation();\n if (type) node.typeAnnotation = type;\n }\n\n parseClassProperty(node) {\n this.parseClassPropertyAnnotation(node);\n\n if (this.state.isAmbientContext && this.match(types$1.eq)) {\n this.raise(this.state.start, TSErrors.DeclareClassFieldHasInitializer);\n }\n\n return super.parseClassProperty(node);\n }\n\n parseClassPrivateProperty(node) {\n if (node.abstract) {\n this.raise(node.start, TSErrors.PrivateElementHasAbstract);\n }\n\n if (node.accessibility) {\n this.raise(node.start, TSErrors.PrivateElementHasAccessibility, node.accessibility);\n }\n\n this.parseClassPropertyAnnotation(node);\n return super.parseClassPrivateProperty(node);\n }\n\n pushClassMethod(classBody, method, isGenerator, isAsync, isConstructor, allowsDirectSuper) {\n const typeParameters = this.tsTryParseTypeParameters();\n\n if (typeParameters && isConstructor) {\n this.raise(typeParameters.start, TSErrors.ConstructorHasTypeParameters);\n }\n\n if (method.declare && (method.kind === \"get\" || method.kind === \"set\")) {\n this.raise(method.start, TSErrors.DeclareAccessor, method.kind);\n }\n\n if (typeParameters) method.typeParameters = typeParameters;\n super.pushClassMethod(classBody, method, isGenerator, isAsync, isConstructor, allowsDirectSuper);\n }\n\n pushClassPrivateMethod(classBody, method, isGenerator, isAsync) {\n const typeParameters = this.tsTryParseTypeParameters();\n if (typeParameters) method.typeParameters = typeParameters;\n super.pushClassPrivateMethod(classBody, method, isGenerator, isAsync);\n }\n\n parseClassSuper(node) {\n super.parseClassSuper(node);\n\n if (node.superClass && this.isRelational(\"<\")) {\n node.superTypeParameters = this.tsParseTypeArguments();\n }\n\n if (this.eatContextual(\"implements\")) {\n node.implements = this.tsParseHeritageClause(\"implements\");\n }\n }\n\n parseObjPropValue(prop, ...args) {\n const typeParameters = this.tsTryParseTypeParameters();\n if (typeParameters) prop.typeParameters = typeParameters;\n super.parseObjPropValue(prop, ...args);\n }\n\n parseFunctionParams(node, allowModifiers) {\n const typeParameters = this.tsTryParseTypeParameters();\n if (typeParameters) node.typeParameters = typeParameters;\n super.parseFunctionParams(node, allowModifiers);\n }\n\n parseVarId(decl, kind) {\n super.parseVarId(decl, kind);\n\n if (decl.id.type === \"Identifier\" && this.eat(types$1.bang)) {\n decl.definite = true;\n }\n\n const type = this.tsTryParseTypeAnnotation();\n\n if (type) {\n decl.id.typeAnnotation = type;\n this.resetEndLocation(decl.id);\n }\n }\n\n parseAsyncArrowFromCallExpression(node, call) {\n if (this.match(types$1.colon)) {\n node.returnType = this.tsParseTypeAnnotation();\n }\n\n return super.parseAsyncArrowFromCallExpression(node, call);\n }\n\n parseMaybeAssign(...args) {\n var _jsx, _jsx2, _typeCast, _jsx3, _typeCast2, _jsx4, _typeCast3;\n\n let state;\n let jsx;\n let typeCast;\n\n if (this.hasPlugin(\"jsx\") && (this.match(types$1.jsxTagStart) || this.isRelational(\"<\"))) {\n state = this.state.clone();\n jsx = this.tryParse(() => super.parseMaybeAssign(...args), state);\n if (!jsx.error) return jsx.node;\n const {\n context\n } = this.state;\n\n if (context[context.length - 1] === types.j_oTag) {\n context.length -= 2;\n } else if (context[context.length - 1] === types.j_expr) {\n context.length -= 1;\n }\n }\n\n if (!((_jsx = jsx) != null && _jsx.error) && !this.isRelational(\"<\")) {\n return super.parseMaybeAssign(...args);\n }\n\n let typeParameters;\n state = state || this.state.clone();\n const arrow = this.tryParse(abort => {\n var _expr$extra, _typeParameters;\n\n typeParameters = this.tsParseTypeParameters();\n const expr = super.parseMaybeAssign(...args);\n\n if (expr.type !== \"ArrowFunctionExpression\" || (_expr$extra = expr.extra) != null && _expr$extra.parenthesized) {\n abort();\n }\n\n if (((_typeParameters = typeParameters) == null ? void 0 : _typeParameters.params.length) !== 0) {\n this.resetStartLocationFromNode(expr, typeParameters);\n }\n\n expr.typeParameters = typeParameters;\n return expr;\n }, state);\n if (!arrow.error && !arrow.aborted) return arrow.node;\n\n if (!jsx) {\n assert(!this.hasPlugin(\"jsx\"));\n typeCast = this.tryParse(() => super.parseMaybeAssign(...args), state);\n if (!typeCast.error) return typeCast.node;\n }\n\n if ((_jsx2 = jsx) != null && _jsx2.node) {\n this.state = jsx.failState;\n return jsx.node;\n }\n\n if (arrow.node) {\n this.state = arrow.failState;\n return arrow.node;\n }\n\n if ((_typeCast = typeCast) != null && _typeCast.node) {\n this.state = typeCast.failState;\n return typeCast.node;\n }\n\n if ((_jsx3 = jsx) != null && _jsx3.thrown) throw jsx.error;\n if (arrow.thrown) throw arrow.error;\n if ((_typeCast2 = typeCast) != null && _typeCast2.thrown) throw typeCast.error;\n throw ((_jsx4 = jsx) == null ? void 0 : _jsx4.error) || arrow.error || ((_typeCast3 = typeCast) == null ? void 0 : _typeCast3.error);\n }\n\n parseMaybeUnary(refExpressionErrors) {\n if (!this.hasPlugin(\"jsx\") && this.isRelational(\"<\")) {\n return this.tsParseTypeAssertion();\n } else {\n return super.parseMaybeUnary(refExpressionErrors);\n }\n }\n\n parseArrow(node) {\n if (this.match(types$1.colon)) {\n const result = this.tryParse(abort => {\n const returnType = this.tsParseTypeOrTypePredicateAnnotation(types$1.colon);\n if (this.canInsertSemicolon() || !this.match(types$1.arrow)) abort();\n return returnType;\n });\n if (result.aborted) return;\n\n if (!result.thrown) {\n if (result.error) this.state = result.failState;\n node.returnType = result.node;\n }\n }\n\n return super.parseArrow(node);\n }\n\n parseAssignableListItemTypes(param) {\n if (this.eat(types$1.question)) {\n if (param.type !== \"Identifier\" && !this.state.isAmbientContext && !this.state.inType) {\n this.raise(param.start, TSErrors.PatternIsOptional);\n }\n\n param.optional = true;\n }\n\n const type = this.tsTryParseTypeAnnotation();\n if (type) param.typeAnnotation = type;\n this.resetEndLocation(param);\n return param;\n }\n\n toAssignable(node, isLHS = false) {\n switch (node.type) {\n case \"TSTypeCastExpression\":\n return super.toAssignable(this.typeCastToParameter(node), isLHS);\n\n case \"TSParameterProperty\":\n return super.toAssignable(node, isLHS);\n\n case \"ParenthesizedExpression\":\n return this.toAssignableParenthesizedExpression(node, isLHS);\n\n case \"TSAsExpression\":\n case \"TSNonNullExpression\":\n case \"TSTypeAssertion\":\n node.expression = this.toAssignable(node.expression, isLHS);\n return node;\n\n default:\n return super.toAssignable(node, isLHS);\n }\n }\n\n toAssignableParenthesizedExpression(node, isLHS) {\n switch (node.expression.type) {\n case \"TSAsExpression\":\n case \"TSNonNullExpression\":\n case \"TSTypeAssertion\":\n case \"ParenthesizedExpression\":\n node.expression = this.toAssignable(node.expression, isLHS);\n return node;\n\n default:\n return super.toAssignable(node, isLHS);\n }\n }\n\n checkLVal(expr, contextDescription, ...args) {\n var _expr$extra2;\n\n switch (expr.type) {\n case \"TSTypeCastExpression\":\n return;\n\n case \"TSParameterProperty\":\n this.checkLVal(expr.parameter, \"parameter property\", ...args);\n return;\n\n case \"TSAsExpression\":\n case \"TSTypeAssertion\":\n if (!args[0] && contextDescription !== \"parenthesized expression\" && !((_expr$extra2 = expr.extra) != null && _expr$extra2.parenthesized)) {\n this.raise(expr.start, ErrorMessages.InvalidLhs, contextDescription);\n break;\n }\n\n this.checkLVal(expr.expression, \"parenthesized expression\", ...args);\n return;\n\n case \"TSNonNullExpression\":\n this.checkLVal(expr.expression, contextDescription, ...args);\n return;\n\n default:\n super.checkLVal(expr, contextDescription, ...args);\n return;\n }\n }\n\n parseBindingAtom() {\n switch (this.state.type) {\n case types$1._this:\n return this.parseIdentifier(true);\n\n default:\n return super.parseBindingAtom();\n }\n }\n\n parseMaybeDecoratorArguments(expr) {\n if (this.isRelational(\"<\")) {\n const typeArguments = this.tsParseTypeArguments();\n\n if (this.match(types$1.parenL)) {\n const call = super.parseMaybeDecoratorArguments(expr);\n call.typeParameters = typeArguments;\n return call;\n }\n\n this.unexpected(this.state.start, types$1.parenL);\n }\n\n return super.parseMaybeDecoratorArguments(expr);\n }\n\n checkCommaAfterRest(close) {\n if (this.state.isAmbientContext && this.match(types$1.comma) && this.lookaheadCharCode() === close) {\n this.next();\n } else {\n super.checkCommaAfterRest(close);\n }\n }\n\n isClassMethod() {\n return this.isRelational(\"<\") || super.isClassMethod();\n }\n\n isClassProperty() {\n return this.match(types$1.bang) || this.match(types$1.colon) || super.isClassProperty();\n }\n\n parseMaybeDefault(...args) {\n const node = super.parseMaybeDefault(...args);\n\n if (node.type === \"AssignmentPattern\" && node.typeAnnotation && node.right.start < node.typeAnnotation.start) {\n this.raise(node.typeAnnotation.start, TSErrors.TypeAnnotationAfterAssign);\n }\n\n return node;\n }\n\n getTokenFromCode(code) {\n if (this.state.inType && (code === 62 || code === 60)) {\n return this.finishOp(types$1.relational, 1);\n } else {\n return super.getTokenFromCode(code);\n }\n }\n\n reScan_lt_gt() {\n if (this.match(types$1.relational)) {\n const code = this.input.charCodeAt(this.state.start);\n\n if (code === 60 || code === 62) {\n this.state.pos -= 1;\n this.readToken_lt_gt(code);\n }\n }\n }\n\n toAssignableList(exprList) {\n for (let i = 0; i < exprList.length; i++) {\n const expr = exprList[i];\n if (!expr) continue;\n\n switch (expr.type) {\n case \"TSTypeCastExpression\":\n exprList[i] = this.typeCastToParameter(expr);\n break;\n\n case \"TSAsExpression\":\n case \"TSTypeAssertion\":\n if (!this.state.maybeInArrowParameters) {\n exprList[i] = this.typeCastToParameter(expr);\n } else {\n this.raise(expr.start, TSErrors.UnexpectedTypeCastInParameter);\n }\n\n break;\n }\n }\n\n return super.toAssignableList(...arguments);\n }\n\n typeCastToParameter(node) {\n node.expression.typeAnnotation = node.typeAnnotation;\n this.resetEndLocation(node.expression, node.typeAnnotation.end, node.typeAnnotation.loc.end);\n return node.expression;\n }\n\n shouldParseArrow() {\n return this.match(types$1.colon) || super.shouldParseArrow();\n }\n\n shouldParseAsyncArrow() {\n return this.match(types$1.colon) || super.shouldParseAsyncArrow();\n }\n\n canHaveLeadingDecorator() {\n return super.canHaveLeadingDecorator() || this.isAbstractClass();\n }\n\n jsxParseOpeningElementAfterName(node) {\n if (this.isRelational(\"<\")) {\n const typeArguments = this.tsTryParseAndCatch(() => this.tsParseTypeArguments());\n if (typeArguments) node.typeParameters = typeArguments;\n }\n\n return super.jsxParseOpeningElementAfterName(node);\n }\n\n getGetterSetterExpectedParamCount(method) {\n const baseCount = super.getGetterSetterExpectedParamCount(method);\n const params = this.getObjectOrClassMethodParams(method);\n const firstParam = params[0];\n const hasContextParam = firstParam && this.isThisParam(firstParam);\n return hasContextParam ? baseCount + 1 : baseCount;\n }\n\n parseCatchClauseParam() {\n const param = super.parseCatchClauseParam();\n const type = this.tsTryParseTypeAnnotation();\n\n if (type) {\n param.typeAnnotation = type;\n this.resetEndLocation(param);\n }\n\n return param;\n }\n\n tsInAmbientContext(cb) {\n const oldIsAmbientContext = this.state.isAmbientContext;\n this.state.isAmbientContext = true;\n\n try {\n return cb();\n } finally {\n this.state.isAmbientContext = oldIsAmbientContext;\n }\n }\n\n parseClass(node, ...args) {\n const oldInAbstractClass = this.state.inAbstractClass;\n this.state.inAbstractClass = !!node.abstract;\n\n try {\n return super.parseClass(node, ...args);\n } finally {\n this.state.inAbstractClass = oldInAbstractClass;\n }\n }\n\n tsParseAbstractDeclaration(node) {\n if (this.match(types$1._class)) {\n node.abstract = true;\n return this.parseClass(node, true, false);\n } else if (this.isContextual(\"interface\")) {\n if (!this.hasFollowingLineBreak()) {\n node.abstract = true;\n this.raise(node.start, TSErrors.NonClassMethodPropertyHasAbstractModifer);\n this.next();\n return this.tsParseInterfaceDeclaration(node);\n }\n } else {\n this.unexpected(null, types$1._class);\n }\n }\n\n parseMethod(...args) {\n const method = super.parseMethod(...args);\n\n if (method.abstract) {\n const hasBody = this.hasPlugin(\"estree\") ? !!method.value.body : !!method.body;\n\n if (hasBody) {\n const {\n key\n } = method;\n this.raise(method.start, TSErrors.AbstractMethodHasImplementation, key.type === \"Identifier\" ? key.name : `[${this.input.slice(key.start, key.end)}]`);\n }\n }\n\n return method;\n }\n\n shouldParseAsAmbientContext() {\n return !!this.getPluginOption(\"typescript\", \"dts\");\n }\n\n parse() {\n if (this.shouldParseAsAmbientContext()) {\n this.state.isAmbientContext = true;\n }\n\n return super.parse();\n }\n\n getExpression() {\n if (this.shouldParseAsAmbientContext()) {\n this.state.isAmbientContext = true;\n }\n\n return super.getExpression();\n }\n\n});\n\ntypes$1.placeholder = new TokenType(\"%%\", {\n startsExpr: true\n});\nconst PlaceHolderErrors = makeErrorTemplates({\n ClassNameIsRequired: \"A class name is required.\"\n}, ErrorCodes.SyntaxError);\nvar placeholders = (superClass => class extends superClass {\n parsePlaceholder(expectedNode) {\n if (this.match(types$1.placeholder)) {\n const node = this.startNode();\n this.next();\n this.assertNoSpace(\"Unexpected space in placeholder.\");\n node.name = super.parseIdentifier(true);\n this.assertNoSpace(\"Unexpected space in placeholder.\");\n this.expect(types$1.placeholder);\n return this.finishPlaceholder(node, expectedNode);\n }\n }\n\n finishPlaceholder(node, expectedNode) {\n const isFinished = !!(node.expectedNode && node.type === \"Placeholder\");\n node.expectedNode = expectedNode;\n return isFinished ? node : this.finishNode(node, \"Placeholder\");\n }\n\n getTokenFromCode(code) {\n if (code === 37 && this.input.charCodeAt(this.state.pos + 1) === 37) {\n return this.finishOp(types$1.placeholder, 2);\n }\n\n return super.getTokenFromCode(...arguments);\n }\n\n parseExprAtom() {\n return this.parsePlaceholder(\"Expression\") || super.parseExprAtom(...arguments);\n }\n\n parseIdentifier() {\n return this.parsePlaceholder(\"Identifier\") || super.parseIdentifier(...arguments);\n }\n\n checkReservedWord(word) {\n if (word !== undefined) super.checkReservedWord(...arguments);\n }\n\n parseBindingAtom() {\n return this.parsePlaceholder(\"Pattern\") || super.parseBindingAtom(...arguments);\n }\n\n checkLVal(expr) {\n if (expr.type !== \"Placeholder\") super.checkLVal(...arguments);\n }\n\n toAssignable(node) {\n if (node && node.type === \"Placeholder\" && node.expectedNode === \"Expression\") {\n node.expectedNode = \"Pattern\";\n return node;\n }\n\n return super.toAssignable(...arguments);\n }\n\n isLet(context) {\n if (super.isLet(context)) {\n return true;\n }\n\n if (!this.isContextual(\"let\")) {\n return false;\n }\n\n if (context) return false;\n const nextToken = this.lookahead();\n\n if (nextToken.type === types$1.placeholder) {\n return true;\n }\n\n return false;\n }\n\n verifyBreakContinue(node) {\n if (node.label && node.label.type === \"Placeholder\") return;\n super.verifyBreakContinue(...arguments);\n }\n\n parseExpressionStatement(node, expr) {\n if (expr.type !== \"Placeholder\" || expr.extra && expr.extra.parenthesized) {\n return super.parseExpressionStatement(...arguments);\n }\n\n if (this.match(types$1.colon)) {\n const stmt = node;\n stmt.label = this.finishPlaceholder(expr, \"Identifier\");\n this.next();\n stmt.body = this.parseStatement(\"label\");\n return this.finishNode(stmt, \"LabeledStatement\");\n }\n\n this.semicolon();\n node.name = expr.name;\n return this.finishPlaceholder(node, \"Statement\");\n }\n\n parseBlock() {\n return this.parsePlaceholder(\"BlockStatement\") || super.parseBlock(...arguments);\n }\n\n parseFunctionId() {\n return this.parsePlaceholder(\"Identifier\") || super.parseFunctionId(...arguments);\n }\n\n parseClass(node, isStatement, optionalId) {\n const type = isStatement ? \"ClassDeclaration\" : \"ClassExpression\";\n this.next();\n this.takeDecorators(node);\n const oldStrict = this.state.strict;\n const placeholder = this.parsePlaceholder(\"Identifier\");\n\n if (placeholder) {\n if (this.match(types$1._extends) || this.match(types$1.placeholder) || this.match(types$1.braceL)) {\n node.id = placeholder;\n } else if (optionalId || !isStatement) {\n node.id = null;\n node.body = this.finishPlaceholder(placeholder, \"ClassBody\");\n return this.finishNode(node, type);\n } else {\n this.unexpected(null, PlaceHolderErrors.ClassNameIsRequired);\n }\n } else {\n this.parseClassId(node, isStatement, optionalId);\n }\n\n this.parseClassSuper(node);\n node.body = this.parsePlaceholder(\"ClassBody\") || this.parseClassBody(!!node.superClass, oldStrict);\n return this.finishNode(node, type);\n }\n\n parseExport(node) {\n const placeholder = this.parsePlaceholder(\"Identifier\");\n if (!placeholder) return super.parseExport(...arguments);\n\n if (!this.isContextual(\"from\") && !this.match(types$1.comma)) {\n node.specifiers = [];\n node.source = null;\n node.declaration = this.finishPlaceholder(placeholder, \"Declaration\");\n return this.finishNode(node, \"ExportNamedDeclaration\");\n }\n\n this.expectPlugin(\"exportDefaultFrom\");\n const specifier = this.startNode();\n specifier.exported = placeholder;\n node.specifiers = [this.finishNode(specifier, \"ExportDefaultSpecifier\")];\n return super.parseExport(node);\n }\n\n isExportDefaultSpecifier() {\n if (this.match(types$1._default)) {\n const next = this.nextTokenStart();\n\n if (this.isUnparsedContextual(next, \"from\")) {\n if (this.input.startsWith(types$1.placeholder.label, this.nextTokenStartSince(next + 4))) {\n return true;\n }\n }\n }\n\n return super.isExportDefaultSpecifier();\n }\n\n maybeParseExportDefaultSpecifier(node) {\n if (node.specifiers && node.specifiers.length > 0) {\n return true;\n }\n\n return super.maybeParseExportDefaultSpecifier(...arguments);\n }\n\n checkExport(node) {\n const {\n specifiers\n } = node;\n\n if (specifiers != null && specifiers.length) {\n node.specifiers = specifiers.filter(node => node.exported.type === \"Placeholder\");\n }\n\n super.checkExport(node);\n node.specifiers = specifiers;\n }\n\n parseImport(node) {\n const placeholder = this.parsePlaceholder(\"Identifier\");\n if (!placeholder) return super.parseImport(...arguments);\n node.specifiers = [];\n\n if (!this.isContextual(\"from\") && !this.match(types$1.comma)) {\n node.source = this.finishPlaceholder(placeholder, \"StringLiteral\");\n this.semicolon();\n return this.finishNode(node, \"ImportDeclaration\");\n }\n\n const specifier = this.startNodeAtNode(placeholder);\n specifier.local = placeholder;\n this.finishNode(specifier, \"ImportDefaultSpecifier\");\n node.specifiers.push(specifier);\n\n if (this.eat(types$1.comma)) {\n const hasStarImport = this.maybeParseStarImportSpecifier(node);\n if (!hasStarImport) this.parseNamedImportSpecifiers(node);\n }\n\n this.expectContextual(\"from\");\n node.source = this.parseImportSource();\n this.semicolon();\n return this.finishNode(node, \"ImportDeclaration\");\n }\n\n parseImportSource() {\n return this.parsePlaceholder(\"StringLiteral\") || super.parseImportSource(...arguments);\n }\n\n});\n\nvar v8intrinsic = (superClass => class extends superClass {\n parseV8Intrinsic() {\n if (this.match(types$1.modulo)) {\n const v8IntrinsicStart = this.state.start;\n const node = this.startNode();\n this.eat(types$1.modulo);\n\n if (this.match(types$1.name)) {\n const name = this.parseIdentifierName(this.state.start);\n const identifier = this.createIdentifier(node, name);\n identifier.type = \"V8IntrinsicIdentifier\";\n\n if (this.match(types$1.parenL)) {\n return identifier;\n }\n }\n\n this.unexpected(v8IntrinsicStart);\n }\n }\n\n parseExprAtom() {\n return this.parseV8Intrinsic() || super.parseExprAtom(...arguments);\n }\n\n});\n\nfunction hasPlugin(plugins, name) {\n return plugins.some(plugin => {\n if (Array.isArray(plugin)) {\n return plugin[0] === name;\n } else {\n return plugin === name;\n }\n });\n}\nfunction getPluginOption(plugins, name, option) {\n const plugin = plugins.find(plugin => {\n if (Array.isArray(plugin)) {\n return plugin[0] === name;\n } else {\n return plugin === name;\n }\n });\n\n if (plugin && Array.isArray(plugin)) {\n return plugin[1][option];\n }\n\n return null;\n}\nconst PIPELINE_PROPOSALS = [\"minimal\", \"smart\", \"fsharp\"];\nconst RECORD_AND_TUPLE_SYNTAX_TYPES = [\"hash\", \"bar\"];\nfunction validatePlugins(plugins) {\n if (hasPlugin(plugins, \"decorators\")) {\n if (hasPlugin(plugins, \"decorators-legacy\")) {\n throw new Error(\"Cannot use the decorators and decorators-legacy plugin together\");\n }\n\n const decoratorsBeforeExport = getPluginOption(plugins, \"decorators\", \"decoratorsBeforeExport\");\n\n if (decoratorsBeforeExport == null) {\n throw new Error(\"The 'decorators' plugin requires a 'decoratorsBeforeExport' option,\" + \" whose value must be a boolean. If you are migrating from\" + \" Babylon/Babel 6 or want to use the old decorators proposal, you\" + \" should use the 'decorators-legacy' plugin instead of 'decorators'.\");\n } else if (typeof decoratorsBeforeExport !== \"boolean\") {\n throw new Error(\"'decoratorsBeforeExport' must be a boolean.\");\n }\n }\n\n if (hasPlugin(plugins, \"flow\") && hasPlugin(plugins, \"typescript\")) {\n throw new Error(\"Cannot combine flow and typescript plugins.\");\n }\n\n if (hasPlugin(plugins, \"placeholders\") && hasPlugin(plugins, \"v8intrinsic\")) {\n throw new Error(\"Cannot combine placeholders and v8intrinsic plugins.\");\n }\n\n if (hasPlugin(plugins, \"pipelineOperator\") && !PIPELINE_PROPOSALS.includes(getPluginOption(plugins, \"pipelineOperator\", \"proposal\"))) {\n throw new Error(\"'pipelineOperator' requires 'proposal' option whose value should be one of: \" + PIPELINE_PROPOSALS.map(p => `'${p}'`).join(\", \"));\n }\n\n if (hasPlugin(plugins, \"moduleAttributes\")) {\n {\n if (hasPlugin(plugins, \"importAssertions\")) {\n throw new Error(\"Cannot combine importAssertions and moduleAttributes plugins.\");\n }\n\n const moduleAttributesVerionPluginOption = getPluginOption(plugins, \"moduleAttributes\", \"version\");\n\n if (moduleAttributesVerionPluginOption !== \"may-2020\") {\n throw new Error(\"The 'moduleAttributes' plugin requires a 'version' option,\" + \" representing the last proposal update. Currently, the\" + \" only supported value is 'may-2020'.\");\n }\n }\n }\n\n if (hasPlugin(plugins, \"recordAndTuple\") && !RECORD_AND_TUPLE_SYNTAX_TYPES.includes(getPluginOption(plugins, \"recordAndTuple\", \"syntaxType\"))) {\n throw new Error(\"'recordAndTuple' requires 'syntaxType' option whose value should be one of: \" + RECORD_AND_TUPLE_SYNTAX_TYPES.map(p => `'${p}'`).join(\", \"));\n }\n\n if (hasPlugin(plugins, \"asyncDoExpressions\") && !hasPlugin(plugins, \"doExpressions\")) {\n const error = new Error(\"'asyncDoExpressions' requires 'doExpressions', please add 'doExpressions' to parser plugins.\");\n error.missingPlugins = \"doExpressions\";\n throw error;\n }\n}\nconst mixinPlugins = {\n estree,\n jsx,\n flow,\n typescript,\n v8intrinsic,\n placeholders\n};\nconst mixinPluginNames = Object.keys(mixinPlugins);\n\nconst defaultOptions = {\n sourceType: \"script\",\n sourceFilename: undefined,\n startLine: 1,\n allowAwaitOutsideFunction: false,\n allowReturnOutsideFunction: false,\n allowImportExportEverywhere: false,\n allowSuperOutsideMethod: false,\n allowUndeclaredExports: false,\n plugins: [],\n strictMode: null,\n ranges: false,\n tokens: false,\n createParenthesizedExpressions: false,\n errorRecovery: false\n};\nfunction getOptions(opts) {\n const options = {};\n\n for (const key of Object.keys(defaultOptions)) {\n options[key] = opts && opts[key] != null ? opts[key] : defaultOptions[key];\n }\n\n return options;\n}\n\nvar _isDigit = function isDigit(code) {\n return code >= 48 && code <= 57;\n};\nconst VALID_REGEX_FLAGS = new Set([103, 109, 115, 105, 121, 117, 100]);\nconst forbiddenNumericSeparatorSiblings = {\n decBinOct: [46, 66, 69, 79, 95, 98, 101, 111],\n hex: [46, 88, 95, 120]\n};\nconst allowedNumericSeparatorSiblings = {};\nallowedNumericSeparatorSiblings.bin = [48, 49];\nallowedNumericSeparatorSiblings.oct = [...allowedNumericSeparatorSiblings.bin, 50, 51, 52, 53, 54, 55];\nallowedNumericSeparatorSiblings.dec = [...allowedNumericSeparatorSiblings.oct, 56, 57];\nallowedNumericSeparatorSiblings.hex = [...allowedNumericSeparatorSiblings.dec, 65, 66, 67, 68, 69, 70, 97, 98, 99, 100, 101, 102];\nclass Token {\n constructor(state) {\n this.type = state.type;\n this.value = state.value;\n this.start = state.start;\n this.end = state.end;\n this.loc = new SourceLocation(state.startLoc, state.endLoc);\n }\n\n}\nclass Tokenizer extends ParserError {\n constructor(options, input) {\n super();\n this.isLookahead = void 0;\n this.tokens = [];\n this.state = new State();\n this.state.init(options);\n this.input = input;\n this.length = input.length;\n this.isLookahead = false;\n }\n\n pushToken(token) {\n this.tokens.length = this.state.tokensLength;\n this.tokens.push(token);\n ++this.state.tokensLength;\n }\n\n next() {\n this.checkKeywordEscapes();\n\n if (this.options.tokens) {\n this.pushToken(new Token(this.state));\n }\n\n this.state.lastTokEnd = this.state.end;\n this.state.lastTokStart = this.state.start;\n this.state.lastTokEndLoc = this.state.endLoc;\n this.state.lastTokStartLoc = this.state.startLoc;\n this.nextToken();\n }\n\n eat(type) {\n if (this.match(type)) {\n this.next();\n return true;\n } else {\n return false;\n }\n }\n\n match(type) {\n return this.state.type === type;\n }\n\n createLookaheadState(state) {\n return {\n pos: state.pos,\n value: null,\n type: state.type,\n start: state.start,\n end: state.end,\n lastTokEnd: state.end,\n context: [this.curContext()],\n inType: state.inType\n };\n }\n\n lookahead() {\n const old = this.state;\n this.state = this.createLookaheadState(old);\n this.isLookahead = true;\n this.nextToken();\n this.isLookahead = false;\n const curr = this.state;\n this.state = old;\n return curr;\n }\n\n nextTokenStart() {\n return this.nextTokenStartSince(this.state.pos);\n }\n\n nextTokenStartSince(pos) {\n skipWhiteSpace.lastIndex = pos;\n const skip = skipWhiteSpace.exec(this.input);\n return pos + skip[0].length;\n }\n\n lookaheadCharCode() {\n return this.input.charCodeAt(this.nextTokenStart());\n }\n\n codePointAtPos(pos) {\n let cp = this.input.charCodeAt(pos);\n\n if ((cp & 0xfc00) === 0xd800 && ++pos < this.input.length) {\n const trail = this.input.charCodeAt(pos);\n\n if ((trail & 0xfc00) === 0xdc00) {\n cp = 0x10000 + ((cp & 0x3ff) << 10) + (trail & 0x3ff);\n }\n }\n\n return cp;\n }\n\n setStrict(strict) {\n this.state.strict = strict;\n\n if (strict) {\n this.state.strictErrors.forEach((message, pos) => this.raise(pos, message));\n this.state.strictErrors.clear();\n }\n }\n\n curContext() {\n return this.state.context[this.state.context.length - 1];\n }\n\n nextToken() {\n const curContext = this.curContext();\n if (!curContext.preserveSpace) this.skipSpace();\n this.state.start = this.state.pos;\n if (!this.isLookahead) this.state.startLoc = this.state.curPosition();\n\n if (this.state.pos >= this.length) {\n this.finishToken(types$1.eof);\n return;\n }\n\n if (curContext === types.template) {\n this.readTmplToken();\n } else {\n this.getTokenFromCode(this.codePointAtPos(this.state.pos));\n }\n }\n\n pushComment(block, text, start, end, startLoc, endLoc) {\n const comment = {\n type: block ? \"CommentBlock\" : \"CommentLine\",\n value: text,\n start: start,\n end: end,\n loc: new SourceLocation(startLoc, endLoc)\n };\n if (this.options.tokens) this.pushToken(comment);\n this.state.comments.push(comment);\n this.addComment(comment);\n }\n\n skipBlockComment() {\n let startLoc;\n if (!this.isLookahead) startLoc = this.state.curPosition();\n const start = this.state.pos;\n const end = this.input.indexOf(\"*/\", this.state.pos + 2);\n if (end === -1) throw this.raise(start, ErrorMessages.UnterminatedComment);\n this.state.pos = end + 2;\n lineBreakG.lastIndex = start;\n let match;\n\n while ((match = lineBreakG.exec(this.input)) && match.index < this.state.pos) {\n ++this.state.curLine;\n this.state.lineStart = match.index + match[0].length;\n }\n\n if (this.isLookahead) return;\n this.pushComment(true, this.input.slice(start + 2, end), start, this.state.pos, startLoc, this.state.curPosition());\n }\n\n skipLineComment(startSkip) {\n const start = this.state.pos;\n let startLoc;\n if (!this.isLookahead) startLoc = this.state.curPosition();\n let ch = this.input.charCodeAt(this.state.pos += startSkip);\n\n if (this.state.pos < this.length) {\n while (!isNewLine(ch) && ++this.state.pos < this.length) {\n ch = this.input.charCodeAt(this.state.pos);\n }\n }\n\n if (this.isLookahead) return;\n this.pushComment(false, this.input.slice(start + startSkip, this.state.pos), start, this.state.pos, startLoc, this.state.curPosition());\n }\n\n skipSpace() {\n loop: while (this.state.pos < this.length) {\n const ch = this.input.charCodeAt(this.state.pos);\n\n switch (ch) {\n case 32:\n case 160:\n case 9:\n ++this.state.pos;\n break;\n\n case 13:\n if (this.input.charCodeAt(this.state.pos + 1) === 10) {\n ++this.state.pos;\n }\n\n case 10:\n case 8232:\n case 8233:\n ++this.state.pos;\n ++this.state.curLine;\n this.state.lineStart = this.state.pos;\n break;\n\n case 47:\n switch (this.input.charCodeAt(this.state.pos + 1)) {\n case 42:\n this.skipBlockComment();\n break;\n\n case 47:\n this.skipLineComment(2);\n break;\n\n default:\n break loop;\n }\n\n break;\n\n default:\n if (isWhitespace(ch)) {\n ++this.state.pos;\n } else {\n break loop;\n }\n\n }\n }\n }\n\n finishToken(type, val) {\n this.state.end = this.state.pos;\n const prevType = this.state.type;\n this.state.type = type;\n this.state.value = val;\n\n if (!this.isLookahead) {\n this.state.endLoc = this.state.curPosition();\n this.updateContext(prevType);\n }\n }\n\n readToken_numberSign() {\n if (this.state.pos === 0 && this.readToken_interpreter()) {\n return;\n }\n\n const nextPos = this.state.pos + 1;\n const next = this.codePointAtPos(nextPos);\n\n if (next >= 48 && next <= 57) {\n throw this.raise(this.state.pos, ErrorMessages.UnexpectedDigitAfterHash);\n }\n\n if (next === 123 || next === 91 && this.hasPlugin(\"recordAndTuple\")) {\n this.expectPlugin(\"recordAndTuple\");\n\n if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"hash\") {\n throw this.raise(this.state.pos, next === 123 ? ErrorMessages.RecordExpressionHashIncorrectStartSyntaxType : ErrorMessages.TupleExpressionHashIncorrectStartSyntaxType);\n }\n\n this.state.pos += 2;\n\n if (next === 123) {\n this.finishToken(types$1.braceHashL);\n } else {\n this.finishToken(types$1.bracketHashL);\n }\n } else if (isIdentifierStart(next)) {\n ++this.state.pos;\n this.finishToken(types$1.privateName, this.readWord1(next));\n } else if (next === 92) {\n ++this.state.pos;\n this.finishToken(types$1.privateName, this.readWord1());\n } else {\n this.finishOp(types$1.hash, 1);\n }\n }\n\n readToken_dot() {\n const next = this.input.charCodeAt(this.state.pos + 1);\n\n if (next >= 48 && next <= 57) {\n this.readNumber(true);\n return;\n }\n\n if (next === 46 && this.input.charCodeAt(this.state.pos + 2) === 46) {\n this.state.pos += 3;\n this.finishToken(types$1.ellipsis);\n } else {\n ++this.state.pos;\n this.finishToken(types$1.dot);\n }\n }\n\n readToken_slash() {\n const next = this.input.charCodeAt(this.state.pos + 1);\n\n if (next === 61) {\n this.finishOp(types$1.slashAssign, 2);\n } else {\n this.finishOp(types$1.slash, 1);\n }\n }\n\n readToken_interpreter() {\n if (this.state.pos !== 0 || this.length < 2) return false;\n let ch = this.input.charCodeAt(this.state.pos + 1);\n if (ch !== 33) return false;\n const start = this.state.pos;\n this.state.pos += 1;\n\n while (!isNewLine(ch) && ++this.state.pos < this.length) {\n ch = this.input.charCodeAt(this.state.pos);\n }\n\n const value = this.input.slice(start + 2, this.state.pos);\n this.finishToken(types$1.interpreterDirective, value);\n return true;\n }\n\n readToken_mult_modulo(code) {\n let type = code === 42 ? types$1.star : types$1.modulo;\n let width = 1;\n let next = this.input.charCodeAt(this.state.pos + 1);\n\n if (code === 42 && next === 42) {\n width++;\n next = this.input.charCodeAt(this.state.pos + 2);\n type = types$1.exponent;\n }\n\n if (next === 61 && !this.state.inType) {\n width++;\n type = types$1.assign;\n }\n\n this.finishOp(type, width);\n }\n\n readToken_pipe_amp(code) {\n const next = this.input.charCodeAt(this.state.pos + 1);\n\n if (next === code) {\n if (this.input.charCodeAt(this.state.pos + 2) === 61) {\n this.finishOp(types$1.assign, 3);\n } else {\n this.finishOp(code === 124 ? types$1.logicalOR : types$1.logicalAND, 2);\n }\n\n return;\n }\n\n if (code === 124) {\n if (next === 62) {\n this.finishOp(types$1.pipeline, 2);\n return;\n }\n\n if (this.hasPlugin(\"recordAndTuple\") && next === 125) {\n if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"bar\") {\n throw this.raise(this.state.pos, ErrorMessages.RecordExpressionBarIncorrectEndSyntaxType);\n }\n\n this.state.pos += 2;\n this.finishToken(types$1.braceBarR);\n return;\n }\n\n if (this.hasPlugin(\"recordAndTuple\") && next === 93) {\n if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"bar\") {\n throw this.raise(this.state.pos, ErrorMessages.TupleExpressionBarIncorrectEndSyntaxType);\n }\n\n this.state.pos += 2;\n this.finishToken(types$1.bracketBarR);\n return;\n }\n }\n\n if (next === 61) {\n this.finishOp(types$1.assign, 2);\n return;\n }\n\n this.finishOp(code === 124 ? types$1.bitwiseOR : types$1.bitwiseAND, 1);\n }\n\n readToken_caret() {\n const next = this.input.charCodeAt(this.state.pos + 1);\n\n if (next === 61) {\n this.finishOp(types$1.assign, 2);\n } else {\n this.finishOp(types$1.bitwiseXOR, 1);\n }\n }\n\n readToken_plus_min(code) {\n const next = this.input.charCodeAt(this.state.pos + 1);\n\n if (next === code) {\n if (next === 45 && !this.inModule && this.input.charCodeAt(this.state.pos + 2) === 62 && (this.state.lastTokEnd === 0 || this.hasPrecedingLineBreak())) {\n this.skipLineComment(3);\n this.skipSpace();\n this.nextToken();\n return;\n }\n\n this.finishOp(types$1.incDec, 2);\n return;\n }\n\n if (next === 61) {\n this.finishOp(types$1.assign, 2);\n } else {\n this.finishOp(types$1.plusMin, 1);\n }\n }\n\n readToken_lt_gt(code) {\n const next = this.input.charCodeAt(this.state.pos + 1);\n let size = 1;\n\n if (next === code) {\n size = code === 62 && this.input.charCodeAt(this.state.pos + 2) === 62 ? 3 : 2;\n\n if (this.input.charCodeAt(this.state.pos + size) === 61) {\n this.finishOp(types$1.assign, size + 1);\n return;\n }\n\n this.finishOp(types$1.bitShift, size);\n return;\n }\n\n if (next === 33 && code === 60 && !this.inModule && this.input.charCodeAt(this.state.pos + 2) === 45 && this.input.charCodeAt(this.state.pos + 3) === 45) {\n this.skipLineComment(4);\n this.skipSpace();\n this.nextToken();\n return;\n }\n\n if (next === 61) {\n size = 2;\n }\n\n this.finishOp(types$1.relational, size);\n }\n\n readToken_eq_excl(code) {\n const next = this.input.charCodeAt(this.state.pos + 1);\n\n if (next === 61) {\n this.finishOp(types$1.equality, this.input.charCodeAt(this.state.pos + 2) === 61 ? 3 : 2);\n return;\n }\n\n if (code === 61 && next === 62) {\n this.state.pos += 2;\n this.finishToken(types$1.arrow);\n return;\n }\n\n this.finishOp(code === 61 ? types$1.eq : types$1.bang, 1);\n }\n\n readToken_question() {\n const next = this.input.charCodeAt(this.state.pos + 1);\n const next2 = this.input.charCodeAt(this.state.pos + 2);\n\n if (next === 63) {\n if (next2 === 61) {\n this.finishOp(types$1.assign, 3);\n } else {\n this.finishOp(types$1.nullishCoalescing, 2);\n }\n } else if (next === 46 && !(next2 >= 48 && next2 <= 57)) {\n this.state.pos += 2;\n this.finishToken(types$1.questionDot);\n } else {\n ++this.state.pos;\n this.finishToken(types$1.question);\n }\n }\n\n getTokenFromCode(code) {\n switch (code) {\n case 46:\n this.readToken_dot();\n return;\n\n case 40:\n ++this.state.pos;\n this.finishToken(types$1.parenL);\n return;\n\n case 41:\n ++this.state.pos;\n this.finishToken(types$1.parenR);\n return;\n\n case 59:\n ++this.state.pos;\n this.finishToken(types$1.semi);\n return;\n\n case 44:\n ++this.state.pos;\n this.finishToken(types$1.comma);\n return;\n\n case 91:\n if (this.hasPlugin(\"recordAndTuple\") && this.input.charCodeAt(this.state.pos + 1) === 124) {\n if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"bar\") {\n throw this.raise(this.state.pos, ErrorMessages.TupleExpressionBarIncorrectStartSyntaxType);\n }\n\n this.state.pos += 2;\n this.finishToken(types$1.bracketBarL);\n } else {\n ++this.state.pos;\n this.finishToken(types$1.bracketL);\n }\n\n return;\n\n case 93:\n ++this.state.pos;\n this.finishToken(types$1.bracketR);\n return;\n\n case 123:\n if (this.hasPlugin(\"recordAndTuple\") && this.input.charCodeAt(this.state.pos + 1) === 124) {\n if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"bar\") {\n throw this.raise(this.state.pos, ErrorMessages.RecordExpressionBarIncorrectStartSyntaxType);\n }\n\n this.state.pos += 2;\n this.finishToken(types$1.braceBarL);\n } else {\n ++this.state.pos;\n this.finishToken(types$1.braceL);\n }\n\n return;\n\n case 125:\n ++this.state.pos;\n this.finishToken(types$1.braceR);\n return;\n\n case 58:\n if (this.hasPlugin(\"functionBind\") && this.input.charCodeAt(this.state.pos + 1) === 58) {\n this.finishOp(types$1.doubleColon, 2);\n } else {\n ++this.state.pos;\n this.finishToken(types$1.colon);\n }\n\n return;\n\n case 63:\n this.readToken_question();\n return;\n\n case 96:\n ++this.state.pos;\n this.finishToken(types$1.backQuote);\n return;\n\n case 48:\n {\n const next = this.input.charCodeAt(this.state.pos + 1);\n\n if (next === 120 || next === 88) {\n this.readRadixNumber(16);\n return;\n }\n\n if (next === 111 || next === 79) {\n this.readRadixNumber(8);\n return;\n }\n\n if (next === 98 || next === 66) {\n this.readRadixNumber(2);\n return;\n }\n }\n\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n this.readNumber(false);\n return;\n\n case 34:\n case 39:\n this.readString(code);\n return;\n\n case 47:\n this.readToken_slash();\n return;\n\n case 37:\n case 42:\n this.readToken_mult_modulo(code);\n return;\n\n case 124:\n case 38:\n this.readToken_pipe_amp(code);\n return;\n\n case 94:\n this.readToken_caret();\n return;\n\n case 43:\n case 45:\n this.readToken_plus_min(code);\n return;\n\n case 60:\n case 62:\n this.readToken_lt_gt(code);\n return;\n\n case 61:\n case 33:\n this.readToken_eq_excl(code);\n return;\n\n case 126:\n this.finishOp(types$1.tilde, 1);\n return;\n\n case 64:\n ++this.state.pos;\n this.finishToken(types$1.at);\n return;\n\n case 35:\n this.readToken_numberSign();\n return;\n\n case 92:\n this.readWord();\n return;\n\n default:\n if (isIdentifierStart(code)) {\n this.readWord(code);\n return;\n }\n\n }\n\n throw this.raise(this.state.pos, ErrorMessages.InvalidOrUnexpectedToken, String.fromCodePoint(code));\n }\n\n finishOp(type, size) {\n const str = this.input.slice(this.state.pos, this.state.pos + size);\n this.state.pos += size;\n this.finishToken(type, str);\n }\n\n readRegexp() {\n const start = this.state.start + 1;\n let escaped, inClass;\n let {\n pos\n } = this.state;\n\n for (;; ++pos) {\n if (pos >= this.length) {\n throw this.raise(start, ErrorMessages.UnterminatedRegExp);\n }\n\n const ch = this.input.charCodeAt(pos);\n\n if (isNewLine(ch)) {\n throw this.raise(start, ErrorMessages.UnterminatedRegExp);\n }\n\n if (escaped) {\n escaped = false;\n } else {\n if (ch === 91) {\n inClass = true;\n } else if (ch === 93 && inClass) {\n inClass = false;\n } else if (ch === 47 && !inClass) {\n break;\n }\n\n escaped = ch === 92;\n }\n }\n\n const content = this.input.slice(start, pos);\n ++pos;\n let mods = \"\";\n\n while (pos < this.length) {\n const cp = this.codePointAtPos(pos);\n const char = String.fromCharCode(cp);\n\n if (VALID_REGEX_FLAGS.has(cp)) {\n if (mods.includes(char)) {\n this.raise(pos + 1, ErrorMessages.DuplicateRegExpFlags);\n }\n } else if (isIdentifierChar(cp) || cp === 92) {\n this.raise(pos + 1, ErrorMessages.MalformedRegExpFlags);\n } else {\n break;\n }\n\n ++pos;\n mods += char;\n }\n\n this.state.pos = pos;\n this.finishToken(types$1.regexp, {\n pattern: content,\n flags: mods\n });\n }\n\n readInt(radix, len, forceLen, allowNumSeparator = true) {\n const start = this.state.pos;\n const forbiddenSiblings = radix === 16 ? forbiddenNumericSeparatorSiblings.hex : forbiddenNumericSeparatorSiblings.decBinOct;\n const allowedSiblings = radix === 16 ? allowedNumericSeparatorSiblings.hex : radix === 10 ? allowedNumericSeparatorSiblings.dec : radix === 8 ? allowedNumericSeparatorSiblings.oct : allowedNumericSeparatorSiblings.bin;\n let invalid = false;\n let total = 0;\n\n for (let i = 0, e = len == null ? Infinity : len; i < e; ++i) {\n const code = this.input.charCodeAt(this.state.pos);\n let val;\n\n if (code === 95) {\n const prev = this.input.charCodeAt(this.state.pos - 1);\n const next = this.input.charCodeAt(this.state.pos + 1);\n\n if (allowedSiblings.indexOf(next) === -1) {\n this.raise(this.state.pos, ErrorMessages.UnexpectedNumericSeparator);\n } else if (forbiddenSiblings.indexOf(prev) > -1 || forbiddenSiblings.indexOf(next) > -1 || Number.isNaN(next)) {\n this.raise(this.state.pos, ErrorMessages.UnexpectedNumericSeparator);\n }\n\n if (!allowNumSeparator) {\n this.raise(this.state.pos, ErrorMessages.NumericSeparatorInEscapeSequence);\n }\n\n ++this.state.pos;\n continue;\n }\n\n if (code >= 97) {\n val = code - 97 + 10;\n } else if (code >= 65) {\n val = code - 65 + 10;\n } else if (_isDigit(code)) {\n val = code - 48;\n } else {\n val = Infinity;\n }\n\n if (val >= radix) {\n if (this.options.errorRecovery && val <= 9) {\n val = 0;\n this.raise(this.state.start + i + 2, ErrorMessages.InvalidDigit, radix);\n } else if (forceLen) {\n val = 0;\n invalid = true;\n } else {\n break;\n }\n }\n\n ++this.state.pos;\n total = total * radix + val;\n }\n\n if (this.state.pos === start || len != null && this.state.pos - start !== len || invalid) {\n return null;\n }\n\n return total;\n }\n\n readRadixNumber(radix) {\n const start = this.state.pos;\n let isBigInt = false;\n this.state.pos += 2;\n const val = this.readInt(radix);\n\n if (val == null) {\n this.raise(this.state.start + 2, ErrorMessages.InvalidDigit, radix);\n }\n\n const next = this.input.charCodeAt(this.state.pos);\n\n if (next === 110) {\n ++this.state.pos;\n isBigInt = true;\n } else if (next === 109) {\n throw this.raise(start, ErrorMessages.InvalidDecimal);\n }\n\n if (isIdentifierStart(this.codePointAtPos(this.state.pos))) {\n throw this.raise(this.state.pos, ErrorMessages.NumberIdentifier);\n }\n\n if (isBigInt) {\n const str = this.input.slice(start, this.state.pos).replace(/[_n]/g, \"\");\n this.finishToken(types$1.bigint, str);\n return;\n }\n\n this.finishToken(types$1.num, val);\n }\n\n readNumber(startsWithDot) {\n const start = this.state.pos;\n let isFloat = false;\n let isBigInt = false;\n let isDecimal = false;\n let hasExponent = false;\n let isOctal = false;\n\n if (!startsWithDot && this.readInt(10) === null) {\n this.raise(start, ErrorMessages.InvalidNumber);\n }\n\n const hasLeadingZero = this.state.pos - start >= 2 && this.input.charCodeAt(start) === 48;\n\n if (hasLeadingZero) {\n const integer = this.input.slice(start, this.state.pos);\n this.recordStrictModeErrors(start, ErrorMessages.StrictOctalLiteral);\n\n if (!this.state.strict) {\n const underscorePos = integer.indexOf(\"_\");\n\n if (underscorePos > 0) {\n this.raise(underscorePos + start, ErrorMessages.ZeroDigitNumericSeparator);\n }\n }\n\n isOctal = hasLeadingZero && !/[89]/.test(integer);\n }\n\n let next = this.input.charCodeAt(this.state.pos);\n\n if (next === 46 && !isOctal) {\n ++this.state.pos;\n this.readInt(10);\n isFloat = true;\n next = this.input.charCodeAt(this.state.pos);\n }\n\n if ((next === 69 || next === 101) && !isOctal) {\n next = this.input.charCodeAt(++this.state.pos);\n\n if (next === 43 || next === 45) {\n ++this.state.pos;\n }\n\n if (this.readInt(10) === null) {\n this.raise(start, ErrorMessages.InvalidOrMissingExponent);\n }\n\n isFloat = true;\n hasExponent = true;\n next = this.input.charCodeAt(this.state.pos);\n }\n\n if (next === 110) {\n if (isFloat || hasLeadingZero) {\n this.raise(start, ErrorMessages.InvalidBigIntLiteral);\n }\n\n ++this.state.pos;\n isBigInt = true;\n }\n\n if (next === 109) {\n this.expectPlugin(\"decimal\", this.state.pos);\n\n if (hasExponent || hasLeadingZero) {\n this.raise(start, ErrorMessages.InvalidDecimal);\n }\n\n ++this.state.pos;\n isDecimal = true;\n }\n\n if (isIdentifierStart(this.codePointAtPos(this.state.pos))) {\n throw this.raise(this.state.pos, ErrorMessages.NumberIdentifier);\n }\n\n const str = this.input.slice(start, this.state.pos).replace(/[_mn]/g, \"\");\n\n if (isBigInt) {\n this.finishToken(types$1.bigint, str);\n return;\n }\n\n if (isDecimal) {\n this.finishToken(types$1.decimal, str);\n return;\n }\n\n const val = isOctal ? parseInt(str, 8) : parseFloat(str);\n this.finishToken(types$1.num, val);\n }\n\n readCodePoint(throwOnInvalid) {\n const ch = this.input.charCodeAt(this.state.pos);\n let code;\n\n if (ch === 123) {\n const codePos = ++this.state.pos;\n code = this.readHexChar(this.input.indexOf(\"}\", this.state.pos) - this.state.pos, true, throwOnInvalid);\n ++this.state.pos;\n\n if (code !== null && code > 0x10ffff) {\n if (throwOnInvalid) {\n this.raise(codePos, ErrorMessages.InvalidCodePoint);\n } else {\n return null;\n }\n }\n } else {\n code = this.readHexChar(4, false, throwOnInvalid);\n }\n\n return code;\n }\n\n readString(quote) {\n let out = \"\",\n chunkStart = ++this.state.pos;\n\n for (;;) {\n if (this.state.pos >= this.length) {\n throw this.raise(this.state.start, ErrorMessages.UnterminatedString);\n }\n\n const ch = this.input.charCodeAt(this.state.pos);\n if (ch === quote) break;\n\n if (ch === 92) {\n out += this.input.slice(chunkStart, this.state.pos);\n out += this.readEscapedChar(false);\n chunkStart = this.state.pos;\n } else if (ch === 8232 || ch === 8233) {\n ++this.state.pos;\n ++this.state.curLine;\n this.state.lineStart = this.state.pos;\n } else if (isNewLine(ch)) {\n throw this.raise(this.state.start, ErrorMessages.UnterminatedString);\n } else {\n ++this.state.pos;\n }\n }\n\n out += this.input.slice(chunkStart, this.state.pos++);\n this.finishToken(types$1.string, out);\n }\n\n readTmplToken() {\n let out = \"\",\n chunkStart = this.state.pos,\n containsInvalid = false;\n\n for (;;) {\n if (this.state.pos >= this.length) {\n throw this.raise(this.state.start, ErrorMessages.UnterminatedTemplate);\n }\n\n const ch = this.input.charCodeAt(this.state.pos);\n\n if (ch === 96 || ch === 36 && this.input.charCodeAt(this.state.pos + 1) === 123) {\n if (this.state.pos === this.state.start && this.match(types$1.template)) {\n if (ch === 36) {\n this.state.pos += 2;\n this.finishToken(types$1.dollarBraceL);\n return;\n } else {\n ++this.state.pos;\n this.finishToken(types$1.backQuote);\n return;\n }\n }\n\n out += this.input.slice(chunkStart, this.state.pos);\n this.finishToken(types$1.template, containsInvalid ? null : out);\n return;\n }\n\n if (ch === 92) {\n out += this.input.slice(chunkStart, this.state.pos);\n const escaped = this.readEscapedChar(true);\n\n if (escaped === null) {\n containsInvalid = true;\n } else {\n out += escaped;\n }\n\n chunkStart = this.state.pos;\n } else if (isNewLine(ch)) {\n out += this.input.slice(chunkStart, this.state.pos);\n ++this.state.pos;\n\n switch (ch) {\n case 13:\n if (this.input.charCodeAt(this.state.pos) === 10) {\n ++this.state.pos;\n }\n\n case 10:\n out += \"\\n\";\n break;\n\n default:\n out += String.fromCharCode(ch);\n break;\n }\n\n ++this.state.curLine;\n this.state.lineStart = this.state.pos;\n chunkStart = this.state.pos;\n } else {\n ++this.state.pos;\n }\n }\n }\n\n recordStrictModeErrors(pos, message) {\n if (this.state.strict && !this.state.strictErrors.has(pos)) {\n this.raise(pos, message);\n } else {\n this.state.strictErrors.set(pos, message);\n }\n }\n\n readEscapedChar(inTemplate) {\n const throwOnInvalid = !inTemplate;\n const ch = this.input.charCodeAt(++this.state.pos);\n ++this.state.pos;\n\n switch (ch) {\n case 110:\n return \"\\n\";\n\n case 114:\n return \"\\r\";\n\n case 120:\n {\n const code = this.readHexChar(2, false, throwOnInvalid);\n return code === null ? null : String.fromCharCode(code);\n }\n\n case 117:\n {\n const code = this.readCodePoint(throwOnInvalid);\n return code === null ? null : String.fromCodePoint(code);\n }\n\n case 116:\n return \"\\t\";\n\n case 98:\n return \"\\b\";\n\n case 118:\n return \"\\u000b\";\n\n case 102:\n return \"\\f\";\n\n case 13:\n if (this.input.charCodeAt(this.state.pos) === 10) {\n ++this.state.pos;\n }\n\n case 10:\n this.state.lineStart = this.state.pos;\n ++this.state.curLine;\n\n case 8232:\n case 8233:\n return \"\";\n\n case 56:\n case 57:\n if (inTemplate) {\n return null;\n } else {\n this.recordStrictModeErrors(this.state.pos - 1, ErrorMessages.StrictNumericEscape);\n }\n\n default:\n if (ch >= 48 && ch <= 55) {\n const codePos = this.state.pos - 1;\n const match = this.input.substr(this.state.pos - 1, 3).match(/^[0-7]+/);\n let octalStr = match[0];\n let octal = parseInt(octalStr, 8);\n\n if (octal > 255) {\n octalStr = octalStr.slice(0, -1);\n octal = parseInt(octalStr, 8);\n }\n\n this.state.pos += octalStr.length - 1;\n const next = this.input.charCodeAt(this.state.pos);\n\n if (octalStr !== \"0\" || next === 56 || next === 57) {\n if (inTemplate) {\n return null;\n } else {\n this.recordStrictModeErrors(codePos, ErrorMessages.StrictNumericEscape);\n }\n }\n\n return String.fromCharCode(octal);\n }\n\n return String.fromCharCode(ch);\n }\n }\n\n readHexChar(len, forceLen, throwOnInvalid) {\n const codePos = this.state.pos;\n const n = this.readInt(16, len, forceLen, false);\n\n if (n === null) {\n if (throwOnInvalid) {\n this.raise(codePos, ErrorMessages.InvalidEscapeSequence);\n } else {\n this.state.pos = codePos - 1;\n }\n }\n\n return n;\n }\n\n readWord1(firstCode) {\n this.state.containsEsc = false;\n let word = \"\";\n const start = this.state.pos;\n let chunkStart = this.state.pos;\n\n if (firstCode !== undefined) {\n this.state.pos += firstCode <= 0xffff ? 1 : 2;\n }\n\n while (this.state.pos < this.length) {\n const ch = this.codePointAtPos(this.state.pos);\n\n if (isIdentifierChar(ch)) {\n this.state.pos += ch <= 0xffff ? 1 : 2;\n } else if (ch === 92) {\n this.state.containsEsc = true;\n word += this.input.slice(chunkStart, this.state.pos);\n const escStart = this.state.pos;\n const identifierCheck = this.state.pos === start ? isIdentifierStart : isIdentifierChar;\n\n if (this.input.charCodeAt(++this.state.pos) !== 117) {\n this.raise(this.state.pos, ErrorMessages.MissingUnicodeEscape);\n chunkStart = this.state.pos - 1;\n continue;\n }\n\n ++this.state.pos;\n const esc = this.readCodePoint(true);\n\n if (esc !== null) {\n if (!identifierCheck(esc)) {\n this.raise(escStart, ErrorMessages.EscapedCharNotAnIdentifier);\n }\n\n word += String.fromCodePoint(esc);\n }\n\n chunkStart = this.state.pos;\n } else {\n break;\n }\n }\n\n return word + this.input.slice(chunkStart, this.state.pos);\n }\n\n readWord(firstCode) {\n const word = this.readWord1(firstCode);\n const type = keywords$1.get(word) || types$1.name;\n this.finishToken(type, word);\n }\n\n checkKeywordEscapes() {\n const kw = this.state.type.keyword;\n\n if (kw && this.state.containsEsc) {\n this.raise(this.state.start, ErrorMessages.InvalidEscapedReservedWord, kw);\n }\n }\n\n updateContext(prevType) {\n var _this$state$type$upda, _this$state$type;\n\n (_this$state$type$upda = (_this$state$type = this.state.type).updateContext) == null ? void 0 : _this$state$type$upda.call(_this$state$type, this.state.context);\n }\n\n}\n\nclass ClassScope {\n constructor() {\n this.privateNames = new Set();\n this.loneAccessors = new Map();\n this.undefinedPrivateNames = new Map();\n }\n\n}\nclass ClassScopeHandler {\n constructor(raise) {\n this.stack = [];\n this.undefinedPrivateNames = new Map();\n this.raise = raise;\n }\n\n current() {\n return this.stack[this.stack.length - 1];\n }\n\n enter() {\n this.stack.push(new ClassScope());\n }\n\n exit() {\n const oldClassScope = this.stack.pop();\n const current = this.current();\n\n for (const [name, pos] of Array.from(oldClassScope.undefinedPrivateNames)) {\n if (current) {\n if (!current.undefinedPrivateNames.has(name)) {\n current.undefinedPrivateNames.set(name, pos);\n }\n } else {\n this.raise(pos, ErrorMessages.InvalidPrivateFieldResolution, name);\n }\n }\n }\n\n declarePrivateName(name, elementType, pos) {\n const classScope = this.current();\n let redefined = classScope.privateNames.has(name);\n\n if (elementType & CLASS_ELEMENT_KIND_ACCESSOR) {\n const accessor = redefined && classScope.loneAccessors.get(name);\n\n if (accessor) {\n const oldStatic = accessor & CLASS_ELEMENT_FLAG_STATIC;\n const newStatic = elementType & CLASS_ELEMENT_FLAG_STATIC;\n const oldKind = accessor & CLASS_ELEMENT_KIND_ACCESSOR;\n const newKind = elementType & CLASS_ELEMENT_KIND_ACCESSOR;\n redefined = oldKind === newKind || oldStatic !== newStatic;\n if (!redefined) classScope.loneAccessors.delete(name);\n } else if (!redefined) {\n classScope.loneAccessors.set(name, elementType);\n }\n }\n\n if (redefined) {\n this.raise(pos, ErrorMessages.PrivateNameRedeclaration, name);\n }\n\n classScope.privateNames.add(name);\n classScope.undefinedPrivateNames.delete(name);\n }\n\n usePrivateName(name, pos) {\n let classScope;\n\n for (classScope of this.stack) {\n if (classScope.privateNames.has(name)) return;\n }\n\n if (classScope) {\n classScope.undefinedPrivateNames.set(name, pos);\n } else {\n this.raise(pos, ErrorMessages.InvalidPrivateFieldResolution, name);\n }\n }\n\n}\n\nconst kExpression = 0,\n kMaybeArrowParameterDeclaration = 1,\n kMaybeAsyncArrowParameterDeclaration = 2,\n kParameterDeclaration = 3;\n\nclass ExpressionScope {\n constructor(type = kExpression) {\n this.type = void 0;\n this.type = type;\n }\n\n canBeArrowParameterDeclaration() {\n return this.type === kMaybeAsyncArrowParameterDeclaration || this.type === kMaybeArrowParameterDeclaration;\n }\n\n isCertainlyParameterDeclaration() {\n return this.type === kParameterDeclaration;\n }\n\n}\n\nclass ArrowHeadParsingScope extends ExpressionScope {\n constructor(type) {\n super(type);\n this.errors = new Map();\n }\n\n recordDeclarationError(pos, template) {\n this.errors.set(pos, template);\n }\n\n clearDeclarationError(pos) {\n this.errors.delete(pos);\n }\n\n iterateErrors(iterator) {\n this.errors.forEach(iterator);\n }\n\n}\n\nclass ExpressionScopeHandler {\n constructor(raise) {\n this.stack = [new ExpressionScope()];\n this.raise = raise;\n }\n\n enter(scope) {\n this.stack.push(scope);\n }\n\n exit() {\n this.stack.pop();\n }\n\n recordParameterInitializerError(pos, template) {\n const {\n stack\n } = this;\n let i = stack.length - 1;\n let scope = stack[i];\n\n while (!scope.isCertainlyParameterDeclaration()) {\n if (scope.canBeArrowParameterDeclaration()) {\n scope.recordDeclarationError(pos, template);\n } else {\n return;\n }\n\n scope = stack[--i];\n }\n\n this.raise(pos, template);\n }\n\n recordParenthesizedIdentifierError(pos, template) {\n const {\n stack\n } = this;\n const scope = stack[stack.length - 1];\n\n if (scope.isCertainlyParameterDeclaration()) {\n this.raise(pos, template);\n } else if (scope.canBeArrowParameterDeclaration()) {\n scope.recordDeclarationError(pos, template);\n } else {\n return;\n }\n }\n\n recordAsyncArrowParametersError(pos, template) {\n const {\n stack\n } = this;\n let i = stack.length - 1;\n let scope = stack[i];\n\n while (scope.canBeArrowParameterDeclaration()) {\n if (scope.type === kMaybeAsyncArrowParameterDeclaration) {\n scope.recordDeclarationError(pos, template);\n }\n\n scope = stack[--i];\n }\n }\n\n validateAsPattern() {\n const {\n stack\n } = this;\n const currentScope = stack[stack.length - 1];\n if (!currentScope.canBeArrowParameterDeclaration()) return;\n currentScope.iterateErrors((template, pos) => {\n this.raise(pos, template);\n let i = stack.length - 2;\n let scope = stack[i];\n\n while (scope.canBeArrowParameterDeclaration()) {\n scope.clearDeclarationError(pos);\n scope = stack[--i];\n }\n });\n }\n\n}\nfunction newParameterDeclarationScope() {\n return new ExpressionScope(kParameterDeclaration);\n}\nfunction newArrowHeadScope() {\n return new ArrowHeadParsingScope(kMaybeArrowParameterDeclaration);\n}\nfunction newAsyncArrowScope() {\n return new ArrowHeadParsingScope(kMaybeAsyncArrowParameterDeclaration);\n}\nfunction newExpressionScope() {\n return new ExpressionScope();\n}\n\nclass UtilParser extends Tokenizer {\n addExtra(node, key, val) {\n if (!node) return;\n const extra = node.extra = node.extra || {};\n extra[key] = val;\n }\n\n isRelational(op) {\n return this.match(types$1.relational) && this.state.value === op;\n }\n\n expectRelational(op) {\n if (this.isRelational(op)) {\n this.next();\n } else {\n this.unexpected(null, types$1.relational);\n }\n }\n\n isContextual(name) {\n return this.match(types$1.name) && this.state.value === name && !this.state.containsEsc;\n }\n\n isUnparsedContextual(nameStart, name) {\n const nameEnd = nameStart + name.length;\n\n if (this.input.slice(nameStart, nameEnd) === name) {\n const nextCh = this.input.charCodeAt(nameEnd);\n return !(isIdentifierChar(nextCh) || (nextCh & 0xfc00) === 0xd800);\n }\n\n return false;\n }\n\n isLookaheadContextual(name) {\n const next = this.nextTokenStart();\n return this.isUnparsedContextual(next, name);\n }\n\n eatContextual(name) {\n return this.isContextual(name) && this.eat(types$1.name);\n }\n\n expectContextual(name, template) {\n if (!this.eatContextual(name)) this.unexpected(null, template);\n }\n\n canInsertSemicolon() {\n return this.match(types$1.eof) || this.match(types$1.braceR) || this.hasPrecedingLineBreak();\n }\n\n hasPrecedingLineBreak() {\n return lineBreak.test(this.input.slice(this.state.lastTokEnd, this.state.start));\n }\n\n hasFollowingLineBreak() {\n return lineBreak.test(this.input.slice(this.state.end, this.nextTokenStart()));\n }\n\n isLineTerminator() {\n return this.eat(types$1.semi) || this.canInsertSemicolon();\n }\n\n semicolon(allowAsi = true) {\n if (allowAsi ? this.isLineTerminator() : this.eat(types$1.semi)) return;\n this.raise(this.state.lastTokEnd, ErrorMessages.MissingSemicolon);\n }\n\n expect(type, pos) {\n this.eat(type) || this.unexpected(pos, type);\n }\n\n assertNoSpace(message = \"Unexpected space.\") {\n if (this.state.start > this.state.lastTokEnd) {\n this.raise(this.state.lastTokEnd, {\n code: ErrorCodes.SyntaxError,\n reasonCode: \"UnexpectedSpace\",\n template: message\n });\n }\n }\n\n unexpected(pos, messageOrType = {\n code: ErrorCodes.SyntaxError,\n reasonCode: \"UnexpectedToken\",\n template: \"Unexpected token\"\n }) {\n if (messageOrType instanceof TokenType) {\n messageOrType = {\n code: ErrorCodes.SyntaxError,\n reasonCode: \"UnexpectedToken\",\n template: `Unexpected token, expected \"${messageOrType.label}\"`\n };\n }\n\n throw this.raise(pos != null ? pos : this.state.start, messageOrType);\n }\n\n expectPlugin(name, pos) {\n if (!this.hasPlugin(name)) {\n throw this.raiseWithData(pos != null ? pos : this.state.start, {\n missingPlugin: [name]\n }, `This experimental syntax requires enabling the parser plugin: '${name}'`);\n }\n\n return true;\n }\n\n expectOnePlugin(names, pos) {\n if (!names.some(n => this.hasPlugin(n))) {\n throw this.raiseWithData(pos != null ? pos : this.state.start, {\n missingPlugin: names\n }, `This experimental syntax requires enabling one of the following parser plugin(s): '${names.join(\", \")}'`);\n }\n }\n\n tryParse(fn, oldState = this.state.clone()) {\n const abortSignal = {\n node: null\n };\n\n try {\n const node = fn((node = null) => {\n abortSignal.node = node;\n throw abortSignal;\n });\n\n if (this.state.errors.length > oldState.errors.length) {\n const failState = this.state;\n this.state = oldState;\n this.state.tokensLength = failState.tokensLength;\n return {\n node,\n error: failState.errors[oldState.errors.length],\n thrown: false,\n aborted: false,\n failState\n };\n }\n\n return {\n node,\n error: null,\n thrown: false,\n aborted: false,\n failState: null\n };\n } catch (error) {\n const failState = this.state;\n this.state = oldState;\n\n if (error instanceof SyntaxError) {\n return {\n node: null,\n error,\n thrown: true,\n aborted: false,\n failState\n };\n }\n\n if (error === abortSignal) {\n return {\n node: abortSignal.node,\n error: null,\n thrown: false,\n aborted: true,\n failState\n };\n }\n\n throw error;\n }\n }\n\n checkExpressionErrors(refExpressionErrors, andThrow) {\n if (!refExpressionErrors) return false;\n const {\n shorthandAssign,\n doubleProto,\n optionalParameters\n } = refExpressionErrors;\n\n if (!andThrow) {\n return shorthandAssign >= 0 || doubleProto >= 0 || optionalParameters >= 0;\n }\n\n if (shorthandAssign >= 0) {\n this.unexpected(shorthandAssign);\n }\n\n if (doubleProto >= 0) {\n this.raise(doubleProto, ErrorMessages.DuplicateProto);\n }\n\n if (optionalParameters >= 0) {\n this.unexpected(optionalParameters);\n }\n }\n\n isLiteralPropertyName() {\n return this.match(types$1.name) || !!this.state.type.keyword || this.match(types$1.string) || this.match(types$1.num) || this.match(types$1.bigint) || this.match(types$1.decimal);\n }\n\n isPrivateName(node) {\n return node.type === \"PrivateName\";\n }\n\n getPrivateNameSV(node) {\n return node.id.name;\n }\n\n hasPropertyAsPrivateName(node) {\n return (node.type === \"MemberExpression\" || node.type === \"OptionalMemberExpression\") && this.isPrivateName(node.property);\n }\n\n isOptionalChain(node) {\n return node.type === \"OptionalMemberExpression\" || node.type === \"OptionalCallExpression\";\n }\n\n isObjectProperty(node) {\n return node.type === \"ObjectProperty\";\n }\n\n isObjectMethod(node) {\n return node.type === \"ObjectMethod\";\n }\n\n initializeScopes(inModule = this.options.sourceType === \"module\") {\n const oldLabels = this.state.labels;\n this.state.labels = [];\n const oldExportedIdentifiers = this.exportedIdentifiers;\n this.exportedIdentifiers = new Set();\n const oldInModule = this.inModule;\n this.inModule = inModule;\n const oldScope = this.scope;\n const ScopeHandler = this.getScopeHandler();\n this.scope = new ScopeHandler(this.raise.bind(this), this.inModule);\n const oldProdParam = this.prodParam;\n this.prodParam = new ProductionParameterHandler();\n const oldClassScope = this.classScope;\n this.classScope = new ClassScopeHandler(this.raise.bind(this));\n const oldExpressionScope = this.expressionScope;\n this.expressionScope = new ExpressionScopeHandler(this.raise.bind(this));\n return () => {\n this.state.labels = oldLabels;\n this.exportedIdentifiers = oldExportedIdentifiers;\n this.inModule = oldInModule;\n this.scope = oldScope;\n this.prodParam = oldProdParam;\n this.classScope = oldClassScope;\n this.expressionScope = oldExpressionScope;\n };\n }\n\n enterInitialScopes() {\n let paramFlags = PARAM;\n\n if (this.hasPlugin(\"topLevelAwait\") && this.inModule) {\n paramFlags |= PARAM_AWAIT;\n }\n\n this.scope.enter(SCOPE_PROGRAM);\n this.prodParam.enter(paramFlags);\n }\n\n}\nclass ExpressionErrors {\n constructor() {\n this.shorthandAssign = -1;\n this.doubleProto = -1;\n this.optionalParameters = -1;\n }\n\n}\n\nclass Node {\n constructor(parser, pos, loc) {\n this.type = void 0;\n this.start = void 0;\n this.end = void 0;\n this.loc = void 0;\n this.range = void 0;\n this.leadingComments = void 0;\n this.trailingComments = void 0;\n this.innerComments = void 0;\n this.extra = void 0;\n this.type = \"\";\n this.start = pos;\n this.end = 0;\n this.loc = new SourceLocation(loc);\n if (parser != null && parser.options.ranges) this.range = [pos, 0];\n if (parser != null && parser.filename) this.loc.filename = parser.filename;\n }\n\n __clone() {\n const newNode = new Node();\n const keys = Object.keys(this);\n\n for (let i = 0, length = keys.length; i < length; i++) {\n const key = keys[i];\n\n if (key !== \"leadingComments\" && key !== \"trailingComments\" && key !== \"innerComments\") {\n newNode[key] = this[key];\n }\n }\n\n return newNode;\n }\n\n}\n\nclass NodeUtils extends UtilParser {\n startNode() {\n return new Node(this, this.state.start, this.state.startLoc);\n }\n\n startNodeAt(pos, loc) {\n return new Node(this, pos, loc);\n }\n\n startNodeAtNode(type) {\n return this.startNodeAt(type.start, type.loc.start);\n }\n\n finishNode(node, type) {\n return this.finishNodeAt(node, type, this.state.lastTokEnd, this.state.lastTokEndLoc);\n }\n\n finishNodeAt(node, type, pos, loc) {\n\n node.type = type;\n node.end = pos;\n node.loc.end = loc;\n if (this.options.ranges) node.range[1] = pos;\n this.processComment(node);\n return node;\n }\n\n resetStartLocation(node, start, startLoc) {\n node.start = start;\n node.loc.start = startLoc;\n if (this.options.ranges) node.range[0] = start;\n }\n\n resetEndLocation(node, end = this.state.lastTokEnd, endLoc = this.state.lastTokEndLoc) {\n node.end = end;\n node.loc.end = endLoc;\n if (this.options.ranges) node.range[1] = end;\n }\n\n resetStartLocationFromNode(node, locationNode) {\n this.resetStartLocation(node, locationNode.start, locationNode.loc.start);\n }\n\n}\n\nconst unwrapParenthesizedExpression = node => {\n return node.type === \"ParenthesizedExpression\" ? unwrapParenthesizedExpression(node.expression) : node;\n};\n\nclass LValParser extends NodeUtils {\n toAssignable(node, isLHS = false) {\n var _node$extra, _node$extra3;\n\n let parenthesized = undefined;\n\n if (node.type === \"ParenthesizedExpression\" || (_node$extra = node.extra) != null && _node$extra.parenthesized) {\n parenthesized = unwrapParenthesizedExpression(node);\n\n if (isLHS) {\n if (parenthesized.type === \"Identifier\") {\n this.expressionScope.recordParenthesizedIdentifierError(node.start, ErrorMessages.InvalidParenthesizedAssignment);\n } else if (parenthesized.type !== \"MemberExpression\") {\n this.raise(node.start, ErrorMessages.InvalidParenthesizedAssignment);\n }\n } else {\n this.raise(node.start, ErrorMessages.InvalidParenthesizedAssignment);\n }\n }\n\n switch (node.type) {\n case \"Identifier\":\n case \"ObjectPattern\":\n case \"ArrayPattern\":\n case \"AssignmentPattern\":\n break;\n\n case \"ObjectExpression\":\n node.type = \"ObjectPattern\";\n\n for (let i = 0, length = node.properties.length, last = length - 1; i < length; i++) {\n var _node$extra2;\n\n const prop = node.properties[i];\n const isLast = i === last;\n this.toAssignableObjectExpressionProp(prop, isLast, isLHS);\n\n if (isLast && prop.type === \"RestElement\" && (_node$extra2 = node.extra) != null && _node$extra2.trailingComma) {\n this.raiseRestNotLast(node.extra.trailingComma);\n }\n }\n\n break;\n\n case \"ObjectProperty\":\n this.toAssignable(node.value, isLHS);\n break;\n\n case \"SpreadElement\":\n {\n this.checkToRestConversion(node);\n node.type = \"RestElement\";\n const arg = node.argument;\n this.toAssignable(arg, isLHS);\n break;\n }\n\n case \"ArrayExpression\":\n node.type = \"ArrayPattern\";\n this.toAssignableList(node.elements, (_node$extra3 = node.extra) == null ? void 0 : _node$extra3.trailingComma, isLHS);\n break;\n\n case \"AssignmentExpression\":\n if (node.operator !== \"=\") {\n this.raise(node.left.end, ErrorMessages.MissingEqInAssignment);\n }\n\n node.type = \"AssignmentPattern\";\n delete node.operator;\n this.toAssignable(node.left, isLHS);\n break;\n\n case \"ParenthesizedExpression\":\n this.toAssignable(parenthesized, isLHS);\n break;\n }\n\n return node;\n }\n\n toAssignableObjectExpressionProp(prop, isLast, isLHS) {\n if (prop.type === \"ObjectMethod\") {\n const error = prop.kind === \"get\" || prop.kind === \"set\" ? ErrorMessages.PatternHasAccessor : ErrorMessages.PatternHasMethod;\n this.raise(prop.key.start, error);\n } else if (prop.type === \"SpreadElement\" && !isLast) {\n this.raiseRestNotLast(prop.start);\n } else {\n this.toAssignable(prop, isLHS);\n }\n }\n\n toAssignableList(exprList, trailingCommaPos, isLHS) {\n let end = exprList.length;\n\n if (end) {\n const last = exprList[end - 1];\n\n if ((last == null ? void 0 : last.type) === \"RestElement\") {\n --end;\n } else if ((last == null ? void 0 : last.type) === \"SpreadElement\") {\n last.type = \"RestElement\";\n let arg = last.argument;\n this.toAssignable(arg, isLHS);\n arg = unwrapParenthesizedExpression(arg);\n\n if (arg.type !== \"Identifier\" && arg.type !== \"MemberExpression\" && arg.type !== \"ArrayPattern\" && arg.type !== \"ObjectPattern\") {\n this.unexpected(arg.start);\n }\n\n if (trailingCommaPos) {\n this.raiseTrailingCommaAfterRest(trailingCommaPos);\n }\n\n --end;\n }\n }\n\n for (let i = 0; i < end; i++) {\n const elt = exprList[i];\n\n if (elt) {\n this.toAssignable(elt, isLHS);\n\n if (elt.type === \"RestElement\") {\n this.raiseRestNotLast(elt.start);\n }\n }\n }\n\n return exprList;\n }\n\n toReferencedList(exprList, isParenthesizedExpr) {\n return exprList;\n }\n\n toReferencedListDeep(exprList, isParenthesizedExpr) {\n this.toReferencedList(exprList, isParenthesizedExpr);\n\n for (const expr of exprList) {\n if ((expr == null ? void 0 : expr.type) === \"ArrayExpression\") {\n this.toReferencedListDeep(expr.elements);\n }\n }\n }\n\n parseSpread(refExpressionErrors, refNeedsArrowPos) {\n const node = this.startNode();\n this.next();\n node.argument = this.parseMaybeAssignAllowIn(refExpressionErrors, undefined, refNeedsArrowPos);\n return this.finishNode(node, \"SpreadElement\");\n }\n\n parseRestBinding() {\n const node = this.startNode();\n this.next();\n node.argument = this.parseBindingAtom();\n return this.finishNode(node, \"RestElement\");\n }\n\n parseBindingAtom() {\n switch (this.state.type) {\n case types$1.bracketL:\n {\n const node = this.startNode();\n this.next();\n node.elements = this.parseBindingList(types$1.bracketR, 93, true);\n return this.finishNode(node, \"ArrayPattern\");\n }\n\n case types$1.braceL:\n return this.parseObjectLike(types$1.braceR, true);\n }\n\n return this.parseIdentifier();\n }\n\n parseBindingList(close, closeCharCode, allowEmpty, allowModifiers) {\n const elts = [];\n let first = true;\n\n while (!this.eat(close)) {\n if (first) {\n first = false;\n } else {\n this.expect(types$1.comma);\n }\n\n if (allowEmpty && this.match(types$1.comma)) {\n elts.push(null);\n } else if (this.eat(close)) {\n break;\n } else if (this.match(types$1.ellipsis)) {\n elts.push(this.parseAssignableListItemTypes(this.parseRestBinding()));\n this.checkCommaAfterRest(closeCharCode);\n this.expect(close);\n break;\n } else {\n const decorators = [];\n\n if (this.match(types$1.at) && this.hasPlugin(\"decorators\")) {\n this.raise(this.state.start, ErrorMessages.UnsupportedParameterDecorator);\n }\n\n while (this.match(types$1.at)) {\n decorators.push(this.parseDecorator());\n }\n\n elts.push(this.parseAssignableListItem(allowModifiers, decorators));\n }\n }\n\n return elts;\n }\n\n parseAssignableListItem(allowModifiers, decorators) {\n const left = this.parseMaybeDefault();\n this.parseAssignableListItemTypes(left);\n const elt = this.parseMaybeDefault(left.start, left.loc.start, left);\n\n if (decorators.length) {\n left.decorators = decorators;\n }\n\n return elt;\n }\n\n parseAssignableListItemTypes(param) {\n return param;\n }\n\n parseMaybeDefault(startPos, startLoc, left) {\n var _startLoc, _startPos, _left;\n\n startLoc = (_startLoc = startLoc) != null ? _startLoc : this.state.startLoc;\n startPos = (_startPos = startPos) != null ? _startPos : this.state.start;\n left = (_left = left) != null ? _left : this.parseBindingAtom();\n if (!this.eat(types$1.eq)) return left;\n const node = this.startNodeAt(startPos, startLoc);\n node.left = left;\n node.right = this.parseMaybeAssignAllowIn();\n return this.finishNode(node, \"AssignmentPattern\");\n }\n\n checkLVal(expr, contextDescription, bindingType = BIND_NONE, checkClashes, disallowLetBinding, strictModeChanged = false) {\n switch (expr.type) {\n case \"Identifier\":\n {\n const {\n name\n } = expr;\n\n if (this.state.strict && (strictModeChanged ? isStrictBindReservedWord(name, this.inModule) : isStrictBindOnlyReservedWord(name))) {\n this.raise(expr.start, bindingType === BIND_NONE ? ErrorMessages.StrictEvalArguments : ErrorMessages.StrictEvalArgumentsBinding, name);\n }\n\n if (checkClashes) {\n if (checkClashes.has(name)) {\n this.raise(expr.start, ErrorMessages.ParamDupe);\n } else {\n checkClashes.add(name);\n }\n }\n\n if (disallowLetBinding && name === \"let\") {\n this.raise(expr.start, ErrorMessages.LetInLexicalBinding);\n }\n\n if (!(bindingType & BIND_NONE)) {\n this.scope.declareName(name, bindingType, expr.start);\n }\n\n break;\n }\n\n case \"MemberExpression\":\n if (bindingType !== BIND_NONE) {\n this.raise(expr.start, ErrorMessages.InvalidPropertyBindingPattern);\n }\n\n break;\n\n case \"ObjectPattern\":\n for (let prop of expr.properties) {\n if (this.isObjectProperty(prop)) prop = prop.value;else if (this.isObjectMethod(prop)) continue;\n this.checkLVal(prop, \"object destructuring pattern\", bindingType, checkClashes, disallowLetBinding);\n }\n\n break;\n\n case \"ArrayPattern\":\n for (const elem of expr.elements) {\n if (elem) {\n this.checkLVal(elem, \"array destructuring pattern\", bindingType, checkClashes, disallowLetBinding);\n }\n }\n\n break;\n\n case \"AssignmentPattern\":\n this.checkLVal(expr.left, \"assignment pattern\", bindingType, checkClashes);\n break;\n\n case \"RestElement\":\n this.checkLVal(expr.argument, \"rest element\", bindingType, checkClashes);\n break;\n\n case \"ParenthesizedExpression\":\n this.checkLVal(expr.expression, \"parenthesized expression\", bindingType, checkClashes);\n break;\n\n default:\n {\n this.raise(expr.start, bindingType === BIND_NONE ? ErrorMessages.InvalidLhs : ErrorMessages.InvalidLhsBinding, contextDescription);\n }\n }\n }\n\n checkToRestConversion(node) {\n if (node.argument.type !== \"Identifier\" && node.argument.type !== \"MemberExpression\") {\n this.raise(node.argument.start, ErrorMessages.InvalidRestAssignmentPattern);\n }\n }\n\n checkCommaAfterRest(close) {\n if (this.match(types$1.comma)) {\n if (this.lookaheadCharCode() === close) {\n this.raiseTrailingCommaAfterRest(this.state.start);\n } else {\n this.raiseRestNotLast(this.state.start);\n }\n }\n }\n\n raiseRestNotLast(pos) {\n throw this.raise(pos, ErrorMessages.ElementAfterRest);\n }\n\n raiseTrailingCommaAfterRest(pos) {\n this.raise(pos, ErrorMessages.RestTrailingComma);\n }\n\n}\n\nclass ExpressionParser extends LValParser {\n checkProto(prop, isRecord, protoRef, refExpressionErrors) {\n if (prop.type === \"SpreadElement\" || this.isObjectMethod(prop) || prop.computed || prop.shorthand) {\n return;\n }\n\n const key = prop.key;\n const name = key.type === \"Identifier\" ? key.name : key.value;\n\n if (name === \"__proto__\") {\n if (isRecord) {\n this.raise(key.start, ErrorMessages.RecordNoProto);\n return;\n }\n\n if (protoRef.used) {\n if (refExpressionErrors) {\n if (refExpressionErrors.doubleProto === -1) {\n refExpressionErrors.doubleProto = key.start;\n }\n } else {\n this.raise(key.start, ErrorMessages.DuplicateProto);\n }\n }\n\n protoRef.used = true;\n }\n }\n\n shouldExitDescending(expr, potentialArrowAt) {\n return expr.type === \"ArrowFunctionExpression\" && expr.start === potentialArrowAt;\n }\n\n getExpression() {\n let paramFlags = PARAM;\n\n if (this.hasPlugin(\"topLevelAwait\") && this.inModule) {\n paramFlags |= PARAM_AWAIT;\n }\n\n this.scope.enter(SCOPE_PROGRAM);\n this.prodParam.enter(paramFlags);\n this.nextToken();\n const expr = this.parseExpression();\n\n if (!this.match(types$1.eof)) {\n this.unexpected();\n }\n\n expr.comments = this.state.comments;\n expr.errors = this.state.errors;\n\n if (this.options.tokens) {\n expr.tokens = this.tokens;\n }\n\n return expr;\n }\n\n parseExpression(disallowIn, refExpressionErrors) {\n if (disallowIn) {\n return this.disallowInAnd(() => this.parseExpressionBase(refExpressionErrors));\n }\n\n return this.allowInAnd(() => this.parseExpressionBase(refExpressionErrors));\n }\n\n parseExpressionBase(refExpressionErrors) {\n const startPos = this.state.start;\n const startLoc = this.state.startLoc;\n const expr = this.parseMaybeAssign(refExpressionErrors);\n\n if (this.match(types$1.comma)) {\n const node = this.startNodeAt(startPos, startLoc);\n node.expressions = [expr];\n\n while (this.eat(types$1.comma)) {\n node.expressions.push(this.parseMaybeAssign(refExpressionErrors));\n }\n\n this.toReferencedList(node.expressions);\n return this.finishNode(node, \"SequenceExpression\");\n }\n\n return expr;\n }\n\n parseMaybeAssignDisallowIn(refExpressionErrors, afterLeftParse) {\n return this.disallowInAnd(() => this.parseMaybeAssign(refExpressionErrors, afterLeftParse));\n }\n\n parseMaybeAssignAllowIn(refExpressionErrors, afterLeftParse) {\n return this.allowInAnd(() => this.parseMaybeAssign(refExpressionErrors, afterLeftParse));\n }\n\n setOptionalParametersError(refExpressionErrors, resultError) {\n var _resultError$pos;\n\n refExpressionErrors.optionalParameters = (_resultError$pos = resultError == null ? void 0 : resultError.pos) != null ? _resultError$pos : this.state.start;\n }\n\n parseMaybeAssign(refExpressionErrors, afterLeftParse) {\n const startPos = this.state.start;\n const startLoc = this.state.startLoc;\n\n if (this.isContextual(\"yield\")) {\n if (this.prodParam.hasYield) {\n let left = this.parseYield();\n\n if (afterLeftParse) {\n left = afterLeftParse.call(this, left, startPos, startLoc);\n }\n\n return left;\n }\n }\n\n let ownExpressionErrors;\n\n if (refExpressionErrors) {\n ownExpressionErrors = false;\n } else {\n refExpressionErrors = new ExpressionErrors();\n ownExpressionErrors = true;\n }\n\n if (this.match(types$1.parenL) || this.match(types$1.name)) {\n this.state.potentialArrowAt = this.state.start;\n }\n\n let left = this.parseMaybeConditional(refExpressionErrors);\n\n if (afterLeftParse) {\n left = afterLeftParse.call(this, left, startPos, startLoc);\n }\n\n if (this.state.type.isAssign) {\n const node = this.startNodeAt(startPos, startLoc);\n const operator = this.state.value;\n node.operator = operator;\n\n if (this.match(types$1.eq)) {\n node.left = this.toAssignable(left, true);\n refExpressionErrors.doubleProto = -1;\n } else {\n node.left = left;\n }\n\n if (refExpressionErrors.shorthandAssign >= node.left.start) {\n refExpressionErrors.shorthandAssign = -1;\n }\n\n this.checkLVal(left, \"assignment expression\");\n this.next();\n node.right = this.parseMaybeAssign();\n return this.finishNode(node, \"AssignmentExpression\");\n } else if (ownExpressionErrors) {\n this.checkExpressionErrors(refExpressionErrors, true);\n }\n\n return left;\n }\n\n parseMaybeConditional(refExpressionErrors) {\n const startPos = this.state.start;\n const startLoc = this.state.startLoc;\n const potentialArrowAt = this.state.potentialArrowAt;\n const expr = this.parseExprOps(refExpressionErrors);\n\n if (this.shouldExitDescending(expr, potentialArrowAt)) {\n return expr;\n }\n\n return this.parseConditional(expr, startPos, startLoc, refExpressionErrors);\n }\n\n parseConditional(expr, startPos, startLoc, refExpressionErrors) {\n if (this.eat(types$1.question)) {\n const node = this.startNodeAt(startPos, startLoc);\n node.test = expr;\n node.consequent = this.parseMaybeAssignAllowIn();\n this.expect(types$1.colon);\n node.alternate = this.parseMaybeAssign();\n return this.finishNode(node, \"ConditionalExpression\");\n }\n\n return expr;\n }\n\n parseExprOps(refExpressionErrors) {\n const startPos = this.state.start;\n const startLoc = this.state.startLoc;\n const potentialArrowAt = this.state.potentialArrowAt;\n const expr = this.parseMaybeUnary(refExpressionErrors);\n\n if (this.shouldExitDescending(expr, potentialArrowAt)) {\n return expr;\n }\n\n return this.parseExprOp(expr, startPos, startLoc, -1);\n }\n\n parseExprOp(left, leftStartPos, leftStartLoc, minPrec) {\n let prec = this.state.type.binop;\n\n if (prec != null && (this.prodParam.hasIn || !this.match(types$1._in))) {\n if (prec > minPrec) {\n const op = this.state.type;\n\n if (op === types$1.pipeline) {\n this.expectPlugin(\"pipelineOperator\");\n\n if (this.state.inFSharpPipelineDirectBody) {\n return left;\n }\n\n this.state.inPipeline = true;\n this.checkPipelineAtInfixOperator(left, leftStartPos);\n }\n\n const node = this.startNodeAt(leftStartPos, leftStartLoc);\n node.left = left;\n node.operator = this.state.value;\n const logical = op === types$1.logicalOR || op === types$1.logicalAND;\n const coalesce = op === types$1.nullishCoalescing;\n\n if (coalesce) {\n prec = types$1.logicalAND.binop;\n }\n\n this.next();\n\n if (op === types$1.pipeline && this.getPluginOption(\"pipelineOperator\", \"proposal\") === \"minimal\") {\n if (this.match(types$1.name) && this.state.value === \"await\" && this.prodParam.hasAwait) {\n throw this.raise(this.state.start, ErrorMessages.UnexpectedAwaitAfterPipelineBody);\n }\n }\n\n node.right = this.parseExprOpRightExpr(op, prec);\n this.finishNode(node, logical || coalesce ? \"LogicalExpression\" : \"BinaryExpression\");\n const nextOp = this.state.type;\n\n if (coalesce && (nextOp === types$1.logicalOR || nextOp === types$1.logicalAND) || logical && nextOp === types$1.nullishCoalescing) {\n throw this.raise(this.state.start, ErrorMessages.MixingCoalesceWithLogical);\n }\n\n return this.parseExprOp(node, leftStartPos, leftStartLoc, minPrec);\n }\n }\n\n return left;\n }\n\n parseExprOpRightExpr(op, prec) {\n const startPos = this.state.start;\n const startLoc = this.state.startLoc;\n\n switch (op) {\n case types$1.pipeline:\n switch (this.getPluginOption(\"pipelineOperator\", \"proposal\")) {\n case \"smart\":\n return this.withTopicPermittingContext(() => {\n return this.parseSmartPipelineBody(this.parseExprOpBaseRightExpr(op, prec), startPos, startLoc);\n });\n\n case \"fsharp\":\n return this.withSoloAwaitPermittingContext(() => {\n return this.parseFSharpPipelineBody(prec);\n });\n }\n\n default:\n return this.parseExprOpBaseRightExpr(op, prec);\n }\n }\n\n parseExprOpBaseRightExpr(op, prec) {\n const startPos = this.state.start;\n const startLoc = this.state.startLoc;\n return this.parseExprOp(this.parseMaybeUnary(), startPos, startLoc, op.rightAssociative ? prec - 1 : prec);\n }\n\n checkExponentialAfterUnary(node) {\n if (this.match(types$1.exponent)) {\n this.raise(node.argument.start, ErrorMessages.UnexpectedTokenUnaryExponentiation);\n }\n }\n\n parseMaybeUnary(refExpressionErrors, sawUnary) {\n const startPos = this.state.start;\n const startLoc = this.state.startLoc;\n const isAwait = this.isContextual(\"await\");\n\n if (isAwait && this.isAwaitAllowed()) {\n this.next();\n const expr = this.parseAwait(startPos, startLoc);\n if (!sawUnary) this.checkExponentialAfterUnary(expr);\n return expr;\n }\n\n if (this.isContextual(\"module\") && this.lookaheadCharCode() === 123 && !this.hasFollowingLineBreak()) {\n return this.parseModuleExpression();\n }\n\n const update = this.match(types$1.incDec);\n const node = this.startNode();\n\n if (this.state.type.prefix) {\n node.operator = this.state.value;\n node.prefix = true;\n\n if (this.match(types$1._throw)) {\n this.expectPlugin(\"throwExpressions\");\n }\n\n const isDelete = this.match(types$1._delete);\n this.next();\n node.argument = this.parseMaybeUnary(null, true);\n this.checkExpressionErrors(refExpressionErrors, true);\n\n if (this.state.strict && isDelete) {\n const arg = node.argument;\n\n if (arg.type === \"Identifier\") {\n this.raise(node.start, ErrorMessages.StrictDelete);\n } else if (this.hasPropertyAsPrivateName(arg)) {\n this.raise(node.start, ErrorMessages.DeletePrivateField);\n }\n }\n\n if (!update) {\n if (!sawUnary) this.checkExponentialAfterUnary(node);\n return this.finishNode(node, \"UnaryExpression\");\n }\n }\n\n const expr = this.parseUpdate(node, update, refExpressionErrors);\n\n if (isAwait) {\n const startsExpr = this.hasPlugin(\"v8intrinsic\") ? this.state.type.startsExpr : this.state.type.startsExpr && !this.match(types$1.modulo);\n\n if (startsExpr && !this.isAmbiguousAwait()) {\n this.raiseOverwrite(startPos, this.hasPlugin(\"topLevelAwait\") ? ErrorMessages.AwaitNotInAsyncContext : ErrorMessages.AwaitNotInAsyncFunction);\n return this.parseAwait(startPos, startLoc);\n }\n }\n\n return expr;\n }\n\n parseUpdate(node, update, refExpressionErrors) {\n if (update) {\n this.checkLVal(node.argument, \"prefix operation\");\n return this.finishNode(node, \"UpdateExpression\");\n }\n\n const startPos = this.state.start;\n const startLoc = this.state.startLoc;\n let expr = this.parseExprSubscripts(refExpressionErrors);\n if (this.checkExpressionErrors(refExpressionErrors, false)) return expr;\n\n while (this.state.type.postfix && !this.canInsertSemicolon()) {\n const node = this.startNodeAt(startPos, startLoc);\n node.operator = this.state.value;\n node.prefix = false;\n node.argument = expr;\n this.checkLVal(expr, \"postfix operation\");\n this.next();\n expr = this.finishNode(node, \"UpdateExpression\");\n }\n\n return expr;\n }\n\n parseExprSubscripts(refExpressionErrors) {\n const startPos = this.state.start;\n const startLoc = this.state.startLoc;\n const potentialArrowAt = this.state.potentialArrowAt;\n const expr = this.parseExprAtom(refExpressionErrors);\n\n if (this.shouldExitDescending(expr, potentialArrowAt)) {\n return expr;\n }\n\n return this.parseSubscripts(expr, startPos, startLoc);\n }\n\n parseSubscripts(base, startPos, startLoc, noCalls) {\n const state = {\n optionalChainMember: false,\n maybeAsyncArrow: this.atPossibleAsyncArrow(base),\n stop: false\n };\n\n do {\n base = this.parseSubscript(base, startPos, startLoc, noCalls, state);\n state.maybeAsyncArrow = false;\n } while (!state.stop);\n\n return base;\n }\n\n parseSubscript(base, startPos, startLoc, noCalls, state) {\n if (!noCalls && this.eat(types$1.doubleColon)) {\n return this.parseBind(base, startPos, startLoc, noCalls, state);\n } else if (this.match(types$1.backQuote)) {\n return this.parseTaggedTemplateExpression(base, startPos, startLoc, state);\n }\n\n let optional = false;\n\n if (this.match(types$1.questionDot)) {\n if (noCalls && this.lookaheadCharCode() === 40) {\n state.stop = true;\n return base;\n }\n\n state.optionalChainMember = optional = true;\n this.next();\n }\n\n if (!noCalls && this.match(types$1.parenL)) {\n return this.parseCoverCallAndAsyncArrowHead(base, startPos, startLoc, state, optional);\n } else if (optional || this.match(types$1.bracketL) || this.eat(types$1.dot)) {\n return this.parseMember(base, startPos, startLoc, state, optional);\n } else {\n state.stop = true;\n return base;\n }\n }\n\n parseMember(base, startPos, startLoc, state, optional) {\n const node = this.startNodeAt(startPos, startLoc);\n const computed = this.eat(types$1.bracketL);\n node.object = base;\n node.computed = computed;\n const privateName = !computed && this.match(types$1.privateName) && this.state.value;\n const property = computed ? this.parseExpression() : privateName ? this.parsePrivateName() : this.parseIdentifier(true);\n\n if (privateName !== false) {\n if (node.object.type === \"Super\") {\n this.raise(startPos, ErrorMessages.SuperPrivateField);\n }\n\n this.classScope.usePrivateName(privateName, property.start);\n }\n\n node.property = property;\n\n if (computed) {\n this.expect(types$1.bracketR);\n }\n\n if (state.optionalChainMember) {\n node.optional = optional;\n return this.finishNode(node, \"OptionalMemberExpression\");\n } else {\n return this.finishNode(node, \"MemberExpression\");\n }\n }\n\n parseBind(base, startPos, startLoc, noCalls, state) {\n const node = this.startNodeAt(startPos, startLoc);\n node.object = base;\n node.callee = this.parseNoCallExpr();\n state.stop = true;\n return this.parseSubscripts(this.finishNode(node, \"BindExpression\"), startPos, startLoc, noCalls);\n }\n\n parseCoverCallAndAsyncArrowHead(base, startPos, startLoc, state, optional) {\n const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n let refExpressionErrors = null;\n this.state.maybeInArrowParameters = true;\n this.next();\n let node = this.startNodeAt(startPos, startLoc);\n node.callee = base;\n\n if (state.maybeAsyncArrow) {\n this.expressionScope.enter(newAsyncArrowScope());\n refExpressionErrors = new ExpressionErrors();\n }\n\n if (state.optionalChainMember) {\n node.optional = optional;\n }\n\n if (optional) {\n node.arguments = this.parseCallExpressionArguments(types$1.parenR);\n } else {\n node.arguments = this.parseCallExpressionArguments(types$1.parenR, base.type === \"Import\", base.type !== \"Super\", node, refExpressionErrors);\n }\n\n this.finishCallExpression(node, state.optionalChainMember);\n\n if (state.maybeAsyncArrow && this.shouldParseAsyncArrow() && !optional) {\n state.stop = true;\n this.expressionScope.validateAsPattern();\n this.expressionScope.exit();\n node = this.parseAsyncArrowFromCallExpression(this.startNodeAt(startPos, startLoc), node);\n } else {\n if (state.maybeAsyncArrow) {\n this.checkExpressionErrors(refExpressionErrors, true);\n this.expressionScope.exit();\n }\n\n this.toReferencedArguments(node);\n }\n\n this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n return node;\n }\n\n toReferencedArguments(node, isParenthesizedExpr) {\n this.toReferencedListDeep(node.arguments, isParenthesizedExpr);\n }\n\n parseTaggedTemplateExpression(base, startPos, startLoc, state) {\n const node = this.startNodeAt(startPos, startLoc);\n node.tag = base;\n node.quasi = this.parseTemplate(true);\n\n if (state.optionalChainMember) {\n this.raise(startPos, ErrorMessages.OptionalChainingNoTemplate);\n }\n\n return this.finishNode(node, \"TaggedTemplateExpression\");\n }\n\n atPossibleAsyncArrow(base) {\n return base.type === \"Identifier\" && base.name === \"async\" && this.state.lastTokEnd === base.end && !this.canInsertSemicolon() && base.end - base.start === 5 && base.start === this.state.potentialArrowAt;\n }\n\n finishCallExpression(node, optional) {\n if (node.callee.type === \"Import\") {\n if (node.arguments.length === 2) {\n {\n if (!this.hasPlugin(\"moduleAttributes\")) {\n this.expectPlugin(\"importAssertions\");\n }\n }\n }\n\n if (node.arguments.length === 0 || node.arguments.length > 2) {\n this.raise(node.start, ErrorMessages.ImportCallArity, this.hasPlugin(\"importAssertions\") || this.hasPlugin(\"moduleAttributes\") ? \"one or two arguments\" : \"one argument\");\n } else {\n for (const arg of node.arguments) {\n if (arg.type === \"SpreadElement\") {\n this.raise(arg.start, ErrorMessages.ImportCallSpreadArgument);\n }\n }\n }\n }\n\n return this.finishNode(node, optional ? \"OptionalCallExpression\" : \"CallExpression\");\n }\n\n parseCallExpressionArguments(close, dynamicImport, allowPlaceholder, nodeForExtra, refExpressionErrors) {\n const elts = [];\n let first = true;\n const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n this.state.inFSharpPipelineDirectBody = false;\n\n while (!this.eat(close)) {\n if (first) {\n first = false;\n } else {\n this.expect(types$1.comma);\n\n if (this.match(close)) {\n if (dynamicImport && !this.hasPlugin(\"importAssertions\") && !this.hasPlugin(\"moduleAttributes\")) {\n this.raise(this.state.lastTokStart, ErrorMessages.ImportCallArgumentTrailingComma);\n }\n\n if (nodeForExtra) {\n this.addExtra(nodeForExtra, \"trailingComma\", this.state.lastTokStart);\n }\n\n this.next();\n break;\n }\n }\n\n elts.push(this.parseExprListItem(false, refExpressionErrors, allowPlaceholder));\n }\n\n this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n return elts;\n }\n\n shouldParseAsyncArrow() {\n return this.match(types$1.arrow) && !this.canInsertSemicolon();\n }\n\n parseAsyncArrowFromCallExpression(node, call) {\n var _call$extra;\n\n this.expect(types$1.arrow);\n this.parseArrowExpression(node, call.arguments, true, (_call$extra = call.extra) == null ? void 0 : _call$extra.trailingComma);\n return node;\n }\n\n parseNoCallExpr() {\n const startPos = this.state.start;\n const startLoc = this.state.startLoc;\n return this.parseSubscripts(this.parseExprAtom(), startPos, startLoc, true);\n }\n\n parseExprAtom(refExpressionErrors) {\n let node;\n\n switch (this.state.type) {\n case types$1._super:\n return this.parseSuper();\n\n case types$1._import:\n node = this.startNode();\n this.next();\n\n if (this.match(types$1.dot)) {\n return this.parseImportMetaProperty(node);\n }\n\n if (!this.match(types$1.parenL)) {\n this.raise(this.state.lastTokStart, ErrorMessages.UnsupportedImport);\n }\n\n return this.finishNode(node, \"Import\");\n\n case types$1._this:\n node = this.startNode();\n this.next();\n return this.finishNode(node, \"ThisExpression\");\n\n case types$1.name:\n {\n const canBeArrow = this.state.potentialArrowAt === this.state.start;\n const containsEsc = this.state.containsEsc;\n const id = this.parseIdentifier();\n\n if (!containsEsc && id.name === \"async\" && !this.canInsertSemicolon()) {\n if (this.match(types$1._function)) {\n this.next();\n return this.parseFunction(this.startNodeAtNode(id), undefined, true);\n } else if (this.match(types$1.name)) {\n if (this.lookaheadCharCode() === 61) {\n return this.parseAsyncArrowUnaryFunction(id);\n } else {\n return id;\n }\n } else if (this.match(types$1._do)) {\n return this.parseDo(true);\n }\n }\n\n if (canBeArrow && this.match(types$1.arrow) && !this.canInsertSemicolon()) {\n this.next();\n return this.parseArrowExpression(this.startNodeAtNode(id), [id], false);\n }\n\n return id;\n }\n\n case types$1._do:\n {\n return this.parseDo(false);\n }\n\n case types$1.slash:\n case types$1.slashAssign:\n {\n this.readRegexp();\n return this.parseRegExpLiteral(this.state.value);\n }\n\n case types$1.num:\n return this.parseNumericLiteral(this.state.value);\n\n case types$1.bigint:\n return this.parseBigIntLiteral(this.state.value);\n\n case types$1.decimal:\n return this.parseDecimalLiteral(this.state.value);\n\n case types$1.string:\n return this.parseStringLiteral(this.state.value);\n\n case types$1._null:\n return this.parseNullLiteral();\n\n case types$1._true:\n return this.parseBooleanLiteral(true);\n\n case types$1._false:\n return this.parseBooleanLiteral(false);\n\n case types$1.parenL:\n {\n const canBeArrow = this.state.potentialArrowAt === this.state.start;\n return this.parseParenAndDistinguishExpression(canBeArrow);\n }\n\n case types$1.bracketBarL:\n case types$1.bracketHashL:\n {\n return this.parseArrayLike(this.state.type === types$1.bracketBarL ? types$1.bracketBarR : types$1.bracketR, false, true, refExpressionErrors);\n }\n\n case types$1.bracketL:\n {\n return this.parseArrayLike(types$1.bracketR, true, false, refExpressionErrors);\n }\n\n case types$1.braceBarL:\n case types$1.braceHashL:\n {\n return this.parseObjectLike(this.state.type === types$1.braceBarL ? types$1.braceBarR : types$1.braceR, false, true, refExpressionErrors);\n }\n\n case types$1.braceL:\n {\n return this.parseObjectLike(types$1.braceR, false, false, refExpressionErrors);\n }\n\n case types$1._function:\n return this.parseFunctionOrFunctionSent();\n\n case types$1.at:\n this.parseDecorators();\n\n case types$1._class:\n node = this.startNode();\n this.takeDecorators(node);\n return this.parseClass(node, false);\n\n case types$1._new:\n return this.parseNewOrNewTarget();\n\n case types$1.backQuote:\n return this.parseTemplate(false);\n\n case types$1.doubleColon:\n {\n node = this.startNode();\n this.next();\n node.object = null;\n const callee = node.callee = this.parseNoCallExpr();\n\n if (callee.type === \"MemberExpression\") {\n return this.finishNode(node, \"BindExpression\");\n } else {\n throw this.raise(callee.start, ErrorMessages.UnsupportedBind);\n }\n }\n\n case types$1.privateName:\n {\n const start = this.state.start;\n const value = this.state.value;\n node = this.parsePrivateName();\n\n if (this.match(types$1._in)) {\n this.expectPlugin(\"privateIn\");\n this.classScope.usePrivateName(value, node.start);\n } else if (this.hasPlugin(\"privateIn\")) {\n this.raise(this.state.start, ErrorMessages.PrivateInExpectedIn, value);\n } else {\n throw this.unexpected(start);\n }\n\n return node;\n }\n\n case types$1.hash:\n {\n if (this.state.inPipeline) {\n node = this.startNode();\n\n if (this.getPluginOption(\"pipelineOperator\", \"proposal\") !== \"smart\") {\n this.raise(node.start, ErrorMessages.PrimaryTopicRequiresSmartPipeline);\n }\n\n this.next();\n\n if (!this.primaryTopicReferenceIsAllowedInCurrentTopicContext()) {\n this.raise(node.start, ErrorMessages.PrimaryTopicNotAllowed);\n }\n\n this.registerTopicReference();\n return this.finishNode(node, \"PipelinePrimaryTopicReference\");\n }\n }\n\n case types$1.relational:\n {\n if (this.state.value === \"<\") {\n const lookaheadCh = this.input.codePointAt(this.nextTokenStart());\n\n if (isIdentifierStart(lookaheadCh) || lookaheadCh === 62) {\n this.expectOnePlugin([\"jsx\", \"flow\", \"typescript\"]);\n }\n }\n }\n\n default:\n throw this.unexpected();\n }\n }\n\n parseAsyncArrowUnaryFunction(id) {\n const node = this.startNodeAtNode(id);\n this.prodParam.enter(functionFlags(true, this.prodParam.hasYield));\n const params = [this.parseIdentifier()];\n this.prodParam.exit();\n\n if (this.hasPrecedingLineBreak()) {\n this.raise(this.state.pos, ErrorMessages.LineTerminatorBeforeArrow);\n }\n\n this.expect(types$1.arrow);\n this.parseArrowExpression(node, params, true);\n return node;\n }\n\n parseDo(isAsync) {\n this.expectPlugin(\"doExpressions\");\n\n if (isAsync) {\n this.expectPlugin(\"asyncDoExpressions\");\n }\n\n const node = this.startNode();\n node.async = isAsync;\n this.next();\n const oldLabels = this.state.labels;\n this.state.labels = [];\n\n if (isAsync) {\n this.prodParam.enter(PARAM_AWAIT);\n node.body = this.parseBlock();\n this.prodParam.exit();\n } else {\n node.body = this.parseBlock();\n }\n\n this.state.labels = oldLabels;\n return this.finishNode(node, \"DoExpression\");\n }\n\n parseSuper() {\n const node = this.startNode();\n this.next();\n\n if (this.match(types$1.parenL) && !this.scope.allowDirectSuper && !this.options.allowSuperOutsideMethod) {\n this.raise(node.start, ErrorMessages.SuperNotAllowed);\n } else if (!this.scope.allowSuper && !this.options.allowSuperOutsideMethod) {\n this.raise(node.start, ErrorMessages.UnexpectedSuper);\n }\n\n if (!this.match(types$1.parenL) && !this.match(types$1.bracketL) && !this.match(types$1.dot)) {\n this.raise(node.start, ErrorMessages.UnsupportedSuper);\n }\n\n return this.finishNode(node, \"Super\");\n }\n\n parseMaybePrivateName(isPrivateNameAllowed) {\n const isPrivate = this.match(types$1.privateName);\n\n if (isPrivate) {\n if (!isPrivateNameAllowed) {\n this.raise(this.state.start + 1, ErrorMessages.UnexpectedPrivateField);\n }\n\n return this.parsePrivateName();\n } else {\n return this.parseIdentifier(true);\n }\n }\n\n parsePrivateName() {\n const node = this.startNode();\n const id = this.startNodeAt(this.state.start + 1, new Position(this.state.curLine, this.state.start + 1 - this.state.lineStart));\n const name = this.state.value;\n this.next();\n node.id = this.createIdentifier(id, name);\n return this.finishNode(node, \"PrivateName\");\n }\n\n parseFunctionOrFunctionSent() {\n const node = this.startNode();\n this.next();\n\n if (this.prodParam.hasYield && this.match(types$1.dot)) {\n const meta = this.createIdentifier(this.startNodeAtNode(node), \"function\");\n this.next();\n return this.parseMetaProperty(node, meta, \"sent\");\n }\n\n return this.parseFunction(node);\n }\n\n parseMetaProperty(node, meta, propertyName) {\n node.meta = meta;\n\n if (meta.name === \"function\" && propertyName === \"sent\") {\n if (this.isContextual(propertyName)) {\n this.expectPlugin(\"functionSent\");\n } else if (!this.hasPlugin(\"functionSent\")) {\n this.unexpected();\n }\n }\n\n const containsEsc = this.state.containsEsc;\n node.property = this.parseIdentifier(true);\n\n if (node.property.name !== propertyName || containsEsc) {\n this.raise(node.property.start, ErrorMessages.UnsupportedMetaProperty, meta.name, propertyName);\n }\n\n return this.finishNode(node, \"MetaProperty\");\n }\n\n parseImportMetaProperty(node) {\n const id = this.createIdentifier(this.startNodeAtNode(node), \"import\");\n this.next();\n\n if (this.isContextual(\"meta\")) {\n if (!this.inModule) {\n this.raise(id.start, SourceTypeModuleErrorMessages.ImportMetaOutsideModule);\n }\n\n this.sawUnambiguousESM = true;\n }\n\n return this.parseMetaProperty(node, id, \"meta\");\n }\n\n parseLiteralAtNode(value, type, node) {\n this.addExtra(node, \"rawValue\", value);\n this.addExtra(node, \"raw\", this.input.slice(node.start, this.state.end));\n node.value = value;\n this.next();\n return this.finishNode(node, type);\n }\n\n parseLiteral(value, type) {\n const node = this.startNode();\n return this.parseLiteralAtNode(value, type, node);\n }\n\n parseStringLiteral(value) {\n return this.parseLiteral(value, \"StringLiteral\");\n }\n\n parseNumericLiteral(value) {\n return this.parseLiteral(value, \"NumericLiteral\");\n }\n\n parseBigIntLiteral(value) {\n return this.parseLiteral(value, \"BigIntLiteral\");\n }\n\n parseDecimalLiteral(value) {\n return this.parseLiteral(value, \"DecimalLiteral\");\n }\n\n parseRegExpLiteral(value) {\n const node = this.parseLiteral(value.value, \"RegExpLiteral\");\n node.pattern = value.pattern;\n node.flags = value.flags;\n return node;\n }\n\n parseBooleanLiteral(value) {\n const node = this.startNode();\n node.value = value;\n this.next();\n return this.finishNode(node, \"BooleanLiteral\");\n }\n\n parseNullLiteral() {\n const node = this.startNode();\n this.next();\n return this.finishNode(node, \"NullLiteral\");\n }\n\n parseParenAndDistinguishExpression(canBeArrow) {\n const startPos = this.state.start;\n const startLoc = this.state.startLoc;\n let val;\n this.next();\n this.expressionScope.enter(newArrowHeadScope());\n const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n this.state.maybeInArrowParameters = true;\n this.state.inFSharpPipelineDirectBody = false;\n const innerStartPos = this.state.start;\n const innerStartLoc = this.state.startLoc;\n const exprList = [];\n const refExpressionErrors = new ExpressionErrors();\n let first = true;\n let spreadStart;\n let optionalCommaStart;\n\n while (!this.match(types$1.parenR)) {\n if (first) {\n first = false;\n } else {\n this.expect(types$1.comma, refExpressionErrors.optionalParameters === -1 ? null : refExpressionErrors.optionalParameters);\n\n if (this.match(types$1.parenR)) {\n optionalCommaStart = this.state.start;\n break;\n }\n }\n\n if (this.match(types$1.ellipsis)) {\n const spreadNodeStartPos = this.state.start;\n const spreadNodeStartLoc = this.state.startLoc;\n spreadStart = this.state.start;\n exprList.push(this.parseParenItem(this.parseRestBinding(), spreadNodeStartPos, spreadNodeStartLoc));\n this.checkCommaAfterRest(41);\n break;\n } else {\n exprList.push(this.parseMaybeAssignAllowIn(refExpressionErrors, this.parseParenItem));\n }\n }\n\n const innerEndPos = this.state.lastTokEnd;\n const innerEndLoc = this.state.lastTokEndLoc;\n this.expect(types$1.parenR);\n this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n let arrowNode = this.startNodeAt(startPos, startLoc);\n\n if (canBeArrow && this.shouldParseArrow() && (arrowNode = this.parseArrow(arrowNode))) {\n this.expressionScope.validateAsPattern();\n this.expressionScope.exit();\n this.parseArrowExpression(arrowNode, exprList, false);\n return arrowNode;\n }\n\n this.expressionScope.exit();\n\n if (!exprList.length) {\n this.unexpected(this.state.lastTokStart);\n }\n\n if (optionalCommaStart) this.unexpected(optionalCommaStart);\n if (spreadStart) this.unexpected(spreadStart);\n this.checkExpressionErrors(refExpressionErrors, true);\n this.toReferencedListDeep(exprList, true);\n\n if (exprList.length > 1) {\n val = this.startNodeAt(innerStartPos, innerStartLoc);\n val.expressions = exprList;\n this.finishNodeAt(val, \"SequenceExpression\", innerEndPos, innerEndLoc);\n } else {\n val = exprList[0];\n }\n\n if (!this.options.createParenthesizedExpressions) {\n this.addExtra(val, \"parenthesized\", true);\n this.addExtra(val, \"parenStart\", startPos);\n return val;\n }\n\n const parenExpression = this.startNodeAt(startPos, startLoc);\n parenExpression.expression = val;\n this.finishNode(parenExpression, \"ParenthesizedExpression\");\n return parenExpression;\n }\n\n shouldParseArrow() {\n return !this.canInsertSemicolon();\n }\n\n parseArrow(node) {\n if (this.eat(types$1.arrow)) {\n return node;\n }\n }\n\n parseParenItem(node, startPos, startLoc) {\n return node;\n }\n\n parseNewOrNewTarget() {\n const node = this.startNode();\n this.next();\n\n if (this.match(types$1.dot)) {\n const meta = this.createIdentifier(this.startNodeAtNode(node), \"new\");\n this.next();\n const metaProp = this.parseMetaProperty(node, meta, \"target\");\n\n if (!this.scope.inNonArrowFunction && !this.scope.inClass) {\n this.raise(metaProp.start, ErrorMessages.UnexpectedNewTarget);\n }\n\n return metaProp;\n }\n\n return this.parseNew(node);\n }\n\n parseNew(node) {\n node.callee = this.parseNoCallExpr();\n\n if (node.callee.type === \"Import\") {\n this.raise(node.callee.start, ErrorMessages.ImportCallNotNewExpression);\n } else if (this.isOptionalChain(node.callee)) {\n this.raise(this.state.lastTokEnd, ErrorMessages.OptionalChainingNoNew);\n } else if (this.eat(types$1.questionDot)) {\n this.raise(this.state.start, ErrorMessages.OptionalChainingNoNew);\n }\n\n this.parseNewArguments(node);\n return this.finishNode(node, \"NewExpression\");\n }\n\n parseNewArguments(node) {\n if (this.eat(types$1.parenL)) {\n const args = this.parseExprList(types$1.parenR);\n this.toReferencedList(args);\n node.arguments = args;\n } else {\n node.arguments = [];\n }\n }\n\n parseTemplateElement(isTagged) {\n const elem = this.startNode();\n\n if (this.state.value === null) {\n if (!isTagged) {\n this.raise(this.state.start + 1, ErrorMessages.InvalidEscapeSequenceTemplate);\n }\n }\n\n elem.value = {\n raw: this.input.slice(this.state.start, this.state.end).replace(/\\r\\n?/g, \"\\n\"),\n cooked: this.state.value\n };\n this.next();\n elem.tail = this.match(types$1.backQuote);\n return this.finishNode(elem, \"TemplateElement\");\n }\n\n parseTemplate(isTagged) {\n const node = this.startNode();\n this.next();\n node.expressions = [];\n let curElt = this.parseTemplateElement(isTagged);\n node.quasis = [curElt];\n\n while (!curElt.tail) {\n this.expect(types$1.dollarBraceL);\n node.expressions.push(this.parseTemplateSubstitution());\n this.expect(types$1.braceR);\n node.quasis.push(curElt = this.parseTemplateElement(isTagged));\n }\n\n this.next();\n return this.finishNode(node, \"TemplateLiteral\");\n }\n\n parseTemplateSubstitution() {\n return this.parseExpression();\n }\n\n parseObjectLike(close, isPattern, isRecord, refExpressionErrors) {\n if (isRecord) {\n this.expectPlugin(\"recordAndTuple\");\n }\n\n const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n this.state.inFSharpPipelineDirectBody = false;\n const propHash = Object.create(null);\n let first = true;\n const node = this.startNode();\n node.properties = [];\n this.next();\n\n while (!this.match(close)) {\n if (first) {\n first = false;\n } else {\n this.expect(types$1.comma);\n\n if (this.match(close)) {\n this.addExtra(node, \"trailingComma\", this.state.lastTokStart);\n break;\n }\n }\n\n const prop = this.parsePropertyDefinition(isPattern, refExpressionErrors);\n\n if (!isPattern) {\n this.checkProto(prop, isRecord, propHash, refExpressionErrors);\n }\n\n if (isRecord && !this.isObjectProperty(prop) && prop.type !== \"SpreadElement\") {\n this.raise(prop.start, ErrorMessages.InvalidRecordProperty);\n }\n\n if (prop.shorthand) {\n this.addExtra(prop, \"shorthand\", true);\n }\n\n node.properties.push(prop);\n }\n\n this.next();\n this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n let type = \"ObjectExpression\";\n\n if (isPattern) {\n type = \"ObjectPattern\";\n } else if (isRecord) {\n type = \"RecordExpression\";\n }\n\n return this.finishNode(node, type);\n }\n\n maybeAsyncOrAccessorProp(prop) {\n return !prop.computed && prop.key.type === \"Identifier\" && (this.isLiteralPropertyName() || this.match(types$1.bracketL) || this.match(types$1.star));\n }\n\n parsePropertyDefinition(isPattern, refExpressionErrors) {\n let decorators = [];\n\n if (this.match(types$1.at)) {\n if (this.hasPlugin(\"decorators\")) {\n this.raise(this.state.start, ErrorMessages.UnsupportedPropertyDecorator);\n }\n\n while (this.match(types$1.at)) {\n decorators.push(this.parseDecorator());\n }\n }\n\n const prop = this.startNode();\n let isGenerator = false;\n let isAsync = false;\n let isAccessor = false;\n let startPos;\n let startLoc;\n\n if (this.match(types$1.ellipsis)) {\n if (decorators.length) this.unexpected();\n\n if (isPattern) {\n this.next();\n prop.argument = this.parseIdentifier();\n this.checkCommaAfterRest(125);\n return this.finishNode(prop, \"RestElement\");\n }\n\n return this.parseSpread();\n }\n\n if (decorators.length) {\n prop.decorators = decorators;\n decorators = [];\n }\n\n prop.method = false;\n\n if (isPattern || refExpressionErrors) {\n startPos = this.state.start;\n startLoc = this.state.startLoc;\n }\n\n if (!isPattern) {\n isGenerator = this.eat(types$1.star);\n }\n\n const containsEsc = this.state.containsEsc;\n const key = this.parsePropertyName(prop, false);\n\n if (!isPattern && !isGenerator && !containsEsc && this.maybeAsyncOrAccessorProp(prop)) {\n const keyName = key.name;\n\n if (keyName === \"async\" && !this.hasPrecedingLineBreak()) {\n isAsync = true;\n isGenerator = this.eat(types$1.star);\n this.parsePropertyName(prop, false);\n }\n\n if (keyName === \"get\" || keyName === \"set\") {\n isAccessor = true;\n prop.kind = keyName;\n\n if (this.match(types$1.star)) {\n isGenerator = true;\n this.raise(this.state.pos, ErrorMessages.AccessorIsGenerator, keyName);\n this.next();\n }\n\n this.parsePropertyName(prop, false);\n }\n }\n\n this.parseObjPropValue(prop, startPos, startLoc, isGenerator, isAsync, isPattern, isAccessor, refExpressionErrors);\n return prop;\n }\n\n getGetterSetterExpectedParamCount(method) {\n return method.kind === \"get\" ? 0 : 1;\n }\n\n getObjectOrClassMethodParams(method) {\n return method.params;\n }\n\n checkGetterSetterParams(method) {\n var _params;\n\n const paramCount = this.getGetterSetterExpectedParamCount(method);\n const params = this.getObjectOrClassMethodParams(method);\n const start = method.start;\n\n if (params.length !== paramCount) {\n if (method.kind === \"get\") {\n this.raise(start, ErrorMessages.BadGetterArity);\n } else {\n this.raise(start, ErrorMessages.BadSetterArity);\n }\n }\n\n if (method.kind === \"set\" && ((_params = params[params.length - 1]) == null ? void 0 : _params.type) === \"RestElement\") {\n this.raise(start, ErrorMessages.BadSetterRestParameter);\n }\n }\n\n parseObjectMethod(prop, isGenerator, isAsync, isPattern, isAccessor) {\n if (isAccessor) {\n this.parseMethod(prop, isGenerator, false, false, false, \"ObjectMethod\");\n this.checkGetterSetterParams(prop);\n return prop;\n }\n\n if (isAsync || isGenerator || this.match(types$1.parenL)) {\n if (isPattern) this.unexpected();\n prop.kind = \"method\";\n prop.method = true;\n return this.parseMethod(prop, isGenerator, isAsync, false, false, \"ObjectMethod\");\n }\n }\n\n parseObjectProperty(prop, startPos, startLoc, isPattern, refExpressionErrors) {\n prop.shorthand = false;\n\n if (this.eat(types$1.colon)) {\n prop.value = isPattern ? this.parseMaybeDefault(this.state.start, this.state.startLoc) : this.parseMaybeAssignAllowIn(refExpressionErrors);\n return this.finishNode(prop, \"ObjectProperty\");\n }\n\n if (!prop.computed && prop.key.type === \"Identifier\") {\n this.checkReservedWord(prop.key.name, prop.key.start, true, false);\n\n if (isPattern) {\n prop.value = this.parseMaybeDefault(startPos, startLoc, prop.key.__clone());\n } else if (this.match(types$1.eq) && refExpressionErrors) {\n if (refExpressionErrors.shorthandAssign === -1) {\n refExpressionErrors.shorthandAssign = this.state.start;\n }\n\n prop.value = this.parseMaybeDefault(startPos, startLoc, prop.key.__clone());\n } else {\n prop.value = prop.key.__clone();\n }\n\n prop.shorthand = true;\n return this.finishNode(prop, \"ObjectProperty\");\n }\n }\n\n parseObjPropValue(prop, startPos, startLoc, isGenerator, isAsync, isPattern, isAccessor, refExpressionErrors) {\n const node = this.parseObjectMethod(prop, isGenerator, isAsync, isPattern, isAccessor) || this.parseObjectProperty(prop, startPos, startLoc, isPattern, refExpressionErrors);\n if (!node) this.unexpected();\n return node;\n }\n\n parsePropertyName(prop, isPrivateNameAllowed) {\n if (this.eat(types$1.bracketL)) {\n prop.computed = true;\n prop.key = this.parseMaybeAssignAllowIn();\n this.expect(types$1.bracketR);\n } else {\n const oldInPropertyName = this.state.inPropertyName;\n this.state.inPropertyName = true;\n const type = this.state.type;\n prop.key = type === types$1.num || type === types$1.string || type === types$1.bigint || type === types$1.decimal ? this.parseExprAtom() : this.parseMaybePrivateName(isPrivateNameAllowed);\n\n if (type !== types$1.privateName) {\n prop.computed = false;\n }\n\n this.state.inPropertyName = oldInPropertyName;\n }\n\n return prop.key;\n }\n\n initFunction(node, isAsync) {\n node.id = null;\n node.generator = false;\n node.async = !!isAsync;\n }\n\n parseMethod(node, isGenerator, isAsync, isConstructor, allowDirectSuper, type, inClassScope = false) {\n this.initFunction(node, isAsync);\n node.generator = !!isGenerator;\n const allowModifiers = isConstructor;\n this.scope.enter(SCOPE_FUNCTION | SCOPE_SUPER | (inClassScope ? SCOPE_CLASS : 0) | (allowDirectSuper ? SCOPE_DIRECT_SUPER : 0));\n this.prodParam.enter(functionFlags(isAsync, node.generator));\n this.parseFunctionParams(node, allowModifiers);\n this.parseFunctionBodyAndFinish(node, type, true);\n this.prodParam.exit();\n this.scope.exit();\n return node;\n }\n\n parseArrayLike(close, canBePattern, isTuple, refExpressionErrors) {\n if (isTuple) {\n this.expectPlugin(\"recordAndTuple\");\n }\n\n const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n this.state.inFSharpPipelineDirectBody = false;\n const node = this.startNode();\n this.next();\n node.elements = this.parseExprList(close, !isTuple, refExpressionErrors, node);\n this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n return this.finishNode(node, isTuple ? \"TupleExpression\" : \"ArrayExpression\");\n }\n\n parseArrowExpression(node, params, isAsync, trailingCommaPos) {\n this.scope.enter(SCOPE_FUNCTION | SCOPE_ARROW);\n let flags = functionFlags(isAsync, false);\n\n if (!this.match(types$1.bracketL) && this.prodParam.hasIn) {\n flags |= PARAM_IN;\n }\n\n this.prodParam.enter(flags);\n this.initFunction(node, isAsync);\n const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n\n if (params) {\n this.state.maybeInArrowParameters = true;\n this.setArrowFunctionParameters(node, params, trailingCommaPos);\n }\n\n this.state.maybeInArrowParameters = false;\n this.parseFunctionBody(node, true);\n this.prodParam.exit();\n this.scope.exit();\n this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n return this.finishNode(node, \"ArrowFunctionExpression\");\n }\n\n setArrowFunctionParameters(node, params, trailingCommaPos) {\n node.params = this.toAssignableList(params, trailingCommaPos, false);\n }\n\n parseFunctionBodyAndFinish(node, type, isMethod = false) {\n this.parseFunctionBody(node, false, isMethod);\n this.finishNode(node, type);\n }\n\n parseFunctionBody(node, allowExpression, isMethod = false) {\n const isExpression = allowExpression && !this.match(types$1.braceL);\n this.expressionScope.enter(newExpressionScope());\n\n if (isExpression) {\n node.body = this.parseMaybeAssign();\n this.checkParams(node, false, allowExpression, false);\n } else {\n const oldStrict = this.state.strict;\n const oldLabels = this.state.labels;\n this.state.labels = [];\n this.prodParam.enter(this.prodParam.currentFlags() | PARAM_RETURN);\n node.body = this.parseBlock(true, false, hasStrictModeDirective => {\n const nonSimple = !this.isSimpleParamList(node.params);\n\n if (hasStrictModeDirective && nonSimple) {\n const errorPos = (node.kind === \"method\" || node.kind === \"constructor\") && !!node.key ? node.key.end : node.start;\n this.raise(errorPos, ErrorMessages.IllegalLanguageModeDirective);\n }\n\n const strictModeChanged = !oldStrict && this.state.strict;\n this.checkParams(node, !this.state.strict && !allowExpression && !isMethod && !nonSimple, allowExpression, strictModeChanged);\n\n if (this.state.strict && node.id) {\n this.checkLVal(node.id, \"function name\", BIND_OUTSIDE, undefined, undefined, strictModeChanged);\n }\n });\n this.prodParam.exit();\n this.expressionScope.exit();\n this.state.labels = oldLabels;\n }\n }\n\n isSimpleParamList(params) {\n for (let i = 0, len = params.length; i < len; i++) {\n if (params[i].type !== \"Identifier\") return false;\n }\n\n return true;\n }\n\n checkParams(node, allowDuplicates, isArrowFunction, strictModeChanged = true) {\n const checkClashes = new Set();\n\n for (const param of node.params) {\n this.checkLVal(param, \"function parameter list\", BIND_VAR, allowDuplicates ? null : checkClashes, undefined, strictModeChanged);\n }\n }\n\n parseExprList(close, allowEmpty, refExpressionErrors, nodeForExtra) {\n const elts = [];\n let first = true;\n\n while (!this.eat(close)) {\n if (first) {\n first = false;\n } else {\n this.expect(types$1.comma);\n\n if (this.match(close)) {\n if (nodeForExtra) {\n this.addExtra(nodeForExtra, \"trailingComma\", this.state.lastTokStart);\n }\n\n this.next();\n break;\n }\n }\n\n elts.push(this.parseExprListItem(allowEmpty, refExpressionErrors));\n }\n\n return elts;\n }\n\n parseExprListItem(allowEmpty, refExpressionErrors, allowPlaceholder) {\n let elt;\n\n if (this.match(types$1.comma)) {\n if (!allowEmpty) {\n this.raise(this.state.pos, ErrorMessages.UnexpectedToken, \",\");\n }\n\n elt = null;\n } else if (this.match(types$1.ellipsis)) {\n const spreadNodeStartPos = this.state.start;\n const spreadNodeStartLoc = this.state.startLoc;\n elt = this.parseParenItem(this.parseSpread(refExpressionErrors), spreadNodeStartPos, spreadNodeStartLoc);\n } else if (this.match(types$1.question)) {\n this.expectPlugin(\"partialApplication\");\n\n if (!allowPlaceholder) {\n this.raise(this.state.start, ErrorMessages.UnexpectedArgumentPlaceholder);\n }\n\n const node = this.startNode();\n this.next();\n elt = this.finishNode(node, \"ArgumentPlaceholder\");\n } else {\n elt = this.parseMaybeAssignAllowIn(refExpressionErrors, this.parseParenItem);\n }\n\n return elt;\n }\n\n parseIdentifier(liberal) {\n const node = this.startNode();\n const name = this.parseIdentifierName(node.start, liberal);\n return this.createIdentifier(node, name);\n }\n\n createIdentifier(node, name) {\n node.name = name;\n node.loc.identifierName = name;\n return this.finishNode(node, \"Identifier\");\n }\n\n parseIdentifierName(pos, liberal) {\n let name;\n const {\n start,\n type\n } = this.state;\n\n if (type === types$1.name) {\n name = this.state.value;\n } else if (type.keyword) {\n name = type.keyword;\n } else {\n throw this.unexpected();\n }\n\n if (liberal) {\n this.state.type = types$1.name;\n } else {\n this.checkReservedWord(name, start, !!type.keyword, false);\n }\n\n this.next();\n return name;\n }\n\n checkReservedWord(word, startLoc, checkKeywords, isBinding) {\n if (word.length > 10) {\n return;\n }\n\n if (!canBeReservedWord(word)) {\n return;\n }\n\n if (word === \"yield\") {\n if (this.prodParam.hasYield) {\n this.raise(startLoc, ErrorMessages.YieldBindingIdentifier);\n return;\n }\n } else if (word === \"await\") {\n if (this.prodParam.hasAwait) {\n this.raise(startLoc, ErrorMessages.AwaitBindingIdentifier);\n return;\n } else if (this.scope.inStaticBlock && !this.scope.inNonArrowFunction) {\n this.raise(startLoc, ErrorMessages.AwaitBindingIdentifierInStaticBlock);\n return;\n } else {\n this.expressionScope.recordAsyncArrowParametersError(startLoc, ErrorMessages.AwaitBindingIdentifier);\n }\n } else if (word === \"arguments\") {\n if (this.scope.inClassAndNotInNonArrowFunction) {\n this.raise(startLoc, ErrorMessages.ArgumentsInClass);\n return;\n }\n }\n\n if (checkKeywords && isKeyword(word)) {\n this.raise(startLoc, ErrorMessages.UnexpectedKeyword, word);\n return;\n }\n\n const reservedTest = !this.state.strict ? isReservedWord : isBinding ? isStrictBindReservedWord : isStrictReservedWord;\n\n if (reservedTest(word, this.inModule)) {\n this.raise(startLoc, ErrorMessages.UnexpectedReservedWord, word);\n }\n }\n\n isAwaitAllowed() {\n if (this.prodParam.hasAwait) return true;\n\n if (this.options.allowAwaitOutsideFunction && !this.scope.inFunction) {\n return true;\n }\n\n return false;\n }\n\n parseAwait(startPos, startLoc) {\n const node = this.startNodeAt(startPos, startLoc);\n this.expressionScope.recordParameterInitializerError(node.start, ErrorMessages.AwaitExpressionFormalParameter);\n\n if (this.eat(types$1.star)) {\n this.raise(node.start, ErrorMessages.ObsoleteAwaitStar);\n }\n\n if (!this.scope.inFunction && !this.options.allowAwaitOutsideFunction) {\n if (this.isAmbiguousAwait()) {\n this.ambiguousScriptDifferentAst = true;\n } else {\n this.sawUnambiguousESM = true;\n }\n }\n\n if (!this.state.soloAwait) {\n node.argument = this.parseMaybeUnary(null, true);\n }\n\n return this.finishNode(node, \"AwaitExpression\");\n }\n\n isAmbiguousAwait() {\n return this.hasPrecedingLineBreak() || this.match(types$1.plusMin) || this.match(types$1.parenL) || this.match(types$1.bracketL) || this.match(types$1.backQuote) || this.match(types$1.regexp) || this.match(types$1.slash) || this.hasPlugin(\"v8intrinsic\") && this.match(types$1.modulo);\n }\n\n parseYield() {\n const node = this.startNode();\n this.expressionScope.recordParameterInitializerError(node.start, ErrorMessages.YieldInParameter);\n this.next();\n let delegating = false;\n let argument = null;\n\n if (!this.hasPrecedingLineBreak()) {\n delegating = this.eat(types$1.star);\n\n switch (this.state.type) {\n case types$1.semi:\n case types$1.eof:\n case types$1.braceR:\n case types$1.parenR:\n case types$1.bracketR:\n case types$1.braceBarR:\n case types$1.colon:\n case types$1.comma:\n if (!delegating) break;\n\n default:\n argument = this.parseMaybeAssign();\n }\n }\n\n node.delegate = delegating;\n node.argument = argument;\n return this.finishNode(node, \"YieldExpression\");\n }\n\n checkPipelineAtInfixOperator(left, leftStartPos) {\n if (this.getPluginOption(\"pipelineOperator\", \"proposal\") === \"smart\") {\n if (left.type === \"SequenceExpression\") {\n this.raise(leftStartPos, ErrorMessages.PipelineHeadSequenceExpression);\n }\n }\n }\n\n parseSmartPipelineBody(childExpression, startPos, startLoc) {\n this.checkSmartPipelineBodyEarlyErrors(childExpression, startPos);\n return this.parseSmartPipelineBodyInStyle(childExpression, startPos, startLoc);\n }\n\n checkSmartPipelineBodyEarlyErrors(childExpression, startPos) {\n if (this.match(types$1.arrow)) {\n throw this.raise(this.state.start, ErrorMessages.PipelineBodyNoArrow);\n } else if (childExpression.type === \"SequenceExpression\") {\n this.raise(startPos, ErrorMessages.PipelineBodySequenceExpression);\n }\n }\n\n parseSmartPipelineBodyInStyle(childExpression, startPos, startLoc) {\n const bodyNode = this.startNodeAt(startPos, startLoc);\n const isSimpleReference = this.isSimpleReference(childExpression);\n\n if (isSimpleReference) {\n bodyNode.callee = childExpression;\n } else {\n if (!this.topicReferenceWasUsedInCurrentTopicContext()) {\n this.raise(startPos, ErrorMessages.PipelineTopicUnused);\n }\n\n bodyNode.expression = childExpression;\n }\n\n return this.finishNode(bodyNode, isSimpleReference ? \"PipelineBareFunction\" : \"PipelineTopicExpression\");\n }\n\n isSimpleReference(expression) {\n switch (expression.type) {\n case \"MemberExpression\":\n return !expression.computed && this.isSimpleReference(expression.object);\n\n case \"Identifier\":\n return true;\n\n default:\n return false;\n }\n }\n\n withTopicPermittingContext(callback) {\n const outerContextTopicState = this.state.topicContext;\n this.state.topicContext = {\n maxNumOfResolvableTopics: 1,\n maxTopicIndex: null\n };\n\n try {\n return callback();\n } finally {\n this.state.topicContext = outerContextTopicState;\n }\n }\n\n withTopicForbiddingContext(callback) {\n const outerContextTopicState = this.state.topicContext;\n this.state.topicContext = {\n maxNumOfResolvableTopics: 0,\n maxTopicIndex: null\n };\n\n try {\n return callback();\n } finally {\n this.state.topicContext = outerContextTopicState;\n }\n }\n\n withSoloAwaitPermittingContext(callback) {\n const outerContextSoloAwaitState = this.state.soloAwait;\n this.state.soloAwait = true;\n\n try {\n return callback();\n } finally {\n this.state.soloAwait = outerContextSoloAwaitState;\n }\n }\n\n allowInAnd(callback) {\n const flags = this.prodParam.currentFlags();\n const prodParamToSet = PARAM_IN & ~flags;\n\n if (prodParamToSet) {\n this.prodParam.enter(flags | PARAM_IN);\n\n try {\n return callback();\n } finally {\n this.prodParam.exit();\n }\n }\n\n return callback();\n }\n\n disallowInAnd(callback) {\n const flags = this.prodParam.currentFlags();\n const prodParamToClear = PARAM_IN & flags;\n\n if (prodParamToClear) {\n this.prodParam.enter(flags & ~PARAM_IN);\n\n try {\n return callback();\n } finally {\n this.prodParam.exit();\n }\n }\n\n return callback();\n }\n\n registerTopicReference() {\n this.state.topicContext.maxTopicIndex = 0;\n }\n\n primaryTopicReferenceIsAllowedInCurrentTopicContext() {\n return this.state.topicContext.maxNumOfResolvableTopics >= 1;\n }\n\n topicReferenceWasUsedInCurrentTopicContext() {\n return this.state.topicContext.maxTopicIndex != null && this.state.topicContext.maxTopicIndex >= 0;\n }\n\n parseFSharpPipelineBody(prec) {\n const startPos = this.state.start;\n const startLoc = this.state.startLoc;\n this.state.potentialArrowAt = this.state.start;\n const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n this.state.inFSharpPipelineDirectBody = true;\n const ret = this.parseExprOp(this.parseMaybeUnary(), startPos, startLoc, prec);\n this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n return ret;\n }\n\n parseModuleExpression() {\n this.expectPlugin(\"moduleBlocks\");\n const node = this.startNode();\n this.next();\n this.eat(types$1.braceL);\n const revertScopes = this.initializeScopes(true);\n this.enterInitialScopes();\n const program = this.startNode();\n\n try {\n node.body = this.parseProgram(program, types$1.braceR, \"module\");\n } finally {\n revertScopes();\n }\n\n this.eat(types$1.braceR);\n return this.finishNode(node, \"ModuleExpression\");\n }\n\n}\n\nconst loopLabel = {\n kind: \"loop\"\n},\n switchLabel = {\n kind: \"switch\"\n};\nconst FUNC_NO_FLAGS = 0b000,\n FUNC_STATEMENT = 0b001,\n FUNC_HANGING_STATEMENT = 0b010,\n FUNC_NULLABLE_ID = 0b100;\nconst loneSurrogate = /[\\uD800-\\uDFFF]/u;\nconst keywordRelationalOperator = /in(?:stanceof)?/y;\n\nfunction babel7CompatTokens(tokens) {\n {\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n\n if (token.type === types$1.privateName) {\n const {\n loc,\n start,\n value,\n end\n } = token;\n const hashEndPos = start + 1;\n const hashEndLoc = new Position(loc.start.line, loc.start.column + 1);\n tokens.splice(i, 1, new Token({\n type: types$1.hash,\n value: \"#\",\n start: start,\n end: hashEndPos,\n startLoc: loc.start,\n endLoc: hashEndLoc\n }), new Token({\n type: types$1.name,\n value: value,\n start: hashEndPos,\n end: end,\n startLoc: hashEndLoc,\n endLoc: loc.end\n }));\n }\n }\n }\n return tokens;\n}\n\nclass StatementParser extends ExpressionParser {\n parseTopLevel(file, program) {\n file.program = this.parseProgram(program);\n file.comments = this.state.comments;\n if (this.options.tokens) file.tokens = babel7CompatTokens(this.tokens);\n return this.finishNode(file, \"File\");\n }\n\n parseProgram(program, end = types$1.eof, sourceType = this.options.sourceType) {\n program.sourceType = sourceType;\n program.interpreter = this.parseInterpreterDirective();\n this.parseBlockBody(program, true, true, end);\n\n if (this.inModule && !this.options.allowUndeclaredExports && this.scope.undefinedExports.size > 0) {\n for (const [name] of Array.from(this.scope.undefinedExports)) {\n const pos = this.scope.undefinedExports.get(name);\n this.raise(pos, ErrorMessages.ModuleExportUndefined, name);\n }\n }\n\n return this.finishNode(program, \"Program\");\n }\n\n stmtToDirective(stmt) {\n const expr = stmt.expression;\n const directiveLiteral = this.startNodeAt(expr.start, expr.loc.start);\n const directive = this.startNodeAt(stmt.start, stmt.loc.start);\n const raw = this.input.slice(expr.start, expr.end);\n const val = directiveLiteral.value = raw.slice(1, -1);\n this.addExtra(directiveLiteral, \"raw\", raw);\n this.addExtra(directiveLiteral, \"rawValue\", val);\n directive.value = this.finishNodeAt(directiveLiteral, \"DirectiveLiteral\", expr.end, expr.loc.end);\n return this.finishNodeAt(directive, \"Directive\", stmt.end, stmt.loc.end);\n }\n\n parseInterpreterDirective() {\n if (!this.match(types$1.interpreterDirective)) {\n return null;\n }\n\n const node = this.startNode();\n node.value = this.state.value;\n this.next();\n return this.finishNode(node, \"InterpreterDirective\");\n }\n\n isLet(context) {\n if (!this.isContextual(\"let\")) {\n return false;\n }\n\n return this.isLetKeyword(context);\n }\n\n isLetKeyword(context) {\n const next = this.nextTokenStart();\n const nextCh = this.codePointAtPos(next);\n\n if (nextCh === 92 || nextCh === 91) {\n return true;\n }\n\n if (context) return false;\n if (nextCh === 123) return true;\n\n if (isIdentifierStart(nextCh)) {\n keywordRelationalOperator.lastIndex = next;\n const matched = keywordRelationalOperator.exec(this.input);\n\n if (matched !== null) {\n const endCh = this.codePointAtPos(next + matched[0].length);\n\n if (!isIdentifierChar(endCh) && endCh !== 92) {\n return false;\n }\n }\n\n return true;\n }\n\n return false;\n }\n\n parseStatement(context, topLevel) {\n if (this.match(types$1.at)) {\n this.parseDecorators(true);\n }\n\n return this.parseStatementContent(context, topLevel);\n }\n\n parseStatementContent(context, topLevel) {\n let starttype = this.state.type;\n const node = this.startNode();\n let kind;\n\n if (this.isLet(context)) {\n starttype = types$1._var;\n kind = \"let\";\n }\n\n switch (starttype) {\n case types$1._break:\n case types$1._continue:\n return this.parseBreakContinueStatement(node, starttype.keyword);\n\n case types$1._debugger:\n return this.parseDebuggerStatement(node);\n\n case types$1._do:\n return this.parseDoStatement(node);\n\n case types$1._for:\n return this.parseForStatement(node);\n\n case types$1._function:\n if (this.lookaheadCharCode() === 46) break;\n\n if (context) {\n if (this.state.strict) {\n this.raise(this.state.start, ErrorMessages.StrictFunction);\n } else if (context !== \"if\" && context !== \"label\") {\n this.raise(this.state.start, ErrorMessages.SloppyFunction);\n }\n }\n\n return this.parseFunctionStatement(node, false, !context);\n\n case types$1._class:\n if (context) this.unexpected();\n return this.parseClass(node, true);\n\n case types$1._if:\n return this.parseIfStatement(node);\n\n case types$1._return:\n return this.parseReturnStatement(node);\n\n case types$1._switch:\n return this.parseSwitchStatement(node);\n\n case types$1._throw:\n return this.parseThrowStatement(node);\n\n case types$1._try:\n return this.parseTryStatement(node);\n\n case types$1._const:\n case types$1._var:\n kind = kind || this.state.value;\n\n if (context && kind !== \"var\") {\n this.raise(this.state.start, ErrorMessages.UnexpectedLexicalDeclaration);\n }\n\n return this.parseVarStatement(node, kind);\n\n case types$1._while:\n return this.parseWhileStatement(node);\n\n case types$1._with:\n return this.parseWithStatement(node);\n\n case types$1.braceL:\n return this.parseBlock();\n\n case types$1.semi:\n return this.parseEmptyStatement(node);\n\n case types$1._import:\n {\n const nextTokenCharCode = this.lookaheadCharCode();\n\n if (nextTokenCharCode === 40 || nextTokenCharCode === 46) {\n break;\n }\n }\n\n case types$1._export:\n {\n if (!this.options.allowImportExportEverywhere && !topLevel) {\n this.raise(this.state.start, ErrorMessages.UnexpectedImportExport);\n }\n\n this.next();\n let result;\n\n if (starttype === types$1._import) {\n result = this.parseImport(node);\n\n if (result.type === \"ImportDeclaration\" && (!result.importKind || result.importKind === \"value\")) {\n this.sawUnambiguousESM = true;\n }\n } else {\n result = this.parseExport(node);\n\n if (result.type === \"ExportNamedDeclaration\" && (!result.exportKind || result.exportKind === \"value\") || result.type === \"ExportAllDeclaration\" && (!result.exportKind || result.exportKind === \"value\") || result.type === \"ExportDefaultDeclaration\") {\n this.sawUnambiguousESM = true;\n }\n }\n\n this.assertModuleNodeAllowed(node);\n return result;\n }\n\n default:\n {\n if (this.isAsyncFunction()) {\n if (context) {\n this.raise(this.state.start, ErrorMessages.AsyncFunctionInSingleStatementContext);\n }\n\n this.next();\n return this.parseFunctionStatement(node, true, !context);\n }\n }\n }\n\n const maybeName = this.state.value;\n const expr = this.parseExpression();\n\n if (starttype === types$1.name && expr.type === \"Identifier\" && this.eat(types$1.colon)) {\n return this.parseLabeledStatement(node, maybeName, expr, context);\n } else {\n return this.parseExpressionStatement(node, expr);\n }\n }\n\n assertModuleNodeAllowed(node) {\n if (!this.options.allowImportExportEverywhere && !this.inModule) {\n this.raise(node.start, SourceTypeModuleErrorMessages.ImportOutsideModule);\n }\n }\n\n takeDecorators(node) {\n const decorators = this.state.decoratorStack[this.state.decoratorStack.length - 1];\n\n if (decorators.length) {\n node.decorators = decorators;\n this.resetStartLocationFromNode(node, decorators[0]);\n this.state.decoratorStack[this.state.decoratorStack.length - 1] = [];\n }\n }\n\n canHaveLeadingDecorator() {\n return this.match(types$1._class);\n }\n\n parseDecorators(allowExport) {\n const currentContextDecorators = this.state.decoratorStack[this.state.decoratorStack.length - 1];\n\n while (this.match(types$1.at)) {\n const decorator = this.parseDecorator();\n currentContextDecorators.push(decorator);\n }\n\n if (this.match(types$1._export)) {\n if (!allowExport) {\n this.unexpected();\n }\n\n if (this.hasPlugin(\"decorators\") && !this.getPluginOption(\"decorators\", \"decoratorsBeforeExport\")) {\n this.raise(this.state.start, ErrorMessages.DecoratorExportClass);\n }\n } else if (!this.canHaveLeadingDecorator()) {\n throw this.raise(this.state.start, ErrorMessages.UnexpectedLeadingDecorator);\n }\n }\n\n parseDecorator() {\n this.expectOnePlugin([\"decorators-legacy\", \"decorators\"]);\n const node = this.startNode();\n this.next();\n\n if (this.hasPlugin(\"decorators\")) {\n this.state.decoratorStack.push([]);\n const startPos = this.state.start;\n const startLoc = this.state.startLoc;\n let expr;\n\n if (this.eat(types$1.parenL)) {\n expr = this.parseExpression();\n this.expect(types$1.parenR);\n } else {\n expr = this.parseIdentifier(false);\n\n while (this.eat(types$1.dot)) {\n const node = this.startNodeAt(startPos, startLoc);\n node.object = expr;\n node.property = this.parseIdentifier(true);\n node.computed = false;\n expr = this.finishNode(node, \"MemberExpression\");\n }\n }\n\n node.expression = this.parseMaybeDecoratorArguments(expr);\n this.state.decoratorStack.pop();\n } else {\n node.expression = this.parseExprSubscripts();\n }\n\n return this.finishNode(node, \"Decorator\");\n }\n\n parseMaybeDecoratorArguments(expr) {\n if (this.eat(types$1.parenL)) {\n const node = this.startNodeAtNode(expr);\n node.callee = expr;\n node.arguments = this.parseCallExpressionArguments(types$1.parenR, false);\n this.toReferencedList(node.arguments);\n return this.finishNode(node, \"CallExpression\");\n }\n\n return expr;\n }\n\n parseBreakContinueStatement(node, keyword) {\n const isBreak = keyword === \"break\";\n this.next();\n\n if (this.isLineTerminator()) {\n node.label = null;\n } else {\n node.label = this.parseIdentifier();\n this.semicolon();\n }\n\n this.verifyBreakContinue(node, keyword);\n return this.finishNode(node, isBreak ? \"BreakStatement\" : \"ContinueStatement\");\n }\n\n verifyBreakContinue(node, keyword) {\n const isBreak = keyword === \"break\";\n let i;\n\n for (i = 0; i < this.state.labels.length; ++i) {\n const lab = this.state.labels[i];\n\n if (node.label == null || lab.name === node.label.name) {\n if (lab.kind != null && (isBreak || lab.kind === \"loop\")) break;\n if (node.label && isBreak) break;\n }\n }\n\n if (i === this.state.labels.length) {\n this.raise(node.start, ErrorMessages.IllegalBreakContinue, keyword);\n }\n }\n\n parseDebuggerStatement(node) {\n this.next();\n this.semicolon();\n return this.finishNode(node, \"DebuggerStatement\");\n }\n\n parseHeaderExpression() {\n this.expect(types$1.parenL);\n const val = this.parseExpression();\n this.expect(types$1.parenR);\n return val;\n }\n\n parseDoStatement(node) {\n this.next();\n this.state.labels.push(loopLabel);\n node.body = this.withTopicForbiddingContext(() => this.parseStatement(\"do\"));\n this.state.labels.pop();\n this.expect(types$1._while);\n node.test = this.parseHeaderExpression();\n this.eat(types$1.semi);\n return this.finishNode(node, \"DoWhileStatement\");\n }\n\n parseForStatement(node) {\n this.next();\n this.state.labels.push(loopLabel);\n let awaitAt = -1;\n\n if (this.isAwaitAllowed() && this.eatContextual(\"await\")) {\n awaitAt = this.state.lastTokStart;\n }\n\n this.scope.enter(SCOPE_OTHER);\n this.expect(types$1.parenL);\n\n if (this.match(types$1.semi)) {\n if (awaitAt > -1) {\n this.unexpected(awaitAt);\n }\n\n return this.parseFor(node, null);\n }\n\n const startsWithLet = this.isContextual(\"let\");\n const isLet = startsWithLet && this.isLetKeyword();\n\n if (this.match(types$1._var) || this.match(types$1._const) || isLet) {\n const init = this.startNode();\n const kind = isLet ? \"let\" : this.state.value;\n this.next();\n this.parseVar(init, true, kind);\n this.finishNode(init, \"VariableDeclaration\");\n\n if ((this.match(types$1._in) || this.isContextual(\"of\")) && init.declarations.length === 1) {\n return this.parseForIn(node, init, awaitAt);\n }\n\n if (awaitAt > -1) {\n this.unexpected(awaitAt);\n }\n\n return this.parseFor(node, init);\n }\n\n const startsWithUnescapedName = this.match(types$1.name) && !this.state.containsEsc;\n const refExpressionErrors = new ExpressionErrors();\n const init = this.parseExpression(true, refExpressionErrors);\n const isForOf = this.isContextual(\"of\");\n\n if (isForOf) {\n if (startsWithLet) {\n this.raise(init.start, ErrorMessages.ForOfLet);\n } else if (awaitAt === -1 && startsWithUnescapedName && init.type === \"Identifier\" && init.name === \"async\") {\n this.raise(init.start, ErrorMessages.ForOfAsync);\n }\n }\n\n if (isForOf || this.match(types$1._in)) {\n this.toAssignable(init, true);\n const description = isForOf ? \"for-of statement\" : \"for-in statement\";\n this.checkLVal(init, description);\n return this.parseForIn(node, init, awaitAt);\n } else {\n this.checkExpressionErrors(refExpressionErrors, true);\n }\n\n if (awaitAt > -1) {\n this.unexpected(awaitAt);\n }\n\n return this.parseFor(node, init);\n }\n\n parseFunctionStatement(node, isAsync, declarationPosition) {\n this.next();\n return this.parseFunction(node, FUNC_STATEMENT | (declarationPosition ? 0 : FUNC_HANGING_STATEMENT), isAsync);\n }\n\n parseIfStatement(node) {\n this.next();\n node.test = this.parseHeaderExpression();\n node.consequent = this.parseStatement(\"if\");\n node.alternate = this.eat(types$1._else) ? this.parseStatement(\"if\") : null;\n return this.finishNode(node, \"IfStatement\");\n }\n\n parseReturnStatement(node) {\n if (!this.prodParam.hasReturn && !this.options.allowReturnOutsideFunction) {\n this.raise(this.state.start, ErrorMessages.IllegalReturn);\n }\n\n this.next();\n\n if (this.isLineTerminator()) {\n node.argument = null;\n } else {\n node.argument = this.parseExpression();\n this.semicolon();\n }\n\n return this.finishNode(node, \"ReturnStatement\");\n }\n\n parseSwitchStatement(node) {\n this.next();\n node.discriminant = this.parseHeaderExpression();\n const cases = node.cases = [];\n this.expect(types$1.braceL);\n this.state.labels.push(switchLabel);\n this.scope.enter(SCOPE_OTHER);\n let cur;\n\n for (let sawDefault; !this.match(types$1.braceR);) {\n if (this.match(types$1._case) || this.match(types$1._default)) {\n const isCase = this.match(types$1._case);\n if (cur) this.finishNode(cur, \"SwitchCase\");\n cases.push(cur = this.startNode());\n cur.consequent = [];\n this.next();\n\n if (isCase) {\n cur.test = this.parseExpression();\n } else {\n if (sawDefault) {\n this.raise(this.state.lastTokStart, ErrorMessages.MultipleDefaultsInSwitch);\n }\n\n sawDefault = true;\n cur.test = null;\n }\n\n this.expect(types$1.colon);\n } else {\n if (cur) {\n cur.consequent.push(this.parseStatement(null));\n } else {\n this.unexpected();\n }\n }\n }\n\n this.scope.exit();\n if (cur) this.finishNode(cur, \"SwitchCase\");\n this.next();\n this.state.labels.pop();\n return this.finishNode(node, \"SwitchStatement\");\n }\n\n parseThrowStatement(node) {\n this.next();\n\n if (this.hasPrecedingLineBreak()) {\n this.raise(this.state.lastTokEnd, ErrorMessages.NewlineAfterThrow);\n }\n\n node.argument = this.parseExpression();\n this.semicolon();\n return this.finishNode(node, \"ThrowStatement\");\n }\n\n parseCatchClauseParam() {\n const param = this.parseBindingAtom();\n const simple = param.type === \"Identifier\";\n this.scope.enter(simple ? SCOPE_SIMPLE_CATCH : 0);\n this.checkLVal(param, \"catch clause\", BIND_LEXICAL);\n return param;\n }\n\n parseTryStatement(node) {\n this.next();\n node.block = this.parseBlock();\n node.handler = null;\n\n if (this.match(types$1._catch)) {\n const clause = this.startNode();\n this.next();\n\n if (this.match(types$1.parenL)) {\n this.expect(types$1.parenL);\n clause.param = this.parseCatchClauseParam();\n this.expect(types$1.parenR);\n } else {\n clause.param = null;\n this.scope.enter(SCOPE_OTHER);\n }\n\n clause.body = this.withTopicForbiddingContext(() => this.parseBlock(false, false));\n this.scope.exit();\n node.handler = this.finishNode(clause, \"CatchClause\");\n }\n\n node.finalizer = this.eat(types$1._finally) ? this.parseBlock() : null;\n\n if (!node.handler && !node.finalizer) {\n this.raise(node.start, ErrorMessages.NoCatchOrFinally);\n }\n\n return this.finishNode(node, \"TryStatement\");\n }\n\n parseVarStatement(node, kind) {\n this.next();\n this.parseVar(node, false, kind);\n this.semicolon();\n return this.finishNode(node, \"VariableDeclaration\");\n }\n\n parseWhileStatement(node) {\n this.next();\n node.test = this.parseHeaderExpression();\n this.state.labels.push(loopLabel);\n node.body = this.withTopicForbiddingContext(() => this.parseStatement(\"while\"));\n this.state.labels.pop();\n return this.finishNode(node, \"WhileStatement\");\n }\n\n parseWithStatement(node) {\n if (this.state.strict) {\n this.raise(this.state.start, ErrorMessages.StrictWith);\n }\n\n this.next();\n node.object = this.parseHeaderExpression();\n node.body = this.withTopicForbiddingContext(() => this.parseStatement(\"with\"));\n return this.finishNode(node, \"WithStatement\");\n }\n\n parseEmptyStatement(node) {\n this.next();\n return this.finishNode(node, \"EmptyStatement\");\n }\n\n parseLabeledStatement(node, maybeName, expr, context) {\n for (const label of this.state.labels) {\n if (label.name === maybeName) {\n this.raise(expr.start, ErrorMessages.LabelRedeclaration, maybeName);\n }\n }\n\n const kind = this.state.type.isLoop ? \"loop\" : this.match(types$1._switch) ? \"switch\" : null;\n\n for (let i = this.state.labels.length - 1; i >= 0; i--) {\n const label = this.state.labels[i];\n\n if (label.statementStart === node.start) {\n label.statementStart = this.state.start;\n label.kind = kind;\n } else {\n break;\n }\n }\n\n this.state.labels.push({\n name: maybeName,\n kind: kind,\n statementStart: this.state.start\n });\n node.body = this.parseStatement(context ? context.indexOf(\"label\") === -1 ? context + \"label\" : context : \"label\");\n this.state.labels.pop();\n node.label = expr;\n return this.finishNode(node, \"LabeledStatement\");\n }\n\n parseExpressionStatement(node, expr) {\n node.expression = expr;\n this.semicolon();\n return this.finishNode(node, \"ExpressionStatement\");\n }\n\n parseBlock(allowDirectives = false, createNewLexicalScope = true, afterBlockParse) {\n const node = this.startNode();\n\n if (allowDirectives) {\n this.state.strictErrors.clear();\n }\n\n this.expect(types$1.braceL);\n\n if (createNewLexicalScope) {\n this.scope.enter(SCOPE_OTHER);\n }\n\n this.parseBlockBody(node, allowDirectives, false, types$1.braceR, afterBlockParse);\n\n if (createNewLexicalScope) {\n this.scope.exit();\n }\n\n return this.finishNode(node, \"BlockStatement\");\n }\n\n isValidDirective(stmt) {\n return stmt.type === \"ExpressionStatement\" && stmt.expression.type === \"StringLiteral\" && !stmt.expression.extra.parenthesized;\n }\n\n parseBlockBody(node, allowDirectives, topLevel, end, afterBlockParse) {\n const body = node.body = [];\n const directives = node.directives = [];\n this.parseBlockOrModuleBlockBody(body, allowDirectives ? directives : undefined, topLevel, end, afterBlockParse);\n }\n\n parseBlockOrModuleBlockBody(body, directives, topLevel, end, afterBlockParse) {\n const oldStrict = this.state.strict;\n let hasStrictModeDirective = false;\n let parsedNonDirective = false;\n\n while (!this.match(end)) {\n const stmt = this.parseStatement(null, topLevel);\n\n if (directives && !parsedNonDirective) {\n if (this.isValidDirective(stmt)) {\n const directive = this.stmtToDirective(stmt);\n directives.push(directive);\n\n if (!hasStrictModeDirective && directive.value.value === \"use strict\") {\n hasStrictModeDirective = true;\n this.setStrict(true);\n }\n\n continue;\n }\n\n parsedNonDirective = true;\n this.state.strictErrors.clear();\n }\n\n body.push(stmt);\n }\n\n if (afterBlockParse) {\n afterBlockParse.call(this, hasStrictModeDirective);\n }\n\n if (!oldStrict) {\n this.setStrict(false);\n }\n\n this.next();\n }\n\n parseFor(node, init) {\n node.init = init;\n this.semicolon(false);\n node.test = this.match(types$1.semi) ? null : this.parseExpression();\n this.semicolon(false);\n node.update = this.match(types$1.parenR) ? null : this.parseExpression();\n this.expect(types$1.parenR);\n node.body = this.withTopicForbiddingContext(() => this.parseStatement(\"for\"));\n this.scope.exit();\n this.state.labels.pop();\n return this.finishNode(node, \"ForStatement\");\n }\n\n parseForIn(node, init, awaitAt) {\n const isForIn = this.match(types$1._in);\n this.next();\n\n if (isForIn) {\n if (awaitAt > -1) this.unexpected(awaitAt);\n } else {\n node.await = awaitAt > -1;\n }\n\n if (init.type === \"VariableDeclaration\" && init.declarations[0].init != null && (!isForIn || this.state.strict || init.kind !== \"var\" || init.declarations[0].id.type !== \"Identifier\")) {\n this.raise(init.start, ErrorMessages.ForInOfLoopInitializer, isForIn ? \"for-in\" : \"for-of\");\n } else if (init.type === \"AssignmentPattern\") {\n this.raise(init.start, ErrorMessages.InvalidLhs, \"for-loop\");\n }\n\n node.left = init;\n node.right = isForIn ? this.parseExpression() : this.parseMaybeAssignAllowIn();\n this.expect(types$1.parenR);\n node.body = this.withTopicForbiddingContext(() => this.parseStatement(\"for\"));\n this.scope.exit();\n this.state.labels.pop();\n return this.finishNode(node, isForIn ? \"ForInStatement\" : \"ForOfStatement\");\n }\n\n parseVar(node, isFor, kind) {\n const declarations = node.declarations = [];\n const isTypescript = this.hasPlugin(\"typescript\");\n node.kind = kind;\n\n for (;;) {\n const decl = this.startNode();\n this.parseVarId(decl, kind);\n\n if (this.eat(types$1.eq)) {\n decl.init = isFor ? this.parseMaybeAssignDisallowIn() : this.parseMaybeAssignAllowIn();\n } else {\n if (kind === \"const\" && !(this.match(types$1._in) || this.isContextual(\"of\"))) {\n if (!isTypescript) {\n this.raise(this.state.lastTokEnd, ErrorMessages.DeclarationMissingInitializer, \"Const declarations\");\n }\n } else if (decl.id.type !== \"Identifier\" && !(isFor && (this.match(types$1._in) || this.isContextual(\"of\")))) {\n this.raise(this.state.lastTokEnd, ErrorMessages.DeclarationMissingInitializer, \"Complex binding patterns\");\n }\n\n decl.init = null;\n }\n\n declarations.push(this.finishNode(decl, \"VariableDeclarator\"));\n if (!this.eat(types$1.comma)) break;\n }\n\n return node;\n }\n\n parseVarId(decl, kind) {\n decl.id = this.parseBindingAtom();\n this.checkLVal(decl.id, \"variable declaration\", kind === \"var\" ? BIND_VAR : BIND_LEXICAL, undefined, kind !== \"var\");\n }\n\n parseFunction(node, statement = FUNC_NO_FLAGS, isAsync = false) {\n const isStatement = statement & FUNC_STATEMENT;\n const isHangingStatement = statement & FUNC_HANGING_STATEMENT;\n const requireId = !!isStatement && !(statement & FUNC_NULLABLE_ID);\n this.initFunction(node, isAsync);\n\n if (this.match(types$1.star) && isHangingStatement) {\n this.raise(this.state.start, ErrorMessages.GeneratorInSingleStatementContext);\n }\n\n node.generator = this.eat(types$1.star);\n\n if (isStatement) {\n node.id = this.parseFunctionId(requireId);\n }\n\n const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n this.state.maybeInArrowParameters = false;\n this.scope.enter(SCOPE_FUNCTION);\n this.prodParam.enter(functionFlags(isAsync, node.generator));\n\n if (!isStatement) {\n node.id = this.parseFunctionId();\n }\n\n this.parseFunctionParams(node, false);\n this.withTopicForbiddingContext(() => {\n this.parseFunctionBodyAndFinish(node, isStatement ? \"FunctionDeclaration\" : \"FunctionExpression\");\n });\n this.prodParam.exit();\n this.scope.exit();\n\n if (isStatement && !isHangingStatement) {\n this.registerFunctionStatementId(node);\n }\n\n this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n return node;\n }\n\n parseFunctionId(requireId) {\n return requireId || this.match(types$1.name) ? this.parseIdentifier() : null;\n }\n\n parseFunctionParams(node, allowModifiers) {\n this.expect(types$1.parenL);\n this.expressionScope.enter(newParameterDeclarationScope());\n node.params = this.parseBindingList(types$1.parenR, 41, false, allowModifiers);\n this.expressionScope.exit();\n }\n\n registerFunctionStatementId(node) {\n if (!node.id) return;\n this.scope.declareName(node.id.name, this.state.strict || node.generator || node.async ? this.scope.treatFunctionsAsVar ? BIND_VAR : BIND_LEXICAL : BIND_FUNCTION, node.id.start);\n }\n\n parseClass(node, isStatement, optionalId) {\n this.next();\n this.takeDecorators(node);\n const oldStrict = this.state.strict;\n this.state.strict = true;\n this.parseClassId(node, isStatement, optionalId);\n this.parseClassSuper(node);\n node.body = this.parseClassBody(!!node.superClass, oldStrict);\n return this.finishNode(node, isStatement ? \"ClassDeclaration\" : \"ClassExpression\");\n }\n\n isClassProperty() {\n return this.match(types$1.eq) || this.match(types$1.semi) || this.match(types$1.braceR);\n }\n\n isClassMethod() {\n return this.match(types$1.parenL);\n }\n\n isNonstaticConstructor(method) {\n return !method.computed && !method.static && (method.key.name === \"constructor\" || method.key.value === \"constructor\");\n }\n\n parseClassBody(hadSuperClass, oldStrict) {\n this.classScope.enter();\n const state = {\n hadConstructor: false,\n hadSuperClass\n };\n let decorators = [];\n const classBody = this.startNode();\n classBody.body = [];\n this.expect(types$1.braceL);\n this.withTopicForbiddingContext(() => {\n while (!this.match(types$1.braceR)) {\n if (this.eat(types$1.semi)) {\n if (decorators.length > 0) {\n throw this.raise(this.state.lastTokEnd, ErrorMessages.DecoratorSemicolon);\n }\n\n continue;\n }\n\n if (this.match(types$1.at)) {\n decorators.push(this.parseDecorator());\n continue;\n }\n\n const member = this.startNode();\n\n if (decorators.length) {\n member.decorators = decorators;\n this.resetStartLocationFromNode(member, decorators[0]);\n decorators = [];\n }\n\n this.parseClassMember(classBody, member, state);\n\n if (member.kind === \"constructor\" && member.decorators && member.decorators.length > 0) {\n this.raise(member.start, ErrorMessages.DecoratorConstructor);\n }\n }\n });\n this.state.strict = oldStrict;\n this.next();\n\n if (decorators.length) {\n throw this.raise(this.state.start, ErrorMessages.TrailingDecorator);\n }\n\n this.classScope.exit();\n return this.finishNode(classBody, \"ClassBody\");\n }\n\n parseClassMemberFromModifier(classBody, member) {\n const key = this.parseIdentifier(true);\n\n if (this.isClassMethod()) {\n const method = member;\n method.kind = \"method\";\n method.computed = false;\n method.key = key;\n method.static = false;\n this.pushClassMethod(classBody, method, false, false, false, false);\n return true;\n } else if (this.isClassProperty()) {\n const prop = member;\n prop.computed = false;\n prop.key = key;\n prop.static = false;\n classBody.body.push(this.parseClassProperty(prop));\n return true;\n }\n\n return false;\n }\n\n parseClassMember(classBody, member, state) {\n const isStatic = this.isContextual(\"static\");\n\n if (isStatic) {\n if (this.parseClassMemberFromModifier(classBody, member)) {\n return;\n }\n\n if (this.eat(types$1.braceL)) {\n this.parseClassStaticBlock(classBody, member);\n return;\n }\n }\n\n this.parseClassMemberWithIsStatic(classBody, member, state, isStatic);\n }\n\n parseClassMemberWithIsStatic(classBody, member, state, isStatic) {\n const publicMethod = member;\n const privateMethod = member;\n const publicProp = member;\n const privateProp = member;\n const method = publicMethod;\n const publicMember = publicMethod;\n member.static = isStatic;\n\n if (this.eat(types$1.star)) {\n method.kind = \"method\";\n const isPrivateName = this.match(types$1.privateName);\n this.parseClassElementName(method);\n\n if (isPrivateName) {\n this.pushClassPrivateMethod(classBody, privateMethod, true, false);\n return;\n }\n\n if (this.isNonstaticConstructor(publicMethod)) {\n this.raise(publicMethod.key.start, ErrorMessages.ConstructorIsGenerator);\n }\n\n this.pushClassMethod(classBody, publicMethod, true, false, false, false);\n return;\n }\n\n const containsEsc = this.state.containsEsc;\n const isPrivate = this.match(types$1.privateName);\n const key = this.parseClassElementName(member);\n const isSimple = key.type === \"Identifier\";\n const maybeQuestionTokenStart = this.state.start;\n this.parsePostMemberNameModifiers(publicMember);\n\n if (this.isClassMethod()) {\n method.kind = \"method\";\n\n if (isPrivate) {\n this.pushClassPrivateMethod(classBody, privateMethod, false, false);\n return;\n }\n\n const isConstructor = this.isNonstaticConstructor(publicMethod);\n let allowsDirectSuper = false;\n\n if (isConstructor) {\n publicMethod.kind = \"constructor\";\n\n if (state.hadConstructor && !this.hasPlugin(\"typescript\")) {\n this.raise(key.start, ErrorMessages.DuplicateConstructor);\n }\n\n if (isConstructor && this.hasPlugin(\"typescript\") && member.override) {\n this.raise(key.start, ErrorMessages.OverrideOnConstructor);\n }\n\n state.hadConstructor = true;\n allowsDirectSuper = state.hadSuperClass;\n }\n\n this.pushClassMethod(classBody, publicMethod, false, false, isConstructor, allowsDirectSuper);\n } else if (this.isClassProperty()) {\n if (isPrivate) {\n this.pushClassPrivateProperty(classBody, privateProp);\n } else {\n this.pushClassProperty(classBody, publicProp);\n }\n } else if (isSimple && key.name === \"async\" && !containsEsc && !this.isLineTerminator()) {\n const isGenerator = this.eat(types$1.star);\n\n if (publicMember.optional) {\n this.unexpected(maybeQuestionTokenStart);\n }\n\n method.kind = \"method\";\n const isPrivate = this.match(types$1.privateName);\n this.parseClassElementName(method);\n this.parsePostMemberNameModifiers(publicMember);\n\n if (isPrivate) {\n this.pushClassPrivateMethod(classBody, privateMethod, isGenerator, true);\n } else {\n if (this.isNonstaticConstructor(publicMethod)) {\n this.raise(publicMethod.key.start, ErrorMessages.ConstructorIsAsync);\n }\n\n this.pushClassMethod(classBody, publicMethod, isGenerator, true, false, false);\n }\n } else if (isSimple && (key.name === \"get\" || key.name === \"set\") && !containsEsc && !(this.match(types$1.star) && this.isLineTerminator())) {\n method.kind = key.name;\n const isPrivate = this.match(types$1.privateName);\n this.parseClassElementName(publicMethod);\n\n if (isPrivate) {\n this.pushClassPrivateMethod(classBody, privateMethod, false, false);\n } else {\n if (this.isNonstaticConstructor(publicMethod)) {\n this.raise(publicMethod.key.start, ErrorMessages.ConstructorIsAccessor);\n }\n\n this.pushClassMethod(classBody, publicMethod, false, false, false, false);\n }\n\n this.checkGetterSetterParams(publicMethod);\n } else if (this.isLineTerminator()) {\n if (isPrivate) {\n this.pushClassPrivateProperty(classBody, privateProp);\n } else {\n this.pushClassProperty(classBody, publicProp);\n }\n } else {\n this.unexpected();\n }\n }\n\n parseClassElementName(member) {\n const {\n type,\n value,\n start\n } = this.state;\n\n if ((type === types$1.name || type === types$1.string) && member.static && value === \"prototype\") {\n this.raise(start, ErrorMessages.StaticPrototype);\n }\n\n if (type === types$1.privateName && value === \"constructor\") {\n this.raise(start, ErrorMessages.ConstructorClassPrivateField);\n }\n\n return this.parsePropertyName(member, true);\n }\n\n parseClassStaticBlock(classBody, member) {\n var _member$decorators;\n\n this.expectPlugin(\"classStaticBlock\", member.start);\n this.scope.enter(SCOPE_CLASS | SCOPE_STATIC_BLOCK | SCOPE_SUPER);\n const oldLabels = this.state.labels;\n this.state.labels = [];\n this.prodParam.enter(PARAM);\n const body = member.body = [];\n this.parseBlockOrModuleBlockBody(body, undefined, false, types$1.braceR);\n this.prodParam.exit();\n this.scope.exit();\n this.state.labels = oldLabels;\n classBody.body.push(this.finishNode(member, \"StaticBlock\"));\n\n if ((_member$decorators = member.decorators) != null && _member$decorators.length) {\n this.raise(member.start, ErrorMessages.DecoratorStaticBlock);\n }\n }\n\n pushClassProperty(classBody, prop) {\n if (!prop.computed && (prop.key.name === \"constructor\" || prop.key.value === \"constructor\")) {\n this.raise(prop.key.start, ErrorMessages.ConstructorClassField);\n }\n\n classBody.body.push(this.parseClassProperty(prop));\n }\n\n pushClassPrivateProperty(classBody, prop) {\n const node = this.parseClassPrivateProperty(prop);\n classBody.body.push(node);\n this.classScope.declarePrivateName(this.getPrivateNameSV(node.key), CLASS_ELEMENT_OTHER, node.key.start);\n }\n\n pushClassMethod(classBody, method, isGenerator, isAsync, isConstructor, allowsDirectSuper) {\n classBody.body.push(this.parseMethod(method, isGenerator, isAsync, isConstructor, allowsDirectSuper, \"ClassMethod\", true));\n }\n\n pushClassPrivateMethod(classBody, method, isGenerator, isAsync) {\n const node = this.parseMethod(method, isGenerator, isAsync, false, false, \"ClassPrivateMethod\", true);\n classBody.body.push(node);\n const kind = node.kind === \"get\" ? node.static ? CLASS_ELEMENT_STATIC_GETTER : CLASS_ELEMENT_INSTANCE_GETTER : node.kind === \"set\" ? node.static ? CLASS_ELEMENT_STATIC_SETTER : CLASS_ELEMENT_INSTANCE_SETTER : CLASS_ELEMENT_OTHER;\n this.classScope.declarePrivateName(this.getPrivateNameSV(node.key), kind, node.key.start);\n }\n\n parsePostMemberNameModifiers(methodOrProp) {}\n\n parseClassPrivateProperty(node) {\n this.parseInitializer(node);\n this.semicolon();\n return this.finishNode(node, \"ClassPrivateProperty\");\n }\n\n parseClassProperty(node) {\n this.parseInitializer(node);\n this.semicolon();\n return this.finishNode(node, \"ClassProperty\");\n }\n\n parseInitializer(node) {\n this.scope.enter(SCOPE_CLASS | SCOPE_SUPER);\n this.expressionScope.enter(newExpressionScope());\n this.prodParam.enter(PARAM);\n node.value = this.eat(types$1.eq) ? this.parseMaybeAssignAllowIn() : null;\n this.expressionScope.exit();\n this.prodParam.exit();\n this.scope.exit();\n }\n\n parseClassId(node, isStatement, optionalId, bindingType = BIND_CLASS) {\n if (this.match(types$1.name)) {\n node.id = this.parseIdentifier();\n\n if (isStatement) {\n this.checkLVal(node.id, \"class name\", bindingType);\n }\n } else {\n if (optionalId || !isStatement) {\n node.id = null;\n } else {\n this.unexpected(null, ErrorMessages.MissingClassName);\n }\n }\n }\n\n parseClassSuper(node) {\n node.superClass = this.eat(types$1._extends) ? this.parseExprSubscripts() : null;\n }\n\n parseExport(node) {\n const hasDefault = this.maybeParseExportDefaultSpecifier(node);\n const parseAfterDefault = !hasDefault || this.eat(types$1.comma);\n const hasStar = parseAfterDefault && this.eatExportStar(node);\n const hasNamespace = hasStar && this.maybeParseExportNamespaceSpecifier(node);\n const parseAfterNamespace = parseAfterDefault && (!hasNamespace || this.eat(types$1.comma));\n const isFromRequired = hasDefault || hasStar;\n\n if (hasStar && !hasNamespace) {\n if (hasDefault) this.unexpected();\n this.parseExportFrom(node, true);\n return this.finishNode(node, \"ExportAllDeclaration\");\n }\n\n const hasSpecifiers = this.maybeParseExportNamedSpecifiers(node);\n\n if (hasDefault && parseAfterDefault && !hasStar && !hasSpecifiers || hasNamespace && parseAfterNamespace && !hasSpecifiers) {\n throw this.unexpected(null, types$1.braceL);\n }\n\n let hasDeclaration;\n\n if (isFromRequired || hasSpecifiers) {\n hasDeclaration = false;\n this.parseExportFrom(node, isFromRequired);\n } else {\n hasDeclaration = this.maybeParseExportDeclaration(node);\n }\n\n if (isFromRequired || hasSpecifiers || hasDeclaration) {\n this.checkExport(node, true, false, !!node.source);\n return this.finishNode(node, \"ExportNamedDeclaration\");\n }\n\n if (this.eat(types$1._default)) {\n node.declaration = this.parseExportDefaultExpression();\n this.checkExport(node, true, true);\n return this.finishNode(node, \"ExportDefaultDeclaration\");\n }\n\n throw this.unexpected(null, types$1.braceL);\n }\n\n eatExportStar(node) {\n return this.eat(types$1.star);\n }\n\n maybeParseExportDefaultSpecifier(node) {\n if (this.isExportDefaultSpecifier()) {\n this.expectPlugin(\"exportDefaultFrom\");\n const specifier = this.startNode();\n specifier.exported = this.parseIdentifier(true);\n node.specifiers = [this.finishNode(specifier, \"ExportDefaultSpecifier\")];\n return true;\n }\n\n return false;\n }\n\n maybeParseExportNamespaceSpecifier(node) {\n if (this.isContextual(\"as\")) {\n if (!node.specifiers) node.specifiers = [];\n const specifier = this.startNodeAt(this.state.lastTokStart, this.state.lastTokStartLoc);\n this.next();\n specifier.exported = this.parseModuleExportName();\n node.specifiers.push(this.finishNode(specifier, \"ExportNamespaceSpecifier\"));\n return true;\n }\n\n return false;\n }\n\n maybeParseExportNamedSpecifiers(node) {\n if (this.match(types$1.braceL)) {\n if (!node.specifiers) node.specifiers = [];\n node.specifiers.push(...this.parseExportSpecifiers());\n node.source = null;\n node.declaration = null;\n return true;\n }\n\n return false;\n }\n\n maybeParseExportDeclaration(node) {\n if (this.shouldParseExportDeclaration()) {\n node.specifiers = [];\n node.source = null;\n node.declaration = this.parseExportDeclaration(node);\n return true;\n }\n\n return false;\n }\n\n isAsyncFunction() {\n if (!this.isContextual(\"async\")) return false;\n const next = this.nextTokenStart();\n return !lineBreak.test(this.input.slice(this.state.pos, next)) && this.isUnparsedContextual(next, \"function\");\n }\n\n parseExportDefaultExpression() {\n const expr = this.startNode();\n const isAsync = this.isAsyncFunction();\n\n if (this.match(types$1._function) || isAsync) {\n this.next();\n\n if (isAsync) {\n this.next();\n }\n\n return this.parseFunction(expr, FUNC_STATEMENT | FUNC_NULLABLE_ID, isAsync);\n } else if (this.match(types$1._class)) {\n return this.parseClass(expr, true, true);\n } else if (this.match(types$1.at)) {\n if (this.hasPlugin(\"decorators\") && this.getPluginOption(\"decorators\", \"decoratorsBeforeExport\")) {\n this.raise(this.state.start, ErrorMessages.DecoratorBeforeExport);\n }\n\n this.parseDecorators(false);\n return this.parseClass(expr, true, true);\n } else if (this.match(types$1._const) || this.match(types$1._var) || this.isLet()) {\n throw this.raise(this.state.start, ErrorMessages.UnsupportedDefaultExport);\n } else {\n const res = this.parseMaybeAssignAllowIn();\n this.semicolon();\n return res;\n }\n }\n\n parseExportDeclaration(node) {\n return this.parseStatement(null);\n }\n\n isExportDefaultSpecifier() {\n if (this.match(types$1.name)) {\n const value = this.state.value;\n\n if (value === \"async\" && !this.state.containsEsc || value === \"let\") {\n return false;\n }\n\n if ((value === \"type\" || value === \"interface\") && !this.state.containsEsc) {\n const l = this.lookahead();\n\n if (l.type === types$1.name && l.value !== \"from\" || l.type === types$1.braceL) {\n this.expectOnePlugin([\"flow\", \"typescript\"]);\n return false;\n }\n }\n } else if (!this.match(types$1._default)) {\n return false;\n }\n\n const next = this.nextTokenStart();\n const hasFrom = this.isUnparsedContextual(next, \"from\");\n\n if (this.input.charCodeAt(next) === 44 || this.match(types$1.name) && hasFrom) {\n return true;\n }\n\n if (this.match(types$1._default) && hasFrom) {\n const nextAfterFrom = this.input.charCodeAt(this.nextTokenStartSince(next + 4));\n return nextAfterFrom === 34 || nextAfterFrom === 39;\n }\n\n return false;\n }\n\n parseExportFrom(node, expect) {\n if (this.eatContextual(\"from\")) {\n node.source = this.parseImportSource();\n this.checkExport(node);\n const assertions = this.maybeParseImportAssertions();\n\n if (assertions) {\n node.assertions = assertions;\n }\n } else {\n if (expect) {\n this.unexpected();\n } else {\n node.source = null;\n }\n }\n\n this.semicolon();\n }\n\n shouldParseExportDeclaration() {\n if (this.match(types$1.at)) {\n this.expectOnePlugin([\"decorators\", \"decorators-legacy\"]);\n\n if (this.hasPlugin(\"decorators\")) {\n if (this.getPluginOption(\"decorators\", \"decoratorsBeforeExport\")) {\n this.unexpected(this.state.start, ErrorMessages.DecoratorBeforeExport);\n } else {\n return true;\n }\n }\n }\n\n return this.state.type.keyword === \"var\" || this.state.type.keyword === \"const\" || this.state.type.keyword === \"function\" || this.state.type.keyword === \"class\" || this.isLet() || this.isAsyncFunction();\n }\n\n checkExport(node, checkNames, isDefault, isFrom) {\n if (checkNames) {\n if (isDefault) {\n this.checkDuplicateExports(node, \"default\");\n\n if (this.hasPlugin(\"exportDefaultFrom\")) {\n var _declaration$extra;\n\n const declaration = node.declaration;\n\n if (declaration.type === \"Identifier\" && declaration.name === \"from\" && declaration.end - declaration.start === 4 && !((_declaration$extra = declaration.extra) != null && _declaration$extra.parenthesized)) {\n this.raise(declaration.start, ErrorMessages.ExportDefaultFromAsIdentifier);\n }\n }\n } else if (node.specifiers && node.specifiers.length) {\n for (const specifier of node.specifiers) {\n const {\n exported\n } = specifier;\n const exportedName = exported.type === \"Identifier\" ? exported.name : exported.value;\n this.checkDuplicateExports(specifier, exportedName);\n\n if (!isFrom && specifier.local) {\n const {\n local\n } = specifier;\n\n if (local.type !== \"Identifier\") {\n this.raise(specifier.start, ErrorMessages.ExportBindingIsString, local.value, exportedName);\n } else {\n this.checkReservedWord(local.name, local.start, true, false);\n this.scope.checkLocalExport(local);\n }\n }\n }\n } else if (node.declaration) {\n if (node.declaration.type === \"FunctionDeclaration\" || node.declaration.type === \"ClassDeclaration\") {\n const id = node.declaration.id;\n if (!id) throw new Error(\"Assertion failure\");\n this.checkDuplicateExports(node, id.name);\n } else if (node.declaration.type === \"VariableDeclaration\") {\n for (const declaration of node.declaration.declarations) {\n this.checkDeclaration(declaration.id);\n }\n }\n }\n }\n\n const currentContextDecorators = this.state.decoratorStack[this.state.decoratorStack.length - 1];\n\n if (currentContextDecorators.length) {\n throw this.raise(node.start, ErrorMessages.UnsupportedDecoratorExport);\n }\n }\n\n checkDeclaration(node) {\n if (node.type === \"Identifier\") {\n this.checkDuplicateExports(node, node.name);\n } else if (node.type === \"ObjectPattern\") {\n for (const prop of node.properties) {\n this.checkDeclaration(prop);\n }\n } else if (node.type === \"ArrayPattern\") {\n for (const elem of node.elements) {\n if (elem) {\n this.checkDeclaration(elem);\n }\n }\n } else if (node.type === \"ObjectProperty\") {\n this.checkDeclaration(node.value);\n } else if (node.type === \"RestElement\") {\n this.checkDeclaration(node.argument);\n } else if (node.type === \"AssignmentPattern\") {\n this.checkDeclaration(node.left);\n }\n }\n\n checkDuplicateExports(node, name) {\n if (this.exportedIdentifiers.has(name)) {\n this.raise(node.start, name === \"default\" ? ErrorMessages.DuplicateDefaultExport : ErrorMessages.DuplicateExport, name);\n }\n\n this.exportedIdentifiers.add(name);\n }\n\n parseExportSpecifiers() {\n const nodes = [];\n let first = true;\n this.expect(types$1.braceL);\n\n while (!this.eat(types$1.braceR)) {\n if (first) {\n first = false;\n } else {\n this.expect(types$1.comma);\n if (this.eat(types$1.braceR)) break;\n }\n\n const node = this.startNode();\n node.local = this.parseModuleExportName();\n node.exported = this.eatContextual(\"as\") ? this.parseModuleExportName() : node.local.__clone();\n nodes.push(this.finishNode(node, \"ExportSpecifier\"));\n }\n\n return nodes;\n }\n\n parseModuleExportName() {\n if (this.match(types$1.string)) {\n const result = this.parseStringLiteral(this.state.value);\n const surrogate = result.value.match(loneSurrogate);\n\n if (surrogate) {\n this.raise(result.start, ErrorMessages.ModuleExportNameHasLoneSurrogate, surrogate[0].charCodeAt(0).toString(16));\n }\n\n return result;\n }\n\n return this.parseIdentifier(true);\n }\n\n parseImport(node) {\n node.specifiers = [];\n\n if (!this.match(types$1.string)) {\n const hasDefault = this.maybeParseDefaultImportSpecifier(node);\n const parseNext = !hasDefault || this.eat(types$1.comma);\n const hasStar = parseNext && this.maybeParseStarImportSpecifier(node);\n if (parseNext && !hasStar) this.parseNamedImportSpecifiers(node);\n this.expectContextual(\"from\");\n }\n\n node.source = this.parseImportSource();\n const assertions = this.maybeParseImportAssertions();\n\n if (assertions) {\n node.assertions = assertions;\n } else {\n const attributes = this.maybeParseModuleAttributes();\n\n if (attributes) {\n node.attributes = attributes;\n }\n }\n\n this.semicolon();\n return this.finishNode(node, \"ImportDeclaration\");\n }\n\n parseImportSource() {\n if (!this.match(types$1.string)) this.unexpected();\n return this.parseExprAtom();\n }\n\n shouldParseDefaultImport(node) {\n return this.match(types$1.name);\n }\n\n parseImportSpecifierLocal(node, specifier, type, contextDescription) {\n specifier.local = this.parseIdentifier();\n this.checkLVal(specifier.local, contextDescription, BIND_LEXICAL);\n node.specifiers.push(this.finishNode(specifier, type));\n }\n\n parseAssertEntries() {\n const attrs = [];\n const attrNames = new Set();\n\n do {\n if (this.match(types$1.braceR)) {\n break;\n }\n\n const node = this.startNode();\n const keyName = this.state.value;\n\n if (attrNames.has(keyName)) {\n this.raise(this.state.start, ErrorMessages.ModuleAttributesWithDuplicateKeys, keyName);\n }\n\n attrNames.add(keyName);\n\n if (this.match(types$1.string)) {\n node.key = this.parseStringLiteral(keyName);\n } else {\n node.key = this.parseIdentifier(true);\n }\n\n this.expect(types$1.colon);\n\n if (!this.match(types$1.string)) {\n throw this.unexpected(this.state.start, ErrorMessages.ModuleAttributeInvalidValue);\n }\n\n node.value = this.parseStringLiteral(this.state.value);\n this.finishNode(node, \"ImportAttribute\");\n attrs.push(node);\n } while (this.eat(types$1.comma));\n\n return attrs;\n }\n\n maybeParseModuleAttributes() {\n if (this.match(types$1._with) && !this.hasPrecedingLineBreak()) {\n this.expectPlugin(\"moduleAttributes\");\n this.next();\n } else {\n if (this.hasPlugin(\"moduleAttributes\")) return [];\n return null;\n }\n\n const attrs = [];\n const attributes = new Set();\n\n do {\n const node = this.startNode();\n node.key = this.parseIdentifier(true);\n\n if (node.key.name !== \"type\") {\n this.raise(node.key.start, ErrorMessages.ModuleAttributeDifferentFromType, node.key.name);\n }\n\n if (attributes.has(node.key.name)) {\n this.raise(node.key.start, ErrorMessages.ModuleAttributesWithDuplicateKeys, node.key.name);\n }\n\n attributes.add(node.key.name);\n this.expect(types$1.colon);\n\n if (!this.match(types$1.string)) {\n throw this.unexpected(this.state.start, ErrorMessages.ModuleAttributeInvalidValue);\n }\n\n node.value = this.parseStringLiteral(this.state.value);\n this.finishNode(node, \"ImportAttribute\");\n attrs.push(node);\n } while (this.eat(types$1.comma));\n\n return attrs;\n }\n\n maybeParseImportAssertions() {\n if (this.isContextual(\"assert\") && !this.hasPrecedingLineBreak()) {\n this.expectPlugin(\"importAssertions\");\n this.next();\n } else {\n if (this.hasPlugin(\"importAssertions\")) return [];\n return null;\n }\n\n this.eat(types$1.braceL);\n const attrs = this.parseAssertEntries();\n this.eat(types$1.braceR);\n return attrs;\n }\n\n maybeParseDefaultImportSpecifier(node) {\n if (this.shouldParseDefaultImport(node)) {\n this.parseImportSpecifierLocal(node, this.startNode(), \"ImportDefaultSpecifier\", \"default import specifier\");\n return true;\n }\n\n return false;\n }\n\n maybeParseStarImportSpecifier(node) {\n if (this.match(types$1.star)) {\n const specifier = this.startNode();\n this.next();\n this.expectContextual(\"as\");\n this.parseImportSpecifierLocal(node, specifier, \"ImportNamespaceSpecifier\", \"import namespace specifier\");\n return true;\n }\n\n return false;\n }\n\n parseNamedImportSpecifiers(node) {\n let first = true;\n this.expect(types$1.braceL);\n\n while (!this.eat(types$1.braceR)) {\n if (first) {\n first = false;\n } else {\n if (this.eat(types$1.colon)) {\n throw this.raise(this.state.start, ErrorMessages.DestructureNamedImport);\n }\n\n this.expect(types$1.comma);\n if (this.eat(types$1.braceR)) break;\n }\n\n this.parseImportSpecifier(node);\n }\n }\n\n parseImportSpecifier(node) {\n const specifier = this.startNode();\n const importedIsString = this.match(types$1.string);\n specifier.imported = this.parseModuleExportName();\n\n if (this.eatContextual(\"as\")) {\n specifier.local = this.parseIdentifier();\n } else {\n const {\n imported\n } = specifier;\n\n if (importedIsString) {\n throw this.raise(specifier.start, ErrorMessages.ImportBindingIsString, imported.value);\n }\n\n this.checkReservedWord(imported.name, specifier.start, true, true);\n specifier.local = imported.__clone();\n }\n\n this.checkLVal(specifier.local, \"import specifier\", BIND_LEXICAL);\n node.specifiers.push(this.finishNode(specifier, \"ImportSpecifier\"));\n }\n\n isThisParam(param) {\n return param.type === \"Identifier\" && param.name === \"this\";\n }\n\n}\n\nclass Parser extends StatementParser {\n constructor(options, input) {\n options = getOptions(options);\n super(options, input);\n this.options = options;\n this.initializeScopes();\n this.plugins = pluginsMap(this.options.plugins);\n this.filename = options.sourceFilename;\n }\n\n getScopeHandler() {\n return ScopeHandler;\n }\n\n parse() {\n this.enterInitialScopes();\n const file = this.startNode();\n const program = this.startNode();\n this.nextToken();\n file.errors = null;\n this.parseTopLevel(file, program);\n file.errors = this.state.errors;\n return file;\n }\n\n}\n\nfunction pluginsMap(plugins) {\n const pluginMap = new Map();\n\n for (const plugin of plugins) {\n const [name, options] = Array.isArray(plugin) ? plugin : [plugin, {}];\n if (!pluginMap.has(name)) pluginMap.set(name, options || {});\n }\n\n return pluginMap;\n}\n\nfunction parse(input, options) {\n var _options;\n\n if (((_options = options) == null ? void 0 : _options.sourceType) === \"unambiguous\") {\n options = Object.assign({}, options);\n\n try {\n options.sourceType = \"module\";\n const parser = getParser(options, input);\n const ast = parser.parse();\n\n if (parser.sawUnambiguousESM) {\n return ast;\n }\n\n if (parser.ambiguousScriptDifferentAst) {\n try {\n options.sourceType = \"script\";\n return getParser(options, input).parse();\n } catch (_unused) {}\n } else {\n ast.program.sourceType = \"script\";\n }\n\n return ast;\n } catch (moduleError) {\n try {\n options.sourceType = \"script\";\n return getParser(options, input).parse();\n } catch (_unused2) {}\n\n throw moduleError;\n }\n } else {\n return getParser(options, input).parse();\n }\n}\nfunction parseExpression(input, options) {\n const parser = getParser(options, input);\n\n if (parser.options.strictMode) {\n parser.state.strict = true;\n }\n\n return parser.getExpression();\n}\n\nfunction getParser(options, input) {\n let cls = Parser;\n\n if (options != null && options.plugins) {\n validatePlugins(options.plugins);\n cls = getParserClass(options.plugins);\n }\n\n return new cls(options, input);\n}\n\nconst parserClassCache = {};\n\nfunction getParserClass(pluginsFromOptions) {\n const pluginList = mixinPluginNames.filter(name => hasPlugin(pluginsFromOptions, name));\n const key = pluginList.join(\"/\");\n let cls = parserClassCache[key];\n\n if (!cls) {\n cls = Parser;\n\n for (const plugin of pluginList) {\n cls = mixinPlugins[plugin](cls);\n }\n\n parserClassCache[key] = cls;\n }\n\n return cls;\n}\n\nexports.parse = parse;\nexports.parseExpression = parseExpression;\nexports.tokTypes = types$1;\n//# sourceMappingURL=index.js.map\n","// just pre-load all the stuff that index.js lazily exports\nconst internalRe = require('./internal/re')\nmodule.exports = {\n re: internalRe.re,\n src: internalRe.src,\n tokens: internalRe.t,\n SEMVER_SPEC_VERSION: require('./internal/constants').SEMVER_SPEC_VERSION,\n SemVer: require('./classes/semver'),\n compareIdentifiers: require('./internal/identifiers').compareIdentifiers,\n rcompareIdentifiers: require('./internal/identifiers').rcompareIdentifiers,\n parse: require('./functions/parse'),\n valid: require('./functions/valid'),\n clean: require('./functions/clean'),\n inc: require('./functions/inc'),\n diff: require('./functions/diff'),\n major: require('./functions/major'),\n minor: require('./functions/minor'),\n patch: require('./functions/patch'),\n prerelease: require('./functions/prerelease'),\n compare: require('./functions/compare'),\n rcompare: require('./functions/rcompare'),\n compareLoose: require('./functions/compare-loose'),\n compareBuild: require('./functions/compare-build'),\n sort: require('./functions/sort'),\n rsort: require('./functions/rsort'),\n gt: require('./functions/gt'),\n lt: require('./functions/lt'),\n eq: require('./functions/eq'),\n neq: require('./functions/neq'),\n gte: require('./functions/gte'),\n lte: require('./functions/lte'),\n cmp: require('./functions/cmp'),\n coerce: require('./functions/coerce'),\n Comparator: require('./classes/comparator'),\n Range: require('./classes/range'),\n satisfies: require('./functions/satisfies'),\n toComparators: require('./ranges/to-comparators'),\n maxSatisfying: require('./ranges/max-satisfying'),\n minSatisfying: require('./ranges/min-satisfying'),\n minVersion: require('./ranges/min-version'),\n validRange: require('./ranges/valid'),\n outside: require('./ranges/outside'),\n gtr: require('./ranges/gtr'),\n ltr: require('./ranges/ltr'),\n intersects: require('./ranges/intersects'),\n simplifyRange: require('./ranges/simplify'),\n subset: require('./ranges/subset'),\n}\n","const {MAX_LENGTH} = require('../internal/constants')\nconst { re, t } = require('../internal/re')\nconst SemVer = require('../classes/semver')\n\nconst parseOptions = require('../internal/parse-options')\nconst parse = (version, options) => {\n options = parseOptions(options)\n\n if (version instanceof SemVer) {\n return version\n }\n\n if (typeof version !== 'string') {\n return null\n }\n\n if (version.length > MAX_LENGTH) {\n return null\n }\n\n const r = options.loose ? re[t.LOOSE] : re[t.FULL]\n if (!r.test(version)) {\n return null\n }\n\n try {\n return new SemVer(version, options)\n } catch (er) {\n return null\n }\n}\n\nmodule.exports = parse\n","// Currently in sync with Node.js lib/assert.js\n// https://github.com/nodejs/node/commit/2a51ae424a513ec9a6aa3466baa0cc1d55dd4f3b\n// Originally from narwhal.js (http://narwhaljs.org)\n// Copyright (c) 2009 Thomas Robinson <280north.com>\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the 'Software'), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n'use strict';\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar _require = require('./internal/errors'),\n _require$codes = _require.codes,\n ERR_AMBIGUOUS_ARGUMENT = _require$codes.ERR_AMBIGUOUS_ARGUMENT,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_INVALID_ARG_VALUE = _require$codes.ERR_INVALID_ARG_VALUE,\n ERR_INVALID_RETURN_VALUE = _require$codes.ERR_INVALID_RETURN_VALUE,\n ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS;\n\nvar AssertionError = require('./internal/assert/assertion_error');\n\nvar _require2 = require('util/'),\n inspect = _require2.inspect;\n\nvar _require$types = require('util/').types,\n isPromise = _require$types.isPromise,\n isRegExp = _require$types.isRegExp;\n\nvar objectAssign = Object.assign ? Object.assign : require('es6-object-assign').assign;\nvar objectIs = Object.is ? Object.is : require('object-is');\nvar errorCache = new Map();\nvar isDeepEqual;\nvar isDeepStrictEqual;\nvar parseExpressionAt;\nvar findNodeAround;\nvar decoder;\n\nfunction lazyLoadComparison() {\n var comparison = require('./internal/util/comparisons');\n\n isDeepEqual = comparison.isDeepEqual;\n isDeepStrictEqual = comparison.isDeepStrictEqual;\n} // Escape control characters but not \\n and \\t to keep the line breaks and\n// indentation intact.\n// eslint-disable-next-line no-control-regex\n\n\nvar escapeSequencesRegExp = /[\\x00-\\x08\\x0b\\x0c\\x0e-\\x1f]/g;\nvar meta = [\"\\\\u0000\", \"\\\\u0001\", \"\\\\u0002\", \"\\\\u0003\", \"\\\\u0004\", \"\\\\u0005\", \"\\\\u0006\", \"\\\\u0007\", '\\\\b', '', '', \"\\\\u000b\", '\\\\f', '', \"\\\\u000e\", \"\\\\u000f\", \"\\\\u0010\", \"\\\\u0011\", \"\\\\u0012\", \"\\\\u0013\", \"\\\\u0014\", \"\\\\u0015\", \"\\\\u0016\", \"\\\\u0017\", \"\\\\u0018\", \"\\\\u0019\", \"\\\\u001a\", \"\\\\u001b\", \"\\\\u001c\", \"\\\\u001d\", \"\\\\u001e\", \"\\\\u001f\"];\n\nvar escapeFn = function escapeFn(str) {\n return meta[str.charCodeAt(0)];\n};\n\nvar warned = false; // The assert module provides functions that throw\n// AssertionError's when particular conditions are not met. The\n// assert module must conform to the following interface.\n\nvar assert = module.exports = ok;\nvar NO_EXCEPTION_SENTINEL = {}; // All of the following functions must throw an AssertionError\n// when a corresponding condition is not met, with a message that\n// may be undefined if not provided. All assertion methods provide\n// both the actual and expected values to the assertion error for\n// display purposes.\n\nfunction innerFail(obj) {\n if (obj.message instanceof Error) throw obj.message;\n throw new AssertionError(obj);\n}\n\nfunction fail(actual, expected, message, operator, stackStartFn) {\n var argsLen = arguments.length;\n var internalMessage;\n\n if (argsLen === 0) {\n internalMessage = 'Failed';\n } else if (argsLen === 1) {\n message = actual;\n actual = undefined;\n } else {\n if (warned === false) {\n warned = true;\n var warn = process.emitWarning ? process.emitWarning : console.warn.bind(console);\n warn('assert.fail() with more than one argument is deprecated. ' + 'Please use assert.strictEqual() instead or only pass a message.', 'DeprecationWarning', 'DEP0094');\n }\n\n if (argsLen === 2) operator = '!=';\n }\n\n if (message instanceof Error) throw message;\n var errArgs = {\n actual: actual,\n expected: expected,\n operator: operator === undefined ? 'fail' : operator,\n stackStartFn: stackStartFn || fail\n };\n\n if (message !== undefined) {\n errArgs.message = message;\n }\n\n var err = new AssertionError(errArgs);\n\n if (internalMessage) {\n err.message = internalMessage;\n err.generatedMessage = true;\n }\n\n throw err;\n}\n\nassert.fail = fail; // The AssertionError is defined in internal/error.\n\nassert.AssertionError = AssertionError;\n\nfunction innerOk(fn, argLen, value, message) {\n if (!value) {\n var generatedMessage = false;\n\n if (argLen === 0) {\n generatedMessage = true;\n message = 'No value argument passed to `assert.ok()`';\n } else if (message instanceof Error) {\n throw message;\n }\n\n var err = new AssertionError({\n actual: value,\n expected: true,\n message: message,\n operator: '==',\n stackStartFn: fn\n });\n err.generatedMessage = generatedMessage;\n throw err;\n }\n} // Pure assertion tests whether a value is truthy, as determined\n// by !!value.\n\n\nfunction ok() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n innerOk.apply(void 0, [ok, args.length].concat(args));\n}\n\nassert.ok = ok; // The equality assertion tests shallow, coercive equality with ==.\n\n/* eslint-disable no-restricted-properties */\n\nassert.equal = function equal(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n } // eslint-disable-next-line eqeqeq\n\n\n if (actual != expected) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: '==',\n stackStartFn: equal\n });\n }\n}; // The non-equality assertion tests for whether two objects are not\n// equal with !=.\n\n\nassert.notEqual = function notEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n } // eslint-disable-next-line eqeqeq\n\n\n if (actual == expected) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: '!=',\n stackStartFn: notEqual\n });\n }\n}; // The equivalence assertion tests a deep equality relation.\n\n\nassert.deepEqual = function deepEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n }\n\n if (isDeepEqual === undefined) lazyLoadComparison();\n\n if (!isDeepEqual(actual, expected)) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: 'deepEqual',\n stackStartFn: deepEqual\n });\n }\n}; // The non-equivalence assertion tests for any deep inequality.\n\n\nassert.notDeepEqual = function notDeepEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n }\n\n if (isDeepEqual === undefined) lazyLoadComparison();\n\n if (isDeepEqual(actual, expected)) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: 'notDeepEqual',\n stackStartFn: notDeepEqual\n });\n }\n};\n/* eslint-enable */\n\n\nassert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n }\n\n if (isDeepEqual === undefined) lazyLoadComparison();\n\n if (!isDeepStrictEqual(actual, expected)) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: 'deepStrictEqual',\n stackStartFn: deepStrictEqual\n });\n }\n};\n\nassert.notDeepStrictEqual = notDeepStrictEqual;\n\nfunction notDeepStrictEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n }\n\n if (isDeepEqual === undefined) lazyLoadComparison();\n\n if (isDeepStrictEqual(actual, expected)) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: 'notDeepStrictEqual',\n stackStartFn: notDeepStrictEqual\n });\n }\n}\n\nassert.strictEqual = function strictEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n }\n\n if (!objectIs(actual, expected)) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: 'strictEqual',\n stackStartFn: strictEqual\n });\n }\n};\n\nassert.notStrictEqual = function notStrictEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n }\n\n if (objectIs(actual, expected)) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: 'notStrictEqual',\n stackStartFn: notStrictEqual\n });\n }\n};\n\nvar Comparison = function Comparison(obj, keys, actual) {\n var _this = this;\n\n _classCallCheck(this, Comparison);\n\n keys.forEach(function (key) {\n if (key in obj) {\n if (actual !== undefined && typeof actual[key] === 'string' && isRegExp(obj[key]) && obj[key].test(actual[key])) {\n _this[key] = actual[key];\n } else {\n _this[key] = obj[key];\n }\n }\n });\n};\n\nfunction compareExceptionKey(actual, expected, key, message, keys, fn) {\n if (!(key in actual) || !isDeepStrictEqual(actual[key], expected[key])) {\n if (!message) {\n // Create placeholder objects to create a nice output.\n var a = new Comparison(actual, keys);\n var b = new Comparison(expected, keys, actual);\n var err = new AssertionError({\n actual: a,\n expected: b,\n operator: 'deepStrictEqual',\n stackStartFn: fn\n });\n err.actual = actual;\n err.expected = expected;\n err.operator = fn.name;\n throw err;\n }\n\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: fn.name,\n stackStartFn: fn\n });\n }\n}\n\nfunction expectedException(actual, expected, msg, fn) {\n if (typeof expected !== 'function') {\n if (isRegExp(expected)) return expected.test(actual); // assert.doesNotThrow does not accept objects.\n\n if (arguments.length === 2) {\n throw new ERR_INVALID_ARG_TYPE('expected', ['Function', 'RegExp'], expected);\n } // Handle primitives properly.\n\n\n if (_typeof(actual) !== 'object' || actual === null) {\n var err = new AssertionError({\n actual: actual,\n expected: expected,\n message: msg,\n operator: 'deepStrictEqual',\n stackStartFn: fn\n });\n err.operator = fn.name;\n throw err;\n }\n\n var keys = Object.keys(expected); // Special handle errors to make sure the name and the message are compared\n // as well.\n\n if (expected instanceof Error) {\n keys.push('name', 'message');\n } else if (keys.length === 0) {\n throw new ERR_INVALID_ARG_VALUE('error', expected, 'may not be an empty object');\n }\n\n if (isDeepEqual === undefined) lazyLoadComparison();\n keys.forEach(function (key) {\n if (typeof actual[key] === 'string' && isRegExp(expected[key]) && expected[key].test(actual[key])) {\n return;\n }\n\n compareExceptionKey(actual, expected, key, msg, keys, fn);\n });\n return true;\n } // Guard instanceof against arrow functions as they don't have a prototype.\n\n\n if (expected.prototype !== undefined && actual instanceof expected) {\n return true;\n }\n\n if (Error.isPrototypeOf(expected)) {\n return false;\n }\n\n return expected.call({}, actual) === true;\n}\n\nfunction getActual(fn) {\n if (typeof fn !== 'function') {\n throw new ERR_INVALID_ARG_TYPE('fn', 'Function', fn);\n }\n\n try {\n fn();\n } catch (e) {\n return e;\n }\n\n return NO_EXCEPTION_SENTINEL;\n}\n\nfunction checkIsPromise(obj) {\n // Accept native ES6 promises and promises that are implemented in a similar\n // way. Do not accept thenables that use a function as `obj` and that have no\n // `catch` handler.\n // TODO: thenables are checked up until they have the correct methods,\n // but according to documentation, the `then` method should receive\n // the `fulfill` and `reject` arguments as well or it may be never resolved.\n return isPromise(obj) || obj !== null && _typeof(obj) === 'object' && typeof obj.then === 'function' && typeof obj.catch === 'function';\n}\n\nfunction waitForActual(promiseFn) {\n return Promise.resolve().then(function () {\n var resultPromise;\n\n if (typeof promiseFn === 'function') {\n // Return a rejected promise if `promiseFn` throws synchronously.\n resultPromise = promiseFn(); // Fail in case no promise is returned.\n\n if (!checkIsPromise(resultPromise)) {\n throw new ERR_INVALID_RETURN_VALUE('instance of Promise', 'promiseFn', resultPromise);\n }\n } else if (checkIsPromise(promiseFn)) {\n resultPromise = promiseFn;\n } else {\n throw new ERR_INVALID_ARG_TYPE('promiseFn', ['Function', 'Promise'], promiseFn);\n }\n\n return Promise.resolve().then(function () {\n return resultPromise;\n }).then(function () {\n return NO_EXCEPTION_SENTINEL;\n }).catch(function (e) {\n return e;\n });\n });\n}\n\nfunction expectsError(stackStartFn, actual, error, message) {\n if (typeof error === 'string') {\n if (arguments.length === 4) {\n throw new ERR_INVALID_ARG_TYPE('error', ['Object', 'Error', 'Function', 'RegExp'], error);\n }\n\n if (_typeof(actual) === 'object' && actual !== null) {\n if (actual.message === error) {\n throw new ERR_AMBIGUOUS_ARGUMENT('error/message', \"The error message \\\"\".concat(actual.message, \"\\\" is identical to the message.\"));\n }\n } else if (actual === error) {\n throw new ERR_AMBIGUOUS_ARGUMENT('error/message', \"The error \\\"\".concat(actual, \"\\\" is identical to the message.\"));\n }\n\n message = error;\n error = undefined;\n } else if (error != null && _typeof(error) !== 'object' && typeof error !== 'function') {\n throw new ERR_INVALID_ARG_TYPE('error', ['Object', 'Error', 'Function', 'RegExp'], error);\n }\n\n if (actual === NO_EXCEPTION_SENTINEL) {\n var details = '';\n\n if (error && error.name) {\n details += \" (\".concat(error.name, \")\");\n }\n\n details += message ? \": \".concat(message) : '.';\n var fnType = stackStartFn.name === 'rejects' ? 'rejection' : 'exception';\n innerFail({\n actual: undefined,\n expected: error,\n operator: stackStartFn.name,\n message: \"Missing expected \".concat(fnType).concat(details),\n stackStartFn: stackStartFn\n });\n }\n\n if (error && !expectedException(actual, error, message, stackStartFn)) {\n throw actual;\n }\n}\n\nfunction expectsNoError(stackStartFn, actual, error, message) {\n if (actual === NO_EXCEPTION_SENTINEL) return;\n\n if (typeof error === 'string') {\n message = error;\n error = undefined;\n }\n\n if (!error || expectedException(actual, error)) {\n var details = message ? \": \".concat(message) : '.';\n var fnType = stackStartFn.name === 'doesNotReject' ? 'rejection' : 'exception';\n innerFail({\n actual: actual,\n expected: error,\n operator: stackStartFn.name,\n message: \"Got unwanted \".concat(fnType).concat(details, \"\\n\") + \"Actual message: \\\"\".concat(actual && actual.message, \"\\\"\"),\n stackStartFn: stackStartFn\n });\n }\n\n throw actual;\n}\n\nassert.throws = function throws(promiseFn) {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n expectsError.apply(void 0, [throws, getActual(promiseFn)].concat(args));\n};\n\nassert.rejects = function rejects(promiseFn) {\n for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n args[_key3 - 1] = arguments[_key3];\n }\n\n return waitForActual(promiseFn).then(function (result) {\n return expectsError.apply(void 0, [rejects, result].concat(args));\n });\n};\n\nassert.doesNotThrow = function doesNotThrow(fn) {\n for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n args[_key4 - 1] = arguments[_key4];\n }\n\n expectsNoError.apply(void 0, [doesNotThrow, getActual(fn)].concat(args));\n};\n\nassert.doesNotReject = function doesNotReject(fn) {\n for (var _len5 = arguments.length, args = new Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) {\n args[_key5 - 1] = arguments[_key5];\n }\n\n return waitForActual(fn).then(function (result) {\n return expectsNoError.apply(void 0, [doesNotReject, result].concat(args));\n });\n};\n\nassert.ifError = function ifError(err) {\n if (err !== null && err !== undefined) {\n var message = 'ifError got unwanted exception: ';\n\n if (_typeof(err) === 'object' && typeof err.message === 'string') {\n if (err.message.length === 0 && err.constructor) {\n message += err.constructor.name;\n } else {\n message += err.message;\n }\n } else {\n message += inspect(err);\n }\n\n var newErr = new AssertionError({\n actual: err,\n expected: null,\n operator: 'ifError',\n message: message,\n stackStartFn: ifError\n }); // Make sure we actually have a stack trace!\n\n var origStack = err.stack;\n\n if (typeof origStack === 'string') {\n // This will remove any duplicated frames from the error frames taken\n // from within `ifError` and add the original error frames to the newly\n // created ones.\n var tmp2 = origStack.split('\\n');\n tmp2.shift(); // Filter all frames existing in err.stack.\n\n var tmp1 = newErr.stack.split('\\n');\n\n for (var i = 0; i < tmp2.length; i++) {\n // Find the first occurrence of the frame.\n var pos = tmp1.indexOf(tmp2[i]);\n\n if (pos !== -1) {\n // Only keep new frames.\n tmp1 = tmp1.slice(0, pos);\n break;\n }\n }\n\n newErr.stack = \"\".concat(tmp1.join('\\n'), \"\\n\").concat(tmp2.join('\\n'));\n }\n\n throw newErr;\n }\n}; // Expose a strict only variant of assert\n\n\nfunction strict() {\n for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n args[_key6] = arguments[_key6];\n }\n\n innerOk.apply(void 0, [strict, args.length].concat(args));\n}\n\nassert.strict = objectAssign(strict, assert, {\n equal: assert.strictEqual,\n deepEqual: assert.deepStrictEqual,\n notEqual: assert.notStrictEqual,\n notDeepEqual: assert.notDeepStrictEqual\n});\nassert.strict.strict = assert.strict;","var fails = require('../internals/fails');\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;\n});\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('navigator', 'userAgent') || '';\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.clear = clear;\nexports.clearPath = clearPath;\nexports.clearScope = clearScope;\nexports.scope = exports.path = void 0;\nlet path = new WeakMap();\nexports.path = path;\nlet scope = new WeakMap();\nexports.scope = scope;\n\nfunction clear() {\n clearPath();\n clearScope();\n}\n\nfunction clearPath() {\n exports.path = path = new WeakMap();\n}\n\nfunction clearScope() {\n exports.scope = scope = new WeakMap();\n}","'use strict'\n\nlet Container = require('./container')\n\nlet LazyResult, Processor\n\nclass Root extends Container {\n constructor(defaults) {\n super(defaults)\n this.type = 'root'\n if (!this.nodes) this.nodes = []\n }\n\n removeChild(child, ignore) {\n let index = this.index(child)\n\n if (!ignore && index === 0 && this.nodes.length > 1) {\n this.nodes[1].raws.before = this.nodes[index].raws.before\n }\n\n return super.removeChild(child)\n }\n\n normalize(child, sample, type) {\n let nodes = super.normalize(child)\n\n if (sample) {\n if (type === 'prepend') {\n if (this.nodes.length > 1) {\n sample.raws.before = this.nodes[1].raws.before\n } else {\n delete sample.raws.before\n }\n } else if (this.first !== sample) {\n for (let node of nodes) {\n node.raws.before = sample.raws.before\n }\n }\n }\n\n return nodes\n }\n\n toResult(opts = {}) {\n let lazy = new LazyResult(new Processor(), this, opts)\n return lazy.stringify()\n }\n}\n\nRoot.registerLazyResult = dependant => {\n LazyResult = dependant\n}\n\nRoot.registerProcessor = dependant => {\n Processor = dependant\n}\n\nmodule.exports = Root\nRoot.default = Root\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors ||\n function getOwnPropertyDescriptors(obj) {\n var keys = Object.keys(obj);\n var descriptors = {};\n for (var i = 0; i < keys.length; i++) {\n descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n }\n return descriptors;\n };\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n if (typeof process !== 'undefined' && process.noDeprecation === true) {\n return fn;\n }\n\n // Allow for deprecating things in the process of starting up.\n if (typeof process === 'undefined') {\n return function() {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnvRegex = /^$/;\n\nif (process.env.NODE_DEBUG) {\n var debugEnv = process.env.NODE_DEBUG;\n debugEnv = debugEnv.replace(/[|\\\\{}()[\\]^$+?.]/g, '\\\\$&')\n .replace(/\\*/g, '.*')\n .replace(/,/g, '$|^')\n .toUpperCase();\n debugEnvRegex = new RegExp('^' + debugEnv + '$', 'i');\n}\nexports.debuglog = function(set) {\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (debugEnvRegex.test(set)) {\n var pid = process.pid;\n debugs[set] = function() {\n var msg = exports.format.apply(exports, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n exports._extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').substr(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nexports.types = require('./support/types');\n\nfunction isArray(ar) {\n return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\nexports.types.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\nexports.types.isDate = isDate;\n\nfunction isError(e) {\n return isObject(e) &&\n (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\nexports.types.isNativeError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n * prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nvar kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;\n\nexports.promisify = function promisify(original) {\n if (typeof original !== 'function')\n throw new TypeError('The \"original\" argument must be of type Function');\n\n if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\n var fn = original[kCustomPromisifiedSymbol];\n if (typeof fn !== 'function') {\n throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');\n }\n Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return fn;\n }\n\n function fn() {\n var promiseResolve, promiseReject;\n var promise = new Promise(function (resolve, reject) {\n promiseResolve = resolve;\n promiseReject = reject;\n });\n\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n args.push(function (err, value) {\n if (err) {\n promiseReject(err);\n } else {\n promiseResolve(value);\n }\n });\n\n try {\n original.apply(this, args);\n } catch (err) {\n promiseReject(err);\n }\n\n return promise;\n }\n\n Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\n\n if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return Object.defineProperties(\n fn,\n getOwnPropertyDescriptors(original)\n );\n}\n\nexports.promisify.custom = kCustomPromisifiedSymbol\n\nfunction callbackifyOnRejected(reason, cb) {\n // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).\n // Because `null` is a special error value in callbacks which means \"no error\n // occurred\", we error-wrap so the callback consumer can distinguish between\n // \"the promise rejected with null\" or \"the promise fulfilled with undefined\".\n if (!reason) {\n var newReason = new Error('Promise was rejected with a falsy value');\n newReason.reason = reason;\n reason = newReason;\n }\n return cb(reason);\n}\n\nfunction callbackify(original) {\n if (typeof original !== 'function') {\n throw new TypeError('The \"original\" argument must be of type Function');\n }\n\n // We DO NOT return the promise as it gives the user a false sense that\n // the promise is actually somehow related to the callback's execution\n // and that the callback throwing will reject the promise.\n function callbackified() {\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n\n var maybeCb = args.pop();\n if (typeof maybeCb !== 'function') {\n throw new TypeError('The last argument must be of type Function');\n }\n var self = this;\n var cb = function() {\n return maybeCb.apply(self, arguments);\n };\n // In true node style we process the callback on `nextTick` with all the\n // implications (stack, `uncaughtException`, `async_hooks`)\n original.apply(this, args)\n .then(function(ret) { process.nextTick(cb.bind(null, null, ret)) },\n function(rej) { process.nextTick(callbackifyOnRejected.bind(null, rej, cb)) });\n }\n\n Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\n Object.defineProperties(callbackified,\n getOwnPropertyDescriptors(original));\n return callbackified;\n}\nexports.callbackify = callbackify;\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n const arr = new Uint8Array(1)\n const proto = { foo: function () { return 42 } }\n Object.setPrototypeOf(proto, Uint8Array.prototype)\n Object.setPrototypeOf(arr, proto)\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n const buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value)\n }\n\n if (value == null) {\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n const valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n const b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n const length = byteLength(string, encoding) | 0\n let buf = createBuffer(length)\n\n const actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n const length = array.length < 0 ? 0 : checked(array.length) | 0\n const buf = createBuffer(length)\n for (let i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n const copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n let buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n const len = checked(obj.length) | 0\n const buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n let x = a.length\n let y = b.length\n\n for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n let i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n const buffer = Buffer.allocUnsafe(length)\n let pos = 0\n for (i = 0; i < list.length; ++i) {\n let buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n buf.copy(buffer, pos)\n } else {\n Uint8Array.prototype.set.call(\n buffer,\n buf,\n pos\n )\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n } else {\n buf.copy(buffer, pos)\n }\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n const len = string.length\n const mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n let loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n const i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n const len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (let i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n const len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (let i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n const len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (let i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n const length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n let str = ''\n const max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return ''\n}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n let x = thisEnd - thisStart\n let y = end - start\n const len = Math.min(x, y)\n\n const thisCopy = this.slice(thisStart, thisEnd)\n const targetCopy = target.slice(start, end)\n\n for (let i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n let indexSize = 1\n let arrLength = arr.length\n let valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n let i\n if (dir) {\n let foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n let found = true\n for (let j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n const remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n const strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n let i\n for (i = 0; i < length; ++i) {\n const parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n const remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n case 'latin1':\n case 'binary':\n return asciiWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n const res = []\n\n let i = start\n while (i < end) {\n const firstByte = buf[i]\n let codePoint = null\n let bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n const len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n let res = ''\n let i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n const len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n let out = ''\n for (let i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n const bytes = buf.slice(start, end)\n let res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (let i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n const len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n const newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n let val = this[offset + --byteLength]\n let mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const lo = first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24\n\n const hi = this[++offset] +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n last * 2 ** 24\n\n return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const hi = first * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n const lo = this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last\n\n return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let i = byteLength\n let mul = 1\n let val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = this[offset + 4] +\n this[offset + 5] * 2 ** 8 +\n this[offset + 6] * 2 ** 16 +\n (last << 24) // Overflow\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = (first << 24) + // Overflow\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let mul = 1\n let i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let i = byteLength - 1\n let mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset + 7] = lo\n lo = lo >> 8\n buf[offset + 6] = lo\n lo = lo >> 8\n buf[offset + 5] = lo\n lo = lo >> 8\n buf[offset + 4] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset + 3] = hi\n hi = hi >> 8\n buf[offset + 2] = hi\n hi = hi >> 8\n buf[offset + 1] = hi\n hi = hi >> 8\n buf[offset] = hi\n return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = 0\n let mul = 1\n let sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = byteLength - 1\n let mul = 1\n let sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n const len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n const code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n } else if (typeof val === 'boolean') {\n val = Number(val)\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n let i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n const bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n const len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n errors[sym] = class NodeError extends Base {\n constructor () {\n super()\n\n Object.defineProperty(this, 'message', {\n value: getMessage.apply(this, arguments),\n writable: true,\n configurable: true\n })\n\n // Add the error code to the name to include it in the stack trace.\n this.name = `${this.name} [${sym}]`\n // Access the stack to generate the error message including the error code\n // from the name.\n this.stack // eslint-disable-line no-unused-expressions\n // Reset the name to the actual name.\n delete this.name\n }\n\n get code () {\n return sym\n }\n\n set code (value) {\n Object.defineProperty(this, 'code', {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n })\n }\n\n toString () {\n return `${this.name} [${sym}]: ${this.message}`\n }\n }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n function (name) {\n if (name) {\n return `${name} is outside of buffer bounds`\n }\n\n return 'Attempt to access memory outside buffer bounds'\n }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n function (name, actual) {\n return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n }, TypeError)\nE('ERR_OUT_OF_RANGE',\n function (str, range, input) {\n let msg = `The value of \"${str}\" is out of range.`\n let received = input\n if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n received = addNumericalSeparator(String(input))\n } else if (typeof input === 'bigint') {\n received = String(input)\n if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n received = addNumericalSeparator(received)\n }\n received += 'n'\n }\n msg += ` It must be ${range}. Received ${received}`\n return msg\n }, RangeError)\n\nfunction addNumericalSeparator (val) {\n let res = ''\n let i = val.length\n const start = val[0] === '-' ? 1 : 0\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`\n }\n return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n validateNumber(offset, 'offset')\n if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n boundsError(offset, buf.length - (byteLength + 1))\n }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n if (value > max || value < min) {\n const n = typeof min === 'bigint' ? 'n' : ''\n let range\n if (byteLength > 3) {\n if (min === 0 || min === BigInt(0)) {\n range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n } else {\n range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n `${(byteLength + 1) * 8 - 1}${n}`\n }\n } else {\n range = `>= ${min}${n} and <= ${max}${n}`\n }\n throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n }\n checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n if (typeof value !== 'number') {\n throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n }\n}\n\nfunction boundsError (value, length, type) {\n if (Math.floor(value) !== value) {\n validateNumber(value, type)\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n }\n\n if (length < 0) {\n throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n }\n\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n `>= ${type ? 1 : 0} and <= ${length}`,\n value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n let codePoint\n const length = string.length\n let leadSurrogate = null\n const bytes = []\n\n for (let i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n let c, hi, lo\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n let i\n for (i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n const alphabet = '0123456789abcdef'\n const table = new Array(256)\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n throw new Error('BigInt not supported')\n}\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = isValidIdentifier;\n\nvar _helperValidatorIdentifier = require(\"@babel/helper-validator-identifier\");\n\nfunction isValidIdentifier(name, reserved = true) {\n if (typeof name !== \"string\") return false;\n\n if (reserved) {\n if ((0, _helperValidatorIdentifier.isKeyword)(name) || (0, _helperValidatorIdentifier.isStrictReservedWord)(name, true)) {\n return false;\n }\n }\n\n return (0, _helperValidatorIdentifier.isIdentifierName)(name);\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.codeFrameColumns = codeFrameColumns;\nexports.default = _default;\n\nvar _highlight = require(\"@babel/highlight\");\n\nlet deprecationWarningShown = false;\n\nfunction getDefs(chalk) {\n return {\n gutter: chalk.grey,\n marker: chalk.red.bold,\n message: chalk.red.bold\n };\n}\n\nconst NEWLINE = /\\r\\n|[\\n\\r\\u2028\\u2029]/;\n\nfunction getMarkerLines(loc, source, opts) {\n const startLoc = Object.assign({\n column: 0,\n line: -1\n }, loc.start);\n const endLoc = Object.assign({}, startLoc, loc.end);\n const {\n linesAbove = 2,\n linesBelow = 3\n } = opts || {};\n const startLine = startLoc.line;\n const startColumn = startLoc.column;\n const endLine = endLoc.line;\n const endColumn = endLoc.column;\n let start = Math.max(startLine - (linesAbove + 1), 0);\n let end = Math.min(source.length, endLine + linesBelow);\n\n if (startLine === -1) {\n start = 0;\n }\n\n if (endLine === -1) {\n end = source.length;\n }\n\n const lineDiff = endLine - startLine;\n const markerLines = {};\n\n if (lineDiff) {\n for (let i = 0; i <= lineDiff; i++) {\n const lineNumber = i + startLine;\n\n if (!startColumn) {\n markerLines[lineNumber] = true;\n } else if (i === 0) {\n const sourceLength = source[lineNumber - 1].length;\n markerLines[lineNumber] = [startColumn, sourceLength - startColumn + 1];\n } else if (i === lineDiff) {\n markerLines[lineNumber] = [0, endColumn];\n } else {\n const sourceLength = source[lineNumber - i].length;\n markerLines[lineNumber] = [0, sourceLength];\n }\n }\n } else {\n if (startColumn === endColumn) {\n if (startColumn) {\n markerLines[startLine] = [startColumn, 0];\n } else {\n markerLines[startLine] = true;\n }\n } else {\n markerLines[startLine] = [startColumn, endColumn - startColumn];\n }\n }\n\n return {\n start,\n end,\n markerLines\n };\n}\n\nfunction codeFrameColumns(rawLines, loc, opts = {}) {\n const highlighted = (opts.highlightCode || opts.forceColor) && (0, _highlight.shouldHighlight)(opts);\n const chalk = (0, _highlight.getChalk)(opts);\n const defs = getDefs(chalk);\n\n const maybeHighlight = (chalkFn, string) => {\n return highlighted ? chalkFn(string) : string;\n };\n\n const lines = rawLines.split(NEWLINE);\n const {\n start,\n end,\n markerLines\n } = getMarkerLines(loc, lines, opts);\n const hasColumns = loc.start && typeof loc.start.column === \"number\";\n const numberMaxWidth = String(end).length;\n const highlightedLines = highlighted ? (0, _highlight.default)(rawLines, opts) : rawLines;\n let frame = highlightedLines.split(NEWLINE).slice(start, end).map((line, index) => {\n const number = start + 1 + index;\n const paddedNumber = ` ${number}`.slice(-numberMaxWidth);\n const gutter = ` ${paddedNumber} |`;\n const hasMarker = markerLines[number];\n const lastMarkerLine = !markerLines[number + 1];\n\n if (hasMarker) {\n let markerLine = \"\";\n\n if (Array.isArray(hasMarker)) {\n const markerSpacing = line.slice(0, Math.max(hasMarker[0] - 1, 0)).replace(/[^\\t]/g, \" \");\n const numberOfMarkers = hasMarker[1] || 1;\n markerLine = [\"\\n \", maybeHighlight(defs.gutter, gutter.replace(/\\d/g, \" \")), \" \", markerSpacing, maybeHighlight(defs.marker, \"^\").repeat(numberOfMarkers)].join(\"\");\n\n if (lastMarkerLine && opts.message) {\n markerLine += \" \" + maybeHighlight(defs.message, opts.message);\n }\n }\n\n return [maybeHighlight(defs.marker, \">\"), maybeHighlight(defs.gutter, gutter), line.length > 0 ? ` ${line}` : \"\", markerLine].join(\"\");\n } else {\n return ` ${maybeHighlight(defs.gutter, gutter)}${line.length > 0 ? ` ${line}` : \"\"}`;\n }\n }).join(\"\\n\");\n\n if (opts.message && !hasColumns) {\n frame = `${\" \".repeat(numberMaxWidth + 1)}${opts.message}\\n${frame}`;\n }\n\n if (highlighted) {\n return chalk.reset(frame);\n } else {\n return frame;\n }\n}\n\nfunction _default(rawLines, lineNumber, colNumber, opts = {}) {\n if (!deprecationWarningShown) {\n deprecationWarningShown = true;\n const message = \"Passing lineNumber and colNumber is deprecated to @babel/code-frame. Please use `codeFrameColumns`.\";\n\n if (process.emitWarning) {\n process.emitWarning(message, \"DeprecationWarning\");\n } else {\n const deprecationError = new Error(message);\n deprecationError.name = \"DeprecationWarning\";\n console.warn(new Error(message));\n }\n }\n\n colNumber = Math.max(colNumber, 0);\n const location = {\n start: {\n column: colNumber,\n line: lineNumber\n }\n };\n return codeFrameColumns(rawLines, location, opts);\n}","'use strict';\n\nvar keys = require('object-keys');\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';\n\nvar toStr = Object.prototype.toString;\nvar concat = Array.prototype.concat;\nvar origDefineProperty = Object.defineProperty;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar arePropertyDescriptorsSupported = function () {\n\tvar obj = {};\n\ttry {\n\t\torigDefineProperty(obj, 'x', { enumerable: false, value: obj });\n\t\t// eslint-disable-next-line no-unused-vars, no-restricted-syntax\n\t\tfor (var _ in obj) { // jscs:ignore disallowUnusedVariables\n\t\t\treturn false;\n\t\t}\n\t\treturn obj.x === obj;\n\t} catch (e) { /* this is IE 8. */\n\t\treturn false;\n\t}\n};\nvar supportsDescriptors = origDefineProperty && arePropertyDescriptorsSupported();\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object && (!isFunction(predicate) || !predicate())) {\n\t\treturn;\n\t}\n\tif (supportsDescriptors) {\n\t\torigDefineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: value,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\tobject[name] = value;\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = concat.call(props, Object.getOwnPropertySymbols(map));\n\t}\n\tfor (var i = 0; i < props.length; i += 1) {\n\t\tdefineProperty(object, props[i], map[props[i]], predicates[props[i]]);\n\t}\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n","// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nconst SEMVER_SPEC_VERSION = '2.0.0'\n\nconst MAX_LENGTH = 256\nconst MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||\n /* istanbul ignore next */ 9007199254740991\n\n// Max safe segment length for coercion.\nconst MAX_SAFE_COMPONENT_LENGTH = 16\n\nmodule.exports = {\n SEMVER_SPEC_VERSION,\n MAX_LENGTH,\n MAX_SAFE_INTEGER,\n MAX_SAFE_COMPONENT_LENGTH\n}\n","const debug = (\n typeof process === 'object' &&\n process.env &&\n process.env.NODE_DEBUG &&\n /\\bsemver\\b/i.test(process.env.NODE_DEBUG)\n) ? (...args) => console.error('SEMVER', ...args)\n : () => {}\n\nmodule.exports = debug\n","// parse out just the options we care about so we always get a consistent\n// obj with keys in a consistent order.\nconst opts = ['includePrerelease', 'loose', 'rtl']\nconst parseOptions = options =>\n !options ? {}\n : typeof options !== 'object' ? { loose: true }\n : opts.filter(k => options[k]).reduce((options, k) => {\n options[k] = true\n return options\n }, {})\nmodule.exports = parseOptions\n","const compare = require('./compare')\nconst gt = (a, b, loose) => compare(a, b, loose) > 0\nmodule.exports = gt\n","const ANY = Symbol('SemVer ANY')\n// hoisted class for cyclic dependency\nclass Comparator {\n static get ANY () {\n return ANY\n }\n constructor (comp, options) {\n options = parseOptions(options)\n\n if (comp instanceof Comparator) {\n if (comp.loose === !!options.loose) {\n return comp\n } else {\n comp = comp.value\n }\n }\n\n debug('comparator', comp, options)\n this.options = options\n this.loose = !!options.loose\n this.parse(comp)\n\n if (this.semver === ANY) {\n this.value = ''\n } else {\n this.value = this.operator + this.semver.version\n }\n\n debug('comp', this)\n }\n\n parse (comp) {\n const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]\n const m = comp.match(r)\n\n if (!m) {\n throw new TypeError(`Invalid comparator: ${comp}`)\n }\n\n this.operator = m[1] !== undefined ? m[1] : ''\n if (this.operator === '=') {\n this.operator = ''\n }\n\n // if it literally is just '>' or '' then allow anything.\n if (!m[2]) {\n this.semver = ANY\n } else {\n this.semver = new SemVer(m[2], this.options.loose)\n }\n }\n\n toString () {\n return this.value\n }\n\n test (version) {\n debug('Comparator.test', version, this.options.loose)\n\n if (this.semver === ANY || version === ANY) {\n return true\n }\n\n if (typeof version === 'string') {\n try {\n version = new SemVer(version, this.options)\n } catch (er) {\n return false\n }\n }\n\n return cmp(version, this.operator, this.semver, this.options)\n }\n\n intersects (comp, options) {\n if (!(comp instanceof Comparator)) {\n throw new TypeError('a Comparator is required')\n }\n\n if (!options || typeof options !== 'object') {\n options = {\n loose: !!options,\n includePrerelease: false\n }\n }\n\n if (this.operator === '') {\n if (this.value === '') {\n return true\n }\n return new Range(comp.value, options).test(this.value)\n } else if (comp.operator === '') {\n if (comp.value === '') {\n return true\n }\n return new Range(this.value, options).test(comp.semver)\n }\n\n const sameDirectionIncreasing =\n (this.operator === '>=' || this.operator === '>') &&\n (comp.operator === '>=' || comp.operator === '>')\n const sameDirectionDecreasing =\n (this.operator === '<=' || this.operator === '<') &&\n (comp.operator === '<=' || comp.operator === '<')\n const sameSemVer = this.semver.version === comp.semver.version\n const differentDirectionsInclusive =\n (this.operator === '>=' || this.operator === '<=') &&\n (comp.operator === '>=' || comp.operator === '<=')\n const oppositeDirectionsLessThan =\n cmp(this.semver, '<', comp.semver, options) &&\n (this.operator === '>=' || this.operator === '>') &&\n (comp.operator === '<=' || comp.operator === '<')\n const oppositeDirectionsGreaterThan =\n cmp(this.semver, '>', comp.semver, options) &&\n (this.operator === '<=' || this.operator === '<') &&\n (comp.operator === '>=' || comp.operator === '>')\n\n return (\n sameDirectionIncreasing ||\n sameDirectionDecreasing ||\n (sameSemVer && differentDirectionsInclusive) ||\n oppositeDirectionsLessThan ||\n oppositeDirectionsGreaterThan\n )\n }\n}\n\nmodule.exports = Comparator\n\nconst parseOptions = require('../internal/parse-options')\nconst {re, t} = require('../internal/re')\nconst cmp = require('../functions/cmp')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst Range = require('./range')\n","const Range = require('../classes/range')\nconst satisfies = (version, range, options) => {\n try {\n range = new Range(range, options)\n } catch (er) {\n return false\n }\n return range.test(version)\n}\nmodule.exports = satisfies\n","'use strict'\n\nlet Node = require('./node')\n\nclass Declaration extends Node {\n constructor(defaults) {\n if (\n defaults &&\n typeof defaults.value !== 'undefined' &&\n typeof defaults.value !== 'string'\n ) {\n defaults = { ...defaults, value: String(defaults.value) }\n }\n super(defaults)\n this.type = 'decl'\n }\n\n get variable() {\n return this.prop.startsWith('--') || this.prop[0] === '$'\n }\n}\n\nmodule.exports = Declaration\nDeclaration.default = Declaration\n","'use strict'\n\nlet { isClean, my } = require('./symbols')\nlet CssSyntaxError = require('./css-syntax-error')\nlet Stringifier = require('./stringifier')\nlet stringify = require('./stringify')\n\nfunction cloneNode(obj, parent) {\n let cloned = new obj.constructor()\n\n for (let i in obj) {\n if (!Object.prototype.hasOwnProperty.call(obj, i)) {\n // istanbul ignore next\n continue\n }\n if (i === 'proxyCache') continue\n let value = obj[i]\n let type = typeof value\n\n if (i === 'parent' && type === 'object') {\n if (parent) cloned[i] = parent\n } else if (i === 'source') {\n cloned[i] = value\n } else if (Array.isArray(value)) {\n cloned[i] = value.map(j => cloneNode(j, cloned))\n } else {\n if (type === 'object' && value !== null) value = cloneNode(value)\n cloned[i] = value\n }\n }\n\n return cloned\n}\n\nclass Node {\n constructor(defaults = {}) {\n this.raws = {}\n this[isClean] = false\n this[my] = true\n\n for (let name in defaults) {\n if (name === 'nodes') {\n this.nodes = []\n for (let node of defaults[name]) {\n if (typeof node.clone === 'function') {\n this.append(node.clone())\n } else {\n this.append(node)\n }\n }\n } else {\n this[name] = defaults[name]\n }\n }\n }\n\n error(message, opts = {}) {\n if (this.source) {\n let pos = this.positionBy(opts)\n return this.source.input.error(message, pos.line, pos.column, opts)\n }\n return new CssSyntaxError(message)\n }\n\n warn(result, text, opts) {\n let data = { node: this }\n for (let i in opts) data[i] = opts[i]\n return result.warn(text, data)\n }\n\n remove() {\n if (this.parent) {\n this.parent.removeChild(this)\n }\n this.parent = undefined\n return this\n }\n\n toString(stringifier = stringify) {\n if (stringifier.stringify) stringifier = stringifier.stringify\n let result = ''\n stringifier(this, i => {\n result += i\n })\n return result\n }\n\n assign(overrides = {}) {\n for (let name in overrides) {\n this[name] = overrides[name]\n }\n return this\n }\n\n clone(overrides = {}) {\n let cloned = cloneNode(this)\n for (let name in overrides) {\n cloned[name] = overrides[name]\n }\n return cloned\n }\n\n cloneBefore(overrides = {}) {\n let cloned = this.clone(overrides)\n this.parent.insertBefore(this, cloned)\n return cloned\n }\n\n cloneAfter(overrides = {}) {\n let cloned = this.clone(overrides)\n this.parent.insertAfter(this, cloned)\n return cloned\n }\n\n replaceWith(...nodes) {\n if (this.parent) {\n let bookmark = this\n let foundSelf = false\n for (let node of nodes) {\n if (node === this) {\n foundSelf = true\n } else if (foundSelf) {\n this.parent.insertAfter(bookmark, node)\n bookmark = node\n } else {\n this.parent.insertBefore(bookmark, node)\n }\n }\n\n if (!foundSelf) {\n this.remove()\n }\n }\n\n return this\n }\n\n next() {\n if (!this.parent) return undefined\n let index = this.parent.index(this)\n return this.parent.nodes[index + 1]\n }\n\n prev() {\n if (!this.parent) return undefined\n let index = this.parent.index(this)\n return this.parent.nodes[index - 1]\n }\n\n before(add) {\n this.parent.insertBefore(this, add)\n return this\n }\n\n after(add) {\n this.parent.insertAfter(this, add)\n return this\n }\n\n root() {\n let result = this\n while (result.parent && result.parent.type !== 'document') {\n result = result.parent\n }\n return result\n }\n\n raw(prop, defaultType) {\n let str = new Stringifier()\n return str.raw(this, prop, defaultType)\n }\n\n cleanRaws(keepBetween) {\n delete this.raws.before\n delete this.raws.after\n if (!keepBetween) delete this.raws.between\n }\n\n toJSON(_, inputs) {\n let fixed = {}\n let emitInputs = inputs == null\n inputs = inputs || new Map()\n let inputsNextIndex = 0\n\n for (let name in this) {\n if (!Object.prototype.hasOwnProperty.call(this, name)) {\n // istanbul ignore next\n continue\n }\n if (name === 'parent' || name === 'proxyCache') continue\n let value = this[name]\n\n if (Array.isArray(value)) {\n fixed[name] = value.map(i => {\n if (typeof i === 'object' && i.toJSON) {\n return i.toJSON(null, inputs)\n } else {\n return i\n }\n })\n } else if (typeof value === 'object' && value.toJSON) {\n fixed[name] = value.toJSON(null, inputs)\n } else if (name === 'source') {\n let inputId = inputs.get(value.input)\n if (inputId == null) {\n inputId = inputsNextIndex\n inputs.set(value.input, inputsNextIndex)\n inputsNextIndex++\n }\n fixed[name] = {\n inputId,\n start: value.start,\n end: value.end\n }\n } else {\n fixed[name] = value\n }\n }\n\n if (emitInputs) {\n fixed.inputs = [...inputs.keys()].map(input => input.toJSON())\n }\n\n return fixed\n }\n\n positionInside(index) {\n let string = this.toString()\n let column = this.source.start.column\n let line = this.source.start.line\n\n for (let i = 0; i < index; i++) {\n if (string[i] === '\\n') {\n column = 1\n line += 1\n } else {\n column += 1\n }\n }\n\n return { line, column }\n }\n\n positionBy(opts) {\n let pos = this.source.start\n if (opts.index) {\n pos = this.positionInside(opts.index)\n } else if (opts.word) {\n let index = this.toString().indexOf(opts.word)\n if (index !== -1) pos = this.positionInside(index)\n }\n return pos\n }\n\n getProxyProcessor() {\n return {\n set(node, prop, value) {\n if (node[prop] === value) return true\n node[prop] = value\n if (\n prop === 'prop' ||\n prop === 'value' ||\n prop === 'name' ||\n prop === 'params' ||\n prop === 'important' ||\n prop === 'text'\n ) {\n node.markDirty()\n }\n return true\n },\n\n get(node, prop) {\n if (prop === 'proxyOf') {\n return node\n } else if (prop === 'root') {\n return () => node.root().toProxy()\n } else {\n return node[prop]\n }\n }\n }\n }\n\n toProxy() {\n if (!this.proxyCache) {\n this.proxyCache = new Proxy(this, this.getProxyProcessor())\n }\n return this.proxyCache\n }\n\n addToError(error) {\n error.postcssNode = this\n if (error.stack && this.source && /\\n\\s{4}at /.test(error.stack)) {\n let s = this.source\n error.stack = error.stack.replace(\n /\\n\\s{4}at /,\n `$&${s.input.from}:${s.start.line}:${s.start.column}$&`\n )\n }\n return error\n }\n\n markDirty() {\n if (this[isClean]) {\n this[isClean] = false\n let next = this\n while ((next = next.parent)) {\n next[isClean] = false\n }\n }\n }\n\n get proxyOf() {\n return this\n }\n}\n\nmodule.exports = Node\nNode.default = Node\n","'use strict'\n\nlet Node = require('./node')\n\nclass Comment extends Node {\n constructor(defaults) {\n super(defaults)\n this.type = 'comment'\n }\n}\n\nmodule.exports = Comment\nComment.default = Comment\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.transformJSXSpreadAttribute = exports.isConstant = exports.dedupeProperties = exports.isOn = exports.buildIIFE = exports.walksScope = exports.transformJSXSpreadChild = exports.transformJSXExpressionContainer = exports.transformJSXText = exports.getJSXAttributeName = exports.getTag = exports.transformJSXMemberExpression = exports.checkIsComponent = exports.shouldTransformedToSlots = exports.isDirective = exports.createIdentifier = exports.KEEP_ALIVE = exports.FRAGMENT = exports.JSX_HELPER_KEY = void 0;\nconst t = __importStar(require(\"@babel/types\"));\nconst html_tags_1 = __importDefault(require(\"html-tags\"));\nconst svg_tags_1 = __importDefault(require(\"svg-tags\"));\nexports.JSX_HELPER_KEY = 'JSX_HELPER_KEY';\nexports.FRAGMENT = 'Fragment';\nexports.KEEP_ALIVE = 'KeepAlive';\n/**\n * create Identifier\n * @param path NodePath\n * @param state\n * @param name string\n * @returns MemberExpression\n */\nconst createIdentifier = (state, name) => state.get(name)();\nexports.createIdentifier = createIdentifier;\n/**\n * Checks if string is describing a directive\n * @param src string\n */\nconst isDirective = (src) => src.startsWith('v-')\n || (src.startsWith('v') && src.length >= 2 && src[1] >= 'A' && src[1] <= 'Z');\nexports.isDirective = isDirective;\n/**\n * Should transformed to slots\n * @param tag string\n * @returns boolean\n */\nconst shouldTransformedToSlots = (tag) => !(tag.endsWith(exports.FRAGMENT) || tag === exports.KEEP_ALIVE);\nexports.shouldTransformedToSlots = shouldTransformedToSlots;\n/**\n * Check if a Node is a component\n *\n * @param t\n * @param path JSXOpeningElement\n * @returns boolean\n */\nconst checkIsComponent = (path) => {\n const namePath = path.get('name');\n if (namePath.isJSXMemberExpression()) {\n return exports.shouldTransformedToSlots(namePath.node.property.name); // For withCtx\n }\n const tag = namePath.node.name;\n return exports.shouldTransformedToSlots(tag) && !html_tags_1.default.includes(tag) && !svg_tags_1.default.includes(tag);\n};\nexports.checkIsComponent = checkIsComponent;\n/**\n * Transform JSXMemberExpression to MemberExpression\n * @param path JSXMemberExpression\n * @returns MemberExpression\n */\nconst transformJSXMemberExpression = (path) => {\n const objectPath = path.node.object;\n const propertyPath = path.node.property;\n const transformedObject = t.isJSXMemberExpression(objectPath)\n ? exports.transformJSXMemberExpression(path.get('object'))\n : t.isJSXIdentifier(objectPath)\n ? t.identifier(objectPath.name)\n : t.nullLiteral();\n const transformedProperty = t.identifier(propertyPath.name);\n return t.memberExpression(transformedObject, transformedProperty);\n};\nexports.transformJSXMemberExpression = transformJSXMemberExpression;\n/**\n * Get tag (first attribute for h) from JSXOpeningElement\n * @param path JSXElement\n * @param state State\n * @returns Identifier | StringLiteral | MemberExpression | CallExpression\n */\nconst getTag = (path, state) => {\n var _a, _b;\n const namePath = path.get('openingElement').get('name');\n if (namePath.isJSXIdentifier()) {\n const { name } = namePath.node;\n if (!html_tags_1.default.includes(name) && !svg_tags_1.default.includes(name)) {\n return (name === exports.FRAGMENT\n ? exports.createIdentifier(state, exports.FRAGMENT)\n : path.scope.hasBinding(name)\n ? t.identifier(name)\n : ((_b = (_a = state.opts).isCustomElement) === null || _b === void 0 ? void 0 : _b.call(_a, name))\n ? t.stringLiteral(name)\n : t.callExpression(exports.createIdentifier(state, 'resolveComponent'), [t.stringLiteral(name)]));\n }\n return t.stringLiteral(name);\n }\n if (namePath.isJSXMemberExpression()) {\n return exports.transformJSXMemberExpression(namePath);\n }\n throw new Error(`getTag: ${namePath.type} is not supported`);\n};\nexports.getTag = getTag;\nconst getJSXAttributeName = (path) => {\n const nameNode = path.node.name;\n if (t.isJSXIdentifier(nameNode)) {\n return nameNode.name;\n }\n return `${nameNode.namespace.name}:${nameNode.name.name}`;\n};\nexports.getJSXAttributeName = getJSXAttributeName;\n/**\n * Transform JSXText to StringLiteral\n * @param path JSXText\n * @returns StringLiteral | null\n */\nconst transformJSXText = (path) => {\n const { node } = path;\n const lines = node.value.split(/\\r\\n|\\n|\\r/);\n let lastNonEmptyLine = 0;\n for (let i = 0; i < lines.length; i++) {\n if (lines[i].match(/[^ \\t]/)) {\n lastNonEmptyLine = i;\n }\n }\n let str = '';\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n const isFirstLine = i === 0;\n const isLastLine = i === lines.length - 1;\n const isLastNonEmptyLine = i === lastNonEmptyLine;\n // replace rendered whitespace tabs with spaces\n let trimmedLine = line.replace(/\\t/g, ' ');\n // trim whitespace touching a newline\n if (!isFirstLine) {\n trimmedLine = trimmedLine.replace(/^[ ]+/, '');\n }\n // trim whitespace touching an endline\n if (!isLastLine) {\n trimmedLine = trimmedLine.replace(/[ ]+$/, '');\n }\n if (trimmedLine) {\n if (!isLastNonEmptyLine) {\n trimmedLine += ' ';\n }\n str += trimmedLine;\n }\n }\n return str !== '' ? t.stringLiteral(str) : null;\n};\nexports.transformJSXText = transformJSXText;\n/**\n * Transform JSXExpressionContainer to Expression\n * @param path JSXExpressionContainer\n * @returns Expression\n */\nconst transformJSXExpressionContainer = (path) => path.get('expression').node;\nexports.transformJSXExpressionContainer = transformJSXExpressionContainer;\n/**\n * Transform JSXSpreadChild\n * @param path JSXSpreadChild\n * @returns SpreadElement\n */\nconst transformJSXSpreadChild = (path) => t.spreadElement(path.get('expression').node);\nexports.transformJSXSpreadChild = transformJSXSpreadChild;\nconst walksScope = (path, name, slotFlag) => {\n if (path.scope.hasBinding(name) && path.parentPath) {\n if (t.isJSXElement(path.parentPath.node)) {\n path.parentPath.setData('slotFlag', slotFlag);\n }\n exports.walksScope(path.parentPath, name, slotFlag);\n }\n};\nexports.walksScope = walksScope;\nconst buildIIFE = (path, children) => {\n const { parentPath } = path;\n if (t.isAssignmentExpression(parentPath)) {\n const { left } = parentPath.node;\n if (t.isIdentifier(left)) {\n return children.map((child) => {\n if (t.isIdentifier(child) && child.name === left.name) {\n const insertName = path.scope.generateUidIdentifier(child.name);\n parentPath.insertBefore(t.variableDeclaration('const', [\n t.variableDeclarator(insertName, t.callExpression(t.functionExpression(null, [], t.blockStatement([t.returnStatement(child)])), [])),\n ]));\n return insertName;\n }\n return child;\n });\n }\n }\n return children;\n};\nexports.buildIIFE = buildIIFE;\nconst onRE = /^on[^a-z]/;\nconst isOn = (key) => onRE.test(key);\nexports.isOn = isOn;\nconst mergeAsArray = (existing, incoming) => {\n if (t.isArrayExpression(existing.value)) {\n existing.value.elements.push(incoming.value);\n }\n else {\n existing.value = t.arrayExpression([\n existing.value,\n incoming.value,\n ]);\n }\n};\nconst dedupeProperties = (properties = [], mergeProps) => {\n if (!mergeProps) {\n return properties;\n }\n const knownProps = new Map();\n const deduped = [];\n properties.forEach((prop) => {\n if (t.isStringLiteral(prop.key)) {\n const { value: name } = prop.key;\n const existing = knownProps.get(name);\n if (existing) {\n if (name === 'style' || name === 'class' || name.startsWith('on')) {\n mergeAsArray(existing, prop);\n }\n }\n else {\n knownProps.set(name, prop);\n deduped.push(prop);\n }\n }\n else {\n // v-model target with variable\n deduped.push(prop);\n }\n });\n return deduped;\n};\nexports.dedupeProperties = dedupeProperties;\n/**\n * Check if an attribute value is constant\n * @param node\n * @returns boolean\n */\nconst isConstant = (node) => {\n if (t.isIdentifier(node)) {\n return node.name === 'undefined';\n }\n if (t.isArrayExpression(node)) {\n const { elements } = node;\n return elements.every((element) => element && exports.isConstant(element));\n }\n if (t.isObjectExpression(node)) {\n return node.properties.every((property) => exports.isConstant(property.value));\n }\n if (t.isLiteral(node)) {\n return true;\n }\n return false;\n};\nexports.isConstant = isConstant;\nconst transformJSXSpreadAttribute = (nodePath, path, mergeProps, args) => {\n const argument = path.get('argument');\n const properties = t.isObjectExpression(argument.node) ? argument.node.properties : undefined;\n if (!properties) {\n if (argument.isIdentifier()) {\n exports.walksScope(nodePath, argument.node.name, 2 /* DYNAMIC */);\n }\n args.push(mergeProps ? argument.node : t.spreadElement(argument.node));\n }\n else if (mergeProps) {\n args.push(t.objectExpression(properties));\n }\n else {\n args.push(...properties);\n }\n};\nexports.transformJSXSpreadAttribute = transformJSXSpreadAttribute;\n","'use strict';\n\nvar bind = require('function-bind');\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\nvar $max = GetIntrinsic('%Math.max%');\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = $reflectApply(bind, $call, arguments);\n\tif ($gOPD && $defineProperty) {\n\t\tvar desc = $gOPD(func, 'length');\n\t\tif (desc.configurable) {\n\t\t\t// original length, plus the receiver, minus any additional arguments (after the receiver)\n\t\t\t$defineProperty(\n\t\t\t\tfunc,\n\t\t\t\t'length',\n\t\t\t\t{ value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }\n\t\t\t);\n\t\t}\n\t}\n\treturn func;\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _node = _interopRequireDefault(require(\"./node\"));\n\nvar types = _interopRequireWildcard(require(\"./types\"));\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { \"default\": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj[\"default\"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _createForOfIteratorHelperLoose(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } it = o[Symbol.iterator](); return it.next.bind(it); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar Container = /*#__PURE__*/function (_Node) {\n _inheritsLoose(Container, _Node);\n\n function Container(opts) {\n var _this;\n\n _this = _Node.call(this, opts) || this;\n\n if (!_this.nodes) {\n _this.nodes = [];\n }\n\n return _this;\n }\n\n var _proto = Container.prototype;\n\n _proto.append = function append(selector) {\n selector.parent = this;\n this.nodes.push(selector);\n return this;\n };\n\n _proto.prepend = function prepend(selector) {\n selector.parent = this;\n this.nodes.unshift(selector);\n return this;\n };\n\n _proto.at = function at(index) {\n return this.nodes[index];\n };\n\n _proto.index = function index(child) {\n if (typeof child === 'number') {\n return child;\n }\n\n return this.nodes.indexOf(child);\n };\n\n _proto.removeChild = function removeChild(child) {\n child = this.index(child);\n this.at(child).parent = undefined;\n this.nodes.splice(child, 1);\n var index;\n\n for (var id in this.indexes) {\n index = this.indexes[id];\n\n if (index >= child) {\n this.indexes[id] = index - 1;\n }\n }\n\n return this;\n };\n\n _proto.removeAll = function removeAll() {\n for (var _iterator = _createForOfIteratorHelperLoose(this.nodes), _step; !(_step = _iterator()).done;) {\n var node = _step.value;\n node.parent = undefined;\n }\n\n this.nodes = [];\n return this;\n };\n\n _proto.empty = function empty() {\n return this.removeAll();\n };\n\n _proto.insertAfter = function insertAfter(oldNode, newNode) {\n newNode.parent = this;\n var oldIndex = this.index(oldNode);\n this.nodes.splice(oldIndex + 1, 0, newNode);\n newNode.parent = this;\n var index;\n\n for (var id in this.indexes) {\n index = this.indexes[id];\n\n if (oldIndex <= index) {\n this.indexes[id] = index + 1;\n }\n }\n\n return this;\n };\n\n _proto.insertBefore = function insertBefore(oldNode, newNode) {\n newNode.parent = this;\n var oldIndex = this.index(oldNode);\n this.nodes.splice(oldIndex, 0, newNode);\n newNode.parent = this;\n var index;\n\n for (var id in this.indexes) {\n index = this.indexes[id];\n\n if (index <= oldIndex) {\n this.indexes[id] = index + 1;\n }\n }\n\n return this;\n };\n\n _proto._findChildAtPosition = function _findChildAtPosition(line, col) {\n var found = undefined;\n this.each(function (node) {\n if (node.atPosition) {\n var foundChild = node.atPosition(line, col);\n\n if (foundChild) {\n found = foundChild;\n return false;\n }\n } else if (node.isAtPosition(line, col)) {\n found = node;\n return false;\n }\n });\n return found;\n }\n /**\n * Return the most specific node at the line and column number given.\n * The source location is based on the original parsed location, locations aren't\n * updated as selector nodes are mutated.\n * \n * Note that this location is relative to the location of the first character\n * of the selector, and not the location of the selector in the overall document\n * when used in conjunction with postcss.\n *\n * If not found, returns undefined.\n * @param {number} line The line number of the node to find. (1-based index)\n * @param {number} col The column number of the node to find. (1-based index)\n */\n ;\n\n _proto.atPosition = function atPosition(line, col) {\n if (this.isAtPosition(line, col)) {\n return this._findChildAtPosition(line, col) || this;\n } else {\n return undefined;\n }\n };\n\n _proto._inferEndPosition = function _inferEndPosition() {\n if (this.last && this.last.source && this.last.source.end) {\n this.source = this.source || {};\n this.source.end = this.source.end || {};\n Object.assign(this.source.end, this.last.source.end);\n }\n };\n\n _proto.each = function each(callback) {\n if (!this.lastEach) {\n this.lastEach = 0;\n }\n\n if (!this.indexes) {\n this.indexes = {};\n }\n\n this.lastEach++;\n var id = this.lastEach;\n this.indexes[id] = 0;\n\n if (!this.length) {\n return undefined;\n }\n\n var index, result;\n\n while (this.indexes[id] < this.length) {\n index = this.indexes[id];\n result = callback(this.at(index), index);\n\n if (result === false) {\n break;\n }\n\n this.indexes[id] += 1;\n }\n\n delete this.indexes[id];\n\n if (result === false) {\n return false;\n }\n };\n\n _proto.walk = function walk(callback) {\n return this.each(function (node, i) {\n var result = callback(node, i);\n\n if (result !== false && node.length) {\n result = node.walk(callback);\n }\n\n if (result === false) {\n return false;\n }\n });\n };\n\n _proto.walkAttributes = function walkAttributes(callback) {\n var _this2 = this;\n\n return this.walk(function (selector) {\n if (selector.type === types.ATTRIBUTE) {\n return callback.call(_this2, selector);\n }\n });\n };\n\n _proto.walkClasses = function walkClasses(callback) {\n var _this3 = this;\n\n return this.walk(function (selector) {\n if (selector.type === types.CLASS) {\n return callback.call(_this3, selector);\n }\n });\n };\n\n _proto.walkCombinators = function walkCombinators(callback) {\n var _this4 = this;\n\n return this.walk(function (selector) {\n if (selector.type === types.COMBINATOR) {\n return callback.call(_this4, selector);\n }\n });\n };\n\n _proto.walkComments = function walkComments(callback) {\n var _this5 = this;\n\n return this.walk(function (selector) {\n if (selector.type === types.COMMENT) {\n return callback.call(_this5, selector);\n }\n });\n };\n\n _proto.walkIds = function walkIds(callback) {\n var _this6 = this;\n\n return this.walk(function (selector) {\n if (selector.type === types.ID) {\n return callback.call(_this6, selector);\n }\n });\n };\n\n _proto.walkNesting = function walkNesting(callback) {\n var _this7 = this;\n\n return this.walk(function (selector) {\n if (selector.type === types.NESTING) {\n return callback.call(_this7, selector);\n }\n });\n };\n\n _proto.walkPseudos = function walkPseudos(callback) {\n var _this8 = this;\n\n return this.walk(function (selector) {\n if (selector.type === types.PSEUDO) {\n return callback.call(_this8, selector);\n }\n });\n };\n\n _proto.walkTags = function walkTags(callback) {\n var _this9 = this;\n\n return this.walk(function (selector) {\n if (selector.type === types.TAG) {\n return callback.call(_this9, selector);\n }\n });\n };\n\n _proto.walkUniversals = function walkUniversals(callback) {\n var _this10 = this;\n\n return this.walk(function (selector) {\n if (selector.type === types.UNIVERSAL) {\n return callback.call(_this10, selector);\n }\n });\n };\n\n _proto.split = function split(callback) {\n var _this11 = this;\n\n var current = [];\n return this.reduce(function (memo, node, index) {\n var split = callback.call(_this11, node);\n current.push(node);\n\n if (split) {\n memo.push(current);\n current = [];\n } else if (index === _this11.length - 1) {\n memo.push(current);\n }\n\n return memo;\n }, []);\n };\n\n _proto.map = function map(callback) {\n return this.nodes.map(callback);\n };\n\n _proto.reduce = function reduce(callback, memo) {\n return this.nodes.reduce(callback, memo);\n };\n\n _proto.every = function every(callback) {\n return this.nodes.every(callback);\n };\n\n _proto.some = function some(callback) {\n return this.nodes.some(callback);\n };\n\n _proto.filter = function filter(callback) {\n return this.nodes.filter(callback);\n };\n\n _proto.sort = function sort(callback) {\n return this.nodes.sort(callback);\n };\n\n _proto.toString = function toString() {\n return this.map(String).join('');\n };\n\n _createClass(Container, [{\n key: \"first\",\n get: function get() {\n return this.at(0);\n }\n }, {\n key: \"last\",\n get: function get() {\n return this.at(this.length - 1);\n }\n }, {\n key: \"length\",\n get: function get() {\n return this.nodes.length;\n }\n }]);\n\n return Container;\n}(_node[\"default\"]);\n\nexports[\"default\"] = Container;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _cssesc = _interopRequireDefault(require(\"cssesc\"));\n\nvar _util = require(\"../util\");\n\nvar _node = _interopRequireDefault(require(\"./node\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar Namespace = /*#__PURE__*/function (_Node) {\n _inheritsLoose(Namespace, _Node);\n\n function Namespace() {\n return _Node.apply(this, arguments) || this;\n }\n\n var _proto = Namespace.prototype;\n\n _proto.qualifiedName = function qualifiedName(value) {\n if (this.namespace) {\n return this.namespaceString + \"|\" + value;\n } else {\n return value;\n }\n };\n\n _proto.valueToString = function valueToString() {\n return this.qualifiedName(_Node.prototype.valueToString.call(this));\n };\n\n _createClass(Namespace, [{\n key: \"namespace\",\n get: function get() {\n return this._namespace;\n },\n set: function set(namespace) {\n if (namespace === true || namespace === \"*\" || namespace === \"&\") {\n this._namespace = namespace;\n\n if (this.raws) {\n delete this.raws.namespace;\n }\n\n return;\n }\n\n var escaped = (0, _cssesc[\"default\"])(namespace, {\n isIdentifier: true\n });\n this._namespace = namespace;\n\n if (escaped !== namespace) {\n (0, _util.ensureObject)(this, \"raws\");\n this.raws.namespace = escaped;\n } else if (this.raws) {\n delete this.raws.namespace;\n }\n }\n }, {\n key: \"ns\",\n get: function get() {\n return this._namespace;\n },\n set: function set(namespace) {\n this.namespace = namespace;\n }\n }, {\n key: \"namespaceString\",\n get: function get() {\n if (this.namespace) {\n var ns = this.stringifyProperty(\"namespace\");\n\n if (ns === true) {\n return '';\n } else {\n return ns;\n }\n } else {\n return '';\n }\n }\n }]);\n\n return Namespace;\n}(_node[\"default\"]);\n\nexports[\"default\"] = Namespace;\n;\nmodule.exports = exports.default;","var global = require('../internals/global');\nvar shared = require('../internals/shared');\nvar has = require('../internals/has');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar WellKnownSymbolsStore = shared('wks');\nvar Symbol = global.Symbol;\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n if (!has(WellKnownSymbolsStore, name) || !(NATIVE_SYMBOL || typeof WellKnownSymbolsStore[name] == 'string')) {\n if (NATIVE_SYMBOL && has(Symbol, name)) {\n WellKnownSymbolsStore[name] = Symbol[name];\n } else {\n WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name);\n }\n } return WellKnownSymbolsStore[name];\n};\n","var global = require('../internals/global');\nvar setGlobal = require('../internals/set-global');\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || setGlobal(SHARED, {});\n\nmodule.exports = store;\n","var global = require('../internals/global');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nmodule.exports = function (key, value) {\n try {\n createNonEnumerableProperty(global, key, value);\n } catch (error) {\n global[key] = value;\n } return value;\n};\n","var isObject = require('../internals/is-object');\n\nmodule.exports = function (it) {\n if (!isObject(it)) {\n throw TypeError(String(it) + ' is not an object');\n } return it;\n};\n","var id = 0;\nvar postfix = Math.random();\n\nmodule.exports = function (key) {\n return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id + postfix).toString(36);\n};\n","var path = require('../internals/path');\nvar global = require('../internals/global');\n\nvar aFunction = function (variable) {\n return typeof variable == 'function' ? variable : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global[namespace])\n : path[namespace] && path[namespace][method] || global[namespace] && global[namespace][method];\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = require('../internals/indexed-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (it) {\n return IndexedObject(requireObjectCoercible(it));\n};\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = is;\n\nvar _shallowEqual = require(\"../utils/shallowEqual\");\n\nvar _isType = require(\"./isType\");\n\nvar _isPlaceholderType = require(\"./isPlaceholderType\");\n\nvar _definitions = require(\"../definitions\");\n\nfunction is(type, node, opts) {\n if (!node) return false;\n const matches = (0, _isType.default)(node.type, type);\n\n if (!matches) {\n if (!opts && node.type === \"Placeholder\" && type in _definitions.FLIPPED_ALIAS_KEYS) {\n return (0, _isPlaceholderType.default)(node.expectedNode, type);\n }\n\n return false;\n }\n\n if (typeof opts === \"undefined\") {\n return true;\n } else {\n return (0, _shallowEqual.default)(node, opts);\n }\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"isIdentifierName\", {\n enumerable: true,\n get: function () {\n return _identifier.isIdentifierName;\n }\n});\nObject.defineProperty(exports, \"isIdentifierChar\", {\n enumerable: true,\n get: function () {\n return _identifier.isIdentifierChar;\n }\n});\nObject.defineProperty(exports, \"isIdentifierStart\", {\n enumerable: true,\n get: function () {\n return _identifier.isIdentifierStart;\n }\n});\nObject.defineProperty(exports, \"isReservedWord\", {\n enumerable: true,\n get: function () {\n return _keyword.isReservedWord;\n }\n});\nObject.defineProperty(exports, \"isStrictBindOnlyReservedWord\", {\n enumerable: true,\n get: function () {\n return _keyword.isStrictBindOnlyReservedWord;\n }\n});\nObject.defineProperty(exports, \"isStrictBindReservedWord\", {\n enumerable: true,\n get: function () {\n return _keyword.isStrictBindReservedWord;\n }\n});\nObject.defineProperty(exports, \"isStrictReservedWord\", {\n enumerable: true,\n get: function () {\n return _keyword.isStrictReservedWord;\n }\n});\nObject.defineProperty(exports, \"isKeyword\", {\n enumerable: true,\n get: function () {\n return _keyword.isKeyword;\n }\n});\n\nvar _identifier = require(\"./identifier\");\n\nvar _keyword = require(\"./keyword\");","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = getBindingIdentifiers;\n\nvar _generated = require(\"../validators/generated\");\n\nfunction getBindingIdentifiers(node, duplicates, outerOnly) {\n let search = [].concat(node);\n const ids = Object.create(null);\n\n while (search.length) {\n const id = search.shift();\n if (!id) continue;\n const keys = getBindingIdentifiers.keys[id.type];\n\n if ((0, _generated.isIdentifier)(id)) {\n if (duplicates) {\n const _ids = ids[id.name] = ids[id.name] || [];\n\n _ids.push(id);\n } else {\n ids[id.name] = id;\n }\n\n continue;\n }\n\n if ((0, _generated.isExportDeclaration)(id) && !(0, _generated.isExportAllDeclaration)(id)) {\n if ((0, _generated.isDeclaration)(id.declaration)) {\n search.push(id.declaration);\n }\n\n continue;\n }\n\n if (outerOnly) {\n if ((0, _generated.isFunctionDeclaration)(id)) {\n search.push(id.id);\n continue;\n }\n\n if ((0, _generated.isFunctionExpression)(id)) {\n continue;\n }\n }\n\n if (keys) {\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n\n if (id[key]) {\n search = search.concat(id[key]);\n }\n }\n }\n }\n\n return ids;\n}\n\ngetBindingIdentifiers.keys = {\n DeclareClass: [\"id\"],\n DeclareFunction: [\"id\"],\n DeclareModule: [\"id\"],\n DeclareVariable: [\"id\"],\n DeclareInterface: [\"id\"],\n DeclareTypeAlias: [\"id\"],\n DeclareOpaqueType: [\"id\"],\n InterfaceDeclaration: [\"id\"],\n TypeAlias: [\"id\"],\n OpaqueType: [\"id\"],\n CatchClause: [\"param\"],\n LabeledStatement: [\"label\"],\n UnaryExpression: [\"argument\"],\n AssignmentExpression: [\"left\"],\n ImportSpecifier: [\"local\"],\n ImportNamespaceSpecifier: [\"local\"],\n ImportDefaultSpecifier: [\"local\"],\n ImportDeclaration: [\"specifiers\"],\n ExportSpecifier: [\"exported\"],\n ExportNamespaceSpecifier: [\"exported\"],\n ExportDefaultSpecifier: [\"exported\"],\n FunctionDeclaration: [\"id\", \"params\"],\n FunctionExpression: [\"id\", \"params\"],\n ArrowFunctionExpression: [\"params\"],\n ObjectMethod: [\"params\"],\n ClassMethod: [\"params\"],\n ForInStatement: [\"left\"],\n ForOfStatement: [\"left\"],\n ClassDeclaration: [\"id\"],\n ClassExpression: [\"id\"],\n RestElement: [\"argument\"],\n UpdateExpression: [\"argument\"],\n ObjectProperty: [\"value\"],\n AssignmentPattern: [\"left\"],\n ArrayPattern: [\"elements\"],\n ObjectPattern: [\"properties\"],\n VariableDeclaration: [\"declarations\"],\n VariableDeclarator: [\"id\"]\n};","\r\nmodule.exports = function() { return function() {} }\r\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar callBind = require('./');\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n","'use strict';\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = require('has-symbols')();\n\nvar getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = require('function-bind');\nvar hasOwn = require('has');\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n","'use strict';\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = require('./shams');\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = Function.prototype.bind || implementation;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.skipAllButComputedKey = skipAllButComputedKey;\nexports.default = exports.environmentVisitor = void 0;\n\nvar _traverse = require(\"@babel/traverse\");\n\nvar _helperMemberExpressionToFunctions = require(\"@babel/helper-member-expression-to-functions\");\n\nvar _helperOptimiseCallExpression = require(\"@babel/helper-optimise-call-expression\");\n\nvar t = require(\"@babel/types\");\n\nfunction getPrototypeOfExpression(objectRef, isStatic, file, isPrivateMethod) {\n objectRef = t.cloneNode(objectRef);\n const targetRef = isStatic || isPrivateMethod ? objectRef : t.memberExpression(objectRef, t.identifier(\"prototype\"));\n return t.callExpression(file.addHelper(\"getPrototypeOf\"), [targetRef]);\n}\n\nfunction skipAllButComputedKey(path) {\n if (!path.node.computed) {\n path.skip();\n return;\n }\n\n const keys = t.VISITOR_KEYS[path.type];\n\n for (const key of keys) {\n if (key !== \"key\") path.skipKey(key);\n }\n}\n\nconst environmentVisitor = {\n [`${t.staticBlock ? \"StaticBlock|\" : \"\"}ClassPrivateProperty|TypeAnnotation`](path) {\n path.skip();\n },\n\n Function(path) {\n if (path.isMethod()) return;\n if (path.isArrowFunctionExpression()) return;\n path.skip();\n },\n\n \"Method|ClassProperty\"(path) {\n skipAllButComputedKey(path);\n }\n\n};\nexports.environmentVisitor = environmentVisitor;\n\nconst visitor = _traverse.default.visitors.merge([environmentVisitor, {\n Super(path, state) {\n const {\n node,\n parentPath\n } = path;\n if (!parentPath.isMemberExpression({\n object: node\n })) return;\n state.handle(parentPath);\n }\n\n}]);\n\nconst unshadowSuperBindingVisitor = _traverse.default.visitors.merge([environmentVisitor, {\n Scopable(path, {\n refName\n }) {\n const binding = path.scope.getOwnBinding(refName);\n\n if (binding && binding.identifier.name === refName) {\n path.scope.rename(refName);\n }\n }\n\n}]);\n\nconst specHandlers = {\n memoise(superMember, count) {\n const {\n scope,\n node\n } = superMember;\n const {\n computed,\n property\n } = node;\n\n if (!computed) {\n return;\n }\n\n const memo = scope.maybeGenerateMemoised(property);\n\n if (!memo) {\n return;\n }\n\n this.memoiser.set(property, memo, count);\n },\n\n prop(superMember) {\n const {\n computed,\n property\n } = superMember.node;\n\n if (this.memoiser.has(property)) {\n return t.cloneNode(this.memoiser.get(property));\n }\n\n if (computed) {\n return t.cloneNode(property);\n }\n\n return t.stringLiteral(property.name);\n },\n\n get(superMember) {\n return this._get(superMember, this._getThisRefs());\n },\n\n _get(superMember, thisRefs) {\n const proto = getPrototypeOfExpression(this.getObjectRef(), this.isStatic, this.file, this.isPrivateMethod);\n return t.callExpression(this.file.addHelper(\"get\"), [thisRefs.memo ? t.sequenceExpression([thisRefs.memo, proto]) : proto, this.prop(superMember), thisRefs.this]);\n },\n\n _getThisRefs() {\n if (!this.isDerivedConstructor) {\n return {\n this: t.thisExpression()\n };\n }\n\n const thisRef = this.scope.generateDeclaredUidIdentifier(\"thisSuper\");\n return {\n memo: t.assignmentExpression(\"=\", thisRef, t.thisExpression()),\n this: t.cloneNode(thisRef)\n };\n },\n\n set(superMember, value) {\n const thisRefs = this._getThisRefs();\n\n const proto = getPrototypeOfExpression(this.getObjectRef(), this.isStatic, this.file, this.isPrivateMethod);\n return t.callExpression(this.file.addHelper(\"set\"), [thisRefs.memo ? t.sequenceExpression([thisRefs.memo, proto]) : proto, this.prop(superMember), value, thisRefs.this, t.booleanLiteral(superMember.isInStrictMode())]);\n },\n\n destructureSet(superMember) {\n throw superMember.buildCodeFrameError(`Destructuring to a super field is not supported yet.`);\n },\n\n call(superMember, args) {\n const thisRefs = this._getThisRefs();\n\n return (0, _helperOptimiseCallExpression.default)(this._get(superMember, thisRefs), t.cloneNode(thisRefs.this), args, false);\n },\n\n optionalCall(superMember, args) {\n const thisRefs = this._getThisRefs();\n\n return (0, _helperOptimiseCallExpression.default)(this._get(superMember, thisRefs), t.cloneNode(thisRefs.this), args, true);\n }\n\n};\nconst looseHandlers = Object.assign({}, specHandlers, {\n prop(superMember) {\n const {\n property\n } = superMember.node;\n\n if (this.memoiser.has(property)) {\n return t.cloneNode(this.memoiser.get(property));\n }\n\n return t.cloneNode(property);\n },\n\n get(superMember) {\n const {\n isStatic,\n getSuperRef\n } = this;\n const {\n computed\n } = superMember.node;\n const prop = this.prop(superMember);\n let object;\n\n if (isStatic) {\n var _getSuperRef;\n\n object = (_getSuperRef = getSuperRef()) != null ? _getSuperRef : t.memberExpression(t.identifier(\"Function\"), t.identifier(\"prototype\"));\n } else {\n var _getSuperRef2;\n\n object = t.memberExpression((_getSuperRef2 = getSuperRef()) != null ? _getSuperRef2 : t.identifier(\"Object\"), t.identifier(\"prototype\"));\n }\n\n return t.memberExpression(object, prop, computed);\n },\n\n set(superMember, value) {\n const {\n computed\n } = superMember.node;\n const prop = this.prop(superMember);\n return t.assignmentExpression(\"=\", t.memberExpression(t.thisExpression(), prop, computed), value);\n },\n\n destructureSet(superMember) {\n const {\n computed\n } = superMember.node;\n const prop = this.prop(superMember);\n return t.memberExpression(t.thisExpression(), prop, computed);\n },\n\n call(superMember, args) {\n return (0, _helperOptimiseCallExpression.default)(this.get(superMember), t.thisExpression(), args, false);\n },\n\n optionalCall(superMember, args) {\n return (0, _helperOptimiseCallExpression.default)(this.get(superMember), t.thisExpression(), args, true);\n }\n\n});\n\nclass ReplaceSupers {\n constructor(opts) {\n var _opts$constantSuper;\n\n const path = opts.methodPath;\n this.methodPath = path;\n this.isDerivedConstructor = path.isClassMethod({\n kind: \"constructor\"\n }) && !!opts.superRef;\n this.isStatic = path.isObjectMethod() || path.node.static || (path.isStaticBlock == null ? void 0 : path.isStaticBlock());\n this.isPrivateMethod = path.isPrivate() && path.isMethod();\n this.file = opts.file;\n this.constantSuper = (_opts$constantSuper = opts.constantSuper) != null ? _opts$constantSuper : opts.isLoose;\n this.opts = opts;\n }\n\n getObjectRef() {\n return t.cloneNode(this.opts.objectRef || this.opts.getObjectRef());\n }\n\n getSuperRef() {\n if (this.opts.superRef) return t.cloneNode(this.opts.superRef);\n if (this.opts.getSuperRef) return t.cloneNode(this.opts.getSuperRef());\n }\n\n replace() {\n if (this.opts.refToPreserve) {\n this.methodPath.traverse(unshadowSuperBindingVisitor, {\n refName: this.opts.refToPreserve.name\n });\n }\n\n const handler = this.constantSuper ? looseHandlers : specHandlers;\n (0, _helperMemberExpressionToFunctions.default)(this.methodPath, visitor, Object.assign({\n file: this.file,\n scope: this.methodPath.scope,\n isDerivedConstructor: this.isDerivedConstructor,\n isStatic: this.isStatic,\n isPrivateMethod: this.isPrivateMethod,\n getObjectRef: this.getObjectRef.bind(this),\n getSuperRef: this.getSuperRef.bind(this)\n }, handler));\n }\n\n}\n\nexports.default = ReplaceSupers;","const compare = require('./compare')\nconst eq = (a, b, loose) => compare(a, b, loose) === 0\nmodule.exports = eq\n","const SemVer = require('../classes/semver')\nconst compareBuild = (a, b, loose) => {\n const versionA = new SemVer(a, loose)\n const versionB = new SemVer(b, loose)\n return versionA.compare(versionB) || versionA.compareBuild(versionB)\n}\nmodule.exports = compareBuild\n","const compare = require('./compare')\nconst lt = (a, b, loose) => compare(a, b, loose) < 0\nmodule.exports = lt\n","const compare = require('./compare')\nconst gte = (a, b, loose) => compare(a, b, loose) >= 0\nmodule.exports = gte\n","const compare = require('./compare')\nconst lte = (a, b, loose) => compare(a, b, loose) <= 0\nmodule.exports = lte\n","const SemVer = require('../classes/semver')\nconst Comparator = require('../classes/comparator')\nconst {ANY} = Comparator\nconst Range = require('../classes/range')\nconst satisfies = require('../functions/satisfies')\nconst gt = require('../functions/gt')\nconst lt = require('../functions/lt')\nconst lte = require('../functions/lte')\nconst gte = require('../functions/gte')\n\nconst outside = (version, range, hilo, options) => {\n version = new SemVer(version, options)\n range = new Range(range, options)\n\n let gtfn, ltefn, ltfn, comp, ecomp\n switch (hilo) {\n case '>':\n gtfn = gt\n ltefn = lte\n ltfn = lt\n comp = '>'\n ecomp = '>='\n break\n case '<':\n gtfn = lt\n ltefn = gte\n ltfn = gt\n comp = '<'\n ecomp = '<='\n break\n default:\n throw new TypeError('Must provide a hilo val of \"<\" or \">\"')\n }\n\n // If it satisfies the range it is not outside\n if (satisfies(version, range, options)) {\n return false\n }\n\n // From now on, variable terms are as if we're in \"gtr\" mode.\n // but note that everything is flipped for the \"ltr\" function.\n\n for (let i = 0; i < range.set.length; ++i) {\n const comparators = range.set[i]\n\n let high = null\n let low = null\n\n comparators.forEach((comparator) => {\n if (comparator.semver === ANY) {\n comparator = new Comparator('>=0.0.0')\n }\n high = high || comparator\n low = low || comparator\n if (gtfn(comparator.semver, high.semver, options)) {\n high = comparator\n } else if (ltfn(comparator.semver, low.semver, options)) {\n low = comparator\n }\n })\n\n // If the edge version comparator has a operator then our version\n // isn't outside it\n if (high.operator === comp || high.operator === ecomp) {\n return false\n }\n\n // If the lowest version comparator has an operator and our version\n // is less than it then it isn't higher than the range\n if ((!low.operator || low.operator === comp) &&\n ltefn(version, low.semver)) {\n return false\n } else if (low.operator === ecomp && ltfn(version, low.semver)) {\n return false\n }\n }\n return true\n}\n\nmodule.exports = outside\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.findConfigUpwards = findConfigUpwards;\nexports.findPackageData = findPackageData;\nexports.findRelativeConfig = findRelativeConfig;\nexports.findRootConfig = findRootConfig;\nexports.loadConfig = loadConfig;\nexports.resolveShowConfigPath = resolveShowConfigPath;\nexports.resolvePlugin = resolvePlugin;\nexports.resolvePreset = resolvePreset;\nexports.loadPlugin = loadPlugin;\nexports.loadPreset = loadPreset;\nexports.ROOT_CONFIG_FILENAMES = void 0;\n\nfunction findConfigUpwards(rootDir) {\n return null;\n}\n\nfunction* findPackageData(filepath) {\n return {\n filepath,\n directories: [],\n pkg: null,\n isPackage: false\n };\n}\n\nfunction* findRelativeConfig(pkgData, envName, caller) {\n return {\n config: null,\n ignore: null\n };\n}\n\nfunction* findRootConfig(dirname, envName, caller) {\n return null;\n}\n\nfunction* loadConfig(name, dirname, envName, caller) {\n throw new Error(`Cannot load ${name} relative to ${dirname} in a browser`);\n}\n\nfunction* resolveShowConfigPath(dirname) {\n return null;\n}\n\nconst ROOT_CONFIG_FILENAMES = [];\nexports.ROOT_CONFIG_FILENAMES = ROOT_CONFIG_FILENAMES;\n\nfunction resolvePlugin(name, dirname) {\n return null;\n}\n\nfunction resolvePreset(name, dirname) {\n return null;\n}\n\nfunction loadPlugin(name, dirname) {\n throw new Error(`Cannot load plugin ${name} relative to ${dirname} in a browser`);\n}\n\nfunction loadPreset(name, dirname) {\n throw new Error(`Cannot load preset ${name} relative to ${dirname} in a browser`);\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.createConfigItem = createConfigItem;\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function () {\n return _full.default;\n }\n});\nexports.createConfigItemAsync = exports.createConfigItemSync = exports.loadOptionsAsync = exports.loadOptionsSync = exports.loadOptions = exports.loadPartialConfigAsync = exports.loadPartialConfigSync = exports.loadPartialConfig = void 0;\n\nfunction _gensync() {\n const data = require(\"gensync\");\n\n _gensync = function () {\n return data;\n };\n\n return data;\n}\n\nvar _full = require(\"./full\");\n\nvar _partial = require(\"./partial\");\n\nvar _item = require(\"./item\");\n\nconst loadOptionsRunner = _gensync()(function* (opts) {\n var _config$options;\n\n const config = yield* (0, _full.default)(opts);\n return (_config$options = config == null ? void 0 : config.options) != null ? _config$options : null;\n});\n\nconst createConfigItemRunner = _gensync()(_item.createConfigItem);\n\nconst maybeErrback = runner => (opts, callback) => {\n if (callback === undefined && typeof opts === \"function\") {\n callback = opts;\n opts = undefined;\n }\n\n return callback ? runner.errback(opts, callback) : runner.sync(opts);\n};\n\nconst loadPartialConfig = maybeErrback(_partial.loadPartialConfig);\nexports.loadPartialConfig = loadPartialConfig;\nconst loadPartialConfigSync = _partial.loadPartialConfig.sync;\nexports.loadPartialConfigSync = loadPartialConfigSync;\nconst loadPartialConfigAsync = _partial.loadPartialConfig.async;\nexports.loadPartialConfigAsync = loadPartialConfigAsync;\nconst loadOptions = maybeErrback(loadOptionsRunner);\nexports.loadOptions = loadOptions;\nconst loadOptionsSync = loadOptionsRunner.sync;\nexports.loadOptionsSync = loadOptionsSync;\nconst loadOptionsAsync = loadOptionsRunner.async;\nexports.loadOptionsAsync = loadOptionsAsync;\nconst createConfigItemSync = createConfigItemRunner.sync;\nexports.createConfigItemSync = createConfigItemSync;\nconst createConfigItemAsync = createConfigItemRunner.async;\nexports.createConfigItemAsync = createConfigItemAsync;\n\nfunction createConfigItem(target, options, callback) {\n if (callback !== undefined) {\n return createConfigItemRunner.errback(target, options, callback);\n } else if (typeof options === \"function\") {\n return createConfigItemRunner.errback(target, undefined, callback);\n } else {\n return createConfigItemRunner.sync(target, options);\n }\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nclass Plugin {\n constructor(plugin, options, key) {\n this.key = void 0;\n this.manipulateOptions = void 0;\n this.post = void 0;\n this.pre = void 0;\n this.visitor = void 0;\n this.parserOverride = void 0;\n this.generatorOverride = void 0;\n this.options = void 0;\n this.key = plugin.name || key;\n this.manipulateOptions = plugin.manipulateOptions;\n this.post = plugin.post;\n this.pre = plugin.pre;\n this.visitor = plugin.visitor || {};\n this.parserOverride = plugin.parserOverride;\n this.generatorOverride = plugin.generatorOverride;\n this.options = options;\n }\n\n}\n\nexports.default = Plugin;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.createItemFromDescriptor = createItemFromDescriptor;\nexports.createConfigItem = createConfigItem;\nexports.getItemDescriptor = getItemDescriptor;\n\nfunction _path() {\n const data = require(\"path\");\n\n _path = function () {\n return data;\n };\n\n return data;\n}\n\nvar _configDescriptors = require(\"./config-descriptors\");\n\nfunction createItemFromDescriptor(desc) {\n return new ConfigItem(desc);\n}\n\nfunction* createConfigItem(value, {\n dirname = \".\",\n type\n} = {}) {\n const descriptor = yield* (0, _configDescriptors.createDescriptor)(value, _path().resolve(dirname), {\n type,\n alias: \"programmatic item\"\n });\n return createItemFromDescriptor(descriptor);\n}\n\nfunction getItemDescriptor(item) {\n if (item != null && item[CONFIG_ITEM_BRAND]) {\n return item._descriptor;\n }\n\n return undefined;\n}\n\nconst CONFIG_ITEM_BRAND = Symbol.for(\"@babel/core@7 - ConfigItem\");\n\nclass ConfigItem {\n constructor(descriptor) {\n this._descriptor = void 0;\n this[CONFIG_ITEM_BRAND] = true;\n this.value = void 0;\n this.options = void 0;\n this.dirname = void 0;\n this.name = void 0;\n this.file = void 0;\n this._descriptor = descriptor;\n Object.defineProperty(this, \"_descriptor\", {\n enumerable: false\n });\n Object.defineProperty(this, CONFIG_ITEM_BRAND, {\n enumerable: false\n });\n this.value = this._descriptor.value;\n this.options = this._descriptor.options;\n this.dirname = this._descriptor.dirname;\n this.name = this._descriptor.name;\n this.file = this._descriptor.file ? {\n request: this._descriptor.file.request,\n resolved: this._descriptor.file.resolved\n } : undefined;\n Object.freeze(this);\n }\n\n}\n\nObject.freeze(ConfigItem.prototype);","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.makeWeakCache = makeWeakCache;\nexports.makeWeakCacheSync = makeWeakCacheSync;\nexports.makeStrongCache = makeStrongCache;\nexports.makeStrongCacheSync = makeStrongCacheSync;\nexports.assertSimpleType = assertSimpleType;\n\nfunction _gensync() {\n const data = require(\"gensync\");\n\n _gensync = function () {\n return data;\n };\n\n return data;\n}\n\nvar _async = require(\"../gensync-utils/async\");\n\nvar _util = require(\"./util\");\n\nconst synchronize = gen => {\n return _gensync()(gen).sync;\n};\n\nfunction* genTrue() {\n return true;\n}\n\nfunction makeWeakCache(handler) {\n return makeCachedFunction(WeakMap, handler);\n}\n\nfunction makeWeakCacheSync(handler) {\n return synchronize(makeWeakCache(handler));\n}\n\nfunction makeStrongCache(handler) {\n return makeCachedFunction(Map, handler);\n}\n\nfunction makeStrongCacheSync(handler) {\n return synchronize(makeStrongCache(handler));\n}\n\nfunction makeCachedFunction(CallCache, handler) {\n const callCacheSync = new CallCache();\n const callCacheAsync = new CallCache();\n const futureCache = new CallCache();\n return function* cachedFunction(arg, data) {\n const asyncContext = yield* (0, _async.isAsync)();\n const callCache = asyncContext ? callCacheAsync : callCacheSync;\n const cached = yield* getCachedValueOrWait(asyncContext, callCache, futureCache, arg, data);\n if (cached.valid) return cached.value;\n const cache = new CacheConfigurator(data);\n const handlerResult = handler(arg, cache);\n let finishLock;\n let value;\n\n if ((0, _util.isIterableIterator)(handlerResult)) {\n const gen = handlerResult;\n value = yield* (0, _async.onFirstPause)(gen, () => {\n finishLock = setupAsyncLocks(cache, futureCache, arg);\n });\n } else {\n value = handlerResult;\n }\n\n updateFunctionCache(callCache, cache, arg, value);\n\n if (finishLock) {\n futureCache.delete(arg);\n finishLock.release(value);\n }\n\n return value;\n };\n}\n\nfunction* getCachedValue(cache, arg, data) {\n const cachedValue = cache.get(arg);\n\n if (cachedValue) {\n for (const {\n value,\n valid\n } of cachedValue) {\n if (yield* valid(data)) return {\n valid: true,\n value\n };\n }\n }\n\n return {\n valid: false,\n value: null\n };\n}\n\nfunction* getCachedValueOrWait(asyncContext, callCache, futureCache, arg, data) {\n const cached = yield* getCachedValue(callCache, arg, data);\n\n if (cached.valid) {\n return cached;\n }\n\n if (asyncContext) {\n const cached = yield* getCachedValue(futureCache, arg, data);\n\n if (cached.valid) {\n const value = yield* (0, _async.waitFor)(cached.value.promise);\n return {\n valid: true,\n value\n };\n }\n }\n\n return {\n valid: false,\n value: null\n };\n}\n\nfunction setupAsyncLocks(config, futureCache, arg) {\n const finishLock = new Lock();\n updateFunctionCache(futureCache, config, arg, finishLock);\n return finishLock;\n}\n\nfunction updateFunctionCache(cache, config, arg, value) {\n if (!config.configured()) config.forever();\n let cachedValue = cache.get(arg);\n config.deactivate();\n\n switch (config.mode()) {\n case \"forever\":\n cachedValue = [{\n value,\n valid: genTrue\n }];\n cache.set(arg, cachedValue);\n break;\n\n case \"invalidate\":\n cachedValue = [{\n value,\n valid: config.validator()\n }];\n cache.set(arg, cachedValue);\n break;\n\n case \"valid\":\n if (cachedValue) {\n cachedValue.push({\n value,\n valid: config.validator()\n });\n } else {\n cachedValue = [{\n value,\n valid: config.validator()\n }];\n cache.set(arg, cachedValue);\n }\n\n }\n}\n\nclass CacheConfigurator {\n constructor(data) {\n this._active = true;\n this._never = false;\n this._forever = false;\n this._invalidate = false;\n this._configured = false;\n this._pairs = [];\n this._data = void 0;\n this._data = data;\n }\n\n simple() {\n return makeSimpleConfigurator(this);\n }\n\n mode() {\n if (this._never) return \"never\";\n if (this._forever) return \"forever\";\n if (this._invalidate) return \"invalidate\";\n return \"valid\";\n }\n\n forever() {\n if (!this._active) {\n throw new Error(\"Cannot change caching after evaluation has completed.\");\n }\n\n if (this._never) {\n throw new Error(\"Caching has already been configured with .never()\");\n }\n\n this._forever = true;\n this._configured = true;\n }\n\n never() {\n if (!this._active) {\n throw new Error(\"Cannot change caching after evaluation has completed.\");\n }\n\n if (this._forever) {\n throw new Error(\"Caching has already been configured with .forever()\");\n }\n\n this._never = true;\n this._configured = true;\n }\n\n using(handler) {\n if (!this._active) {\n throw new Error(\"Cannot change caching after evaluation has completed.\");\n }\n\n if (this._never || this._forever) {\n throw new Error(\"Caching has already been configured with .never or .forever()\");\n }\n\n this._configured = true;\n const key = handler(this._data);\n const fn = (0, _async.maybeAsync)(handler, `You appear to be using an async cache handler, but Babel has been called synchronously`);\n\n if ((0, _async.isThenable)(key)) {\n return key.then(key => {\n this._pairs.push([key, fn]);\n\n return key;\n });\n }\n\n this._pairs.push([key, fn]);\n\n return key;\n }\n\n invalidate(handler) {\n this._invalidate = true;\n return this.using(handler);\n }\n\n validator() {\n const pairs = this._pairs;\n return function* (data) {\n for (const [key, fn] of pairs) {\n if (key !== (yield* fn(data))) return false;\n }\n\n return true;\n };\n }\n\n deactivate() {\n this._active = false;\n }\n\n configured() {\n return this._configured;\n }\n\n}\n\nfunction makeSimpleConfigurator(cache) {\n function cacheFn(val) {\n if (typeof val === \"boolean\") {\n if (val) cache.forever();else cache.never();\n return;\n }\n\n return cache.using(() => assertSimpleType(val()));\n }\n\n cacheFn.forever = () => cache.forever();\n\n cacheFn.never = () => cache.never();\n\n cacheFn.using = cb => cache.using(() => assertSimpleType(cb()));\n\n cacheFn.invalidate = cb => cache.invalidate(() => assertSimpleType(cb()));\n\n return cacheFn;\n}\n\nfunction assertSimpleType(value) {\n if ((0, _async.isThenable)(value)) {\n throw new Error(`You appear to be using an async cache handler, ` + `which your current version of Babel does not support. ` + `We may add support for this in the future, ` + `but if you're on the most recent version of @babel/core and still ` + `seeing this error, then you'll need to synchronously handle your caching logic.`);\n }\n\n if (value != null && typeof value !== \"string\" && typeof value !== \"boolean\" && typeof value !== \"number\") {\n throw new Error(\"Cache keys must be either string, boolean, number, null, or undefined.\");\n }\n\n return value;\n}\n\nclass Lock {\n constructor() {\n this.released = false;\n this.promise = void 0;\n this._resolve = void 0;\n this.promise = new Promise(resolve => {\n this._resolve = resolve;\n });\n }\n\n release(value) {\n this.released = true;\n\n this._resolve(value);\n }\n\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.validate = validate;\nexports.checkNoUnwrappedItemOptionPairs = checkNoUnwrappedItemOptionPairs;\nexports.assumptionsNames = void 0;\n\nvar _plugin = require(\"../plugin\");\n\nvar _removed = require(\"./removed\");\n\nvar _optionAssertions = require(\"./option-assertions\");\n\nconst ROOT_VALIDATORS = {\n cwd: _optionAssertions.assertString,\n root: _optionAssertions.assertString,\n rootMode: _optionAssertions.assertRootMode,\n configFile: _optionAssertions.assertConfigFileSearch,\n caller: _optionAssertions.assertCallerMetadata,\n filename: _optionAssertions.assertString,\n filenameRelative: _optionAssertions.assertString,\n code: _optionAssertions.assertBoolean,\n ast: _optionAssertions.assertBoolean,\n cloneInputAst: _optionAssertions.assertBoolean,\n envName: _optionAssertions.assertString\n};\nconst BABELRC_VALIDATORS = {\n babelrc: _optionAssertions.assertBoolean,\n babelrcRoots: _optionAssertions.assertBabelrcSearch\n};\nconst NONPRESET_VALIDATORS = {\n extends: _optionAssertions.assertString,\n ignore: _optionAssertions.assertIgnoreList,\n only: _optionAssertions.assertIgnoreList,\n targets: _optionAssertions.assertTargets,\n browserslistConfigFile: _optionAssertions.assertConfigFileSearch,\n browserslistEnv: _optionAssertions.assertString\n};\nconst COMMON_VALIDATORS = {\n inputSourceMap: _optionAssertions.assertInputSourceMap,\n presets: _optionAssertions.assertPluginList,\n plugins: _optionAssertions.assertPluginList,\n passPerPreset: _optionAssertions.assertBoolean,\n assumptions: _optionAssertions.assertAssumptions,\n env: assertEnvSet,\n overrides: assertOverridesList,\n test: _optionAssertions.assertConfigApplicableTest,\n include: _optionAssertions.assertConfigApplicableTest,\n exclude: _optionAssertions.assertConfigApplicableTest,\n retainLines: _optionAssertions.assertBoolean,\n comments: _optionAssertions.assertBoolean,\n shouldPrintComment: _optionAssertions.assertFunction,\n compact: _optionAssertions.assertCompact,\n minified: _optionAssertions.assertBoolean,\n auxiliaryCommentBefore: _optionAssertions.assertString,\n auxiliaryCommentAfter: _optionAssertions.assertString,\n sourceType: _optionAssertions.assertSourceType,\n wrapPluginVisitorMethod: _optionAssertions.assertFunction,\n highlightCode: _optionAssertions.assertBoolean,\n sourceMaps: _optionAssertions.assertSourceMaps,\n sourceMap: _optionAssertions.assertSourceMaps,\n sourceFileName: _optionAssertions.assertString,\n sourceRoot: _optionAssertions.assertString,\n parserOpts: _optionAssertions.assertObject,\n generatorOpts: _optionAssertions.assertObject\n};\n{\n Object.assign(COMMON_VALIDATORS, {\n getModuleId: _optionAssertions.assertFunction,\n moduleRoot: _optionAssertions.assertString,\n moduleIds: _optionAssertions.assertBoolean,\n moduleId: _optionAssertions.assertString\n });\n}\nconst assumptionsNames = new Set([\"arrayLikeIsIterable\", \"constantReexports\", \"constantSuper\", \"enumerableModuleMeta\", \"ignoreFunctionLength\", \"ignoreToPrimitiveHint\", \"iterableIsArray\", \"mutableTemplateObject\", \"noClassCalls\", \"noDocumentAll\", \"noNewArrows\", \"objectRestNoSymbols\", \"privateFieldsAsProperties\", \"pureGetters\", \"setClassMethods\", \"setComputedProperties\", \"setPublicClassFields\", \"setSpreadProperties\", \"skipForOfIteratorClosing\", \"superIsCallableConstructor\"]);\nexports.assumptionsNames = assumptionsNames;\n\nfunction getSource(loc) {\n return loc.type === \"root\" ? loc.source : getSource(loc.parent);\n}\n\nfunction validate(type, opts) {\n return validateNested({\n type: \"root\",\n source: type\n }, opts);\n}\n\nfunction validateNested(loc, opts) {\n const type = getSource(loc);\n assertNoDuplicateSourcemap(opts);\n Object.keys(opts).forEach(key => {\n const optLoc = {\n type: \"option\",\n name: key,\n parent: loc\n };\n\n if (type === \"preset\" && NONPRESET_VALIDATORS[key]) {\n throw new Error(`${(0, _optionAssertions.msg)(optLoc)} is not allowed in preset options`);\n }\n\n if (type !== \"arguments\" && ROOT_VALIDATORS[key]) {\n throw new Error(`${(0, _optionAssertions.msg)(optLoc)} is only allowed in root programmatic options`);\n }\n\n if (type !== \"arguments\" && type !== \"configfile\" && BABELRC_VALIDATORS[key]) {\n if (type === \"babelrcfile\" || type === \"extendsfile\") {\n throw new Error(`${(0, _optionAssertions.msg)(optLoc)} is not allowed in .babelrc or \"extends\"ed files, only in root programmatic options, ` + `or babel.config.js/config file options`);\n }\n\n throw new Error(`${(0, _optionAssertions.msg)(optLoc)} is only allowed in root programmatic options, or babel.config.js/config file options`);\n }\n\n const validator = COMMON_VALIDATORS[key] || NONPRESET_VALIDATORS[key] || BABELRC_VALIDATORS[key] || ROOT_VALIDATORS[key] || throwUnknownError;\n validator(optLoc, opts[key]);\n });\n return opts;\n}\n\nfunction throwUnknownError(loc) {\n const key = loc.name;\n\n if (_removed.default[key]) {\n const {\n message,\n version = 5\n } = _removed.default[key];\n throw new Error(`Using removed Babel ${version} option: ${(0, _optionAssertions.msg)(loc)} - ${message}`);\n } else {\n const unknownOptErr = new Error(`Unknown option: ${(0, _optionAssertions.msg)(loc)}. Check out https://babeljs.io/docs/en/babel-core/#options for more information about options.`);\n unknownOptErr.code = \"BABEL_UNKNOWN_OPTION\";\n throw unknownOptErr;\n }\n}\n\nfunction has(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\n\nfunction assertNoDuplicateSourcemap(opts) {\n if (has(opts, \"sourceMap\") && has(opts, \"sourceMaps\")) {\n throw new Error(\".sourceMap is an alias for .sourceMaps, cannot use both\");\n }\n}\n\nfunction assertEnvSet(loc, value) {\n if (loc.parent.type === \"env\") {\n throw new Error(`${(0, _optionAssertions.msg)(loc)} is not allowed inside of another .env block`);\n }\n\n const parent = loc.parent;\n const obj = (0, _optionAssertions.assertObject)(loc, value);\n\n if (obj) {\n for (const envName of Object.keys(obj)) {\n const env = (0, _optionAssertions.assertObject)((0, _optionAssertions.access)(loc, envName), obj[envName]);\n if (!env) continue;\n const envLoc = {\n type: \"env\",\n name: envName,\n parent\n };\n validateNested(envLoc, env);\n }\n }\n\n return obj;\n}\n\nfunction assertOverridesList(loc, value) {\n if (loc.parent.type === \"env\") {\n throw new Error(`${(0, _optionAssertions.msg)(loc)} is not allowed inside an .env block`);\n }\n\n if (loc.parent.type === \"overrides\") {\n throw new Error(`${(0, _optionAssertions.msg)(loc)} is not allowed inside an .overrides block`);\n }\n\n const parent = loc.parent;\n const arr = (0, _optionAssertions.assertArray)(loc, value);\n\n if (arr) {\n for (const [index, item] of arr.entries()) {\n const objLoc = (0, _optionAssertions.access)(loc, index);\n const env = (0, _optionAssertions.assertObject)(objLoc, item);\n if (!env) throw new Error(`${(0, _optionAssertions.msg)(objLoc)} must be an object`);\n const overridesLoc = {\n type: \"overrides\",\n index,\n parent\n };\n validateNested(overridesLoc, env);\n }\n }\n\n return arr;\n}\n\nfunction checkNoUnwrappedItemOptionPairs(items, index, type, e) {\n if (index === 0) return;\n const lastItem = items[index - 1];\n const thisItem = items[index];\n\n if (lastItem.file && lastItem.options === undefined && typeof thisItem.value === \"object\") {\n e.message += `\\n- Maybe you meant to use\\n` + `\"${type}\": [\\n [\"${lastItem.file.request}\", ${JSON.stringify(thisItem.value, undefined, 2)}]\\n]\\n` + `To be a valid ${type}, its name and options should be wrapped in a pair of brackets`;\n }\n}","'use strict'\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./dist/shared.cjs.prod.js')\n} else {\n module.exports = require('./dist/shared.cjs.js')\n}\n","'use strict'\n\nlet CssSyntaxError = require('./css-syntax-error')\nlet Declaration = require('./declaration')\nlet LazyResult = require('./lazy-result')\nlet Container = require('./container')\nlet Processor = require('./processor')\nlet stringify = require('./stringify')\nlet fromJSON = require('./fromJSON')\nlet Document = require('./document')\nlet Warning = require('./warning')\nlet Comment = require('./comment')\nlet AtRule = require('./at-rule')\nlet Result = require('./result.js')\nlet Input = require('./input')\nlet parse = require('./parse')\nlet list = require('./list')\nlet Rule = require('./rule')\nlet Root = require('./root')\nlet Node = require('./node')\n\nfunction postcss(...plugins) {\n if (plugins.length === 1 && Array.isArray(plugins[0])) {\n plugins = plugins[0]\n }\n return new Processor(plugins)\n}\n\npostcss.plugin = function plugin(name, initializer) {\n if (console && console.warn) {\n console.warn(\n name +\n ': postcss.plugin was deprecated. Migration guide:\\n' +\n 'https://evilmartians.com/chronicles/postcss-8-plugin-migration'\n )\n if (process.env.LANG && process.env.LANG.startsWith('cn')) {\n // istanbul ignore next\n console.warn(\n name +\n ': 里面 postcss.plugin 被弃用. 迁移指南:\\n' +\n 'https://www.w3ctech.com/topic/2226'\n )\n }\n }\n function creator(...args) {\n let transformer = initializer(...args)\n transformer.postcssPlugin = name\n transformer.postcssVersion = new Processor().version\n return transformer\n }\n\n let cache\n Object.defineProperty(creator, 'postcss', {\n get() {\n if (!cache) cache = creator()\n return cache\n }\n })\n\n creator.process = function (css, processOpts, pluginOpts) {\n return postcss([creator(pluginOpts)]).process(css, processOpts)\n }\n\n return creator\n}\n\npostcss.stringify = stringify\npostcss.parse = parse\npostcss.fromJSON = fromJSON\npostcss.list = list\n\npostcss.comment = defaults => new Comment(defaults)\npostcss.atRule = defaults => new AtRule(defaults)\npostcss.decl = defaults => new Declaration(defaults)\npostcss.rule = defaults => new Rule(defaults)\npostcss.root = defaults => new Root(defaults)\npostcss.document = defaults => new Document(defaults)\n\npostcss.CssSyntaxError = CssSyntaxError\npostcss.Declaration = Declaration\npostcss.Container = Container\npostcss.Document = Document\npostcss.Comment = Comment\npostcss.Warning = Warning\npostcss.AtRule = AtRule\npostcss.Result = Result\npostcss.Input = Input\npostcss.Rule = Rule\npostcss.Root = Root\npostcss.Node = Node\n\nLazyResult.registerPostcss(postcss)\n\nmodule.exports = postcss\npostcss.default = postcss\n","'use strict'\n\nlet { red, bold, gray, options: colorette } = require('colorette')\n\nlet terminalHighlight = require('./terminal-highlight')\n\nclass CssSyntaxError extends Error {\n constructor(message, line, column, source, file, plugin) {\n super(message)\n this.name = 'CssSyntaxError'\n this.reason = message\n\n if (file) {\n this.file = file\n }\n if (source) {\n this.source = source\n }\n if (plugin) {\n this.plugin = plugin\n }\n if (typeof line !== 'undefined' && typeof column !== 'undefined') {\n this.line = line\n this.column = column\n }\n\n this.setMessage()\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, CssSyntaxError)\n }\n }\n\n setMessage() {\n this.message = this.plugin ? this.plugin + ': ' : ''\n this.message += this.file ? this.file : ''\n if (typeof this.line !== 'undefined') {\n this.message += ':' + this.line + ':' + this.column\n }\n this.message += ': ' + this.reason\n }\n\n showSourceCode(color) {\n if (!this.source) return ''\n\n let css = this.source\n if (color == null) color = colorette.enabled\n if (terminalHighlight) {\n if (color) css = terminalHighlight(css)\n }\n\n let lines = css.split(/\\r?\\n/)\n let start = Math.max(this.line - 3, 0)\n let end = Math.min(this.line + 2, lines.length)\n\n let maxWidth = String(end).length\n\n let mark, aside\n if (color) {\n mark = text => bold(red(text))\n aside = text => gray(text)\n } else {\n mark = aside = str => str\n }\n\n return lines\n .slice(start, end)\n .map((line, index) => {\n let number = start + 1 + index\n let gutter = ' ' + (' ' + number).slice(-maxWidth) + ' | '\n if (number === this.line) {\n let spacing =\n aside(gutter.replace(/\\d/g, ' ')) +\n line.slice(0, this.column - 1).replace(/[^\\t]/g, ' ')\n return mark('>') + aside(gutter) + line + '\\n ' + spacing + mark('^')\n }\n return ' ' + aside(gutter) + line\n })\n .join('\\n')\n }\n\n toString() {\n let code = this.showSourceCode()\n if (code) {\n code = '\\n\\n' + code + '\\n'\n }\n return this.name + ': ' + this.message + code\n }\n}\n\nmodule.exports = CssSyntaxError\nCssSyntaxError.default = CssSyntaxError\n","'use strict'\n\nlet Stringifier = require('./stringifier')\n\nfunction stringify(node, builder) {\n let str = new Stringifier(builder)\n str.stringify(node)\n}\n\nmodule.exports = stringify\nstringify.default = stringify\n","'use strict'\n\nlet Container = require('./container')\n\nlet LazyResult, Processor\n\nclass Document extends Container {\n constructor(defaults) {\n // type needs to be passed to super, otherwise child roots won't be normalized correctly\n super({ type: 'document', ...defaults })\n\n if (!this.nodes) {\n this.nodes = []\n }\n }\n\n toResult(opts = {}) {\n let lazy = new LazyResult(new Processor(), this, opts)\n\n return lazy.stringify()\n }\n}\n\nDocument.registerLazyResult = dependant => {\n LazyResult = dependant\n}\n\nDocument.registerProcessor = dependant => {\n Processor = dependant\n}\n\nmodule.exports = Document\nDocument.default = Document\n","'use strict'\n\nlet Container = require('./container')\n\nclass AtRule extends Container {\n constructor(defaults) {\n super(defaults)\n this.type = 'atrule'\n }\n\n append(...children) {\n if (!this.proxyOf.nodes) this.nodes = []\n return super.append(...children)\n }\n\n prepend(...children) {\n if (!this.proxyOf.nodes) this.nodes = []\n return super.prepend(...children)\n }\n}\n\nmodule.exports = AtRule\nAtRule.default = AtRule\n\nContainer.registerAtRule(AtRule)\n","'use strict'\n\nlet Container = require('./container')\nlet list = require('./list')\n\nclass Rule extends Container {\n constructor(defaults) {\n super(defaults)\n this.type = 'rule'\n if (!this.nodes) this.nodes = []\n }\n\n get selectors() {\n return list.comma(this.selector)\n }\n\n set selectors(values) {\n let match = this.selector ? this.selector.match(/,\\s*/) : null\n let sep = match ? match[0] : ',' + this.raw('between', 'beforeOpen')\n this.selector = values.join(sep)\n }\n}\n\nmodule.exports = Rule\nRule.default = Rule\n\nContainer.registerRule(Rule)\n","'use strict'\n\nlet { SourceMapConsumer, SourceMapGenerator } = require('source-map-js')\nlet { fileURLToPath, pathToFileURL } = require('url')\nlet { resolve, isAbsolute } = require('path')\nlet { nanoid } = require('nanoid/non-secure')\n\nlet terminalHighlight = require('./terminal-highlight')\nlet CssSyntaxError = require('./css-syntax-error')\nlet PreviousMap = require('./previous-map')\n\nlet fromOffsetCache = Symbol('fromOffsetCache')\n\nlet sourceMapAvailable = Boolean(SourceMapConsumer && SourceMapGenerator)\nlet pathAvailable = Boolean(resolve && isAbsolute)\n\nclass Input {\n constructor(css, opts = {}) {\n if (\n css === null ||\n typeof css === 'undefined' ||\n (typeof css === 'object' && !css.toString)\n ) {\n throw new Error(`PostCSS received ${css} instead of CSS string`)\n }\n\n this.css = css.toString()\n\n if (this.css[0] === '\\uFEFF' || this.css[0] === '\\uFFFE') {\n this.hasBOM = true\n this.css = this.css.slice(1)\n } else {\n this.hasBOM = false\n }\n\n if (opts.from) {\n if (\n !pathAvailable ||\n /^\\w+:\\/\\//.test(opts.from) ||\n isAbsolute(opts.from)\n ) {\n this.file = opts.from\n } else {\n this.file = resolve(opts.from)\n }\n }\n\n if (pathAvailable && sourceMapAvailable) {\n let map = new PreviousMap(this.css, opts)\n if (map.text) {\n this.map = map\n let file = map.consumer().file\n if (!this.file && file) this.file = this.mapResolve(file)\n }\n }\n\n if (!this.file) {\n this.id = ''\n }\n if (this.map) this.map.file = this.from\n }\n\n fromOffset(offset) {\n let lastLine, lineToIndex\n if (!this[fromOffsetCache]) {\n let lines = this.css.split('\\n')\n lineToIndex = new Array(lines.length)\n let prevIndex = 0\n\n for (let i = 0, l = lines.length; i < l; i++) {\n lineToIndex[i] = prevIndex\n prevIndex += lines[i].length + 1\n }\n\n this[fromOffsetCache] = lineToIndex\n } else {\n lineToIndex = this[fromOffsetCache]\n }\n lastLine = lineToIndex[lineToIndex.length - 1]\n\n let min = 0\n if (offset >= lastLine) {\n min = lineToIndex.length - 1\n } else {\n let max = lineToIndex.length - 2\n let mid\n while (min < max) {\n mid = min + ((max - min) >> 1)\n if (offset < lineToIndex[mid]) {\n max = mid - 1\n } else if (offset >= lineToIndex[mid + 1]) {\n min = mid + 1\n } else {\n min = mid\n break\n }\n }\n }\n return {\n line: min + 1,\n col: offset - lineToIndex[min] + 1\n }\n }\n\n error(message, line, column, opts = {}) {\n let result\n if (!column) {\n let pos = this.fromOffset(line)\n line = pos.line\n column = pos.col\n }\n let origin = this.origin(line, column)\n if (origin) {\n result = new CssSyntaxError(\n message,\n origin.line,\n origin.column,\n origin.source,\n origin.file,\n opts.plugin\n )\n } else {\n result = new CssSyntaxError(\n message,\n line,\n column,\n this.css,\n this.file,\n opts.plugin\n )\n }\n\n result.input = { line, column, source: this.css }\n if (this.file) {\n if (pathToFileURL) {\n result.input.url = pathToFileURL(this.file).toString()\n }\n result.input.file = this.file\n }\n\n return result\n }\n\n origin(line, column) {\n if (!this.map) return false\n let consumer = this.map.consumer()\n\n let from = consumer.originalPositionFor({ line, column })\n if (!from.source) return false\n\n let fromUrl\n\n if (isAbsolute(from.source)) {\n fromUrl = pathToFileURL(from.source)\n } else {\n fromUrl = new URL(\n from.source,\n this.map.consumer().sourceRoot || pathToFileURL(this.map.mapFile)\n )\n }\n\n let result = {\n url: fromUrl.toString(),\n line: from.line,\n column: from.column\n }\n\n if (fromUrl.protocol === 'file:') {\n if (fileURLToPath) {\n result.file = fileURLToPath(fromUrl)\n } else {\n // istanbul ignore next\n throw new Error(`file: protocol is not available in this PostCSS build`)\n }\n }\n\n let source = consumer.sourceContentFor(from.source)\n if (source) result.source = source\n\n return result\n }\n\n mapResolve(file) {\n if (/^\\w+:\\/\\//.test(file)) {\n return file\n }\n return resolve(this.map.consumer().sourceRoot || this.map.root || '.', file)\n }\n\n get from() {\n return this.file || this.id\n }\n\n toJSON() {\n let json = {}\n for (let name of ['hasBOM', 'css', 'file', 'id']) {\n if (this[name] != null) {\n json[name] = this[name]\n }\n }\n if (this.map) {\n json.map = { ...this.map }\n if (json.map.consumerCache) {\n json.map.consumerCache = undefined\n }\n }\n return json\n }\n}\n\nmodule.exports = Input\nInput.default = Input\n\nif (terminalHighlight && terminalHighlight.registerInput) {\n terminalHighlight.registerInput(Input)\n}\n","\"use strict\";\n\nexports.__esModule = true;\nexports.stripComments = exports.ensureObject = exports.getProp = exports.unesc = void 0;\n\nvar _unesc = _interopRequireDefault(require(\"./unesc\"));\n\nexports.unesc = _unesc[\"default\"];\n\nvar _getProp = _interopRequireDefault(require(\"./getProp\"));\n\nexports.getProp = _getProp[\"default\"];\n\nvar _ensureObject = _interopRequireDefault(require(\"./ensureObject\"));\n\nexports.ensureObject = _ensureObject[\"default\"];\n\nvar _stripComments = _interopRequireDefault(require(\"./stripComments\"));\n\nexports.stripComments = _stripComments[\"default\"];\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }","/*! https://mths.be/cssesc v3.0.0 by @mathias */\n'use strict';\n\nvar object = {};\nvar hasOwnProperty = object.hasOwnProperty;\nvar merge = function merge(options, defaults) {\n\tif (!options) {\n\t\treturn defaults;\n\t}\n\tvar result = {};\n\tfor (var key in defaults) {\n\t\t// `if (defaults.hasOwnProperty(key) { … }` is not needed here, since\n\t\t// only recognized option names are used.\n\t\tresult[key] = hasOwnProperty.call(options, key) ? options[key] : defaults[key];\n\t}\n\treturn result;\n};\n\nvar regexAnySingleEscape = /[ -,\\.\\/:-@\\[-\\^`\\{-~]/;\nvar regexSingleEscape = /[ -,\\.\\/:-@\\[\\]\\^`\\{-~]/;\nvar regexAlwaysEscape = /['\"\\\\]/;\nvar regexExcessiveSpaces = /(^|\\\\+)?(\\\\[A-F0-9]{1,6})\\x20(?![a-fA-F0-9\\x20])/g;\n\n// https://mathiasbynens.be/notes/css-escapes#css\nvar cssesc = function cssesc(string, options) {\n\toptions = merge(options, cssesc.options);\n\tif (options.quotes != 'single' && options.quotes != 'double') {\n\t\toptions.quotes = 'single';\n\t}\n\tvar quote = options.quotes == 'double' ? '\"' : '\\'';\n\tvar isIdentifier = options.isIdentifier;\n\n\tvar firstChar = string.charAt(0);\n\tvar output = '';\n\tvar counter = 0;\n\tvar length = string.length;\n\twhile (counter < length) {\n\t\tvar character = string.charAt(counter++);\n\t\tvar codePoint = character.charCodeAt();\n\t\tvar value = void 0;\n\t\t// If it’s not a printable ASCII character…\n\t\tif (codePoint < 0x20 || codePoint > 0x7E) {\n\t\t\tif (codePoint >= 0xD800 && codePoint <= 0xDBFF && counter < length) {\n\t\t\t\t// It’s a high surrogate, and there is a next character.\n\t\t\t\tvar extra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) {\n\t\t\t\t\t// next character is low surrogate\n\t\t\t\t\tcodePoint = ((codePoint & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000;\n\t\t\t\t} else {\n\t\t\t\t\t// It’s an unmatched surrogate; only append this code unit, in case\n\t\t\t\t\t// the next code unit is the high surrogate of a surrogate pair.\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t}\n\t\t\tvalue = '\\\\' + codePoint.toString(16).toUpperCase() + ' ';\n\t\t} else {\n\t\t\tif (options.escapeEverything) {\n\t\t\t\tif (regexAnySingleEscape.test(character)) {\n\t\t\t\t\tvalue = '\\\\' + character;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = '\\\\' + codePoint.toString(16).toUpperCase() + ' ';\n\t\t\t\t}\n\t\t\t} else if (/[\\t\\n\\f\\r\\x0B]/.test(character)) {\n\t\t\t\tvalue = '\\\\' + codePoint.toString(16).toUpperCase() + ' ';\n\t\t\t} else if (character == '\\\\' || !isIdentifier && (character == '\"' && quote == character || character == '\\'' && quote == character) || isIdentifier && regexSingleEscape.test(character)) {\n\t\t\t\tvalue = '\\\\' + character;\n\t\t\t} else {\n\t\t\t\tvalue = character;\n\t\t\t}\n\t\t}\n\t\toutput += value;\n\t}\n\n\tif (isIdentifier) {\n\t\tif (/^-[-\\d]/.test(output)) {\n\t\t\toutput = '\\\\-' + output.slice(1);\n\t\t} else if (/\\d/.test(firstChar)) {\n\t\t\toutput = '\\\\3' + firstChar + ' ' + output.slice(1);\n\t\t}\n\t}\n\n\t// Remove spaces after `\\HEX` escapes that are not followed by a hex digit,\n\t// since they’re redundant. Note that this is only possible if the escape\n\t// sequence isn’t preceded by an odd number of backslashes.\n\toutput = output.replace(regexExcessiveSpaces, function ($0, $1, $2) {\n\t\tif ($1 && $1.length % 2) {\n\t\t\t// It’s not safe to remove the space, so don’t.\n\t\t\treturn $0;\n\t\t}\n\t\t// Strip the space.\n\t\treturn ($1 || '') + $2;\n\t});\n\n\tif (!isIdentifier && options.wrap) {\n\t\treturn quote + output + quote;\n\t}\n\treturn output;\n};\n\n// Expose default options (so they can be overridden globally).\ncssesc.options = {\n\t'escapeEverything': false,\n\t'isIdentifier': false,\n\t'quotes': 'single',\n\t'wrap': false\n};\n\ncssesc.version = '3.0.0';\n\nmodule.exports = cssesc;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.createClassFeaturePlugin = createClassFeaturePlugin;\nObject.defineProperty(exports, \"injectInitialization\", {\n enumerable: true,\n get: function () {\n return _misc.injectInitialization;\n }\n});\nObject.defineProperty(exports, \"enableFeature\", {\n enumerable: true,\n get: function () {\n return _features.enableFeature;\n }\n});\nObject.defineProperty(exports, \"FEATURES\", {\n enumerable: true,\n get: function () {\n return _features.FEATURES;\n }\n});\n\nvar _core = require(\"@babel/core\");\n\nvar _helperFunctionName = require(\"@babel/helper-function-name\");\n\nvar _helperSplitExportDeclaration = require(\"@babel/helper-split-export-declaration\");\n\nvar _fields = require(\"./fields\");\n\nvar _decorators = require(\"./decorators\");\n\nvar _misc = require(\"./misc\");\n\nvar _features = require(\"./features\");\n\nconst version = \"7.14.6\".split(\".\").reduce((v, x) => v * 1e5 + +x, 0);\nconst versionKey = \"@babel/plugin-class-features/version\";\n\nfunction createClassFeaturePlugin({\n name,\n feature,\n loose,\n manipulateOptions,\n api = {\n assumption: () => {}\n }\n}) {\n const setPublicClassFields = api.assumption(\"setPublicClassFields\");\n const privateFieldsAsProperties = api.assumption(\"privateFieldsAsProperties\");\n const constantSuper = api.assumption(\"constantSuper\");\n const noDocumentAll = api.assumption(\"noDocumentAll\");\n\n if (loose === true) {\n const explicit = [];\n\n if (setPublicClassFields !== undefined) {\n explicit.push(`\"setPublicClassFields\"`);\n }\n\n if (privateFieldsAsProperties !== undefined) {\n explicit.push(`\"privateFieldsAsProperties\"`);\n }\n\n if (explicit.length !== 0) {\n console.warn(`[${name}]: You are using the \"loose: true\" option and you are` + ` explicitly setting a value for the ${explicit.join(\" and \")}` + ` assumption${explicit.length > 1 ? \"s\" : \"\"}. The \"loose\" option` + ` can cause incompatibilities with the other class features` + ` plugins, so it's recommended that you replace it with the` + ` following top-level option:\\n` + `\\t\"assumptions\": {\\n` + `\\t\\t\"setPublicClassFields\": true,\\n` + `\\t\\t\"privateFieldsAsProperties\": true\\n` + `\\t}`);\n }\n }\n\n return {\n name,\n manipulateOptions,\n\n pre() {\n (0, _features.enableFeature)(this.file, feature, loose);\n\n if (!this.file.get(versionKey) || this.file.get(versionKey) < version) {\n this.file.set(versionKey, version);\n }\n },\n\n visitor: {\n Class(path, state) {\n if (this.file.get(versionKey) !== version) return;\n (0, _features.verifyUsedFeatures)(path, this.file);\n const loose = (0, _features.isLoose)(this.file, feature);\n let constructor;\n let isDecorated = (0, _decorators.hasOwnDecorators)(path.node);\n const props = [];\n const elements = [];\n const computedPaths = [];\n const privateNames = new Set();\n const body = path.get(\"body\");\n\n for (const path of body.get(\"body\")) {\n (0, _features.verifyUsedFeatures)(path, this.file);\n\n if (path.node.computed) {\n computedPaths.push(path);\n }\n\n if (path.isPrivate()) {\n const {\n name\n } = path.node.key.id;\n const getName = `get ${name}`;\n const setName = `set ${name}`;\n\n if (path.node.kind === \"get\") {\n if (privateNames.has(getName) || privateNames.has(name) && !privateNames.has(setName)) {\n throw path.buildCodeFrameError(\"Duplicate private field\");\n }\n\n privateNames.add(getName).add(name);\n } else if (path.node.kind === \"set\") {\n if (privateNames.has(setName) || privateNames.has(name) && !privateNames.has(getName)) {\n throw path.buildCodeFrameError(\"Duplicate private field\");\n }\n\n privateNames.add(setName).add(name);\n } else {\n if (privateNames.has(name) && !privateNames.has(getName) && !privateNames.has(setName) || privateNames.has(name) && (privateNames.has(getName) || privateNames.has(setName))) {\n throw path.buildCodeFrameError(\"Duplicate private field\");\n }\n\n privateNames.add(name);\n }\n }\n\n if (path.isClassMethod({\n kind: \"constructor\"\n })) {\n constructor = path;\n } else {\n elements.push(path);\n\n if (path.isProperty() || path.isPrivate() || path.isStaticBlock != null && path.isStaticBlock()) {\n props.push(path);\n }\n }\n\n if (!isDecorated) isDecorated = (0, _decorators.hasOwnDecorators)(path.node);\n }\n\n if (!props.length && !isDecorated) return;\n const innerBinding = path.node.id;\n let ref;\n\n if (!innerBinding || path.isClassExpression()) {\n (0, _helperFunctionName.default)(path);\n ref = path.scope.generateUidIdentifier(\"class\");\n } else {\n ref = _core.types.cloneNode(path.node.id);\n }\n\n const privateNamesMap = (0, _fields.buildPrivateNamesMap)(props);\n const privateNamesNodes = (0, _fields.buildPrivateNamesNodes)(privateNamesMap, privateFieldsAsProperties != null ? privateFieldsAsProperties : loose, state);\n (0, _fields.transformPrivateNamesUsage)(ref, path, privateNamesMap, {\n privateFieldsAsProperties: privateFieldsAsProperties != null ? privateFieldsAsProperties : loose,\n noDocumentAll\n }, state);\n let keysNodes, staticNodes, pureStaticNodes, instanceNodes, wrapClass;\n\n if (isDecorated) {\n staticNodes = pureStaticNodes = keysNodes = [];\n ({\n instanceNodes,\n wrapClass\n } = (0, _decorators.buildDecoratedClass)(ref, path, elements, this.file));\n } else {\n keysNodes = (0, _misc.extractComputedKeys)(ref, path, computedPaths, this.file);\n ({\n staticNodes,\n pureStaticNodes,\n instanceNodes,\n wrapClass\n } = (0, _fields.buildFieldsInitNodes)(ref, path.node.superClass, props, privateNamesMap, state, setPublicClassFields != null ? setPublicClassFields : loose, privateFieldsAsProperties != null ? privateFieldsAsProperties : loose, constantSuper != null ? constantSuper : loose, innerBinding));\n }\n\n if (instanceNodes.length > 0) {\n (0, _misc.injectInitialization)(path, constructor, instanceNodes, (referenceVisitor, state) => {\n if (isDecorated) return;\n\n for (const prop of props) {\n if (prop.node.static) continue;\n prop.traverse(referenceVisitor, state);\n }\n });\n }\n\n path = wrapClass(path);\n path.insertBefore([...privateNamesNodes, ...keysNodes]);\n\n if (staticNodes.length > 0) {\n path.insertAfter(staticNodes);\n }\n\n if (pureStaticNodes.length > 0) {\n path.find(parent => parent.isStatement() || parent.isDeclaration()).insertAfter(pureStaticNodes);\n }\n },\n\n PrivateName(path) {\n if (this.file.get(versionKey) !== version || path.parentPath.isPrivate({\n key: path.node\n })) {\n return;\n }\n\n throw path.buildCodeFrameError(`Unknown PrivateName \"${path}\"`);\n },\n\n ExportDefaultDeclaration(path) {\n if (this.file.get(versionKey) !== version) return;\n const decl = path.get(\"declaration\");\n\n if (decl.isClassDeclaration() && (0, _decorators.hasDecorators)(decl.node)) {\n if (decl.node.id) {\n (0, _helperSplitExportDeclaration.default)(path);\n } else {\n decl.node.type = \"ClassExpression\";\n }\n }\n }\n\n }\n };\n}","const numeric = /^[0-9]+$/\nconst compareIdentifiers = (a, b) => {\n const anum = numeric.test(a)\n const bnum = numeric.test(b)\n\n if (anum && bnum) {\n a = +a\n b = +b\n }\n\n return a === b ? 0\n : (anum && !bnum) ? -1\n : (bnum && !anum) ? 1\n : a < b ? -1\n : 1\n}\n\nconst rcompareIdentifiers = (a, b) => compareIdentifiers(b, a)\n\nmodule.exports = {\n compareIdentifiers,\n rcompareIdentifiers\n}\n","(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n\ttypeof define === 'function' && define.amd ? define(['exports'], factory) :\n\t(global = global || self, factory(global.estreeWalker = {}));\n}(this, (function (exports) { 'use strict';\n\n\t// @ts-check\n\t/** @typedef { import('estree').BaseNode} BaseNode */\n\n\t/** @typedef {{\n\t\tskip: () => void;\n\t\tremove: () => void;\n\t\treplace: (node: BaseNode) => void;\n\t}} WalkerContext */\n\n\tclass WalkerBase {\n\t\tconstructor() {\n\t\t\t/** @type {boolean} */\n\t\t\tthis.should_skip = false;\n\n\t\t\t/** @type {boolean} */\n\t\t\tthis.should_remove = false;\n\n\t\t\t/** @type {BaseNode | null} */\n\t\t\tthis.replacement = null;\n\n\t\t\t/** @type {WalkerContext} */\n\t\t\tthis.context = {\n\t\t\t\tskip: () => (this.should_skip = true),\n\t\t\t\tremove: () => (this.should_remove = true),\n\t\t\t\treplace: (node) => (this.replacement = node)\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t *\n\t\t * @param {any} parent\n\t\t * @param {string} prop\n\t\t * @param {number} index\n\t\t * @param {BaseNode} node\n\t\t */\n\t\treplace(parent, prop, index, node) {\n\t\t\tif (parent) {\n\t\t\t\tif (index !== null) {\n\t\t\t\t\tparent[prop][index] = node;\n\t\t\t\t} else {\n\t\t\t\t\tparent[prop] = node;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t *\n\t\t * @param {any} parent\n\t\t * @param {string} prop\n\t\t * @param {number} index\n\t\t */\n\t\tremove(parent, prop, index) {\n\t\t\tif (parent) {\n\t\t\t\tif (index !== null) {\n\t\t\t\t\tparent[prop].splice(index, 1);\n\t\t\t\t} else {\n\t\t\t\t\tdelete parent[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// @ts-check\n\n\t/** @typedef { import('estree').BaseNode} BaseNode */\n\t/** @typedef { import('./walker.js').WalkerContext} WalkerContext */\n\n\t/** @typedef {(\n\t * this: WalkerContext,\n\t * node: BaseNode,\n\t * parent: BaseNode,\n\t * key: string,\n\t * index: number\n\t * ) => void} SyncHandler */\n\n\tclass SyncWalker extends WalkerBase {\n\t\t/**\n\t\t *\n\t\t * @param {SyncHandler} enter\n\t\t * @param {SyncHandler} leave\n\t\t */\n\t\tconstructor(enter, leave) {\n\t\t\tsuper();\n\n\t\t\t/** @type {SyncHandler} */\n\t\t\tthis.enter = enter;\n\n\t\t\t/** @type {SyncHandler} */\n\t\t\tthis.leave = leave;\n\t\t}\n\n\t\t/**\n\t\t *\n\t\t * @param {BaseNode} node\n\t\t * @param {BaseNode} parent\n\t\t * @param {string} [prop]\n\t\t * @param {number} [index]\n\t\t * @returns {BaseNode}\n\t\t */\n\t\tvisit(node, parent, prop, index) {\n\t\t\tif (node) {\n\t\t\t\tif (this.enter) {\n\t\t\t\t\tconst _should_skip = this.should_skip;\n\t\t\t\t\tconst _should_remove = this.should_remove;\n\t\t\t\t\tconst _replacement = this.replacement;\n\t\t\t\t\tthis.should_skip = false;\n\t\t\t\t\tthis.should_remove = false;\n\t\t\t\t\tthis.replacement = null;\n\n\t\t\t\t\tthis.enter.call(this.context, node, parent, prop, index);\n\n\t\t\t\t\tif (this.replacement) {\n\t\t\t\t\t\tnode = this.replacement;\n\t\t\t\t\t\tthis.replace(parent, prop, index, node);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.should_remove) {\n\t\t\t\t\t\tthis.remove(parent, prop, index);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst skipped = this.should_skip;\n\t\t\t\t\tconst removed = this.should_remove;\n\n\t\t\t\t\tthis.should_skip = _should_skip;\n\t\t\t\t\tthis.should_remove = _should_remove;\n\t\t\t\t\tthis.replacement = _replacement;\n\n\t\t\t\t\tif (skipped) return node;\n\t\t\t\t\tif (removed) return null;\n\t\t\t\t}\n\n\t\t\t\tfor (const key in node) {\n\t\t\t\t\tconst value = node[key];\n\n\t\t\t\t\tif (typeof value !== \"object\") {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else if (Array.isArray(value)) {\n\t\t\t\t\t\tfor (let i = 0; i < value.length; i += 1) {\n\t\t\t\t\t\t\tif (value[i] !== null && typeof value[i].type === 'string') {\n\t\t\t\t\t\t\t\tif (!this.visit(value[i], node, key, i)) {\n\t\t\t\t\t\t\t\t\t// removed\n\t\t\t\t\t\t\t\t\ti--;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (value !== null && typeof value.type === \"string\") {\n\t\t\t\t\t\tthis.visit(value, node, key, null);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (this.leave) {\n\t\t\t\t\tconst _replacement = this.replacement;\n\t\t\t\t\tconst _should_remove = this.should_remove;\n\t\t\t\t\tthis.replacement = null;\n\t\t\t\t\tthis.should_remove = false;\n\n\t\t\t\t\tthis.leave.call(this.context, node, parent, prop, index);\n\n\t\t\t\t\tif (this.replacement) {\n\t\t\t\t\t\tnode = this.replacement;\n\t\t\t\t\t\tthis.replace(parent, prop, index, node);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.should_remove) {\n\t\t\t\t\t\tthis.remove(parent, prop, index);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst removed = this.should_remove;\n\n\t\t\t\t\tthis.replacement = _replacement;\n\t\t\t\t\tthis.should_remove = _should_remove;\n\n\t\t\t\t\tif (removed) return null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn node;\n\t\t}\n\t}\n\n\t// @ts-check\n\n\t/** @typedef { import('estree').BaseNode} BaseNode */\n\t/** @typedef { import('./walker').WalkerContext} WalkerContext */\n\n\t/** @typedef {(\n\t * this: WalkerContext,\n\t * node: BaseNode,\n\t * parent: BaseNode,\n\t * key: string,\n\t * index: number\n\t * ) => Promise} AsyncHandler */\n\n\tclass AsyncWalker extends WalkerBase {\n\t\t/**\n\t\t *\n\t\t * @param {AsyncHandler} enter\n\t\t * @param {AsyncHandler} leave\n\t\t */\n\t\tconstructor(enter, leave) {\n\t\t\tsuper();\n\n\t\t\t/** @type {AsyncHandler} */\n\t\t\tthis.enter = enter;\n\n\t\t\t/** @type {AsyncHandler} */\n\t\t\tthis.leave = leave;\n\t\t}\n\n\t\t/**\n\t\t *\n\t\t * @param {BaseNode} node\n\t\t * @param {BaseNode} parent\n\t\t * @param {string} [prop]\n\t\t * @param {number} [index]\n\t\t * @returns {Promise}\n\t\t */\n\t\tasync visit(node, parent, prop, index) {\n\t\t\tif (node) {\n\t\t\t\tif (this.enter) {\n\t\t\t\t\tconst _should_skip = this.should_skip;\n\t\t\t\t\tconst _should_remove = this.should_remove;\n\t\t\t\t\tconst _replacement = this.replacement;\n\t\t\t\t\tthis.should_skip = false;\n\t\t\t\t\tthis.should_remove = false;\n\t\t\t\t\tthis.replacement = null;\n\n\t\t\t\t\tawait this.enter.call(this.context, node, parent, prop, index);\n\n\t\t\t\t\tif (this.replacement) {\n\t\t\t\t\t\tnode = this.replacement;\n\t\t\t\t\t\tthis.replace(parent, prop, index, node);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.should_remove) {\n\t\t\t\t\t\tthis.remove(parent, prop, index);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst skipped = this.should_skip;\n\t\t\t\t\tconst removed = this.should_remove;\n\n\t\t\t\t\tthis.should_skip = _should_skip;\n\t\t\t\t\tthis.should_remove = _should_remove;\n\t\t\t\t\tthis.replacement = _replacement;\n\n\t\t\t\t\tif (skipped) return node;\n\t\t\t\t\tif (removed) return null;\n\t\t\t\t}\n\n\t\t\t\tfor (const key in node) {\n\t\t\t\t\tconst value = node[key];\n\n\t\t\t\t\tif (typeof value !== \"object\") {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else if (Array.isArray(value)) {\n\t\t\t\t\t\tfor (let i = 0; i < value.length; i += 1) {\n\t\t\t\t\t\t\tif (value[i] !== null && typeof value[i].type === 'string') {\n\t\t\t\t\t\t\t\tif (!(await this.visit(value[i], node, key, i))) {\n\t\t\t\t\t\t\t\t\t// removed\n\t\t\t\t\t\t\t\t\ti--;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (value !== null && typeof value.type === \"string\") {\n\t\t\t\t\t\tawait this.visit(value, node, key, null);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (this.leave) {\n\t\t\t\t\tconst _replacement = this.replacement;\n\t\t\t\t\tconst _should_remove = this.should_remove;\n\t\t\t\t\tthis.replacement = null;\n\t\t\t\t\tthis.should_remove = false;\n\n\t\t\t\t\tawait this.leave.call(this.context, node, parent, prop, index);\n\n\t\t\t\t\tif (this.replacement) {\n\t\t\t\t\t\tnode = this.replacement;\n\t\t\t\t\t\tthis.replace(parent, prop, index, node);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.should_remove) {\n\t\t\t\t\t\tthis.remove(parent, prop, index);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst removed = this.should_remove;\n\n\t\t\t\t\tthis.replacement = _replacement;\n\t\t\t\t\tthis.should_remove = _should_remove;\n\n\t\t\t\t\tif (removed) return null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn node;\n\t\t}\n\t}\n\n\t// @ts-check\n\n\t/** @typedef { import('estree').BaseNode} BaseNode */\n\t/** @typedef { import('./sync.js').SyncHandler} SyncHandler */\n\t/** @typedef { import('./async.js').AsyncHandler} AsyncHandler */\n\n\t/**\n\t *\n\t * @param {BaseNode} ast\n\t * @param {{\n\t * enter?: SyncHandler\n\t * leave?: SyncHandler\n\t * }} walker\n\t * @returns {BaseNode}\n\t */\n\tfunction walk(ast, { enter, leave }) {\n\t\tconst instance = new SyncWalker(enter, leave);\n\t\treturn instance.visit(ast, null);\n\t}\n\n\t/**\n\t *\n\t * @param {BaseNode} ast\n\t * @param {{\n\t * enter?: AsyncHandler\n\t * leave?: AsyncHandler\n\t * }} walker\n\t * @returns {Promise}\n\t */\n\tasync function asyncWalk(ast, { enter, leave }) {\n\t\tconst instance = new AsyncWalker(enter, leave);\n\t\treturn await instance.visit(ast, null);\n\t}\n\n\texports.asyncWalk = asyncWalk;\n\texports.walk = walk;\n\n\tObject.defineProperty(exports, '__esModule', { value: true });\n\n})));\n","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _processor = _interopRequireDefault(require(\"./processor\"));\n\nvar selectors = _interopRequireWildcard(require(\"./selectors\"));\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { \"default\": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj[\"default\"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nvar parser = function parser(processor) {\n return new _processor[\"default\"](processor);\n};\n\nObject.assign(parser, selectors);\ndelete parser.__esModule;\nvar _default = parser;\nexports[\"default\"] = _default;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _container = _interopRequireDefault(require(\"./container\"));\n\nvar _types = require(\"./types\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar Root = /*#__PURE__*/function (_Container) {\n _inheritsLoose(Root, _Container);\n\n function Root(opts) {\n var _this;\n\n _this = _Container.call(this, opts) || this;\n _this.type = _types.ROOT;\n return _this;\n }\n\n var _proto = Root.prototype;\n\n _proto.toString = function toString() {\n var str = this.reduce(function (memo, selector) {\n memo.push(String(selector));\n return memo;\n }, []).join(',');\n return this.trailingComma ? str + ',' : str;\n };\n\n _proto.error = function error(message, options) {\n if (this._error) {\n return this._error(message, options);\n } else {\n return new Error(message);\n }\n };\n\n _createClass(Root, [{\n key: \"errorGenerator\",\n set: function set(handler) {\n this._error = handler;\n }\n }]);\n\n return Root;\n}(_container[\"default\"]);\n\nexports[\"default\"] = Root;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = unesc;\n\n// Many thanks for this post which made this migration much easier.\n// https://mathiasbynens.be/notes/css-escapes\n\n/**\n * \n * @param {string} str \n * @returns {[string, number]|undefined}\n */\nfunction gobbleHex(str) {\n var lower = str.toLowerCase();\n var hex = '';\n var spaceTerminated = false;\n\n for (var i = 0; i < 6 && lower[i] !== undefined; i++) {\n var code = lower.charCodeAt(i); // check to see if we are dealing with a valid hex char [a-f|0-9]\n\n var valid = code >= 97 && code <= 102 || code >= 48 && code <= 57; // https://drafts.csswg.org/css-syntax/#consume-escaped-code-point\n\n spaceTerminated = code === 32;\n\n if (!valid) {\n break;\n }\n\n hex += lower[i];\n }\n\n if (hex.length === 0) {\n return undefined;\n }\n\n var codePoint = parseInt(hex, 16);\n var isSurrogate = codePoint >= 0xD800 && codePoint <= 0xDFFF; // Add special case for\n // \"If this number is zero, or is for a surrogate, or is greater than the maximum allowed code point\"\n // https://drafts.csswg.org/css-syntax/#maximum-allowed-code-point\n\n if (isSurrogate || codePoint === 0x0000 || codePoint > 0x10FFFF) {\n return [\"\\uFFFD\", hex.length + (spaceTerminated ? 1 : 0)];\n }\n\n return [String.fromCodePoint(codePoint), hex.length + (spaceTerminated ? 1 : 0)];\n}\n\nvar CONTAINS_ESCAPE = /\\\\/;\n\nfunction unesc(str) {\n var needToProcess = CONTAINS_ESCAPE.test(str);\n\n if (!needToProcess) {\n return str;\n }\n\n var ret = \"\";\n\n for (var i = 0; i < str.length; i++) {\n if (str[i] === \"\\\\\") {\n var gobbled = gobbleHex(str.slice(i + 1, i + 7));\n\n if (gobbled !== undefined) {\n ret += gobbled[0];\n i += gobbled[1];\n continue;\n } // Retain a pair of \\\\ if double escaped `\\\\\\\\`\n // https://github.com/postcss/postcss-selector-parser/commit/268c9a7656fb53f543dc620aa5b73a30ec3ff20e\n\n\n if (str[i + 1] === \"\\\\\") {\n ret += \"\\\\\";\n i++;\n continue;\n } // if \\\\ is at the end of the string retain it\n // https://github.com/postcss/postcss-selector-parser/commit/01a6b346e3612ce1ab20219acc26abdc259ccefb\n\n\n if (str.length === i + 1) {\n ret += str[i];\n }\n\n continue;\n }\n\n ret += str[i];\n }\n\n return ret;\n}\n\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _container = _interopRequireDefault(require(\"./container\"));\n\nvar _types = require(\"./types\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar Selector = /*#__PURE__*/function (_Container) {\n _inheritsLoose(Selector, _Container);\n\n function Selector(opts) {\n var _this;\n\n _this = _Container.call(this, opts) || this;\n _this.type = _types.SELECTOR;\n return _this;\n }\n\n return Selector;\n}(_container[\"default\"]);\n\nexports[\"default\"] = Selector;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _cssesc = _interopRequireDefault(require(\"cssesc\"));\n\nvar _util = require(\"../util\");\n\nvar _node = _interopRequireDefault(require(\"./node\"));\n\nvar _types = require(\"./types\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar ClassName = /*#__PURE__*/function (_Node) {\n _inheritsLoose(ClassName, _Node);\n\n function ClassName(opts) {\n var _this;\n\n _this = _Node.call(this, opts) || this;\n _this.type = _types.CLASS;\n _this._constructed = true;\n return _this;\n }\n\n var _proto = ClassName.prototype;\n\n _proto.valueToString = function valueToString() {\n return '.' + _Node.prototype.valueToString.call(this);\n };\n\n _createClass(ClassName, [{\n key: \"value\",\n get: function get() {\n return this._value;\n },\n set: function set(v) {\n if (this._constructed) {\n var escaped = (0, _cssesc[\"default\"])(v, {\n isIdentifier: true\n });\n\n if (escaped !== v) {\n (0, _util.ensureObject)(this, \"raws\");\n this.raws.value = escaped;\n } else if (this.raws) {\n delete this.raws.value;\n }\n }\n\n this._value = v;\n }\n }]);\n\n return ClassName;\n}(_node[\"default\"]);\n\nexports[\"default\"] = ClassName;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _node = _interopRequireDefault(require(\"./node\"));\n\nvar _types = require(\"./types\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar Comment = /*#__PURE__*/function (_Node) {\n _inheritsLoose(Comment, _Node);\n\n function Comment(opts) {\n var _this;\n\n _this = _Node.call(this, opts) || this;\n _this.type = _types.COMMENT;\n return _this;\n }\n\n return Comment;\n}(_node[\"default\"]);\n\nexports[\"default\"] = Comment;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _node = _interopRequireDefault(require(\"./node\"));\n\nvar _types = require(\"./types\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar ID = /*#__PURE__*/function (_Node) {\n _inheritsLoose(ID, _Node);\n\n function ID(opts) {\n var _this;\n\n _this = _Node.call(this, opts) || this;\n _this.type = _types.ID;\n return _this;\n }\n\n var _proto = ID.prototype;\n\n _proto.valueToString = function valueToString() {\n return '#' + _Node.prototype.valueToString.call(this);\n };\n\n return ID;\n}(_node[\"default\"]);\n\nexports[\"default\"] = ID;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _namespace = _interopRequireDefault(require(\"./namespace\"));\n\nvar _types = require(\"./types\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar Tag = /*#__PURE__*/function (_Namespace) {\n _inheritsLoose(Tag, _Namespace);\n\n function Tag(opts) {\n var _this;\n\n _this = _Namespace.call(this, opts) || this;\n _this.type = _types.TAG;\n return _this;\n }\n\n return Tag;\n}(_namespace[\"default\"]);\n\nexports[\"default\"] = Tag;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _node = _interopRequireDefault(require(\"./node\"));\n\nvar _types = require(\"./types\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar String = /*#__PURE__*/function (_Node) {\n _inheritsLoose(String, _Node);\n\n function String(opts) {\n var _this;\n\n _this = _Node.call(this, opts) || this;\n _this.type = _types.STRING;\n return _this;\n }\n\n return String;\n}(_node[\"default\"]);\n\nexports[\"default\"] = String;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _container = _interopRequireDefault(require(\"./container\"));\n\nvar _types = require(\"./types\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar Pseudo = /*#__PURE__*/function (_Container) {\n _inheritsLoose(Pseudo, _Container);\n\n function Pseudo(opts) {\n var _this;\n\n _this = _Container.call(this, opts) || this;\n _this.type = _types.PSEUDO;\n return _this;\n }\n\n var _proto = Pseudo.prototype;\n\n _proto.toString = function toString() {\n var params = this.length ? '(' + this.map(String).join(',') + ')' : '';\n return [this.rawSpaceBefore, this.stringifyProperty(\"value\"), params, this.rawSpaceAfter].join('');\n };\n\n return Pseudo;\n}(_container[\"default\"]);\n\nexports[\"default\"] = Pseudo;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _namespace = _interopRequireDefault(require(\"./namespace\"));\n\nvar _types = require(\"./types\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar Universal = /*#__PURE__*/function (_Namespace) {\n _inheritsLoose(Universal, _Namespace);\n\n function Universal(opts) {\n var _this;\n\n _this = _Namespace.call(this, opts) || this;\n _this.type = _types.UNIVERSAL;\n _this.value = '*';\n return _this;\n }\n\n return Universal;\n}(_namespace[\"default\"]);\n\nexports[\"default\"] = Universal;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _node = _interopRequireDefault(require(\"./node\"));\n\nvar _types = require(\"./types\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar Combinator = /*#__PURE__*/function (_Node) {\n _inheritsLoose(Combinator, _Node);\n\n function Combinator(opts) {\n var _this;\n\n _this = _Node.call(this, opts) || this;\n _this.type = _types.COMBINATOR;\n return _this;\n }\n\n return Combinator;\n}(_node[\"default\"]);\n\nexports[\"default\"] = Combinator;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _node = _interopRequireDefault(require(\"./node\"));\n\nvar _types = require(\"./types\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar Nesting = /*#__PURE__*/function (_Node) {\n _inheritsLoose(Nesting, _Node);\n\n function Nesting(opts) {\n var _this;\n\n _this = _Node.call(this, opts) || this;\n _this.type = _types.NESTING;\n _this.value = '&';\n return _this;\n }\n\n return Nesting;\n}(_node[\"default\"]);\n\nexports[\"default\"] = Nesting;\nmodule.exports = exports.default;","var requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return Object(requireObjectCoercible(argument));\n};\n","// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","var IS_PURE = require('../internals/is-pure');\nvar store = require('../internals/shared-store');\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: '3.15.2',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2021 Denis Pushkarev (zloirock.ru)'\n});\n","var DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar anObject = require('../internals/an-object');\nvar toPrimitive = require('../internals/to-primitive');\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? $defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return $defineProperty(O, P, Attributes);\n } catch (error) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- requied for testing\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a != 7;\n});\n","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar document = global.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n return EXISTS ? document.createElement(it) : {};\n};\n","var isObject = require('../internals/is-object');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (input, PREFERRED_STRING) {\n if (!isObject(input)) return input;\n var fn, val;\n if (PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;\n if (typeof (fn = input.valueOf) == 'function' && !isObject(val = fn.call(input))) return val;\n if (!PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = require('../internals/engine-v8-version');\nvar fails = require('../internals/fails');\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n var symbol = Symbol();\n // Chrome 38 Symbol has incorrect toString conversion\n // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n return !String(symbol) || !(Object(symbol) instanceof Symbol) ||\n // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n","var global = require('../internals/global');\nvar userAgent = require('../internals/engine-user-agent');\n\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n version = match[0] < 4 ? 1 : match[0] + match[1];\n} else if (userAgent) {\n match = userAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1] >= 74) {\n match = userAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = match[1];\n }\n}\n\nmodule.exports = version && +version;\n","var global = require('../internals/global');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar has = require('../internals/has');\nvar setGlobal = require('../internals/set-global');\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar getInternalState = InternalStateModule.get;\nvar enforceInternalState = InternalStateModule.enforce;\nvar TEMPLATE = String(String).split('String');\n\n(module.exports = function (O, key, value, options) {\n var unsafe = options ? !!options.unsafe : false;\n var simple = options ? !!options.enumerable : false;\n var noTargetGet = options ? !!options.noTargetGet : false;\n var state;\n if (typeof value == 'function') {\n if (typeof key == 'string' && !has(value, 'name')) {\n createNonEnumerableProperty(value, 'name', key);\n }\n state = enforceInternalState(value);\n if (!state.source) {\n state.source = TEMPLATE.join(typeof key == 'string' ? key : '');\n }\n }\n if (O === global) {\n if (simple) O[key] = value;\n else setGlobal(key, value);\n return;\n } else if (!unsafe) {\n delete O[key];\n } else if (!noTargetGet && O[key]) {\n simple = true;\n }\n if (simple) O[key] = value;\n else createNonEnumerableProperty(O, key, value);\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, 'toString', function toString() {\n return typeof this == 'function' && getInternalState(this).source || inspectSource(this);\n});\n","var store = require('../internals/shared-store');\n\nvar functionToString = Function.toString;\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (typeof store.inspectSource != 'function') {\n store.inspectSource = function (it) {\n return functionToString.call(it);\n };\n}\n\nmodule.exports = store.inspectSource;\n","var shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n","module.exports = {};\n","module.exports = function (it) {\n if (typeof it != 'function') {\n throw TypeError(String(it) + ' is not a function');\n } return it;\n};\n","var toInteger = require('../internals/to-integer');\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n","var ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `ToInteger` abstract operation\n// https://tc39.es/ecma262/#sec-tointeger\nmodule.exports = function (argument) {\n return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument);\n};\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nfunction helpers() {\n const data = require(\"@babel/helpers\");\n\n helpers = function () {\n return data;\n };\n\n return data;\n}\n\nfunction _traverse() {\n const data = require(\"@babel/traverse\");\n\n _traverse = function () {\n return data;\n };\n\n return data;\n}\n\nfunction _codeFrame() {\n const data = require(\"@babel/code-frame\");\n\n _codeFrame = function () {\n return data;\n };\n\n return data;\n}\n\nfunction t() {\n const data = require(\"@babel/types\");\n\n t = function () {\n return data;\n };\n\n return data;\n}\n\nfunction _helperModuleTransforms() {\n const data = require(\"@babel/helper-module-transforms\");\n\n _helperModuleTransforms = function () {\n return data;\n };\n\n return data;\n}\n\nfunction _semver() {\n const data = require(\"semver\");\n\n _semver = function () {\n return data;\n };\n\n return data;\n}\n\nconst errorVisitor = {\n enter(path, state) {\n const loc = path.node.loc;\n\n if (loc) {\n state.loc = loc;\n path.stop();\n }\n }\n\n};\n\nclass File {\n constructor(options, {\n code,\n ast,\n inputMap\n }) {\n this._map = new Map();\n this.opts = void 0;\n this.declarations = {};\n this.path = null;\n this.ast = {};\n this.scope = void 0;\n this.metadata = {};\n this.code = \"\";\n this.inputMap = null;\n this.hub = {\n file: this,\n getCode: () => this.code,\n getScope: () => this.scope,\n addHelper: this.addHelper.bind(this),\n buildError: this.buildCodeFrameError.bind(this)\n };\n this.opts = options;\n this.code = code;\n this.ast = ast;\n this.inputMap = inputMap;\n this.path = _traverse().NodePath.get({\n hub: this.hub,\n parentPath: null,\n parent: this.ast,\n container: this.ast,\n key: \"program\"\n }).setContext();\n this.scope = this.path.scope;\n }\n\n get shebang() {\n const {\n interpreter\n } = this.path.node;\n return interpreter ? interpreter.value : \"\";\n }\n\n set shebang(value) {\n if (value) {\n this.path.get(\"interpreter\").replaceWith(t().interpreterDirective(value));\n } else {\n this.path.get(\"interpreter\").remove();\n }\n }\n\n set(key, val) {\n if (key === \"helpersNamespace\") {\n throw new Error(\"Babel 7.0.0-beta.56 has dropped support for the 'helpersNamespace' utility.\" + \"If you are using @babel/plugin-external-helpers you will need to use a newer \" + \"version than the one you currently have installed. \" + \"If you have your own implementation, you'll want to explore using 'helperGenerator' \" + \"alongside 'file.availableHelper()'.\");\n }\n\n this._map.set(key, val);\n }\n\n get(key) {\n return this._map.get(key);\n }\n\n has(key) {\n return this._map.has(key);\n }\n\n getModuleName() {\n return (0, _helperModuleTransforms().getModuleName)(this.opts, this.opts);\n }\n\n addImport() {\n throw new Error(\"This API has been removed. If you're looking for this \" + \"functionality in Babel 7, you should import the \" + \"'@babel/helper-module-imports' module and use the functions exposed \" + \" from that module, such as 'addNamed' or 'addDefault'.\");\n }\n\n availableHelper(name, versionRange) {\n let minVersion;\n\n try {\n minVersion = helpers().minVersion(name);\n } catch (err) {\n if (err.code !== \"BABEL_HELPER_UNKNOWN\") throw err;\n return false;\n }\n\n if (typeof versionRange !== \"string\") return true;\n if (_semver().valid(versionRange)) versionRange = `^${versionRange}`;\n return !_semver().intersects(`<${minVersion}`, versionRange) && !_semver().intersects(`>=8.0.0`, versionRange);\n }\n\n addHelper(name) {\n const declar = this.declarations[name];\n if (declar) return t().cloneNode(declar);\n const generator = this.get(\"helperGenerator\");\n\n if (generator) {\n const res = generator(name);\n if (res) return res;\n }\n\n helpers().ensure(name, File);\n const uid = this.declarations[name] = this.scope.generateUidIdentifier(name);\n const dependencies = {};\n\n for (const dep of helpers().getDependencies(name)) {\n dependencies[dep] = this.addHelper(dep);\n }\n\n const {\n nodes,\n globals\n } = helpers().get(name, dep => dependencies[dep], uid, Object.keys(this.scope.getAllBindings()));\n globals.forEach(name => {\n if (this.path.scope.hasBinding(name, true)) {\n this.path.scope.rename(name);\n }\n });\n nodes.forEach(node => {\n node._compact = true;\n });\n this.path.unshiftContainer(\"body\", nodes);\n this.path.get(\"body\").forEach(path => {\n if (nodes.indexOf(path.node) === -1) return;\n if (path.isVariableDeclaration()) this.scope.registerDeclaration(path);\n });\n return uid;\n }\n\n addTemplateObject() {\n throw new Error(\"This function has been moved into the template literal transform itself.\");\n }\n\n buildCodeFrameError(node, msg, _Error = SyntaxError) {\n let loc = node && (node.loc || node._loc);\n\n if (!loc && node) {\n const state = {\n loc: null\n };\n (0, _traverse().default)(node, errorVisitor, this.scope, state);\n loc = state.loc;\n let txt = \"This is an error on an internal node. Probably an internal error.\";\n if (loc) txt += \" Location has been estimated.\";\n msg += ` (${txt})`;\n }\n\n if (loc) {\n const {\n highlightCode = true\n } = this.opts;\n msg += \"\\n\" + (0, _codeFrame().codeFrameColumns)(this.code, {\n start: {\n line: loc.start.line,\n column: loc.start.column + 1\n },\n end: loc.end && loc.start.line === loc.end.line ? {\n line: loc.end.line,\n column: loc.end.column + 1\n } : undefined\n }, {\n highlightCode\n });\n }\n\n return new _Error(msg);\n }\n\n}\n\nexports.default = File;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = shallowEqual;\n\nfunction shallowEqual(actual, expected) {\n const keys = Object.keys(expected);\n\n for (const key of keys) {\n if (actual[key] !== expected[key]) {\n return false;\n }\n }\n\n return true;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.classMethodOrDeclareMethodCommon = exports.classMethodOrPropertyCommon = exports.patternLikeCommon = exports.functionDeclarationCommon = exports.functionTypeAnnotationCommon = exports.functionCommon = void 0;\n\nvar _is = require(\"../validators/is\");\n\nvar _isValidIdentifier = require(\"../validators/isValidIdentifier\");\n\nvar _helperValidatorIdentifier = require(\"@babel/helper-validator-identifier\");\n\nvar _constants = require(\"../constants\");\n\nvar _utils = require(\"./utils\");\n\n(0, _utils.default)(\"ArrayExpression\", {\n fields: {\n elements: {\n validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeOrValueType)(\"null\", \"Expression\", \"SpreadElement\"))),\n default: !process.env.BABEL_TYPES_8_BREAKING ? [] : undefined\n }\n },\n visitor: [\"elements\"],\n aliases: [\"Expression\"]\n});\n(0, _utils.default)(\"AssignmentExpression\", {\n fields: {\n operator: {\n validate: function () {\n if (!process.env.BABEL_TYPES_8_BREAKING) {\n return (0, _utils.assertValueType)(\"string\");\n }\n\n const identifier = (0, _utils.assertOneOf)(..._constants.ASSIGNMENT_OPERATORS);\n const pattern = (0, _utils.assertOneOf)(\"=\");\n return function (node, key, val) {\n const validator = (0, _is.default)(\"Pattern\", node.left) ? pattern : identifier;\n validator(node, key, val);\n };\n }()\n },\n left: {\n validate: !process.env.BABEL_TYPES_8_BREAKING ? (0, _utils.assertNodeType)(\"LVal\") : (0, _utils.assertNodeType)(\"Identifier\", \"MemberExpression\", \"ArrayPattern\", \"ObjectPattern\")\n },\n right: {\n validate: (0, _utils.assertNodeType)(\"Expression\")\n }\n },\n builder: [\"operator\", \"left\", \"right\"],\n visitor: [\"left\", \"right\"],\n aliases: [\"Expression\"]\n});\n(0, _utils.default)(\"BinaryExpression\", {\n builder: [\"operator\", \"left\", \"right\"],\n fields: {\n operator: {\n validate: (0, _utils.assertOneOf)(..._constants.BINARY_OPERATORS)\n },\n left: {\n validate: function () {\n const expression = (0, _utils.assertNodeType)(\"Expression\");\n const inOp = (0, _utils.assertNodeType)(\"Expression\", \"PrivateName\");\n\n const validator = function (node, key, val) {\n const validator = node.operator === \"in\" ? inOp : expression;\n validator(node, key, val);\n };\n\n validator.oneOfNodeTypes = [\"Expression\", \"PrivateName\"];\n return validator;\n }()\n },\n right: {\n validate: (0, _utils.assertNodeType)(\"Expression\")\n }\n },\n visitor: [\"left\", \"right\"],\n aliases: [\"Binary\", \"Expression\"]\n});\n(0, _utils.default)(\"InterpreterDirective\", {\n builder: [\"value\"],\n fields: {\n value: {\n validate: (0, _utils.assertValueType)(\"string\")\n }\n }\n});\n(0, _utils.default)(\"Directive\", {\n visitor: [\"value\"],\n fields: {\n value: {\n validate: (0, _utils.assertNodeType)(\"DirectiveLiteral\")\n }\n }\n});\n(0, _utils.default)(\"DirectiveLiteral\", {\n builder: [\"value\"],\n fields: {\n value: {\n validate: (0, _utils.assertValueType)(\"string\")\n }\n }\n});\n(0, _utils.default)(\"BlockStatement\", {\n builder: [\"body\", \"directives\"],\n visitor: [\"directives\", \"body\"],\n fields: {\n directives: {\n validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Directive\"))),\n default: []\n },\n body: {\n validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Statement\")))\n }\n },\n aliases: [\"Scopable\", \"BlockParent\", \"Block\", \"Statement\"]\n});\n(0, _utils.default)(\"BreakStatement\", {\n visitor: [\"label\"],\n fields: {\n label: {\n validate: (0, _utils.assertNodeType)(\"Identifier\"),\n optional: true\n }\n },\n aliases: [\"Statement\", \"Terminatorless\", \"CompletionStatement\"]\n});\n(0, _utils.default)(\"CallExpression\", {\n visitor: [\"callee\", \"arguments\", \"typeParameters\", \"typeArguments\"],\n builder: [\"callee\", \"arguments\"],\n aliases: [\"Expression\"],\n fields: Object.assign({\n callee: {\n validate: (0, _utils.assertNodeType)(\"Expression\", \"V8IntrinsicIdentifier\")\n },\n arguments: {\n validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Expression\", \"SpreadElement\", \"JSXNamespacedName\", \"ArgumentPlaceholder\")))\n }\n }, !process.env.BABEL_TYPES_8_BREAKING ? {\n optional: {\n validate: (0, _utils.assertOneOf)(true, false),\n optional: true\n }\n } : {}, {\n typeArguments: {\n validate: (0, _utils.assertNodeType)(\"TypeParameterInstantiation\"),\n optional: true\n },\n typeParameters: {\n validate: (0, _utils.assertNodeType)(\"TSTypeParameterInstantiation\"),\n optional: true\n }\n })\n});\n(0, _utils.default)(\"CatchClause\", {\n visitor: [\"param\", \"body\"],\n fields: {\n param: {\n validate: (0, _utils.assertNodeType)(\"Identifier\", \"ArrayPattern\", \"ObjectPattern\"),\n optional: true\n },\n body: {\n validate: (0, _utils.assertNodeType)(\"BlockStatement\")\n }\n },\n aliases: [\"Scopable\", \"BlockParent\"]\n});\n(0, _utils.default)(\"ConditionalExpression\", {\n visitor: [\"test\", \"consequent\", \"alternate\"],\n fields: {\n test: {\n validate: (0, _utils.assertNodeType)(\"Expression\")\n },\n consequent: {\n validate: (0, _utils.assertNodeType)(\"Expression\")\n },\n alternate: {\n validate: (0, _utils.assertNodeType)(\"Expression\")\n }\n },\n aliases: [\"Expression\", \"Conditional\"]\n});\n(0, _utils.default)(\"ContinueStatement\", {\n visitor: [\"label\"],\n fields: {\n label: {\n validate: (0, _utils.assertNodeType)(\"Identifier\"),\n optional: true\n }\n },\n aliases: [\"Statement\", \"Terminatorless\", \"CompletionStatement\"]\n});\n(0, _utils.default)(\"DebuggerStatement\", {\n aliases: [\"Statement\"]\n});\n(0, _utils.default)(\"DoWhileStatement\", {\n visitor: [\"test\", \"body\"],\n fields: {\n test: {\n validate: (0, _utils.assertNodeType)(\"Expression\")\n },\n body: {\n validate: (0, _utils.assertNodeType)(\"Statement\")\n }\n },\n aliases: [\"Statement\", \"BlockParent\", \"Loop\", \"While\", \"Scopable\"]\n});\n(0, _utils.default)(\"EmptyStatement\", {\n aliases: [\"Statement\"]\n});\n(0, _utils.default)(\"ExpressionStatement\", {\n visitor: [\"expression\"],\n fields: {\n expression: {\n validate: (0, _utils.assertNodeType)(\"Expression\")\n }\n },\n aliases: [\"Statement\", \"ExpressionWrapper\"]\n});\n(0, _utils.default)(\"File\", {\n builder: [\"program\", \"comments\", \"tokens\"],\n visitor: [\"program\"],\n fields: {\n program: {\n validate: (0, _utils.assertNodeType)(\"Program\")\n },\n comments: {\n validate: !process.env.BABEL_TYPES_8_BREAKING ? Object.assign(() => {}, {\n each: {\n oneOfNodeTypes: [\"CommentBlock\", \"CommentLine\"]\n }\n }) : (0, _utils.assertEach)((0, _utils.assertNodeType)(\"CommentBlock\", \"CommentLine\")),\n optional: true\n },\n tokens: {\n validate: (0, _utils.assertEach)(Object.assign(() => {}, {\n type: \"any\"\n })),\n optional: true\n }\n }\n});\n(0, _utils.default)(\"ForInStatement\", {\n visitor: [\"left\", \"right\", \"body\"],\n aliases: [\"Scopable\", \"Statement\", \"For\", \"BlockParent\", \"Loop\", \"ForXStatement\"],\n fields: {\n left: {\n validate: !process.env.BABEL_TYPES_8_BREAKING ? (0, _utils.assertNodeType)(\"VariableDeclaration\", \"LVal\") : (0, _utils.assertNodeType)(\"VariableDeclaration\", \"Identifier\", \"MemberExpression\", \"ArrayPattern\", \"ObjectPattern\")\n },\n right: {\n validate: (0, _utils.assertNodeType)(\"Expression\")\n },\n body: {\n validate: (0, _utils.assertNodeType)(\"Statement\")\n }\n }\n});\n(0, _utils.default)(\"ForStatement\", {\n visitor: [\"init\", \"test\", \"update\", \"body\"],\n aliases: [\"Scopable\", \"Statement\", \"For\", \"BlockParent\", \"Loop\"],\n fields: {\n init: {\n validate: (0, _utils.assertNodeType)(\"VariableDeclaration\", \"Expression\"),\n optional: true\n },\n test: {\n validate: (0, _utils.assertNodeType)(\"Expression\"),\n optional: true\n },\n update: {\n validate: (0, _utils.assertNodeType)(\"Expression\"),\n optional: true\n },\n body: {\n validate: (0, _utils.assertNodeType)(\"Statement\")\n }\n }\n});\nconst functionCommon = {\n params: {\n validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Identifier\", \"Pattern\", \"RestElement\")))\n },\n generator: {\n default: false\n },\n async: {\n default: false\n }\n};\nexports.functionCommon = functionCommon;\nconst functionTypeAnnotationCommon = {\n returnType: {\n validate: (0, _utils.assertNodeType)(\"TypeAnnotation\", \"TSTypeAnnotation\", \"Noop\"),\n optional: true\n },\n typeParameters: {\n validate: (0, _utils.assertNodeType)(\"TypeParameterDeclaration\", \"TSTypeParameterDeclaration\", \"Noop\"),\n optional: true\n }\n};\nexports.functionTypeAnnotationCommon = functionTypeAnnotationCommon;\nconst functionDeclarationCommon = Object.assign({}, functionCommon, {\n declare: {\n validate: (0, _utils.assertValueType)(\"boolean\"),\n optional: true\n },\n id: {\n validate: (0, _utils.assertNodeType)(\"Identifier\"),\n optional: true\n }\n});\nexports.functionDeclarationCommon = functionDeclarationCommon;\n(0, _utils.default)(\"FunctionDeclaration\", {\n builder: [\"id\", \"params\", \"body\", \"generator\", \"async\"],\n visitor: [\"id\", \"params\", \"body\", \"returnType\", \"typeParameters\"],\n fields: Object.assign({}, functionDeclarationCommon, functionTypeAnnotationCommon, {\n body: {\n validate: (0, _utils.assertNodeType)(\"BlockStatement\")\n }\n }),\n aliases: [\"Scopable\", \"Function\", \"BlockParent\", \"FunctionParent\", \"Statement\", \"Pureish\", \"Declaration\"],\n validate: function () {\n if (!process.env.BABEL_TYPES_8_BREAKING) return () => {};\n const identifier = (0, _utils.assertNodeType)(\"Identifier\");\n return function (parent, key, node) {\n if (!(0, _is.default)(\"ExportDefaultDeclaration\", parent)) {\n identifier(node, \"id\", node.id);\n }\n };\n }()\n});\n(0, _utils.default)(\"FunctionExpression\", {\n inherits: \"FunctionDeclaration\",\n aliases: [\"Scopable\", \"Function\", \"BlockParent\", \"FunctionParent\", \"Expression\", \"Pureish\"],\n fields: Object.assign({}, functionCommon, functionTypeAnnotationCommon, {\n id: {\n validate: (0, _utils.assertNodeType)(\"Identifier\"),\n optional: true\n },\n body: {\n validate: (0, _utils.assertNodeType)(\"BlockStatement\")\n }\n })\n});\nconst patternLikeCommon = {\n typeAnnotation: {\n validate: (0, _utils.assertNodeType)(\"TypeAnnotation\", \"TSTypeAnnotation\", \"Noop\"),\n optional: true\n },\n decorators: {\n validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Decorator\")))\n }\n};\nexports.patternLikeCommon = patternLikeCommon;\n(0, _utils.default)(\"Identifier\", {\n builder: [\"name\"],\n visitor: [\"typeAnnotation\", \"decorators\"],\n aliases: [\"Expression\", \"PatternLike\", \"LVal\", \"TSEntityName\"],\n fields: Object.assign({}, patternLikeCommon, {\n name: {\n validate: (0, _utils.chain)((0, _utils.assertValueType)(\"string\"), Object.assign(function (node, key, val) {\n if (!process.env.BABEL_TYPES_8_BREAKING) return;\n\n if (!(0, _isValidIdentifier.default)(val, false)) {\n throw new TypeError(`\"${val}\" is not a valid identifier name`);\n }\n }, {\n type: \"string\"\n }))\n },\n optional: {\n validate: (0, _utils.assertValueType)(\"boolean\"),\n optional: true\n }\n }),\n\n validate(parent, key, node) {\n if (!process.env.BABEL_TYPES_8_BREAKING) return;\n const match = /\\.(\\w+)$/.exec(key);\n if (!match) return;\n const [, parentKey] = match;\n const nonComp = {\n computed: false\n };\n\n if (parentKey === \"property\") {\n if ((0, _is.default)(\"MemberExpression\", parent, nonComp)) return;\n if ((0, _is.default)(\"OptionalMemberExpression\", parent, nonComp)) return;\n } else if (parentKey === \"key\") {\n if ((0, _is.default)(\"Property\", parent, nonComp)) return;\n if ((0, _is.default)(\"Method\", parent, nonComp)) return;\n } else if (parentKey === \"exported\") {\n if ((0, _is.default)(\"ExportSpecifier\", parent)) return;\n } else if (parentKey === \"imported\") {\n if ((0, _is.default)(\"ImportSpecifier\", parent, {\n imported: node\n })) return;\n } else if (parentKey === \"meta\") {\n if ((0, _is.default)(\"MetaProperty\", parent, {\n meta: node\n })) return;\n }\n\n if (((0, _helperValidatorIdentifier.isKeyword)(node.name) || (0, _helperValidatorIdentifier.isReservedWord)(node.name, false)) && node.name !== \"this\") {\n throw new TypeError(`\"${node.name}\" is not a valid identifier`);\n }\n }\n\n});\n(0, _utils.default)(\"IfStatement\", {\n visitor: [\"test\", \"consequent\", \"alternate\"],\n aliases: [\"Statement\", \"Conditional\"],\n fields: {\n test: {\n validate: (0, _utils.assertNodeType)(\"Expression\")\n },\n consequent: {\n validate: (0, _utils.assertNodeType)(\"Statement\")\n },\n alternate: {\n optional: true,\n validate: (0, _utils.assertNodeType)(\"Statement\")\n }\n }\n});\n(0, _utils.default)(\"LabeledStatement\", {\n visitor: [\"label\", \"body\"],\n aliases: [\"Statement\"],\n fields: {\n label: {\n validate: (0, _utils.assertNodeType)(\"Identifier\")\n },\n body: {\n validate: (0, _utils.assertNodeType)(\"Statement\")\n }\n }\n});\n(0, _utils.default)(\"StringLiteral\", {\n builder: [\"value\"],\n fields: {\n value: {\n validate: (0, _utils.assertValueType)(\"string\")\n }\n },\n aliases: [\"Expression\", \"Pureish\", \"Literal\", \"Immutable\"]\n});\n(0, _utils.default)(\"NumericLiteral\", {\n builder: [\"value\"],\n deprecatedAlias: \"NumberLiteral\",\n fields: {\n value: {\n validate: (0, _utils.assertValueType)(\"number\")\n }\n },\n aliases: [\"Expression\", \"Pureish\", \"Literal\", \"Immutable\"]\n});\n(0, _utils.default)(\"NullLiteral\", {\n aliases: [\"Expression\", \"Pureish\", \"Literal\", \"Immutable\"]\n});\n(0, _utils.default)(\"BooleanLiteral\", {\n builder: [\"value\"],\n fields: {\n value: {\n validate: (0, _utils.assertValueType)(\"boolean\")\n }\n },\n aliases: [\"Expression\", \"Pureish\", \"Literal\", \"Immutable\"]\n});\n(0, _utils.default)(\"RegExpLiteral\", {\n builder: [\"pattern\", \"flags\"],\n deprecatedAlias: \"RegexLiteral\",\n aliases: [\"Expression\", \"Pureish\", \"Literal\"],\n fields: {\n pattern: {\n validate: (0, _utils.assertValueType)(\"string\")\n },\n flags: {\n validate: (0, _utils.chain)((0, _utils.assertValueType)(\"string\"), Object.assign(function (node, key, val) {\n if (!process.env.BABEL_TYPES_8_BREAKING) return;\n const invalid = /[^gimsuy]/.exec(val);\n\n if (invalid) {\n throw new TypeError(`\"${invalid[0]}\" is not a valid RegExp flag`);\n }\n }, {\n type: \"string\"\n })),\n default: \"\"\n }\n }\n});\n(0, _utils.default)(\"LogicalExpression\", {\n builder: [\"operator\", \"left\", \"right\"],\n visitor: [\"left\", \"right\"],\n aliases: [\"Binary\", \"Expression\"],\n fields: {\n operator: {\n validate: (0, _utils.assertOneOf)(..._constants.LOGICAL_OPERATORS)\n },\n left: {\n validate: (0, _utils.assertNodeType)(\"Expression\")\n },\n right: {\n validate: (0, _utils.assertNodeType)(\"Expression\")\n }\n }\n});\n(0, _utils.default)(\"MemberExpression\", {\n builder: [\"object\", \"property\", \"computed\", ...(!process.env.BABEL_TYPES_8_BREAKING ? [\"optional\"] : [])],\n visitor: [\"object\", \"property\"],\n aliases: [\"Expression\", \"LVal\"],\n fields: Object.assign({\n object: {\n validate: (0, _utils.assertNodeType)(\"Expression\")\n },\n property: {\n validate: function () {\n const normal = (0, _utils.assertNodeType)(\"Identifier\", \"PrivateName\");\n const computed = (0, _utils.assertNodeType)(\"Expression\");\n\n const validator = function (node, key, val) {\n const validator = node.computed ? computed : normal;\n validator(node, key, val);\n };\n\n validator.oneOfNodeTypes = [\"Expression\", \"Identifier\", \"PrivateName\"];\n return validator;\n }()\n },\n computed: {\n default: false\n }\n }, !process.env.BABEL_TYPES_8_BREAKING ? {\n optional: {\n validate: (0, _utils.assertOneOf)(true, false),\n optional: true\n }\n } : {})\n});\n(0, _utils.default)(\"NewExpression\", {\n inherits: \"CallExpression\"\n});\n(0, _utils.default)(\"Program\", {\n visitor: [\"directives\", \"body\"],\n builder: [\"body\", \"directives\", \"sourceType\", \"interpreter\"],\n fields: {\n sourceFile: {\n validate: (0, _utils.assertValueType)(\"string\")\n },\n sourceType: {\n validate: (0, _utils.assertOneOf)(\"script\", \"module\"),\n default: \"script\"\n },\n interpreter: {\n validate: (0, _utils.assertNodeType)(\"InterpreterDirective\"),\n default: null,\n optional: true\n },\n directives: {\n validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Directive\"))),\n default: []\n },\n body: {\n validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Statement\")))\n }\n },\n aliases: [\"Scopable\", \"BlockParent\", \"Block\"]\n});\n(0, _utils.default)(\"ObjectExpression\", {\n visitor: [\"properties\"],\n aliases: [\"Expression\"],\n fields: {\n properties: {\n validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"ObjectMethod\", \"ObjectProperty\", \"SpreadElement\")))\n }\n }\n});\n(0, _utils.default)(\"ObjectMethod\", {\n builder: [\"kind\", \"key\", \"params\", \"body\", \"computed\", \"generator\", \"async\"],\n fields: Object.assign({}, functionCommon, functionTypeAnnotationCommon, {\n kind: Object.assign({\n validate: (0, _utils.assertOneOf)(\"method\", \"get\", \"set\")\n }, !process.env.BABEL_TYPES_8_BREAKING ? {\n default: \"method\"\n } : {}),\n computed: {\n default: false\n },\n key: {\n validate: function () {\n const normal = (0, _utils.assertNodeType)(\"Identifier\", \"StringLiteral\", \"NumericLiteral\");\n const computed = (0, _utils.assertNodeType)(\"Expression\");\n\n const validator = function (node, key, val) {\n const validator = node.computed ? computed : normal;\n validator(node, key, val);\n };\n\n validator.oneOfNodeTypes = [\"Expression\", \"Identifier\", \"StringLiteral\", \"NumericLiteral\"];\n return validator;\n }()\n },\n decorators: {\n validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Decorator\"))),\n optional: true\n },\n body: {\n validate: (0, _utils.assertNodeType)(\"BlockStatement\")\n }\n }),\n visitor: [\"key\", \"params\", \"body\", \"decorators\", \"returnType\", \"typeParameters\"],\n aliases: [\"UserWhitespacable\", \"Function\", \"Scopable\", \"BlockParent\", \"FunctionParent\", \"Method\", \"ObjectMember\"]\n});\n(0, _utils.default)(\"ObjectProperty\", {\n builder: [\"key\", \"value\", \"computed\", \"shorthand\", ...(!process.env.BABEL_TYPES_8_BREAKING ? [\"decorators\"] : [])],\n fields: {\n computed: {\n default: false\n },\n key: {\n validate: function () {\n const normal = (0, _utils.assertNodeType)(\"Identifier\", \"StringLiteral\", \"NumericLiteral\");\n const computed = (0, _utils.assertNodeType)(\"Expression\");\n\n const validator = function (node, key, val) {\n const validator = node.computed ? computed : normal;\n validator(node, key, val);\n };\n\n validator.oneOfNodeTypes = [\"Expression\", \"Identifier\", \"StringLiteral\", \"NumericLiteral\"];\n return validator;\n }()\n },\n value: {\n validate: (0, _utils.assertNodeType)(\"Expression\", \"PatternLike\")\n },\n shorthand: {\n validate: (0, _utils.chain)((0, _utils.assertValueType)(\"boolean\"), Object.assign(function (node, key, val) {\n if (!process.env.BABEL_TYPES_8_BREAKING) return;\n\n if (val && node.computed) {\n throw new TypeError(\"Property shorthand of ObjectProperty cannot be true if computed is true\");\n }\n }, {\n type: \"boolean\"\n }), function (node, key, val) {\n if (!process.env.BABEL_TYPES_8_BREAKING) return;\n\n if (val && !(0, _is.default)(\"Identifier\", node.key)) {\n throw new TypeError(\"Property shorthand of ObjectProperty cannot be true if key is not an Identifier\");\n }\n }),\n default: false\n },\n decorators: {\n validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Decorator\"))),\n optional: true\n }\n },\n visitor: [\"key\", \"value\", \"decorators\"],\n aliases: [\"UserWhitespacable\", \"Property\", \"ObjectMember\"],\n validate: function () {\n const pattern = (0, _utils.assertNodeType)(\"Identifier\", \"Pattern\");\n const expression = (0, _utils.assertNodeType)(\"Expression\");\n return function (parent, key, node) {\n if (!process.env.BABEL_TYPES_8_BREAKING) return;\n const validator = (0, _is.default)(\"ObjectPattern\", parent) ? pattern : expression;\n validator(node, \"value\", node.value);\n };\n }()\n});\n(0, _utils.default)(\"RestElement\", {\n visitor: [\"argument\", \"typeAnnotation\"],\n builder: [\"argument\"],\n aliases: [\"LVal\", \"PatternLike\"],\n deprecatedAlias: \"RestProperty\",\n fields: Object.assign({}, patternLikeCommon, {\n argument: {\n validate: !process.env.BABEL_TYPES_8_BREAKING ? (0, _utils.assertNodeType)(\"LVal\") : (0, _utils.assertNodeType)(\"Identifier\", \"Pattern\", \"MemberExpression\")\n }\n }),\n\n validate(parent, key) {\n if (!process.env.BABEL_TYPES_8_BREAKING) return;\n const match = /(\\w+)\\[(\\d+)\\]/.exec(key);\n if (!match) throw new Error(\"Internal Babel error: malformed key.\");\n const [, listKey, index] = match;\n\n if (parent[listKey].length > index + 1) {\n throw new TypeError(`RestElement must be last element of ${listKey}`);\n }\n }\n\n});\n(0, _utils.default)(\"ReturnStatement\", {\n visitor: [\"argument\"],\n aliases: [\"Statement\", \"Terminatorless\", \"CompletionStatement\"],\n fields: {\n argument: {\n validate: (0, _utils.assertNodeType)(\"Expression\"),\n optional: true\n }\n }\n});\n(0, _utils.default)(\"SequenceExpression\", {\n visitor: [\"expressions\"],\n fields: {\n expressions: {\n validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Expression\")))\n }\n },\n aliases: [\"Expression\"]\n});\n(0, _utils.default)(\"ParenthesizedExpression\", {\n visitor: [\"expression\"],\n aliases: [\"Expression\", \"ExpressionWrapper\"],\n fields: {\n expression: {\n validate: (0, _utils.assertNodeType)(\"Expression\")\n }\n }\n});\n(0, _utils.default)(\"SwitchCase\", {\n visitor: [\"test\", \"consequent\"],\n fields: {\n test: {\n validate: (0, _utils.assertNodeType)(\"Expression\"),\n optional: true\n },\n consequent: {\n validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Statement\")))\n }\n }\n});\n(0, _utils.default)(\"SwitchStatement\", {\n visitor: [\"discriminant\", \"cases\"],\n aliases: [\"Statement\", \"BlockParent\", \"Scopable\"],\n fields: {\n discriminant: {\n validate: (0, _utils.assertNodeType)(\"Expression\")\n },\n cases: {\n validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"SwitchCase\")))\n }\n }\n});\n(0, _utils.default)(\"ThisExpression\", {\n aliases: [\"Expression\"]\n});\n(0, _utils.default)(\"ThrowStatement\", {\n visitor: [\"argument\"],\n aliases: [\"Statement\", \"Terminatorless\", \"CompletionStatement\"],\n fields: {\n argument: {\n validate: (0, _utils.assertNodeType)(\"Expression\")\n }\n }\n});\n(0, _utils.default)(\"TryStatement\", {\n visitor: [\"block\", \"handler\", \"finalizer\"],\n aliases: [\"Statement\"],\n fields: {\n block: {\n validate: (0, _utils.chain)((0, _utils.assertNodeType)(\"BlockStatement\"), Object.assign(function (node) {\n if (!process.env.BABEL_TYPES_8_BREAKING) return;\n\n if (!node.handler && !node.finalizer) {\n throw new TypeError(\"TryStatement expects either a handler or finalizer, or both\");\n }\n }, {\n oneOfNodeTypes: [\"BlockStatement\"]\n }))\n },\n handler: {\n optional: true,\n validate: (0, _utils.assertNodeType)(\"CatchClause\")\n },\n finalizer: {\n optional: true,\n validate: (0, _utils.assertNodeType)(\"BlockStatement\")\n }\n }\n});\n(0, _utils.default)(\"UnaryExpression\", {\n builder: [\"operator\", \"argument\", \"prefix\"],\n fields: {\n prefix: {\n default: true\n },\n argument: {\n validate: (0, _utils.assertNodeType)(\"Expression\")\n },\n operator: {\n validate: (0, _utils.assertOneOf)(..._constants.UNARY_OPERATORS)\n }\n },\n visitor: [\"argument\"],\n aliases: [\"UnaryLike\", \"Expression\"]\n});\n(0, _utils.default)(\"UpdateExpression\", {\n builder: [\"operator\", \"argument\", \"prefix\"],\n fields: {\n prefix: {\n default: false\n },\n argument: {\n validate: !process.env.BABEL_TYPES_8_BREAKING ? (0, _utils.assertNodeType)(\"Expression\") : (0, _utils.assertNodeType)(\"Identifier\", \"MemberExpression\")\n },\n operator: {\n validate: (0, _utils.assertOneOf)(..._constants.UPDATE_OPERATORS)\n }\n },\n visitor: [\"argument\"],\n aliases: [\"Expression\"]\n});\n(0, _utils.default)(\"VariableDeclaration\", {\n builder: [\"kind\", \"declarations\"],\n visitor: [\"declarations\"],\n aliases: [\"Statement\", \"Declaration\"],\n fields: {\n declare: {\n validate: (0, _utils.assertValueType)(\"boolean\"),\n optional: true\n },\n kind: {\n validate: (0, _utils.assertOneOf)(\"var\", \"let\", \"const\")\n },\n declarations: {\n validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"VariableDeclarator\")))\n }\n },\n\n validate(parent, key, node) {\n if (!process.env.BABEL_TYPES_8_BREAKING) return;\n if (!(0, _is.default)(\"ForXStatement\", parent, {\n left: node\n })) return;\n\n if (node.declarations.length !== 1) {\n throw new TypeError(`Exactly one VariableDeclarator is required in the VariableDeclaration of a ${parent.type}`);\n }\n }\n\n});\n(0, _utils.default)(\"VariableDeclarator\", {\n visitor: [\"id\", \"init\"],\n fields: {\n id: {\n validate: function () {\n if (!process.env.BABEL_TYPES_8_BREAKING) {\n return (0, _utils.assertNodeType)(\"LVal\");\n }\n\n const normal = (0, _utils.assertNodeType)(\"Identifier\", \"ArrayPattern\", \"ObjectPattern\");\n const without = (0, _utils.assertNodeType)(\"Identifier\");\n return function (node, key, val) {\n const validator = node.init ? normal : without;\n validator(node, key, val);\n };\n }()\n },\n definite: {\n optional: true,\n validate: (0, _utils.assertValueType)(\"boolean\")\n },\n init: {\n optional: true,\n validate: (0, _utils.assertNodeType)(\"Expression\")\n }\n }\n});\n(0, _utils.default)(\"WhileStatement\", {\n visitor: [\"test\", \"body\"],\n aliases: [\"Statement\", \"BlockParent\", \"Loop\", \"While\", \"Scopable\"],\n fields: {\n test: {\n validate: (0, _utils.assertNodeType)(\"Expression\")\n },\n body: {\n validate: (0, _utils.assertNodeType)(\"Statement\")\n }\n }\n});\n(0, _utils.default)(\"WithStatement\", {\n visitor: [\"object\", \"body\"],\n aliases: [\"Statement\"],\n fields: {\n object: {\n validate: (0, _utils.assertNodeType)(\"Expression\")\n },\n body: {\n validate: (0, _utils.assertNodeType)(\"Statement\")\n }\n }\n});\n(0, _utils.default)(\"AssignmentPattern\", {\n visitor: [\"left\", \"right\", \"decorators\"],\n builder: [\"left\", \"right\"],\n aliases: [\"Pattern\", \"PatternLike\", \"LVal\"],\n fields: Object.assign({}, patternLikeCommon, {\n left: {\n validate: (0, _utils.assertNodeType)(\"Identifier\", \"ObjectPattern\", \"ArrayPattern\", \"MemberExpression\")\n },\n right: {\n validate: (0, _utils.assertNodeType)(\"Expression\")\n },\n decorators: {\n validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Decorator\"))),\n optional: true\n }\n })\n});\n(0, _utils.default)(\"ArrayPattern\", {\n visitor: [\"elements\", \"typeAnnotation\"],\n builder: [\"elements\"],\n aliases: [\"Pattern\", \"PatternLike\", \"LVal\"],\n fields: Object.assign({}, patternLikeCommon, {\n elements: {\n validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeOrValueType)(\"null\", \"PatternLike\")))\n },\n decorators: {\n validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Decorator\"))),\n optional: true\n }\n })\n});\n(0, _utils.default)(\"ArrowFunctionExpression\", {\n builder: [\"params\", \"body\", \"async\"],\n visitor: [\"params\", \"body\", \"returnType\", \"typeParameters\"],\n aliases: [\"Scopable\", \"Function\", \"BlockParent\", \"FunctionParent\", \"Expression\", \"Pureish\"],\n fields: Object.assign({}, functionCommon, functionTypeAnnotationCommon, {\n expression: {\n validate: (0, _utils.assertValueType)(\"boolean\")\n },\n body: {\n validate: (0, _utils.assertNodeType)(\"BlockStatement\", \"Expression\")\n }\n })\n});\n(0, _utils.default)(\"ClassBody\", {\n visitor: [\"body\"],\n fields: {\n body: {\n validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"ClassMethod\", \"ClassPrivateMethod\", \"ClassProperty\", \"ClassPrivateProperty\", \"TSDeclareMethod\", \"TSIndexSignature\")))\n }\n }\n});\n(0, _utils.default)(\"ClassExpression\", {\n builder: [\"id\", \"superClass\", \"body\", \"decorators\"],\n visitor: [\"id\", \"body\", \"superClass\", \"mixins\", \"typeParameters\", \"superTypeParameters\", \"implements\", \"decorators\"],\n aliases: [\"Scopable\", \"Class\", \"Expression\"],\n fields: {\n id: {\n validate: (0, _utils.assertNodeType)(\"Identifier\"),\n optional: true\n },\n typeParameters: {\n validate: (0, _utils.assertNodeType)(\"TypeParameterDeclaration\", \"TSTypeParameterDeclaration\", \"Noop\"),\n optional: true\n },\n body: {\n validate: (0, _utils.assertNodeType)(\"ClassBody\")\n },\n superClass: {\n optional: true,\n validate: (0, _utils.assertNodeType)(\"Expression\")\n },\n superTypeParameters: {\n validate: (0, _utils.assertNodeType)(\"TypeParameterInstantiation\", \"TSTypeParameterInstantiation\"),\n optional: true\n },\n implements: {\n validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"TSExpressionWithTypeArguments\", \"ClassImplements\"))),\n optional: true\n },\n decorators: {\n validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Decorator\"))),\n optional: true\n },\n mixins: {\n validate: (0, _utils.assertNodeType)(\"InterfaceExtends\"),\n optional: true\n }\n }\n});\n(0, _utils.default)(\"ClassDeclaration\", {\n inherits: \"ClassExpression\",\n aliases: [\"Scopable\", \"Class\", \"Statement\", \"Declaration\"],\n fields: {\n id: {\n validate: (0, _utils.assertNodeType)(\"Identifier\")\n },\n typeParameters: {\n validate: (0, _utils.assertNodeType)(\"TypeParameterDeclaration\", \"TSTypeParameterDeclaration\", \"Noop\"),\n optional: true\n },\n body: {\n validate: (0, _utils.assertNodeType)(\"ClassBody\")\n },\n superClass: {\n optional: true,\n validate: (0, _utils.assertNodeType)(\"Expression\")\n },\n superTypeParameters: {\n validate: (0, _utils.assertNodeType)(\"TypeParameterInstantiation\", \"TSTypeParameterInstantiation\"),\n optional: true\n },\n implements: {\n validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"TSExpressionWithTypeArguments\", \"ClassImplements\"))),\n optional: true\n },\n decorators: {\n validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Decorator\"))),\n optional: true\n },\n mixins: {\n validate: (0, _utils.assertNodeType)(\"InterfaceExtends\"),\n optional: true\n },\n declare: {\n validate: (0, _utils.assertValueType)(\"boolean\"),\n optional: true\n },\n abstract: {\n validate: (0, _utils.assertValueType)(\"boolean\"),\n optional: true\n }\n },\n validate: function () {\n const identifier = (0, _utils.assertNodeType)(\"Identifier\");\n return function (parent, key, node) {\n if (!process.env.BABEL_TYPES_8_BREAKING) return;\n\n if (!(0, _is.default)(\"ExportDefaultDeclaration\", parent)) {\n identifier(node, \"id\", node.id);\n }\n };\n }()\n});\n(0, _utils.default)(\"ExportAllDeclaration\", {\n visitor: [\"source\"],\n aliases: [\"Statement\", \"Declaration\", \"ModuleDeclaration\", \"ExportDeclaration\"],\n fields: {\n source: {\n validate: (0, _utils.assertNodeType)(\"StringLiteral\")\n },\n exportKind: (0, _utils.validateOptional)((0, _utils.assertOneOf)(\"type\", \"value\")),\n assertions: {\n optional: true,\n validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"ImportAttribute\")))\n }\n }\n});\n(0, _utils.default)(\"ExportDefaultDeclaration\", {\n visitor: [\"declaration\"],\n aliases: [\"Statement\", \"Declaration\", \"ModuleDeclaration\", \"ExportDeclaration\"],\n fields: {\n declaration: {\n validate: (0, _utils.assertNodeType)(\"FunctionDeclaration\", \"TSDeclareFunction\", \"ClassDeclaration\", \"Expression\")\n }\n }\n});\n(0, _utils.default)(\"ExportNamedDeclaration\", {\n visitor: [\"declaration\", \"specifiers\", \"source\"],\n aliases: [\"Statement\", \"Declaration\", \"ModuleDeclaration\", \"ExportDeclaration\"],\n fields: {\n declaration: {\n optional: true,\n validate: (0, _utils.chain)((0, _utils.assertNodeType)(\"Declaration\"), Object.assign(function (node, key, val) {\n if (!process.env.BABEL_TYPES_8_BREAKING) return;\n\n if (val && node.specifiers.length) {\n throw new TypeError(\"Only declaration or specifiers is allowed on ExportNamedDeclaration\");\n }\n }, {\n oneOfNodeTypes: [\"Declaration\"]\n }), function (node, key, val) {\n if (!process.env.BABEL_TYPES_8_BREAKING) return;\n\n if (val && node.source) {\n throw new TypeError(\"Cannot export a declaration from a source\");\n }\n })\n },\n assertions: {\n optional: true,\n validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"ImportAttribute\")))\n },\n specifiers: {\n default: [],\n validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)(function () {\n const sourced = (0, _utils.assertNodeType)(\"ExportSpecifier\", \"ExportDefaultSpecifier\", \"ExportNamespaceSpecifier\");\n const sourceless = (0, _utils.assertNodeType)(\"ExportSpecifier\");\n if (!process.env.BABEL_TYPES_8_BREAKING) return sourced;\n return function (node, key, val) {\n const validator = node.source ? sourced : sourceless;\n validator(node, key, val);\n };\n }()))\n },\n source: {\n validate: (0, _utils.assertNodeType)(\"StringLiteral\"),\n optional: true\n },\n exportKind: (0, _utils.validateOptional)((0, _utils.assertOneOf)(\"type\", \"value\"))\n }\n});\n(0, _utils.default)(\"ExportSpecifier\", {\n visitor: [\"local\", \"exported\"],\n aliases: [\"ModuleSpecifier\"],\n fields: {\n local: {\n validate: (0, _utils.assertNodeType)(\"Identifier\")\n },\n exported: {\n validate: (0, _utils.assertNodeType)(\"Identifier\", \"StringLiteral\")\n }\n }\n});\n(0, _utils.default)(\"ForOfStatement\", {\n visitor: [\"left\", \"right\", \"body\"],\n builder: [\"left\", \"right\", \"body\", \"await\"],\n aliases: [\"Scopable\", \"Statement\", \"For\", \"BlockParent\", \"Loop\", \"ForXStatement\"],\n fields: {\n left: {\n validate: function () {\n if (!process.env.BABEL_TYPES_8_BREAKING) {\n return (0, _utils.assertNodeType)(\"VariableDeclaration\", \"LVal\");\n }\n\n const declaration = (0, _utils.assertNodeType)(\"VariableDeclaration\");\n const lval = (0, _utils.assertNodeType)(\"Identifier\", \"MemberExpression\", \"ArrayPattern\", \"ObjectPattern\");\n return function (node, key, val) {\n if ((0, _is.default)(\"VariableDeclaration\", val)) {\n declaration(node, key, val);\n } else {\n lval(node, key, val);\n }\n };\n }()\n },\n right: {\n validate: (0, _utils.assertNodeType)(\"Expression\")\n },\n body: {\n validate: (0, _utils.assertNodeType)(\"Statement\")\n },\n await: {\n default: false\n }\n }\n});\n(0, _utils.default)(\"ImportDeclaration\", {\n visitor: [\"specifiers\", \"source\"],\n aliases: [\"Statement\", \"Declaration\", \"ModuleDeclaration\"],\n fields: {\n assertions: {\n optional: true,\n validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"ImportAttribute\")))\n },\n specifiers: {\n validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"ImportSpecifier\", \"ImportDefaultSpecifier\", \"ImportNamespaceSpecifier\")))\n },\n source: {\n validate: (0, _utils.assertNodeType)(\"StringLiteral\")\n },\n importKind: {\n validate: (0, _utils.assertOneOf)(\"type\", \"typeof\", \"value\"),\n optional: true\n }\n }\n});\n(0, _utils.default)(\"ImportDefaultSpecifier\", {\n visitor: [\"local\"],\n aliases: [\"ModuleSpecifier\"],\n fields: {\n local: {\n validate: (0, _utils.assertNodeType)(\"Identifier\")\n }\n }\n});\n(0, _utils.default)(\"ImportNamespaceSpecifier\", {\n visitor: [\"local\"],\n aliases: [\"ModuleSpecifier\"],\n fields: {\n local: {\n validate: (0, _utils.assertNodeType)(\"Identifier\")\n }\n }\n});\n(0, _utils.default)(\"ImportSpecifier\", {\n visitor: [\"local\", \"imported\"],\n aliases: [\"ModuleSpecifier\"],\n fields: {\n local: {\n validate: (0, _utils.assertNodeType)(\"Identifier\")\n },\n imported: {\n validate: (0, _utils.assertNodeType)(\"Identifier\", \"StringLiteral\")\n },\n importKind: {\n validate: (0, _utils.assertOneOf)(\"type\", \"typeof\"),\n optional: true\n }\n }\n});\n(0, _utils.default)(\"MetaProperty\", {\n visitor: [\"meta\", \"property\"],\n aliases: [\"Expression\"],\n fields: {\n meta: {\n validate: (0, _utils.chain)((0, _utils.assertNodeType)(\"Identifier\"), Object.assign(function (node, key, val) {\n if (!process.env.BABEL_TYPES_8_BREAKING) return;\n let property;\n\n switch (val.name) {\n case \"function\":\n property = \"sent\";\n break;\n\n case \"new\":\n property = \"target\";\n break;\n\n case \"import\":\n property = \"meta\";\n break;\n }\n\n if (!(0, _is.default)(\"Identifier\", node.property, {\n name: property\n })) {\n throw new TypeError(\"Unrecognised MetaProperty\");\n }\n }, {\n oneOfNodeTypes: [\"Identifier\"]\n }))\n },\n property: {\n validate: (0, _utils.assertNodeType)(\"Identifier\")\n }\n }\n});\nconst classMethodOrPropertyCommon = {\n abstract: {\n validate: (0, _utils.assertValueType)(\"boolean\"),\n optional: true\n },\n accessibility: {\n validate: (0, _utils.assertOneOf)(\"public\", \"private\", \"protected\"),\n optional: true\n },\n static: {\n default: false\n },\n override: {\n default: false\n },\n computed: {\n default: false\n },\n optional: {\n validate: (0, _utils.assertValueType)(\"boolean\"),\n optional: true\n },\n key: {\n validate: (0, _utils.chain)(function () {\n const normal = (0, _utils.assertNodeType)(\"Identifier\", \"StringLiteral\", \"NumericLiteral\");\n const computed = (0, _utils.assertNodeType)(\"Expression\");\n return function (node, key, val) {\n const validator = node.computed ? computed : normal;\n validator(node, key, val);\n };\n }(), (0, _utils.assertNodeType)(\"Identifier\", \"StringLiteral\", \"NumericLiteral\", \"Expression\"))\n }\n};\nexports.classMethodOrPropertyCommon = classMethodOrPropertyCommon;\nconst classMethodOrDeclareMethodCommon = Object.assign({}, functionCommon, classMethodOrPropertyCommon, {\n params: {\n validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Identifier\", \"Pattern\", \"RestElement\", \"TSParameterProperty\")))\n },\n kind: {\n validate: (0, _utils.assertOneOf)(\"get\", \"set\", \"method\", \"constructor\"),\n default: \"method\"\n },\n access: {\n validate: (0, _utils.chain)((0, _utils.assertValueType)(\"string\"), (0, _utils.assertOneOf)(\"public\", \"private\", \"protected\")),\n optional: true\n },\n decorators: {\n validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Decorator\"))),\n optional: true\n }\n});\nexports.classMethodOrDeclareMethodCommon = classMethodOrDeclareMethodCommon;\n(0, _utils.default)(\"ClassMethod\", {\n aliases: [\"Function\", \"Scopable\", \"BlockParent\", \"FunctionParent\", \"Method\"],\n builder: [\"kind\", \"key\", \"params\", \"body\", \"computed\", \"static\", \"generator\", \"async\"],\n visitor: [\"key\", \"params\", \"body\", \"decorators\", \"returnType\", \"typeParameters\"],\n fields: Object.assign({}, classMethodOrDeclareMethodCommon, functionTypeAnnotationCommon, {\n body: {\n validate: (0, _utils.assertNodeType)(\"BlockStatement\")\n }\n })\n});\n(0, _utils.default)(\"ObjectPattern\", {\n visitor: [\"properties\", \"typeAnnotation\", \"decorators\"],\n builder: [\"properties\"],\n aliases: [\"Pattern\", \"PatternLike\", \"LVal\"],\n fields: Object.assign({}, patternLikeCommon, {\n properties: {\n validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"RestElement\", \"ObjectProperty\")))\n }\n })\n});\n(0, _utils.default)(\"SpreadElement\", {\n visitor: [\"argument\"],\n aliases: [\"UnaryLike\"],\n deprecatedAlias: \"SpreadProperty\",\n fields: {\n argument: {\n validate: (0, _utils.assertNodeType)(\"Expression\")\n }\n }\n});\n(0, _utils.default)(\"Super\", {\n aliases: [\"Expression\"]\n});\n(0, _utils.default)(\"TaggedTemplateExpression\", {\n visitor: [\"tag\", \"quasi\"],\n aliases: [\"Expression\"],\n fields: {\n tag: {\n validate: (0, _utils.assertNodeType)(\"Expression\")\n },\n quasi: {\n validate: (0, _utils.assertNodeType)(\"TemplateLiteral\")\n },\n typeParameters: {\n validate: (0, _utils.assertNodeType)(\"TypeParameterInstantiation\", \"TSTypeParameterInstantiation\"),\n optional: true\n }\n }\n});\n(0, _utils.default)(\"TemplateElement\", {\n builder: [\"value\", \"tail\"],\n fields: {\n value: {\n validate: (0, _utils.assertShape)({\n raw: {\n validate: (0, _utils.assertValueType)(\"string\")\n },\n cooked: {\n validate: (0, _utils.assertValueType)(\"string\"),\n optional: true\n }\n })\n },\n tail: {\n default: false\n }\n }\n});\n(0, _utils.default)(\"TemplateLiteral\", {\n visitor: [\"quasis\", \"expressions\"],\n aliases: [\"Expression\", \"Literal\"],\n fields: {\n quasis: {\n validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"TemplateElement\")))\n },\n expressions: {\n validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Expression\", \"TSType\")), function (node, key, val) {\n if (node.quasis.length !== val.length + 1) {\n throw new TypeError(`Number of ${node.type} quasis should be exactly one more than the number of expressions.\\nExpected ${val.length + 1} quasis but got ${node.quasis.length}`);\n }\n })\n }\n }\n});\n(0, _utils.default)(\"YieldExpression\", {\n builder: [\"argument\", \"delegate\"],\n visitor: [\"argument\"],\n aliases: [\"Expression\", \"Terminatorless\"],\n fields: {\n delegate: {\n validate: (0, _utils.chain)((0, _utils.assertValueType)(\"boolean\"), Object.assign(function (node, key, val) {\n if (!process.env.BABEL_TYPES_8_BREAKING) return;\n\n if (val && !node.argument) {\n throw new TypeError(\"Property delegate of YieldExpression cannot be true if there is no argument\");\n }\n }, {\n type: \"boolean\"\n })),\n default: false\n },\n argument: {\n optional: true,\n validate: (0, _utils.assertNodeType)(\"Expression\")\n }\n }\n});\n(0, _utils.default)(\"AwaitExpression\", {\n builder: [\"argument\"],\n visitor: [\"argument\"],\n aliases: [\"Expression\", \"Terminatorless\"],\n fields: {\n argument: {\n validate: (0, _utils.assertNodeType)(\"Expression\")\n }\n }\n});\n(0, _utils.default)(\"Import\", {\n aliases: [\"Expression\"]\n});\n(0, _utils.default)(\"BigIntLiteral\", {\n builder: [\"value\"],\n fields: {\n value: {\n validate: (0, _utils.assertValueType)(\"string\")\n }\n },\n aliases: [\"Expression\", \"Pureish\", \"Literal\", \"Immutable\"]\n});\n(0, _utils.default)(\"ExportNamespaceSpecifier\", {\n visitor: [\"exported\"],\n aliases: [\"ModuleSpecifier\"],\n fields: {\n exported: {\n validate: (0, _utils.assertNodeType)(\"Identifier\")\n }\n }\n});\n(0, _utils.default)(\"OptionalMemberExpression\", {\n builder: [\"object\", \"property\", \"computed\", \"optional\"],\n visitor: [\"object\", \"property\"],\n aliases: [\"Expression\"],\n fields: {\n object: {\n validate: (0, _utils.assertNodeType)(\"Expression\")\n },\n property: {\n validate: function () {\n const normal = (0, _utils.assertNodeType)(\"Identifier\");\n const computed = (0, _utils.assertNodeType)(\"Expression\");\n\n const validator = function (node, key, val) {\n const validator = node.computed ? computed : normal;\n validator(node, key, val);\n };\n\n validator.oneOfNodeTypes = [\"Expression\", \"Identifier\"];\n return validator;\n }()\n },\n computed: {\n default: false\n },\n optional: {\n validate: !process.env.BABEL_TYPES_8_BREAKING ? (0, _utils.assertValueType)(\"boolean\") : (0, _utils.chain)((0, _utils.assertValueType)(\"boolean\"), (0, _utils.assertOptionalChainStart)())\n }\n }\n});\n(0, _utils.default)(\"OptionalCallExpression\", {\n visitor: [\"callee\", \"arguments\", \"typeParameters\", \"typeArguments\"],\n builder: [\"callee\", \"arguments\", \"optional\"],\n aliases: [\"Expression\"],\n fields: {\n callee: {\n validate: (0, _utils.assertNodeType)(\"Expression\")\n },\n arguments: {\n validate: (0, _utils.chain)((0, _utils.assertValueType)(\"array\"), (0, _utils.assertEach)((0, _utils.assertNodeType)(\"Expression\", \"SpreadElement\", \"JSXNamespacedName\", \"ArgumentPlaceholder\")))\n },\n optional: {\n validate: !process.env.BABEL_TYPES_8_BREAKING ? (0, _utils.assertValueType)(\"boolean\") : (0, _utils.chain)((0, _utils.assertValueType)(\"boolean\"), (0, _utils.assertOptionalChainStart)())\n },\n typeArguments: {\n validate: (0, _utils.assertNodeType)(\"TypeParameterInstantiation\"),\n optional: true\n },\n typeParameters: {\n validate: (0, _utils.assertNodeType)(\"TSTypeParameterInstantiation\"),\n optional: true\n }\n }\n});","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = isType;\n\nvar _definitions = require(\"../definitions\");\n\nfunction isType(nodeType, targetType) {\n if (nodeType === targetType) return true;\n if (_definitions.ALIAS_KEYS[targetType]) return false;\n const aliases = _definitions.FLIPPED_ALIAS_KEYS[targetType];\n\n if (aliases) {\n if (aliases[0] === nodeType) return true;\n\n for (const alias of aliases) {\n if (nodeType === alias) return true;\n }\n }\n\n return false;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = validate;\nexports.validateField = validateField;\nexports.validateChild = validateChild;\n\nvar _definitions = require(\"../definitions\");\n\nfunction validate(node, key, val) {\n if (!node) return;\n const fields = _definitions.NODE_FIELDS[node.type];\n if (!fields) return;\n const field = fields[key];\n validateField(node, key, val, field);\n validateChild(node, key, val);\n}\n\nfunction validateField(node, key, val, field) {\n if (!(field != null && field.validate)) return;\n if (field.optional && val == null) return;\n field.validate(node, key, val);\n}\n\nfunction validateChild(node, key, val) {\n if (val == null) return;\n const validate = _definitions.NODE_PARENT_VALIDATIONS[val.type];\n if (!validate) return;\n validate(node, key, val);\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = inherit;\n\nfunction inherit(key, child, parent) {\n if (child && parent) {\n child[key] = Array.from(new Set([].concat(child[key], parent[key]).filter(Boolean)));\n }\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = splitExportDeclaration;\n\nvar t = require(\"@babel/types\");\n\nfunction splitExportDeclaration(exportDeclaration) {\n if (!exportDeclaration.isExportDeclaration()) {\n throw new Error(\"Only export declarations can be split.\");\n }\n\n const isDefault = exportDeclaration.isExportDefaultDeclaration();\n const declaration = exportDeclaration.get(\"declaration\");\n const isClassDeclaration = declaration.isClassDeclaration();\n\n if (isDefault) {\n const standaloneDeclaration = declaration.isFunctionDeclaration() || isClassDeclaration;\n const scope = declaration.isScope() ? declaration.scope.parent : declaration.scope;\n let id = declaration.node.id;\n let needBindingRegistration = false;\n\n if (!id) {\n needBindingRegistration = true;\n id = scope.generateUidIdentifier(\"default\");\n\n if (standaloneDeclaration || declaration.isFunctionExpression() || declaration.isClassExpression()) {\n declaration.node.id = t.cloneNode(id);\n }\n }\n\n const updatedDeclaration = standaloneDeclaration ? declaration : t.variableDeclaration(\"var\", [t.variableDeclarator(t.cloneNode(id), declaration.node)]);\n const updatedExportDeclaration = t.exportNamedDeclaration(null, [t.exportSpecifier(t.cloneNode(id), t.identifier(\"default\"))]);\n exportDeclaration.insertAfter(updatedExportDeclaration);\n exportDeclaration.replaceWith(updatedDeclaration);\n\n if (needBindingRegistration) {\n scope.registerDeclaration(exportDeclaration);\n }\n\n return exportDeclaration;\n }\n\n if (exportDeclaration.get(\"specifiers\").length > 0) {\n throw new Error(\"It doesn't make sense to split exported specifiers.\");\n }\n\n const bindingIdentifiers = declaration.getOuterBindingIdentifiers();\n const specifiers = Object.keys(bindingIdentifiers).map(name => {\n return t.exportSpecifier(t.identifier(name), t.identifier(name));\n });\n const aliasDeclar = t.exportNamedDeclaration(null, specifiers);\n exportDeclaration.insertAfter(aliasDeclar);\n exportDeclaration.replaceWith(declaration.node);\n return exportDeclaration;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = generate;\nexports.CodeGenerator = void 0;\n\nvar _sourceMap = require(\"./source-map\");\n\nvar _printer = require(\"./printer\");\n\nclass Generator extends _printer.default {\n constructor(ast, opts = {}, code) {\n const format = normalizeOptions(code, opts);\n const map = opts.sourceMaps ? new _sourceMap.default(opts, code) : null;\n super(format, map);\n this.ast = void 0;\n this.ast = ast;\n }\n\n generate() {\n return super.generate(this.ast);\n }\n\n}\n\nfunction normalizeOptions(code, opts) {\n const format = {\n auxiliaryCommentBefore: opts.auxiliaryCommentBefore,\n auxiliaryCommentAfter: opts.auxiliaryCommentAfter,\n shouldPrintComment: opts.shouldPrintComment,\n retainLines: opts.retainLines,\n retainFunctionParens: opts.retainFunctionParens,\n comments: opts.comments == null || opts.comments,\n compact: opts.compact,\n minified: opts.minified,\n concise: opts.concise,\n indent: {\n adjustMultilineComment: true,\n style: \" \",\n base: 0\n },\n decoratorsBeforeExport: !!opts.decoratorsBeforeExport,\n jsescOption: Object.assign({\n quotes: \"double\",\n wrap: true,\n minimal: false\n }, opts.jsescOption),\n recordAndTupleSyntaxType: opts.recordAndTupleSyntaxType\n };\n {\n format.jsonCompatibleStrings = opts.jsonCompatibleStrings;\n }\n\n if (format.minified) {\n format.compact = true;\n\n format.shouldPrintComment = format.shouldPrintComment || (() => format.comments);\n } else {\n format.shouldPrintComment = format.shouldPrintComment || (value => format.comments || value.indexOf(\"@license\") >= 0 || value.indexOf(\"@preserve\") >= 0);\n }\n\n if (format.compact === \"auto\") {\n format.compact = code.length > 500000;\n\n if (format.compact) {\n console.error(\"[BABEL] Note: The code generator has deoptimised the styling of \" + `${opts.filename} as it exceeds the max of ${\"500KB\"}.`);\n }\n }\n\n if (format.compact) {\n format.indent.adjustMultilineComment = false;\n }\n\n return format;\n}\n\nclass CodeGenerator {\n constructor(ast, opts, code) {\n this._generator = void 0;\n this._generator = new Generator(ast, opts, code);\n }\n\n generate() {\n return this._generator.generate();\n }\n\n}\n\nexports.CodeGenerator = CodeGenerator;\n\nfunction generate(ast, opts, code) {\n const gen = new Generator(ast, opts, code);\n return gen.generate();\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\n\nvar _helperGetFunctionArity = require(\"@babel/helper-get-function-arity\");\n\nvar _template = require(\"@babel/template\");\n\nvar t = require(\"@babel/types\");\n\nconst buildPropertyMethodAssignmentWrapper = (0, _template.default)(`\n (function (FUNCTION_KEY) {\n function FUNCTION_ID() {\n return FUNCTION_KEY.apply(this, arguments);\n }\n\n FUNCTION_ID.toString = function () {\n return FUNCTION_KEY.toString();\n }\n\n return FUNCTION_ID;\n })(FUNCTION)\n`);\nconst buildGeneratorPropertyMethodAssignmentWrapper = (0, _template.default)(`\n (function (FUNCTION_KEY) {\n function* FUNCTION_ID() {\n return yield* FUNCTION_KEY.apply(this, arguments);\n }\n\n FUNCTION_ID.toString = function () {\n return FUNCTION_KEY.toString();\n };\n\n return FUNCTION_ID;\n })(FUNCTION)\n`);\nconst visitor = {\n \"ReferencedIdentifier|BindingIdentifier\"(path, state) {\n if (path.node.name !== state.name) return;\n const localDeclar = path.scope.getBindingIdentifier(state.name);\n if (localDeclar !== state.outerDeclar) return;\n state.selfReference = true;\n path.stop();\n }\n\n};\n\nfunction getNameFromLiteralId(id) {\n if (t.isNullLiteral(id)) {\n return \"null\";\n }\n\n if (t.isRegExpLiteral(id)) {\n return `_${id.pattern}_${id.flags}`;\n }\n\n if (t.isTemplateLiteral(id)) {\n return id.quasis.map(quasi => quasi.value.raw).join(\"\");\n }\n\n if (id.value !== undefined) {\n return id.value + \"\";\n }\n\n return \"\";\n}\n\nfunction wrap(state, method, id, scope) {\n if (state.selfReference) {\n if (scope.hasBinding(id.name) && !scope.hasGlobal(id.name)) {\n scope.rename(id.name);\n } else {\n if (!t.isFunction(method)) return;\n let build = buildPropertyMethodAssignmentWrapper;\n\n if (method.generator) {\n build = buildGeneratorPropertyMethodAssignmentWrapper;\n }\n\n const template = build({\n FUNCTION: method,\n FUNCTION_ID: id,\n FUNCTION_KEY: scope.generateUidIdentifier(id.name)\n }).expression;\n const params = template.callee.body.body[0].params;\n\n for (let i = 0, len = (0, _helperGetFunctionArity.default)(method); i < len; i++) {\n params.push(scope.generateUidIdentifier(\"x\"));\n }\n\n return template;\n }\n }\n\n method.id = id;\n scope.getProgramParent().references[id.name] = true;\n}\n\nfunction visit(node, name, scope) {\n const state = {\n selfAssignment: false,\n selfReference: false,\n outerDeclar: scope.getBindingIdentifier(name),\n references: [],\n name: name\n };\n const binding = scope.getOwnBinding(name);\n\n if (binding) {\n if (binding.kind === \"param\") {\n state.selfReference = true;\n } else {}\n } else if (state.outerDeclar || scope.hasGlobal(name)) {\n scope.traverse(node, visitor, state);\n }\n\n return state;\n}\n\nfunction _default({\n node,\n parent,\n scope,\n id\n}, localBinding = false) {\n if (node.id) return;\n\n if ((t.isObjectProperty(parent) || t.isObjectMethod(parent, {\n kind: \"method\"\n })) && (!parent.computed || t.isLiteral(parent.key))) {\n id = parent.key;\n } else if (t.isVariableDeclarator(parent)) {\n id = parent.id;\n\n if (t.isIdentifier(id) && !localBinding) {\n const binding = scope.parent.getBinding(id.name);\n\n if (binding && binding.constant && scope.getBinding(id.name) === binding) {\n node.id = t.cloneNode(id);\n node.id[t.NOT_LOCAL_BINDING] = true;\n return;\n }\n }\n } else if (t.isAssignmentExpression(parent, {\n operator: \"=\"\n })) {\n id = parent.left;\n } else if (!id) {\n return;\n }\n\n let name;\n\n if (id && t.isLiteral(id)) {\n name = getNameFromLiteralId(id);\n } else if (id && t.isIdentifier(id)) {\n name = id.name;\n }\n\n if (name === undefined) {\n return;\n }\n\n name = t.toBindingIdentifierName(name);\n id = t.identifier(name);\n id[t.NOT_LOCAL_BINDING] = true;\n const state = visit(node, name, scope);\n return wrap(state, node, id, scope) || node;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.merge = merge;\nexports.validate = validate;\nexports.normalizeReplacements = normalizeReplacements;\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction merge(a, b) {\n const {\n placeholderWhitelist = a.placeholderWhitelist,\n placeholderPattern = a.placeholderPattern,\n preserveComments = a.preserveComments,\n syntacticPlaceholders = a.syntacticPlaceholders\n } = b;\n return {\n parser: Object.assign({}, a.parser, b.parser),\n placeholderWhitelist,\n placeholderPattern,\n preserveComments,\n syntacticPlaceholders\n };\n}\n\nfunction validate(opts) {\n if (opts != null && typeof opts !== \"object\") {\n throw new Error(\"Unknown template options.\");\n }\n\n const _ref = opts || {},\n {\n placeholderWhitelist,\n placeholderPattern,\n preserveComments,\n syntacticPlaceholders\n } = _ref,\n parser = _objectWithoutPropertiesLoose(_ref, [\"placeholderWhitelist\", \"placeholderPattern\", \"preserveComments\", \"syntacticPlaceholders\"]);\n\n if (placeholderWhitelist != null && !(placeholderWhitelist instanceof Set)) {\n throw new Error(\"'.placeholderWhitelist' must be a Set, null, or undefined\");\n }\n\n if (placeholderPattern != null && !(placeholderPattern instanceof RegExp) && placeholderPattern !== false) {\n throw new Error(\"'.placeholderPattern' must be a RegExp, false, null, or undefined\");\n }\n\n if (preserveComments != null && typeof preserveComments !== \"boolean\") {\n throw new Error(\"'.preserveComments' must be a boolean, null, or undefined\");\n }\n\n if (syntacticPlaceholders != null && typeof syntacticPlaceholders !== \"boolean\") {\n throw new Error(\"'.syntacticPlaceholders' must be a boolean, null, or undefined\");\n }\n\n if (syntacticPlaceholders === true && (placeholderWhitelist != null || placeholderPattern != null)) {\n throw new Error(\"'.placeholderWhitelist' and '.placeholderPattern' aren't compatible\" + \" with '.syntacticPlaceholders: true'\");\n }\n\n return {\n parser,\n placeholderWhitelist: placeholderWhitelist || undefined,\n placeholderPattern: placeholderPattern == null ? undefined : placeholderPattern,\n preserveComments: preserveComments == null ? undefined : preserveComments,\n syntacticPlaceholders: syntacticPlaceholders == null ? undefined : syntacticPlaceholders\n };\n}\n\nfunction normalizeReplacements(replacements) {\n if (Array.isArray(replacements)) {\n return replacements.reduce((acc, replacement, i) => {\n acc[\"$\" + i] = replacement;\n return acc;\n }, {});\n } else if (typeof replacements === \"object\" || replacements == null) {\n return replacements || undefined;\n }\n\n throw new Error(\"Template replacements must be an array, object, null, or undefined\");\n}","\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toString = Object.prototype.toString;\n\nmodule.exports = function forEach (obj, fn, ctx) {\n if (toString.call(fn) !== '[object Function]') {\n throw new TypeError('iterator must be a function');\n }\n var l = obj.length;\n if (l === +l) {\n for (var i = 0; i < l; i++) {\n fn.call(ctx, obj[i], i, obj);\n }\n } else {\n for (var k in obj) {\n if (hasOwn.call(obj, k)) {\n fn.call(ctx, obj[k], k, obj);\n }\n }\n }\n};\n\n","'use strict';\n\nvar possibleNames = [\n\t'BigInt64Array',\n\t'BigUint64Array',\n\t'Float32Array',\n\t'Float64Array',\n\t'Int16Array',\n\t'Int32Array',\n\t'Int8Array',\n\t'Uint16Array',\n\t'Uint32Array',\n\t'Uint8Array',\n\t'Uint8ClampedArray'\n];\n\nmodule.exports = function availableTypedArrays() {\n\tvar out = [];\n\tfor (var i = 0; i < possibleNames.length; i++) {\n\t\tif (typeof global[possibleNames[i]] === 'function') {\n\t\t\tout[out.length] = possibleNames[i];\n\t\t}\n\t}\n\treturn out;\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%');\nif ($gOPD) {\n\ttry {\n\t\t$gOPD([], 'length');\n\t} catch (e) {\n\t\t// IE 8 has a broken gOPD\n\t\t$gOPD = null;\n\t}\n}\n\nmodule.exports = $gOPD;\n","'use strict';\n\nvar forEach = require('foreach');\nvar availableTypedArrays = require('available-typed-arrays');\nvar callBound = require('call-bind/callBound');\n\nvar $toString = callBound('Object.prototype.toString');\nvar hasSymbols = require('has-symbols')();\nvar hasToStringTag = hasSymbols && typeof Symbol.toStringTag === 'symbol';\n\nvar typedArrays = availableTypedArrays();\n\nvar $indexOf = callBound('Array.prototype.indexOf', true) || function indexOf(array, value) {\n\tfor (var i = 0; i < array.length; i += 1) {\n\t\tif (array[i] === value) {\n\t\t\treturn i;\n\t\t}\n\t}\n\treturn -1;\n};\nvar $slice = callBound('String.prototype.slice');\nvar toStrTags = {};\nvar gOPD = require('es-abstract/helpers/getOwnPropertyDescriptor');\nvar getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof');\nif (hasToStringTag && gOPD && getPrototypeOf) {\n\tforEach(typedArrays, function (typedArray) {\n\t\tvar arr = new global[typedArray]();\n\t\tif (!(Symbol.toStringTag in arr)) {\n\t\t\tthrow new EvalError('this engine has support for Symbol.toStringTag, but ' + typedArray + ' does not have the property! Please report this.');\n\t\t}\n\t\tvar proto = getPrototypeOf(arr);\n\t\tvar descriptor = gOPD(proto, Symbol.toStringTag);\n\t\tif (!descriptor) {\n\t\t\tvar superProto = getPrototypeOf(proto);\n\t\t\tdescriptor = gOPD(superProto, Symbol.toStringTag);\n\t\t}\n\t\ttoStrTags[typedArray] = descriptor.get;\n\t});\n}\n\nvar tryTypedArrays = function tryAllTypedArrays(value) {\n\tvar anyTrue = false;\n\tforEach(toStrTags, function (getter, typedArray) {\n\t\tif (!anyTrue) {\n\t\t\ttry {\n\t\t\t\tanyTrue = getter.call(value) === typedArray;\n\t\t\t} catch (e) { /**/ }\n\t\t}\n\t});\n\treturn anyTrue;\n};\n\nmodule.exports = function isTypedArray(value) {\n\tif (!value || typeof value !== 'object') { return false; }\n\tif (!hasToStringTag) {\n\t\tvar tag = $slice($toString(value), 8, -1);\n\t\treturn $indexOf(typedArrays, tag) > -1;\n\t}\n\tif (!gOPD) { return false; }\n\treturn tryTypedArrays(value);\n};\n","'use strict';\n\nvar define = require('define-properties');\nvar callBind = require('call-bind');\n\nvar implementation = require('./implementation');\nvar getPolyfill = require('./polyfill');\nvar shim = require('./shim');\n\nvar polyfill = callBind(getPolyfill(), Object);\n\ndefine(polyfill, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = polyfill;\n","'use strict';\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n","'use strict';\n\nvar numberIsNaN = function (value) {\n\treturn value !== value;\n};\n\nmodule.exports = function is(a, b) {\n\tif (a === 0 && b === 0) {\n\t\treturn 1 / a === 1 / b;\n\t}\n\tif (a === b) {\n\t\treturn true;\n\t}\n\tif (numberIsNaN(a) && numberIsNaN(b)) {\n\t\treturn true;\n\t}\n\treturn false;\n};\n\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = function getPolyfill() {\n\treturn typeof Object.is === 'function' ? Object.is : implementation;\n};\n","'use strict';\n\n/* http://www.ecma-international.org/ecma-262/6.0/#sec-number.isnan */\n\nmodule.exports = function isNaN(value) {\n\treturn value !== value;\n};\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = function getPolyfill() {\n\tif (Number.isNaN && Number.isNaN(NaN) && !Number.isNaN('a')) {\n\t\treturn Number.isNaN;\n\t}\n\treturn implementation;\n};\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.addDefault = addDefault;\nexports.addNamed = addNamed;\nexports.addNamespace = addNamespace;\nexports.addSideEffect = addSideEffect;\nObject.defineProperty(exports, \"ImportInjector\", {\n enumerable: true,\n get: function () {\n return _importInjector.default;\n }\n});\nObject.defineProperty(exports, \"isModule\", {\n enumerable: true,\n get: function () {\n return _isModule.default;\n }\n});\n\nvar _importInjector = require(\"./import-injector\");\n\nvar _isModule = require(\"./is-module\");\n\nfunction addDefault(path, importedSource, opts) {\n return new _importInjector.default(path).addDefault(importedSource, opts);\n}\n\nfunction addNamed(path, name, importedSource, opts) {\n return new _importInjector.default(path).addNamed(name, importedSource, opts);\n}\n\nfunction addNamespace(path, importedSource, opts) {\n return new _importInjector.default(path).addNamespace(importedSource, opts);\n}\n\nfunction addSideEffect(path, importedSource, opts) {\n return new _importInjector.default(path).addSideEffect(importedSource, opts);\n}","const compare = require('./compare')\nconst neq = (a, b, loose) => compare(a, b, loose) !== 0\nmodule.exports = neq\n","const eq = require('./eq')\nconst neq = require('./neq')\nconst gt = require('./gt')\nconst gte = require('./gte')\nconst lt = require('./lt')\nconst lte = require('./lte')\n\nconst cmp = (a, op, b, loose) => {\n switch (op) {\n case '===':\n if (typeof a === 'object')\n a = a.version\n if (typeof b === 'object')\n b = b.version\n return a === b\n\n case '!==':\n if (typeof a === 'object')\n a = a.version\n if (typeof b === 'object')\n b = b.version\n return a !== b\n\n case '':\n case '=':\n case '==':\n return eq(a, b, loose)\n\n case '!=':\n return neq(a, b, loose)\n\n case '>':\n return gt(a, b, loose)\n\n case '>=':\n return gte(a, b, loose)\n\n case '<':\n return lt(a, b, loose)\n\n case '<=':\n return lte(a, b, loose)\n\n default:\n throw new TypeError(`Invalid operator: ${op}`)\n }\n}\nmodule.exports = cmp\n","'use strict'\n\n// A linked list to keep track of recently-used-ness\nconst Yallist = require('yallist')\n\nconst MAX = Symbol('max')\nconst LENGTH = Symbol('length')\nconst LENGTH_CALCULATOR = Symbol('lengthCalculator')\nconst ALLOW_STALE = Symbol('allowStale')\nconst MAX_AGE = Symbol('maxAge')\nconst DISPOSE = Symbol('dispose')\nconst NO_DISPOSE_ON_SET = Symbol('noDisposeOnSet')\nconst LRU_LIST = Symbol('lruList')\nconst CACHE = Symbol('cache')\nconst UPDATE_AGE_ON_GET = Symbol('updateAgeOnGet')\n\nconst naiveLength = () => 1\n\n// lruList is a yallist where the head is the youngest\n// item, and the tail is the oldest. the list contains the Hit\n// objects as the entries.\n// Each Hit object has a reference to its Yallist.Node. This\n// never changes.\n//\n// cache is a Map (or PseudoMap) that matches the keys to\n// the Yallist.Node object.\nclass LRUCache {\n constructor (options) {\n if (typeof options === 'number')\n options = { max: options }\n\n if (!options)\n options = {}\n\n if (options.max && (typeof options.max !== 'number' || options.max < 0))\n throw new TypeError('max must be a non-negative number')\n // Kind of weird to have a default max of Infinity, but oh well.\n const max = this[MAX] = options.max || Infinity\n\n const lc = options.length || naiveLength\n this[LENGTH_CALCULATOR] = (typeof lc !== 'function') ? naiveLength : lc\n this[ALLOW_STALE] = options.stale || false\n if (options.maxAge && typeof options.maxAge !== 'number')\n throw new TypeError('maxAge must be a number')\n this[MAX_AGE] = options.maxAge || 0\n this[DISPOSE] = options.dispose\n this[NO_DISPOSE_ON_SET] = options.noDisposeOnSet || false\n this[UPDATE_AGE_ON_GET] = options.updateAgeOnGet || false\n this.reset()\n }\n\n // resize the cache when the max changes.\n set max (mL) {\n if (typeof mL !== 'number' || mL < 0)\n throw new TypeError('max must be a non-negative number')\n\n this[MAX] = mL || Infinity\n trim(this)\n }\n get max () {\n return this[MAX]\n }\n\n set allowStale (allowStale) {\n this[ALLOW_STALE] = !!allowStale\n }\n get allowStale () {\n return this[ALLOW_STALE]\n }\n\n set maxAge (mA) {\n if (typeof mA !== 'number')\n throw new TypeError('maxAge must be a non-negative number')\n\n this[MAX_AGE] = mA\n trim(this)\n }\n get maxAge () {\n return this[MAX_AGE]\n }\n\n // resize the cache when the lengthCalculator changes.\n set lengthCalculator (lC) {\n if (typeof lC !== 'function')\n lC = naiveLength\n\n if (lC !== this[LENGTH_CALCULATOR]) {\n this[LENGTH_CALCULATOR] = lC\n this[LENGTH] = 0\n this[LRU_LIST].forEach(hit => {\n hit.length = this[LENGTH_CALCULATOR](hit.value, hit.key)\n this[LENGTH] += hit.length\n })\n }\n trim(this)\n }\n get lengthCalculator () { return this[LENGTH_CALCULATOR] }\n\n get length () { return this[LENGTH] }\n get itemCount () { return this[LRU_LIST].length }\n\n rforEach (fn, thisp) {\n thisp = thisp || this\n for (let walker = this[LRU_LIST].tail; walker !== null;) {\n const prev = walker.prev\n forEachStep(this, fn, walker, thisp)\n walker = prev\n }\n }\n\n forEach (fn, thisp) {\n thisp = thisp || this\n for (let walker = this[LRU_LIST].head; walker !== null;) {\n const next = walker.next\n forEachStep(this, fn, walker, thisp)\n walker = next\n }\n }\n\n keys () {\n return this[LRU_LIST].toArray().map(k => k.key)\n }\n\n values () {\n return this[LRU_LIST].toArray().map(k => k.value)\n }\n\n reset () {\n if (this[DISPOSE] &&\n this[LRU_LIST] &&\n this[LRU_LIST].length) {\n this[LRU_LIST].forEach(hit => this[DISPOSE](hit.key, hit.value))\n }\n\n this[CACHE] = new Map() // hash of items by key\n this[LRU_LIST] = new Yallist() // list of items in order of use recency\n this[LENGTH] = 0 // length of items in the list\n }\n\n dump () {\n return this[LRU_LIST].map(hit =>\n isStale(this, hit) ? false : {\n k: hit.key,\n v: hit.value,\n e: hit.now + (hit.maxAge || 0)\n }).toArray().filter(h => h)\n }\n\n dumpLru () {\n return this[LRU_LIST]\n }\n\n set (key, value, maxAge) {\n maxAge = maxAge || this[MAX_AGE]\n\n if (maxAge && typeof maxAge !== 'number')\n throw new TypeError('maxAge must be a number')\n\n const now = maxAge ? Date.now() : 0\n const len = this[LENGTH_CALCULATOR](value, key)\n\n if (this[CACHE].has(key)) {\n if (len > this[MAX]) {\n del(this, this[CACHE].get(key))\n return false\n }\n\n const node = this[CACHE].get(key)\n const item = node.value\n\n // dispose of the old one before overwriting\n // split out into 2 ifs for better coverage tracking\n if (this[DISPOSE]) {\n if (!this[NO_DISPOSE_ON_SET])\n this[DISPOSE](key, item.value)\n }\n\n item.now = now\n item.maxAge = maxAge\n item.value = value\n this[LENGTH] += len - item.length\n item.length = len\n this.get(key)\n trim(this)\n return true\n }\n\n const hit = new Entry(key, value, len, now, maxAge)\n\n // oversized objects fall out of cache automatically.\n if (hit.length > this[MAX]) {\n if (this[DISPOSE])\n this[DISPOSE](key, value)\n\n return false\n }\n\n this[LENGTH] += hit.length\n this[LRU_LIST].unshift(hit)\n this[CACHE].set(key, this[LRU_LIST].head)\n trim(this)\n return true\n }\n\n has (key) {\n if (!this[CACHE].has(key)) return false\n const hit = this[CACHE].get(key).value\n return !isStale(this, hit)\n }\n\n get (key) {\n return get(this, key, true)\n }\n\n peek (key) {\n return get(this, key, false)\n }\n\n pop () {\n const node = this[LRU_LIST].tail\n if (!node)\n return null\n\n del(this, node)\n return node.value\n }\n\n del (key) {\n del(this, this[CACHE].get(key))\n }\n\n load (arr) {\n // reset the cache\n this.reset()\n\n const now = Date.now()\n // A previous serialized cache has the most recent items first\n for (let l = arr.length - 1; l >= 0; l--) {\n const hit = arr[l]\n const expiresAt = hit.e || 0\n if (expiresAt === 0)\n // the item was created without expiration in a non aged cache\n this.set(hit.k, hit.v)\n else {\n const maxAge = expiresAt - now\n // dont add already expired items\n if (maxAge > 0) {\n this.set(hit.k, hit.v, maxAge)\n }\n }\n }\n }\n\n prune () {\n this[CACHE].forEach((value, key) => get(this, key, false))\n }\n}\n\nconst get = (self, key, doUse) => {\n const node = self[CACHE].get(key)\n if (node) {\n const hit = node.value\n if (isStale(self, hit)) {\n del(self, node)\n if (!self[ALLOW_STALE])\n return undefined\n } else {\n if (doUse) {\n if (self[UPDATE_AGE_ON_GET])\n node.value.now = Date.now()\n self[LRU_LIST].unshiftNode(node)\n }\n }\n return hit.value\n }\n}\n\nconst isStale = (self, hit) => {\n if (!hit || (!hit.maxAge && !self[MAX_AGE]))\n return false\n\n const diff = Date.now() - hit.now\n return hit.maxAge ? diff > hit.maxAge\n : self[MAX_AGE] && (diff > self[MAX_AGE])\n}\n\nconst trim = self => {\n if (self[LENGTH] > self[MAX]) {\n for (let walker = self[LRU_LIST].tail;\n self[LENGTH] > self[MAX] && walker !== null;) {\n // We know that we're about to delete this one, and also\n // what the next least recently used key will be, so just\n // go ahead and set it now.\n const prev = walker.prev\n del(self, walker)\n walker = prev\n }\n }\n}\n\nconst del = (self, node) => {\n if (node) {\n const hit = node.value\n if (self[DISPOSE])\n self[DISPOSE](hit.key, hit.value)\n\n self[LENGTH] -= hit.length\n self[CACHE].delete(hit.key)\n self[LRU_LIST].removeNode(node)\n }\n}\n\nclass Entry {\n constructor (key, value, length, now, maxAge) {\n this.key = key\n this.value = value\n this.length = length\n this.now = now\n this.maxAge = maxAge || 0\n }\n}\n\nconst forEachStep = (self, fn, node, thisp) => {\n let hit = node.value\n if (isStale(self, hit)) {\n del(self, node)\n if (!self[ALLOW_STALE])\n hit = undefined\n }\n if (hit)\n fn.call(thisp, hit.value, hit.key, self)\n}\n\nmodule.exports = LRUCache\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.mergeOptions = mergeOptions;\nexports.isIterableIterator = isIterableIterator;\n\nfunction mergeOptions(target, source) {\n for (const k of Object.keys(source)) {\n if ((k === \"parserOpts\" || k === \"generatorOpts\" || k === \"assumptions\") && source[k]) {\n const parserOpts = source[k];\n const targetObj = target[k] || (target[k] = {});\n mergeDefaultFields(targetObj, parserOpts);\n } else {\n const val = source[k];\n if (val !== undefined) target[k] = val;\n }\n }\n}\n\nfunction mergeDefaultFields(target, source) {\n for (const k of Object.keys(source)) {\n const val = source[k];\n if (val !== undefined) target[k] = val;\n }\n}\n\nfunction isIterableIterator(value) {\n return !!value && typeof value.next === \"function\" && typeof value[Symbol.iterator] === \"function\";\n}","function BrowserslistError (message) {\n this.name = 'BrowserslistError'\n this.message = message\n this.browserslist = true\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, BrowserslistError)\n }\n}\n\nBrowserslistError.prototype = Error.prototype\n\nmodule.exports = BrowserslistError\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.semverMin = semverMin;\nexports.semverify = semverify;\nexports.isUnreleasedVersion = isUnreleasedVersion;\nexports.getLowestUnreleased = getLowestUnreleased;\nexports.getHighestUnreleased = getHighestUnreleased;\nexports.getLowestImplementedVersion = getLowestImplementedVersion;\n\nvar _semver = require(\"semver\");\n\nvar _helperValidatorOption = require(\"@babel/helper-validator-option\");\n\nvar _targets = require(\"./targets\");\n\nconst versionRegExp = /^(\\d+|\\d+.\\d+)$/;\nconst v = new _helperValidatorOption.OptionValidator(\"@babel/helper-compilation-targets\");\n\nfunction semverMin(first, second) {\n return first && _semver.lt(first, second) ? first : second;\n}\n\nfunction semverify(version) {\n if (typeof version === \"string\" && _semver.valid(version)) {\n return version;\n }\n\n v.invariant(typeof version === \"number\" || typeof version === \"string\" && versionRegExp.test(version), `'${version}' is not a valid version`);\n const split = version.toString().split(\".\");\n\n while (split.length < 3) {\n split.push(\"0\");\n }\n\n return split.join(\".\");\n}\n\nfunction isUnreleasedVersion(version, env) {\n const unreleasedLabel = _targets.unreleasedLabels[env];\n return !!unreleasedLabel && unreleasedLabel === version.toString().toLowerCase();\n}\n\nfunction getLowestUnreleased(a, b, env) {\n const unreleasedLabel = _targets.unreleasedLabels[env];\n const hasUnreleased = [a, b].some(item => item === unreleasedLabel);\n\n if (hasUnreleased) {\n return a === hasUnreleased ? b : a || b;\n }\n\n return semverMin(a, b);\n}\n\nfunction getHighestUnreleased(a, b, env) {\n return getLowestUnreleased(a, b, env) === a ? b : a;\n}\n\nfunction getLowestImplementedVersion(plugin, environment) {\n const result = plugin[environment];\n\n if (!result && environment === \"android\") {\n return plugin.chrome;\n }\n\n return result;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.browserNameMap = exports.unreleasedLabels = void 0;\nconst unreleasedLabels = {\n safari: \"tp\"\n};\nexports.unreleasedLabels = unreleasedLabels;\nconst browserNameMap = {\n and_chr: \"chrome\",\n and_ff: \"firefox\",\n android: \"android\",\n chrome: \"chrome\",\n edge: \"edge\",\n firefox: \"firefox\",\n ie: \"ie\",\n ie_mob: \"ie\",\n ios_saf: \"ios\",\n node: \"node\",\n op_mob: \"opera\",\n opera: \"opera\",\n safari: \"safari\",\n samsung: \"samsung\"\n};\nexports.browserNameMap = browserNameMap;","'use strict'\n\nmodule.exports.isClean = Symbol('isClean')\n\nmodule.exports.my = Symbol('my')\n","'use strict'\n\nconst DEFAULT_RAW = {\n colon: ': ',\n indent: ' ',\n beforeDecl: '\\n',\n beforeRule: '\\n',\n beforeOpen: ' ',\n beforeClose: '\\n',\n beforeComment: '\\n',\n after: '\\n',\n emptyBody: '',\n commentLeft: ' ',\n commentRight: ' ',\n semicolon: false\n}\n\nfunction capitalize(str) {\n return str[0].toUpperCase() + str.slice(1)\n}\n\nclass Stringifier {\n constructor(builder) {\n this.builder = builder\n }\n\n stringify(node, semicolon) {\n /* istanbul ignore if */\n if (!this[node.type]) {\n throw new Error(\n 'Unknown AST node type ' +\n node.type +\n '. ' +\n 'Maybe you need to change PostCSS stringifier.'\n )\n }\n this[node.type](node, semicolon)\n }\n\n document(node) {\n this.body(node)\n }\n\n root(node) {\n this.body(node)\n if (node.raws.after) this.builder(node.raws.after)\n }\n\n comment(node) {\n let left = this.raw(node, 'left', 'commentLeft')\n let right = this.raw(node, 'right', 'commentRight')\n this.builder('/*' + left + node.text + right + '*/', node)\n }\n\n decl(node, semicolon) {\n let between = this.raw(node, 'between', 'colon')\n let string = node.prop + between + this.rawValue(node, 'value')\n\n if (node.important) {\n string += node.raws.important || ' !important'\n }\n\n if (semicolon) string += ';'\n this.builder(string, node)\n }\n\n rule(node) {\n this.block(node, this.rawValue(node, 'selector'))\n if (node.raws.ownSemicolon) {\n this.builder(node.raws.ownSemicolon, node, 'end')\n }\n }\n\n atrule(node, semicolon) {\n let name = '@' + node.name\n let params = node.params ? this.rawValue(node, 'params') : ''\n\n if (typeof node.raws.afterName !== 'undefined') {\n name += node.raws.afterName\n } else if (params) {\n name += ' '\n }\n\n if (node.nodes) {\n this.block(node, name + params)\n } else {\n let end = (node.raws.between || '') + (semicolon ? ';' : '')\n this.builder(name + params + end, node)\n }\n }\n\n body(node) {\n let last = node.nodes.length - 1\n while (last > 0) {\n if (node.nodes[last].type !== 'comment') break\n last -= 1\n }\n\n let semicolon = this.raw(node, 'semicolon')\n for (let i = 0; i < node.nodes.length; i++) {\n let child = node.nodes[i]\n let before = this.raw(child, 'before')\n if (before) this.builder(before)\n this.stringify(child, last !== i || semicolon)\n }\n }\n\n block(node, start) {\n let between = this.raw(node, 'between', 'beforeOpen')\n this.builder(start + between + '{', node, 'start')\n\n let after\n if (node.nodes && node.nodes.length) {\n this.body(node)\n after = this.raw(node, 'after')\n } else {\n after = this.raw(node, 'after', 'emptyBody')\n }\n\n if (after) this.builder(after)\n this.builder('}', node, 'end')\n }\n\n raw(node, own, detect) {\n let value\n if (!detect) detect = own\n\n // Already had\n if (own) {\n value = node.raws[own]\n if (typeof value !== 'undefined') return value\n }\n\n let parent = node.parent\n\n if (detect === 'before') {\n // Hack for first rule in CSS\n if (!parent || (parent.type === 'root' && parent.first === node)) {\n return ''\n }\n\n // `root` nodes in `document` should use only their own raws\n if (parent && parent.type === 'document') {\n return ''\n }\n }\n\n // Floating child without parent\n if (!parent) return DEFAULT_RAW[detect]\n\n // Detect style by other nodes\n let root = node.root()\n if (!root.rawCache) root.rawCache = {}\n if (typeof root.rawCache[detect] !== 'undefined') {\n return root.rawCache[detect]\n }\n\n if (detect === 'before' || detect === 'after') {\n return this.beforeAfter(node, detect)\n } else {\n let method = 'raw' + capitalize(detect)\n if (this[method]) {\n value = this[method](root, node)\n } else {\n root.walk(i => {\n value = i.raws[own]\n if (typeof value !== 'undefined') return false\n })\n }\n }\n\n if (typeof value === 'undefined') value = DEFAULT_RAW[detect]\n\n root.rawCache[detect] = value\n return value\n }\n\n rawSemicolon(root) {\n let value\n root.walk(i => {\n if (i.nodes && i.nodes.length && i.last.type === 'decl') {\n value = i.raws.semicolon\n if (typeof value !== 'undefined') return false\n }\n })\n return value\n }\n\n rawEmptyBody(root) {\n let value\n root.walk(i => {\n if (i.nodes && i.nodes.length === 0) {\n value = i.raws.after\n if (typeof value !== 'undefined') return false\n }\n })\n return value\n }\n\n rawIndent(root) {\n if (root.raws.indent) return root.raws.indent\n let value\n root.walk(i => {\n let p = i.parent\n if (p && p !== root && p.parent && p.parent === root) {\n if (typeof i.raws.before !== 'undefined') {\n let parts = i.raws.before.split('\\n')\n value = parts[parts.length - 1]\n value = value.replace(/\\S/g, '')\n return false\n }\n }\n })\n return value\n }\n\n rawBeforeComment(root, node) {\n let value\n root.walkComments(i => {\n if (typeof i.raws.before !== 'undefined') {\n value = i.raws.before\n if (value.includes('\\n')) {\n value = value.replace(/[^\\n]+$/, '')\n }\n return false\n }\n })\n if (typeof value === 'undefined') {\n value = this.raw(node, null, 'beforeDecl')\n } else if (value) {\n value = value.replace(/\\S/g, '')\n }\n return value\n }\n\n rawBeforeDecl(root, node) {\n let value\n root.walkDecls(i => {\n if (typeof i.raws.before !== 'undefined') {\n value = i.raws.before\n if (value.includes('\\n')) {\n value = value.replace(/[^\\n]+$/, '')\n }\n return false\n }\n })\n if (typeof value === 'undefined') {\n value = this.raw(node, null, 'beforeRule')\n } else if (value) {\n value = value.replace(/\\S/g, '')\n }\n return value\n }\n\n rawBeforeRule(root) {\n let value\n root.walk(i => {\n if (i.nodes && (i.parent !== root || root.first !== i)) {\n if (typeof i.raws.before !== 'undefined') {\n value = i.raws.before\n if (value.includes('\\n')) {\n value = value.replace(/[^\\n]+$/, '')\n }\n return false\n }\n }\n })\n if (value) value = value.replace(/\\S/g, '')\n return value\n }\n\n rawBeforeClose(root) {\n let value\n root.walk(i => {\n if (i.nodes && i.nodes.length > 0) {\n if (typeof i.raws.after !== 'undefined') {\n value = i.raws.after\n if (value.includes('\\n')) {\n value = value.replace(/[^\\n]+$/, '')\n }\n return false\n }\n }\n })\n if (value) value = value.replace(/\\S/g, '')\n return value\n }\n\n rawBeforeOpen(root) {\n let value\n root.walk(i => {\n if (i.type !== 'decl') {\n value = i.raws.between\n if (typeof value !== 'undefined') return false\n }\n })\n return value\n }\n\n rawColon(root) {\n let value\n root.walkDecls(i => {\n if (typeof i.raws.between !== 'undefined') {\n value = i.raws.between.replace(/[^\\s:]/g, '')\n return false\n }\n })\n return value\n }\n\n beforeAfter(node, detect) {\n let value\n if (node.type === 'decl') {\n value = this.raw(node, null, 'beforeDecl')\n } else if (node.type === 'comment') {\n value = this.raw(node, null, 'beforeComment')\n } else if (detect === 'before') {\n value = this.raw(node, null, 'beforeRule')\n } else {\n value = this.raw(node, null, 'beforeClose')\n }\n\n let buf = node.parent\n let depth = 0\n while (buf && buf.type !== 'root') {\n depth += 1\n buf = buf.parent\n }\n\n if (value.includes('\\n')) {\n let indent = this.raw(node, null, 'indent')\n if (indent.length) {\n for (let step = 0; step < depth; step++) value += indent\n }\n }\n\n return value\n }\n\n rawValue(node, prop) {\n let value = node[prop]\n let raw = node.raws[prop]\n if (raw && raw.value === value) {\n return raw.raw\n }\n\n return value\n }\n}\n\nmodule.exports = Stringifier\n","'use strict'\n\nlet { isClean, my } = require('./symbols')\nlet MapGenerator = require('./map-generator')\nlet stringify = require('./stringify')\nlet Container = require('./container')\nlet Document = require('./document')\nlet warnOnce = require('./warn-once')\nlet Result = require('./result')\nlet parse = require('./parse')\nlet Root = require('./root')\n\nconst TYPE_TO_CLASS_NAME = {\n document: 'Document',\n root: 'Root',\n atrule: 'AtRule',\n rule: 'Rule',\n decl: 'Declaration',\n comment: 'Comment'\n}\n\nconst PLUGIN_PROPS = {\n postcssPlugin: true,\n prepare: true,\n Once: true,\n Document: true,\n Root: true,\n Declaration: true,\n Rule: true,\n AtRule: true,\n Comment: true,\n DeclarationExit: true,\n RuleExit: true,\n AtRuleExit: true,\n CommentExit: true,\n RootExit: true,\n DocumentExit: true,\n OnceExit: true\n}\n\nconst NOT_VISITORS = {\n postcssPlugin: true,\n prepare: true,\n Once: true\n}\n\nconst CHILDREN = 0\n\nfunction isPromise(obj) {\n return typeof obj === 'object' && typeof obj.then === 'function'\n}\n\nfunction getEvents(node) {\n let key = false\n let type = TYPE_TO_CLASS_NAME[node.type]\n if (node.type === 'decl') {\n key = node.prop.toLowerCase()\n } else if (node.type === 'atrule') {\n key = node.name.toLowerCase()\n }\n\n if (key && node.append) {\n return [\n type,\n type + '-' + key,\n CHILDREN,\n type + 'Exit',\n type + 'Exit-' + key\n ]\n } else if (key) {\n return [type, type + '-' + key, type + 'Exit', type + 'Exit-' + key]\n } else if (node.append) {\n return [type, CHILDREN, type + 'Exit']\n } else {\n return [type, type + 'Exit']\n }\n}\n\nfunction toStack(node) {\n let events\n if (node.type === 'document') {\n events = ['Document', CHILDREN, 'DocumentExit']\n } else if (node.type === 'root') {\n events = ['Root', CHILDREN, 'RootExit']\n } else {\n events = getEvents(node)\n }\n\n return {\n node,\n events,\n eventIndex: 0,\n visitors: [],\n visitorIndex: 0,\n iterator: 0\n }\n}\n\nfunction cleanMarks(node) {\n node[isClean] = false\n if (node.nodes) node.nodes.forEach(i => cleanMarks(i))\n return node\n}\n\nlet postcss = {}\n\nclass LazyResult {\n constructor(processor, css, opts) {\n this.stringified = false\n this.processed = false\n\n let root\n if (\n typeof css === 'object' &&\n css !== null &&\n (css.type === 'root' || css.type === 'document')\n ) {\n root = cleanMarks(css)\n } else if (css instanceof LazyResult || css instanceof Result) {\n root = cleanMarks(css.root)\n if (css.map) {\n if (typeof opts.map === 'undefined') opts.map = {}\n if (!opts.map.inline) opts.map.inline = false\n opts.map.prev = css.map\n }\n } else {\n let parser = parse\n if (opts.syntax) parser = opts.syntax.parse\n if (opts.parser) parser = opts.parser\n if (parser.parse) parser = parser.parse\n\n try {\n root = parser(css, opts)\n } catch (error) {\n this.processed = true\n this.error = error\n }\n\n if (root && !root[my]) {\n // istanbul ignore next\n Container.rebuild(root)\n }\n }\n\n this.result = new Result(processor, root, opts)\n this.helpers = { ...postcss, result: this.result, postcss }\n this.plugins = this.processor.plugins.map(plugin => {\n if (typeof plugin === 'object' && plugin.prepare) {\n return { ...plugin, ...plugin.prepare(this.result) }\n } else {\n return plugin\n }\n })\n }\n\n get [Symbol.toStringTag]() {\n return 'LazyResult'\n }\n\n get processor() {\n return this.result.processor\n }\n\n get opts() {\n return this.result.opts\n }\n\n get css() {\n return this.stringify().css\n }\n\n get content() {\n return this.stringify().content\n }\n\n get map() {\n return this.stringify().map\n }\n\n get root() {\n return this.sync().root\n }\n\n get messages() {\n return this.sync().messages\n }\n\n warnings() {\n return this.sync().warnings()\n }\n\n toString() {\n return this.css\n }\n\n then(onFulfilled, onRejected) {\n if (process.env.NODE_ENV !== 'production') {\n if (!('from' in this.opts)) {\n warnOnce(\n 'Without `from` option PostCSS could generate wrong source map ' +\n 'and will not find Browserslist config. Set it to CSS file path ' +\n 'or to `undefined` to prevent this warning.'\n )\n }\n }\n return this.async().then(onFulfilled, onRejected)\n }\n\n catch(onRejected) {\n return this.async().catch(onRejected)\n }\n\n finally(onFinally) {\n return this.async().then(onFinally, onFinally)\n }\n\n async() {\n if (this.error) return Promise.reject(this.error)\n if (this.processed) return Promise.resolve(this.result)\n if (!this.processing) {\n this.processing = this.runAsync()\n }\n return this.processing\n }\n\n sync() {\n if (this.error) throw this.error\n if (this.processed) return this.result\n this.processed = true\n\n if (this.processing) {\n throw this.getAsyncError()\n }\n\n for (let plugin of this.plugins) {\n let promise = this.runOnRoot(plugin)\n if (isPromise(promise)) {\n throw this.getAsyncError()\n }\n }\n\n this.prepareVisitors()\n if (this.hasListener) {\n let root = this.result.root\n while (!root[isClean]) {\n root[isClean] = true\n this.walkSync(root)\n }\n if (this.listeners.OnceExit) {\n if (root.type === 'document') {\n for (let subRoot of root.nodes) {\n this.visitSync(this.listeners.OnceExit, subRoot)\n }\n } else {\n this.visitSync(this.listeners.OnceExit, root)\n }\n }\n }\n\n return this.result\n }\n\n stringify() {\n if (this.error) throw this.error\n if (this.stringified) return this.result\n this.stringified = true\n\n this.sync()\n\n let opts = this.result.opts\n let str = stringify\n if (opts.syntax) str = opts.syntax.stringify\n if (opts.stringifier) str = opts.stringifier\n if (str.stringify) str = str.stringify\n\n let map = new MapGenerator(str, this.result.root, this.result.opts)\n let data = map.generate()\n this.result.css = data[0]\n this.result.map = data[1]\n\n return this.result\n }\n\n walkSync(node) {\n node[isClean] = true\n let events = getEvents(node)\n for (let event of events) {\n if (event === CHILDREN) {\n if (node.nodes) {\n node.each(child => {\n if (!child[isClean]) this.walkSync(child)\n })\n }\n } else {\n let visitors = this.listeners[event]\n if (visitors) {\n if (this.visitSync(visitors, node.toProxy())) return\n }\n }\n }\n }\n\n visitSync(visitors, node) {\n for (let [plugin, visitor] of visitors) {\n this.result.lastPlugin = plugin\n let promise\n try {\n promise = visitor(node, this.helpers)\n } catch (e) {\n throw this.handleError(e, node.proxyOf)\n }\n if (node.type !== 'root' && node.type !== 'document' && !node.parent) {\n return true\n }\n if (isPromise(promise)) {\n throw this.getAsyncError()\n }\n }\n }\n\n runOnRoot(plugin) {\n this.result.lastPlugin = plugin\n try {\n if (typeof plugin === 'object' && plugin.Once) {\n if (this.result.root.type === 'document') {\n let roots = this.result.root.nodes.map(root =>\n plugin.Once(root, this.helpers)\n )\n\n if (isPromise(roots[0])) {\n return Promise.all(roots)\n }\n\n return roots\n }\n\n return plugin.Once(this.result.root, this.helpers)\n } else if (typeof plugin === 'function') {\n return plugin(this.result.root, this.result)\n }\n } catch (error) {\n throw this.handleError(error)\n }\n }\n\n getAsyncError() {\n throw new Error('Use process(css).then(cb) to work with async plugins')\n }\n\n handleError(error, node) {\n let plugin = this.result.lastPlugin\n try {\n if (node) node.addToError(error)\n this.error = error\n if (error.name === 'CssSyntaxError' && !error.plugin) {\n error.plugin = plugin.postcssPlugin\n error.setMessage()\n } else if (plugin.postcssVersion) {\n if (process.env.NODE_ENV !== 'production') {\n let pluginName = plugin.postcssPlugin\n let pluginVer = plugin.postcssVersion\n let runtimeVer = this.result.processor.version\n let a = pluginVer.split('.')\n let b = runtimeVer.split('.')\n\n if (a[0] !== b[0] || parseInt(a[1]) > parseInt(b[1])) {\n console.error(\n 'Unknown error from PostCSS plugin. Your current PostCSS ' +\n 'version is ' +\n runtimeVer +\n ', but ' +\n pluginName +\n ' uses ' +\n pluginVer +\n '. Perhaps this is the source of the error below.'\n )\n }\n }\n }\n } catch (err) {\n // istanbul ignore next\n if (console && console.error) console.error(err)\n }\n return error\n }\n\n async runAsync() {\n this.plugin = 0\n for (let i = 0; i < this.plugins.length; i++) {\n let plugin = this.plugins[i]\n let promise = this.runOnRoot(plugin)\n if (isPromise(promise)) {\n try {\n await promise\n } catch (error) {\n throw this.handleError(error)\n }\n }\n }\n\n this.prepareVisitors()\n if (this.hasListener) {\n let root = this.result.root\n while (!root[isClean]) {\n root[isClean] = true\n let stack = [toStack(root)]\n while (stack.length > 0) {\n let promise = this.visitTick(stack)\n if (isPromise(promise)) {\n try {\n await promise\n } catch (e) {\n let node = stack[stack.length - 1].node\n throw this.handleError(e, node)\n }\n }\n }\n }\n\n if (this.listeners.OnceExit) {\n for (let [plugin, visitor] of this.listeners.OnceExit) {\n this.result.lastPlugin = plugin\n try {\n if (root.type === 'document') {\n let roots = root.nodes.map(subRoot =>\n visitor(subRoot, this.helpers)\n )\n\n await Promise.all(roots)\n } else {\n await visitor(root, this.helpers)\n }\n } catch (e) {\n throw this.handleError(e)\n }\n }\n }\n }\n\n this.processed = true\n return this.stringify()\n }\n\n prepareVisitors() {\n this.listeners = {}\n let add = (plugin, type, cb) => {\n if (!this.listeners[type]) this.listeners[type] = []\n this.listeners[type].push([plugin, cb])\n }\n for (let plugin of this.plugins) {\n if (typeof plugin === 'object') {\n for (let event in plugin) {\n if (!PLUGIN_PROPS[event] && /^[A-Z]/.test(event)) {\n throw new Error(\n `Unknown event ${event} in ${plugin.postcssPlugin}. ` +\n `Try to update PostCSS (${this.processor.version} now).`\n )\n }\n if (!NOT_VISITORS[event]) {\n if (typeof plugin[event] === 'object') {\n for (let filter in plugin[event]) {\n if (filter === '*') {\n add(plugin, event, plugin[event][filter])\n } else {\n add(\n plugin,\n event + '-' + filter.toLowerCase(),\n plugin[event][filter]\n )\n }\n }\n } else if (typeof plugin[event] === 'function') {\n add(plugin, event, plugin[event])\n }\n }\n }\n }\n }\n this.hasListener = Object.keys(this.listeners).length > 0\n }\n\n visitTick(stack) {\n let visit = stack[stack.length - 1]\n let { node, visitors } = visit\n\n if (node.type !== 'root' && node.type !== 'document' && !node.parent) {\n stack.pop()\n return\n }\n\n if (visitors.length > 0 && visit.visitorIndex < visitors.length) {\n let [plugin, visitor] = visitors[visit.visitorIndex]\n visit.visitorIndex += 1\n if (visit.visitorIndex === visitors.length) {\n visit.visitors = []\n visit.visitorIndex = 0\n }\n this.result.lastPlugin = plugin\n try {\n return visitor(node.toProxy(), this.helpers)\n } catch (e) {\n throw this.handleError(e, node)\n }\n }\n\n if (visit.iterator !== 0) {\n let iterator = visit.iterator\n let child\n while ((child = node.nodes[node.indexes[iterator]])) {\n node.indexes[iterator] += 1\n if (!child[isClean]) {\n child[isClean] = true\n stack.push(toStack(child))\n return\n }\n }\n visit.iterator = 0\n delete node.indexes[iterator]\n }\n\n let events = visit.events\n while (visit.eventIndex < events.length) {\n let event = events[visit.eventIndex]\n visit.eventIndex += 1\n if (event === CHILDREN) {\n if (node.nodes && node.nodes.length) {\n node[isClean] = true\n visit.iterator = node.getIterator()\n }\n return\n } else if (this.listeners[event]) {\n visit.visitors = this.listeners[event]\n return\n }\n }\n stack.pop()\n }\n}\n\nLazyResult.registerPostcss = dependant => {\n postcss = dependant\n}\n\nmodule.exports = LazyResult\nLazyResult.default = LazyResult\n\nRoot.registerLazyResult(LazyResult)\nDocument.registerLazyResult(LazyResult)\n","'use strict'\n\nlet Warning = require('./warning')\n\nclass Result {\n constructor(processor, root, opts) {\n this.processor = processor\n this.messages = []\n this.root = root\n this.opts = opts\n this.css = undefined\n this.map = undefined\n }\n\n toString() {\n return this.css\n }\n\n warn(text, opts = {}) {\n if (!opts.plugin) {\n if (this.lastPlugin && this.lastPlugin.postcssPlugin) {\n opts.plugin = this.lastPlugin.postcssPlugin\n }\n }\n\n let warning = new Warning(text, opts)\n this.messages.push(warning)\n\n return warning\n }\n\n warnings() {\n return this.messages.filter(i => i.type === 'warning')\n }\n\n get content() {\n return this.css\n }\n}\n\nmodule.exports = Result\nResult.default = Result\n","'use strict'\n\nclass Warning {\n constructor(text, opts = {}) {\n this.type = 'warning'\n this.text = text\n\n if (opts.node && opts.node.source) {\n let pos = opts.node.positionBy(opts)\n this.line = pos.line\n this.column = pos.column\n }\n\n for (let opt in opts) this[opt] = opts[opt]\n }\n\n toString() {\n if (this.node) {\n return this.node.error(this.text, {\n plugin: this.plugin,\n index: this.index,\n word: this.word\n }).message\n }\n\n if (this.plugin) {\n return this.plugin + ': ' + this.text\n }\n\n return this.text\n }\n}\n\nmodule.exports = Warning\nWarning.default = Warning\n","'use strict'\n\nlet Container = require('./container')\nlet Parser = require('./parser')\nlet Input = require('./input')\n\nfunction parse(css, opts) {\n let input = new Input(css, opts)\n let parser = new Parser(input)\n try {\n parser.parse()\n } catch (e) {\n if (process.env.NODE_ENV !== 'production') {\n if (e.name === 'CssSyntaxError' && opts && opts.from) {\n if (/\\.scss$/i.test(opts.from)) {\n e.message +=\n '\\nYou tried to parse SCSS with ' +\n 'the standard CSS parser; ' +\n 'try again with the postcss-scss parser'\n } else if (/\\.sass/i.test(opts.from)) {\n e.message +=\n '\\nYou tried to parse Sass with ' +\n 'the standard CSS parser; ' +\n 'try again with the postcss-sass parser'\n } else if (/\\.less$/i.test(opts.from)) {\n e.message +=\n '\\nYou tried to parse Less with ' +\n 'the standard CSS parser; ' +\n 'try again with the postcss-less parser'\n }\n }\n }\n throw e\n }\n\n return parser.root\n}\n\nmodule.exports = parse\nparse.default = parse\n\nContainer.registerParse(parse)\n","'use strict'\n\nlet list = {\n split(string, separators, last) {\n let array = []\n let current = ''\n let split = false\n\n let func = 0\n let quote = false\n let escape = false\n\n for (let letter of string) {\n if (escape) {\n escape = false\n } else if (letter === '\\\\') {\n escape = true\n } else if (quote) {\n if (letter === quote) {\n quote = false\n }\n } else if (letter === '\"' || letter === \"'\") {\n quote = letter\n } else if (letter === '(') {\n func += 1\n } else if (letter === ')') {\n if (func > 0) func -= 1\n } else if (func === 0) {\n if (separators.includes(letter)) split = true\n }\n\n if (split) {\n if (current !== '') array.push(current.trim())\n current = ''\n split = false\n } else {\n current += letter\n }\n }\n\n if (last || current !== '') array.push(current.trim())\n return array\n },\n\n space(string) {\n let spaces = [' ', '\\n', '\\t']\n return list.split(string, spaces)\n },\n\n comma(string) {\n return list.split(string, [','], true)\n }\n}\n\nmodule.exports = list\nlist.default = list\n","'use strict'\n\nlet { SourceMapConsumer, SourceMapGenerator } = require('source-map-js')\nlet { existsSync, readFileSync } = require('fs')\nlet { dirname, join } = require('path')\n\nfunction fromBase64(str) {\n if (Buffer) {\n return Buffer.from(str, 'base64').toString()\n } else {\n // istanbul ignore next\n return window.atob(str)\n }\n}\n\nclass PreviousMap {\n constructor(css, opts) {\n if (opts.map === false) return\n this.loadAnnotation(css)\n this.inline = this.startWith(this.annotation, 'data:')\n\n let prev = opts.map ? opts.map.prev : undefined\n let text = this.loadMap(opts.from, prev)\n if (!this.mapFile && opts.from) {\n this.mapFile = opts.from\n }\n if (this.mapFile) this.root = dirname(this.mapFile)\n if (text) this.text = text\n }\n\n consumer() {\n if (!this.consumerCache) {\n this.consumerCache = new SourceMapConsumer(this.text)\n }\n return this.consumerCache\n }\n\n withContent() {\n return !!(\n this.consumer().sourcesContent &&\n this.consumer().sourcesContent.length > 0\n )\n }\n\n startWith(string, start) {\n if (!string) return false\n return string.substr(0, start.length) === start\n }\n\n getAnnotationURL(sourceMapString) {\n return sourceMapString\n .match(/\\/\\*\\s*# sourceMappingURL=((?:(?!sourceMappingURL=).)*)\\*\\//)[1]\n .trim()\n }\n\n loadAnnotation(css) {\n let annotations = css.match(\n /\\/\\*\\s*# sourceMappingURL=(?:(?!sourceMappingURL=).)*\\*\\//gm\n )\n\n if (annotations && annotations.length > 0) {\n // Locate the last sourceMappingURL to avoid picking up\n // sourceMappingURLs from comments, strings, etc.\n let lastAnnotation = annotations[annotations.length - 1]\n if (lastAnnotation) {\n this.annotation = this.getAnnotationURL(lastAnnotation)\n }\n }\n }\n\n decodeInline(text) {\n let baseCharsetUri = /^data:application\\/json;charset=utf-?8;base64,/\n let baseUri = /^data:application\\/json;base64,/\n let charsetUri = /^data:application\\/json;charset=utf-?8,/\n let uri = /^data:application\\/json,/\n\n if (charsetUri.test(text) || uri.test(text)) {\n return decodeURIComponent(text.substr(RegExp.lastMatch.length))\n }\n\n if (baseCharsetUri.test(text) || baseUri.test(text)) {\n return fromBase64(text.substr(RegExp.lastMatch.length))\n }\n\n let encoding = text.match(/data:application\\/json;([^,]+),/)[1]\n throw new Error('Unsupported source map encoding ' + encoding)\n }\n\n loadFile(path) {\n this.root = dirname(path)\n if (existsSync(path)) {\n this.mapFile = path\n return readFileSync(path, 'utf-8').toString().trim()\n }\n }\n\n loadMap(file, prev) {\n if (prev === false) return false\n\n if (prev) {\n if (typeof prev === 'string') {\n return prev\n } else if (typeof prev === 'function') {\n let prevPath = prev(file)\n if (prevPath) {\n let map = this.loadFile(prevPath)\n if (!map) {\n throw new Error(\n 'Unable to load previous source map: ' + prevPath.toString()\n )\n }\n return map\n }\n } else if (prev instanceof SourceMapConsumer) {\n return SourceMapGenerator.fromSourceMap(prev).toString()\n } else if (prev instanceof SourceMapGenerator) {\n return prev.toString()\n } else if (this.isMap(prev)) {\n return JSON.stringify(prev)\n } else {\n throw new Error(\n 'Unsupported previous source map format: ' + prev.toString()\n )\n }\n } else if (this.inline) {\n return this.decodeInline(this.annotation)\n } else if (this.annotation) {\n let map = this.annotation\n if (file) map = join(dirname(file), map)\n return this.loadFile(map)\n }\n }\n\n isMap(map) {\n if (typeof map !== 'object') return false\n return (\n typeof map.mappings === 'string' ||\n typeof map._mappings === 'string' ||\n Array.isArray(map.sections)\n )\n }\n}\n\nmodule.exports = PreviousMap\nPreviousMap.default = PreviousMap\n","const matchValueName = /[$]?[\\w-]+/g;\n\nconst replaceValueSymbols = (value, replacements) => {\n let matches;\n\n while ((matches = matchValueName.exec(value))) {\n const replacement = replacements[matches[0]];\n\n if (replacement) {\n value =\n value.slice(0, matches.index) +\n replacement +\n value.slice(matchValueName.lastIndex);\n\n matchValueName.lastIndex -= matches[0].length - replacement.length;\n }\n }\n\n return value;\n};\n\nmodule.exports = replaceValueSymbols;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _templateLiterals = require(\"./template-literals\");\n\nObject.keys(_templateLiterals).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _templateLiterals[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _templateLiterals[key];\n }\n });\n});\n\nvar _expressions = require(\"./expressions\");\n\nObject.keys(_expressions).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _expressions[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _expressions[key];\n }\n });\n});\n\nvar _statements = require(\"./statements\");\n\nObject.keys(_statements).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _statements[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _statements[key];\n }\n });\n});\n\nvar _classes = require(\"./classes\");\n\nObject.keys(_classes).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _classes[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _classes[key];\n }\n });\n});\n\nvar _methods = require(\"./methods\");\n\nObject.keys(_methods).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _methods[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _methods[key];\n }\n });\n});\n\nvar _modules = require(\"./modules\");\n\nObject.keys(_modules).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _modules[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _modules[key];\n }\n });\n});\n\nvar _types = require(\"./types\");\n\nObject.keys(_types).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _types[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _types[key];\n }\n });\n});\n\nvar _flow = require(\"./flow\");\n\nObject.keys(_flow).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _flow[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _flow[key];\n }\n });\n});\n\nvar _base = require(\"./base\");\n\nObject.keys(_base).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _base[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _base[key];\n }\n });\n});\n\nvar _jsx = require(\"./jsx\");\n\nObject.keys(_jsx).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _jsx[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _jsx[key];\n }\n });\n});\n\nvar _typescript = require(\"./typescript\");\n\nObject.keys(_typescript).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _typescript[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _typescript[key];\n }\n });\n});","\"use strict\";\n\nexports.__esModule = true;\n\nvar _types = require(\"./types\");\n\nObject.keys(_types).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _types[key]) return;\n exports[key] = _types[key];\n});\n\nvar _constructors = require(\"./constructors\");\n\nObject.keys(_constructors).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _constructors[key]) return;\n exports[key] = _constructors[key];\n});\n\nvar _guards = require(\"./guards\");\n\nObject.keys(_guards).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _guards[key]) return;\n exports[key] = _guards[key];\n});","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst t = __importStar(require(\"@babel/types\"));\nconst helper_module_imports_1 = require(\"@babel/helper-module-imports\");\nconst utils_1 = require(\"./utils\");\nconst parseDirectives_1 = __importDefault(require(\"./parseDirectives\"));\nconst xlinkRE = /^xlink([A-Z])/;\nconst getJSXAttributeValue = (path, state) => {\n const valuePath = path.get('value');\n if (valuePath.isJSXElement()) {\n return transformJSXElement(valuePath, state);\n }\n if (valuePath.isStringLiteral()) {\n return valuePath.node;\n }\n if (valuePath.isJSXExpressionContainer()) {\n return utils_1.transformJSXExpressionContainer(valuePath);\n }\n return null;\n};\nconst buildProps = (path, state) => {\n const tag = utils_1.getTag(path, state);\n const isComponent = utils_1.checkIsComponent(path.get('openingElement'));\n const props = path.get('openingElement').get('attributes');\n const directives = [];\n const dynamicPropNames = new Set();\n let slots = null;\n let patchFlag = 0;\n if (props.length === 0) {\n return {\n tag,\n isComponent,\n slots,\n props: t.nullLiteral(),\n directives,\n patchFlag,\n dynamicPropNames,\n };\n }\n let properties = [];\n // patchFlag analysis\n let hasRef = false;\n let hasClassBinding = false;\n let hasStyleBinding = false;\n let hasHydrationEventBinding = false;\n let hasDynamicKeys = false;\n const mergeArgs = [];\n const { mergeProps = true } = state.opts;\n props\n .forEach((prop) => {\n if (prop.isJSXAttribute()) {\n let name = utils_1.getJSXAttributeName(prop);\n const attributeValue = getJSXAttributeValue(prop, state);\n if (!utils_1.isConstant(attributeValue) || name === 'ref') {\n if (!isComponent\n && utils_1.isOn(name)\n // omit the flag for click handlers becaues hydration gives click\n // dedicated fast path.\n && name.toLowerCase() !== 'onclick'\n // omit v-model handlers\n && name !== 'onUpdate:modelValue') {\n hasHydrationEventBinding = true;\n }\n if (name === 'ref') {\n hasRef = true;\n }\n else if (name === 'class' && !isComponent) {\n hasClassBinding = true;\n }\n else if (name === 'style' && !isComponent) {\n hasStyleBinding = true;\n }\n else if (name !== 'key'\n && !utils_1.isDirective(name)\n && name !== 'on') {\n dynamicPropNames.add(name);\n }\n }\n if (state.opts.transformOn && (name === 'on' || name === 'nativeOn')) {\n if (!state.get('transformOn')) {\n state.set('transformOn', helper_module_imports_1.addDefault(path, '@vue/babel-helper-vue-transform-on', { nameHint: '_transformOn' }));\n }\n mergeArgs.push(t.callExpression(state.get('transformOn'), [attributeValue || t.booleanLiteral(true)]));\n return;\n }\n if (utils_1.isDirective(name)) {\n const { directive, modifiers, values, args, directiveName, } = parseDirectives_1.default({\n tag,\n isComponent,\n name,\n path: prop,\n state,\n value: attributeValue,\n });\n if (directiveName === 'slots') {\n slots = attributeValue;\n return;\n }\n if (directive) {\n directives.push(t.arrayExpression(directive));\n }\n else if (directiveName === 'html') {\n properties.push(t.objectProperty(t.stringLiteral('innerHTML'), values[0]));\n dynamicPropNames.add('innerHTML');\n }\n else if (directiveName === 'text') {\n properties.push(t.objectProperty(t.stringLiteral('textContent'), values[0]));\n dynamicPropNames.add('textContent');\n }\n if (['models', 'model'].includes(directiveName)) {\n values.forEach((value, index) => {\n var _a, _b, _c, _d;\n const propName = args[index];\n // v-model target with variable\n const isDynamic = propName && !t.isStringLiteral(propName) && !t.isNullLiteral(propName);\n // must be v-model or v-models and is a component\n if (!directive) {\n properties.push(t.objectProperty(t.isNullLiteral(propName)\n ? t.stringLiteral('modelValue') : propName, value, isDynamic));\n if (!isDynamic) {\n dynamicPropNames.add(((_a = propName) === null || _a === void 0 ? void 0 : _a.value) || 'modelValue');\n }\n if ((_b = modifiers[index]) === null || _b === void 0 ? void 0 : _b.size) {\n properties.push(t.objectProperty(isDynamic\n ? t.binaryExpression('+', propName, t.stringLiteral('Modifiers'))\n : t.stringLiteral(`${((_c = propName) === null || _c === void 0 ? void 0 : _c.value) || 'model'}Modifiers`), t.objectExpression([...modifiers[index]].map((modifier) => t.objectProperty(t.stringLiteral(modifier), t.booleanLiteral(true)))), isDynamic));\n }\n }\n const updateName = isDynamic\n ? t.binaryExpression('+', t.stringLiteral('onUpdate'), propName)\n : t.stringLiteral(`onUpdate:${((_d = propName) === null || _d === void 0 ? void 0 : _d.value) || 'modelValue'}`);\n properties.push(t.objectProperty(updateName, t.arrowFunctionExpression([t.identifier('$event')], t.assignmentExpression('=', value, t.identifier('$event'))), isDynamic));\n if (!isDynamic) {\n dynamicPropNames.add(updateName.value);\n }\n else {\n hasDynamicKeys = true;\n }\n });\n }\n }\n else {\n if (name.match(xlinkRE)) {\n name = name.replace(xlinkRE, (_, firstCharacter) => `xlink:${firstCharacter.toLowerCase()}`);\n }\n properties.push(t.objectProperty(t.stringLiteral(name), attributeValue || t.booleanLiteral(true)));\n }\n }\n else {\n if (properties.length && mergeProps) {\n mergeArgs.push(t.objectExpression(utils_1.dedupeProperties(properties, mergeProps)));\n properties = [];\n }\n // JSXSpreadAttribute\n hasDynamicKeys = true;\n utils_1.transformJSXSpreadAttribute(path, prop, mergeProps, mergeProps ? mergeArgs : properties);\n }\n });\n // patchFlag analysis\n if (hasDynamicKeys) {\n patchFlag |= 16 /* FULL_PROPS */;\n }\n else {\n if (hasClassBinding) {\n patchFlag |= 2 /* CLASS */;\n }\n if (hasStyleBinding) {\n patchFlag |= 4 /* STYLE */;\n }\n if (dynamicPropNames.size) {\n patchFlag |= 8 /* PROPS */;\n }\n if (hasHydrationEventBinding) {\n patchFlag |= 32 /* HYDRATE_EVENTS */;\n }\n }\n if ((patchFlag === 0 || patchFlag === 32 /* HYDRATE_EVENTS */)\n && (hasRef || directives.length > 0)) {\n patchFlag |= 512 /* NEED_PATCH */;\n }\n let propsExpression = t.nullLiteral();\n if (mergeArgs.length) {\n if (properties.length) {\n mergeArgs.push(t.objectExpression(utils_1.dedupeProperties(properties, mergeProps)));\n }\n if (mergeArgs.length > 1) {\n propsExpression = t.callExpression(utils_1.createIdentifier(state, 'mergeProps'), mergeArgs);\n }\n else {\n // single no need for a mergeProps call\n propsExpression = mergeArgs[0];\n }\n }\n else if (properties.length) {\n // single no need for spread\n if (properties.length === 1 && t.isSpreadElement(properties[0])) {\n propsExpression = properties[0].argument;\n }\n else {\n propsExpression = t.objectExpression(utils_1.dedupeProperties(properties, mergeProps));\n }\n }\n return {\n tag,\n props: propsExpression,\n isComponent,\n slots,\n directives,\n patchFlag,\n dynamicPropNames,\n };\n};\n/**\n * Get children from Array of JSX children\n * @param paths Array\n * @returns Array\n */\nconst getChildren = (paths, state) => paths\n .map((path) => {\n if (path.isJSXText()) {\n const transformedText = utils_1.transformJSXText(path);\n if (transformedText) {\n return t.callExpression(utils_1.createIdentifier(state, 'createTextVNode'), [transformedText]);\n }\n return transformedText;\n }\n if (path.isJSXExpressionContainer()) {\n const expression = utils_1.transformJSXExpressionContainer(path);\n if (t.isIdentifier(expression)) {\n const { name } = expression;\n const { referencePaths = [] } = path.scope.getBinding(name) || {};\n referencePaths.forEach((referencePath) => {\n utils_1.walksScope(referencePath, name, 2 /* DYNAMIC */);\n });\n }\n return expression;\n }\n if (t.isJSXSpreadChild(path)) {\n return utils_1.transformJSXSpreadChild(path);\n }\n if (path.isCallExpression()) {\n return path.node;\n }\n if (path.isJSXElement()) {\n return transformJSXElement(path, state);\n }\n throw new Error(`getChildren: ${path.type} is not supported`);\n}).filter(((value) => (value !== undefined\n && value !== null\n && !t.isJSXEmptyExpression(value))));\nconst transformJSXElement = (path, state) => {\n const children = getChildren(path.get('children'), state);\n const { tag, props, isComponent, directives, patchFlag, dynamicPropNames, slots, } = buildProps(path, state);\n const { optimize = false } = state.opts;\n const slotFlag = path.getData('slotFlag') || 1 /* STABLE */;\n let VNodeChild;\n if (children.length > 1 || slots) {\n /*\n {a}{b}\n ---> {{ default: () => [a, b], ...slots }}\n ---> {[a, b]}\n */\n VNodeChild = isComponent\n ? children.length\n ? t.objectExpression([\n !!children.length && t.objectProperty(t.identifier('default'), t.arrowFunctionExpression([], t.arrayExpression(utils_1.buildIIFE(path, children)))),\n ...(slots ? (t.isObjectExpression(slots)\n ? slots.properties\n : [t.spreadElement(slots)]) : []),\n optimize && t.objectProperty(t.identifier('_'), t.numericLiteral(slotFlag)),\n ].filter(Boolean))\n : slots\n : t.arrayExpression(children);\n }\n else if (children.length === 1) {\n /*\n {a} or {() => a}\n */\n const { enableObjectSlots = true } = state.opts;\n const child = children[0];\n const objectExpression = t.objectExpression([\n t.objectProperty(t.identifier('default'), t.arrowFunctionExpression([], t.arrayExpression(utils_1.buildIIFE(path, [child])))),\n optimize && t.objectProperty(t.identifier('_'), t.numericLiteral(slotFlag)),\n ].filter(Boolean));\n if (t.isIdentifier(child) && isComponent) {\n VNodeChild = enableObjectSlots ? t.conditionalExpression(t.callExpression(state.get('@vue/babel-plugin-jsx/runtimeIsSlot')(), [child]), child, objectExpression) : objectExpression;\n }\n else if (t.isCallExpression(child) && child.loc && isComponent) { // the element was generated and doesn't have location information\n if (enableObjectSlots) {\n const { scope } = path;\n const slotId = scope.generateUidIdentifier('slot');\n if (scope) {\n scope.push({\n id: slotId,\n kind: 'let',\n });\n }\n const alternate = t.objectExpression([\n t.objectProperty(t.identifier('default'), t.arrowFunctionExpression([], t.arrayExpression(utils_1.buildIIFE(path, [slotId])))),\n optimize && t.objectProperty(t.identifier('_'), t.numericLiteral(slotFlag)),\n ].filter(Boolean));\n const assignment = t.assignmentExpression('=', slotId, child);\n const condition = t.callExpression(state.get('@vue/babel-plugin-jsx/runtimeIsSlot')(), [assignment]);\n VNodeChild = t.conditionalExpression(condition, slotId, alternate);\n }\n else {\n VNodeChild = objectExpression;\n }\n }\n else if (t.isFunctionExpression(child) || t.isArrowFunctionExpression(child)) {\n VNodeChild = t.objectExpression([\n t.objectProperty(t.identifier('default'), child),\n ]);\n }\n else if (t.isObjectExpression(child)) {\n VNodeChild = t.objectExpression([\n ...child.properties,\n optimize && t.objectProperty(t.identifier('_'), t.numericLiteral(slotFlag)),\n ].filter(Boolean));\n }\n else {\n VNodeChild = isComponent ? t.objectExpression([\n t.objectProperty(t.identifier('default'), t.arrowFunctionExpression([], t.arrayExpression([child]))),\n ]) : t.arrayExpression([child]);\n }\n }\n const createVNode = t.callExpression(utils_1.createIdentifier(state, 'createVNode'), [\n tag,\n props,\n VNodeChild || t.nullLiteral(),\n !!patchFlag && optimize && t.numericLiteral(patchFlag),\n !!dynamicPropNames.size && optimize\n && t.arrayExpression([...dynamicPropNames.keys()].map((name) => t.stringLiteral(name))),\n ].filter(Boolean));\n if (!directives.length) {\n return createVNode;\n }\n return t.callExpression(utils_1.createIdentifier(state, 'withDirectives'), [\n createVNode,\n t.arrayExpression(directives),\n ]);\n};\nexports.default = ({\n JSXElement: {\n exit(path, state) {\n path.replaceWith(transformJSXElement(path, state));\n },\n },\n});\n","/*! https://mths.be/punycode v1.3.2 by @mathias */\n;(function(root) {\n\n\t/** Detect free variables */\n\tvar freeExports = typeof exports == 'object' && exports &&\n\t\t!exports.nodeType && exports;\n\tvar freeModule = typeof module == 'object' && module &&\n\t\t!module.nodeType && module;\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (\n\t\tfreeGlobal.global === freeGlobal ||\n\t\tfreeGlobal.window === freeGlobal ||\n\t\tfreeGlobal.self === freeGlobal\n\t) {\n\t\troot = freeGlobal;\n\t}\n\n\t/**\n\t * The `punycode` object.\n\t * @name punycode\n\t * @type Object\n\t */\n\tvar punycode,\n\n\t/** Highest positive signed 32-bit float value */\n\tmaxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1\n\n\t/** Bootstring parameters */\n\tbase = 36,\n\ttMin = 1,\n\ttMax = 26,\n\tskew = 38,\n\tdamp = 700,\n\tinitialBias = 72,\n\tinitialN = 128, // 0x80\n\tdelimiter = '-', // '\\x2D'\n\n\t/** Regular expressions */\n\tregexPunycode = /^xn--/,\n\tregexNonASCII = /[^\\x20-\\x7E]/, // unprintable ASCII chars + non-ASCII chars\n\tregexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g, // RFC 3490 separators\n\n\t/** Error messages */\n\terrors = {\n\t\t'overflow': 'Overflow: input needs wider integers to process',\n\t\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t\t'invalid-input': 'Invalid input'\n\t},\n\n\t/** Convenience shortcuts */\n\tbaseMinusTMin = base - tMin,\n\tfloor = Math.floor,\n\tstringFromCharCode = String.fromCharCode,\n\n\t/** Temporary variable */\n\tkey;\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/**\n\t * A generic error utility function.\n\t * @private\n\t * @param {String} type The error type.\n\t * @returns {Error} Throws a `RangeError` with the applicable error message.\n\t */\n\tfunction error(type) {\n\t\tthrow RangeError(errors[type]);\n\t}\n\n\t/**\n\t * A generic `Array#map` utility function.\n\t * @private\n\t * @param {Array} array The array to iterate over.\n\t * @param {Function} callback The function that gets called for every array\n\t * item.\n\t * @returns {Array} A new array of values returned by the callback function.\n\t */\n\tfunction map(array, fn) {\n\t\tvar length = array.length;\n\t\tvar result = [];\n\t\twhile (length--) {\n\t\t\tresult[length] = fn(array[length]);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * A simple `Array#map`-like wrapper to work with domain name strings or email\n\t * addresses.\n\t * @private\n\t * @param {String} domain The domain name or email address.\n\t * @param {Function} callback The function that gets called for every\n\t * character.\n\t * @returns {Array} A new string of characters returned by the callback\n\t * function.\n\t */\n\tfunction mapDomain(string, fn) {\n\t\tvar parts = string.split('@');\n\t\tvar result = '';\n\t\tif (parts.length > 1) {\n\t\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t\t// the local part (i.e. everything up to `@`) intact.\n\t\t\tresult = parts[0] + '@';\n\t\t\tstring = parts[1];\n\t\t}\n\t\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\t\tstring = string.replace(regexSeparators, '\\x2E');\n\t\tvar labels = string.split('.');\n\t\tvar encoded = map(labels, fn).join('.');\n\t\treturn result + encoded;\n\t}\n\n\t/**\n\t * Creates an array containing the numeric code points of each Unicode\n\t * character in the string. While JavaScript uses UCS-2 internally,\n\t * this function will convert a pair of surrogate halves (each of which\n\t * UCS-2 exposes as separate characters) into a single code point,\n\t * matching UTF-16.\n\t * @see `punycode.ucs2.encode`\n\t * @see \n\t * @memberOf punycode.ucs2\n\t * @name decode\n\t * @param {String} string The Unicode input string (UCS-2).\n\t * @returns {Array} The new array of code points.\n\t */\n\tfunction ucs2decode(string) {\n\t\tvar output = [],\n\t\t counter = 0,\n\t\t length = string.length,\n\t\t value,\n\t\t extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t/**\n\t * Creates a string based on an array of numeric code points.\n\t * @see `punycode.ucs2.decode`\n\t * @memberOf punycode.ucs2\n\t * @name encode\n\t * @param {Array} codePoints The array of numeric code points.\n\t * @returns {String} The new Unicode string (UCS-2).\n\t */\n\tfunction ucs2encode(array) {\n\t\treturn map(array, function(value) {\n\t\t\tvar output = '';\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t\treturn output;\n\t\t}).join('');\n\t}\n\n\t/**\n\t * Converts a basic code point into a digit/integer.\n\t * @see `digitToBasic()`\n\t * @private\n\t * @param {Number} codePoint The basic numeric code point value.\n\t * @returns {Number} The numeric value of a basic code point (for use in\n\t * representing integers) in the range `0` to `base - 1`, or `base` if\n\t * the code point does not represent a value.\n\t */\n\tfunction basicToDigit(codePoint) {\n\t\tif (codePoint - 48 < 10) {\n\t\t\treturn codePoint - 22;\n\t\t}\n\t\tif (codePoint - 65 < 26) {\n\t\t\treturn codePoint - 65;\n\t\t}\n\t\tif (codePoint - 97 < 26) {\n\t\t\treturn codePoint - 97;\n\t\t}\n\t\treturn base;\n\t}\n\n\t/**\n\t * Converts a digit/integer into a basic code point.\n\t * @see `basicToDigit()`\n\t * @private\n\t * @param {Number} digit The numeric value of a basic code point.\n\t * @returns {Number} The basic code point whose value (when used for\n\t * representing integers) is `digit`, which needs to be in the range\n\t * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n\t * used; else, the lowercase form is used. The behavior is undefined\n\t * if `flag` is non-zero and `digit` has no uppercase form.\n\t */\n\tfunction digitToBasic(digit, flag) {\n\t\t// 0..25 map to ASCII a..z or A..Z\n\t\t// 26..35 map to ASCII 0..9\n\t\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n\t}\n\n\t/**\n\t * Bias adaptation function as per section 3.4 of RFC 3492.\n\t * http://tools.ietf.org/html/rfc3492#section-3.4\n\t * @private\n\t */\n\tfunction adapt(delta, numPoints, firstTime) {\n\t\tvar k = 0;\n\t\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\t\tdelta += floor(delta / numPoints);\n\t\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\t\tdelta = floor(delta / baseMinusTMin);\n\t\t}\n\t\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n\t}\n\n\t/**\n\t * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n\t * symbols.\n\t * @memberOf punycode\n\t * @param {String} input The Punycode string of ASCII-only symbols.\n\t * @returns {String} The resulting string of Unicode symbols.\n\t */\n\tfunction decode(input) {\n\t\t// Don't use UCS-2\n\t\tvar output = [],\n\t\t inputLength = input.length,\n\t\t out,\n\t\t i = 0,\n\t\t n = initialN,\n\t\t bias = initialBias,\n\t\t basic,\n\t\t j,\n\t\t index,\n\t\t oldi,\n\t\t w,\n\t\t k,\n\t\t digit,\n\t\t t,\n\t\t /** Cached calculation results */\n\t\t baseMinusT;\n\n\t\t// Handle the basic code points: let `basic` be the number of input code\n\t\t// points before the last delimiter, or `0` if there is none, then copy\n\t\t// the first basic code points to the output.\n\n\t\tbasic = input.lastIndexOf(delimiter);\n\t\tif (basic < 0) {\n\t\t\tbasic = 0;\n\t\t}\n\n\t\tfor (j = 0; j < basic; ++j) {\n\t\t\t// if it's not a basic code point\n\t\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\t\terror('not-basic');\n\t\t\t}\n\t\t\toutput.push(input.charCodeAt(j));\n\t\t}\n\n\t\t// Main decoding loop: start just after the last delimiter if any basic code\n\t\t// points were copied; start at the beginning otherwise.\n\n\t\tfor (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t\t// `index` is the index of the next character to be consumed.\n\t\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t\t// which gets added to `i`. The overflow checking is easier\n\t\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t\t// value at the end to obtain `delta`.\n\t\t\tfor (oldi = i, w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\t\tif (index >= inputLength) {\n\t\t\t\t\terror('invalid-input');\n\t\t\t\t}\n\n\t\t\t\tdigit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\ti += digit * w;\n\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\t\tif (digit < t) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbaseMinusT = base - t;\n\t\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tw *= baseMinusT;\n\n\t\t\t}\n\n\t\t\tout = output.length + 1;\n\t\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t\t// incrementing `n` each time, so we'll fix that now:\n\t\t\tif (floor(i / out) > maxInt - n) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tn += floor(i / out);\n\t\t\ti %= out;\n\n\t\t\t// Insert `n` at position `i` of the output\n\t\t\toutput.splice(i++, 0, n);\n\n\t\t}\n\n\t\treturn ucs2encode(output);\n\t}\n\n\t/**\n\t * Converts a string of Unicode symbols (e.g. a domain name label) to a\n\t * Punycode string of ASCII-only symbols.\n\t * @memberOf punycode\n\t * @param {String} input The string of Unicode symbols.\n\t * @returns {String} The resulting Punycode string of ASCII-only symbols.\n\t */\n\tfunction encode(input) {\n\t\tvar n,\n\t\t delta,\n\t\t handledCPCount,\n\t\t basicLength,\n\t\t bias,\n\t\t j,\n\t\t m,\n\t\t q,\n\t\t k,\n\t\t t,\n\t\t currentValue,\n\t\t output = [],\n\t\t /** `inputLength` will hold the number of code points in `input`. */\n\t\t inputLength,\n\t\t /** Cached calculation results */\n\t\t handledCPCountPlusOne,\n\t\t baseMinusT,\n\t\t qMinusT;\n\n\t\t// Convert the input in UCS-2 to Unicode\n\t\tinput = ucs2decode(input);\n\n\t\t// Cache the length\n\t\tinputLength = input.length;\n\n\t\t// Initialize the state\n\t\tn = initialN;\n\t\tdelta = 0;\n\t\tbias = initialBias;\n\n\t\t// Handle the basic code points\n\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\tcurrentValue = input[j];\n\t\t\tif (currentValue < 0x80) {\n\t\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t\t}\n\t\t}\n\n\t\thandledCPCount = basicLength = output.length;\n\n\t\t// `handledCPCount` is the number of code points that have been handled;\n\t\t// `basicLength` is the number of basic code points.\n\n\t\t// Finish the basic string - if it is not empty - with a delimiter\n\t\tif (basicLength) {\n\t\t\toutput.push(delimiter);\n\t\t}\n\n\t\t// Main encoding loop:\n\t\twhile (handledCPCount < inputLength) {\n\n\t\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t\t// larger one:\n\t\t\tfor (m = maxInt, j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\t\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\t\tm = currentValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Increase `delta` enough to advance the decoder's state to ,\n\t\t\t// but guard against overflow\n\t\t\thandledCPCountPlusOne = handledCPCount + 1;\n\t\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\t\tn = m;\n\n\t\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\n\t\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tif (currentValue == n) {\n\t\t\t\t\t// Represent delta as a generalized variable-length integer\n\t\t\t\t\tfor (q = delta, k = base; /* no condition */; k += base) {\n\t\t\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tqMinusT = q - t;\n\t\t\t\t\t\tbaseMinusT = base - t;\n\t\t\t\t\t\toutput.push(\n\t\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t\t);\n\t\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\t\tdelta = 0;\n\t\t\t\t\t++handledCPCount;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t++delta;\n\t\t\t++n;\n\n\t\t}\n\t\treturn output.join('');\n\t}\n\n\t/**\n\t * Converts a Punycode string representing a domain name or an email address\n\t * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n\t * it doesn't matter if you call it on a string that has already been\n\t * converted to Unicode.\n\t * @memberOf punycode\n\t * @param {String} input The Punycoded domain name or email address to\n\t * convert to Unicode.\n\t * @returns {String} The Unicode representation of the given Punycode\n\t * string.\n\t */\n\tfunction toUnicode(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexPunycode.test(string)\n\t\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/**\n\t * Converts a Unicode string representing a domain name or an email address to\n\t * Punycode. Only the non-ASCII parts of the domain name will be converted,\n\t * i.e. it doesn't matter if you call it with a domain that's already in\n\t * ASCII.\n\t * @memberOf punycode\n\t * @param {String} input The domain name or email address to convert, as a\n\t * Unicode string.\n\t * @returns {String} The Punycode representation of the given domain name or\n\t * email address.\n\t */\n\tfunction toASCII(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexNonASCII.test(string)\n\t\t\t\t? 'xn--' + encode(string)\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/** Define the public API */\n\tpunycode = {\n\t\t/**\n\t\t * A string representing the current Punycode.js version number.\n\t\t * @memberOf punycode\n\t\t * @type String\n\t\t */\n\t\t'version': '1.3.2',\n\t\t/**\n\t\t * An object of methods to convert from JavaScript's internal character\n\t\t * representation (UCS-2) to Unicode code points, and back.\n\t\t * @see \n\t\t * @memberOf punycode\n\t\t * @type Object\n\t\t */\n\t\t'ucs2': {\n\t\t\t'decode': ucs2decode,\n\t\t\t'encode': ucs2encode\n\t\t},\n\t\t'decode': decode,\n\t\t'encode': encode,\n\t\t'toASCII': toASCII,\n\t\t'toUnicode': toUnicode\n\t};\n\n\t/** Expose `punycode` */\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine('punycode', function() {\n\t\t\treturn punycode;\n\t\t});\n\t} else if (freeExports && freeModule) {\n\t\tif (module.exports == freeExports) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = punycode;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (key in punycode) {\n\t\t\t\tpunycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.punycode = punycode;\n\t}\n\n}(this));\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst t = __importStar(require(\"@babel/types\"));\nconst utils_1 = require(\"./utils\");\n/**\n * Get JSX element type\n *\n * @param path Path\n */\nconst getType = (path) => {\n const typePath = path\n .get('attributes')\n .find((attribute) => {\n if (!t.isJSXAttribute(attribute)) {\n return false;\n }\n return t.isJSXIdentifier(attribute.get('name'))\n && attribute.get('name').node.name === 'type';\n });\n return typePath ? typePath.get('value').node : null;\n};\nconst parseModifiers = (value) => (t.isArrayExpression(value)\n ? value.elements\n .map((el) => (t.isStringLiteral(el) ? el.value : ''))\n .filter(Boolean)\n : []);\nconst parseDirectives = (params) => {\n var _a, _b, _c;\n const { name, path, value, state, tag, isComponent, } = params;\n const args = [];\n const vals = [];\n const modifiersSet = [];\n const underscoreModifiers = name.split('_');\n const directiveName = ((_a = underscoreModifiers.shift()) === null || _a === void 0 ? void 0 : _a.replace(/^v/, '').replace(/^-/, '').replace(/^\\S/, (s) => s.toLowerCase())) || '';\n const isVModels = directiveName === 'models';\n const isVModel = directiveName === 'model';\n if (isVModel && !t.isJSXExpressionContainer(path.get('value'))) {\n throw new Error('You have to use JSX Expression inside your v-model');\n }\n if (isVModels && !isComponent) {\n throw new Error('v-models can only use in custom components');\n }\n const shouldResolve = !['html', 'text', 'model', 'models'].includes(directiveName)\n || (isVModel && !isComponent);\n let modifiers = underscoreModifiers;\n if (t.isArrayExpression(value)) {\n const elementsList = isVModels ? value.elements : [value];\n elementsList.forEach((element) => {\n if (isVModels && !t.isArrayExpression(element)) {\n throw new Error('You should pass a Two-dimensional Arrays to v-models');\n }\n const { elements } = element;\n const [first, second, third] = elements;\n if (second && !t.isArrayExpression(second) && !t.isSpreadElement(second)) {\n args.push(second);\n modifiers = parseModifiers(third);\n }\n else if (t.isArrayExpression(second)) {\n if (!shouldResolve) {\n args.push(t.nullLiteral());\n }\n modifiers = parseModifiers(second);\n }\n else if (!shouldResolve) {\n // work as v-model={[value]} or v-models={[[value]]}\n args.push(t.nullLiteral());\n }\n modifiersSet.push(new Set(modifiers));\n vals.push(first);\n });\n }\n else if (isVModel && !shouldResolve) {\n // work as v-model={value}\n args.push(t.nullLiteral());\n modifiersSet.push(new Set(underscoreModifiers));\n }\n else {\n modifiersSet.push(new Set(underscoreModifiers));\n }\n return {\n directiveName,\n modifiers: modifiersSet,\n values: vals.length ? vals : [value],\n args,\n directive: shouldResolve ? [\n resolveDirective(path, state, tag, directiveName),\n vals[0] || value,\n ((_b = modifiersSet[0]) === null || _b === void 0 ? void 0 : _b.size)\n ? args[0] || t.unaryExpression('void', t.numericLiteral(0), true)\n : args[0],\n !!((_c = modifiersSet[0]) === null || _c === void 0 ? void 0 : _c.size) && t.objectExpression([...modifiersSet[0]].map((modifier) => t.objectProperty(t.identifier(modifier), t.booleanLiteral(true)))),\n ].filter(Boolean) : undefined,\n };\n};\nconst resolveDirective = (path, state, tag, directiveName) => {\n var _a;\n if (directiveName === 'show') {\n return utils_1.createIdentifier(state, 'vShow');\n }\n if (directiveName === 'model') {\n let modelToUse;\n const type = getType(path.parentPath);\n switch (tag.value) {\n case 'select':\n modelToUse = utils_1.createIdentifier(state, 'vModelSelect');\n break;\n case 'textarea':\n modelToUse = utils_1.createIdentifier(state, 'vModelText');\n break;\n default:\n if (t.isStringLiteral(type) || !type) {\n switch ((_a = type) === null || _a === void 0 ? void 0 : _a.value) {\n case 'checkbox':\n modelToUse = utils_1.createIdentifier(state, 'vModelCheckbox');\n break;\n case 'radio':\n modelToUse = utils_1.createIdentifier(state, 'vModelRadio');\n break;\n default:\n modelToUse = utils_1.createIdentifier(state, 'vModelText');\n }\n }\n else {\n modelToUse = utils_1.createIdentifier(state, 'vModelDynamic');\n }\n }\n return modelToUse;\n }\n return t.callExpression(utils_1.createIdentifier(state, 'resolveDirective'), [\n t.stringLiteral(directiveName),\n ]);\n};\nexports.default = parseDirectives;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst t = __importStar(require(\"@babel/types\"));\nconst utils_1 = require(\"./utils\");\nconst transformFragment = (path, Fragment) => {\n const children = path.get('children') || [];\n return t.jsxElement(t.jsxOpeningElement(Fragment, []), t.jsxClosingElement(Fragment), children.map(({ node }) => node), false);\n};\nexports.default = ({\n JSXFragment: {\n enter(path, state) {\n const fragmentCallee = utils_1.createIdentifier(state, utils_1.FRAGMENT);\n path.replaceWith(transformFragment(path, t.isIdentifier(fragmentCallee)\n ? t.jsxIdentifier(fragmentCallee.name)\n : t.jsxMemberExpression(t.jsxIdentifier(fragmentCallee.object.name), t.jsxIdentifier(fragmentCallee.property.name))));\n },\n },\n});\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _parser = _interopRequireDefault(require(\"./parser\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nvar Processor = /*#__PURE__*/function () {\n function Processor(func, options) {\n this.func = func || function noop() {};\n\n this.funcRes = null;\n this.options = options;\n }\n\n var _proto = Processor.prototype;\n\n _proto._shouldUpdateSelector = function _shouldUpdateSelector(rule, options) {\n if (options === void 0) {\n options = {};\n }\n\n var merged = Object.assign({}, this.options, options);\n\n if (merged.updateSelector === false) {\n return false;\n } else {\n return typeof rule !== \"string\";\n }\n };\n\n _proto._isLossy = function _isLossy(options) {\n if (options === void 0) {\n options = {};\n }\n\n var merged = Object.assign({}, this.options, options);\n\n if (merged.lossless === false) {\n return true;\n } else {\n return false;\n }\n };\n\n _proto._root = function _root(rule, options) {\n if (options === void 0) {\n options = {};\n }\n\n var parser = new _parser[\"default\"](rule, this._parseOptions(options));\n return parser.root;\n };\n\n _proto._parseOptions = function _parseOptions(options) {\n return {\n lossy: this._isLossy(options)\n };\n };\n\n _proto._run = function _run(rule, options) {\n var _this = this;\n\n if (options === void 0) {\n options = {};\n }\n\n return new Promise(function (resolve, reject) {\n try {\n var root = _this._root(rule, options);\n\n Promise.resolve(_this.func(root)).then(function (transform) {\n var string = undefined;\n\n if (_this._shouldUpdateSelector(rule, options)) {\n string = root.toString();\n rule.selector = string;\n }\n\n return {\n transform: transform,\n root: root,\n string: string\n };\n }).then(resolve, reject);\n } catch (e) {\n reject(e);\n return;\n }\n });\n };\n\n _proto._runSync = function _runSync(rule, options) {\n if (options === void 0) {\n options = {};\n }\n\n var root = this._root(rule, options);\n\n var transform = this.func(root);\n\n if (transform && typeof transform.then === \"function\") {\n throw new Error(\"Selector processor returned a promise to a synchronous call.\");\n }\n\n var string = undefined;\n\n if (options.updateSelector && typeof rule !== \"string\") {\n string = root.toString();\n rule.selector = string;\n }\n\n return {\n transform: transform,\n root: root,\n string: string\n };\n }\n /**\n * Process rule into a selector AST.\n *\n * @param rule {postcss.Rule | string} The css selector to be processed\n * @param options The options for processing\n * @returns {Promise} The AST of the selector after processing it.\n */\n ;\n\n _proto.ast = function ast(rule, options) {\n return this._run(rule, options).then(function (result) {\n return result.root;\n });\n }\n /**\n * Process rule into a selector AST synchronously.\n *\n * @param rule {postcss.Rule | string} The css selector to be processed\n * @param options The options for processing\n * @returns {parser.Root} The AST of the selector after processing it.\n */\n ;\n\n _proto.astSync = function astSync(rule, options) {\n return this._runSync(rule, options).root;\n }\n /**\n * Process a selector into a transformed value asynchronously\n *\n * @param rule {postcss.Rule | string} The css selector to be processed\n * @param options The options for processing\n * @returns {Promise} The value returned by the processor.\n */\n ;\n\n _proto.transform = function transform(rule, options) {\n return this._run(rule, options).then(function (result) {\n return result.transform;\n });\n }\n /**\n * Process a selector into a transformed value synchronously.\n *\n * @param rule {postcss.Rule | string} The css selector to be processed\n * @param options The options for processing\n * @returns {any} The value returned by the processor.\n */\n ;\n\n _proto.transformSync = function transformSync(rule, options) {\n return this._runSync(rule, options).transform;\n }\n /**\n * Process a selector into a new selector string asynchronously.\n *\n * @param rule {postcss.Rule | string} The css selector to be processed\n * @param options The options for processing\n * @returns {string} the selector after processing.\n */\n ;\n\n _proto.process = function process(rule, options) {\n return this._run(rule, options).then(function (result) {\n return result.string || result.root.toString();\n });\n }\n /**\n * Process a selector into a new selector string synchronously.\n *\n * @param rule {postcss.Rule | string} The css selector to be processed\n * @param options The options for processing\n * @returns {string} the selector after processing.\n */\n ;\n\n _proto.processSync = function processSync(rule, options) {\n var result = this._runSync(rule, options);\n\n return result.string || result.root.toString();\n };\n\n return Processor;\n}();\n\nexports[\"default\"] = Processor;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _root = _interopRequireDefault(require(\"./selectors/root\"));\n\nvar _selector = _interopRequireDefault(require(\"./selectors/selector\"));\n\nvar _className = _interopRequireDefault(require(\"./selectors/className\"));\n\nvar _comment = _interopRequireDefault(require(\"./selectors/comment\"));\n\nvar _id = _interopRequireDefault(require(\"./selectors/id\"));\n\nvar _tag = _interopRequireDefault(require(\"./selectors/tag\"));\n\nvar _string = _interopRequireDefault(require(\"./selectors/string\"));\n\nvar _pseudo = _interopRequireDefault(require(\"./selectors/pseudo\"));\n\nvar _attribute = _interopRequireWildcard(require(\"./selectors/attribute\"));\n\nvar _universal = _interopRequireDefault(require(\"./selectors/universal\"));\n\nvar _combinator = _interopRequireDefault(require(\"./selectors/combinator\"));\n\nvar _nesting = _interopRequireDefault(require(\"./selectors/nesting\"));\n\nvar _sortAscending = _interopRequireDefault(require(\"./sortAscending\"));\n\nvar _tokenize = _interopRequireWildcard(require(\"./tokenize\"));\n\nvar tokens = _interopRequireWildcard(require(\"./tokenTypes\"));\n\nvar types = _interopRequireWildcard(require(\"./selectors/types\"));\n\nvar _util = require(\"./util\");\n\nvar _WHITESPACE_TOKENS, _Object$assign;\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { \"default\": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj[\"default\"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar WHITESPACE_TOKENS = (_WHITESPACE_TOKENS = {}, _WHITESPACE_TOKENS[tokens.space] = true, _WHITESPACE_TOKENS[tokens.cr] = true, _WHITESPACE_TOKENS[tokens.feed] = true, _WHITESPACE_TOKENS[tokens.newline] = true, _WHITESPACE_TOKENS[tokens.tab] = true, _WHITESPACE_TOKENS);\nvar WHITESPACE_EQUIV_TOKENS = Object.assign({}, WHITESPACE_TOKENS, (_Object$assign = {}, _Object$assign[tokens.comment] = true, _Object$assign));\n\nfunction tokenStart(token) {\n return {\n line: token[_tokenize.FIELDS.START_LINE],\n column: token[_tokenize.FIELDS.START_COL]\n };\n}\n\nfunction tokenEnd(token) {\n return {\n line: token[_tokenize.FIELDS.END_LINE],\n column: token[_tokenize.FIELDS.END_COL]\n };\n}\n\nfunction getSource(startLine, startColumn, endLine, endColumn) {\n return {\n start: {\n line: startLine,\n column: startColumn\n },\n end: {\n line: endLine,\n column: endColumn\n }\n };\n}\n\nfunction getTokenSource(token) {\n return getSource(token[_tokenize.FIELDS.START_LINE], token[_tokenize.FIELDS.START_COL], token[_tokenize.FIELDS.END_LINE], token[_tokenize.FIELDS.END_COL]);\n}\n\nfunction getTokenSourceSpan(startToken, endToken) {\n if (!startToken) {\n return undefined;\n }\n\n return getSource(startToken[_tokenize.FIELDS.START_LINE], startToken[_tokenize.FIELDS.START_COL], endToken[_tokenize.FIELDS.END_LINE], endToken[_tokenize.FIELDS.END_COL]);\n}\n\nfunction unescapeProp(node, prop) {\n var value = node[prop];\n\n if (typeof value !== \"string\") {\n return;\n }\n\n if (value.indexOf(\"\\\\\") !== -1) {\n (0, _util.ensureObject)(node, 'raws');\n node[prop] = (0, _util.unesc)(value);\n\n if (node.raws[prop] === undefined) {\n node.raws[prop] = value;\n }\n }\n\n return node;\n}\n\nfunction indexesOf(array, item) {\n var i = -1;\n var indexes = [];\n\n while ((i = array.indexOf(item, i + 1)) !== -1) {\n indexes.push(i);\n }\n\n return indexes;\n}\n\nfunction uniqs() {\n var list = Array.prototype.concat.apply([], arguments);\n return list.filter(function (item, i) {\n return i === list.indexOf(item);\n });\n}\n\nvar Parser = /*#__PURE__*/function () {\n function Parser(rule, options) {\n if (options === void 0) {\n options = {};\n }\n\n this.rule = rule;\n this.options = Object.assign({\n lossy: false,\n safe: false\n }, options);\n this.position = 0;\n this.css = typeof this.rule === 'string' ? this.rule : this.rule.selector;\n this.tokens = (0, _tokenize[\"default\"])({\n css: this.css,\n error: this._errorGenerator(),\n safe: this.options.safe\n });\n var rootSource = getTokenSourceSpan(this.tokens[0], this.tokens[this.tokens.length - 1]);\n this.root = new _root[\"default\"]({\n source: rootSource\n });\n this.root.errorGenerator = this._errorGenerator();\n var selector = new _selector[\"default\"]({\n source: {\n start: {\n line: 1,\n column: 1\n }\n }\n });\n this.root.append(selector);\n this.current = selector;\n this.loop();\n }\n\n var _proto = Parser.prototype;\n\n _proto._errorGenerator = function _errorGenerator() {\n var _this = this;\n\n return function (message, errorOptions) {\n if (typeof _this.rule === 'string') {\n return new Error(message);\n }\n\n return _this.rule.error(message, errorOptions);\n };\n };\n\n _proto.attribute = function attribute() {\n var attr = [];\n var startingToken = this.currToken;\n this.position++;\n\n while (this.position < this.tokens.length && this.currToken[_tokenize.FIELDS.TYPE] !== tokens.closeSquare) {\n attr.push(this.currToken);\n this.position++;\n }\n\n if (this.currToken[_tokenize.FIELDS.TYPE] !== tokens.closeSquare) {\n return this.expected('closing square bracket', this.currToken[_tokenize.FIELDS.START_POS]);\n }\n\n var len = attr.length;\n var node = {\n source: getSource(startingToken[1], startingToken[2], this.currToken[3], this.currToken[4]),\n sourceIndex: startingToken[_tokenize.FIELDS.START_POS]\n };\n\n if (len === 1 && !~[tokens.word].indexOf(attr[0][_tokenize.FIELDS.TYPE])) {\n return this.expected('attribute', attr[0][_tokenize.FIELDS.START_POS]);\n }\n\n var pos = 0;\n var spaceBefore = '';\n var commentBefore = '';\n var lastAdded = null;\n var spaceAfterMeaningfulToken = false;\n\n while (pos < len) {\n var token = attr[pos];\n var content = this.content(token);\n var next = attr[pos + 1];\n\n switch (token[_tokenize.FIELDS.TYPE]) {\n case tokens.space:\n // if (\n // len === 1 ||\n // pos === 0 && this.content(next) === '|'\n // ) {\n // return this.expected('attribute', token[TOKEN.START_POS], content);\n // }\n spaceAfterMeaningfulToken = true;\n\n if (this.options.lossy) {\n break;\n }\n\n if (lastAdded) {\n (0, _util.ensureObject)(node, 'spaces', lastAdded);\n var prevContent = node.spaces[lastAdded].after || '';\n node.spaces[lastAdded].after = prevContent + content;\n var existingComment = (0, _util.getProp)(node, 'raws', 'spaces', lastAdded, 'after') || null;\n\n if (existingComment) {\n node.raws.spaces[lastAdded].after = existingComment + content;\n }\n } else {\n spaceBefore = spaceBefore + content;\n commentBefore = commentBefore + content;\n }\n\n break;\n\n case tokens.asterisk:\n if (next[_tokenize.FIELDS.TYPE] === tokens.equals) {\n node.operator = content;\n lastAdded = 'operator';\n } else if ((!node.namespace || lastAdded === \"namespace\" && !spaceAfterMeaningfulToken) && next) {\n if (spaceBefore) {\n (0, _util.ensureObject)(node, 'spaces', 'attribute');\n node.spaces.attribute.before = spaceBefore;\n spaceBefore = '';\n }\n\n if (commentBefore) {\n (0, _util.ensureObject)(node, 'raws', 'spaces', 'attribute');\n node.raws.spaces.attribute.before = spaceBefore;\n commentBefore = '';\n }\n\n node.namespace = (node.namespace || \"\") + content;\n var rawValue = (0, _util.getProp)(node, 'raws', 'namespace') || null;\n\n if (rawValue) {\n node.raws.namespace += content;\n }\n\n lastAdded = 'namespace';\n }\n\n spaceAfterMeaningfulToken = false;\n break;\n\n case tokens.dollar:\n if (lastAdded === \"value\") {\n var oldRawValue = (0, _util.getProp)(node, 'raws', 'value');\n node.value += \"$\";\n\n if (oldRawValue) {\n node.raws.value = oldRawValue + \"$\";\n }\n\n break;\n }\n\n // Falls through\n\n case tokens.caret:\n if (next[_tokenize.FIELDS.TYPE] === tokens.equals) {\n node.operator = content;\n lastAdded = 'operator';\n }\n\n spaceAfterMeaningfulToken = false;\n break;\n\n case tokens.combinator:\n if (content === '~' && next[_tokenize.FIELDS.TYPE] === tokens.equals) {\n node.operator = content;\n lastAdded = 'operator';\n }\n\n if (content !== '|') {\n spaceAfterMeaningfulToken = false;\n break;\n }\n\n if (next[_tokenize.FIELDS.TYPE] === tokens.equals) {\n node.operator = content;\n lastAdded = 'operator';\n } else if (!node.namespace && !node.attribute) {\n node.namespace = true;\n }\n\n spaceAfterMeaningfulToken = false;\n break;\n\n case tokens.word:\n if (next && this.content(next) === '|' && attr[pos + 2] && attr[pos + 2][_tokenize.FIELDS.TYPE] !== tokens.equals && // this look-ahead probably fails with comment nodes involved.\n !node.operator && !node.namespace) {\n node.namespace = content;\n lastAdded = 'namespace';\n } else if (!node.attribute || lastAdded === \"attribute\" && !spaceAfterMeaningfulToken) {\n if (spaceBefore) {\n (0, _util.ensureObject)(node, 'spaces', 'attribute');\n node.spaces.attribute.before = spaceBefore;\n spaceBefore = '';\n }\n\n if (commentBefore) {\n (0, _util.ensureObject)(node, 'raws', 'spaces', 'attribute');\n node.raws.spaces.attribute.before = commentBefore;\n commentBefore = '';\n }\n\n node.attribute = (node.attribute || \"\") + content;\n\n var _rawValue = (0, _util.getProp)(node, 'raws', 'attribute') || null;\n\n if (_rawValue) {\n node.raws.attribute += content;\n }\n\n lastAdded = 'attribute';\n } else if (!node.value && node.value !== \"\" || lastAdded === \"value\" && !spaceAfterMeaningfulToken) {\n var _unescaped = (0, _util.unesc)(content);\n\n var _oldRawValue = (0, _util.getProp)(node, 'raws', 'value') || '';\n\n var oldValue = node.value || '';\n node.value = oldValue + _unescaped;\n node.quoteMark = null;\n\n if (_unescaped !== content || _oldRawValue) {\n (0, _util.ensureObject)(node, 'raws');\n node.raws.value = (_oldRawValue || oldValue) + content;\n }\n\n lastAdded = 'value';\n } else {\n var insensitive = content === 'i' || content === \"I\";\n\n if ((node.value || node.value === '') && (node.quoteMark || spaceAfterMeaningfulToken)) {\n node.insensitive = insensitive;\n\n if (!insensitive || content === \"I\") {\n (0, _util.ensureObject)(node, 'raws');\n node.raws.insensitiveFlag = content;\n }\n\n lastAdded = 'insensitive';\n\n if (spaceBefore) {\n (0, _util.ensureObject)(node, 'spaces', 'insensitive');\n node.spaces.insensitive.before = spaceBefore;\n spaceBefore = '';\n }\n\n if (commentBefore) {\n (0, _util.ensureObject)(node, 'raws', 'spaces', 'insensitive');\n node.raws.spaces.insensitive.before = commentBefore;\n commentBefore = '';\n }\n } else if (node.value || node.value === '') {\n lastAdded = 'value';\n node.value += content;\n\n if (node.raws.value) {\n node.raws.value += content;\n }\n }\n }\n\n spaceAfterMeaningfulToken = false;\n break;\n\n case tokens.str:\n if (!node.attribute || !node.operator) {\n return this.error(\"Expected an attribute followed by an operator preceding the string.\", {\n index: token[_tokenize.FIELDS.START_POS]\n });\n }\n\n var _unescapeValue = (0, _attribute.unescapeValue)(content),\n unescaped = _unescapeValue.unescaped,\n quoteMark = _unescapeValue.quoteMark;\n\n node.value = unescaped;\n node.quoteMark = quoteMark;\n lastAdded = 'value';\n (0, _util.ensureObject)(node, 'raws');\n node.raws.value = content;\n spaceAfterMeaningfulToken = false;\n break;\n\n case tokens.equals:\n if (!node.attribute) {\n return this.expected('attribute', token[_tokenize.FIELDS.START_POS], content);\n }\n\n if (node.value) {\n return this.error('Unexpected \"=\" found; an operator was already defined.', {\n index: token[_tokenize.FIELDS.START_POS]\n });\n }\n\n node.operator = node.operator ? node.operator + content : content;\n lastAdded = 'operator';\n spaceAfterMeaningfulToken = false;\n break;\n\n case tokens.comment:\n if (lastAdded) {\n if (spaceAfterMeaningfulToken || next && next[_tokenize.FIELDS.TYPE] === tokens.space || lastAdded === 'insensitive') {\n var lastComment = (0, _util.getProp)(node, 'spaces', lastAdded, 'after') || '';\n var rawLastComment = (0, _util.getProp)(node, 'raws', 'spaces', lastAdded, 'after') || lastComment;\n (0, _util.ensureObject)(node, 'raws', 'spaces', lastAdded);\n node.raws.spaces[lastAdded].after = rawLastComment + content;\n } else {\n var lastValue = node[lastAdded] || '';\n var rawLastValue = (0, _util.getProp)(node, 'raws', lastAdded) || lastValue;\n (0, _util.ensureObject)(node, 'raws');\n node.raws[lastAdded] = rawLastValue + content;\n }\n } else {\n commentBefore = commentBefore + content;\n }\n\n break;\n\n default:\n return this.error(\"Unexpected \\\"\" + content + \"\\\" found.\", {\n index: token[_tokenize.FIELDS.START_POS]\n });\n }\n\n pos++;\n }\n\n unescapeProp(node, \"attribute\");\n unescapeProp(node, \"namespace\");\n this.newNode(new _attribute[\"default\"](node));\n this.position++;\n }\n /**\n * return a node containing meaningless garbage up to (but not including) the specified token position.\n * if the token position is negative, all remaining tokens are consumed.\n *\n * This returns an array containing a single string node if all whitespace,\n * otherwise an array of comment nodes with space before and after.\n *\n * These tokens are not added to the current selector, the caller can add them or use them to amend\n * a previous node's space metadata.\n *\n * In lossy mode, this returns only comments.\n */\n ;\n\n _proto.parseWhitespaceEquivalentTokens = function parseWhitespaceEquivalentTokens(stopPosition) {\n if (stopPosition < 0) {\n stopPosition = this.tokens.length;\n }\n\n var startPosition = this.position;\n var nodes = [];\n var space = \"\";\n var lastComment = undefined;\n\n do {\n if (WHITESPACE_TOKENS[this.currToken[_tokenize.FIELDS.TYPE]]) {\n if (!this.options.lossy) {\n space += this.content();\n }\n } else if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.comment) {\n var spaces = {};\n\n if (space) {\n spaces.before = space;\n space = \"\";\n }\n\n lastComment = new _comment[\"default\"]({\n value: this.content(),\n source: getTokenSource(this.currToken),\n sourceIndex: this.currToken[_tokenize.FIELDS.START_POS],\n spaces: spaces\n });\n nodes.push(lastComment);\n }\n } while (++this.position < stopPosition);\n\n if (space) {\n if (lastComment) {\n lastComment.spaces.after = space;\n } else if (!this.options.lossy) {\n var firstToken = this.tokens[startPosition];\n var lastToken = this.tokens[this.position - 1];\n nodes.push(new _string[\"default\"]({\n value: '',\n source: getSource(firstToken[_tokenize.FIELDS.START_LINE], firstToken[_tokenize.FIELDS.START_COL], lastToken[_tokenize.FIELDS.END_LINE], lastToken[_tokenize.FIELDS.END_COL]),\n sourceIndex: firstToken[_tokenize.FIELDS.START_POS],\n spaces: {\n before: space,\n after: ''\n }\n }));\n }\n }\n\n return nodes;\n }\n /**\n * \n * @param {*} nodes \n */\n ;\n\n _proto.convertWhitespaceNodesToSpace = function convertWhitespaceNodesToSpace(nodes, requiredSpace) {\n var _this2 = this;\n\n if (requiredSpace === void 0) {\n requiredSpace = false;\n }\n\n var space = \"\";\n var rawSpace = \"\";\n nodes.forEach(function (n) {\n var spaceBefore = _this2.lossySpace(n.spaces.before, requiredSpace);\n\n var rawSpaceBefore = _this2.lossySpace(n.rawSpaceBefore, requiredSpace);\n\n space += spaceBefore + _this2.lossySpace(n.spaces.after, requiredSpace && spaceBefore.length === 0);\n rawSpace += spaceBefore + n.value + _this2.lossySpace(n.rawSpaceAfter, requiredSpace && rawSpaceBefore.length === 0);\n });\n\n if (rawSpace === space) {\n rawSpace = undefined;\n }\n\n var result = {\n space: space,\n rawSpace: rawSpace\n };\n return result;\n };\n\n _proto.isNamedCombinator = function isNamedCombinator(position) {\n if (position === void 0) {\n position = this.position;\n }\n\n return this.tokens[position + 0] && this.tokens[position + 0][_tokenize.FIELDS.TYPE] === tokens.slash && this.tokens[position + 1] && this.tokens[position + 1][_tokenize.FIELDS.TYPE] === tokens.word && this.tokens[position + 2] && this.tokens[position + 2][_tokenize.FIELDS.TYPE] === tokens.slash;\n };\n\n _proto.namedCombinator = function namedCombinator() {\n if (this.isNamedCombinator()) {\n var nameRaw = this.content(this.tokens[this.position + 1]);\n var name = (0, _util.unesc)(nameRaw).toLowerCase();\n var raws = {};\n\n if (name !== nameRaw) {\n raws.value = \"/\" + nameRaw + \"/\";\n }\n\n var node = new _combinator[\"default\"]({\n value: \"/\" + name + \"/\",\n source: getSource(this.currToken[_tokenize.FIELDS.START_LINE], this.currToken[_tokenize.FIELDS.START_COL], this.tokens[this.position + 2][_tokenize.FIELDS.END_LINE], this.tokens[this.position + 2][_tokenize.FIELDS.END_COL]),\n sourceIndex: this.currToken[_tokenize.FIELDS.START_POS],\n raws: raws\n });\n this.position = this.position + 3;\n return node;\n } else {\n this.unexpected();\n }\n };\n\n _proto.combinator = function combinator() {\n var _this3 = this;\n\n if (this.content() === '|') {\n return this.namespace();\n } // We need to decide between a space that's a descendant combinator and meaningless whitespace at the end of a selector.\n\n\n var nextSigTokenPos = this.locateNextMeaningfulToken(this.position);\n\n if (nextSigTokenPos < 0 || this.tokens[nextSigTokenPos][_tokenize.FIELDS.TYPE] === tokens.comma) {\n var nodes = this.parseWhitespaceEquivalentTokens(nextSigTokenPos);\n\n if (nodes.length > 0) {\n var last = this.current.last;\n\n if (last) {\n var _this$convertWhitespa = this.convertWhitespaceNodesToSpace(nodes),\n space = _this$convertWhitespa.space,\n rawSpace = _this$convertWhitespa.rawSpace;\n\n if (rawSpace !== undefined) {\n last.rawSpaceAfter += rawSpace;\n }\n\n last.spaces.after += space;\n } else {\n nodes.forEach(function (n) {\n return _this3.newNode(n);\n });\n }\n }\n\n return;\n }\n\n var firstToken = this.currToken;\n var spaceOrDescendantSelectorNodes = undefined;\n\n if (nextSigTokenPos > this.position) {\n spaceOrDescendantSelectorNodes = this.parseWhitespaceEquivalentTokens(nextSigTokenPos);\n }\n\n var node;\n\n if (this.isNamedCombinator()) {\n node = this.namedCombinator();\n } else if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.combinator) {\n node = new _combinator[\"default\"]({\n value: this.content(),\n source: getTokenSource(this.currToken),\n sourceIndex: this.currToken[_tokenize.FIELDS.START_POS]\n });\n this.position++;\n } else if (WHITESPACE_TOKENS[this.currToken[_tokenize.FIELDS.TYPE]]) {// pass\n } else if (!spaceOrDescendantSelectorNodes) {\n this.unexpected();\n }\n\n if (node) {\n if (spaceOrDescendantSelectorNodes) {\n var _this$convertWhitespa2 = this.convertWhitespaceNodesToSpace(spaceOrDescendantSelectorNodes),\n _space = _this$convertWhitespa2.space,\n _rawSpace = _this$convertWhitespa2.rawSpace;\n\n node.spaces.before = _space;\n node.rawSpaceBefore = _rawSpace;\n }\n } else {\n // descendant combinator\n var _this$convertWhitespa3 = this.convertWhitespaceNodesToSpace(spaceOrDescendantSelectorNodes, true),\n _space2 = _this$convertWhitespa3.space,\n _rawSpace2 = _this$convertWhitespa3.rawSpace;\n\n if (!_rawSpace2) {\n _rawSpace2 = _space2;\n }\n\n var spaces = {};\n var raws = {\n spaces: {}\n };\n\n if (_space2.endsWith(' ') && _rawSpace2.endsWith(' ')) {\n spaces.before = _space2.slice(0, _space2.length - 1);\n raws.spaces.before = _rawSpace2.slice(0, _rawSpace2.length - 1);\n } else if (_space2.startsWith(' ') && _rawSpace2.startsWith(' ')) {\n spaces.after = _space2.slice(1);\n raws.spaces.after = _rawSpace2.slice(1);\n } else {\n raws.value = _rawSpace2;\n }\n\n node = new _combinator[\"default\"]({\n value: ' ',\n source: getTokenSourceSpan(firstToken, this.tokens[this.position - 1]),\n sourceIndex: firstToken[_tokenize.FIELDS.START_POS],\n spaces: spaces,\n raws: raws\n });\n }\n\n if (this.currToken && this.currToken[_tokenize.FIELDS.TYPE] === tokens.space) {\n node.spaces.after = this.optionalSpace(this.content());\n this.position++;\n }\n\n return this.newNode(node);\n };\n\n _proto.comma = function comma() {\n if (this.position === this.tokens.length - 1) {\n this.root.trailingComma = true;\n this.position++;\n return;\n }\n\n this.current._inferEndPosition();\n\n var selector = new _selector[\"default\"]({\n source: {\n start: tokenStart(this.tokens[this.position + 1])\n }\n });\n this.current.parent.append(selector);\n this.current = selector;\n this.position++;\n };\n\n _proto.comment = function comment() {\n var current = this.currToken;\n this.newNode(new _comment[\"default\"]({\n value: this.content(),\n source: getTokenSource(current),\n sourceIndex: current[_tokenize.FIELDS.START_POS]\n }));\n this.position++;\n };\n\n _proto.error = function error(message, opts) {\n throw this.root.error(message, opts);\n };\n\n _proto.missingBackslash = function missingBackslash() {\n return this.error('Expected a backslash preceding the semicolon.', {\n index: this.currToken[_tokenize.FIELDS.START_POS]\n });\n };\n\n _proto.missingParenthesis = function missingParenthesis() {\n return this.expected('opening parenthesis', this.currToken[_tokenize.FIELDS.START_POS]);\n };\n\n _proto.missingSquareBracket = function missingSquareBracket() {\n return this.expected('opening square bracket', this.currToken[_tokenize.FIELDS.START_POS]);\n };\n\n _proto.unexpected = function unexpected() {\n return this.error(\"Unexpected '\" + this.content() + \"'. Escaping special characters with \\\\ may help.\", this.currToken[_tokenize.FIELDS.START_POS]);\n };\n\n _proto.namespace = function namespace() {\n var before = this.prevToken && this.content(this.prevToken) || true;\n\n if (this.nextToken[_tokenize.FIELDS.TYPE] === tokens.word) {\n this.position++;\n return this.word(before);\n } else if (this.nextToken[_tokenize.FIELDS.TYPE] === tokens.asterisk) {\n this.position++;\n return this.universal(before);\n }\n };\n\n _proto.nesting = function nesting() {\n if (this.nextToken) {\n var nextContent = this.content(this.nextToken);\n\n if (nextContent === \"|\") {\n this.position++;\n return;\n }\n }\n\n var current = this.currToken;\n this.newNode(new _nesting[\"default\"]({\n value: this.content(),\n source: getTokenSource(current),\n sourceIndex: current[_tokenize.FIELDS.START_POS]\n }));\n this.position++;\n };\n\n _proto.parentheses = function parentheses() {\n var last = this.current.last;\n var unbalanced = 1;\n this.position++;\n\n if (last && last.type === types.PSEUDO) {\n var selector = new _selector[\"default\"]({\n source: {\n start: tokenStart(this.tokens[this.position - 1])\n }\n });\n var cache = this.current;\n last.append(selector);\n this.current = selector;\n\n while (this.position < this.tokens.length && unbalanced) {\n if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.openParenthesis) {\n unbalanced++;\n }\n\n if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.closeParenthesis) {\n unbalanced--;\n }\n\n if (unbalanced) {\n this.parse();\n } else {\n this.current.source.end = tokenEnd(this.currToken);\n this.current.parent.source.end = tokenEnd(this.currToken);\n this.position++;\n }\n }\n\n this.current = cache;\n } else {\n // I think this case should be an error. It's used to implement a basic parse of media queries\n // but I don't think it's a good idea.\n var parenStart = this.currToken;\n var parenValue = \"(\";\n var parenEnd;\n\n while (this.position < this.tokens.length && unbalanced) {\n if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.openParenthesis) {\n unbalanced++;\n }\n\n if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.closeParenthesis) {\n unbalanced--;\n }\n\n parenEnd = this.currToken;\n parenValue += this.parseParenthesisToken(this.currToken);\n this.position++;\n }\n\n if (last) {\n last.appendToPropertyAndEscape(\"value\", parenValue, parenValue);\n } else {\n this.newNode(new _string[\"default\"]({\n value: parenValue,\n source: getSource(parenStart[_tokenize.FIELDS.START_LINE], parenStart[_tokenize.FIELDS.START_COL], parenEnd[_tokenize.FIELDS.END_LINE], parenEnd[_tokenize.FIELDS.END_COL]),\n sourceIndex: parenStart[_tokenize.FIELDS.START_POS]\n }));\n }\n }\n\n if (unbalanced) {\n return this.expected('closing parenthesis', this.currToken[_tokenize.FIELDS.START_POS]);\n }\n };\n\n _proto.pseudo = function pseudo() {\n var _this4 = this;\n\n var pseudoStr = '';\n var startingToken = this.currToken;\n\n while (this.currToken && this.currToken[_tokenize.FIELDS.TYPE] === tokens.colon) {\n pseudoStr += this.content();\n this.position++;\n }\n\n if (!this.currToken) {\n return this.expected(['pseudo-class', 'pseudo-element'], this.position - 1);\n }\n\n if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.word) {\n this.splitWord(false, function (first, length) {\n pseudoStr += first;\n\n _this4.newNode(new _pseudo[\"default\"]({\n value: pseudoStr,\n source: getTokenSourceSpan(startingToken, _this4.currToken),\n sourceIndex: startingToken[_tokenize.FIELDS.START_POS]\n }));\n\n if (length > 1 && _this4.nextToken && _this4.nextToken[_tokenize.FIELDS.TYPE] === tokens.openParenthesis) {\n _this4.error('Misplaced parenthesis.', {\n index: _this4.nextToken[_tokenize.FIELDS.START_POS]\n });\n }\n });\n } else {\n return this.expected(['pseudo-class', 'pseudo-element'], this.currToken[_tokenize.FIELDS.START_POS]);\n }\n };\n\n _proto.space = function space() {\n var content = this.content(); // Handle space before and after the selector\n\n if (this.position === 0 || this.prevToken[_tokenize.FIELDS.TYPE] === tokens.comma || this.prevToken[_tokenize.FIELDS.TYPE] === tokens.openParenthesis || this.current.nodes.every(function (node) {\n return node.type === 'comment';\n })) {\n this.spaces = this.optionalSpace(content);\n this.position++;\n } else if (this.position === this.tokens.length - 1 || this.nextToken[_tokenize.FIELDS.TYPE] === tokens.comma || this.nextToken[_tokenize.FIELDS.TYPE] === tokens.closeParenthesis) {\n this.current.last.spaces.after = this.optionalSpace(content);\n this.position++;\n } else {\n this.combinator();\n }\n };\n\n _proto.string = function string() {\n var current = this.currToken;\n this.newNode(new _string[\"default\"]({\n value: this.content(),\n source: getTokenSource(current),\n sourceIndex: current[_tokenize.FIELDS.START_POS]\n }));\n this.position++;\n };\n\n _proto.universal = function universal(namespace) {\n var nextToken = this.nextToken;\n\n if (nextToken && this.content(nextToken) === '|') {\n this.position++;\n return this.namespace();\n }\n\n var current = this.currToken;\n this.newNode(new _universal[\"default\"]({\n value: this.content(),\n source: getTokenSource(current),\n sourceIndex: current[_tokenize.FIELDS.START_POS]\n }), namespace);\n this.position++;\n };\n\n _proto.splitWord = function splitWord(namespace, firstCallback) {\n var _this5 = this;\n\n var nextToken = this.nextToken;\n var word = this.content();\n\n while (nextToken && ~[tokens.dollar, tokens.caret, tokens.equals, tokens.word].indexOf(nextToken[_tokenize.FIELDS.TYPE])) {\n this.position++;\n var current = this.content();\n word += current;\n\n if (current.lastIndexOf('\\\\') === current.length - 1) {\n var next = this.nextToken;\n\n if (next && next[_tokenize.FIELDS.TYPE] === tokens.space) {\n word += this.requiredSpace(this.content(next));\n this.position++;\n }\n }\n\n nextToken = this.nextToken;\n }\n\n var hasClass = indexesOf(word, '.').filter(function (i) {\n return word[i - 1] !== '\\\\';\n });\n var hasId = indexesOf(word, '#').filter(function (i) {\n return word[i - 1] !== '\\\\';\n }); // Eliminate Sass interpolations from the list of id indexes\n\n var interpolations = indexesOf(word, '#{');\n\n if (interpolations.length) {\n hasId = hasId.filter(function (hashIndex) {\n return !~interpolations.indexOf(hashIndex);\n });\n }\n\n var indices = (0, _sortAscending[\"default\"])(uniqs([0].concat(hasClass, hasId)));\n indices.forEach(function (ind, i) {\n var index = indices[i + 1] || word.length;\n var value = word.slice(ind, index);\n\n if (i === 0 && firstCallback) {\n return firstCallback.call(_this5, value, indices.length);\n }\n\n var node;\n var current = _this5.currToken;\n var sourceIndex = current[_tokenize.FIELDS.START_POS] + indices[i];\n var source = getSource(current[1], current[2] + ind, current[3], current[2] + (index - 1));\n\n if (~hasClass.indexOf(ind)) {\n var classNameOpts = {\n value: value.slice(1),\n source: source,\n sourceIndex: sourceIndex\n };\n node = new _className[\"default\"](unescapeProp(classNameOpts, \"value\"));\n } else if (~hasId.indexOf(ind)) {\n var idOpts = {\n value: value.slice(1),\n source: source,\n sourceIndex: sourceIndex\n };\n node = new _id[\"default\"](unescapeProp(idOpts, \"value\"));\n } else {\n var tagOpts = {\n value: value,\n source: source,\n sourceIndex: sourceIndex\n };\n unescapeProp(tagOpts, \"value\");\n node = new _tag[\"default\"](tagOpts);\n }\n\n _this5.newNode(node, namespace); // Ensure that the namespace is used only once\n\n\n namespace = null;\n });\n this.position++;\n };\n\n _proto.word = function word(namespace) {\n var nextToken = this.nextToken;\n\n if (nextToken && this.content(nextToken) === '|') {\n this.position++;\n return this.namespace();\n }\n\n return this.splitWord(namespace);\n };\n\n _proto.loop = function loop() {\n while (this.position < this.tokens.length) {\n this.parse(true);\n }\n\n this.current._inferEndPosition();\n\n return this.root;\n };\n\n _proto.parse = function parse(throwOnParenthesis) {\n switch (this.currToken[_tokenize.FIELDS.TYPE]) {\n case tokens.space:\n this.space();\n break;\n\n case tokens.comment:\n this.comment();\n break;\n\n case tokens.openParenthesis:\n this.parentheses();\n break;\n\n case tokens.closeParenthesis:\n if (throwOnParenthesis) {\n this.missingParenthesis();\n }\n\n break;\n\n case tokens.openSquare:\n this.attribute();\n break;\n\n case tokens.dollar:\n case tokens.caret:\n case tokens.equals:\n case tokens.word:\n this.word();\n break;\n\n case tokens.colon:\n this.pseudo();\n break;\n\n case tokens.comma:\n this.comma();\n break;\n\n case tokens.asterisk:\n this.universal();\n break;\n\n case tokens.ampersand:\n this.nesting();\n break;\n\n case tokens.slash:\n case tokens.combinator:\n this.combinator();\n break;\n\n case tokens.str:\n this.string();\n break;\n // These cases throw; no break needed.\n\n case tokens.closeSquare:\n this.missingSquareBracket();\n\n case tokens.semicolon:\n this.missingBackslash();\n\n default:\n this.unexpected();\n }\n }\n /**\n * Helpers\n */\n ;\n\n _proto.expected = function expected(description, index, found) {\n if (Array.isArray(description)) {\n var last = description.pop();\n description = description.join(', ') + \" or \" + last;\n }\n\n var an = /^[aeiou]/.test(description[0]) ? 'an' : 'a';\n\n if (!found) {\n return this.error(\"Expected \" + an + \" \" + description + \".\", {\n index: index\n });\n }\n\n return this.error(\"Expected \" + an + \" \" + description + \", found \\\"\" + found + \"\\\" instead.\", {\n index: index\n });\n };\n\n _proto.requiredSpace = function requiredSpace(space) {\n return this.options.lossy ? ' ' : space;\n };\n\n _proto.optionalSpace = function optionalSpace(space) {\n return this.options.lossy ? '' : space;\n };\n\n _proto.lossySpace = function lossySpace(space, required) {\n if (this.options.lossy) {\n return required ? ' ' : '';\n } else {\n return space;\n }\n };\n\n _proto.parseParenthesisToken = function parseParenthesisToken(token) {\n var content = this.content(token);\n\n if (token[_tokenize.FIELDS.TYPE] === tokens.space) {\n return this.requiredSpace(content);\n } else {\n return content;\n }\n };\n\n _proto.newNode = function newNode(node, namespace) {\n if (namespace) {\n if (/^ +$/.test(namespace)) {\n if (!this.options.lossy) {\n this.spaces = (this.spaces || '') + namespace;\n }\n\n namespace = true;\n }\n\n node.namespace = namespace;\n unescapeProp(node, \"namespace\");\n }\n\n if (this.spaces) {\n node.spaces.before = this.spaces;\n this.spaces = '';\n }\n\n return this.current.append(node);\n };\n\n _proto.content = function content(token) {\n if (token === void 0) {\n token = this.currToken;\n }\n\n return this.css.slice(token[_tokenize.FIELDS.START_POS], token[_tokenize.FIELDS.END_POS]);\n };\n\n /**\n * returns the index of the next non-whitespace, non-comment token.\n * returns -1 if no meaningful token is found.\n */\n _proto.locateNextMeaningfulToken = function locateNextMeaningfulToken(startPosition) {\n if (startPosition === void 0) {\n startPosition = this.position + 1;\n }\n\n var searchPosition = startPosition;\n\n while (searchPosition < this.tokens.length) {\n if (WHITESPACE_EQUIV_TOKENS[this.tokens[searchPosition][_tokenize.FIELDS.TYPE]]) {\n searchPosition++;\n continue;\n } else {\n return searchPosition;\n }\n }\n\n return -1;\n };\n\n _createClass(Parser, [{\n key: \"currToken\",\n get: function get() {\n return this.tokens[this.position];\n }\n }, {\n key: \"nextToken\",\n get: function get() {\n return this.tokens[this.position + 1];\n }\n }, {\n key: \"prevToken\",\n get: function get() {\n return this.tokens[this.position - 1];\n }\n }]);\n\n return Parser;\n}();\n\nexports[\"default\"] = Parser;\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = getProp;\n\nfunction getProp(obj) {\n for (var _len = arguments.length, props = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n props[_key - 1] = arguments[_key];\n }\n\n while (props.length > 0) {\n var prop = props.shift();\n\n if (!obj[prop]) {\n return undefined;\n }\n\n obj = obj[prop];\n }\n\n return obj;\n}\n\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = ensureObject;\n\nfunction ensureObject(obj) {\n for (var _len = arguments.length, props = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n props[_key - 1] = arguments[_key];\n }\n\n while (props.length > 0) {\n var prop = props.shift();\n\n if (!obj[prop]) {\n obj[prop] = {};\n }\n\n obj = obj[prop];\n }\n}\n\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = stripComments;\n\nfunction stripComments(str) {\n var s = \"\";\n var commentStart = str.indexOf(\"/*\");\n var lastEnd = 0;\n\n while (commentStart >= 0) {\n s = s + str.slice(lastEnd, commentStart);\n var commentEnd = str.indexOf(\"*/\", commentStart + 2);\n\n if (commentEnd < 0) {\n return s;\n }\n\n lastEnd = commentEnd + 2;\n commentStart = str.indexOf(\"/*\", lastEnd);\n }\n\n s = s + str.slice(lastEnd);\n return s;\n}\n\nmodule.exports = exports.default;","\"use strict\";\n\nexports.__esModule = true;\nexports[\"default\"] = sortAscending;\n\nfunction sortAscending(list) {\n return list.sort(function (a, b) {\n return a - b;\n });\n}\n\n;\nmodule.exports = exports.default;","export type SourceMapSegment =\n\t| [number]\n\t| [number, number, number, number]\n\t| [number, number, number, number, number];\nexport type SourceMapLine = SourceMapSegment[];\nexport type SourceMapMappings = SourceMapLine[];\n\nconst charToInteger: { [charCode: number]: number } = {};\nconst chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\nfor (let i = 0; i < chars.length; i++) {\n\tcharToInteger[chars.charCodeAt(i)] = i;\n}\n\nexport function decode(mappings: string): SourceMapMappings {\n\tconst decoded: SourceMapMappings = [];\n\tlet line: SourceMapLine = [];\n\tconst segment: SourceMapSegment = [\n\t\t0, // generated code column\n\t\t0, // source file index\n\t\t0, // source code line\n\t\t0, // source code column\n\t\t0, // name index\n\t];\n\n\tlet j = 0;\n\tfor (let i = 0, shift = 0, value = 0; i < mappings.length; i++) {\n\t\tconst c = mappings.charCodeAt(i);\n\n\t\tif (c === 44) { // \",\"\n\t\t\tsegmentify(line, segment, j);\n\t\t\tj = 0;\n\n\t\t} else if (c === 59) { // \";\"\n\t\t\tsegmentify(line, segment, j);\n\t\t\tj = 0;\n\t\t\tdecoded.push(line);\n\t\t\tline = [];\n\t\t\tsegment[0] = 0;\n\n\t\t} else {\n\t\t\tlet integer = charToInteger[c];\n\t\t\tif (integer === undefined) {\n\t\t\t\tthrow new Error('Invalid character (' + String.fromCharCode(c) + ')');\n\t\t\t}\n\n\t\t\tconst hasContinuationBit = integer & 32;\n\n\t\t\tinteger &= 31;\n\t\t\tvalue += integer << shift;\n\n\t\t\tif (hasContinuationBit) {\n\t\t\t\tshift += 5;\n\t\t\t} else {\n\t\t\t\tconst shouldNegate = value & 1;\n\t\t\t\tvalue >>>= 1;\n\n\t\t\t\tif (shouldNegate) {\n\t\t\t\t\tvalue = value === 0 ? -0x80000000 : -value;\n\t\t\t\t}\n\n\t\t\t\tsegment[j] += value;\n\t\t\t\tj++;\n\t\t\t\tvalue = shift = 0; // reset\n\t\t\t}\n\t\t}\n\t}\n\n\tsegmentify(line, segment, j);\n\tdecoded.push(line);\n\n\treturn decoded;\n}\n\nfunction segmentify(line: SourceMapSegment[], segment: SourceMapSegment, j: number) {\n\t// This looks ugly, but we're creating specialized arrays with a specific\n\t// length. This is much faster than creating a new array (which v8 expands to\n\t// a capacity of 17 after pushing the first item), or slicing out a subarray\n\t// (which is slow). Length 4 is assumed to be the most frequent, followed by\n\t// length 5 (since not everything will have an associated name), followed by\n\t// length 1 (it's probably rare for a source substring to not have an\n\t// associated segment data).\n\tif (j === 4) line.push([segment[0], segment[1], segment[2], segment[3]]);\n\telse if (j === 5) line.push([segment[0], segment[1], segment[2], segment[3], segment[4]]);\n\telse if (j === 1) line.push([segment[0]]);\n}\n\nexport function encode(decoded: SourceMapMappings): string {\n\tlet sourceFileIndex = 0; // second field\n\tlet sourceCodeLine = 0; // third field\n\tlet sourceCodeColumn = 0; // fourth field\n\tlet nameIndex = 0; // fifth field\n\tlet mappings = '';\n\n\tfor (let i = 0; i < decoded.length; i++) {\n\t\tconst line = decoded[i];\n\t\tif (i > 0) mappings += ';';\n\t\tif (line.length === 0) continue;\n\n\t\tlet generatedCodeColumn = 0; // first field\n\n\t\tconst lineMappings: string[] = [];\n\n\t\tfor (const segment of line) {\n\t\t\tlet segmentMappings = encodeInteger(segment[0] - generatedCodeColumn);\n\t\t\tgeneratedCodeColumn = segment[0];\n\n\t\t\tif (segment.length > 1) {\n\t\t\t\tsegmentMappings +=\n\t\t\t\t\tencodeInteger(segment[1] - sourceFileIndex) +\n\t\t\t\t\tencodeInteger(segment[2] - sourceCodeLine) +\n\t\t\t\t\tencodeInteger(segment[3] - sourceCodeColumn);\n\n\t\t\t\tsourceFileIndex = segment[1];\n\t\t\t\tsourceCodeLine = segment[2];\n\t\t\t\tsourceCodeColumn = segment[3];\n\t\t\t}\n\n\t\t\tif (segment.length === 5) {\n\t\t\t\tsegmentMappings += encodeInteger(segment[4] - nameIndex);\n\t\t\t\tnameIndex = segment[4];\n\t\t\t}\n\n\t\t\tlineMappings.push(segmentMappings);\n\t\t}\n\n\t\tmappings += lineMappings.join(',');\n\t}\n\n\treturn mappings;\n}\n\nfunction encodeInteger(num: number): string {\n\tvar result = '';\n\tnum = num < 0 ? (-num << 1) | 1 : num << 1;\n\tdo {\n\t\tvar clamped = num & 31;\n\t\tnum >>>= 5;\n\t\tif (num > 0) {\n\t\t\tclamped |= 32;\n\t\t}\n\t\tresult += chars[clamped];\n\t} while (num > 0);\n\n\treturn result;\n}\n","'use strict';\nvar NATIVE_ARRAY_BUFFER = require('../internals/array-buffer-native');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar global = require('../internals/global');\nvar isObject = require('../internals/is-object');\nvar has = require('../internals/has');\nvar classof = require('../internals/classof');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar defineProperty = require('../internals/object-define-property').f;\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar uid = require('../internals/uid');\n\nvar Int8Array = global.Int8Array;\nvar Int8ArrayPrototype = Int8Array && Int8Array.prototype;\nvar Uint8ClampedArray = global.Uint8ClampedArray;\nvar Uint8ClampedArrayPrototype = Uint8ClampedArray && Uint8ClampedArray.prototype;\nvar TypedArray = Int8Array && getPrototypeOf(Int8Array);\nvar TypedArrayPrototype = Int8ArrayPrototype && getPrototypeOf(Int8ArrayPrototype);\nvar ObjectPrototype = Object.prototype;\nvar isPrototypeOf = ObjectPrototype.isPrototypeOf;\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar TYPED_ARRAY_TAG = uid('TYPED_ARRAY_TAG');\n// Fixing native typed arrays in Opera Presto crashes the browser, see #595\nvar NATIVE_ARRAY_BUFFER_VIEWS = NATIVE_ARRAY_BUFFER && !!setPrototypeOf && classof(global.opera) !== 'Opera';\nvar TYPED_ARRAY_TAG_REQIRED = false;\nvar NAME;\n\nvar TypedArrayConstructorsList = {\n Int8Array: 1,\n Uint8Array: 1,\n Uint8ClampedArray: 1,\n Int16Array: 2,\n Uint16Array: 2,\n Int32Array: 4,\n Uint32Array: 4,\n Float32Array: 4,\n Float64Array: 8\n};\n\nvar BigIntArrayConstructorsList = {\n BigInt64Array: 8,\n BigUint64Array: 8\n};\n\nvar isView = function isView(it) {\n if (!isObject(it)) return false;\n var klass = classof(it);\n return klass === 'DataView'\n || has(TypedArrayConstructorsList, klass)\n || has(BigIntArrayConstructorsList, klass);\n};\n\nvar isTypedArray = function (it) {\n if (!isObject(it)) return false;\n var klass = classof(it);\n return has(TypedArrayConstructorsList, klass)\n || has(BigIntArrayConstructorsList, klass);\n};\n\nvar aTypedArray = function (it) {\n if (isTypedArray(it)) return it;\n throw TypeError('Target is not a typed array');\n};\n\nvar aTypedArrayConstructor = function (C) {\n if (setPrototypeOf) {\n if (isPrototypeOf.call(TypedArray, C)) return C;\n } else for (var ARRAY in TypedArrayConstructorsList) if (has(TypedArrayConstructorsList, NAME)) {\n var TypedArrayConstructor = global[ARRAY];\n if (TypedArrayConstructor && (C === TypedArrayConstructor || isPrototypeOf.call(TypedArrayConstructor, C))) {\n return C;\n }\n } throw TypeError('Target is not a typed array constructor');\n};\n\nvar exportTypedArrayMethod = function (KEY, property, forced) {\n if (!DESCRIPTORS) return;\n if (forced) for (var ARRAY in TypedArrayConstructorsList) {\n var TypedArrayConstructor = global[ARRAY];\n if (TypedArrayConstructor && has(TypedArrayConstructor.prototype, KEY)) try {\n delete TypedArrayConstructor.prototype[KEY];\n } catch (error) { /* empty */ }\n }\n if (!TypedArrayPrototype[KEY] || forced) {\n redefine(TypedArrayPrototype, KEY, forced ? property\n : NATIVE_ARRAY_BUFFER_VIEWS && Int8ArrayPrototype[KEY] || property);\n }\n};\n\nvar exportTypedArrayStaticMethod = function (KEY, property, forced) {\n var ARRAY, TypedArrayConstructor;\n if (!DESCRIPTORS) return;\n if (setPrototypeOf) {\n if (forced) for (ARRAY in TypedArrayConstructorsList) {\n TypedArrayConstructor = global[ARRAY];\n if (TypedArrayConstructor && has(TypedArrayConstructor, KEY)) try {\n delete TypedArrayConstructor[KEY];\n } catch (error) { /* empty */ }\n }\n if (!TypedArray[KEY] || forced) {\n // V8 ~ Chrome 49-50 `%TypedArray%` methods are non-writable non-configurable\n try {\n return redefine(TypedArray, KEY, forced ? property : NATIVE_ARRAY_BUFFER_VIEWS && TypedArray[KEY] || property);\n } catch (error) { /* empty */ }\n } else return;\n }\n for (ARRAY in TypedArrayConstructorsList) {\n TypedArrayConstructor = global[ARRAY];\n if (TypedArrayConstructor && (!TypedArrayConstructor[KEY] || forced)) {\n redefine(TypedArrayConstructor, KEY, property);\n }\n }\n};\n\nfor (NAME in TypedArrayConstructorsList) {\n if (!global[NAME]) NATIVE_ARRAY_BUFFER_VIEWS = false;\n}\n\n// WebKit bug - typed arrays constructors prototype is Object.prototype\nif (!NATIVE_ARRAY_BUFFER_VIEWS || typeof TypedArray != 'function' || TypedArray === Function.prototype) {\n // eslint-disable-next-line no-shadow -- safe\n TypedArray = function TypedArray() {\n throw TypeError('Incorrect invocation');\n };\n if (NATIVE_ARRAY_BUFFER_VIEWS) for (NAME in TypedArrayConstructorsList) {\n if (global[NAME]) setPrototypeOf(global[NAME], TypedArray);\n }\n}\n\nif (!NATIVE_ARRAY_BUFFER_VIEWS || !TypedArrayPrototype || TypedArrayPrototype === ObjectPrototype) {\n TypedArrayPrototype = TypedArray.prototype;\n if (NATIVE_ARRAY_BUFFER_VIEWS) for (NAME in TypedArrayConstructorsList) {\n if (global[NAME]) setPrototypeOf(global[NAME].prototype, TypedArrayPrototype);\n }\n}\n\n// WebKit bug - one more object in Uint8ClampedArray prototype chain\nif (NATIVE_ARRAY_BUFFER_VIEWS && getPrototypeOf(Uint8ClampedArrayPrototype) !== TypedArrayPrototype) {\n setPrototypeOf(Uint8ClampedArrayPrototype, TypedArrayPrototype);\n}\n\nif (DESCRIPTORS && !has(TypedArrayPrototype, TO_STRING_TAG)) {\n TYPED_ARRAY_TAG_REQIRED = true;\n defineProperty(TypedArrayPrototype, TO_STRING_TAG, { get: function () {\n return isObject(this) ? this[TYPED_ARRAY_TAG] : undefined;\n } });\n for (NAME in TypedArrayConstructorsList) if (global[NAME]) {\n createNonEnumerableProperty(global[NAME], TYPED_ARRAY_TAG, NAME);\n }\n}\n\nmodule.exports = {\n NATIVE_ARRAY_BUFFER_VIEWS: NATIVE_ARRAY_BUFFER_VIEWS,\n TYPED_ARRAY_TAG: TYPED_ARRAY_TAG_REQIRED && TYPED_ARRAY_TAG,\n aTypedArray: aTypedArray,\n aTypedArrayConstructor: aTypedArrayConstructor,\n exportTypedArrayMethod: exportTypedArrayMethod,\n exportTypedArrayStaticMethod: exportTypedArrayStaticMethod,\n isView: isView,\n isTypedArray: isTypedArray,\n TypedArray: TypedArray,\n TypedArrayPrototype: TypedArrayPrototype\n};\n","// eslint-disable-next-line es/no-typed-arrays -- safe\nmodule.exports = typeof ArrayBuffer !== 'undefined' && typeof DataView !== 'undefined';\n","var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar classofRaw = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n var O, tag, result;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag\n // builtinTag case\n : CORRECT_ARGUMENTS ? classofRaw(O)\n // ES3 arguments fallback\n : (result = classofRaw(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : result;\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n","module.exports = false;\n","var global = require('../internals/global');\n\nmodule.exports = global;\n","/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\n\nmodule.exports = NATIVE_SYMBOL\n && !Symbol.sham\n && typeof Symbol.iterator == 'symbol';\n","var NATIVE_WEAK_MAP = require('../internals/native-weak-map');\nvar global = require('../internals/global');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar objectHas = require('../internals/has');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n var store = shared.state || (shared.state = new WeakMap());\n var wmget = store.get;\n var wmhas = store.has;\n var wmset = store.set;\n set = function (it, metadata) {\n if (wmhas.call(store, it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n wmset.call(store, it, metadata);\n return metadata;\n };\n get = function (it) {\n return wmget.call(store, it) || {};\n };\n has = function (it) {\n return wmhas.call(store, it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n if (objectHas(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return objectHas(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return objectHas(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n","var global = require('../internals/global');\nvar inspectSource = require('../internals/inspect-source');\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = typeof WeakMap === 'function' && /native code/.test(inspectSource(WeakMap));\n","var has = require('../internals/has');\nvar toObject = require('../internals/to-object');\nvar sharedKey = require('../internals/shared-key');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar ObjectPrototype = Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\n// eslint-disable-next-line es/no-object-getprototypeof -- safe\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectPrototype : null;\n};\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n function F() { /* empty */ }\n F.prototype.constructor = null;\n // eslint-disable-next-line es/no-object-getprototypeof -- required for testing\n return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n","/* eslint-disable no-proto -- safe */\nvar anObject = require('../internals/an-object');\nvar aPossiblePrototype = require('../internals/a-possible-prototype');\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n// eslint-disable-next-line es/no-object-setprototypeof -- safe\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n var CORRECT_SETTER = false;\n var test = {};\n var setter;\n try {\n // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n setter = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set;\n setter.call(test, []);\n CORRECT_SETTER = test instanceof Array;\n } catch (error) { /* empty */ }\n return function setPrototypeOf(O, proto) {\n anObject(O);\n aPossiblePrototype(proto);\n if (CORRECT_SETTER) setter.call(O, proto);\n else O.__proto__ = proto;\n return O;\n };\n}() : undefined);\n","var isObject = require('../internals/is-object');\n\nmodule.exports = function (it) {\n if (!isObject(it) && it !== null) {\n throw TypeError(\"Can't set \" + String(it) + ' as a prototype');\n } return it;\n};\n","// TODO: use something more complex like timsort?\nvar floor = Math.floor;\n\nvar mergeSort = function (array, comparefn) {\n var length = array.length;\n var middle = floor(length / 2);\n return length < 8 ? insertionSort(array, comparefn) : merge(\n mergeSort(array.slice(0, middle), comparefn),\n mergeSort(array.slice(middle), comparefn),\n comparefn\n );\n};\n\nvar insertionSort = function (array, comparefn) {\n var length = array.length;\n var i = 1;\n var element, j;\n\n while (i < length) {\n j = i;\n element = array[i];\n while (j && comparefn(array[j - 1], element) > 0) {\n array[j] = array[--j];\n }\n if (j !== i++) array[j] = element;\n } return array;\n};\n\nvar merge = function (left, right, comparefn) {\n var llength = left.length;\n var rlength = right.length;\n var lindex = 0;\n var rindex = 0;\n var result = [];\n\n while (lindex < llength || rindex < rlength) {\n if (lindex < llength && rindex < rlength) {\n result.push(comparefn(left[lindex], right[rindex]) <= 0 ? left[lindex++] : right[rindex++]);\n } else {\n result.push(lindex < llength ? left[lindex++] : right[rindex++]);\n }\n } return result;\n};\n\nmodule.exports = mergeSort;\n","var userAgent = require('../internals/engine-user-agent');\n\nvar firefox = userAgent.match(/firefox\\/(\\d+)/i);\n\nmodule.exports = !!firefox && +firefox[1];\n","var UA = require('../internals/engine-user-agent');\n\nmodule.exports = /MSIE|Trident/.test(UA);\n","var userAgent = require('../internals/engine-user-agent');\n\nvar webkit = userAgent.match(/AppleWebKit\\/(\\d+)\\./);\n\nmodule.exports = !!webkit && +webkit[1];\n","var global = require('../internals/global');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar setGlobal = require('../internals/set-global');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar isForced = require('../internals/is-forced');\n\n/*\n options.target - name of the target object\n options.global - target is the global object\n options.stat - export as static methods of target\n options.proto - export as prototype methods of target\n options.real - real prototype method for the `pure` version\n options.forced - export even if the native feature is available\n options.bind - bind methods to the target, required for the `pure` version\n options.wrap - wrap constructors to preventing global pollution, required for the `pure` version\n options.unsafe - use the simple assignment of property instead of delete + defineProperty\n options.sham - add a flag to not completely full polyfills\n options.enumerable - export as enumerable property\n options.noTargetGet - prevent calling a getter on target\n*/\nmodule.exports = function (options, source) {\n var TARGET = options.target;\n var GLOBAL = options.global;\n var STATIC = options.stat;\n var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n if (GLOBAL) {\n target = global;\n } else if (STATIC) {\n target = global[TARGET] || setGlobal(TARGET, {});\n } else {\n target = (global[TARGET] || {}).prototype;\n }\n if (target) for (key in source) {\n sourceProperty = source[key];\n if (options.noTargetGet) {\n descriptor = getOwnPropertyDescriptor(target, key);\n targetProperty = descriptor && descriptor.value;\n } else targetProperty = target[key];\n FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n // contained in target\n if (!FORCED && targetProperty !== undefined) {\n if (typeof sourceProperty === typeof targetProperty) continue;\n copyConstructorProperties(sourceProperty, targetProperty);\n }\n // add a flag to not completely full polyfills\n if (options.sham || (targetProperty && targetProperty.sham)) {\n createNonEnumerableProperty(sourceProperty, 'sham', true);\n }\n // extend global\n redefine(target, key, sourceProperty, options);\n }\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPrimitive = require('../internals/to-primitive');\nvar has = require('../internals/has');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return $getOwnPropertyDescriptor(O, P);\n } catch (error) { /* empty */ }\n if (has(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]);\n};\n","var fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar split = ''.split;\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n // eslint-disable-next-line no-prototype-builtins -- safe\n return !Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n return classof(it) == 'String' ? split.call(it, '') : Object(it);\n} : Object;\n","var has = require('../internals/has');\nvar ownKeys = require('../internals/own-keys');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\n\nmodule.exports = function (target, source) {\n var keys = ownKeys(source);\n var defineProperty = definePropertyModule.f;\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (!has(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n }\n};\n","var getBuiltIn = require('../internals/get-built-in');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar anObject = require('../internals/an-object');\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n var keys = getOwnPropertyNamesModule.f(anObject(it));\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n return getOwnPropertySymbols ? keys.concat(getOwnPropertySymbols(it)) : keys;\n};\n","var has = require('../internals/has');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\n\nmodule.exports = function (object, names) {\n var O = toIndexedObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) !has(hiddenKeys, key) && has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~indexOf(result, key) || result.push(key);\n }\n return result;\n};\n","var toIndexedObject = require('../internals/to-indexed-object');\nvar toLength = require('../internals/to-length');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIndexedObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare -- NaN check\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare -- NaN check\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) {\n if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.includes` method\n // https://tc39.es/ecma262/#sec-array.prototype.includes\n includes: createMethod(true),\n // `Array.prototype.indexOf` method\n // https://tc39.es/ecma262/#sec-array.prototype.indexof\n indexOf: createMethod(false)\n};\n","var toInteger = require('../internals/to-integer');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n var integer = toInteger(index);\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n","// IE8- don't enum bug keys\nmodule.exports = [\n 'constructor',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toLocaleString',\n 'toString',\n 'valueOf'\n];\n","var fails = require('../internals/fails');\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n var value = data[normalize(feature)];\n return value == POLYFILL ? true\n : value == NATIVE ? false\n : typeof detection == 'function' ? fails(detection)\n : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n","var global = require('../internals/global');\nvar fails = require('../internals/fails');\nvar bind = require('../internals/function-bind-context');\nvar html = require('../internals/html');\nvar createElement = require('../internals/document-create-element');\nvar IS_IOS = require('../internals/engine-is-ios');\nvar IS_NODE = require('../internals/engine-is-node');\n\nvar location = global.location;\nvar set = global.setImmediate;\nvar clear = global.clearImmediate;\nvar process = global.process;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\n\nvar run = function (id) {\n // eslint-disable-next-line no-prototype-builtins -- safe\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\n\nvar runner = function (id) {\n return function () {\n run(id);\n };\n};\n\nvar listener = function (event) {\n run(event.data);\n};\n\nvar post = function (id) {\n // old engines have not location.origin\n global.postMessage(id + '', location.protocol + '//' + location.host);\n};\n\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!set || !clear) {\n set = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func -- spec requirement\n (typeof fn == 'function' ? fn : Function(fn)).apply(undefined, args);\n };\n defer(counter);\n return counter;\n };\n clear = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (IS_NODE) {\n defer = function (id) {\n process.nextTick(runner(id));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(runner(id));\n };\n // Browsers with MessageChannel, includes WebWorkers\n // except iOS - https://github.com/zloirock/core-js/issues/624\n } else if (MessageChannel && !IS_IOS) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = bind(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (\n global.addEventListener &&\n typeof postMessage == 'function' &&\n !global.importScripts &&\n location && location.protocol !== 'file:' &&\n !fails(post)\n ) {\n defer = post;\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in createElement('script')) {\n defer = function (id) {\n html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(runner(id), 0);\n };\n }\n}\n\nmodule.exports = {\n set: set,\n clear: clear\n};\n","var aFunction = require('../internals/a-function');\n\n// optional / simple context binding\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 0: return function () {\n return fn.call(that);\n };\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n","var userAgent = require('../internals/engine-user-agent');\n\nmodule.exports = /(?:iphone|ipod|ipad).*applewebkit/i.test(userAgent);\n","var classof = require('../internals/classof-raw');\nvar global = require('../internals/global');\n\nmodule.exports = classof(global.process) == 'process';\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.get = get;\nexports.minVersion = minVersion;\nexports.getDependencies = getDependencies;\nexports.ensure = ensure;\nexports.default = exports.list = void 0;\n\nvar _traverse = require(\"@babel/traverse\");\n\nvar t = require(\"@babel/types\");\n\nvar _helpers = require(\"./helpers\");\n\nfunction makePath(path) {\n const parts = [];\n\n for (; path.parentPath; path = path.parentPath) {\n parts.push(path.key);\n if (path.inList) parts.push(path.listKey);\n }\n\n return parts.reverse().join(\".\");\n}\n\nlet fileClass = undefined;\n\nfunction getHelperMetadata(file) {\n const globals = new Set();\n const localBindingNames = new Set();\n const dependencies = new Map();\n let exportName;\n let exportPath;\n const exportBindingAssignments = [];\n const importPaths = [];\n const importBindingsReferences = [];\n const dependencyVisitor = {\n ImportDeclaration(child) {\n const name = child.node.source.value;\n\n if (!_helpers.default[name]) {\n throw child.buildCodeFrameError(`Unknown helper ${name}`);\n }\n\n if (child.get(\"specifiers\").length !== 1 || !child.get(\"specifiers.0\").isImportDefaultSpecifier()) {\n throw child.buildCodeFrameError(\"Helpers can only import a default value\");\n }\n\n const bindingIdentifier = child.node.specifiers[0].local;\n dependencies.set(bindingIdentifier, name);\n importPaths.push(makePath(child));\n },\n\n ExportDefaultDeclaration(child) {\n const decl = child.get(\"declaration\");\n\n if (decl.isFunctionDeclaration()) {\n if (!decl.node.id) {\n throw decl.buildCodeFrameError(\"Helpers should give names to their exported func declaration\");\n }\n\n exportName = decl.node.id.name;\n }\n\n exportPath = makePath(child);\n },\n\n ExportAllDeclaration(child) {\n throw child.buildCodeFrameError(\"Helpers can only export default\");\n },\n\n ExportNamedDeclaration(child) {\n throw child.buildCodeFrameError(\"Helpers can only export default\");\n },\n\n Statement(child) {\n if (child.isModuleDeclaration()) return;\n child.skip();\n }\n\n };\n const referenceVisitor = {\n Program(path) {\n const bindings = path.scope.getAllBindings();\n Object.keys(bindings).forEach(name => {\n if (name === exportName) return;\n if (dependencies.has(bindings[name].identifier)) return;\n localBindingNames.add(name);\n });\n },\n\n ReferencedIdentifier(child) {\n const name = child.node.name;\n const binding = child.scope.getBinding(name, true);\n\n if (!binding) {\n globals.add(name);\n } else if (dependencies.has(binding.identifier)) {\n importBindingsReferences.push(makePath(child));\n }\n },\n\n AssignmentExpression(child) {\n const left = child.get(\"left\");\n if (!(exportName in left.getBindingIdentifiers())) return;\n\n if (!left.isIdentifier()) {\n throw left.buildCodeFrameError(\"Only simple assignments to exports are allowed in helpers\");\n }\n\n const binding = child.scope.getBinding(exportName);\n\n if (binding != null && binding.scope.path.isProgram()) {\n exportBindingAssignments.push(makePath(child));\n }\n }\n\n };\n (0, _traverse.default)(file.ast, dependencyVisitor, file.scope);\n (0, _traverse.default)(file.ast, referenceVisitor, file.scope);\n if (!exportPath) throw new Error(\"Helpers must default-export something.\");\n exportBindingAssignments.reverse();\n return {\n globals: Array.from(globals),\n localBindingNames: Array.from(localBindingNames),\n dependencies,\n exportBindingAssignments,\n exportPath,\n exportName,\n importBindingsReferences,\n importPaths\n };\n}\n\nfunction permuteHelperAST(file, metadata, id, localBindings, getDependency) {\n if (localBindings && !id) {\n throw new Error(\"Unexpected local bindings for module-based helpers.\");\n }\n\n if (!id) return;\n const {\n localBindingNames,\n dependencies,\n exportBindingAssignments,\n exportPath,\n exportName,\n importBindingsReferences,\n importPaths\n } = metadata;\n const dependenciesRefs = {};\n dependencies.forEach((name, id) => {\n dependenciesRefs[id.name] = typeof getDependency === \"function\" && getDependency(name) || id;\n });\n const toRename = {};\n const bindings = new Set(localBindings || []);\n localBindingNames.forEach(name => {\n let newName = name;\n\n while (bindings.has(newName)) newName = \"_\" + newName;\n\n if (newName !== name) toRename[name] = newName;\n });\n\n if (id.type === \"Identifier\" && exportName !== id.name) {\n toRename[exportName] = id.name;\n }\n\n const visitor = {\n Program(path) {\n const exp = path.get(exportPath);\n const imps = importPaths.map(p => path.get(p));\n const impsBindingRefs = importBindingsReferences.map(p => path.get(p));\n const decl = exp.get(\"declaration\");\n\n if (id.type === \"Identifier\") {\n if (decl.isFunctionDeclaration()) {\n exp.replaceWith(decl);\n } else {\n exp.replaceWith(t.variableDeclaration(\"var\", [t.variableDeclarator(id, decl.node)]));\n }\n } else if (id.type === \"MemberExpression\") {\n if (decl.isFunctionDeclaration()) {\n exportBindingAssignments.forEach(assignPath => {\n const assign = path.get(assignPath);\n assign.replaceWith(t.assignmentExpression(\"=\", id, assign.node));\n });\n exp.replaceWith(decl);\n path.pushContainer(\"body\", t.expressionStatement(t.assignmentExpression(\"=\", id, t.identifier(exportName))));\n } else {\n exp.replaceWith(t.expressionStatement(t.assignmentExpression(\"=\", id, decl.node)));\n }\n } else {\n throw new Error(\"Unexpected helper format.\");\n }\n\n Object.keys(toRename).forEach(name => {\n path.scope.rename(name, toRename[name]);\n });\n\n for (const path of imps) path.remove();\n\n for (const path of impsBindingRefs) {\n const node = t.cloneNode(dependenciesRefs[path.node.name]);\n path.replaceWith(node);\n }\n\n path.stop();\n }\n\n };\n (0, _traverse.default)(file.ast, visitor, file.scope);\n}\n\nconst helperData = Object.create(null);\n\nfunction loadHelper(name) {\n if (!helperData[name]) {\n const helper = _helpers.default[name];\n\n if (!helper) {\n throw Object.assign(new ReferenceError(`Unknown helper ${name}`), {\n code: \"BABEL_HELPER_UNKNOWN\",\n helper: name\n });\n }\n\n const fn = () => {\n const file = {\n ast: t.file(helper.ast())\n };\n\n if (fileClass) {\n return new fileClass({\n filename: `babel-helper://${name}`\n }, file);\n }\n\n return file;\n };\n\n const metadata = getHelperMetadata(fn());\n helperData[name] = {\n build(getDependency, id, localBindings) {\n const file = fn();\n permuteHelperAST(file, metadata, id, localBindings, getDependency);\n return {\n nodes: file.ast.program.body,\n globals: metadata.globals\n };\n },\n\n minVersion() {\n return helper.minVersion;\n },\n\n dependencies: metadata.dependencies\n };\n }\n\n return helperData[name];\n}\n\nfunction get(name, getDependency, id, localBindings) {\n return loadHelper(name).build(getDependency, id, localBindings);\n}\n\nfunction minVersion(name) {\n return loadHelper(name).minVersion();\n}\n\nfunction getDependencies(name) {\n return Array.from(loadHelper(name).dependencies.values());\n}\n\nfunction ensure(name, newFileClass) {\n if (!fileClass) {\n fileClass = newFileClass;\n }\n\n loadHelper(name);\n}\n\nconst list = Object.keys(_helpers.default).map(name => name.replace(/^_/, \"\")).filter(name => name !== \"__esModule\");\nexports.list = list;\nvar _default = get;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.ForAwaitStatement = exports.NumericLiteralTypeAnnotation = exports.ExistentialTypeParam = exports.SpreadProperty = exports.RestProperty = exports.Flow = exports.Pure = exports.Generated = exports.User = exports.Var = exports.BlockScoped = exports.Referenced = exports.Scope = exports.Expression = exports.Statement = exports.BindingIdentifier = exports.ReferencedMemberExpression = exports.ReferencedIdentifier = void 0;\n\nvar t = require(\"@babel/types\");\n\nconst ReferencedIdentifier = {\n types: [\"Identifier\", \"JSXIdentifier\"],\n\n checkPath(path, opts) {\n const {\n node,\n parent\n } = path;\n\n if (!t.isIdentifier(node, opts) && !t.isJSXMemberExpression(parent, opts)) {\n if (t.isJSXIdentifier(node, opts)) {\n if (t.react.isCompatTag(node.name)) return false;\n } else {\n return false;\n }\n }\n\n return t.isReferenced(node, parent, path.parentPath.parent);\n }\n\n};\nexports.ReferencedIdentifier = ReferencedIdentifier;\nconst ReferencedMemberExpression = {\n types: [\"MemberExpression\"],\n\n checkPath({\n node,\n parent\n }) {\n return t.isMemberExpression(node) && t.isReferenced(node, parent);\n }\n\n};\nexports.ReferencedMemberExpression = ReferencedMemberExpression;\nconst BindingIdentifier = {\n types: [\"Identifier\"],\n\n checkPath(path) {\n const {\n node,\n parent\n } = path;\n const grandparent = path.parentPath.parent;\n return t.isIdentifier(node) && t.isBinding(node, parent, grandparent);\n }\n\n};\nexports.BindingIdentifier = BindingIdentifier;\nconst Statement = {\n types: [\"Statement\"],\n\n checkPath({\n node,\n parent\n }) {\n if (t.isStatement(node)) {\n if (t.isVariableDeclaration(node)) {\n if (t.isForXStatement(parent, {\n left: node\n })) return false;\n if (t.isForStatement(parent, {\n init: node\n })) return false;\n }\n\n return true;\n } else {\n return false;\n }\n }\n\n};\nexports.Statement = Statement;\nconst Expression = {\n types: [\"Expression\"],\n\n checkPath(path) {\n if (path.isIdentifier()) {\n return path.isReferencedIdentifier();\n } else {\n return t.isExpression(path.node);\n }\n }\n\n};\nexports.Expression = Expression;\nconst Scope = {\n types: [\"Scopable\", \"Pattern\"],\n\n checkPath(path) {\n return t.isScope(path.node, path.parent);\n }\n\n};\nexports.Scope = Scope;\nconst Referenced = {\n checkPath(path) {\n return t.isReferenced(path.node, path.parent);\n }\n\n};\nexports.Referenced = Referenced;\nconst BlockScoped = {\n checkPath(path) {\n return t.isBlockScoped(path.node);\n }\n\n};\nexports.BlockScoped = BlockScoped;\nconst Var = {\n types: [\"VariableDeclaration\"],\n\n checkPath(path) {\n return t.isVar(path.node);\n }\n\n};\nexports.Var = Var;\nconst User = {\n checkPath(path) {\n return path.node && !!path.node.loc;\n }\n\n};\nexports.User = User;\nconst Generated = {\n checkPath(path) {\n return !path.isUser();\n }\n\n};\nexports.Generated = Generated;\nconst Pure = {\n checkPath(path, opts) {\n return path.scope.isPure(path.node, opts);\n }\n\n};\nexports.Pure = Pure;\nconst Flow = {\n types: [\"Flow\", \"ImportDeclaration\", \"ExportDeclaration\", \"ImportSpecifier\"],\n\n checkPath({\n node\n }) {\n if (t.isFlow(node)) {\n return true;\n } else if (t.isImportDeclaration(node)) {\n return node.importKind === \"type\" || node.importKind === \"typeof\";\n } else if (t.isExportDeclaration(node)) {\n return node.exportKind === \"type\";\n } else if (t.isImportSpecifier(node)) {\n return node.importKind === \"type\" || node.importKind === \"typeof\";\n } else {\n return false;\n }\n }\n\n};\nexports.Flow = Flow;\nconst RestProperty = {\n types: [\"RestElement\"],\n\n checkPath(path) {\n return path.parentPath && path.parentPath.isObjectPattern();\n }\n\n};\nexports.RestProperty = RestProperty;\nconst SpreadProperty = {\n types: [\"RestElement\"],\n\n checkPath(path) {\n return path.parentPath && path.parentPath.isObjectExpression();\n }\n\n};\nexports.SpreadProperty = SpreadProperty;\nconst ExistentialTypeParam = {\n types: [\"ExistsTypeAnnotation\"]\n};\nexports.ExistentialTypeParam = ExistentialTypeParam;\nconst NumericLiteralTypeAnnotation = {\n types: [\"NumberLiteralTypeAnnotation\"]\n};\nexports.NumericLiteralTypeAnnotation = NumericLiteralTypeAnnotation;\nconst ForAwaitStatement = {\n types: [\"ForOfStatement\"],\n\n checkPath({\n node\n }) {\n return node.await === true;\n }\n\n};\nexports.ForAwaitStatement = ForAwaitStatement;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = buildMatchMemberExpression;\n\nvar _matchesPattern = require(\"./matchesPattern\");\n\nfunction buildMatchMemberExpression(match, allowPartial) {\n const parts = match.split(\".\");\n return member => (0, _matchesPattern.default)(member, parts, allowPartial);\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = matchesPattern;\n\nvar _generated = require(\"./generated\");\n\nfunction matchesPattern(member, match, allowPartial) {\n if (!(0, _generated.isMemberExpression)(member)) return false;\n const parts = Array.isArray(match) ? match : match.split(\".\");\n const nodes = [];\n let node;\n\n for (node = member; (0, _generated.isMemberExpression)(node); node = node.object) {\n nodes.push(node.property);\n }\n\n nodes.push(node);\n if (nodes.length < parts.length) return false;\n if (!allowPartial && nodes.length > parts.length) return false;\n\n for (let i = 0, j = nodes.length - 1; i < parts.length; i++, j--) {\n const node = nodes[j];\n let value;\n\n if ((0, _generated.isIdentifier)(node)) {\n value = node.name;\n } else if ((0, _generated.isStringLiteral)(node)) {\n value = node.value;\n } else if ((0, _generated.isThisExpression)(node)) {\n value = \"this\";\n } else {\n return false;\n }\n\n if (parts[i] !== value) return false;\n }\n\n return true;\n}","'use strict';\n\nlet fastProto = null;\n\n// Creates an object with permanently fast properties in V8. See Toon Verwaest's\n// post https://medium.com/@tverwaes/setting-up-prototypes-in-v8-ec9c9491dfe2#5f62\n// for more details. Use %HasFastProperties(object) and the Node.js flag\n// --allow-natives-syntax to check whether an object has fast properties.\nfunction FastObject(o) {\n\t// A prototype object will have \"fast properties\" enabled once it is checked\n\t// against the inline property cache of a function, e.g. fastProto.property:\n\t// https://github.com/v8/v8/blob/6.0.122/test/mjsunit/fast-prototype.js#L48-L63\n\tif (fastProto !== null && typeof fastProto.property) {\n\t\tconst result = fastProto;\n\t\tfastProto = FastObject.prototype = null;\n\t\treturn result;\n\t}\n\tfastProto = FastObject.prototype = o == null ? Object.create(null) : o;\n\treturn new FastObject;\n}\n\n// Initialize the inline property cache of FastObject\nFastObject();\n\nmodule.exports = function toFastproperties(o) {\n\treturn FastObject(o);\n};\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = isPlaceholderType;\n\nvar _definitions = require(\"../definitions\");\n\nfunction isPlaceholderType(placeholderType, targetType) {\n if (placeholderType === targetType) return true;\n const aliases = _definitions.PLACEHOLDERS_ALIAS[placeholderType];\n\n if (aliases) {\n for (const alias of aliases) {\n if (targetType === alias) return true;\n }\n }\n\n return false;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.PLACEHOLDERS_FLIPPED_ALIAS = exports.PLACEHOLDERS_ALIAS = exports.PLACEHOLDERS = void 0;\n\nvar _utils = require(\"./utils\");\n\nconst PLACEHOLDERS = [\"Identifier\", \"StringLiteral\", \"Expression\", \"Statement\", \"Declaration\", \"BlockStatement\", \"ClassBody\", \"Pattern\"];\nexports.PLACEHOLDERS = PLACEHOLDERS;\nconst PLACEHOLDERS_ALIAS = {\n Declaration: [\"Statement\"],\n Pattern: [\"PatternLike\", \"LVal\"]\n};\nexports.PLACEHOLDERS_ALIAS = PLACEHOLDERS_ALIAS;\n\nfor (const type of PLACEHOLDERS) {\n const alias = _utils.ALIAS_KEYS[type];\n if (alias != null && alias.length) PLACEHOLDERS_ALIAS[type] = alias;\n}\n\nconst PLACEHOLDERS_FLIPPED_ALIAS = {};\nexports.PLACEHOLDERS_FLIPPED_ALIAS = PLACEHOLDERS_FLIPPED_ALIAS;\nObject.keys(PLACEHOLDERS_ALIAS).forEach(type => {\n PLACEHOLDERS_ALIAS[type].forEach(alias => {\n if (!Object.hasOwnProperty.call(PLACEHOLDERS_FLIPPED_ALIAS, alias)) {\n PLACEHOLDERS_FLIPPED_ALIAS[alias] = [];\n }\n\n PLACEHOLDERS_FLIPPED_ALIAS[alias].push(type);\n });\n});","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = isNode;\n\nvar _definitions = require(\"../definitions\");\n\nfunction isNode(node) {\n return !!(node && _definitions.VISITOR_KEYS[node.type]);\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = removeTypeDuplicates;\n\nvar _generated = require(\"../../validators/generated\");\n\nfunction getQualifiedName(node) {\n return (0, _generated.isIdentifier)(node) ? node.name : `${node.id.name}.${getQualifiedName(node.qualification)}`;\n}\n\nfunction removeTypeDuplicates(nodes) {\n const generics = {};\n const bases = {};\n const typeGroups = [];\n const types = [];\n\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n if (!node) continue;\n\n if (types.indexOf(node) >= 0) {\n continue;\n }\n\n if ((0, _generated.isAnyTypeAnnotation)(node)) {\n return [node];\n }\n\n if ((0, _generated.isFlowBaseAnnotation)(node)) {\n bases[node.type] = node;\n continue;\n }\n\n if ((0, _generated.isUnionTypeAnnotation)(node)) {\n if (typeGroups.indexOf(node.types) < 0) {\n nodes = nodes.concat(node.types);\n typeGroups.push(node.types);\n }\n\n continue;\n }\n\n if ((0, _generated.isGenericTypeAnnotation)(node)) {\n const name = getQualifiedName(node.id);\n\n if (generics[name]) {\n let existing = generics[name];\n\n if (existing.typeParameters) {\n if (node.typeParameters) {\n existing.typeParameters.params = removeTypeDuplicates(existing.typeParameters.params.concat(node.typeParameters.params));\n }\n } else {\n existing = node.typeParameters;\n }\n } else {\n generics[name] = node;\n }\n\n continue;\n }\n\n types.push(node);\n }\n\n for (const type of Object.keys(bases)) {\n types.push(bases[type]);\n }\n\n for (const name of Object.keys(generics)) {\n types.push(generics[name]);\n }\n\n return types;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = addComments;\n\nfunction addComments(node, type, comments) {\n if (!comments || !node) return node;\n const key = `${type}Comments`;\n\n if (node[key]) {\n if (type === \"leading\") {\n node[key] = comments.concat(node[key]);\n } else {\n node[key] = node[key].concat(comments);\n }\n } else {\n node[key] = comments;\n }\n\n return node;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = inheritInnerComments;\n\nvar _inherit = require(\"../utils/inherit\");\n\nfunction inheritInnerComments(child, parent) {\n (0, _inherit.default)(\"innerComments\", child, parent);\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = inheritLeadingComments;\n\nvar _inherit = require(\"../utils/inherit\");\n\nfunction inheritLeadingComments(child, parent) {\n (0, _inherit.default)(\"leadingComments\", child, parent);\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = inheritsComments;\n\nvar _inheritTrailingComments = require(\"./inheritTrailingComments\");\n\nvar _inheritLeadingComments = require(\"./inheritLeadingComments\");\n\nvar _inheritInnerComments = require(\"./inheritInnerComments\");\n\nfunction inheritsComments(child, parent) {\n (0, _inheritTrailingComments.default)(child, parent);\n (0, _inheritLeadingComments.default)(child, parent);\n (0, _inheritInnerComments.default)(child, parent);\n return child;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = inheritTrailingComments;\n\nvar _inherit = require(\"../utils/inherit\");\n\nfunction inheritTrailingComments(child, parent) {\n (0, _inherit.default)(\"trailingComments\", child, parent);\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = toBlock;\n\nvar _generated = require(\"../validators/generated\");\n\nvar _generated2 = require(\"../builders/generated\");\n\nfunction toBlock(node, parent) {\n if ((0, _generated.isBlockStatement)(node)) {\n return node;\n }\n\n let blockNodes = [];\n\n if ((0, _generated.isEmptyStatement)(node)) {\n blockNodes = [];\n } else {\n if (!(0, _generated.isStatement)(node)) {\n if ((0, _generated.isFunction)(parent)) {\n node = (0, _generated2.returnStatement)(node);\n } else {\n node = (0, _generated2.expressionStatement)(node);\n }\n }\n\n blockNodes = [node];\n }\n\n return (0, _generated2.blockStatement)(blockNodes);\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = toIdentifier;\n\nvar _isValidIdentifier = require(\"../validators/isValidIdentifier\");\n\nvar _helperValidatorIdentifier = require(\"@babel/helper-validator-identifier\");\n\nfunction toIdentifier(input) {\n input = input + \"\";\n let name = \"\";\n\n for (const c of input) {\n name += (0, _helperValidatorIdentifier.isIdentifierChar)(c.codePointAt(0)) ? c : \"-\";\n }\n\n name = name.replace(/^[-0-9]+/, \"\");\n name = name.replace(/[-\\s]+(.)?/g, function (match, c) {\n return c ? c.toUpperCase() : \"\";\n });\n\n if (!(0, _isValidIdentifier.default)(name)) {\n name = `_${name}`;\n }\n\n return name || \"_\";\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = removePropertiesDeep;\n\nvar _traverseFast = require(\"../traverse/traverseFast\");\n\nvar _removeProperties = require(\"./removeProperties\");\n\nfunction removePropertiesDeep(tree, opts) {\n (0, _traverseFast.default)(tree, _removeProperties.default, opts);\n return tree;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = traverseFast;\n\nvar _definitions = require(\"../definitions\");\n\nfunction traverseFast(node, enter, opts) {\n if (!node) return;\n const keys = _definitions.VISITOR_KEYS[node.type];\n if (!keys) return;\n opts = opts || {};\n enter(node, opts);\n\n for (const key of keys) {\n const subNode = node[key];\n\n if (Array.isArray(subNode)) {\n for (const node of subNode) {\n traverseFast(node, enter, opts);\n }\n } else {\n traverseFast(subNode, enter, opts);\n }\n }\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = removeProperties;\n\nvar _constants = require(\"../constants\");\n\nconst CLEAR_KEYS = [\"tokens\", \"start\", \"end\", \"loc\", \"raw\", \"rawValue\"];\n\nconst CLEAR_KEYS_PLUS_COMMENTS = _constants.COMMENT_KEYS.concat([\"comments\"]).concat(CLEAR_KEYS);\n\nfunction removeProperties(node, opts = {}) {\n const map = opts.preserveComments ? CLEAR_KEYS : CLEAR_KEYS_PLUS_COMMENTS;\n\n for (const key of map) {\n if (node[key] != null) node[key] = undefined;\n }\n\n for (const key of Object.keys(node)) {\n if (key[0] === \"_\" && node[key] != null) node[key] = undefined;\n }\n\n const symbols = Object.getOwnPropertySymbols(node);\n\n for (const sym of symbols) {\n node[sym] = null;\n }\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = isLet;\n\nvar _generated = require(\"./generated\");\n\nvar _constants = require(\"../constants\");\n\nfunction isLet(node) {\n return (0, _generated.isVariableDeclaration)(node) && (node.kind !== \"var\" || node[_constants.BLOCK_SCOPED_SYMBOL]);\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _renamer = require(\"./lib/renamer\");\n\nvar _index = require(\"../index\");\n\nvar _binding = require(\"./binding\");\n\nvar _globals = require(\"globals\");\n\nvar t = require(\"@babel/types\");\n\nvar _cache = require(\"../cache\");\n\nfunction gatherNodeParts(node, parts) {\n switch (node == null ? void 0 : node.type) {\n default:\n if (t.isModuleDeclaration(node)) {\n if ((t.isExportAllDeclaration(node) || t.isExportNamedDeclaration(node) || t.isImportDeclaration(node)) && node.source) {\n gatherNodeParts(node.source, parts);\n } else if ((t.isExportNamedDeclaration(node) || t.isImportDeclaration(node)) && node.specifiers && node.specifiers.length) {\n for (const e of node.specifiers) gatherNodeParts(e, parts);\n } else if ((t.isExportDefaultDeclaration(node) || t.isExportNamedDeclaration(node)) && node.declaration) {\n gatherNodeParts(node.declaration, parts);\n }\n } else if (t.isModuleSpecifier(node)) {\n gatherNodeParts(node.local, parts);\n } else if (t.isLiteral(node)) {\n parts.push(node.value);\n }\n\n break;\n\n case \"MemberExpression\":\n case \"OptionalMemberExpression\":\n case \"JSXMemberExpression\":\n gatherNodeParts(node.object, parts);\n gatherNodeParts(node.property, parts);\n break;\n\n case \"Identifier\":\n case \"JSXIdentifier\":\n parts.push(node.name);\n break;\n\n case \"CallExpression\":\n case \"OptionalCallExpression\":\n case \"NewExpression\":\n gatherNodeParts(node.callee, parts);\n break;\n\n case \"ObjectExpression\":\n case \"ObjectPattern\":\n for (const e of node.properties) {\n gatherNodeParts(e, parts);\n }\n\n break;\n\n case \"SpreadElement\":\n case \"RestElement\":\n gatherNodeParts(node.argument, parts);\n break;\n\n case \"ObjectProperty\":\n case \"ObjectMethod\":\n case \"ClassProperty\":\n case \"ClassMethod\":\n case \"ClassPrivateProperty\":\n case \"ClassPrivateMethod\":\n gatherNodeParts(node.key, parts);\n break;\n\n case \"ThisExpression\":\n parts.push(\"this\");\n break;\n\n case \"Super\":\n parts.push(\"super\");\n break;\n\n case \"Import\":\n parts.push(\"import\");\n break;\n\n case \"DoExpression\":\n parts.push(\"do\");\n break;\n\n case \"YieldExpression\":\n parts.push(\"yield\");\n gatherNodeParts(node.argument, parts);\n break;\n\n case \"AwaitExpression\":\n parts.push(\"await\");\n gatherNodeParts(node.argument, parts);\n break;\n\n case \"AssignmentExpression\":\n gatherNodeParts(node.left, parts);\n break;\n\n case \"VariableDeclarator\":\n gatherNodeParts(node.id, parts);\n break;\n\n case \"FunctionExpression\":\n case \"FunctionDeclaration\":\n case \"ClassExpression\":\n case \"ClassDeclaration\":\n gatherNodeParts(node.id, parts);\n break;\n\n case \"PrivateName\":\n gatherNodeParts(node.id, parts);\n break;\n\n case \"ParenthesizedExpression\":\n gatherNodeParts(node.expression, parts);\n break;\n\n case \"UnaryExpression\":\n case \"UpdateExpression\":\n gatherNodeParts(node.argument, parts);\n break;\n\n case \"MetaProperty\":\n gatherNodeParts(node.meta, parts);\n gatherNodeParts(node.property, parts);\n break;\n\n case \"JSXElement\":\n gatherNodeParts(node.openingElement, parts);\n break;\n\n case \"JSXOpeningElement\":\n parts.push(node.name);\n break;\n\n case \"JSXFragment\":\n gatherNodeParts(node.openingFragment, parts);\n break;\n\n case \"JSXOpeningFragment\":\n parts.push(\"Fragment\");\n break;\n\n case \"JSXNamespacedName\":\n gatherNodeParts(node.namespace, parts);\n gatherNodeParts(node.name, parts);\n break;\n }\n}\n\nconst collectorVisitor = {\n For(path) {\n for (const key of t.FOR_INIT_KEYS) {\n const declar = path.get(key);\n\n if (declar.isVar()) {\n const parentScope = path.scope.getFunctionParent() || path.scope.getProgramParent();\n parentScope.registerBinding(\"var\", declar);\n }\n }\n },\n\n Declaration(path) {\n if (path.isBlockScoped()) return;\n if (path.isExportDeclaration()) return;\n const parent = path.scope.getFunctionParent() || path.scope.getProgramParent();\n parent.registerDeclaration(path);\n },\n\n ReferencedIdentifier(path, state) {\n state.references.push(path);\n },\n\n ForXStatement(path, state) {\n const left = path.get(\"left\");\n\n if (left.isPattern() || left.isIdentifier()) {\n state.constantViolations.push(path);\n }\n },\n\n ExportDeclaration: {\n exit(path) {\n const {\n node,\n scope\n } = path;\n if (t.isExportAllDeclaration(node)) return;\n const declar = node.declaration;\n\n if (t.isClassDeclaration(declar) || t.isFunctionDeclaration(declar)) {\n const id = declar.id;\n if (!id) return;\n const binding = scope.getBinding(id.name);\n if (binding) binding.reference(path);\n } else if (t.isVariableDeclaration(declar)) {\n for (const decl of declar.declarations) {\n for (const name of Object.keys(t.getBindingIdentifiers(decl))) {\n const binding = scope.getBinding(name);\n if (binding) binding.reference(path);\n }\n }\n }\n }\n\n },\n\n LabeledStatement(path) {\n path.scope.getBlockParent().registerDeclaration(path);\n },\n\n AssignmentExpression(path, state) {\n state.assignments.push(path);\n },\n\n UpdateExpression(path, state) {\n state.constantViolations.push(path);\n },\n\n UnaryExpression(path, state) {\n if (path.node.operator === \"delete\") {\n state.constantViolations.push(path);\n }\n },\n\n BlockScoped(path) {\n let scope = path.scope;\n if (scope.path === path) scope = scope.parent;\n const parent = scope.getBlockParent();\n parent.registerDeclaration(path);\n\n if (path.isClassDeclaration() && path.node.id) {\n const id = path.node.id;\n const name = id.name;\n path.scope.bindings[name] = path.scope.parent.getBinding(name);\n }\n },\n\n CatchClause(path) {\n path.scope.registerBinding(\"let\", path);\n },\n\n Function(path) {\n if (path.isFunctionExpression() && path.has(\"id\") && !path.get(\"id\").node[t.NOT_LOCAL_BINDING]) {\n path.scope.registerBinding(\"local\", path.get(\"id\"), path);\n }\n\n const params = path.get(\"params\");\n\n for (const param of params) {\n path.scope.registerBinding(\"param\", param);\n }\n },\n\n ClassExpression(path) {\n if (path.has(\"id\") && !path.get(\"id\").node[t.NOT_LOCAL_BINDING]) {\n path.scope.registerBinding(\"local\", path);\n }\n }\n\n};\nlet uid = 0;\n\nclass Scope {\n constructor(path) {\n this.uid = void 0;\n this.path = void 0;\n this.block = void 0;\n this.labels = void 0;\n this.inited = void 0;\n this.bindings = void 0;\n this.references = void 0;\n this.globals = void 0;\n this.uids = void 0;\n this.data = void 0;\n this.crawling = void 0;\n const {\n node\n } = path;\n\n const cached = _cache.scope.get(node);\n\n if ((cached == null ? void 0 : cached.path) === path) {\n return cached;\n }\n\n _cache.scope.set(node, this);\n\n this.uid = uid++;\n this.block = node;\n this.path = path;\n this.labels = new Map();\n this.inited = false;\n }\n\n get parent() {\n var _parent;\n\n let parent,\n path = this.path;\n\n do {\n const isKey = path.key === \"key\";\n path = path.parentPath;\n if (isKey && path.isMethod()) path = path.parentPath;\n if (path && path.isScope()) parent = path;\n } while (path && !parent);\n\n return (_parent = parent) == null ? void 0 : _parent.scope;\n }\n\n get parentBlock() {\n return this.path.parent;\n }\n\n get hub() {\n return this.path.hub;\n }\n\n traverse(node, opts, state) {\n (0, _index.default)(node, opts, this, state, this.path);\n }\n\n generateDeclaredUidIdentifier(name) {\n const id = this.generateUidIdentifier(name);\n this.push({\n id\n });\n return t.cloneNode(id);\n }\n\n generateUidIdentifier(name) {\n return t.identifier(this.generateUid(name));\n }\n\n generateUid(name = \"temp\") {\n name = t.toIdentifier(name).replace(/^_+/, \"\").replace(/[0-9]+$/g, \"\");\n let uid;\n let i = 1;\n\n do {\n uid = this._generateUid(name, i);\n i++;\n } while (this.hasLabel(uid) || this.hasBinding(uid) || this.hasGlobal(uid) || this.hasReference(uid));\n\n const program = this.getProgramParent();\n program.references[uid] = true;\n program.uids[uid] = true;\n return uid;\n }\n\n _generateUid(name, i) {\n let id = name;\n if (i > 1) id += i;\n return `_${id}`;\n }\n\n generateUidBasedOnNode(node, defaultName) {\n const parts = [];\n gatherNodeParts(node, parts);\n let id = parts.join(\"$\");\n id = id.replace(/^_/, \"\") || defaultName || \"ref\";\n return this.generateUid(id.slice(0, 20));\n }\n\n generateUidIdentifierBasedOnNode(node, defaultName) {\n return t.identifier(this.generateUidBasedOnNode(node, defaultName));\n }\n\n isStatic(node) {\n if (t.isThisExpression(node) || t.isSuper(node)) {\n return true;\n }\n\n if (t.isIdentifier(node)) {\n const binding = this.getBinding(node.name);\n\n if (binding) {\n return binding.constant;\n } else {\n return this.hasBinding(node.name);\n }\n }\n\n return false;\n }\n\n maybeGenerateMemoised(node, dontPush) {\n if (this.isStatic(node)) {\n return null;\n } else {\n const id = this.generateUidIdentifierBasedOnNode(node);\n\n if (!dontPush) {\n this.push({\n id\n });\n return t.cloneNode(id);\n }\n\n return id;\n }\n }\n\n checkBlockScopedCollisions(local, kind, name, id) {\n if (kind === \"param\") return;\n if (local.kind === \"local\") return;\n const duplicate = kind === \"let\" || local.kind === \"let\" || local.kind === \"const\" || local.kind === \"module\" || local.kind === \"param\" && (kind === \"let\" || kind === \"const\");\n\n if (duplicate) {\n throw this.hub.buildError(id, `Duplicate declaration \"${name}\"`, TypeError);\n }\n }\n\n rename(oldName, newName, block) {\n const binding = this.getBinding(oldName);\n\n if (binding) {\n newName = newName || this.generateUidIdentifier(oldName).name;\n return new _renamer.default(binding, oldName, newName).rename(block);\n }\n }\n\n _renameFromMap(map, oldName, newName, value) {\n if (map[oldName]) {\n map[newName] = value;\n map[oldName] = null;\n }\n }\n\n dump() {\n const sep = \"-\".repeat(60);\n console.log(sep);\n let scope = this;\n\n do {\n console.log(\"#\", scope.block.type);\n\n for (const name of Object.keys(scope.bindings)) {\n const binding = scope.bindings[name];\n console.log(\" -\", name, {\n constant: binding.constant,\n references: binding.references,\n violations: binding.constantViolations.length,\n kind: binding.kind\n });\n }\n } while (scope = scope.parent);\n\n console.log(sep);\n }\n\n toArray(node, i, arrayLikeIsIterable) {\n if (t.isIdentifier(node)) {\n const binding = this.getBinding(node.name);\n\n if (binding != null && binding.constant && binding.path.isGenericType(\"Array\")) {\n return node;\n }\n }\n\n if (t.isArrayExpression(node)) {\n return node;\n }\n\n if (t.isIdentifier(node, {\n name: \"arguments\"\n })) {\n return t.callExpression(t.memberExpression(t.memberExpression(t.memberExpression(t.identifier(\"Array\"), t.identifier(\"prototype\")), t.identifier(\"slice\")), t.identifier(\"call\")), [node]);\n }\n\n let helperName;\n const args = [node];\n\n if (i === true) {\n helperName = \"toConsumableArray\";\n } else if (i) {\n args.push(t.numericLiteral(i));\n helperName = \"slicedToArray\";\n } else {\n helperName = \"toArray\";\n }\n\n if (arrayLikeIsIterable) {\n args.unshift(this.hub.addHelper(helperName));\n helperName = \"maybeArrayLike\";\n }\n\n return t.callExpression(this.hub.addHelper(helperName), args);\n }\n\n hasLabel(name) {\n return !!this.getLabel(name);\n }\n\n getLabel(name) {\n return this.labels.get(name);\n }\n\n registerLabel(path) {\n this.labels.set(path.node.label.name, path);\n }\n\n registerDeclaration(path) {\n if (path.isLabeledStatement()) {\n this.registerLabel(path);\n } else if (path.isFunctionDeclaration()) {\n this.registerBinding(\"hoisted\", path.get(\"id\"), path);\n } else if (path.isVariableDeclaration()) {\n const declarations = path.get(\"declarations\");\n\n for (const declar of declarations) {\n this.registerBinding(path.node.kind, declar);\n }\n } else if (path.isClassDeclaration()) {\n this.registerBinding(\"let\", path);\n } else if (path.isImportDeclaration()) {\n const specifiers = path.get(\"specifiers\");\n\n for (const specifier of specifiers) {\n this.registerBinding(\"module\", specifier);\n }\n } else if (path.isExportDeclaration()) {\n const declar = path.get(\"declaration\");\n\n if (declar.isClassDeclaration() || declar.isFunctionDeclaration() || declar.isVariableDeclaration()) {\n this.registerDeclaration(declar);\n }\n } else {\n this.registerBinding(\"unknown\", path);\n }\n }\n\n buildUndefinedNode() {\n return t.unaryExpression(\"void\", t.numericLiteral(0), true);\n }\n\n registerConstantViolation(path) {\n const ids = path.getBindingIdentifiers();\n\n for (const name of Object.keys(ids)) {\n const binding = this.getBinding(name);\n if (binding) binding.reassign(path);\n }\n }\n\n registerBinding(kind, path, bindingPath = path) {\n if (!kind) throw new ReferenceError(\"no `kind`\");\n\n if (path.isVariableDeclaration()) {\n const declarators = path.get(\"declarations\");\n\n for (const declar of declarators) {\n this.registerBinding(kind, declar);\n }\n\n return;\n }\n\n const parent = this.getProgramParent();\n const ids = path.getOuterBindingIdentifiers(true);\n\n for (const name of Object.keys(ids)) {\n parent.references[name] = true;\n\n for (const id of ids[name]) {\n const local = this.getOwnBinding(name);\n\n if (local) {\n if (local.identifier === id) continue;\n this.checkBlockScopedCollisions(local, kind, name, id);\n }\n\n if (local) {\n this.registerConstantViolation(bindingPath);\n } else {\n this.bindings[name] = new _binding.default({\n identifier: id,\n scope: this,\n path: bindingPath,\n kind: kind\n });\n }\n }\n }\n }\n\n addGlobal(node) {\n this.globals[node.name] = node;\n }\n\n hasUid(name) {\n let scope = this;\n\n do {\n if (scope.uids[name]) return true;\n } while (scope = scope.parent);\n\n return false;\n }\n\n hasGlobal(name) {\n let scope = this;\n\n do {\n if (scope.globals[name]) return true;\n } while (scope = scope.parent);\n\n return false;\n }\n\n hasReference(name) {\n return !!this.getProgramParent().references[name];\n }\n\n isPure(node, constantsOnly) {\n if (t.isIdentifier(node)) {\n const binding = this.getBinding(node.name);\n if (!binding) return false;\n if (constantsOnly) return binding.constant;\n return true;\n } else if (t.isClass(node)) {\n if (node.superClass && !this.isPure(node.superClass, constantsOnly)) {\n return false;\n }\n\n return this.isPure(node.body, constantsOnly);\n } else if (t.isClassBody(node)) {\n for (const method of node.body) {\n if (!this.isPure(method, constantsOnly)) return false;\n }\n\n return true;\n } else if (t.isBinary(node)) {\n return this.isPure(node.left, constantsOnly) && this.isPure(node.right, constantsOnly);\n } else if (t.isArrayExpression(node)) {\n for (const elem of node.elements) {\n if (!this.isPure(elem, constantsOnly)) return false;\n }\n\n return true;\n } else if (t.isObjectExpression(node)) {\n for (const prop of node.properties) {\n if (!this.isPure(prop, constantsOnly)) return false;\n }\n\n return true;\n } else if (t.isMethod(node)) {\n if (node.computed && !this.isPure(node.key, constantsOnly)) return false;\n if (node.kind === \"get\" || node.kind === \"set\") return false;\n return true;\n } else if (t.isProperty(node)) {\n if (node.computed && !this.isPure(node.key, constantsOnly)) return false;\n return this.isPure(node.value, constantsOnly);\n } else if (t.isUnaryExpression(node)) {\n return this.isPure(node.argument, constantsOnly);\n } else if (t.isTaggedTemplateExpression(node)) {\n return t.matchesPattern(node.tag, \"String.raw\") && !this.hasBinding(\"String\", true) && this.isPure(node.quasi, constantsOnly);\n } else if (t.isTemplateLiteral(node)) {\n for (const expression of node.expressions) {\n if (!this.isPure(expression, constantsOnly)) return false;\n }\n\n return true;\n } else {\n return t.isPureish(node);\n }\n }\n\n setData(key, val) {\n return this.data[key] = val;\n }\n\n getData(key) {\n let scope = this;\n\n do {\n const data = scope.data[key];\n if (data != null) return data;\n } while (scope = scope.parent);\n }\n\n removeData(key) {\n let scope = this;\n\n do {\n const data = scope.data[key];\n if (data != null) scope.data[key] = null;\n } while (scope = scope.parent);\n }\n\n init() {\n if (!this.inited) {\n this.inited = true;\n this.crawl();\n }\n }\n\n crawl() {\n const path = this.path;\n this.references = Object.create(null);\n this.bindings = Object.create(null);\n this.globals = Object.create(null);\n this.uids = Object.create(null);\n this.data = Object.create(null);\n const programParent = this.getProgramParent();\n if (programParent.crawling) return;\n const state = {\n references: [],\n constantViolations: [],\n assignments: []\n };\n this.crawling = true;\n\n if (path.type !== \"Program\" && collectorVisitor._exploded) {\n for (const visit of collectorVisitor.enter) {\n visit(path, state);\n }\n\n const typeVisitors = collectorVisitor[path.type];\n\n if (typeVisitors) {\n for (const visit of typeVisitors.enter) {\n visit(path, state);\n }\n }\n }\n\n path.traverse(collectorVisitor, state);\n this.crawling = false;\n\n for (const path of state.assignments) {\n const ids = path.getBindingIdentifiers();\n\n for (const name of Object.keys(ids)) {\n if (path.scope.getBinding(name)) continue;\n programParent.addGlobal(ids[name]);\n }\n\n path.scope.registerConstantViolation(path);\n }\n\n for (const ref of state.references) {\n const binding = ref.scope.getBinding(ref.node.name);\n\n if (binding) {\n binding.reference(ref);\n } else {\n programParent.addGlobal(ref.node);\n }\n }\n\n for (const path of state.constantViolations) {\n path.scope.registerConstantViolation(path);\n }\n }\n\n push(opts) {\n let path = this.path;\n\n if (!path.isBlockStatement() && !path.isProgram()) {\n path = this.getBlockParent().path;\n }\n\n if (path.isSwitchStatement()) {\n path = (this.getFunctionParent() || this.getProgramParent()).path;\n }\n\n if (path.isLoop() || path.isCatchClause() || path.isFunction()) {\n path.ensureBlock();\n path = path.get(\"body\");\n }\n\n const unique = opts.unique;\n const kind = opts.kind || \"var\";\n const blockHoist = opts._blockHoist == null ? 2 : opts._blockHoist;\n const dataKey = `declaration:${kind}:${blockHoist}`;\n let declarPath = !unique && path.getData(dataKey);\n\n if (!declarPath) {\n const declar = t.variableDeclaration(kind, []);\n declar._blockHoist = blockHoist;\n [declarPath] = path.unshiftContainer(\"body\", [declar]);\n if (!unique) path.setData(dataKey, declarPath);\n }\n\n const declarator = t.variableDeclarator(opts.id, opts.init);\n declarPath.node.declarations.push(declarator);\n this.registerBinding(kind, declarPath.get(\"declarations\").pop());\n }\n\n getProgramParent() {\n let scope = this;\n\n do {\n if (scope.path.isProgram()) {\n return scope;\n }\n } while (scope = scope.parent);\n\n throw new Error(\"Couldn't find a Program\");\n }\n\n getFunctionParent() {\n let scope = this;\n\n do {\n if (scope.path.isFunctionParent()) {\n return scope;\n }\n } while (scope = scope.parent);\n\n return null;\n }\n\n getBlockParent() {\n let scope = this;\n\n do {\n if (scope.path.isBlockParent()) {\n return scope;\n }\n } while (scope = scope.parent);\n\n throw new Error(\"We couldn't find a BlockStatement, For, Switch, Function, Loop or Program...\");\n }\n\n getAllBindings() {\n const ids = Object.create(null);\n let scope = this;\n\n do {\n for (const key of Object.keys(scope.bindings)) {\n if (key in ids === false) {\n ids[key] = scope.bindings[key];\n }\n }\n\n scope = scope.parent;\n } while (scope);\n\n return ids;\n }\n\n getAllBindingsOfKind(...kinds) {\n const ids = Object.create(null);\n\n for (const kind of kinds) {\n let scope = this;\n\n do {\n for (const name of Object.keys(scope.bindings)) {\n const binding = scope.bindings[name];\n if (binding.kind === kind) ids[name] = binding;\n }\n\n scope = scope.parent;\n } while (scope);\n }\n\n return ids;\n }\n\n bindingIdentifierEquals(name, node) {\n return this.getBindingIdentifier(name) === node;\n }\n\n getBinding(name) {\n let scope = this;\n let previousPath;\n\n do {\n const binding = scope.getOwnBinding(name);\n\n if (binding) {\n var _previousPath;\n\n if ((_previousPath = previousPath) != null && _previousPath.isPattern() && binding.kind !== \"param\") {} else {\n return binding;\n }\n }\n\n previousPath = scope.path;\n } while (scope = scope.parent);\n }\n\n getOwnBinding(name) {\n return this.bindings[name];\n }\n\n getBindingIdentifier(name) {\n var _this$getBinding;\n\n return (_this$getBinding = this.getBinding(name)) == null ? void 0 : _this$getBinding.identifier;\n }\n\n getOwnBindingIdentifier(name) {\n const binding = this.bindings[name];\n return binding == null ? void 0 : binding.identifier;\n }\n\n hasOwnBinding(name) {\n return !!this.getOwnBinding(name);\n }\n\n hasBinding(name, noGlobals) {\n if (!name) return false;\n if (this.hasOwnBinding(name)) return true;\n if (this.parentHasBinding(name, noGlobals)) return true;\n if (this.hasUid(name)) return true;\n if (!noGlobals && Scope.globals.includes(name)) return true;\n if (!noGlobals && Scope.contextVariables.includes(name)) return true;\n return false;\n }\n\n parentHasBinding(name, noGlobals) {\n var _this$parent;\n\n return (_this$parent = this.parent) == null ? void 0 : _this$parent.hasBinding(name, noGlobals);\n }\n\n moveBindingTo(name, scope) {\n const info = this.getBinding(name);\n\n if (info) {\n info.scope.removeOwnBinding(name);\n info.scope = scope;\n scope.bindings[name] = info;\n }\n }\n\n removeOwnBinding(name) {\n delete this.bindings[name];\n }\n\n removeBinding(name) {\n var _this$getBinding2;\n\n (_this$getBinding2 = this.getBinding(name)) == null ? void 0 : _this$getBinding2.scope.removeOwnBinding(name);\n let scope = this;\n\n do {\n if (scope.uids[name]) {\n scope.uids[name] = false;\n }\n } while (scope = scope.parent);\n }\n\n}\n\nexports.default = Scope;\nScope.globals = Object.keys(_globals.builtin);\nScope.contextVariables = [\"arguments\", \"undefined\", \"Infinity\", \"NaN\"];","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nclass Binding {\n constructor({\n identifier,\n scope,\n path,\n kind\n }) {\n this.identifier = void 0;\n this.scope = void 0;\n this.path = void 0;\n this.kind = void 0;\n this.constantViolations = [];\n this.constant = true;\n this.referencePaths = [];\n this.referenced = false;\n this.references = 0;\n this.identifier = identifier;\n this.scope = scope;\n this.path = path;\n this.kind = kind;\n this.clearValue();\n }\n\n deoptValue() {\n this.clearValue();\n this.hasDeoptedValue = true;\n }\n\n setValue(value) {\n if (this.hasDeoptedValue) return;\n this.hasValue = true;\n this.value = value;\n }\n\n clearValue() {\n this.hasDeoptedValue = false;\n this.hasValue = false;\n this.value = null;\n }\n\n reassign(path) {\n this.constant = false;\n\n if (this.constantViolations.indexOf(path) !== -1) {\n return;\n }\n\n this.constantViolations.push(path);\n }\n\n reference(path) {\n if (this.referencePaths.indexOf(path) !== -1) {\n return;\n }\n\n this.referenced = true;\n this.references++;\n this.referencePaths.push(path);\n }\n\n dereference() {\n this.references--;\n this.referenced = !!this.references;\n }\n\n}\n\nexports.default = Binding;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.needsWhitespace = needsWhitespace;\nexports.needsWhitespaceBefore = needsWhitespaceBefore;\nexports.needsWhitespaceAfter = needsWhitespaceAfter;\nexports.needsParens = needsParens;\n\nvar whitespace = require(\"./whitespace\");\n\nvar parens = require(\"./parentheses\");\n\nvar t = require(\"@babel/types\");\n\nfunction expandAliases(obj) {\n const newObj = {};\n\n function add(type, func) {\n const fn = newObj[type];\n newObj[type] = fn ? function (node, parent, stack) {\n const result = fn(node, parent, stack);\n return result == null ? func(node, parent, stack) : result;\n } : func;\n }\n\n for (const type of Object.keys(obj)) {\n const aliases = t.FLIPPED_ALIAS_KEYS[type];\n\n if (aliases) {\n for (const alias of aliases) {\n add(alias, obj[type]);\n }\n } else {\n add(type, obj[type]);\n }\n }\n\n return newObj;\n}\n\nconst expandedParens = expandAliases(parens);\nconst expandedWhitespaceNodes = expandAliases(whitespace.nodes);\nconst expandedWhitespaceList = expandAliases(whitespace.list);\n\nfunction find(obj, node, parent, printStack) {\n const fn = obj[node.type];\n return fn ? fn(node, parent, printStack) : null;\n}\n\nfunction isOrHasCallExpression(node) {\n if (t.isCallExpression(node)) {\n return true;\n }\n\n return t.isMemberExpression(node) && isOrHasCallExpression(node.object);\n}\n\nfunction needsWhitespace(node, parent, type) {\n if (!node) return 0;\n\n if (t.isExpressionStatement(node)) {\n node = node.expression;\n }\n\n let linesInfo = find(expandedWhitespaceNodes, node, parent);\n\n if (!linesInfo) {\n const items = find(expandedWhitespaceList, node, parent);\n\n if (items) {\n for (let i = 0; i < items.length; i++) {\n linesInfo = needsWhitespace(items[i], node, type);\n if (linesInfo) break;\n }\n }\n }\n\n if (typeof linesInfo === \"object\" && linesInfo !== null) {\n return linesInfo[type] || 0;\n }\n\n return 0;\n}\n\nfunction needsWhitespaceBefore(node, parent) {\n return needsWhitespace(node, parent, \"before\");\n}\n\nfunction needsWhitespaceAfter(node, parent) {\n return needsWhitespace(node, parent, \"after\");\n}\n\nfunction needsParens(node, parent, printStack) {\n if (!parent) return false;\n\n if (t.isNewExpression(parent) && parent.callee === node) {\n if (isOrHasCallExpression(node)) return true;\n }\n\n return find(expandedParens, node, parent, printStack);\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.ImportSpecifier = ImportSpecifier;\nexports.ImportDefaultSpecifier = ImportDefaultSpecifier;\nexports.ExportDefaultSpecifier = ExportDefaultSpecifier;\nexports.ExportSpecifier = ExportSpecifier;\nexports.ExportNamespaceSpecifier = ExportNamespaceSpecifier;\nexports.ExportAllDeclaration = ExportAllDeclaration;\nexports.ExportNamedDeclaration = ExportNamedDeclaration;\nexports.ExportDefaultDeclaration = ExportDefaultDeclaration;\nexports.ImportDeclaration = ImportDeclaration;\nexports.ImportAttribute = ImportAttribute;\nexports.ImportNamespaceSpecifier = ImportNamespaceSpecifier;\n\nvar t = require(\"@babel/types\");\n\nfunction ImportSpecifier(node) {\n if (node.importKind === \"type\" || node.importKind === \"typeof\") {\n this.word(node.importKind);\n this.space();\n }\n\n this.print(node.imported, node);\n\n if (node.local && node.local.name !== node.imported.name) {\n this.space();\n this.word(\"as\");\n this.space();\n this.print(node.local, node);\n }\n}\n\nfunction ImportDefaultSpecifier(node) {\n this.print(node.local, node);\n}\n\nfunction ExportDefaultSpecifier(node) {\n this.print(node.exported, node);\n}\n\nfunction ExportSpecifier(node) {\n this.print(node.local, node);\n\n if (node.exported && node.local.name !== node.exported.name) {\n this.space();\n this.word(\"as\");\n this.space();\n this.print(node.exported, node);\n }\n}\n\nfunction ExportNamespaceSpecifier(node) {\n this.token(\"*\");\n this.space();\n this.word(\"as\");\n this.space();\n this.print(node.exported, node);\n}\n\nfunction ExportAllDeclaration(node) {\n this.word(\"export\");\n this.space();\n\n if (node.exportKind === \"type\") {\n this.word(\"type\");\n this.space();\n }\n\n this.token(\"*\");\n this.space();\n this.word(\"from\");\n this.space();\n this.print(node.source, node);\n this.printAssertions(node);\n this.semicolon();\n}\n\nfunction ExportNamedDeclaration(node) {\n if (this.format.decoratorsBeforeExport && t.isClassDeclaration(node.declaration)) {\n this.printJoin(node.declaration.decorators, node);\n }\n\n this.word(\"export\");\n this.space();\n ExportDeclaration.apply(this, arguments);\n}\n\nfunction ExportDefaultDeclaration(node) {\n if (this.format.decoratorsBeforeExport && t.isClassDeclaration(node.declaration)) {\n this.printJoin(node.declaration.decorators, node);\n }\n\n this.word(\"export\");\n this.space();\n this.word(\"default\");\n this.space();\n ExportDeclaration.apply(this, arguments);\n}\n\nfunction ExportDeclaration(node) {\n if (node.declaration) {\n const declar = node.declaration;\n this.print(declar, node);\n if (!t.isStatement(declar)) this.semicolon();\n } else {\n if (node.exportKind === \"type\") {\n this.word(\"type\");\n this.space();\n }\n\n const specifiers = node.specifiers.slice(0);\n let hasSpecial = false;\n\n for (;;) {\n const first = specifiers[0];\n\n if (t.isExportDefaultSpecifier(first) || t.isExportNamespaceSpecifier(first)) {\n hasSpecial = true;\n this.print(specifiers.shift(), node);\n\n if (specifiers.length) {\n this.token(\",\");\n this.space();\n }\n } else {\n break;\n }\n }\n\n if (specifiers.length || !specifiers.length && !hasSpecial) {\n this.token(\"{\");\n\n if (specifiers.length) {\n this.space();\n this.printList(specifiers, node);\n this.space();\n }\n\n this.token(\"}\");\n }\n\n if (node.source) {\n this.space();\n this.word(\"from\");\n this.space();\n this.print(node.source, node);\n this.printAssertions(node);\n }\n\n this.semicolon();\n }\n}\n\nfunction ImportDeclaration(node) {\n this.word(\"import\");\n this.space();\n\n if (node.importKind === \"type\" || node.importKind === \"typeof\") {\n this.word(node.importKind);\n this.space();\n }\n\n const specifiers = node.specifiers.slice(0);\n\n if (specifiers != null && specifiers.length) {\n for (;;) {\n const first = specifiers[0];\n\n if (t.isImportDefaultSpecifier(first) || t.isImportNamespaceSpecifier(first)) {\n this.print(specifiers.shift(), node);\n\n if (specifiers.length) {\n this.token(\",\");\n this.space();\n }\n } else {\n break;\n }\n }\n\n if (specifiers.length) {\n this.token(\"{\");\n this.space();\n this.printList(specifiers, node);\n this.space();\n this.token(\"}\");\n }\n\n this.space();\n this.word(\"from\");\n this.space();\n }\n\n this.print(node.source, node);\n this.printAssertions(node);\n {\n var _node$attributes;\n\n if ((_node$attributes = node.attributes) != null && _node$attributes.length) {\n this.space();\n this.word(\"with\");\n this.space();\n this.printList(node.attributes, node);\n }\n }\n this.semicolon();\n}\n\nfunction ImportAttribute(node) {\n this.print(node.key);\n this.token(\":\");\n this.space();\n this.print(node.value);\n}\n\nfunction ImportNamespaceSpecifier(node) {\n this.token(\"*\");\n this.space();\n this.word(\"as\");\n this.space();\n this.print(node.local, node);\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Identifier = Identifier;\nexports.ArgumentPlaceholder = ArgumentPlaceholder;\nexports.SpreadElement = exports.RestElement = RestElement;\nexports.ObjectPattern = exports.ObjectExpression = ObjectExpression;\nexports.ObjectMethod = ObjectMethod;\nexports.ObjectProperty = ObjectProperty;\nexports.ArrayPattern = exports.ArrayExpression = ArrayExpression;\nexports.RecordExpression = RecordExpression;\nexports.TupleExpression = TupleExpression;\nexports.RegExpLiteral = RegExpLiteral;\nexports.BooleanLiteral = BooleanLiteral;\nexports.NullLiteral = NullLiteral;\nexports.NumericLiteral = NumericLiteral;\nexports.StringLiteral = StringLiteral;\nexports.BigIntLiteral = BigIntLiteral;\nexports.DecimalLiteral = DecimalLiteral;\nexports.PipelineTopicExpression = PipelineTopicExpression;\nexports.PipelineBareFunction = PipelineBareFunction;\nexports.PipelinePrimaryTopicReference = PipelinePrimaryTopicReference;\n\nvar t = require(\"@babel/types\");\n\nvar _jsesc = require(\"jsesc\");\n\nfunction Identifier(node) {\n this.exactSource(node.loc, () => {\n this.word(node.name);\n });\n}\n\nfunction ArgumentPlaceholder() {\n this.token(\"?\");\n}\n\nfunction RestElement(node) {\n this.token(\"...\");\n this.print(node.argument, node);\n}\n\nfunction ObjectExpression(node) {\n const props = node.properties;\n this.token(\"{\");\n this.printInnerComments(node);\n\n if (props.length) {\n this.space();\n this.printList(props, node, {\n indent: true,\n statement: true\n });\n this.space();\n }\n\n this.token(\"}\");\n}\n\nfunction ObjectMethod(node) {\n this.printJoin(node.decorators, node);\n\n this._methodHead(node);\n\n this.space();\n this.print(node.body, node);\n}\n\nfunction ObjectProperty(node) {\n this.printJoin(node.decorators, node);\n\n if (node.computed) {\n this.token(\"[\");\n this.print(node.key, node);\n this.token(\"]\");\n } else {\n if (t.isAssignmentPattern(node.value) && t.isIdentifier(node.key) && node.key.name === node.value.left.name) {\n this.print(node.value, node);\n return;\n }\n\n this.print(node.key, node);\n\n if (node.shorthand && t.isIdentifier(node.key) && t.isIdentifier(node.value) && node.key.name === node.value.name) {\n return;\n }\n }\n\n this.token(\":\");\n this.space();\n this.print(node.value, node);\n}\n\nfunction ArrayExpression(node) {\n const elems = node.elements;\n const len = elems.length;\n this.token(\"[\");\n this.printInnerComments(node);\n\n for (let i = 0; i < elems.length; i++) {\n const elem = elems[i];\n\n if (elem) {\n if (i > 0) this.space();\n this.print(elem, node);\n if (i < len - 1) this.token(\",\");\n } else {\n this.token(\",\");\n }\n }\n\n this.token(\"]\");\n}\n\nfunction RecordExpression(node) {\n const props = node.properties;\n let startToken;\n let endToken;\n\n if (this.format.recordAndTupleSyntaxType === \"bar\") {\n startToken = \"{|\";\n endToken = \"|}\";\n } else if (this.format.recordAndTupleSyntaxType === \"hash\") {\n startToken = \"#{\";\n endToken = \"}\";\n } else {\n throw new Error(`The \"recordAndTupleSyntaxType\" generator option must be \"bar\" or \"hash\" (${JSON.stringify(this.format.recordAndTupleSyntaxType)} received).`);\n }\n\n this.token(startToken);\n this.printInnerComments(node);\n\n if (props.length) {\n this.space();\n this.printList(props, node, {\n indent: true,\n statement: true\n });\n this.space();\n }\n\n this.token(endToken);\n}\n\nfunction TupleExpression(node) {\n const elems = node.elements;\n const len = elems.length;\n let startToken;\n let endToken;\n\n if (this.format.recordAndTupleSyntaxType === \"bar\") {\n startToken = \"[|\";\n endToken = \"|]\";\n } else if (this.format.recordAndTupleSyntaxType === \"hash\") {\n startToken = \"#[\";\n endToken = \"]\";\n } else {\n throw new Error(`${this.format.recordAndTupleSyntaxType} is not a valid recordAndTuple syntax type`);\n }\n\n this.token(startToken);\n this.printInnerComments(node);\n\n for (let i = 0; i < elems.length; i++) {\n const elem = elems[i];\n\n if (elem) {\n if (i > 0) this.space();\n this.print(elem, node);\n if (i < len - 1) this.token(\",\");\n }\n }\n\n this.token(endToken);\n}\n\nfunction RegExpLiteral(node) {\n this.word(`/${node.pattern}/${node.flags}`);\n}\n\nfunction BooleanLiteral(node) {\n this.word(node.value ? \"true\" : \"false\");\n}\n\nfunction NullLiteral() {\n this.word(\"null\");\n}\n\nfunction NumericLiteral(node) {\n const raw = this.getPossibleRaw(node);\n const opts = this.format.jsescOption;\n const value = node.value + \"\";\n\n if (opts.numbers) {\n this.number(_jsesc(node.value, opts));\n } else if (raw == null) {\n this.number(value);\n } else if (this.format.minified) {\n this.number(raw.length < value.length ? raw : value);\n } else {\n this.number(raw);\n }\n}\n\nfunction StringLiteral(node) {\n const raw = this.getPossibleRaw(node);\n\n if (!this.format.minified && raw != null) {\n this.token(raw);\n return;\n }\n\n const val = _jsesc(node.value, Object.assign(this.format.jsescOption, this.format.jsonCompatibleStrings && {\n json: true\n }));\n\n return this.token(val);\n}\n\nfunction BigIntLiteral(node) {\n const raw = this.getPossibleRaw(node);\n\n if (!this.format.minified && raw != null) {\n this.word(raw);\n return;\n }\n\n this.word(node.value + \"n\");\n}\n\nfunction DecimalLiteral(node) {\n const raw = this.getPossibleRaw(node);\n\n if (!this.format.minified && raw != null) {\n this.word(raw);\n return;\n }\n\n this.word(node.value + \"m\");\n}\n\nfunction PipelineTopicExpression(node) {\n this.print(node.expression, node);\n}\n\nfunction PipelineBareFunction(node) {\n this.print(node.callee, node);\n}\n\nfunction PipelinePrimaryTopicReference() {\n this.token(\"#\");\n}","'use strict';\n\nconst object = {};\nconst hasOwnProperty = object.hasOwnProperty;\nconst forOwn = (object, callback) => {\n\tfor (const key in object) {\n\t\tif (hasOwnProperty.call(object, key)) {\n\t\t\tcallback(key, object[key]);\n\t\t}\n\t}\n};\n\nconst extend = (destination, source) => {\n\tif (!source) {\n\t\treturn destination;\n\t}\n\tforOwn(source, (key, value) => {\n\t\tdestination[key] = value;\n\t});\n\treturn destination;\n};\n\nconst forEach = (array, callback) => {\n\tconst length = array.length;\n\tlet index = -1;\n\twhile (++index < length) {\n\t\tcallback(array[index]);\n\t}\n};\n\nconst toString = object.toString;\nconst isArray = Array.isArray;\nconst isBuffer = Buffer.isBuffer;\nconst isObject = (value) => {\n\t// This is a very simple check, but it’s good enough for what we need.\n\treturn toString.call(value) == '[object Object]';\n};\nconst isString = (value) => {\n\treturn typeof value == 'string' ||\n\t\ttoString.call(value) == '[object String]';\n};\nconst isNumber = (value) => {\n\treturn typeof value == 'number' ||\n\t\ttoString.call(value) == '[object Number]';\n};\nconst isFunction = (value) => {\n\treturn typeof value == 'function';\n};\nconst isMap = (value) => {\n\treturn toString.call(value) == '[object Map]';\n};\nconst isSet = (value) => {\n\treturn toString.call(value) == '[object Set]';\n};\n\n/*--------------------------------------------------------------------------*/\n\n// https://mathiasbynens.be/notes/javascript-escapes#single\nconst singleEscapes = {\n\t'\"': '\\\\\"',\n\t'\\'': '\\\\\\'',\n\t'\\\\': '\\\\\\\\',\n\t'\\b': '\\\\b',\n\t'\\f': '\\\\f',\n\t'\\n': '\\\\n',\n\t'\\r': '\\\\r',\n\t'\\t': '\\\\t'\n\t// `\\v` is omitted intentionally, because in IE < 9, '\\v' == 'v'.\n\t// '\\v': '\\\\x0B'\n};\nconst regexSingleEscape = /[\"'\\\\\\b\\f\\n\\r\\t]/;\n\nconst regexDigit = /[0-9]/;\nconst regexWhitelist = /[ !#-&\\(-\\[\\]-_a-~]/;\n\nconst jsesc = (argument, options) => {\n\tconst increaseIndentation = () => {\n\t\toldIndent = indent;\n\t\t++options.indentLevel;\n\t\tindent = options.indent.repeat(options.indentLevel)\n\t};\n\t// Handle options\n\tconst defaults = {\n\t\t'escapeEverything': false,\n\t\t'minimal': false,\n\t\t'isScriptContext': false,\n\t\t'quotes': 'single',\n\t\t'wrap': false,\n\t\t'es6': false,\n\t\t'json': false,\n\t\t'compact': true,\n\t\t'lowercaseHex': false,\n\t\t'numbers': 'decimal',\n\t\t'indent': '\\t',\n\t\t'indentLevel': 0,\n\t\t'__inline1__': false,\n\t\t'__inline2__': false\n\t};\n\tconst json = options && options.json;\n\tif (json) {\n\t\tdefaults.quotes = 'double';\n\t\tdefaults.wrap = true;\n\t}\n\toptions = extend(defaults, options);\n\tif (\n\t\toptions.quotes != 'single' &&\n\t\toptions.quotes != 'double' &&\n\t\toptions.quotes != 'backtick'\n\t) {\n\t\toptions.quotes = 'single';\n\t}\n\tconst quote = options.quotes == 'double' ?\n\t\t'\"' :\n\t\t(options.quotes == 'backtick' ?\n\t\t\t'`' :\n\t\t\t'\\''\n\t\t);\n\tconst compact = options.compact;\n\tconst lowercaseHex = options.lowercaseHex;\n\tlet indent = options.indent.repeat(options.indentLevel);\n\tlet oldIndent = '';\n\tconst inline1 = options.__inline1__;\n\tconst inline2 = options.__inline2__;\n\tconst newLine = compact ? '' : '\\n';\n\tlet result;\n\tlet isEmpty = true;\n\tconst useBinNumbers = options.numbers == 'binary';\n\tconst useOctNumbers = options.numbers == 'octal';\n\tconst useDecNumbers = options.numbers == 'decimal';\n\tconst useHexNumbers = options.numbers == 'hexadecimal';\n\n\tif (json && argument && isFunction(argument.toJSON)) {\n\t\targument = argument.toJSON();\n\t}\n\n\tif (!isString(argument)) {\n\t\tif (isMap(argument)) {\n\t\t\tif (argument.size == 0) {\n\t\t\t\treturn 'new Map()';\n\t\t\t}\n\t\t\tif (!compact) {\n\t\t\t\toptions.__inline1__ = true;\n\t\t\t\toptions.__inline2__ = false;\n\t\t\t}\n\t\t\treturn 'new Map(' + jsesc(Array.from(argument), options) + ')';\n\t\t}\n\t\tif (isSet(argument)) {\n\t\t\tif (argument.size == 0) {\n\t\t\t\treturn 'new Set()';\n\t\t\t}\n\t\t\treturn 'new Set(' + jsesc(Array.from(argument), options) + ')';\n\t\t}\n\t\tif (isBuffer(argument)) {\n\t\t\tif (argument.length == 0) {\n\t\t\t\treturn 'Buffer.from([])';\n\t\t\t}\n\t\t\treturn 'Buffer.from(' + jsesc(Array.from(argument), options) + ')';\n\t\t}\n\t\tif (isArray(argument)) {\n\t\t\tresult = [];\n\t\t\toptions.wrap = true;\n\t\t\tif (inline1) {\n\t\t\t\toptions.__inline1__ = false;\n\t\t\t\toptions.__inline2__ = true;\n\t\t\t}\n\t\t\tif (!inline2) {\n\t\t\t\tincreaseIndentation();\n\t\t\t}\n\t\t\tforEach(argument, (value) => {\n\t\t\t\tisEmpty = false;\n\t\t\t\tif (inline2) {\n\t\t\t\t\toptions.__inline2__ = false;\n\t\t\t\t}\n\t\t\t\tresult.push(\n\t\t\t\t\t(compact || inline2 ? '' : indent) +\n\t\t\t\t\tjsesc(value, options)\n\t\t\t\t);\n\t\t\t});\n\t\t\tif (isEmpty) {\n\t\t\t\treturn '[]';\n\t\t\t}\n\t\t\tif (inline2) {\n\t\t\t\treturn '[' + result.join(', ') + ']';\n\t\t\t}\n\t\t\treturn '[' + newLine + result.join(',' + newLine) + newLine +\n\t\t\t\t(compact ? '' : oldIndent) + ']';\n\t\t} else if (isNumber(argument)) {\n\t\t\tif (json) {\n\t\t\t\t// Some number values (e.g. `Infinity`) cannot be represented in JSON.\n\t\t\t\treturn JSON.stringify(argument);\n\t\t\t}\n\t\t\tif (useDecNumbers) {\n\t\t\t\treturn String(argument);\n\t\t\t}\n\t\t\tif (useHexNumbers) {\n\t\t\t\tlet hexadecimal = argument.toString(16);\n\t\t\t\tif (!lowercaseHex) {\n\t\t\t\t\thexadecimal = hexadecimal.toUpperCase();\n\t\t\t\t}\n\t\t\t\treturn '0x' + hexadecimal;\n\t\t\t}\n\t\t\tif (useBinNumbers) {\n\t\t\t\treturn '0b' + argument.toString(2);\n\t\t\t}\n\t\t\tif (useOctNumbers) {\n\t\t\t\treturn '0o' + argument.toString(8);\n\t\t\t}\n\t\t} else if (!isObject(argument)) {\n\t\t\tif (json) {\n\t\t\t\t// For some values (e.g. `undefined`, `function` objects),\n\t\t\t\t// `JSON.stringify(value)` returns `undefined` (which isn’t valid\n\t\t\t\t// JSON) instead of `'null'`.\n\t\t\t\treturn JSON.stringify(argument) || 'null';\n\t\t\t}\n\t\t\treturn String(argument);\n\t\t} else { // it’s an object\n\t\t\tresult = [];\n\t\t\toptions.wrap = true;\n\t\t\tincreaseIndentation();\n\t\t\tforOwn(argument, (key, value) => {\n\t\t\t\tisEmpty = false;\n\t\t\t\tresult.push(\n\t\t\t\t\t(compact ? '' : indent) +\n\t\t\t\t\tjsesc(key, options) + ':' +\n\t\t\t\t\t(compact ? '' : ' ') +\n\t\t\t\t\tjsesc(value, options)\n\t\t\t\t);\n\t\t\t});\n\t\t\tif (isEmpty) {\n\t\t\t\treturn '{}';\n\t\t\t}\n\t\t\treturn '{' + newLine + result.join(',' + newLine) + newLine +\n\t\t\t\t(compact ? '' : oldIndent) + '}';\n\t\t}\n\t}\n\n\tconst string = argument;\n\t// Loop over each code unit in the string and escape it\n\tlet index = -1;\n\tconst length = string.length;\n\tresult = '';\n\twhile (++index < length) {\n\t\tconst character = string.charAt(index);\n\t\tif (options.es6) {\n\t\t\tconst first = string.charCodeAt(index);\n\t\t\tif ( // check if it’s the start of a surrogate pair\n\t\t\t\tfirst >= 0xD800 && first <= 0xDBFF && // high surrogate\n\t\t\t\tlength > index + 1 // there is a next code unit\n\t\t\t) {\n\t\t\t\tconst second = string.charCodeAt(index + 1);\n\t\t\t\tif (second >= 0xDC00 && second <= 0xDFFF) { // low surrogate\n\t\t\t\t\t// https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n\t\t\t\t\tconst codePoint = (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n\t\t\t\t\tlet hexadecimal = codePoint.toString(16);\n\t\t\t\t\tif (!lowercaseHex) {\n\t\t\t\t\t\thexadecimal = hexadecimal.toUpperCase();\n\t\t\t\t\t}\n\t\t\t\t\tresult += '\\\\u{' + hexadecimal + '}';\n\t\t\t\t\t++index;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (!options.escapeEverything) {\n\t\t\tif (regexWhitelist.test(character)) {\n\t\t\t\t// It’s a printable ASCII character that is not `\"`, `'` or `\\`,\n\t\t\t\t// so don’t escape it.\n\t\t\t\tresult += character;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (character == '\"') {\n\t\t\t\tresult += quote == character ? '\\\\\"' : character;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (character == '`') {\n\t\t\t\tresult += quote == character ? '\\\\`' : character;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (character == '\\'') {\n\t\t\t\tresult += quote == character ? '\\\\\\'' : character;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\t\tif (\n\t\t\tcharacter == '\\0' &&\n\t\t\t!json &&\n\t\t\t!regexDigit.test(string.charAt(index + 1))\n\t\t) {\n\t\t\tresult += '\\\\0';\n\t\t\tcontinue;\n\t\t}\n\t\tif (regexSingleEscape.test(character)) {\n\t\t\t// no need for a `hasOwnProperty` check here\n\t\t\tresult += singleEscapes[character];\n\t\t\tcontinue;\n\t\t}\n\t\tconst charCode = character.charCodeAt(0);\n\t\tif (options.minimal && charCode != 0x2028 && charCode != 0x2029) {\n\t\t\tresult += character;\n\t\t\tcontinue;\n\t\t}\n\t\tlet hexadecimal = charCode.toString(16);\n\t\tif (!lowercaseHex) {\n\t\t\thexadecimal = hexadecimal.toUpperCase();\n\t\t}\n\t\tconst longhand = hexadecimal.length > 2 || json;\n\t\tconst escaped = '\\\\' + (longhand ? 'u' : 'x') +\n\t\t\t('0000' + hexadecimal).slice(longhand ? -4 : -2);\n\t\tresult += escaped;\n\t\tcontinue;\n\t}\n\tif (options.wrap) {\n\t\tresult = quote + result + quote;\n\t}\n\tif (quote == '`') {\n\t\tresult = result.replace(/\\$\\{/g, '\\\\\\$\\{');\n\t}\n\tif (options.isScriptContext) {\n\t\t// https://mathiasbynens.be/notes/etago\n\t\treturn result\n\t\t\t.replace(/<\\/(script|style)/gi, '<\\\\/$1')\n\t\t\t.replace(/`;\r\n case 5 /* INTERPOLATION */:\r\n return shared.escapeHtml(shared.toDisplayString(evaluateConstant(node.content)));\r\n case 8 /* COMPOUND_EXPRESSION */:\r\n return shared.escapeHtml(evaluateConstant(node));\r\n case 12 /* TEXT_CALL */:\r\n return stringifyNode(node.content, context);\r\n default:\r\n // static trees will not contain if/for nodes\r\n return '';\r\n }\r\n}\r\nfunction stringifyElement(node, context) {\r\n let res = `<${node.tag}`;\r\n for (let i = 0; i < node.props.length; i++) {\r\n const p = node.props[i];\r\n if (p.type === 6 /* ATTRIBUTE */) {\r\n res += ` ${p.name}`;\r\n if (p.value) {\r\n res += `=\"${shared.escapeHtml(p.value.content)}\"`;\r\n }\r\n }\r\n else if (p.type === 7 /* DIRECTIVE */ && p.name === 'bind') {\r\n // constant v-bind, e.g. :foo=\"1\"\r\n let evaluated = evaluateConstant(p.exp);\r\n if (evaluated != null) {\r\n const arg = p.arg && p.arg.content;\r\n if (arg === 'class') {\r\n evaluated = shared.normalizeClass(evaluated);\r\n }\r\n else if (arg === 'style') {\r\n evaluated = shared.stringifyStyle(shared.normalizeStyle(evaluated));\r\n }\r\n res += ` ${p.arg.content}=\"${shared.escapeHtml(evaluated)}\"`;\r\n }\r\n }\r\n }\r\n if (context.scopeId) {\r\n res += ` ${context.scopeId}`;\r\n }\r\n res += `>`;\r\n for (let i = 0; i < node.children.length; i++) {\r\n res += stringifyNode(node.children[i], context);\r\n }\r\n if (!shared.isVoidTag(node.tag)) {\r\n res += ``;\r\n }\r\n return res;\r\n}\r\n// __UNSAFE__\r\n// Reason: eval.\r\n// It's technically safe to eval because only constant expressions are possible\r\n// here, e.g. `{{ 1 }}` or `{{ 'foo' }}`\r\n// in addition, constant exps bail on presence of parens so you can't even\r\n// run JSFuck in here. But we mark it unsafe for security review purposes.\r\n// (see compiler-core/src/transformExpressions)\r\nfunction evaluateConstant(exp) {\r\n if (exp.type === 4 /* SIMPLE_EXPRESSION */) {\r\n return new Function(`return ${exp.content}`)();\r\n }\r\n else {\r\n // compound\r\n let res = ``;\r\n exp.children.forEach(c => {\r\n if (shared.isString(c) || shared.isSymbol(c)) {\r\n return;\r\n }\r\n if (c.type === 2 /* TEXT */) {\r\n res += c.content;\r\n }\r\n else if (c.type === 5 /* INTERPOLATION */) {\r\n res += shared.toDisplayString(evaluateConstant(c.content));\r\n }\r\n else {\r\n res += evaluateConstant(c);\r\n }\r\n });\r\n return res;\r\n }\r\n}\n\nconst ignoreSideEffectTags = (node, context) => {\r\n if (node.type === 1 /* ELEMENT */ &&\r\n node.tagType === 0 /* ELEMENT */ &&\r\n (node.tag === 'script' || node.tag === 'style')) {\r\n context.onError(createDOMCompilerError(59 /* X_IGNORED_SIDE_EFFECT_TAG */, node.loc));\r\n context.removeNode();\r\n }\r\n};\n\nconst DOMNodeTransforms = [\r\n transformStyle,\r\n ...([])\r\n];\r\nconst DOMDirectiveTransforms = {\r\n cloak: compilerCore.noopDirectiveTransform,\r\n html: transformVHtml,\r\n text: transformVText,\r\n model: transformModel,\r\n on: transformOn,\r\n show: transformShow\r\n};\r\nfunction compile(template, options = {}) {\r\n return compilerCore.baseCompile(template, shared.extend({}, parserOptions, options, {\r\n nodeTransforms: [\r\n // ignore