diff --git a/.github/config/extension_config_wasm.cmake b/.github/config/extension_config_wasm.cmake deleted file mode 100644 index 0c878af01..000000000 --- a/.github/config/extension_config_wasm.cmake +++ /dev/null @@ -1,41 +0,0 @@ -################################################################################ -# DuckDB-Wasm extension base config -################################################################################ -# -duckdb_extension_load(json DONT_LINK) -duckdb_extension_load(parquet DONT_LINK) -duckdb_extension_load(autocomplete DONT_LINK) - -duckdb_extension_load(excel DONT_LINK) -duckdb_extension_load(fts DONT_LINK) -duckdb_extension_load(inet DONT_LINK) -duckdb_extension_load(icu DONT_LINK) -duckdb_extension_load(sqlsmith DONT_LINK) -duckdb_extension_load(tpcds DONT_LINK) -duckdb_extension_load(tpch DONT_LINK) -duckdb_extension_load(visualizer DONT_LINK) - -#duckdb_extension_load(httpfs DONT_LINK) - -################# SQLITE_SCANNER -# Static linking on windows does not properly work due to symbol collision -if (WIN32) - set(STATIC_LINK_SQLITE "DONT_LINK") -else () - set(STATIC_LINK_SQLITE "") -endif() - -duckdb_extension_load(sqlite_scanner - ${STATIC_LINK_SQLITE} LOAD_TESTS - GIT_URL https://github.com/duckdblabs/sqlite_scanner - GIT_TAG 3443b2999ae1e68a108568fd32145705237a5760 - ) - -################# SUBSTRAIT -if (NOT WIN32) - duckdb_extension_load(substrait - LOAD_TESTS DONT_LINK - GIT_URL https://github.com/duckdblabs/substrait - GIT_TAG 5d621b1d7d16fe86f8b1930870c8e6bf05bcb92a - ) -endif() diff --git a/.github/workflows/HighPriorityIssues.yml b/.github/workflows/HighPriorityIssues.yml deleted file mode 100644 index 37185b1f7..000000000 --- a/.github/workflows/HighPriorityIssues.yml +++ /dev/null @@ -1,36 +0,0 @@ -name: Create Internal issue when the "High Priority" label is applied -on: - issues: - types: - - labeled - -env: - GH_TOKEN: ${{ secrets.DUCKDBLABS_BOT_TOKEN }} - # an event triggering this workflow is either an issue or a pull request, - # hence only one of the numbers will be filled in the TITLE_PREFIX - TITLE_PREFIX: "[duckdb-wasm/#${{ github.event.issue.number }}]" - PUBLIC_ISSUE_TITLE: ${{ github.event.issue.title }} - -jobs: - create_or_label_issue: - if: github.event.label.name == 'High Priority' - runs-on: ubuntu-latest - steps: - - name: Get mirror issue number - run: | - gh issue list --repo duckdblabs/duckdb-internal --search "${TITLE_PREFIX}" --json title,number --jq ".[] | select(.title | startswith(\"$TITLE_PREFIX\")).number" > mirror_issue_number.txt - echo "MIRROR_ISSUE_NUMBER=$(cat mirror_issue_number.txt)" >> $GITHUB_ENV - - - name: Print whether mirror issue exists - run: | - if [ "$MIRROR_ISSUE_NUMBER" == "" ]; then - echo "Mirror issue with title prefix '$TITLE_PREFIX' does not exist yet" - else - echo "Mirror issue with title prefix '$TITLE_PREFIX' exists with number $MIRROR_ISSUE_NUMBER" - fi - - - name: Create or label issue - run: | - if [ "$MIRROR_ISSUE_NUMBER" == "" ]; then - gh issue create --repo duckdblabs/duckdb-internal --label "Wasm" --label "High Priority" --title "$TITLE_PREFIX - $PUBLIC_ISSUE_TITLE" --body "See https://github.com/duckdb/duckdb-wasm/issues/${{ github.event.issue.number }}" - fi diff --git a/.github/workflows/InternalIssuesUpdateMirror.yml b/.github/workflows/InternalIssuesUpdateMirror.yml new file mode 100644 index 000000000..9b2192b22 --- /dev/null +++ b/.github/workflows/InternalIssuesUpdateMirror.yml @@ -0,0 +1,48 @@ +name: Update Mirror Issue +on: + issues: + types: + - closed + - reopened + +env: + GH_TOKEN: ${{ secrets.DUCKDBLABS_BOT_TOKEN }} + TITLE_PREFIX: "[duckdb-wasm/#${{ github.event.issue.number }}]" + +jobs: + update_mirror_issue: + runs-on: ubuntu-latest + steps: + - name: Get mirror issue number + run: | + gh issue list --repo duckdblabs/duckdb-internal --search "${TITLE_PREFIX}" --json title,number --state all --jq ".[] | select(.title | startswith(\"$TITLE_PREFIX\")).number" > mirror_issue_number.txt + echo "MIRROR_ISSUE_NUMBER=$(cat mirror_issue_number.txt)" >> $GITHUB_ENV + + - name: Print whether mirror issue exists + run: | + if [ "$MIRROR_ISSUE_NUMBER" == "" ]; then + echo "Mirror issue with title prefix '$TITLE_PREFIX' does not exist yet" + else + echo "Mirror issue with title prefix '$TITLE_PREFIX' exists with number $MIRROR_ISSUE_NUMBER" + fi + + - name: Add comment with status to mirror issue + run: | + if [ "$MIRROR_ISSUE_NUMBER" != "" ]; then + gh issue comment --repo duckdblabs/duckdb-internal $MIRROR_ISSUE_NUMBER --body "The issue has been ${{ github.event.action }} (https://github.com/duckdb/duckdb-wasm/issues/${{ github.event.issue.number }})." + fi + + - name: Add closed label to mirror issue + if: github.event.action == 'closed' + run: | + if [ "$MIRROR_ISSUE_NUMBER" != "" ]; then + gh issue edit --repo duckdblabs/duckdb-internal $MIRROR_ISSUE_NUMBER --add-label "public closed" --remove-label "public reopened" + fi + + - name: Reopen mirror issue and add reopened label + if: github.event.action == 'reopened' + run: | + if [ "$MIRROR_ISSUE_NUMBER" != "" ]; then + gh issue reopen --repo duckdblabs/duckdb-internal $MIRROR_ISSUE_NUMBER + gh issue edit --repo duckdblabs/duckdb-internal $MIRROR_ISSUE_NUMBER --add-label "public reopened" --remove-label "public closed" + fi diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 65b7ed1c9..d76b6e8ab 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,1151 +1,31 @@ -name: 'Main' +name: 'publish package' on: push: - pull_request: - create: - tags: - - v* - workflow_dispatch: - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }}-${{ github.head_ref || '' }}-${{ github.base_ref || '' }}-${{ github.ref != 'refs/heads/main' || github.sha }} - cancel-in-progress: true - + branches: + - main jobs: - clang_format: - name: Clang-Format - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - submodules: 'recursive' - - - name: Lint ./lib - uses: duckdb/duckdb-wasm-ci-env@ae43fa250a6b6ba92fe3d825c6c34b6d68a258a0 - with: - script: |- - python3 ./scripts/run_clang_format.py \ - --exclude ./lib/build \ - --exclude ./lib/third_party \ - -r ./lib/ - - eslint: - name: ESLint - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - submodules: 'recursive' - - - name: Cache node_modules - uses: actions/cache@v3 - with: - path: | - ./node_modules - ./packages/benchmarks/node_modules - ./packages/duckdb-wasm/node_modules - ./packages/duckdb-wasm-shell/node_modules - key: ${{ runner.os }}-yarn-${{ hashFiles('./yarn.lock') }} - restore-keys: | - ${{ runner.os }}-yarn- - - - name: Prepare repository - uses: duckdb/duckdb-wasm-ci-env@ae43fa250a6b6ba92fe3d825c6c34b6d68a258a0 - with: - script: |- - yarn install --frozen-lockfile --prefer-offline - - - name: Lint @duckdb/duckdb-wasm - uses: duckdb/duckdb-wasm-ci-env@ae43fa250a6b6ba92fe3d825c6c34b6d68a258a0 - with: - script: |- - yarn workspace @duckdb/duckdb-wasm run lint - - - name: Lint @duckdb/duckdb-wasm-shell - uses: duckdb/duckdb-wasm-ci-env@ae43fa250a6b6ba92fe3d825c6c34b6d68a258a0 - with: - script: |- - yarn workspace @duckdb/duckdb-wasm-shell run lint - - - name: Lint @duckdb/benchmarks - uses: duckdb/duckdb-wasm-ci-env@ae43fa250a6b6ba92fe3d825c6c34b6d68a258a0 - with: - script: |- - yarn workspace @duckdb/benchmarks run lint - - tpchgen: - name: TPCH Generator - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - submodules: 'recursive' - - - name: Cache generator - uses: actions/cache@v3 - id: cache-generator - with: - path: ./submodules/tpch-dbgen/dbgen/dbgen - key: ${{ runner.os }}-tpch-dbgen - - - name: Build generator - if: steps.cache-generator.outputs.cache-hit != 'true' - uses: duckdb/duckdb-wasm-ci-env@ae43fa250a6b6ba92fe3d825c6c34b6d68a258a0 - with: - script: |- - make -C ./submodules/tpch-dbgen/dbgen/ dbgen - - - name: Upload artifact - uses: actions/upload-artifact@v4 - with: - name: tpch-dbgen - path: | - ./submodules/tpch-dbgen/dbgen/dbgen - retention-days: 1 - - dataprep: - name: Dataprep - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - submodules: 'recursive' - - - name: Cache rust build - uses: actions/cache@v3 - with: - path: | - ./.cargo/bin/ - ./.cargo/registry/index/ - ./.cargo/registry/cache/ - ./.cargo/git/db/ - ./target - key: ${{ runner.os }}-dataprep-${{ hashFiles('./Cargo.lock') }}-${{ hashFiles('./tools/dataprep/src/*.rs') }} - restore-keys: | - ${{ runner.os }}-dataprep- - - - name: Build generator - shell: bash - run: | - cargo build --manifest-path=./Cargo.toml --release -p dataprep - - - name: Upload artifact - uses: actions/upload-artifact@v4 - with: - name: dataprep - path: | - ./target/release/dataprep - retention-days: 1 - - duckdb_shell: - name: DuckDB Shell - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - submodules: 'recursive' - - - name: Git submodule status - run: | - git submodule status ./submodules/duckdb > git_submodule_status.txt - - - name: Cache ccache - uses: actions/cache@v3 - with: - path: | - ./.ccache - key: ${{ runner.os }}-duckdb-${{ hashFiles('git_submodule_status.txt') }} - restore-keys: | - ${{ runner.os }}-duckdb- - - - name: Build DuckDB shell - uses: duckdb/duckdb-wasm-ci-env@ae43fa250a6b6ba92fe3d825c6c34b6d68a258a0 - with: - script: |- - ccache -z - ./scripts/build_duckdb_shell.sh - ccache -s - - - name: Upload artifact - uses: actions/upload-artifact@v4 - with: - name: duckdb-shell - path: ./submodules/duckdb/build/Release/duckdb - retention-days: 1 - - native_debug: - name: Native / Debug - runs-on: ubuntu-latest - needs: - - dataprep - - tpchgen - steps: - - uses: actions/checkout@v4 - with: - submodules: 'recursive' - fetch-depth: 0 - - - uses: actions/download-artifact@v4 - with: - name: dataprep - path: ./target/release/ - - - uses: actions/download-artifact@v4 - with: - name: tpch-dbgen - path: ./submodules/tpch-dbgen/dbgen/ - - - name: Git submodule status - run: | - git submodule status > git_submodule_status.txt - - - name: Cache native build - uses: actions/cache@v3 - with: - path: | - ./.cargo/bin/ - ./.cargo/registry/index/ - ./.cargo/registry/cache/ - ./.cargo/git/db/ - ./.ccache - ./.emscripten_cache - key: ${{ runner.os }}-native2-debug-${{ hashFiles('git_submodule_status.txt') }}-${{ hashFiles('lib/src/**') }}-${{ hashFiles('lib/include/**') }} - restore-keys: | - ${{ runner.os }}-native2-debug-${{ hashFiles('git_submodule_status.txt') }} - ${{ runner.os }}-native2-debug- - ${{ runner.os }}-native2- - - - name: Prepare repository - run: | - (cd ./submodules/duckdb && git fetch --all --tags) - [ -f duckdb.patch ] && cd submodules/duckdb && git apply ../../duckdb.patch || echo "No patching needed" - - - name: Prepare environment - uses: duckdb/duckdb-wasm-ci-env@ae43fa250a6b6ba92fe3d825c6c34b6d68a258a0 - with: - script: |- - mkdir -p ./lib/build/debug ./reports - ./scripts/generate_tpch_tbl.sh 0.01 - ./scripts/generate_tpch_arrow.sh 0.01 - ./scripts/generate_uni.sh - ccache --max-size 200M - ccache -s - - - name: Build project - uses: duckdb/duckdb-wasm-ci-env@ae43fa250a6b6ba92fe3d825c6c34b6d68a258a0 - with: - script: |- - cmake \ - -S./lib/ \ - -B./lib/build/debug \ - -DCODE_COVERAGE=1 \ - -DCMAKE_C_COMPILER_LAUNCHER=ccache \ - -DCMAKE_C_COMPILER=clang \ - -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ - -DCMAKE_CXX_COMPILER=clang++ \ - -DCMAKE_BUILD_TYPE=Debug - ccache -z - make -C./lib/build/debug -j`nproc` || exit 1 - ccache -s - - - name: Test project - uses: duckdb/duckdb-wasm-ci-env@ae43fa250a6b6ba92fe3d825c6c34b6d68a258a0 - with: - script: |- - export LLVM_PROFILE_FILE=./reports/lib.profraw - ./lib/build/debug/tester \ - --source_dir=./lib/ \ - --gtest_output=xml:./reports/tests_lib_debug.xml - - - name: Code Coverage - uses: duckdb/duckdb-wasm-ci-env@ae43fa250a6b6ba92fe3d825c6c34b6d68a258a0 - with: - script: |- - llvm-profdata merge \ - -sparse ./reports/lib.profraw \ - -o ./reports/lib.profdata - llvm-cov show ./lib/build/debug/tester \ - --instr-profile ./reports/lib.profdata \ - -ignore-filename-regex submodules \ - > ./reports/coverage_lib.txt - - native_release: - name: Native / Release - runs-on: ubuntu-latest - needs: - - dataprep - - tpchgen - steps: - - uses: actions/checkout@v4 - with: - submodules: 'recursive' - fetch-depth: 0 - - - uses: actions/download-artifact@v4 - with: - name: dataprep - path: ./target/release/ - - - uses: actions/download-artifact@v4 - with: - name: tpch-dbgen - path: ./submodules/tpch-dbgen/dbgen/ - - - name: Git submodule status - run: | - git submodule status > git_submodule_status.txt - - - name: Cache native build - uses: actions/cache@v3 - with: - path: | - ./.cargo/bin/ - ./.cargo/registry/index/ - ./.cargo/registry/cache/ - ./.cargo/git/db/ - ./.ccache - ./.emscripten_cache - key: ${{ runner.os }}-native2-release-${{ hashFiles('git_submodule_status.txt') }}-${{ hashFiles('lib/src/**') }}-${{ hashFiles('lib/include/**') }} - restore-keys: | - ${{ runner.os }}-native2-release-${{ hashFiles('git_submodule_status.txt') }} - ${{ runner.os }}-native2-release- - ${{ runner.os }}-native2- - - - name: Prepare repository - run: | - (cd ./submodules/duckdb && git fetch --all --tags) - [ -f duckdb.patch ] && cd submodules/duckdb && git apply ../../duckdb.patch || echo "No patching needed" - - - name: Prepare environment - uses: duckdb/duckdb-wasm-ci-env@ae43fa250a6b6ba92fe3d825c6c34b6d68a258a0 - with: - script: |- - mkdir -p ./lib/build/release ./reports - ./scripts/generate_tpch_tbl.sh 0.01 - ./scripts/generate_tpch_arrow.sh 0.01 - ./scripts/generate_uni.sh - ccache --max-size 200M - ccache -s - - - name: Build project - uses: duckdb/duckdb-wasm-ci-env@ae43fa250a6b6ba92fe3d825c6c34b6d68a258a0 - with: - script: |- - cmake \ - -S./lib/ \ - -B./lib/build/release \ - -DCODE_COVERAGE=1 \ - -DCMAKE_C_COMPILER_LAUNCHER=ccache \ - -DCMAKE_C_COMPILER=clang \ - -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ - -DCMAKE_CXX_COMPILER=clang++ \ - -DCMAKE_BUILD_TYPE=Release - ccache -z - make -C./lib/build/release -j`nproc` || exit 1 - ccache -s - - - name: Test project - uses: duckdb/duckdb-wasm-ci-env@ae43fa250a6b6ba92fe3d825c6c34b6d68a258a0 - with: - script: |- - export LLVM_PROFILE_FILE=./reports/lib.profraw - ./lib/build/release/tester \ - --source_dir=./lib/ \ - --gtest_output=xml:./reports/tests_lib_release.xml - - - name: Code Coverage - uses: duckdb/duckdb-wasm-ci-env@ae43fa250a6b6ba92fe3d825c6c34b6d68a258a0 - with: - script: |- - llvm-profdata merge \ - -sparse ./reports/lib.profraw \ - -o ./reports/lib.profdata - llvm-cov show ./lib/build/release/tester \ - --instr-profile ./reports/lib.profdata \ - -ignore-filename-regex submodules \ - > ./reports/coverage_lib.txt - - wasm_mvp: - name: Wasm / mvp - runs-on: ubuntu-latest - needs: - - dataprep - - tpchgen - steps: - - uses: actions/checkout@v4 - with: - submodules: 'recursive' - fetch-depth: 0 - - - name: Prepare repository - run: | - [ -f duckdb.patch ] && cd submodules/duckdb && git apply ../../duckdb.patch || echo "No patching needed" - - - uses: mymindstorm/setup-emsdk@v13 - with: - version: 'latest' - - - name: Setup Ccache - uses: hendrikmuhs/ccache-action@main - with: - key: ${{ github.job }} - - - name: Git submodule status - run: | - git submodule status > git_submodule_status.txt - - - name: Build Wasm module - run: | - ./scripts/wasm_build_lib.sh relperf mvp - - - name: Upload artifact - uses: actions/upload-artifact@v4 - with: - name: wasm-mvp - path: | - ./packages/duckdb-wasm/src/bindings/duckdb-mvp.js - ./packages/duckdb-wasm/src/bindings/duckdb-mvp.wasm - retention-days: 1 - - wasm_eh: - name: Wasm / eh - runs-on: ubuntu-latest - needs: - - dataprep - - tpchgen - steps: - - uses: actions/checkout@v4 - with: - submodules: 'recursive' - fetch-depth: 0 - - - name: Prepare repository - run: | - [ -f duckdb.patch ] && cd submodules/duckdb && git apply ../../duckdb.patch || echo "No patching needed" - - - uses: mymindstorm/setup-emsdk@v13 - with: - version: 'latest' - - - name: Setup Ccache - uses: hendrikmuhs/ccache-action@main - with: - key: ${{ github.job }} - - - name: Git submodule status - run: | - git submodule status > git_submodule_status.txt - - - name: Build Wasm module - run: | - ./scripts/wasm_build_lib.sh relperf eh - - - name: Upload artifact - uses: actions/upload-artifact@v4 - with: - name: wasm-eh - path: | - ./packages/duckdb-wasm/src/bindings/duckdb-eh.js - ./packages/duckdb-wasm/src/bindings/duckdb-eh.wasm - retention-days: 1 - - wasm_coi: - name: Wasm / coi - runs-on: ubuntu-latest - needs: - - dataprep - - tpchgen - steps: - - uses: actions/checkout@v4 - with: - submodules: 'recursive' - fetch-depth: 0 - - - name: Prepare repository - run: | - [ -f duckdb.patch ] && cd submodules/duckdb && git apply ../../duckdb.patch || echo "No patching needed" - - - uses: mymindstorm/setup-emsdk@v13 - with: - version: 'latest' - - - name: Setup Ccache - uses: hendrikmuhs/ccache-action@main - with: - key: ${{ github.job }} - - - name: Git submodule status - run: | - git submodule status > git_submodule_status.txt - - - name: Build Wasm module - run: | - ./scripts/wasm_build_lib.sh relperf coi - - - name: Upload artifact - uses: actions/upload-artifact@v4 - with: - name: wasm-coi - path: | - ./packages/duckdb-wasm/src/bindings/duckdb-coi.js - ./packages/duckdb-wasm/src/bindings/duckdb-coi.pthread.js - ./packages/duckdb-wasm/src/bindings/duckdb-coi.wasm - retention-days: 1 - - wasm_mvp_loadable: - name: Wasm / mvp (loadable version) - runs-on: ubuntu-latest - needs: - - dataprep - - tpchgen - steps: - - uses: actions/checkout@v4 - with: - submodules: 'recursive' - fetch-depth: 0 - - - name: Prepare repository - run: | - [ -f duckdb.patch ] && cd submodules/duckdb && git apply ../../duckdb.patch || echo "No patching needed" - - - uses: mymindstorm/setup-emsdk@v13 - with: - version: 'latest' - - - name: Setup Ccache - uses: hendrikmuhs/ccache-action@main - with: - key: ${{ github.job }} - - - name: Git submodule status - run: | - git submodule status > git_submodule_status.txt - - - name: Build Wasm module - run: | - cp .github/config/extension_config_wasm.cmake submodules/duckdb/extension/extension_config.cmake - DUCKDB_WASM_LOADABLE_EXTENSIONS="signed" GEN=ninja ./scripts/wasm_build_lib.sh relsize mvp - bash ./scripts/build_loadable.sh relsize mvp - - - name: Upload artifact - uses: actions/upload-artifact@v4 - with: - name: wasm-mvp-loadable - path: | - ./packages/duckdb-wasm/src/bindings/duckdb-mvp.js - ./packages/duckdb-wasm/src/bindings/duckdb-mvp.wasm - retention-days: 1 - - wasm_eh_loadable: - name: Wasm / eh (loadable version) - runs-on: ubuntu-latest - needs: - - dataprep - - tpchgen - steps: - - uses: actions/checkout@v4 - with: - submodules: 'recursive' - fetch-depth: 0 - - - name: Prepare repository - run: | - [ -f duckdb.patch ] && cd submodules/duckdb && git apply ../../duckdb.patch || echo "No patching needed" - - - uses: mymindstorm/setup-emsdk@v13 - with: - version: 'latest' - - - name: Setup Ccache - uses: hendrikmuhs/ccache-action@main - with: - key: ${{ github.job }} - - - name: Git submodule status - run: | - git submodule status > git_submodule_status.txt - - - name: Build Wasm module - run: | - cp .github/config/extension_config_wasm.cmake submodules/duckdb/extension/extension_config.cmake - DUCKDB_WASM_LOADABLE_EXTENSIONS="signed" GEN=ninja ./scripts/wasm_build_lib.sh relsize eh - bash ./scripts/build_loadable.sh relsize eh - - - name: Upload artifact - uses: actions/upload-artifact@v4 - with: - name: wasm-eh-loadable - path: | - ./packages/duckdb-wasm/src/bindings/duckdb-eh.js - ./packages/duckdb-wasm/src/bindings/duckdb-eh.wasm - retention-days: 1 - - js_libs: - name: Js / Libraries - runs-on: ubuntu-latest - needs: - - wasm_mvp - - wasm_eh - - wasm_coi - - duckdb_shell - - clang_format - - eslint - steps: - - uses: actions/checkout@v4 - with: - submodules: 'recursive' - fetch-depth: 0 - - - uses: actions/setup-node@v4 - with: - node-version: '18.x' - registry-url: 'https://registry.npmjs.org' - - - name: Git submodule status - run: | - git submodule status > git_submodule_status.txt - - - name: Cache rust build - uses: actions/cache@v3 - with: - path: | - ./.cargo/bin/ - ./.cargo/registry/index/ - ./.cargo/registry/cache/ - ./.cargo/git/db/ - ./target - key: ${{ runner.os }}-shell-${{ hashFiles('./Cargo.lock') }}-${{ hashFiles('./packages/duckdb-wasm-shell/crate/src/**') }} - restore-keys: | - ${{ runner.os }}-shell- - - - name: Cache node_modules - uses: actions/cache@v3 - with: - path: | - ./node_modules - ./packages/benchmarks/node_modules - ./packages/duckdb-wasm/node_modules - ./packages/duckdb-wasm-shell/node_modules - key: ${{ runner.os }}-yarn-${{ hashFiles('./yarn.lock') }} - restore-keys: | - ${{ runner.os }}-yarn- - - - uses: actions/download-artifact@v4 - with: - name: dataprep - path: ./target/release/ - - - uses: actions/download-artifact@v4 - with: - name: tpch-dbgen - path: ./submodules/tpch-dbgen/dbgen/ - - - uses: actions/download-artifact@v4 - with: - name: duckdb-shell - path: ./submodules/duckdb/build/Release/ - - - uses: actions/download-artifact@v4 - with: - name: wasm-mvp - path: ./packages/duckdb-wasm/src/bindings/ - - - uses: actions/download-artifact@v4 - with: - name: wasm-eh - path: ./packages/duckdb-wasm/src/bindings/ - - - uses: actions/download-artifact@v4 - with: - name: wasm-coi - path: ./packages/duckdb-wasm/src/bindings/ - - - name: Prepare repository - run: | - git fetch --tags --no-recurse-submodules -f - (cd ./submodules/duckdb && git fetch --all --tags) - - - name: Prepare environment - uses: duckdb/duckdb-wasm-ci-env@ae43fa250a6b6ba92fe3d825c6c34b6d68a258a0 - with: - script: |- - git config --global --add safe.directory '*' - mkdir -p ./lib/build/wasm/release ./reports - yarn install --frozen-lockfile - ./scripts/generate_tpch_tbl.sh 0.01 - ./scripts/generate_tpch_arrow.sh 0.01 - ./scripts/generate_tpch_duckdb.sh 0.01 - ./scripts/generate_tpch_sqlite.sh 0.01 - ./scripts/generate_uni.sh - ./scripts/npm_version.sh - - - name: Build @duckdb/duckdb-wasm - shell: bash - run: | - rm -rf ./packages/duckdb-wasm/dist/ - yarn workspace @duckdb/duckdb-wasm build:release - yarn workspace @duckdb/duckdb-wasm docs - - - name: Build @duckdb/duckdb-wasm-shell - shell: bash - run: | - rm -rf ./packages/duckdb-wasm-shell/dist/ - yarn workspace @duckdb/duckdb-wasm-shell install:wasmpack - yarn workspace @duckdb/duckdb-wasm-shell build:release - - - name: Build @duckdb/duckdb-wasm-app - shell: bash - run: | - rm -rf ./packages/duckdb-wasm-app/build/ - yarn workspace @duckdb/duckdb-wasm-app build:release - - - name: Test @duckdb/duckdb-wasm on Chrome - shell: bash - run: | - CHROME_BIN=`which google-chrome` yarn workspace @duckdb/duckdb-wasm test:chrome - - # - name: Test @duckdb/duckdb-wasm on Firefox - # uses: duckdb/duckdb-wasm-ci-env@ae43fa250a6b6ba92fe3d825c6c34b6d68a258a0 - # with: - # script: |- - # yarn workspace @duckdb/duckdb-wasm test:firefox - - - name: Test @duckdb/duckdb-wasm on Node.js - shell: bash - run: | - yarn workspace @duckdb/duckdb-wasm test:node - - - name: Coverage @duckdb/duckdb-wasm - shell: bash - run: | - CHROME_BIN=`which google-chrome` yarn workspace @duckdb/duckdb-wasm test:chrome:coverage - - - name: Build examples - shell: bash - run: | - yarn install - yarn workspace @duckdb/duckdb-wasm-examples-bare-node test - yarn workspace @duckdb/duckdb-wasm-examples-bare-browser build - yarn workspace @duckdb/duckdb-wasm-examples-esbuild-node build - yarn workspace @duckdb/duckdb-wasm-examples-esbuild-node test - yarn workspace @duckdb/duckdb-wasm-examples-esbuild-browser build - - - name: Package - shell: bash - run: zip -r duckdb-wasm-packages.zip ./packages - - - uses: actions/upload-artifact@v4 - with: - name: duckdb-wasm-packages - path: duckdb-wasm-packages.zip - - - name: Build @duckdb/benchmarks - shell: bash - run: | - rm -r packages/duckdb-wasm/node_modules/* - yarn workspace @duckdb/benchmarks build - yarn workspace @duckdb/benchmarks bench:system:sort:int - yarn workspace @duckdb/benchmarks bench:system:join:2 - yarn workspace @duckdb/benchmarks bench:system:join:3 - yarn workspace @duckdb/benchmarks bench:system:regex - yarn workspace @duckdb/benchmarks bench:system:sum:int - yarn workspace @duckdb/benchmarks bench:system:sum:csv - - - name: Upload reports - uses: actions/upload-artifact@v4 - with: - name: reports_micro - path: | - ./reports/benchmark_system_sort_int.json - ./reports/benchmark_system_join_2.json - ./reports/benchmark_system_join_3.json - ./reports/benchmark_system_regex.json - ./reports/benchmark_system_sum_csv.json - ./reports/benchmark_system_sum_int.json - retention-days: 1 - - - name: Preparation TPCH 0.01 - if: github.ref == 'refs/heads/main' - uses: duckdb/duckdb-wasm-ci-env@ae43fa250a6b6ba92fe3d825c6c34b6d68a258a0 - with: - script: |- - git config --global --add safe.directory '*' - mkdir -p ./lib/build/wasm/release ./reports - yarn install --frozen-lockfile - ./scripts/generate_tpch_tbl.sh 0.01 - ./scripts/generate_tpch_arrow.sh 0.01 - ./scripts/generate_tpch_duckdb.sh 0.01 - ./scripts/generate_tpch_sqlite.sh 0.01 - - - name: Benchmarks TPCH 0.01 - if: github.ref == 'refs/heads/main' - shell: bash - run: | - yarn workspace @duckdb/benchmarks bench:system:tpch:duckdb 0.01 - yarn workspace @duckdb/benchmarks bench:system:tpch:sqljs 0.01 - yarn workspace @duckdb/benchmarks bench:system:tpch:arquero 0.01 - yarn workspace @duckdb/benchmarks bench:system:tpch:lovefield 0.01 - - - name: Upload reports TPCH 0.01 - if: github.ref == 'refs/heads/main' - uses: actions/upload-artifact@v4 - with: - name: reports_tpch_0_01 - path: | - ./reports/benchmark_system_tpch_001_duckdb.json - ./reports/benchmark_system_tpch_001_sqljs.json - ./reports/benchmark_system_tpch_001_arquero.json - ./reports/benchmark_system_tpch_001_lovefield.json - retention-days: 1 - - - name: Preparation TPCH 0.1 - if: github.ref == 'refs/heads/main' - uses: duckdb/duckdb-wasm-ci-env@ae43fa250a6b6ba92fe3d825c6c34b6d68a258a0 - with: - script: |- - git config --global --add safe.directory '*' - mkdir -p ./lib/build/wasm/release ./reports - yarn install --frozen-lockfile - ./scripts/generate_tpch_tbl.sh 0.1 - ./scripts/generate_tpch_arrow.sh 0.1 - ./scripts/generate_tpch_duckdb.sh 0.1 - ./scripts/generate_tpch_sqlite.sh 0.1 - - - name: Benchmarks TPCH 0.1 - if: github.ref == 'refs/heads/main' - shell: bash - run: | - yarn workspace @duckdb/benchmarks bench:system:tpch:duckdb 0.1 - yarn workspace @duckdb/benchmarks bench:system:tpch:sqljs 0.1 - yarn workspace @duckdb/benchmarks bench:system:tpch:arquero 0.1 - yarn workspace @duckdb/benchmarks bench:system:tpch:lovefield 0.1 - - - name: Upload reports TPCH 0.1 - if: github.ref == 'refs/heads/main' - uses: actions/upload-artifact@v4 - with: - name: reports_tpch_0_1 - path: | - ./reports/benchmark_system_tpch_01_duckdb.json - ./reports/benchmark_system_tpch_01_sqljs.json - ./reports/benchmark_system_tpch_01_arquero.json - ./reports/benchmark_system_tpch_01_lovefield.json - retention-days: 1 - - - name: Preparation TPCH 0.25 - if: github.ref == 'refs/heads/main' - uses: duckdb/duckdb-wasm-ci-env@ae43fa250a6b6ba92fe3d825c6c34b6d68a258a0 - with: - script: |- - git config --global --add safe.directory '*' - mkdir -p ./lib/build/wasm/release ./reports - yarn install --frozen-lockfile - ./scripts/generate_tpch_tbl.sh 0.25 - ./scripts/generate_tpch_arrow.sh 0.25 - ./scripts/generate_tpch_duckdb.sh 0.25 - ./scripts/generate_tpch_sqlite.sh 0.25 - - - name: Benchmarks TPCH 0.25 - if: github.ref == 'refs/heads/main' - shell: bash - run: | - yarn workspace @duckdb/benchmarks bench:system:tpch:duckdb 0.25 - yarn workspace @duckdb/benchmarks bench:system:tpch:sqljs 0.25 - yarn workspace @duckdb/benchmarks bench:system:tpch:arquero 0.25 - yarn workspace @duckdb/benchmarks bench:system:tpch:lovefield 0.25 - - - name: Upload reports TPCH 0.25 - if: github.ref == 'refs/heads/main' - uses: actions/upload-artifact@v4 - with: - name: reports_tpch_0_25 - path: | - ./reports/benchmark_system_tpch_025_duckdb.json - ./reports/benchmark_system_tpch_025_sqljs.json - ./reports/benchmark_system_tpch_025_arquero.json - ./reports/benchmark_system_tpch_025_lovefield.json - retention-days: 1 - - - name: Preparation TPCH 0.5 - if: github.ref == 'refs/heads/main' - uses: duckdb/duckdb-wasm-ci-env@ae43fa250a6b6ba92fe3d825c6c34b6d68a258a0 - with: - script: |- - git config --global --add safe.directory '*' - mkdir -p ./lib/build/wasm/release ./reports - yarn install --frozen-lockfile - ./scripts/generate_tpch_tbl.sh 0.5 - ./scripts/generate_tpch_arrow.sh 0.5 - ./scripts/generate_tpch_duckdb.sh 0.5 - ./scripts/generate_tpch_sqlite.sh 0.5 - - - name: Benchmarks TPCH 0.5 - if: github.ref == 'refs/heads/main' - shell: bash - run: | - yarn workspace @duckdb/benchmarks bench:system:tpch:duckdb 0.5 - yarn workspace @duckdb/benchmarks bench:system:tpch:sqljs 0.5 - yarn workspace @duckdb/benchmarks bench:system:tpch:arquero 0.5 - yarn workspace @duckdb/benchmarks bench:system:tpch:lovefield 0.5 - - - name: Upload reports TPCH 0.5 - if: github.ref == 'refs/heads/main' - uses: actions/upload-artifact@v4 - with: - name: reports_tpch_0_5 - path: | - ./reports/benchmark_system_tpch_05_duckdb.json - ./reports/benchmark_system_tpch_05_sqljs.json - ./reports/benchmark_system_tpch_05_arquero.json - ./reports/benchmark_system_tpch_05_lovefield.json - retention-days: 1 - - js_libs_loadable: - name: Js / Libraries (loadable version) + publish-npm: runs-on: ubuntu-latest - needs: - - wasm_mvp_loadable - - wasm_eh_loadable - - wasm_coi - - duckdb_shell - - clang_format - - eslint + permissions: + packages: write + contents: write steps: - - uses: actions/checkout@v4 - with: - submodules: 'recursive' - fetch-depth: 0 - - - uses: actions/setup-node@v4 - with: - node-version: '18.x' - registry-url: 'https://registry.npmjs.org' - - - name: Git submodule status - run: | - git submodule status > git_submodule_status.txt - - - name: Cache rust build - uses: actions/cache@v3 + - uses: actions/checkout@v3 with: - path: | - ./.cargo/bin/ - ./.cargo/registry/index/ - ./.cargo/registry/cache/ - ./.cargo/git/db/ - ./target - key: ${{ runner.os }}-shell-${{ hashFiles('./Cargo.lock') }}-${{ hashFiles('./packages/duckdb-wasm-shell/crate/src/**') }} - restore-keys: | - ${{ runner.os }}-shell- - - - name: Cache node_modules - uses: actions/cache@v3 - with: - path: | - ./node_modules - ./packages/benchmarks/node_modules - ./packages/duckdb-wasm/node_modules - ./packages/duckdb-wasm-shell/node_modules - key: ${{ runner.os }}-yarn-${{ hashFiles('./yarn.lock') }} - restore-keys: | - ${{ runner.os }}-yarn- - - - uses: actions/download-artifact@v4 - with: - name: dataprep - path: ./target/release/ - - - uses: actions/download-artifact@v4 - with: - name: tpch-dbgen - path: ./submodules/tpch-dbgen/dbgen/ - - - uses: actions/download-artifact@v4 - with: - name: duckdb-shell - path: ./submodules/duckdb/build/Release/ - - - uses: actions/download-artifact@v4 - with: - name: wasm-mvp-loadable - path: ./packages/duckdb-wasm/src/bindings/ - - - uses: actions/download-artifact@v4 - with: - name: wasm-eh-loadable - path: ./packages/duckdb-wasm/src/bindings/ - - - uses: actions/download-artifact@v4 - with: - name: wasm-coi - path: ./packages/duckdb-wasm/src/bindings/ - - - name: Prepare repository - run: | - git fetch --tags --no-recurse-submodules -f - (cd ./submodules/duckdb && git fetch --all --tags) - - - name: Prepare environment - uses: duckdb/duckdb-wasm-ci-env@ae43fa250a6b6ba92fe3d825c6c34b6d68a258a0 + submodules: true + ref: 'feat/devrev-duckdb-version-v1.27.1-dev-115.0' + - uses: actions/setup-node@v3 with: - script: |- - git config --global --add safe.directory '*' - mkdir -p ./lib/build/wasm/release ./reports - yarn install --frozen-lockfile - ./scripts/generate_tpch_tbl.sh 0.01 - ./scripts/generate_tpch_arrow.sh 0.01 - ./scripts/generate_tpch_duckdb.sh 0.01 - ./scripts/generate_tpch_sqlite.sh 0.01 - ./scripts/generate_uni.sh - ./scripts/npm_version.sh + node-version: 18.17 + registry-url: https://registry.npmjs.org/ + scope: '@devrev' - - name: Build @duckdb/duckdb-wasm - shell: bash - run: | - rm -rf ./packages/duckdb-wasm/dist/ - yarn workspace @duckdb/duckdb-wasm build:release - yarn workspace @duckdb/duckdb-wasm docs - - - name: Build @duckdb/duckdb-wasm-shell - shell: bash - run: | - rm -rf ./packages/duckdb-wasm-shell/dist/ - yarn workspace @duckdb/duckdb-wasm-shell install:wasmpack - yarn workspace @duckdb/duckdb-wasm-shell build:release - - - name: Build @duckdb/duckdb-wasm-app - shell: bash - run: | - rm -rf ./packages/duckdb-wasm-app/build/ - yarn workspace @duckdb/duckdb-wasm-app build:release - - - name: Test @duckdb/duckdb-wasm on Chrome - shell: bash - run: | - CHROME_BIN=`which google-chrome` yarn workspace @duckdb/duckdb-wasm test:chrome - - # - name: Test @duckdb/duckdb-wasm on Firefox - # uses: duckdb/duckdb-wasm-ci-env@ae43fa250a6b6ba92fe3d825c6c34b6d68a258a0 - # with: - # script: |- - # yarn workspace @duckdb/duckdb-wasm test:firefox - - - name: Test @duckdb/duckdb-wasm on Node.js - shell: bash - run: | - yarn workspace @duckdb/duckdb-wasm test:node - - #- name: Coverage @duckdb/duckdb-wasm - # shell: bash - # run: | - # CHROME_BIN=`which google-chrome` yarn workspace @duckdb/duckdb-wasm test:chrome:coverage - - - name: Package - shell: bash - run: zip -r duckdb-wasm-packages.zip ./packages - - - uses: actions/upload-artifact@v4 - with: - name: duckdb-wasm-packages-loadable - path: duckdb-wasm-packages.zip - - - name: Publish to NPM + - run: npm install -g yarn + - name: publish package env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_PUBLISH_TOKEN }} - if: env.NODE_AUTH_TOKEN != null - run: | - ./scripts/npm_publish_lib.sh - ./scripts/npm_publish_shell.sh - ./scripts/npm_publish_react.sh - - - name: Deploy GitHub Page - if: github.ref == 'refs/heads/main' - run: | - git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/$GITHUB_REPOSITORY - git fetch origin gh-pages - ./scripts/deploy_pages.sh - - merge_reports: - name: Merge benchmark reports - runs-on: ubuntu-latest - if: github.ref == 'refs/heads/main' - needs: - - js_libs - steps: - - uses: actions/checkout@v4 - with: - submodules: 'recursive' - - - uses: actions/download-artifact@v4 - with: - name: dataprep - path: ./target/release/ - - - uses: actions/download-artifact@v4 - with: - name: reports_micro - path: ./reports/ - - - uses: actions/download-artifact@v4 - with: - name: reports_tpch_0_01 - path: ./reports/ - - - uses: actions/download-artifact@v4 - with: - name: reports_tpch_0_1 - path: ./reports/ - - - uses: actions/download-artifact@v4 - with: - name: reports_tpch_0_25 - path: ./reports/ - - - uses: actions/download-artifact@v4 - with: - name: reports_tpch_0_5 - path: ./reports/ - - - name: Merge reports - shell: bash - run: | - mkdir duckdb - cd duckdb - wget https://github.com/duckdb/duckdb/releases/download/v0.8.1/duckdb_cli-linux-amd64.zip - unzip duckdb_cli-linux-amd64.zip - ./duckdb -c "COPY (FROM read_json_auto('../reports/*.json', union_by_name=1)) TO 'benchmarks.json'" - ./duckdb -c "COPY (FROM read_json_auto('../reports/*.json', union_by_name=1)) TO 'benchmarks.csv'" - - - name: Upload artifact - uses: actions/upload-artifact@v4 - with: - name: reports_various - path: | - ./reports/benchmarks.arrow - ./duckdb/benchmarks.json - ./duckdb/benchmarks.csv - retention-days: 1 - - - name: Merge benchmark reports - uses: duckdb/duckdb-wasm-ci-env@ae43fa250a6b6ba92fe3d825c6c34b6d68a258a0 - with: - script: |- - chmod +x ./target/release/dataprep - ./target/release/dataprep merge-benchmarks -r ./reports/ - - - name: Upload artifact - uses: actions/upload-artifact@v4 - with: - name: reports_all - path: | - ./reports/benchmarks.arrow - retention-days: 1 - - - name: Deploy benchmark reports - if: github.ref == 'refs/heads/main' + NODE_AUTH_TOKEN: ${{ secrets.NPMJS_NPM_TOKEN }} run: | - git config --global user.name 'github-actions[bot]' - git config --global user.email '41898282+github-actions[bot]@users.noreply.github.com' - git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/$GITHUB_REPOSITORY - git fetch origin gh-pages - ./scripts/deploy_benchmarks.sh + git submodule init + git submodule update + cd packages/duckdb-wasm + npm publish --access public diff --git a/.gitignore b/.gitignore index d818f0a7b..a476c300e 100644 --- a/.gitignore +++ b/.gitignore @@ -21,6 +21,7 @@ compile_commands.json /target # Miscellaneous + .DS_Store /node_modules .vscode diff --git a/.gitmodules b/.gitmodules index 642a1efcc..e01ff0b7a 100644 --- a/.gitmodules +++ b/.gitmodules @@ -32,3 +32,4 @@ url = https://github.com/gregrahn/tpch-kit.git ignore = dirty shallow = true + diff --git a/.vscode/settings.json b/.vscode/settings.json index e58bcdd29..7e7bdf878 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -3,7 +3,7 @@ "editor.formatOnSave": true, "editor.trimAutoWhitespace": true, "editor.codeActionsOnSave": { - "source.fixAll.eslint": true + "source.fixAll.eslint": "explicit" }, "files.insertFinalNewline": true, "rust-analyzer.procMacro.enable": true, diff --git a/Cargo.lock b/Cargo.lock index 9dca7a422..a427b0ceb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8,6 +8,20 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +[[package]] +name = "ahash" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +dependencies = [ + "cfg-if", + "const-random", + "getrandom", + "once_cell", + "version_check", + "zerocopy", +] + [[package]] name = "aho-corasick" version = "1.1.2" @@ -62,8 +76,8 @@ dependencies = [ "bitflags", "chrono", "csv", - "flatbuffers", - "half", + "flatbuffers 2.1.2", + "half 1.8.2", "hex", "indexmap 1.9.3", "lazy_static", @@ -77,6 +91,230 @@ dependencies = [ "serde_json", ] +[[package]] +name = "arrow" +version = "52.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ae9728f104939be6d8d9b368a354b4929b0569160ea1641f0721b55a861ce38" +dependencies = [ + "arrow-arith", + "arrow-array", + "arrow-buffer", + "arrow-cast", + "arrow-csv", + "arrow-data", + "arrow-ipc", + "arrow-json", + "arrow-ord", + "arrow-row", + "arrow-schema", + "arrow-select", + "arrow-string", +] + +[[package]] +name = "arrow-arith" +version = "52.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7029a5b3efbeafbf4a12d12dc16b8f9e9bff20a410b8c25c5d28acc089e1043" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "chrono", + "half 2.4.1", + "num", +] + +[[package]] +name = "arrow-array" +version = "52.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d33238427c60271710695f17742f45b1a5dc5bcfc5c15331c25ddfe7abf70d97" +dependencies = [ + "ahash", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "chrono", + "half 2.4.1", + "hashbrown 0.14.2", + "num", +] + +[[package]] +name = "arrow-buffer" +version = "52.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe9b95e825ae838efaf77e366c00d3fc8cca78134c9db497d6bda425f2e7b7c1" +dependencies = [ + "bytes", + "half 2.4.1", + "num", +] + +[[package]] +name = "arrow-cast" +version = "52.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cf8385a9d5b5fcde771661dd07652b79b9139fea66193eda6a88664400ccab" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "arrow-select", + "atoi", + "base64 0.22.1", + "chrono", + "half 2.4.1", + "lexical-core", + "num", + "ryu", +] + +[[package]] +name = "arrow-csv" +version = "52.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cea5068bef430a86690059665e40034625ec323ffa4dd21972048eebb0127adc" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-cast", + "arrow-data", + "arrow-schema", + "chrono", + "csv", + "csv-core", + "lazy_static", + "lexical-core", + "regex", +] + +[[package]] +name = "arrow-data" +version = "52.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb29be98f987bcf217b070512bb7afba2f65180858bca462edf4a39d84a23e10" +dependencies = [ + "arrow-buffer", + "arrow-schema", + "half 2.4.1", + "num", +] + +[[package]] +name = "arrow-ipc" +version = "52.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffc68f6523970aa6f7ce1dc9a33a7d9284cfb9af77d4ad3e617dbe5d79cc6ec8" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-cast", + "arrow-data", + "arrow-schema", + "flatbuffers 24.3.25", +] + +[[package]] +name = "arrow-json" +version = "52.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2041380f94bd6437ab648e6c2085a045e45a0c44f91a1b9a4fe3fed3d379bfb1" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-cast", + "arrow-data", + "arrow-schema", + "chrono", + "half 2.4.1", + "indexmap 2.0.2", + "lexical-core", + "num", + "serde", + "serde_json", +] + +[[package]] +name = "arrow-ord" +version = "52.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcb56ed1547004e12203652f12fe12e824161ff9d1e5cf2a7dc4ff02ba94f413" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "arrow-select", + "half 2.4.1", + "num", +] + +[[package]] +name = "arrow-row" +version = "52.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "575b42f1fc588f2da6977b94a5ca565459f5ab07b60545e17243fb9a7ed6d43e" +dependencies = [ + "ahash", + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "half 2.4.1", + "hashbrown 0.14.2", +] + +[[package]] +name = "arrow-schema" +version = "52.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32aae6a60458a2389c0da89c9de0b7932427776127da1a738e2efc21d32f3393" + +[[package]] +name = "arrow-select" +version = "52.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de36abaef8767b4220d7b4a8c2fe5ffc78b47db81b03d77e2136091c3ba39102" +dependencies = [ + "ahash", + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "num", +] + +[[package]] +name = "arrow-string" +version = "52.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e435ada8409bcafc910bc3e0077f532a4daa20e99060a496685c0e3e53cc2597" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "arrow-select", + "memchr", + "num", + "regex", + "regex-syntax", +] + +[[package]] +name = "atoi" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528" +dependencies = [ + "num-traits", +] + [[package]] name = "atty" version = "0.2.14" @@ -100,6 +338,12 @@ version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + [[package]] name = "bitflags" version = "1.3.2" @@ -139,6 +383,12 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" +[[package]] +name = "bytes" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" + [[package]] name = "cc" version = "1.0.83" @@ -157,9 +407,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.31" +version = "0.4.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38" +checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" dependencies = [ "android-tzdata", "iana-time-zone", @@ -167,7 +417,7 @@ dependencies = [ "num-traits", "serde", "wasm-bindgen", - "windows-targets", + "windows-targets 0.52.5", ] [[package]] @@ -204,6 +454,26 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "const-random" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359" +dependencies = [ + "const-random-macro", +] + +[[package]] +name = "const-random-macro" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" +dependencies = [ + "getrandom", + "once_cell", + "tiny-keccak", +] + [[package]] name = "core-foundation-sys" version = "0.8.4" @@ -219,6 +489,12 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + [[package]] name = "csv" version = "1.3.0" @@ -244,7 +520,7 @@ dependencies = [ name = "dataprep" version = "0.1.0" dependencies = [ - "arrow", + "arrow 13.0.0", "chrono", "clap", "parquet", @@ -257,7 +533,7 @@ name = "duckdb-wasm-shell" version = "0.1.0" dependencies = [ "anyhow", - "arrow", + "arrow 52.0.0", "chrono", "console_error_panic_hook", "encode_unicode", @@ -301,6 +577,16 @@ dependencies = [ "thiserror", ] +[[package]] +name = "flatbuffers" +version = "24.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8add37afff2d4ffa83bc748a70b4b1370984f6980768554182424ef71447c35f" +dependencies = [ + "bitflags", + "rustc_version", +] + [[package]] name = "flate2" version = "1.0.28" @@ -330,6 +616,17 @@ version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" +[[package]] +name = "half" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" +dependencies = [ + "cfg-if", + "crunchy", + "num-traits", +] + [[package]] name = "hashbrown" version = "0.12.3" @@ -521,6 +818,12 @@ version = "0.2.149" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b" +[[package]] +name = "libm" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + [[package]] name = "log" version = "0.4.20" @@ -549,9 +852,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.6.4" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "miniz_oxide" @@ -656,6 +959,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" dependencies = [ "autocfg", + "libm", ] [[package]] @@ -695,8 +999,8 @@ version = "13.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c6d737baed48775e87a69aa262f1fa2f1d6bd074dedbe9cac244b9aabf2a0b4" dependencies = [ - "arrow", - "base64", + "arrow 13.0.0", + "base64 0.13.1", "brotli", "byteorder", "chrono", @@ -819,11 +1123,20 @@ dependencies = [ "str_indices", ] +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + [[package]] name = "ryu" -version = "1.0.15" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" [[package]] name = "scoped-tls" @@ -837,6 +1150,12 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +[[package]] +name = "semver" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" + [[package]] name = "serde" version = "1.0.189" @@ -996,6 +1315,15 @@ dependencies = [ "threadpool", ] +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + [[package]] name = "unicode-ident" version = "1.0.12" @@ -1014,6 +1342,12 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" @@ -1159,7 +1493,7 @@ version = "0.51.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64" dependencies = [ - "windows-targets", + "windows-targets 0.48.5", ] [[package]] @@ -1168,13 +1502,29 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" +dependencies = [ + "windows_aarch64_gnullvm 0.52.5", + "windows_aarch64_msvc 0.52.5", + "windows_i686_gnu 0.52.5", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.5", + "windows_x86_64_gnu 0.52.5", + "windows_x86_64_gnullvm 0.52.5", + "windows_x86_64_msvc 0.52.5", ] [[package]] @@ -1183,42 +1533,110 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" + [[package]] name = "windows_aarch64_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" + [[package]] name = "windows_i686_gnu" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" +[[package]] +name = "windows_i686_gnu" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" + [[package]] name = "windows_i686_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" +[[package]] +name = "windows_i686_msvc" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" + [[package]] name = "windows_x86_64_gnu" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" + [[package]] name = "windows_x86_64_gnullvm" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" + [[package]] name = "windows_x86_64_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" + +[[package]] +name = "zerocopy" +version = "0.7.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae87e3fcd617500e5d106f0380cf7b77f3c6092aae37191433159dda23cfb087" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.38", +] + [[package]] name = "zstd" version = "0.11.2+zstd.1.5.2" diff --git a/Makefile b/Makefile index 678d39f35..e4c96a669 100644 --- a/Makefile +++ b/Makefile @@ -14,6 +14,7 @@ LIB_RELEASE_DIR="${ROOT_DIR}/build/Release" LIB_RELWITHDEBINFO_DIR="${ROOT_DIR}/build/RelWithDebInfo" LIB_XRAY_DIR="${ROOT_DIR}/build/Xray" DUCKDB_WASM_DIR="${ROOT_DIR}/packages/duckdb/src/wasm" +TARGET=eh DUCKDB_HASH=${shell cd submodules/duckdb && git reflog -n 1 | head -c 10} @@ -26,7 +27,6 @@ GTEST_FILTER=* JS_FILTER= EXTENSION_CACHE_DIR="${ROOT_DIR}/.ccache/extension" -EXCEL_EXTENSION_CACHE_FILE="${EXTENSION_CACHE_DIR}/excel" JSON_EXTENSION_CACHE_FILE="${EXTENSION_CACHE_DIR}/json" cpp_lib: lib_tests @@ -49,7 +49,7 @@ check_format: set_environment: command -v emcc &> /dev/null && EXEC_ENVIRONMENT="" && echo '\033[1m=== Using native mode ===\033[0m' && echo 'Emscripten from' && which emcc || (EXEC_ENVIRONMENT=echo ${DOCKER_EXEC_ENVIRONMENT} && echo '\033[1m === Using docker environment === \033[0m') -build/data: build/duckdb_shell +build/data: ${ROOT_DIR}/scripts/generate_uni.sh ${ROOT_DIR}/scripts/generate_tpch_tbl.sh 0.01 ${ROOT_DIR}/scripts/generate_tpch_tbl.sh 0.1 @@ -224,9 +224,6 @@ wasm_caches: $(DUCKDB_SOURCES) mkdir -p ${EXTENSION_CACHE_DIR} chown -R $(id -u):$(id -g) ${EXTENSION_CACHE_DIR} mkdir -p ${CACHE_DIRS} -ifeq (${DUCKDB_EXCEL}, 1) - touch ${EXCEL_EXTENSION_CACHE_FILE} -endif ifeq (${DUCKDB_JSON}, 1) touch ${JSON_EXTENSION_CACHE_FILE} endif @@ -360,20 +357,22 @@ app: wasm wasmpack shell docs js_tests_release yarn workspace @duckdb/duckdb-wasm-app build:release build_loadable: - cp .github/config/extension_config_wasm.cmake submodules/duckdb/extension/extension_config.cmake - DUCKDB_WASM_LOADABLE_EXTENSIONS="signed" GEN=ninja ./scripts/wasm_build_lib.sh relsize eh - bash ./scripts/build_loadable.sh relsize eh + DUCKDB_PLATFORM=wasm_${TARGET} DUCKDB_WASM_LOADABLE_EXTENSIONS=1 GEN=ninja ./scripts/wasm_build_lib.sh relsize ${TARGET} -build_loadable_unsigned: - cp .github/config/extension_config_wasm.cmake submodules/duckdb/extension/extension_config.cmake - DUCKDB_WASM_LOADABLE_EXTENSIONS="unsigned" GEN=ninja ./scripts/wasm_build_lib.sh relsize eh - bash ./scripts/build_loadable.sh relsize eh +build_loadable_unsigned: build_loadable + # need to propagate the unsigned flag -serve_loadable: wasmpack shell docs +serve_loadable_base: wasmpack shell docs yarn workspace @duckdb/duckdb-wasm-app build:release - mkdir -p packages/duckdb-wasm-app/build/release/duckdb-wasm/${DUCKDB_HASH}/wasm_eh/ - cp loadable_extensions/relsize/eh/* packages/duckdb-wasm-app/build/release/duckdb-wasm/${DUCKDB_HASH}/wasm_eh/. - http-server packages/duckdb-wasm-app/build/release -o + cp -r build/extension_repository packages/duckdb-wasm-app/build/release/. + +.PHONY: serve_local +serve_local: build_loadable_unsigned serve_loadable_base + npx http-server packages/duckdb-wasm-app/build/release -o "#queries=v0,SET-custom_extension_repository%3D'http%3A%2F%2F127.0.0.1%3A8080%2Fextension_repository'~" -a 127.0.0.1 -p 8080 + +.PHONY: serve +serve: build_loadable serve_loadable_base + npx http-server packages/duckdb-wasm-app/build/release -o .PHONY: app_server app_server: @@ -411,9 +410,6 @@ examples: yarn_install # --------------------------------------------------------------------------- # Environment -build/duckdb_shell: - ${ROOT_DIR}/scripts/build_duckdb_shell.sh - # Generate the compile commands for the language server .PHONY: compile_commands compile_commands: @@ -427,17 +423,27 @@ compile_commands: .PHONY: clean clean: rm -rf build + rm -rf target cd packages/duckdb-wasm-shell && rm -rf node_modules rm -rf packages/duckdb-wasm-app/build + rm -rf submodules/duckdb/build + rm -rf packages/duckdb-wasm/dist build/docker_ci_image: command -v emcc &> /dev/null || docker compose build touch build/docker_ci_image +patch_duckdb: + (find patches/duckdb/* -type f -name '*.patch' -print0 | xargs -0 cat | patch -p1 --forward -d submodules/duckdb) || true + (find patches/arrow/* -type f -name '*.patch' -print0 | xargs -0 cat | patch -p1 --forward -d submodules/arrow) || true + +apply_patches: patch_duckdb + submodules: git submodule update --init --recursive touch submodules # Build infrastructure and packages required for development build/bootstrap: submodules yarn_install + mkdir -p build touch build/bootstrap diff --git a/actions/image/Dockerfile b/actions/image/Dockerfile index 86986a7c4..278707e94 100644 --- a/actions/image/Dockerfile +++ b/actions/image/Dockerfile @@ -7,7 +7,6 @@ RUN apt-get update -qq \ bison flex \ brotli rsync \ libpthread-stubs0-dev \ - libboost-all-dev \ chromium-browser \ wget gnupg ca-certificates procps libxss1 \ zip sqlite3 \ @@ -20,9 +19,10 @@ RUN apt-get update -qq \ && apt-get update \ && apt-get install -y google-chrome-stable \ && apt-get clean \ + && export CHROME_BIN=/usr/bin/google-chrome \ && rm -rf /var/lib/apt/lists/* /etc/apt/sources.list.d/google.list -ARG EMSDK_VERSION="3.1.24" +ARG EMSDK_VERSION="3.1.56" RUN mkdir -p /opt/emsdk \ && cd /opt/emsdk \ && curl -SL https://github.com/emscripten-core/emsdk/archive/${EMSDK_VERSION}.tar.gz | tar -xz --strip-components=1 \ @@ -47,8 +47,8 @@ RUN (id -g ${GID} &> /dev/null && id || groupadd -g ${GID} -o ${UNAME}) \ && (id -u ${UID} || useradd -m -g ${GID} -u ${UID} -s /bin/bash ${UNAME}) ENV NVM_DIR=/opt/nvm -ARG NVM_VERSION="v0.39.2" -ARG NODE_VERSION="v18.12.0" +ARG NVM_VERSION="v0.39.7" +ARG NODE_VERSION="v20.11.1" RUN mkdir -p /opt/nvm \ && ls -lisah /opt/nvm \ && curl https://raw.githubusercontent.com/nvm-sh/nvm/${NVM_VERSION}/install.sh | bash \ @@ -59,7 +59,7 @@ RUN mkdir -p /opt/nvm \ && npm install --global yarn \ && chown -R ${UID}:${GID} /opt/nvm -ARG RUST_VERSION="1.64.0" +ARG RUST_VERSION="1.77.0" RUN export RUSTUP_HOME=/opt/rust \ && export CARGO_HOME=/opt/rust \ && curl https://sh.rustup.rs -sSf | sh -s -- --default-toolchain ${RUST_VERSION} -y \ @@ -74,7 +74,6 @@ RUN source /opt/emsdk/emsdk_env.sh \ && echo "export EM_CONFIG=/opt/emsdk/.emscripten" >> /opt/env.sh \ && echo "export CARGO_HOME=/opt/rust" >> /opt/env.sh \ && echo "export RUSTUP_HOME=/opt/rust" >> /opt/env.sh \ - && echo "export BOOST_ARCHIVE=/opt/boost.tar.gz" >> /opt/env.sh \ && echo "source /opt/nvm/nvm.sh" >> /opt/env.sh \ && cat /opt/env.sh \ && printf '#!/bin/bash\nsource /opt/env.sh\nexec env "$@"\n' > /opt/entrypoint.sh \ diff --git a/duckdb.patch b/duckdb.patch deleted file mode 100644 index c9c799670..000000000 --- a/duckdb.patch +++ /dev/null @@ -1,219 +0,0 @@ -diff --git a/src/main/extension/extension_load.cpp b/src/main/extension/extension_load.cpp -index 80d24c2982..2c062a98ff 100644 ---- a/src/main/extension/extension_load.cpp -+++ b/src/main/extension/extension_load.cpp -@@ -109,6 +109,7 @@ bool ExtensionHelper::TryInitialLoad(DBConfig &config, FileSystem &fs, const str - filename = fs.JoinPath(local_path, extension_name + ".duckdb_extension"); - #endif - } -+#ifndef WASM_LOADABLE_EXTENSIONS - if (!fs.FileExists(filename)) { - string message; - bool exact_match = ExtensionHelper::CreateSuggestions(extension, message); -@@ -118,6 +119,180 @@ bool ExtensionHelper::TryInitialLoad(DBConfig &config, FileSystem &fs, const str - error = StringUtil::Format("Extension \"%s\" not found.\n%s", filename, message); - return false; - } -+#endif -+#ifdef WASM_LOADABLE_EXTENSIONS -+ auto basename = fs.ExtractBaseName(filename); -+ char *exe = NULL; -+ exe = (char *)EM_ASM_PTR( -+ { -+ // Next few lines should argubly in separate JavaScript-land function call -+ // TODO: move them out / have them configurable -+ -+var url =(UTF8ToString($0)); -+ if (typeof XMLHttpRequest === "undefined") { -+ const os = require('os'); -+ const path = require('path'); -+ const fs = require('fs'); -+ -+ var array = url.split("/"); -+ var l = array.length; -+ -+ var folder = path.join(os.homedir(), ".duckdb/extensions/" + array[l - 4] + "/" + array[l - 3] + "/" + array[l - 2] + "/"); -+ var filePath = path.join(folder, array[l - 1]); -+ -+ try { -+ if (!fs.existsSync(folder)) { -+ fs.mkdirSync(folder, { -+ recursive: true -+ }); -+ } -+ -+ if (!fs.existsSync(filePath)) { -+ const int32 = new Int32Array(new SharedArrayBuffer(8)); -+var Worker = require('node:worker_threads').Worker; -+ var worker = new Worker("const {Worker,isMainThread,parentPort,workerData,} = require('node:worker_threads');var times = 0;var SAB = 23;var Z = 0;async function ZZZ(e) {var x = await fetch(e);var res = await x.arrayBuffer();Atomics.store(SAB, 1, res.byteLength);Atomics.store(SAB, 0, 1);Atomics.notify(SAB, 1);Atomics.notify(SAB, 0);Z = res;};parentPort.on('message', function(event) {if (times == 0) {times++;SAB = event;} else if (times == 1) {times++;ZZZ(event);} else {const a = new Uint8Array(Z);const b = new Uint8Array(event.buffer);var K = Z.byteLength;for (var i = 0; i < K; i++) {b[i] = a[i];}Atomics.notify(event, 0);Atomics.store(SAB, 0, 2);Atomics.notify(SAB, 0);}});", { -+ eval: true -+ }); -+ var uInt8Array; -+ -+ int32[0] = 0; -+ int32[2] = 4; -+ worker.postMessage(int32); -+ -+ worker.postMessage(url); -+ Atomics.wait(int32, 0, 0); -+ -+ const int32_2 = new Int32Array(new SharedArrayBuffer(int32[1] + 3 - ((int32[1] + 3) % 4))); -+ worker.postMessage(int32_2); -+ -+ Atomics.wait(int32, 0, 1); -+ -+ var x = new Uint8Array(int32_2.buffer, 0, int32[1]); -+ uInt8Array = x; -+ worker.terminate(); -+ fs.writeFileSync(filePath, uInt8Array); -+ -+ } else { -+ uInt8Array = fs.readFileSync(filePath); -+ } -+ } catch (e) { -+ console.log("Error fetching module", e); -+ return 0; -+ } -+ } else { -+ const xhr = new XMLHttpRequest(); -+ xhr.open("GET", url, false); -+ xhr.responseType = "arraybuffer"; -+ xhr.send(null); -+ if (xhr.status != 200) -+ return 0; -+ uInt8Array = xhr.response; -+ } -+ -+ var valid = WebAssembly.validate(uInt8Array); -+ var len = uInt8Array.byteLength; -+ var fileOnWasmHeap = _malloc(len + 4); -+ -+ var properArray = new Uint8Array(uInt8Array); -+ -+ for (var iii = 0; iii < len; iii++) { -+ Module.HEAPU8[iii + fileOnWasmHeap + 4] = properArray[iii]; -+ } -+ var LEN123 = new Uint8Array(4); -+ LEN123[0] = len % 256; -+ len -= LEN123[0]; -+ len /= 256; -+ LEN123[1] = len % 256; -+ len -= LEN123[1]; -+ len /= 256; -+ LEN123[2] = len % 256; -+ len -= LEN123[2]; -+ len /= 256; -+ LEN123[3] = len % 256; -+ len -= LEN123[3]; -+ len /= 256; -+ Module.HEAPU8.set(LEN123, fileOnWasmHeap); -+ //FIXME: found how to expose those to the logger interface -+ //console.log(LEN123); -+ //console.log(properArray); -+ //console.log(new Uint8Array(Module.HEAPU8, fileOnWasmHeap, len+4)); -+ // console.log('Loading extension ', UTF8ToString($1)); -+ -+ // Here we add the uInt8Array to Emscripten's filesystem, for it to be found by dlopen -+ FS.writeFile(UTF8ToString($1), new Uint8Array(uInt8Array)); -+ return fileOnWasmHeap; -+ }, -+ filename.c_str(), basename.c_str()); -+ if (!exe) { -+ throw IOException("Extension %s is not available", filename); -+ } -+ -+ auto dopen_from = basename; -+ if (!config.options.allow_unsigned_extensions) { -+ // signature is the last 256 bytes of the file -+ -+ string signature; -+ signature.resize(256); -+ -+ D_ASSERT(exe); -+ uint64_t LEN = 0; -+ LEN *= 256; -+ LEN += ((uint8_t *)exe)[3]; -+ LEN *= 256; -+ LEN += ((uint8_t *)exe)[2]; -+ LEN *= 256; -+ LEN += ((uint8_t *)exe)[1]; -+ LEN *= 256; -+ LEN += ((uint8_t *)exe)[0]; -+ auto signature_offset = LEN - signature.size(); -+ -+ const idx_t maxLenChunks = 1024ULL * 1024ULL; -+ const idx_t numChunks = (signature_offset + maxLenChunks - 1) / maxLenChunks; -+ std::vector hash_chunks(numChunks); -+ std::vector splits(numChunks + 1); -+ -+ for (idx_t i = 0; i < numChunks; i++) { -+ splits[i] = maxLenChunks * i; -+ } -+ splits.back() = signature_offset; -+ -+ for (idx_t i = 0; i < numChunks; i++) { -+ string x; -+ x.resize(splits[i + 1] - splits[i]); -+ for (idx_t j = 0; j < x.size(); j++) { -+ x[j] = ((uint8_t *)exe)[j + 4 + splits[i]]; -+ } -+ ComputeSHA256String(x, &hash_chunks[i]); -+ } -+ -+ string hash_concatenation; -+ hash_concatenation.reserve(32 * numChunks); // 256 bits -> 32 bytes per chunk -+ -+ for (auto &hash_chunk : hash_chunks) { -+ hash_concatenation += hash_chunk; -+ } -+ -+ string two_level_hash; -+ ComputeSHA256String(hash_concatenation, &two_level_hash); -+ -+ for (idx_t j = 0; j < signature.size(); j++) { -+ signature[j] = ((uint8_t *)exe)[4 + signature_offset + j]; -+ } -+ bool any_valid = false; -+ for (auto &key : ExtensionHelper::GetPublicKeys()) { -+ if (duckdb_mbedtls::MbedTlsWrapper::IsValidSha256Signature(key, signature, two_level_hash)) { -+ any_valid = true; -+ break; -+ } -+ } -+ if (!any_valid) { -+ throw IOException(config.error_manager->FormatException(ErrorType::UNSIGNED_EXTENSION, filename)); -+ } -+ } -+ if (exe) { -+ free(exe); -+ } -+#else - if (!config.options.allow_unsigned_extensions) { - auto handle = fs.OpenFile(filename, FileFlags::FILE_FLAGS_READ); - -@@ -180,25 +355,6 @@ bool ExtensionHelper::TryInitialLoad(DBConfig &config, FileSystem &fs, const str - } - auto basename = fs.ExtractBaseName(filename); - --#ifdef WASM_LOADABLE_EXTENSIONS -- EM_ASM( -- { -- // Next few lines should argubly in separate JavaScript-land function call -- // TODO: move them out / have them configurable -- const xhr = new XMLHttpRequest(); -- xhr.open("GET", UTF8ToString($0), false); -- xhr.responseType = "arraybuffer"; -- xhr.send(null); -- var uInt8Array = xhr.response; -- WebAssembly.validate(uInt8Array); -- console.log('Loading extension ', UTF8ToString($1)); -- -- // Here we add the uInt8Array to Emscripten's filesystem, for it to be found by dlopen -- FS.writeFile(UTF8ToString($1), new Uint8Array(uInt8Array)); -- }, -- filename.c_str(), basename.c_str()); -- auto dopen_from = basename; --#else - auto dopen_from = filename; - #endif - diff --git a/examples/esbuild-browser/package.json b/examples/esbuild-browser/package.json index 590432dcc..4abe31a01 100644 --- a/examples/esbuild-browser/package.json +++ b/examples/esbuild-browser/package.json @@ -8,7 +8,7 @@ "@duckdb/duckdb-wasm": "file:../../packages/duckdb-wasm" }, "devDependencies": { - "esbuild": "^0.19.10", + "esbuild": "^0.20.2", "http-server": "^14.1.1", "serve": "^14.2.1", "typescript": "^5.3.3" diff --git a/examples/esbuild-node/package.json b/examples/esbuild-node/package.json index f59533bc3..8cb3785dc 100644 --- a/examples/esbuild-node/package.json +++ b/examples/esbuild-node/package.json @@ -8,7 +8,7 @@ "@duckdb/duckdb-wasm": "file:../../packages/duckdb-wasm" }, "devDependencies": { - "esbuild": "^0.19.10", + "esbuild": "^0.20.2", "typescript": "^5.3.3" }, "type": "module", diff --git a/examples/plain-html/index.html b/examples/plain-html/index.html new file mode 100644 index 000000000..6c95ea569 --- /dev/null +++ b/examples/plain-html/index.html @@ -0,0 +1,51 @@ + + + + + + Document + + + + + + diff --git a/extension_config_wasm.cmake b/extension_config_wasm.cmake new file mode 100644 index 000000000..5553281cf --- /dev/null +++ b/extension_config_wasm.cmake @@ -0,0 +1,14 @@ +################################################################################ +# DuckDB-Wasm extension base config +################################################################################ +# +duckdb_extension_load(json DONT_LINK) +duckdb_extension_load(parquet DONT_LINK) +duckdb_extension_load(autocomplete DONT_LINK) + +duckdb_extension_load(fts DONT_LINK) +duckdb_extension_load(icu DONT_LINK) +duckdb_extension_load(tpcds DONT_LINK) +duckdb_extension_load(tpch DONT_LINK) + +#duckdb_extension_load(httpfs DONT_LINK) diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 2143afcd2..2e24d4eb8 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -12,13 +12,9 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON) set(ignoreMe "${DUCKDB_WASM_VERSION}") option(DUCKDB_WASM_LOADABLE_EXTENSIONS "Build with loadable extensions" OFF) -option(DUCKDB_WASM_LOADABLE_EXTENSIONS_UNSIGNED "Build with loadable extensions" OFF) if(DEFINED ENV{DUCKDB_WASM_LOADABLE_EXTENSIONS}) set(DUCKDB_WASM_LOADABLE_EXTENSIONS ON) - if("$ENV{DUCKDB_WASM_LOADABLE_EXTENSIONS}" STREQUAL "unsigned") - set(DUCKDB_WASM_LOADABLE_EXTENSIONS_UNSIGNED ON) - endif() endif() @@ -30,10 +26,6 @@ else() set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DDISABLE_EXTENSION_LOAD=1") endif() -if(DUCKDB_WASM_LOADABLE_EXTENSIONS_UNSIGNED) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DWASM_LOADABLE_EXTENSIONS_UNSIGNED=1") -endif() - if(NOT EMSCRIPTEN) set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fno-omit-frame-pointer -fsanitize=address -fsanitize=undefined") @@ -141,7 +133,7 @@ if(EMSCRIPTEN) if(WITH_WASM_THREADS) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -sUSE_PTHREADS=1 -DWEBDB_THREADS=1") set(DUCKDB_CXX_FLAGS "${CMAKE_CXX_FLAGS} -sUSE_PTHREADS=1") - set(WASM_LINK_FLAGS "${WASM_LINK_FLAGS} -sUSE_PTHREADS=1 -sPTHREAD_POOL_SIZE=4") + set(WASM_LINK_FLAGS "${WASM_LINK_FLAGS} -sUSE_PTHREADS=1 -sPTHREAD_POOL_SIZE=4 -pthread") set(DUCKDB_PLATFORM "wasm_threads") else() set(CMAKE_CXX_FLAGS @@ -158,7 +150,7 @@ else() endif() if (DUCKDB_WASM_LOADABLE_EXTENSIONS) - set(WASM_LINK_FLAGS "${WASM_LINK_FLAGS} -s MAIN_MODULE=1 -s -s EXPORT_ALL=1 -s FILESYSTEM=1 -s ENVIRONMENT='web,node,worker' -s ALLOW_TABLE_GROWTH -lembind") + set(WASM_LINK_FLAGS "${WASM_LINK_FLAGS} -s MAIN_MODULE=1 -s FILESYSTEM=1 -s ENVIRONMENT='web,node,worker' -s ALLOW_TABLE_GROWTH -lembind") else() set(WASM_LINK_FLAGS "${WASM_LINK_FLAGS} -s FILESYSTEM=0 -s ENVIRONMENT='web,node,worker'") endif() @@ -176,7 +168,6 @@ set(CMAKE_BUILD_PARALLEL_LEVEL ${NPROCS}) set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules ${CMAKE_MODULE_PATH}) include("${CMAKE_SOURCE_DIR}/cmake/duckdb.cmake") -include("${CMAKE_SOURCE_DIR}/cmake/boost.cmake") include("${CMAKE_SOURCE_DIR}/cmake/arrow.cmake") include("${CMAKE_SOURCE_DIR}/cmake/benchmark.cmake") include("${CMAKE_SOURCE_DIR}/cmake/gflags.cmake") @@ -253,33 +244,22 @@ add_library( duckdb_web_parquet ${CMAKE_SOURCE_DIR}/src/extensions/parquet_extension.cc) -add_library( - duckdb_web_excel - ${CMAKE_SOURCE_DIR}/src/extensions/excel_extension.cc) - add_library( duckdb_web_json ${CMAKE_SOURCE_DIR}/src/extensions/json_extension.cc) set(EXTENSION_CACHE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../.ccache/extension") -set(EXCEL_EXTENSION_CACHE_FILE "${EXTENSION_CACHE_DIR}/excel") set(JSON_EXTENSION_CACHE_FILE "${EXTENSION_CACHE_DIR}/json") -set(DUCKDB_WEB_EXCEL "") -if(EXISTS "${EXCEL_EXTENSION_CACHE_FILE}") - set(DUCKDB_WEB_EXCEL "duckdb_web_excel") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DDUCKDB_EXCEL_EXTENSION") -endif() set(DUCKDB_WEB_JSON "") if(EXISTS "${JSON_EXTENSION_CACHE_FILE}") set(DUCKDB_WEB_JSON "duckdb_web_json") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DDUCKDB_JSON_EXTENSION") endif() -target_link_libraries(duckdb_web duckdb duckdb_web_fts duckdb_web_parquet ${DUCKDB_WEB_EXCEL} ${DUCKDB_WEB_JSON} arrow rapidjson ${THREAD_LIBS}) +target_link_libraries(duckdb_web duckdb duckdb_web_fts duckdb_web_parquet ${DUCKDB_WEB_JSON} arrow rapidjson ${THREAD_LIBS}) target_link_libraries(duckdb_web_fts duckdb duckdb_fts) target_link_libraries(duckdb_web_parquet duckdb duckdb_parquet) -target_link_libraries(duckdb_web_excel duckdb duckdb_excel) target_link_libraries(duckdb_web_json duckdb duckdb_json) # --------------------------------------------------------------------------- @@ -341,6 +321,7 @@ if(EMSCRIPTEN) _duckdb_web_prepared_send, \ _duckdb_web_query_fetch_results, \ _duckdb_web_query_run, \ + _duckdb_web_query_run_buffer, \ _duckdb_web_reset, \ _duckdb_web_tokenize, \ _duckdb_web_udf_scalar_create \ @@ -377,7 +358,7 @@ if(NOT EMSCRIPTEN) ${CMAKE_SOURCE_DIR}/test/webdb_test.cc ${CMAKE_SOURCE_DIR}/test/tester.cc) - set(TEST_LIBS duckdb_web duckdb_web_fts duckdb_web_parquet ${DUCKDB_WEB_EXCEL} ${DUCKDB_WEB_JSON} gtest gmock gflags ${THREAD_LIBS}) + set(TEST_LIBS duckdb_web duckdb_web_fts duckdb_web_parquet ${DUCKDB_WEB_JSON} gtest gmock gflags ${THREAD_LIBS}) add_executable(tester ${TEST_CC}) target_link_libraries(tester ${TEST_LIBS}) diff --git a/lib/cmake/boost.cmake b/lib/cmake/boost.cmake deleted file mode 100644 index d4202932f..000000000 --- a/lib/cmake/boost.cmake +++ /dev/null @@ -1,23 +0,0 @@ -set(BOOST_INSTALL_DIR "${CMAKE_BINARY_DIR}/third_party/boost/install") -set(BOOST_INCLUDE_DIR "${BOOST_INSTALL_DIR}/include") - -if(NOT EXISTS ${BOOST_INCLUDE_DIR}/boost/version.hpp) - file(REMOVE ${BOOST_INCLUDE_DIR}) - file(MAKE_DIRECTORY ${BOOST_INCLUDE_DIR}) - - find_path(Boost_INCLUDE_DIR - NAMES boost/version.hpp boost/config.hpp - HINTS /usr/include /usr/local/include - NO_CMAKE_FIND_ROOT_PATH) - - if (Boost_INCLUDE_DIR-NOTFOUND) - message(FATAL_ERROR "Couldn't find boost headers") - endif () - - message(STATUS "System Boost INCLUDE_DIR=${Boost_INCLUDE_DIR}") - message(STATUS "Install Boost INCLUDE_DIR=${BOOST_INCLUDE_DIR}") - execute_process(COMMAND cmake -E create_symlink - "${Boost_INCLUDE_DIR}/boost" - "${BOOST_INCLUDE_DIR}/boost" - ) -endif () diff --git a/lib/cmake/duckdb.cmake b/lib/cmake/duckdb.cmake index 46dd8939c..fcea7d7da 100644 --- a/lib/cmake/duckdb.cmake +++ b/lib/cmake/duckdb.cmake @@ -15,10 +15,15 @@ endif() set(DUCKDB_CXX_FLAGS "${DUCKDB_CXX_FLAGS} -Wno-unqualified-std-cast-call -DDUCKDB_DEBUG_NO_SAFETY -DDUCKDB_FROM_DUCKDB_WASM") message("DUCKDB_CXX_FLAGS=${DUCKDB_CXX_FLAGS}") -set(DUCKDB_EXTENSIONS "fts;excel;json") +set(DUCKDB_EXTENSIONS "fts;json") # Escape semicolons in DUCKDB_EXTENSIONS before passing to ExternalProject_Add string(REPLACE ";" "$" DUCKDB_EXTENSIONS_PACKED "${DUCKDB_EXTENSIONS}") +set(USE_WASM_THREADS FALSE) +if(DUCKDB_PLATFORM STREQUAL "wasm_threads") + set(USE_WASM_THREADS TRUE) +endif() + ExternalProject_Add( duckdb_ep SOURCE_DIR "${DUCKDB_CORE_DIR}" @@ -26,6 +31,7 @@ ExternalProject_Add( INSTALL_DIR "${CMAKE_BINARY_DIR}/third_party/duckdb/install" CMAKE_ARGS -G${CMAKE_GENERATOR} -DCMAKE_CXX_STANDARD=17 + -DLOCAL_EXTENSION_REPO="../../build/extension_repository" -DCMAKE_CXX_FLAGS=${DUCKDB_CXX_FLAGS} -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} @@ -38,6 +44,8 @@ ExternalProject_Add( -DBUILD_SHELL=FALSE -DBUILD_UNITTESTS=FALSE -DDISABLE_BUILTIN_EXTENSIONS=TRUE + -DUSE_WASM_THREADS=${USE_WASM_THREADS} + -DDUCKDB_EXPLICIT_PLATFORM=${DUCKDB_EXPLICIT_PLATFORM} BUILD_BYPRODUCTS /lib/libduckdb_re2.a /lib/libduckdb_static.a @@ -46,12 +54,12 @@ ExternalProject_Add( /lib/libduckdb_hyperloglog.a /lib/libduckdb_miniz.a /lib/libduckdb_mbedtls.a + /lib/libduckdb_yyjson.a /lib/libduckdb_pg_query.a /lib/libduckdb_utf8proc.a /lib/libduckdb_fastpforlib.a /lib/libparquet_extension.a /lib/libfts_extension.a - /lib/libexcel_extension.a /lib/libjson_extension.a) ExternalProject_Get_Property(duckdb_ep install_dir) @@ -78,6 +86,7 @@ target_link_libraries( INTERFACE ${install_dir}/lib/libduckdb_hyperloglog.a INTERFACE ${install_dir}/lib/libduckdb_miniz.a INTERFACE ${install_dir}/lib/libduckdb_mbedtls.a + INTERFACE ${install_dir}/lib/libduckdb_yyjson.a INTERFACE ${install_dir}/lib/libduckdb_pg_query.a INTERFACE ${install_dir}/lib/libduckdb_utf8proc.a INTERFACE ${install_dir}/lib/libduckdb_fastpforlib.a @@ -90,6 +99,7 @@ target_include_directories( INTERFACE ${DUCKDB_UTF8PROC_INCLUDE_DIR} INTERFACE ${DUCKDB_RE2_INCLUDE_DIR} INTERFACE ${DUCKDB_SOURCE_DIR}/third_party/parquet + INTERFACE ${DUCKDB_SOURCE_DIR}/third_party/yyjson INTERFACE ${DUCKDB_SOURCE_DIR}/third_party/snappy INTERFACE ${DUCKDB_SOURCE_DIR}/third_party/miniz INTERFACE ${DUCKDB_SOURCE_DIR}/third_party/thrift @@ -103,10 +113,6 @@ add_library(duckdb_parquet STATIC IMPORTED) set_property(TARGET duckdb_parquet PROPERTY IMPORTED_LOCATION ${install_dir}/lib/libparquet_extension.a) target_include_directories(duckdb_parquet INTERFACE ${DUCKDB_SOURCE_DIR}/extension/parquet/include) -add_library(duckdb_excel STATIC IMPORTED) -set_property(TARGET duckdb_excel PROPERTY IMPORTED_LOCATION ${install_dir}/lib/libexcel_extension.a) -target_include_directories(duckdb_excel INTERFACE ${DUCKDB_SOURCE_DIR}/extension/excel/include) - add_library(duckdb_json STATIC IMPORTED) set_property(TARGET duckdb_json PROPERTY IMPORTED_LOCATION ${install_dir}/lib/libjson_extension.a) target_include_directories(duckdb_json INTERFACE ${DUCKDB_SOURCE_DIR}/extension/json/include) @@ -114,5 +120,4 @@ target_include_directories(duckdb_json INTERFACE ${DUCKDB_SOURCE_DIR}/extension/ add_dependencies(duckdb duckdb_ep) add_dependencies(duckdb_fts duckdb_ep) add_dependencies(duckdb_parquet duckdb_ep) -add_dependencies(duckdb_excel duckdb_ep) add_dependencies(duckdb_json duckdb_ep) diff --git a/lib/include/duckdb/web/config.h b/lib/include/duckdb/web/config.h index feceecce3..c112cb390 100644 --- a/lib/include/duckdb/web/config.h +++ b/lib/include/duckdb/web/config.h @@ -65,11 +65,13 @@ struct DuckDBConfigOptions { std::string s3_access_key_id; std::string s3_secret_access_key; std::string s3_session_token; + bool reliable_head_requests; }; struct FileSystemConfig { /// Allow falling back to full HTTP reads if the server does not support range requests std::optional allow_full_http_reads = std::nullopt; + std::optional reliable_head_requests = std::nullopt; }; struct WebDBConfig { @@ -78,7 +80,7 @@ struct WebDBConfig { /// The access mode std::optional access_mode = std::nullopt; /// The thread count - uint32_t maximum_threads = 1; + uint32_t maximum_threads = (STATIC_WEBDB_FEATURES & (1 << WebDBFeature::THREADS)) ? 4 : 1; /// The query config QueryConfig query = { .cast_bigint_to_double = std::nullopt, @@ -87,7 +89,7 @@ struct WebDBConfig { .cast_decimal_to_double = std::nullopt, }; /// The filesystem - FileSystemConfig filesystem = {.allow_full_http_reads = std::nullopt}; + FileSystemConfig filesystem = {.allow_full_http_reads = std::nullopt, .reliable_head_requests = std::nullopt}; /// These options are fetched from DuckDB DuckDBConfigOptions duckdb_config_options = { @@ -96,8 +98,14 @@ struct WebDBConfig { .s3_access_key_id = "", .s3_secret_access_key = "", .s3_session_token = "", + .reliable_head_requests = true, }; + /// Whether to allow unsigned extensions + bool allow_unsigned_extensions = false; + + std::string custom_user_agent = ""; + /// Read from a document static WebDBConfig ReadFrom(std::string_view args_json); }; diff --git a/lib/include/duckdb/web/extensions/excel_extension.h b/lib/include/duckdb/web/extensions/excel_extension.h deleted file mode 100644 index e3ea88a80..000000000 --- a/lib/include/duckdb/web/extensions/excel_extension.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef INCLUDE_DUCKDB_WEB_EXTENSIONS_EXCEL_EXTENSION_H_ -#define INCLUDE_DUCKDB_WEB_EXTENSIONS_EXCEL_EXTENSION_H_ - -#include "duckdb/main/database.hpp" - -extern "C" void duckdb_web_excel_init(duckdb::DuckDB* db); - -#endif diff --git a/lib/include/duckdb/web/functions/table_function_relation.h b/lib/include/duckdb/web/functions/table_function_relation.h index 43656079c..8c0af4b71 100644 --- a/lib/include/duckdb/web/functions/table_function_relation.h +++ b/lib/include/duckdb/web/functions/table_function_relation.h @@ -7,8 +7,8 @@ namespace web { class TableFunctionRelation : public Relation { public: - TableFunctionRelation(const std::shared_ptr &context, string name, vector unnamed_parameters, - unordered_map named_parameters, + TableFunctionRelation(const duckdb::shared_ptr &context, string name, + vector unnamed_parameters, unordered_map named_parameters, shared_ptr input_relation_p = nullptr); string name; diff --git a/lib/include/duckdb/web/io/buffered_filesystem.h b/lib/include/duckdb/web/io/buffered_filesystem.h index 547fa7d78..4db7a76f4 100644 --- a/lib/include/duckdb/web/io/buffered_filesystem.h +++ b/lib/include/duckdb/web/io/buffered_filesystem.h @@ -6,6 +6,7 @@ #include "duckdb/common/constants.hpp" #include "duckdb/common/file_system.hpp" +#include "duckdb/common/optional_ptr.hpp" #include "duckdb/common/vector.hpp" #include "duckdb/web/io/file_page_buffer.h" #include "duckdb/web/utils/parallel.h" @@ -85,9 +86,8 @@ class BufferedFileSystem : public duckdb::FileSystem { public: /// Open a file - duckdb::unique_ptr OpenFile(const string &path, uint8_t flags, FileLockType lock, - FileCompressionType compression, - FileOpener *opener = nullptr) override; + duckdb::unique_ptr OpenFile(const string &path, FileOpenFlags flags, + optional_ptr opener = nullptr) override; /// Read exactly nr_bytes from the specified location in the file. Fails if nr_bytes could not be read. This is /// equivalent to calling SetFilePointer(location) followed by calling Read(). void Read(duckdb::FileHandle &handle, void *buffer, int64_t nr_bytes, duckdb::idx_t location) override; @@ -111,11 +111,15 @@ class BufferedFileSystem : public duckdb::FileSystem { void Truncate(duckdb::FileHandle &handle, int64_t new_size) override; /// Check if a directory exists - bool DirectoryExists(const string &directory) override { return filesystem_.DirectoryExists(directory); } + bool DirectoryExists(const string &directory, optional_ptr opener = nullptr) override { + return filesystem_.DirectoryExists(directory, opener); + } /// Create a directory if it does not exist - void CreateDirectory(const std::string &directory) override { return filesystem_.CreateDirectory(directory); } + void CreateDirectory(const std::string &directory, optional_ptr opener = nullptr) override { + return filesystem_.CreateDirectory(directory, opener); + } /// Recursively remove a directory and all files in it - void RemoveDirectory(const std::string &directory) override; + void RemoveDirectory(const std::string &directory, optional_ptr opener = nullptr) override; /// List files in a directory, invoking the callback method for each one with (filename, is_dir) bool ListFiles(const std::string &directory, const std::function &callback, FileOpener *opener = nullptr) override { @@ -123,13 +127,14 @@ class BufferedFileSystem : public duckdb::FileSystem { } /// Move a file from source path to the target, StorageManager relies on this being an atomic action for ACID /// properties - void MoveFile(const std::string &source, const std::string &target) override; + void MoveFile(const std::string &source, const std::string &target, + optional_ptr opener = nullptr) override; /// Check if a file exists - bool FileExists(const std::string &filename) override { - return filesystem_.FileExists(PatchFilenameOwned(filename)); + bool FileExists(const std::string &filename, optional_ptr opener = nullptr) override { + return filesystem_.FileExists(PatchFilenameOwned(filename), opener); } /// Remove a file from disk - void RemoveFile(const std::string &filename) override; + void RemoveFile(const std::string &filename, optional_ptr opener = nullptr) override; /// Runs a glob on the file system, returning a list of matching files vector Glob(const std::string &path, FileOpener *opener = nullptr) override { diff --git a/lib/include/duckdb/web/io/file_page_buffer.h b/lib/include/duckdb/web/io/file_page_buffer.h index ec65a3f17..752861cea 100644 --- a/lib/include/duckdb/web/io/file_page_buffer.h +++ b/lib/include/duckdb/web/io/file_page_buffer.h @@ -84,9 +84,7 @@ class FilePageBuffer { /// This latch ensures that reads and writes are blocked during truncation. SharedMutex file_latch = {}; /// The file flags - uint8_t file_flags = 0; - /// The file lock type - duckdb::FileLockType file_lock = duckdb::FileLockType::NO_LOCK; + duckdb::FileOpenFlags file_flags = 0; /// The file size uint64_t file_size = 0; /// The user references @@ -98,8 +96,8 @@ class FilePageBuffer { std::shared_ptr file_stats = nullptr; /// Constructor - BufferedFile(uint16_t file_id, std::string_view path, uint8_t flags, duckdb::FileLockType lock) - : file_id(file_id), path(path), file_flags(flags), file_lock(lock) {} + BufferedFile(uint16_t file_id, std::string_view path, duckdb::FileOpenFlags flags) + : file_id(file_id), path(path), file_flags(flags) {} /// Get the number of references auto GetReferenceCount() const { return num_users; } }; @@ -242,7 +240,7 @@ class FilePageBuffer { /// Append n bytes void Append(void* buffer, uint64_t n, UniqueFileGuard& file_guard); /// Reopen as writeable - void ReOpen(uint8_t flags, duckdb::FileLockType lock_type); + void ReOpen(duckdb::FileOpenFlags flags); public: /// Constructor @@ -356,8 +354,8 @@ class FilePageBuffer { void CollectFileStatistics(std::string_view path, std::shared_ptr collector); /// Open a file - std::unique_ptr OpenFile(std::string_view path, uint8_t flags, - duckdb::FileLockType lock_type = duckdb::FileLockType::NO_LOCK); + std::unique_ptr OpenFile(std::string_view path, FileOpenFlags flags, + optional_ptr opener = nullptr); /// Is buffered bool BuffersFile(std::string_view path); /// Flush file matching name to disk diff --git a/lib/include/duckdb/web/io/ifstream.h b/lib/include/duckdb/web/io/ifstream.h index ec97cfc3b..be037c71b 100644 --- a/lib/include/duckdb/web/io/ifstream.h +++ b/lib/include/duckdb/web/io/ifstream.h @@ -60,7 +60,7 @@ class InputFileStreamBuffer : public std::streambuf { /// Constructor InputFileStreamBuffer(std::shared_ptr file_page_buffer, std::string_view path) : file_page_buffer_(std::move(file_page_buffer)), - file_(file_page_buffer_->OpenFile(path, duckdb::FileFlags::FILE_FLAGS_READ, duckdb::FileLockType::NO_LOCK)), + file_(file_page_buffer_->OpenFile(path, duckdb::FileFlags::FILE_FLAGS_READ)), buffer_(file_->FixPage(0, false)), data_end_(file_->GetSize()), next_page_id_(1) { @@ -70,8 +70,7 @@ class InputFileStreamBuffer : public std::streambuf { /// Constructor InputFileStreamBuffer(const InputFileStreamBuffer& other) : file_page_buffer_(other.file_page_buffer_), - file_(other.file_page_buffer_->OpenFile(other.file_->GetPath(), duckdb::FileFlags::FILE_FLAGS_READ, - duckdb::FileLockType::NO_LOCK)), + file_(other.file_page_buffer_->OpenFile(other.file_->GetPath(), duckdb::FileFlags::FILE_FLAGS_READ)), buffer_(other.file_->FixPage(other.next_page_id_ - 1, false)), data_end_(other.data_end_), next_page_id_(other.next_page_id_) { diff --git a/lib/include/duckdb/web/io/memory_filesystem.h b/lib/include/duckdb/web/io/memory_filesystem.h index 366822e81..b2d6f6041 100644 --- a/lib/include/duckdb/web/io/memory_filesystem.h +++ b/lib/include/duckdb/web/io/memory_filesystem.h @@ -71,9 +71,8 @@ class MemoryFileSystem : public duckdb::FileSystem { arrow::Status RegisterFileBuffer(std::string file_name, std::vector file_buffer); /// Open a file - duckdb::unique_ptr OpenFile(const string &path, uint8_t flags, FileLockType lock, - FileCompressionType compression, - FileOpener *opener = nullptr) override; + duckdb::unique_ptr OpenFile(const string &path, FileOpenFlags flags, + optional_ptr opener = nullptr) override; /// Read exactly nr_bytes from the specified location in the file. Fails if nr_bytes could not be read. This is /// equivalent to calling SetFilePointer(location) followed by calling Read(). void Read(duckdb::FileHandle &handle, void *buffer, int64_t nr_bytes, duckdb::idx_t location) override; @@ -95,21 +94,22 @@ class MemoryFileSystem : public duckdb::FileSystem { void Truncate(duckdb::FileHandle &handle, int64_t new_size) override; /// Check if a directory exists - bool DirectoryExists(const std::string &directory) override; + bool DirectoryExists(const std::string &directory, optional_ptr opener = nullptr) override; /// Create a directory if it does not exist - void CreateDirectory(const std::string &directory) override; + void CreateDirectory(const std::string &directory, optional_ptr opener = nullptr) override; /// Recursively remove a directory and all files in it - void RemoveDirectory(const std::string &directory) override; + void RemoveDirectory(const std::string &directory, optional_ptr opener = nullptr) override; /// List files in a directory, invoking the callback method for each one with (filename, is_dir) bool ListFiles(const std::string &directory, const std::function &callback, FileOpener *opener = nullptr) override; /// Move a file from source path to the target, StorageManager relies on this being an atomic action for ACID /// properties - void MoveFile(const std::string &source, const std::string &target) override; + void MoveFile(const std::string &source, const std::string &target, + optional_ptr opener = nullptr) override; /// Check if a file exists - bool FileExists(const std::string &filename) override; + bool FileExists(const std::string &filename, optional_ptr opener = nullptr) override; /// Remove a file from disk - void RemoveFile(const std::string &filename) override; + void RemoveFile(const std::string &filename, optional_ptr opener = nullptr) override; /// Sync a file handle to disk void FileSync(duckdb::FileHandle &handle) override; diff --git a/lib/include/duckdb/web/io/web_filesystem.h b/lib/include/duckdb/web/io/web_filesystem.h index 8f8940c9a..71a1ef780 100644 --- a/lib/include/duckdb/web/io/web_filesystem.h +++ b/lib/include/duckdb/web/io/web_filesystem.h @@ -221,9 +221,8 @@ class WebFileSystem : public duckdb::FileSystem { public: /// Open a file - duckdb::unique_ptr OpenFile(const string &url, uint8_t flags, FileLockType lock, - FileCompressionType compression, - FileOpener *opener = nullptr) override; + duckdb::unique_ptr OpenFile(const string &url, FileOpenFlags flags, + optional_ptr opener = nullptr) override; /// Read exactly nr_bytes from the specified location in the file. Fails if nr_bytes could not be read. This is /// equivalent to calling SetFilePointer(location) followed by calling Read(). void Read(duckdb::FileHandle &handle, void *buffer, int64_t nr_bytes, duckdb::idx_t location) override; @@ -245,21 +244,22 @@ class WebFileSystem : public duckdb::FileSystem { void Truncate(duckdb::FileHandle &handle, int64_t new_size) override; /// Check if a directory exists - bool DirectoryExists(const std::string &directory) override; + bool DirectoryExists(const std::string &directory, optional_ptr opener = nullptr) override; /// Create a directory if it does not exist - void CreateDirectory(const std::string &directory) override; + void CreateDirectory(const std::string &directory, optional_ptr opener = nullptr) override; /// Recursively remove a directory and all files in it - void RemoveDirectory(const std::string &directory) override; + void RemoveDirectory(const std::string &directory, optional_ptr opener = nullptr) override; /// List files in a directory, invoking the callback method for each one with (filename, is_dir) bool ListFiles(const std::string &directory, const std::function &callback, FileOpener *opener = nullptr) override; /// Move a file from source path to the target, StorageManager relies on this being an atomic action for ACID /// properties - void MoveFile(const std::string &source, const std::string &target) override; + void MoveFile(const std::string &source, const std::string &target, + optional_ptr opener = nullptr) override; /// Check if a file exists - bool FileExists(const std::string &filename) override; + bool FileExists(const std::string &filename, optional_ptr opener = nullptr) override; /// Remove a file from disk - void RemoveFile(const std::string &filename) override; + void RemoveFile(const std::string &filename, optional_ptr opener = nullptr) override; // /// Path separator for the current file system // std::string PathSeparator() override; // /// Join two paths together diff --git a/lib/include/duckdb/web/webdb.h b/lib/include/duckdb/web/webdb.h index a50e7e1cb..82428e9e9 100644 --- a/lib/include/duckdb/web/webdb.h +++ b/lib/include/duckdb/web/webdb.h @@ -40,18 +40,18 @@ class WebDB { duckdb::Connection connection_; /// The current pending query result (if any) - std::unique_ptr current_pending_query_result_ = nullptr; + duckdb::unique_ptr current_pending_query_result_ = nullptr; /// The current pending query was canceled bool current_pending_query_was_canceled_ = false; /// The current query result (if any) - std::unique_ptr current_query_result_ = nullptr; + duckdb::unique_ptr current_query_result_ = nullptr; /// The current arrow schema (if any) std::shared_ptr current_schema_ = nullptr; /// The current patched arrow schema (if any) std::shared_ptr current_schema_patched_ = nullptr; /// The currently active prepared statements - std::unordered_map> prepared_statements_ = {}; + std::unordered_map> prepared_statements_ = {}; /// The next prepared statement id size_t next_prepared_statement_id_ = 0; /// The current arrow ipc input stream @@ -61,12 +61,12 @@ class WebDB { // Fully materialize a given result set and return it as an Arrow Buffer arrow::Result> MaterializeQueryResult( - std::unique_ptr result); + duckdb::unique_ptr result); // Setup streaming of a result set and return the schema as an Arrow Buffer - arrow::Result> StreamQueryResult(std::unique_ptr result); + arrow::Result> StreamQueryResult(duckdb::unique_ptr result); // Execute a prepared statement by setting up all arguments and returning the query result - arrow::Result> ExecutePreparedStatement(size_t statement_id, - std::string_view args_json); + arrow::Result> ExecutePreparedStatement(size_t statement_id, + std::string_view args_json); // Call scalar UDF function arrow::Status CallScalarUDFFunction(UDFFunctionDeclaration& function, DataChunk& chunk, ExpressionState& state, Vector& vec); @@ -125,9 +125,9 @@ class WebDB { /// The buffered filesystem io::BufferedFileSystem* buffered_filesystem_; /// The (shared) database - std::shared_ptr database_; + duckdb::shared_ptr database_; /// The connections - std::unordered_map> connections_; + std::unordered_map> connections_; /// The file statistics (if any) std::shared_ptr file_stats_ = {}; @@ -135,13 +135,13 @@ class WebDB { std::unordered_map> pinned_web_files_ = {}; // Register custom extension options in DuckDB for options that are handled in DuckDB-WASM instead of DuckDB - void RegisterCustomExtensionOptions(std::shared_ptr database); + void RegisterCustomExtensionOptions(duckdb::shared_ptr database); public: /// Constructor WebDB(WebTag); /// Constructor - WebDB(NativeTag, std::unique_ptr fs = duckdb::FileSystem::CreateLocal()); + WebDB(NativeTag, duckdb::unique_ptr fs = duckdb::FileSystem::CreateLocal()); /// Destructor ~WebDB(); @@ -201,7 +201,7 @@ class WebDB { /// Get the static webdb instance static arrow::Result> Get(); /// Create the default webdb database - static std::unique_ptr Create(); + static duckdb::unique_ptr Create(); }; } // namespace web diff --git a/lib/src/config.cc b/lib/src/config.cc index 229413e52..ea984f26b 100644 --- a/lib/src/config.cc +++ b/lib/src/config.cc @@ -38,7 +38,7 @@ uint32_t ResolveFeatureFlags() { WebDBConfig WebDBConfig::ReadFrom(std::string_view args_json) { auto config = WebDBConfig{.path = ":memory:", .access_mode = std::nullopt, - .maximum_threads = 1, + .maximum_threads = (STATIC_WEBDB_FEATURES & (1 << WebDBFeature::THREADS)) ? 4 : 1, .query = QueryConfig{ .cast_bigint_to_double = std::nullopt, @@ -49,14 +49,18 @@ WebDBConfig WebDBConfig::ReadFrom(std::string_view args_json) { .filesystem = FileSystemConfig{ .allow_full_http_reads = std::nullopt, + .reliable_head_requests = std::nullopt, }, - .duckdb_config_options = DuckDBConfigOptions{ - .s3_region = "", - .s3_endpoint = "", - .s3_access_key_id = "", - .s3_secret_access_key = "", - .s3_session_token = "", - }}; + .duckdb_config_options = + DuckDBConfigOptions{ + .s3_region = "", + .s3_endpoint = "", + .s3_access_key_id = "", + .s3_secret_access_key = "", + .s3_session_token = "", + }, + .allow_unsigned_extensions = false, + .custom_user_agent = ""}; rapidjson::Document doc; rapidjson::ParseResult ok = doc.Parse(args_json.begin(), args_json.size()); if (ok) { @@ -69,6 +73,9 @@ WebDBConfig WebDBConfig::ReadFrom(std::string_view args_json) { if (doc.HasMember("maximumThreads") && doc["maximumThreads"].IsNumber()) { config.maximum_threads = doc["maximumThreads"].GetInt(); } + if (doc.HasMember("allowUnsignedExtensions") && doc["allowUnsignedExtensions"].IsBool()) { + config.allow_unsigned_extensions = doc["allowUnsignedExtensions"].GetBool(); + } if (doc.HasMember("query") && doc["query"].IsObject()) { auto q = doc["query"].GetObject(); if (q.HasMember("queryPollingInterval") && q["queryPollingInterval"].IsNumber()) { @@ -92,6 +99,12 @@ WebDBConfig WebDBConfig::ReadFrom(std::string_view args_json) { if (fs.HasMember("allowFullHTTPReads") && fs["allowFullHTTPReads"].IsBool()) { config.filesystem.allow_full_http_reads = fs["allowFullHTTPReads"].GetBool(); } + if (fs.HasMember("reliableHeadRequests") && fs["reliableHeadRequests"].IsBool()) { + config.filesystem.reliable_head_requests = fs["reliableHeadRequests"].GetBool(); + } + } + if (doc.HasMember("customUserAgent") && doc["customUserAgent"].IsString()) { + config.custom_user_agent = doc["customUserAgent"].GetString(); } } if (!config.query.cast_bigint_to_double.has_value()) { diff --git a/lib/src/extensions/excel_extension.cc b/lib/src/extensions/excel_extension.cc deleted file mode 100644 index ce63c65d1..000000000 --- a/lib/src/extensions/excel_extension.cc +++ /dev/null @@ -1,5 +0,0 @@ -#include "duckdb/web/extensions/excel_extension.h" - -#include "excel_extension.hpp" - -extern "C" void duckdb_web_excel_init(duckdb::DuckDB* db) { db->LoadExtension(); } diff --git a/lib/src/functions/table_function_relation.cc b/lib/src/functions/table_function_relation.cc index 66d143c46..b60093977 100644 --- a/lib/src/functions/table_function_relation.cc +++ b/lib/src/functions/table_function_relation.cc @@ -14,7 +14,7 @@ namespace duckdb { namespace web { -TableFunctionRelation::TableFunctionRelation(const std::shared_ptr &context, string name, +TableFunctionRelation::TableFunctionRelation(const duckdb::shared_ptr &context, string name, vector unnamed_parameters, unordered_map named_parameters, shared_ptr input_relation_p) diff --git a/lib/src/io/arrow_ifstream.cc b/lib/src/io/arrow_ifstream.cc index c15bf33b4..352094530 100644 --- a/lib/src/io/arrow_ifstream.cc +++ b/lib/src/io/arrow_ifstream.cc @@ -14,7 +14,7 @@ namespace io { /// Constructor ArrowInputFileStream::ArrowInputFileStream(std::shared_ptr file_page_buffer, std::string_view path) : file_page_buffer_(std::move(file_page_buffer)), - file_(file_page_buffer_->OpenFile(path, duckdb::FileFlags::FILE_FLAGS_READ, duckdb::FileLockType::NO_LOCK)) {} + file_(file_page_buffer_->OpenFile(path, duckdb::FileFlags::FILE_FLAGS_READ)) {} /// Destructor ArrowInputFileStream::~ArrowInputFileStream() { diff --git a/lib/src/io/buffered_filesystem.cc b/lib/src/io/buffered_filesystem.cc index ef11480d5..3b0b0fa48 100644 --- a/lib/src/io/buffered_filesystem.cc +++ b/lib/src/io/buffered_filesystem.cc @@ -81,21 +81,23 @@ void BufferedFileSystem::DropFiles() { } /// Open a file -duckdb::unique_ptr BufferedFileSystem::OpenFile(const string &raw_path, uint8_t flags, - FileLockType lock, FileCompressionType compression, - FileOpener *opener) { +duckdb::unique_ptr BufferedFileSystem::OpenFile(const string &raw_path, duckdb::FileOpenFlags flags, + optional_ptr opener) { auto path = PatchFilenameOwned(raw_path); std::unique_lock fs_guard{directory_mutex_}; // Bypass the buffering? auto iter = file_configs_.find(path); - if ((flags & duckdb::FileFlags::FILE_FLAGS_DIRECT_IO) != 0 || - (iter != file_configs_.end() && iter->second.force_direct_io)) { - return filesystem_.OpenFile(path, flags, lock, compression); + if (flags.DirectIO() || (iter != file_configs_.end() && iter->second.force_direct_io)) { + return filesystem_.OpenFile(path, flags, opener); } // Open in page buffer - auto file = file_page_buffer_->OpenFile(std::string_view{path}, flags, lock); // XXX compression? + auto file = file_page_buffer_->OpenFile(std::string_view{path}, flags, opener); // XXX compression? + if (!file) { + return nullptr; + } + return std::make_unique(*this, std::move(file)); } @@ -222,20 +224,21 @@ void BufferedFileSystem::Truncate(duckdb::FileHandle &handle, int64_t new_size) return buffered_hdl.GetFile()->Truncate(new_size); } /// Recursively remove a directory and all files in it -void BufferedFileSystem::RemoveDirectory(const std::string &directory) { - return filesystem_.RemoveDirectory(directory); +void BufferedFileSystem::RemoveDirectory(const std::string &directory, optional_ptr opener) { + return filesystem_.RemoveDirectory(directory, opener); } /// Move a file from source path to the target, StorageManager relies on this being an atomic action for ACID /// properties -void BufferedFileSystem::MoveFile(const std::string &raw_source, const std::string &raw_target) { +void BufferedFileSystem::MoveFile(const std::string &raw_source, const std::string &raw_target, + optional_ptr opener) { auto source = PatchFilenameOwned(raw_source); auto target = PatchFilenameOwned(raw_target); // XXX Invalidate buffer manager! - return filesystem_.MoveFile(source, target); + return filesystem_.MoveFile(source, target, opener); } /// Remove a file from disk -void BufferedFileSystem::RemoveFile(const std::string &raw_filename) { +void BufferedFileSystem::RemoveFile(const std::string &raw_filename, optional_ptr opener) { auto filename = PatchFilenameOwned(raw_filename); // XXX Invalidate buffer manager! return filesystem_.RemoveFile(filename); diff --git a/lib/src/io/file_page_buffer.cc b/lib/src/io/file_page_buffer.cc index c27373371..bfe466b26 100644 --- a/lib/src/io/file_page_buffer.cc +++ b/lib/src/io/file_page_buffer.cc @@ -4,6 +4,7 @@ #include #include #include +#include #include #include #include @@ -65,7 +66,7 @@ FilePageBuffer::BufferRef::BufferRef(FileRef& file, SharedFileGuard&& file_guard /// Mark a buffer ref as dirty void FilePageBuffer::BufferRef::MarkAsDirty() { - if ((file_->file_->file_flags & duckdb::FileFlags::FILE_FLAGS_WRITE) == 0) { + if (!file_->file_->file_flags.OpenForWriting()) { throw std::runtime_error("File is not opened in write mode"); } frame_->is_dirty = true; @@ -133,7 +134,7 @@ bool FilePageBuffer::FileRef::Release(bool keep_dangling) { // ONLY allows for FILE_FLAGS_READ? // Leave buffered pages dangling and cleanup later. - if (keep_dangling && file_->file_flags == duckdb::FileFlags::FILE_FLAGS_READ) { + if (keep_dangling && file_->file_flags.OpenForReading()) { --file_->num_users; return false; } @@ -212,8 +213,8 @@ FilePageBuffer::FilePageBuffer(std::shared_ptr filesystem, u /// Destructor FilePageBuffer::~FilePageBuffer() { FlushFiles(); } -std::unique_ptr FilePageBuffer::OpenFile(std::string_view path, uint8_t flags, - duckdb::FileLockType lock_type) { +std::unique_ptr FilePageBuffer::OpenFile(std::string_view path, duckdb::FileOpenFlags flags, + optional_ptr opener) { DEBUG_TRACE(); auto dir_guard = Lock(); @@ -223,21 +224,23 @@ std::unique_ptr FilePageBuffer::OpenFile(std::string_vi // Is locked exclusively? // We only allow one file ref with active WRITE_LOCK. // Otherwise we wouldn't know when to release the WRITE_LOCK. - if (file->file_lock == duckdb::FileLockType::WRITE_LOCK) { + if (file->file_flags.Lock() == duckdb::FileLockType::WRITE_LOCK) { std::string path_buf{path}; throw duckdb::IOException("File %s is already locked exclusively", path_buf.c_str()); } // User requested truncation of existing file? - if (flags == duckdb::FileFlags::FILE_FLAGS_FILE_CREATE_NEW) { + if (flags.GetFlagsInternal() == idx_t(1 << 4)) { + // FIXME/review + // condition on flags.OverwriteExistingFile() triggers in test std::string path_buf{path}; throw duckdb::IOException( "File %s is already opened and cannot be truncated with FILE_FLAGS_FILE_CREATE_NEW", path_buf.c_str()); } // Check if the user wants to write to the file - bool wants_writeable = (flags & duckdb::FileFlags::FILE_FLAGS_WRITE) != 0; - bool is_writeable = (file->file_flags & duckdb::FileFlags::FILE_FLAGS_WRITE) != 0; + bool wants_writeable = flags.OpenForWriting(); + bool is_writeable = file->file_flags.OpenForWriting(); if (wants_writeable) { // Only opened readable before? @@ -245,14 +248,14 @@ std::unique_ptr FilePageBuffer::OpenFile(std::string_vi // Reopen as writeable auto ref = std::make_unique(*this, *files.at(it->second->file_id)); dir_guard.unlock(); - ref->ReOpen(flags, lock_type); + ref->ReOpen(flags); return ref; } else { // Conflicting APPEND? // Either a file is always appending or not. - bool wants_append = (flags & duckdb::FileFlags::FILE_FLAGS_APPEND) != 0; - bool is_append = (file->file_flags & duckdb::FileFlags::FILE_FLAGS_APPEND) != 0; + bool wants_append = flags.OpenForAppending(); + bool is_append = file->file_flags.OpenForAppending(); if (wants_append && !is_append) { std::string path_buf{path}; throw duckdb::IOException("File %s is already opened without APPEND", path_buf.c_str()); @@ -261,6 +264,13 @@ std::unique_ptr FilePageBuffer::OpenFile(std::string_vi } return std::make_unique(*this, *files.at(it->second->file_id)); } + + std::string path_buf{path}; + auto X = filesystem->OpenFile(path_buf, flags); + if (!X) { + return nullptr; + } + // Allocate file id uint16_t file_id; if (!free_file_ids.empty()) { @@ -277,9 +287,9 @@ std::unique_ptr FilePageBuffer::OpenFile(std::string_vi } // Create file - auto file_ptr = std::make_unique(file_id, path, flags, lock_type); + auto file_ptr = std::make_unique(file_id, path, flags); auto& file = *file_ptr; - file.handle = filesystem->OpenFile(file.path.c_str(), flags); + file.handle = std::move(X); assert(file.handle != nullptr); files_by_name.insert({file.path, file_ptr.get()}); files.insert({file_id, std::move(file_ptr)}); @@ -538,13 +548,13 @@ uint64_t FilePageBuffer::FileRef::Write(void* in, uint64_t bytes, duckdb::idx_t auto file_guard = Lock(Shared); // Is not opened in WRITE mode? - if ((file_->file_flags & duckdb::FileFlags::FILE_FLAGS_WRITE) == 0) { + if (!file_->file_flags.OpenForWriting()) { throw std::runtime_error("File is not opened in write mode"); } // Append to file? // Otherwise a write will never write past the end! - if ((file_->file_flags & duckdb::FileFlags::FILE_FLAGS_APPEND) != 0 || (offset == file_->file_size)) { + if ((!file_->file_flags.OpenForAppending()) || (offset == file_->file_size)) { file_guard.unlock(); auto file_guard = Lock(Exclusive); Append(in, bytes, file_guard); @@ -579,7 +589,7 @@ void FilePageBuffer::FileRef::Append(void* buffer, uint64_t bytes, UniqueFileGua DEBUG_TRACE(); // Is not opened in WRITE mode? - if ((file_->file_flags & duckdb::FileFlags::FILE_FLAGS_WRITE) == 0) { + if (!file_->file_flags.OpenForWriting()) { throw std::runtime_error("file is not opened in write mode"); } @@ -622,14 +632,13 @@ void FilePageBuffer::FileRef::Append(void* buffer, uint64_t bytes, UniqueFileGua } /// Reopen a file -void FilePageBuffer::FileRef::ReOpen(uint8_t flags, duckdb::FileLockType lock_type) { +void FilePageBuffer::FileRef::ReOpen(FileOpenFlags flags) { DEBUG_TRACE(); auto file_guard = Lock(Exclusive); // Open the file with the new flags first - auto new_handle = buffer_.filesystem->OpenFile(file_->path, flags, lock_type); + auto new_handle = buffer_.filesystem->OpenFile(file_->path, flags); // Swap the file handles std::swap(new_handle, file_->handle); - file_->file_lock = lock_type; } /// Buffers a file at a path. @@ -747,7 +756,7 @@ void FilePageBuffer::FileRef::Truncate(uint64_t new_size) { auto file_lock = Lock(Exclusive); // Is not opened in WRITE mode? - if ((file_->file_flags & duckdb::FileFlags::FILE_FLAGS_WRITE) == 0) { + if (!file_->file_flags.OpenForWriting()) { throw std::runtime_error("file is not opened in write mode"); } diff --git a/lib/src/io/memory_filesystem.cc b/lib/src/io/memory_filesystem.cc index 0abd0f8ca..1c6f14332 100644 --- a/lib/src/io/memory_filesystem.cc +++ b/lib/src/io/memory_filesystem.cc @@ -46,15 +46,15 @@ arrow::Status MemoryFileSystem::RegisterFileBuffer(std::string name, std::vector } /// Open a file -duckdb::unique_ptr MemoryFileSystem::OpenFile(const string &path, uint8_t flags, FileLockType lock, - FileCompressionType compression, FileOpener *opener) { +duckdb::unique_ptr MemoryFileSystem::OpenFile(const string &path, duckdb::FileOpenFlags flags, + optional_ptr opener) { // Resolve the file buffer auto file_iter = file_paths.find(path); if (file_iter == file_paths.end()) throw new std::logic_error{"File is not registered"}; auto &file_buffer = *file_iter->second; // Can the buffer be locked exclusively? - if (lock == duckdb::FileLockType::WRITE_LOCK && !file_buffer.handles.empty()) { + if (flags.Lock() == duckdb::FileLockType::WRITE_LOCK && !file_buffer.handles.empty()) { throw new std::logic_error{"Cannot lock file exclusively"}; } @@ -125,11 +125,11 @@ void MemoryFileSystem::Truncate(duckdb::FileHandle &raw_handle, int64_t new_size } /// Check if a directory exists -bool MemoryFileSystem::DirectoryExists(const std::string &directory) { return true; } +bool MemoryFileSystem::DirectoryExists(const std::string &directory, optional_ptr opener) { return true; } /// Create a directory if it does not exist -void MemoryFileSystem::CreateDirectory(const std::string &directory) {} +void MemoryFileSystem::CreateDirectory(const std::string &directory, optional_ptr opener) {} /// Recursively remove a directory and all files in it -void MemoryFileSystem::RemoveDirectory(const std::string &directory) {} +void MemoryFileSystem::RemoveDirectory(const std::string &directory, optional_ptr opener) {} /// List files in a directory, invoking the callback method for each one with (filename, is_dir) bool MemoryFileSystem::ListFiles(const std::string &directory, @@ -146,7 +146,7 @@ bool MemoryFileSystem::ListFiles(const std::string &directory, /// Move a file from source path to the target, StorageManager relies on this being an atomic action for ACID /// properties -void MemoryFileSystem::MoveFile(const std::string &source, const std::string &target) { +void MemoryFileSystem::MoveFile(const std::string &source, const std::string &target, optional_ptr opener) { auto file_paths_iter = file_paths.find(source); if (file_paths_iter == file_paths.end()) throw new std::logic_error{"File does not exist"}; auto file_id = file_paths_iter->second->file_id; @@ -162,13 +162,13 @@ void MemoryFileSystem::MoveFile(const std::string &source, const std::string &ta } /// Check if a file exists -bool MemoryFileSystem::FileExists(const std::string &filename) { +bool MemoryFileSystem::FileExists(const std::string &filename, optional_ptr opener) { auto file_paths_iter = file_paths.find(filename); return file_paths_iter != file_paths.end(); } /// Remove a file from disk -void MemoryFileSystem::RemoveFile(const std::string &filename) { +void MemoryFileSystem::RemoveFile(const std::string &filename, optional_ptr opener) { auto file_paths_iter = file_paths.find(filename); if (file_paths_iter == file_paths.end()) throw new std::logic_error{"File does not exist"}; if (!file_paths_iter->second->handles.empty()) throw new std::logic_error{"Cannot remove a file with open handles"}; diff --git a/lib/src/io/web_filesystem.cc b/lib/src/io/web_filesystem.cc index f9c9b3096..e46f7f14e 100644 --- a/lib/src/io/web_filesystem.cc +++ b/lib/src/io/web_filesystem.cc @@ -319,6 +319,13 @@ rapidjson::Value WebFileSystem::WebFile::WriteInfo(rapidjson::Document &doc) con filesystem_.config_->filesystem.allow_full_http_reads.value_or(true)) { value.AddMember("allowFullHttpReads", true, allocator); } + + if ((data_protocol_ == DataProtocol::HTTP || data_protocol_ == DataProtocol::S3)) { + if (filesystem_.config_->duckdb_config_options.reliable_head_requests) + value.AddMember("reliableHeadRequests", true, allocator); + else + value.AddMember("reliableHeadRequests", false, allocator); + } value.AddMember("collectStatistics", filesystem_.file_statistics_->TracksFile(file_name_), doc.GetAllocator()); if (data_protocol_ == DataProtocol::S3) { @@ -493,6 +500,11 @@ rapidjson::Value WebFileSystem::WriteGlobalFileInfo(rapidjson::Document &doc, ui if (config_->filesystem.allow_full_http_reads.value_or(true)) { value.AddMember("allowFullHttpReads", true, allocator); } + if (config_->filesystem.reliable_head_requests.value_or(true)) { + value.AddMember("reliableHeadRequests", true, allocator); + } else { + value.AddMember("reliableHeadRequests", false, allocator); + } value.AddMember("s3Config", writeS3Config(config_->duckdb_config_options, allocator), allocator); @@ -585,8 +597,8 @@ void WebFileSystem::IncrementCacheEpoch() { } /// Open a file -duckdb::unique_ptr WebFileSystem::OpenFile(const string &url, uint8_t flags, FileLockType lock, - FileCompressionType compression, FileOpener *opener) { +duckdb::unique_ptr WebFileSystem::OpenFile(const string &url, duckdb::FileOpenFlags flags, + optional_ptr opener) { DEBUG_TRACE(); std::unique_lock fs_guard{fs_mutex_}; @@ -619,7 +631,7 @@ duckdb::unique_ptr WebFileSystem::OpenFile(const string &url // Try to open the file (if necessary) switch (file->data_protocol_) { case DataProtocol::BUFFER: - if ((flags & duckdb::FileFlags::FILE_FLAGS_FILE_CREATE_NEW) != 0) { + if (flags.OverwriteExistingFile()) { file->data_buffer_->Resize(0); file->file_size_ = 0; } @@ -633,8 +645,11 @@ duckdb::unique_ptr WebFileSystem::OpenFile(const string &url case DataProtocol::S3: try { // Open the file - auto *opened = duckdb_web_fs_file_open(file->file_id_, flags); + auto *opened = duckdb_web_fs_file_open(file->file_id_, flags.GetFlagsInternal()); if (opened == nullptr) { + if (flags.ReturnNullIfNotExists()) { + return nullptr; + } std::string msg = std::string{"Failed to open file: "} + file->file_name_; throw std::runtime_error(msg); } @@ -648,7 +663,7 @@ duckdb::unique_ptr WebFileSystem::OpenFile(const string &url // 3: The file is a native file that was not found, in this case a fallback occurs to an empty buffer if (buffer_ptr) { if ((file->data_protocol_ == DataProtocol::S3 || file->data_protocol_ == DataProtocol::HTTP) && - (flags & duckdb::FileFlags::FILE_FLAGS_WRITE)) { + flags.OpenForWriting()) { file->buffered_http_file_ = true; file->buffered_http_config_options_ = config_->duckdb_config_options; } @@ -660,7 +675,7 @@ duckdb::unique_ptr WebFileSystem::OpenFile(const string &url } // Truncate file? - if ((flags & duckdb::FileFlags::FILE_FLAGS_FILE_CREATE_NEW) != 0) { + if (flags.OverwriteExistingFile()) { file_guard.unlock(); Truncate(*handle, 0); file_guard.lock(); @@ -935,15 +950,15 @@ void WebFileSystem::Truncate(duckdb::FileHandle &handle, int64_t new_size) { InvalidateReadAheads(file.file_id_, file_guard); } /// Check if a directory exists -bool WebFileSystem::DirectoryExists(const std::string &directory) { +bool WebFileSystem::DirectoryExists(const std::string &directory, optional_ptr opener) { return duckdb_web_fs_directory_exists(directory.c_str(), directory.size()); } /// Create a directory if it does not exist -void WebFileSystem::CreateDirectory(const std::string &directory) { +void WebFileSystem::CreateDirectory(const std::string &directory, optional_ptr opener) { duckdb_web_fs_directory_create(directory.c_str(), directory.size()); } /// Recursively remove a directory and all files in it -void WebFileSystem::RemoveDirectory(const std::string &directory) { +void WebFileSystem::RemoveDirectory(const std::string &directory, optional_ptr opener) { return duckdb_web_fs_directory_remove(directory.c_str(), directory.size()); } /// List files in a directory, invoking the callback method for each one with (filename, is_dir) @@ -957,7 +972,7 @@ bool WebFileSystem::ListFiles(const std::string &directory, } /// Move a file from source path to the target, StorageManager relies on this being an atomic action for ACID /// properties -void WebFileSystem::MoveFile(const std::string &source, const std::string &target) { +void WebFileSystem::MoveFile(const std::string &source, const std::string &target, optional_ptr opener) { std::unique_lock fs_guard{fs_mutex_}; if (auto iter = files_by_url_.find(source); iter != files_by_url_.end()) { auto file = std::move(iter->second); @@ -974,13 +989,13 @@ void WebFileSystem::MoveFile(const std::string &source, const std::string &targe duckdb_web_fs_file_move(source.c_str(), source.size(), target.c_str(), target.size()); } /// Check if a file exists -bool WebFileSystem::FileExists(const std::string &filename) { +bool WebFileSystem::FileExists(const std::string &filename, optional_ptr opener) { auto iter = files_by_name_.find(filename); if (iter != files_by_name_.end()) return true; return duckdb_web_fs_file_exists(filename.c_str(), filename.size()); } /// Remove a file from disk -void WebFileSystem::RemoveFile(const std::string &filename) {} +void WebFileSystem::RemoveFile(const std::string &filename, optional_ptr opener) {} /// Sync a file handle to disk void WebFileSystem::FileSync(duckdb::FileHandle &handle) { @@ -1057,6 +1072,10 @@ rapidjson::Value WebFileSystem::writeS3Config(DuckDBConfigOptions &extension_opt static_cast(extension_options.s3_session_token.size())}; s3Config.AddMember("sessionToken", s3_session_token, allocator); + rapidjson::Value reliable_head_requests{rapidjson::kNullType}; + reliable_head_requests = rapidjson::Value{extension_options.reliable_head_requests}; + s3Config.AddMember("reliable_head_requests", s3_session_token, allocator); + return s3Config; } } // namespace io diff --git a/lib/src/webdb.cc b/lib/src/webdb.cc index 096db4bc3..0161443aa 100644 --- a/lib/src/webdb.cc +++ b/lib/src/webdb.cc @@ -45,7 +45,6 @@ #include "duckdb/web/config.h" #include "duckdb/web/csv_insert_options.h" #include "duckdb/web/environment.h" -#include "duckdb/web/extensions/excel_extension.h" #include "duckdb/web/extensions/fts_extension.h" #include "duckdb/web/extensions/json_extension.h" #include "duckdb/web/extensions/parquet_extension.h" @@ -74,17 +73,17 @@ namespace web { static constexpr int64_t DEFAULT_QUERY_POLLING_INTERVAL = 100; /// Create the default webdb database -std::unique_ptr WebDB::Create() { +duckdb::unique_ptr WebDB::Create() { if constexpr (ENVIRONMENT == Environment::WEB) { - return std::make_unique(WEB); + return duckdb::make_uniq(WEB); } else { auto fs = duckdb::FileSystem::CreateLocal(); - return std::make_unique(NATIVE, std::move(fs)); + return duckdb::make_uniq(NATIVE, std::move(fs)); } } /// Get the static webdb instance arrow::Result> WebDB::Get() { - static std::unique_ptr db = nullptr; + static duckdb::unique_ptr db = nullptr; if (db == nullptr) { db = Create(); } @@ -98,7 +97,7 @@ WebDB::Connection::Connection(WebDB& webdb) WebDB::Connection::~Connection() = default; arrow::Result> WebDB::Connection::MaterializeQueryResult( - std::unique_ptr result) { + duckdb::unique_ptr result) { current_query_result_.reset(); current_schema_.reset(); current_schema_patched_.reset(); @@ -133,7 +132,7 @@ arrow::Result> WebDB::Connection::MaterializeQuer } arrow::Result> WebDB::Connection::StreamQueryResult( - std::unique_ptr result) { + duckdb::unique_ptr result) { current_query_result_ = std::move(result); current_schema_.reset(); current_schema_patched_.reset(); @@ -198,8 +197,10 @@ arrow::Result> WebDB::Connection::PollPendingQuer auto polling_interval = webdb_.config_->query.query_polling_interval.value_or(DEFAULT_QUERY_POLLING_INTERVAL); do { switch (current_pending_query_result_->ExecuteTask()) { + case PendingExecutionResult::EXECUTION_FINISHED: case PendingExecutionResult::RESULT_READY: return StreamQueryResult(current_pending_query_result_->Execute()); + case PendingExecutionResult::BLOCKED: case PendingExecutionResult::NO_TASKS_AVAILABLE: return nullptr; case PendingExecutionResult::RESULT_NOT_READY: @@ -230,7 +231,7 @@ bool WebDB::Connection::CancelPendingQuery() { arrow::Result> WebDB::Connection::FetchQueryResults() { try { // Fetch data if a query is active - std::unique_ptr chunk; + duckdb::unique_ptr chunk; if (current_query_result_ == nullptr) { return nullptr; } @@ -300,7 +301,7 @@ arrow::Result WebDB::Connection::CreatePreparedStatement(std::string_vie } } -arrow::Result> WebDB::Connection::ExecutePreparedStatement( +arrow::Result> WebDB::Connection::ExecutePreparedStatement( size_t statement_id, std::string_view args_json) { try { auto stmt = prepared_statements_.find(statement_id); @@ -318,7 +319,8 @@ arrow::Result> WebDB::Connection::ExecutePr if (v.IsLosslessDouble()) values.emplace_back(v.GetDouble()); else if (v.IsString()) - values.emplace_back(v.GetString()); + // Use GetStringLenght otherwise null bytes will be counted as terminators + values.emplace_back(string_t(v.GetString(), v.GetStringLength())); else if (v.IsNull()) values.emplace_back(nullptr); else if (v.IsBool()) @@ -363,7 +365,7 @@ arrow::Status WebDB::Connection::CreateScalarFunction(std::string_view def_json) // Read the function definiton rapidjson::Document def_doc; def_doc.Parse(def_json.begin(), def_json.size()); - auto def = std::make_shared(); + auto def = duckdb::make_shared_ptr(); ARROW_RETURN_NOT_OK(def->ReadFrom(def_doc)); // Read return type @@ -481,7 +483,7 @@ arrow::Status WebDB::Connection::CallScalarUDFFunction(UDFFunctionDeclaration& f } else { auto res_buf = reinterpret_cast(static_cast(res_arr[0])); - auto shared_buffer = std::make_shared(std::unique_ptr{res_buf}); + auto shared_buffer = duckdb::make_shared_ptr(std::unique_ptr{res_buf}); out.SetAuxiliary(shared_buffer); duckdb::FlatVector::SetData(out, (data_ptr_t)res_buf); } @@ -596,8 +598,8 @@ arrow::Status WebDB::Connection::InsertCSVFromPath(std::string_view path, std::s named_params.insert({"auto_detect", Value::BOOLEAN(options.auto_detect.value_or(true))}); /// Execute the csv scan - auto func = std::make_shared(connection_.context, "read_csv", std::move(unnamed_params), - named_params); + auto func = duckdb::make_shared_ptr(connection_.context, "read_csv", + std::move(unnamed_params), named_params); /// Create or insert if (options.create_new) { @@ -626,7 +628,7 @@ arrow::Status WebDB::Connection::InsertJSONFromPath(std::string_view path, std:: if (options.table_name.empty()) return arrow::Status::Invalid("missing 'name' option"); // Create the input file stream - auto ifs = std::make_unique(webdb_.file_page_buffer_, path); + auto ifs = duckdb::make_uniq(webdb_.file_page_buffer_, path); // Do we need to run the analyzer? json::TableType table_type; if (!options.table_shape || options.table_shape == json::JSONTableShape::UNRECOGNIZED || @@ -695,6 +697,11 @@ void WebDB::RegisterCustomExtensionOptions(shared_ptr database) webfs->Config()->duckdb_config_options.s3_endpoint = StringValue::Get(parameter); webfs->IncrementCacheEpoch(); }; + auto callback_reliable_head_requests = [](ClientContext& context, SetScope scope, Value& parameter) { + auto webfs = io::WebFileSystem::Get(); + webfs->Config()->duckdb_config_options.reliable_head_requests = BooleanValue::Get(parameter); + webfs->IncrementCacheEpoch(); + }; config.AddExtensionOption("s3_region", "S3 Region", LogicalType::VARCHAR, Value(), callback_s3_region); config.AddExtensionOption("s3_access_key_id", "S3 Access Key ID", LogicalType::VARCHAR, Value(), @@ -705,6 +712,8 @@ void WebDB::RegisterCustomExtensionOptions(shared_ptr database) callback_s3_session_token); config.AddExtensionOption("s3_endpoint", "S3 Endpoint (default s3.amazonaws.com)", LogicalType::VARCHAR, Value(), callback_s3_endpoint); + config.AddExtensionOption("reliable_head_requests", "Set whether HEAD requests returns reliable content-length", + LogicalType::BOOLEAN, Value(true), callback_reliable_head_requests); webfs->IncrementCacheEpoch(); } @@ -729,7 +738,7 @@ WebDB::WebDB(WebTag) } /// Constructor -WebDB::WebDB(NativeTag, std::unique_ptr fs) +WebDB::WebDB(NativeTag, duckdb::unique_ptr fs) : config_(std::make_shared()), file_page_buffer_(std::make_shared(std::move(fs))), buffered_filesystem_(nullptr), @@ -774,7 +783,7 @@ std::string_view WebDB::GetVersion() { return database_->LibraryVersion(); } /// Create a session WebDB::Connection* WebDB::Connect() { - auto conn = std::make_unique(*this); + auto conn = duckdb::make_uniq(*this); auto conn_ptr = conn.get(); connections_.insert({conn_ptr, std::move(conn)}); return conn_ptr; @@ -800,31 +809,28 @@ arrow::Status WebDB::Open(std::string_view args_json) { assert(config_ != nullptr); *config_ = WebDBConfig::ReadFrom(args_json); bool in_memory = config_->path == ":memory:" || config_->path == ""; - AccessMode access_mode = in_memory ? AccessMode::UNDEFINED : AccessMode::READ_ONLY; + AccessMode access_mode = in_memory ? AccessMode::AUTOMATIC : AccessMode::READ_ONLY; if (config_->access_mode.has_value()) { access_mode = static_cast(config_->access_mode.value()); } try { // Setup new database - auto buffered_fs = buffered_filesystem_ ? std::make_unique(*buffered_filesystem_) - : std::make_unique(file_page_buffer_); + auto buffered_fs = buffered_filesystem_ ? duckdb::make_uniq(*buffered_filesystem_) + : duckdb::make_uniq(file_page_buffer_); auto buffered_fs_ptr = buffered_fs.get(); duckdb::DBConfig db_config; db_config.file_system = std::move(buffered_fs); -#ifdef WASM_LOADABLE_EXTENSIONS_UNSIGNED - db_config.options.allow_unsigned_extensions = true; -#endif + db_config.options.allow_unsigned_extensions = config_->allow_unsigned_extensions; db_config.options.maximum_threads = config_->maximum_threads; db_config.options.use_temporary_directory = false; db_config.options.access_mode = access_mode; - auto db = std::make_shared(config_->path, &db_config); + db_config.options.duckdb_api = "wasm"; + db_config.options.custom_user_agent = config_->custom_user_agent; + auto db = make_shared_ptr(config_->path, &db_config); #ifndef WASM_LOADABLE_EXTENSIONS duckdb_web_parquet_init(db.get()); duckdb_web_fts_init(db.get()); -#if defined(DUCKDB_EXCEL_EXTENSION) - duckdb_web_excel_init(db.get()); -#endif #if defined(DUCKDB_JSON_EXTENSION) duckdb_web_json_init(db.get()); #endif diff --git a/lib/src/webdb_api.cc b/lib/src/webdb_api.cc index f084c8c82..6244df6bb 100644 --- a/lib/src/webdb_api.cc +++ b/lib/src/webdb_api.cc @@ -187,6 +187,15 @@ void duckdb_web_query_run(WASMResponse* packed, ConnectionHdl connHdl, const cha auto r = c->RunQuery(script); WASMResponseBuffer::Get().Store(*packed, std::move(r)); } + +/// Run a query (as a buffer) +void duckdb_web_query_run_buffer(WASMResponse* packed, ConnectionHdl connHdl, const uint8_t* buffer, + size_t buffer_length) { + auto c = reinterpret_cast(connHdl); + std::string_view S(reinterpret_cast(buffer), buffer_length); + auto r = c->RunQuery(S); + WASMResponseBuffer::Get().Store(*packed, std::move(r)); +} /// Start a pending query void duckdb_web_pending_query_start(WASMResponse* packed, ConnectionHdl connHdl, const char* script) { auto c = reinterpret_cast(connHdl); diff --git a/lib/test/all_types_test.cc b/lib/test/all_types_test.cc index 5855a85fa..d6b1a7041 100644 --- a/lib/test/all_types_test.cc +++ b/lib/test/all_types_test.cc @@ -246,7 +246,7 @@ vector UNSUPPORTED_TYPES = { "date_array", "timestamp_array", "timestamptz_array", // Currently does not work - "uuid"}; + "uuid", "varint"}; TEST(AllTypesTest, FullRangeTypes) { auto db = std::make_shared(NATIVE); diff --git a/packages/benchmarks/package.json b/packages/benchmarks/package.json index ad55cbc1f..85e113745 100644 --- a/packages/benchmarks/package.json +++ b/packages/benchmarks/package.json @@ -5,25 +5,25 @@ "private": true, "dependencies": { "@duckdb/duckdb-wasm": "file:../duckdb-wasm", - "apache-arrow": "^14.0.1", + "apache-arrow": "^17.0.0", "apache-arrow-3": "npm:apache-arrow@^3.0.0", "arquero": "^5.4.0", "buffalo-bench": "^2.0.0", "kleur": "^4.1.5", "lodash": "^4.17.21", "lovefield-ts": "^0.7.0", - "sql.js": "^1.9.0", + "sql.js": "^1.10.2", "web-worker": "^1.2.0" }, "devDependencies": { "@types/lodash": "^4.14.202", "@types/sql.js": "^1.4.9", - "@typescript-eslint/eslint-plugin": "^6.18.0", - "@typescript-eslint/parser": "^6.18.0", + "@typescript-eslint/eslint-plugin": "^6.21.0", + "@typescript-eslint/parser": "^6.21.0", "assert": "^2.1.0", "buffalo-bench": "^2.0.0", - "eslint": "^8.56.0", - "eslint-plugin-react": "^7.33.2", + "eslint": "^8.57.0", + "eslint-plugin-react": "^7.34.0", "ts-loader": "^9.5.1", "typescript": "^5.3.3" }, diff --git a/packages/duckdb-wasm-app/package.json b/packages/duckdb-wasm-app/package.json index c58b0e03f..77480af20 100644 --- a/packages/duckdb-wasm-app/package.json +++ b/packages/duckdb-wasm-app/package.json @@ -20,11 +20,11 @@ "dependencies": { "@duckdb/duckdb-wasm": "file:../duckdb-wasm", "@duckdb/duckdb-wasm-shell": "file:../duckdb-wasm-shell", - "apache-arrow": "^14.0.1", - "bootstrap": "^5.3.2", - "classnames": "^2.3.2", - "framer-motion": "^10.16.1", - "immutable": "^4.3.4", + "apache-arrow": "^17.0.0", + "bootstrap": "^5.3.3", + "classnames": "^2.5.1", + "framer-motion": "^11.0.3", + "immutable": "^4.3.6", "rc-scrollbars": "^1.1.6", "react": "^18.2.0", "react-bootstrap": "^2.9.2", @@ -32,7 +32,7 @@ "react-dnd-html5-backend": "^16.0.1", "react-dom": "^18.2.0", "react-popper-tooltip": "^4.4.2", - "react-router-dom": "^6.21.2", + "react-router-dom": "^6.26.1", "react-virtualized": "9.22.5", "xterm": "^5.3.0", "xterm-addon-fit": "^0.8.0", @@ -42,35 +42,35 @@ }, "devDependencies": { "@types/fontfaceobserver": "^2.1.3", - "@types/node": "^20.10.7", + "@types/node": "^20.12.7", "@types/react-dom": "^18.2.17", "@types/react-router-dom": "^5.3.3", "@types/react-virtualized": "^9.21.29", - "copy-webpack-plugin": "^11.0.0", - "css-loader": "^6.8.1", - "eslint": "^8.56.0", + "copy-webpack-plugin": "^12.0.2", + "css-loader": "^6.10.0", + "eslint": "^8.57.0", "eslint-plugin-jasmine": "^4.1.3", - "eslint-plugin-react": "^7.33.2", + "eslint-plugin-react": "^7.34.0", "file-loader": "^6.2.0", "html-webpack-plugin": "^5.6.0", - "jasmine-core": "^5.1.1", + "jasmine-core": "^5.1.2", "jasmine-spec-reporter": "^7.0.0", "karma": "^6.4.2", "karma-chrome-launcher": "^3.2.0", - "karma-firefox-launcher": "^2.1.2", + "karma-firefox-launcher": "^2.1.3", "karma-jasmine": "^5.1.0", "karma-spec-reporter": "^0.0.36", "karma-webpack": "^5.0.0", - "mini-css-extract-plugin": "^2.7.6", - "source-map-loader": "^4.0.2", - "style-loader": "^3.3.3", + "mini-css-extract-plugin": "^2.8.0", + "source-map-loader": "^5.0.0", + "style-loader": "^3.3.4", "ts-loader": "^9.5.1", "typescript": "^5.3.3", "typescript-plugin-css-modules": "^5.0.2", - "webpack": "^5.89.0", + "webpack": "^5.90.3", "webpack-bundle-analyzer": "^4.10.1", "webpack-cli": "^5.1.4", - "webpack-dev-server": "^4.15.1", + "webpack-dev-server": "^5.0.4", "webpackbar": "^6.0.0" }, "type": "module" diff --git a/packages/duckdb-wasm-app/static/index.html b/packages/duckdb-wasm-app/static/index.html index 3229a0dc9..11f0ae3a5 100644 --- a/packages/duckdb-wasm-app/static/index.html +++ b/packages/duckdb-wasm-app/static/index.html @@ -7,6 +7,7 @@ + diff --git a/packages/duckdb-wasm-shell/crate/Cargo.toml b/packages/duckdb-wasm-shell/crate/Cargo.toml index 7fd1b7fa0..5e81297f4 100644 --- a/packages/duckdb-wasm-shell/crate/Cargo.toml +++ b/packages/duckdb-wasm-shell/crate/Cargo.toml @@ -39,7 +39,7 @@ wasm-bindgen = { version = "0.2.74", features = ["serde-serialize"] } wasm-bindgen-futures = "0.4.24" chrono = "0.4.19" js-sys = "0.3.51" -arrow = { version = "13.0.0", features = ["csv", "ipc"] } +arrow = { version = "52.0.0", features = ["csv", "ipc"] } lazy_static = "1.4.0" encode_unicode = "0.3.6" unicode-width = "0.1.8" diff --git a/packages/duckdb-wasm-shell/crate/src/arrow_printer.rs b/packages/duckdb-wasm-shell/crate/src/arrow_printer.rs index ba0f4ef72..ecbcb5646 100644 --- a/packages/duckdb-wasm-shell/crate/src/arrow_printer.rs +++ b/packages/duckdb-wasm-shell/crate/src/arrow_printer.rs @@ -57,7 +57,7 @@ fn get_column_alignment(column: &arrow::array::ArrayRef) -> comfy::CellAlignment | DataType::Float16 | DataType::Float32 | DataType::Float64 - | DataType::Decimal(_, _) => comfy::CellAlignment::Right, + | DataType::Decimal128(_, _) => comfy::CellAlignment::Right, _ => comfy::CellAlignment::Left, } } diff --git a/packages/duckdb-wasm-shell/crate/src/arrow_reader.rs b/packages/duckdb-wasm-shell/crate/src/arrow_reader.rs index 5a105699f..7b488dd3c 100644 --- a/packages/duckdb-wasm-shell/crate/src/arrow_reader.rs +++ b/packages/duckdb-wasm-shell/crate/src/arrow_reader.rs @@ -23,6 +23,7 @@ use arrow::datatypes::SchemaRef; use arrow::error::ArrowError; use arrow::record_batch::RecordBatch; use std::sync::Arc; +use std::collections::HashMap; const CONTINUATION_MARKER: [u8; 4] = [0xff; 4]; @@ -47,6 +48,7 @@ impl<'buf> Reader<'buf> { if available < n { Err(arrow::error::ArrowError::IoError( "insufficient bytes available".to_string(), + std::io::Error::new(std::io::ErrorKind::Other,"") )) } else { let result = &self.buffer[self.position..(self.position + n)]; @@ -65,7 +67,7 @@ pub struct ArrowStreamReader { /// Optional dictionaries for each schema field. /// /// Dictionaries may be appended to in the streaming format. - dictionaries_by_field: Vec>, + dictionaries_by_field: HashMap, /// An indicator of whether the stream is complete. /// /// This value is set to `true` the first time the reader's `next()` returns `None`. @@ -95,16 +97,16 @@ impl ArrowStreamReader { let meta_buffer = reader.next(meta_len as usize)?; let message = arrow::ipc::root_as_message(meta_buffer).map_err(|err| { - ArrowError::IoError(format!("Unable to get root as message: {:?}", err)) + ArrowError::IoError(format!("Unable to get root as message: {:?}", err),std::io::Error::new(std::io::ErrorKind::Other,"")) })?; // message header is a Schema, so read it let ipc_schema: arrow::ipc::Schema = message.header_as_schema().ok_or_else(|| { - ArrowError::IoError("Unable to read IPC message as schema".to_string()) + ArrowError::IoError("Unable to read IPC message as schema".to_string(),std::io::Error::new(std::io::ErrorKind::Other,"")) })?; let schema = arrow::ipc::convert::fb_to_schema(ipc_schema); // Create an array of optional dictionary value arrays, one per field. - let dictionaries_by_field = vec![None; schema.fields().len()]; + let dictionaries_by_field = HashMap::new(); Ok(Self { schema: Arc::new(schema), @@ -157,39 +159,45 @@ impl ArrowStreamReader { let meta_buffer = reader.next(meta_len as usize)?; let message = arrow::ipc::root_as_message(meta_buffer).map_err(|err| { - ArrowError::IoError(format!("Unable to get root as message: {:?}", err)) + ArrowError::IoError(format!("Unable to get root as message: {:?}", err),std::io::Error::new(std::io::ErrorKind::Other,"")) })?; match message.header_type() { arrow::ipc::MessageHeader::Schema => Err(ArrowError::IoError( "Not expecting a schema when messages are read".to_string(), - )), + std::io::Error::new(std::io::ErrorKind::Other,""))), arrow::ipc::MessageHeader::RecordBatch => { let batch = message.header_as_record_batch().ok_or_else(|| { - ArrowError::IoError("Unable to read IPC message as record batch".to_string()) + ArrowError::IoError("Unable to read IPC message as record batch".to_string(),std::io::Error::new(std::io::ErrorKind::Other,"")) })?; + let metadata = arrow::ipc::gen::Schema::MetadataVersion(1); let buf = reader.next(message.bodyLength() as usize)?; + let buf1 = arrow::buffer::Buffer::from_slice_ref(buf); arrow::ipc::reader::read_record_batch( - &buf, + &buf1, batch, self.schema(), &self.dictionaries_by_field, None, + &metadata ) .map(Some) } arrow::ipc::MessageHeader::DictionaryBatch => { let batch = message.header_as_dictionary_batch().ok_or_else(|| { ArrowError::IoError( - "Unable to read IPC message as dictionary batch".to_string(), + "Unable to read IPC message as dictionary batch".to_string(),std::io::Error::new(std::io::ErrorKind::Other,"") ) })?; let buf = reader.next(message.bodyLength() as usize)?; + let buf1 = arrow::buffer::Buffer::from_slice_ref(buf); + let metadata = arrow::ipc::gen::Schema::MetadataVersion(1); arrow::ipc::reader::read_dictionary( - &buf, + &buf1, batch, &self.schema, &mut self.dictionaries_by_field, + &metadata )?; // read the next message until we encounter a RecordBatch @@ -199,7 +207,7 @@ impl ArrowStreamReader { t => Err(ArrowError::IoError(format!( "Reading types other than record batches not yet supported, unable to read {:?} ", t - ))), + ), std::io::Error::new(std::io::ErrorKind::Other,""))), } } } diff --git a/packages/duckdb-wasm-shell/crate/src/duckdb/web_file.rs b/packages/duckdb-wasm-shell/crate/src/duckdb/web_file.rs index f51bb2c68..6211293f5 100644 --- a/packages/duckdb-wasm-shell/crate/src/duckdb/web_file.rs +++ b/packages/duckdb-wasm-shell/crate/src/duckdb/web_file.rs @@ -22,6 +22,8 @@ pub struct WebFile { pub data_url: Option, #[serde(rename = "dataNativeFd")] pub data_native_fd: Option, + #[serde(rename = "reliableHeadRequests")] + pub reliable_head_requests: Option, #[serde(rename = "allowFullHttpReads")] pub allow_full_http_reads: Option, #[serde(rename = "collectStatistics")] diff --git a/packages/duckdb-wasm-shell/crate/src/shell.rs b/packages/duckdb-wasm-shell/crate/src/shell.rs index 8939acae7..35349b98d 100644 --- a/packages/duckdb-wasm-shell/crate/src/shell.rs +++ b/packages/duckdb-wasm-shell/crate/src/shell.rs @@ -184,17 +184,23 @@ impl Shell { s.focus(); }); - for entry in &(*past_queries().lock().unwrap()) { - Shell::with_mut(|s| { - s.write(&format!( - "{bold}{green}", - bold = vt100::MODE_BOLD, - green = vt100::COLOR_FG_BRIGHT_YELLOW - )); - s.write(entry); - s.write(&format!("{normal}", normal = vt100::MODES_OFF)); - }); - Self::on_sql(entry.to_string()).await; + let q = past_queries().lock().unwrap(); + + for entry in &(*q) { + let entry_str = entry.to_string(); + + Shell::with_mut(|s| { + s.input + .insert_text(&entry_str); + s.input.flush(&s.terminal); + }); + Shell::highlight_input_async().await; + + let input = Shell::with_mut(|s| { + s.input_clock += 1; + s.input.collect() + }); + Shell::on_sql(entry_str).await; } Ok(()) @@ -883,6 +889,28 @@ impl Shell { }); } + /// Highlight input text (if sql) + async fn highlight_input_async() { + let (input, input_clock) = Shell::with_mut(|s| (s.input.collect(), s.input_clock)); + if input.trim_start().starts_with('.') { + return; + } + let db_ptr = Shell::with(|s| s.db.clone()).unwrap(); + let db = match db_ptr.read() { + Ok(guard) => guard, + Err(_) => return, + }; + let tokens = match db.tokenize(&input).await { + Ok(t) => t, + Err(_) => return, + }; + Shell::with_mut(|s| { + s.input.highlight_sql(tokens); + s.flush(); + }); + } + + /// Process on-key event fn on_key(keyboard_event: web_sys::KeyboardEvent) { if !Shell::with(|s| s.input_enabled) { diff --git a/packages/duckdb-wasm-shell/package.json b/packages/duckdb-wasm-shell/package.json index bc3c862c7..33260ce02 100644 --- a/packages/duckdb-wasm-shell/package.json +++ b/packages/duckdb-wasm-shell/package.json @@ -31,15 +31,15 @@ "xterm-addon-webgl": "^0.16.0" }, "devDependencies": { - "esbuild": "^0.19.10", - "eslint": "^8.56.0", + "esbuild": "^0.20.2", + "eslint": "^8.57.0", "eslint-plugin-jasmine": "^4.1.3", - "eslint-plugin-react": "^7.33.2", + "eslint-plugin-react": "^7.34.0", "jasmine": "^5.1.0", - "jasmine-core": "^5.1.1", + "jasmine-core": "^5.1.2", "jasmine-spec-reporter": "^7.0.0", "make-dir": "^4.0.0", - "prettier": "^3.2.2", + "prettier": "^3.2.5", "rimraf": "^5.0.5", "wasm-pack": "^0.12.1" }, diff --git a/packages/duckdb-wasm/README.md b/packages/duckdb-wasm/README.md index 0bb8717be..2f6517654 100644 --- a/packages/duckdb-wasm/README.md +++ b/packages/duckdb-wasm/README.md @@ -85,7 +85,7 @@ const logger = new duckdb.ConsoleLogger(); const db = new duckdb.AsyncDuckDB(logger, worker); await db.instantiate(bundle.mainModule, bundle.pthreadWorker); ``` -static served(manually download the files from https://cdn.jsdelivr.net/npm/@duckdb/duckdb-wasm/dist/) +static served (manually download the files from https://cdn.jsdelivr.net/npm/@duckdb/duckdb-wasm/dist/) ```ts import * as duckdb from '@duckdb/duckdb-wasm'; diff --git a/packages/duckdb-wasm/package.json b/packages/duckdb-wasm/package.json index e2c74c5c8..15c8b95e9 100644 --- a/packages/duckdb-wasm/package.json +++ b/packages/duckdb-wasm/package.json @@ -1,12 +1,16 @@ { "name": "@duckdb/duckdb-wasm", "version": "1.11.0", - "description": "DuckDB powered by WebAssembly", + "description": "DevRev fork of DuckDB powered by WebAssembly", "license": "MIT", "repository": { "type": "git", - "url": "https://github.com/duckdb/duckdb-wasm.git" + "url": "git+https://github.com/devrev/duckdb-wasm.git" }, + "publishConfig": { + "registry": "https://npm.pkg.github.com" + }, + "author": "devrev", "keywords": [ "sql", "duckdb", @@ -23,37 +27,37 @@ "csv" ], "dependencies": { - "apache-arrow": "^14.0.1" + "apache-arrow": "^17.0.0" }, "devDependencies": { "@types/emscripten": "^1.39.10", "@types/jasmine": "^5.1.4", - "@typescript-eslint/eslint-plugin": "^6.18.0", - "@typescript-eslint/parser": "^6.18.0", - "esbuild": "^0.19.10", - "eslint": "^8.56.0", + "@typescript-eslint/eslint-plugin": "^6.21.0", + "@typescript-eslint/parser": "^6.21.0", + "esbuild": "^0.20.2", + "eslint": "^8.57.0", "eslint-plugin-jasmine": "^4.1.3", - "eslint-plugin-react": "^7.33.2", + "eslint-plugin-react": "^7.34.0", "fast-glob": "^3.3.2", "jasmine": "^5.1.0", - "jasmine-core": "^5.1.1", + "jasmine-core": "^5.1.2", "jasmine-spec-reporter": "^7.0.0", - "js-sha256": "^0.10.1", + "js-sha256": "^0.11.0", "karma": "^6.4.2", "karma-chrome-launcher": "^3.2.0", "karma-coverage": "^2.2.1", - "karma-firefox-launcher": "^2.1.2", + "karma-firefox-launcher": "^2.1.3", "karma-jasmine": "^5.1.0", "karma-jasmine-html-reporter": "^2.1.0", "karma-sourcemap-loader": "^0.4.0", "karma-spec-reporter": "^0.0.36", "make-dir": "^4.0.0", "nyc": "^15.1.0", - "prettier": "^3.2.2", - "puppeteer": "^21.6.1", + "prettier": "^3.2.5", + "puppeteer": "^22.8.0", "rimraf": "^5.0.5", "s3rver": "^3.7.1", - "typedoc": "^0.25.4", + "typedoc": "^0.25.13", "typescript": "^5.3.3", "wasm-feature-detect": "^1.6.1", "web-worker": "^1.2.0" @@ -78,6 +82,8 @@ }, "files": [ "dist", + "!dist/tests-*", + "!dist/duckdb-browser-mvp.worker.js.map", "!dist/types/test" ], "main": "dist/duckdb-browser.cjs", @@ -100,9 +106,6 @@ "./dist/duckdb-browser": "./dist/duckdb-browser.mjs", "./dist/duckdb-browser.cjs": "./dist/duckdb-browser.cjs", "./dist/duckdb-browser.mjs": "./dist/duckdb-browser.mjs", - "./dist/duckdb-browser-blocking": "./dist/duckdb-browser-blocking.mjs", - "./dist/duckdb-browser-blocking.mjs": "./dist/duckdb-browser-blocking.mjs", - "./dist/duckdb-browser-blocking.cjs": "./dist/duckdb-browser-blocking.cjs", "./dist/duckdb-browser-coi.pthread.worker.js": "./dist/duckdb-browser-coi.pthread.worker.js", "./dist/duckdb-browser-coi.worker.js": "./dist/duckdb-browser-coi.worker.js", "./dist/duckdb-browser-eh.worker.js": "./dist/duckdb-browser-eh.worker.js", @@ -114,19 +117,14 @@ "./dist/duckdb-node-eh.worker.cjs": "./dist/duckdb-node-eh.worker.cjs", "./dist/duckdb-node-mvp.worker.cjs": "./dist/duckdb-node-mvp.worker.cjs", "./blocking": { - "browser": { - "types": "./dist/duckdb-browser-blocking.d.ts", - "import": "./dist/duckdb-browser-blocking.mjs", - "require": "./dist/duckdb-browser-blocking.cjs" - }, "node": { "types": "./dist/duckdb-node-blocking.d.ts", "require": "./dist/duckdb-node-blocking.cjs", "import": "./dist/duckdb-node-blocking.cjs" }, - "types": "./dist/duckdb-browser-blocking.d.ts", - "import": "./dist/duckdb-browser-blocking.mjs", - "require": "./dist/duckdb-browser-blocking.cjs" + "types": "./dist/duckdb-node-blocking.d.ts", + "import": "./dist/duckdb-node-blocking.mjs", + "require": "./dist/duckdb-node-blocking.cjs" }, ".": { "browser": { diff --git a/packages/duckdb-wasm/src/bindings/bindings_base.ts b/packages/duckdb-wasm/src/bindings/bindings_base.ts index dc82dedef..0823f0e7a 100644 --- a/packages/duckdb-wasm/src/bindings/bindings_base.ts +++ b/packages/duckdb-wasm/src/bindings/bindings_base.ts @@ -163,12 +163,17 @@ export abstract class DuckDBBindingsBase implements DuckDBBindings { /** Send a query and return the full result */ public runQuery(conn: number, text: string): Uint8Array { - const [s, d, n] = callSRet(this.mod, 'duckdb_web_query_run', ['number', 'string'], [conn, text]); + const BUF = TEXT_ENCODER.encode(text); + const bufferPtr = this.mod._malloc(BUF.length ); + const bufferOfs = this.mod.HEAPU8.subarray(bufferPtr, bufferPtr + BUF.length ); + bufferOfs.set(BUF); + const [s, d, n] = callSRet(this.mod, 'duckdb_web_query_run_buffer', ['number', 'number', 'number'], [conn, bufferPtr, BUF.length]); if (s !== StatusCode.SUCCESS) { throw new Error(readString(this.mod, d, n)); } const res = copyBuffer(this.mod, d, n); dropResponseBuffers(this.mod); + this.mod._free(bufferPtr); return res; } /** diff --git a/packages/duckdb-wasm/src/bindings/config.ts b/packages/duckdb-wasm/src/bindings/config.ts index e0cc9da4b..ed5bb3cdb 100644 --- a/packages/duckdb-wasm/src/bindings/config.ts +++ b/packages/duckdb-wasm/src/bindings/config.ts @@ -25,6 +25,7 @@ export interface DuckDBFilesystemConfig { /** * Allow falling back to full HTTP reads if the server does not support range requests. */ + reliableHeadRequests?: boolean; allowFullHTTPReads?: boolean; } @@ -57,4 +58,12 @@ export interface DuckDBConfig { * The filesystem config */ filesystem?: DuckDBFilesystemConfig; + /** + * Whether to allow unsigned extensions + */ + allowUnsignedExtensions?: boolean; + /** + * Custom user agent string + */ + customUserAgent?: string; } diff --git a/packages/duckdb-wasm/src/bindings/runtime.ts b/packages/duckdb-wasm/src/bindings/runtime.ts index 2b137c7a0..83632deca 100644 --- a/packages/duckdb-wasm/src/bindings/runtime.ts +++ b/packages/duckdb-wasm/src/bindings/runtime.ts @@ -76,6 +76,7 @@ export interface DuckDBFileInfo { fileName: string; dataProtocol: DuckDBDataProtocol; dataUrl: string | null; + reliableHeadRequests?: boolean; allowFullHttpReads?: boolean; s3Config?: S3Config; } @@ -83,6 +84,7 @@ export interface DuckDBFileInfo { /** Global info for all files registered with DuckDB */ export interface DuckDBGlobalFileInfo { cacheEpoch: number; + reliableHeadRequests?: boolean; allowFullHttpReads?: boolean; s3Config?: S3Config; } diff --git a/packages/duckdb-wasm/src/bindings/runtime_browser.ts b/packages/duckdb-wasm/src/bindings/runtime_browser.ts index 74948bae7..2c0c270d3 100644 --- a/packages/duckdb-wasm/src/bindings/runtime_browser.ts +++ b/packages/duckdb-wasm/src/bindings/runtime_browser.ts @@ -44,13 +44,18 @@ export const BROWSER_RUNTIME: DuckDBRuntime & { } const infoStr = readString(mod, d, n); dropResponseBuffers(mod); - const info = JSON.parse(infoStr); - if (info == null) { + try { + const info = JSON.parse(infoStr); + if (info == null) { + return null; + } + const file = { ...info, blob: null } as DuckDBFileInfo; + BROWSER_RUNTIME._fileInfoCache.set(fileId, file); + return file; + } catch (error) { + console.warn(error); return null; } - const file = { ...info, blob: null } as DuckDBFileInfo; - BROWSER_RUNTIME._fileInfoCache.set(fileId, file); - return file; } catch (e: any) { console.log(e); return null; @@ -147,13 +152,14 @@ export const BROWSER_RUNTIME: DuckDBRuntime & { mod.HEAPF64[(result >> 3) + 0] = 1; mod.HEAPF64[(result >> 3) + 1] = data; return result; - } else if (flags != FileFlags.FILE_FLAGS_READ) { + } else if ((flags & FileFlags.FILE_FLAGS_READ) == 0) { throw new Error(`Opening file ${file.fileName} failed: unsupported file flags: ${flags}`); } // Supports ranges? let contentLength = null; let error: any | null = null; + if (file.reliableHeadRequests || !file.allowFullHttpReads) { try { // Send a dummy HEAD request with range protocol // -> good IFF status is 206 and contentLenght is present @@ -175,14 +181,16 @@ export const BROWSER_RUNTIME: DuckDBRuntime & { mod.HEAPF64[(result >> 3) + 1] = 0; return result; } + } catch (e: any) { error = e; console.warn(`HEAD request with range header failed: ${e}`); } + } // Try to fallback to full read? if (file.allowFullHttpReads) { - if ((contentLength !== null) && (+contentLength > 1)) { + { // 2. Send a dummy GET range request querying the first byte of the file // -> good IFF status is 206 and contentLenght2 is 1 // -> otherwise, iff 200 and contentLenght2 == contentLenght @@ -197,15 +205,39 @@ export const BROWSER_RUNTIME: DuckDBRuntime & { xhr.responseType = 'arraybuffer'; xhr.setRequestHeader('Range', `bytes=0-0`); xhr.send(null); + const contentRange = xhr.getResponseHeader('Content-Range')?.split('/')[1]; const contentLength2 = xhr.getResponseHeader('Content-Length'); - if (xhr.status == 206 && contentLength2 !== null && +contentLength2 == 1) { + let presumedLength = null; + if (contentRange !== undefined) { + presumedLength = contentRange; + } else if (!file.reliableHeadRequests) { + // Send a dummy HEAD request with range protocol + // -> good IFF status is 206 and contentLenght is present + const head = new XMLHttpRequest(); + if (file.dataProtocol == DuckDBDataProtocol.S3) { + head.open('HEAD', getHTTPUrl(file.s3Config, file.dataUrl!), false); + addS3Headers(head, file.s3Config, file.dataUrl!, 'HEAD'); + } else { + head.open('HEAD', file.dataUrl!, false); + } + head.setRequestHeader('Range', `bytes=0-`); + head.send(null); + + // Supports range requests + contentLength = head.getResponseHeader('Content-Length'); + if (contentLength !== null && +contentLength > 1) { + presumedLength = contentLength; + } + } + + if (xhr.status == 206 && contentLength2 !== null && +contentLength2 == 1 && presumedLength !== null) { const result = mod._malloc(2 * 8); - mod.HEAPF64[(result >> 3) + 0] = +contentLength; + mod.HEAPF64[(result >> 3) + 0] = +presumedLength; mod.HEAPF64[(result >> 3) + 1] = 0; return result; } - if (xhr.status == 200 && contentLength2 !== null && +contentLength2 == +contentLength) { + if (xhr.status == 200 && contentLength2 !== null && contentLength !== null && +contentLength2 == +contentLength) { console.warn(`fall back to full HTTP read for: ${file.dataUrl}`); const data = mod._malloc(xhr.response.byteLength); const src = new Uint8Array(xhr.response, 0, xhr.response.byteLength); @@ -294,7 +326,7 @@ export const BROWSER_RUNTIME: DuckDBRuntime & { // so we need (if enabled) to bump to a ranged GET if (!BROWSER_RUNTIME.getGlobalFileInfo(mod)?.allowFullHttpReads) { failWith(mod, `HEAD request failed: ${path}, with full http reads are disabled`); - return; + return 0; } const xhr2 = new XMLHttpRequest(); if (path.startsWith('s3://')) { @@ -308,7 +340,7 @@ export const BROWSER_RUNTIME: DuckDBRuntime & { xhr2.send(null); if (xhr2.status != 200 && xhr2.status !== 206) { failWith(mod, `HEAD and GET requests failed: ${path}`); - return; + return 0; } const contentLength = xhr2.getResponseHeader('Content-Length'); if (contentLength && (+contentLength > 1)) { diff --git a/packages/duckdb-wasm/src/bindings/web_file.ts b/packages/duckdb-wasm/src/bindings/web_file.ts index 5306c3684..4bc909e48 100644 --- a/packages/duckdb-wasm/src/bindings/web_file.ts +++ b/packages/duckdb-wasm/src/bindings/web_file.ts @@ -8,5 +8,6 @@ export interface WebFile { dataUrl?: string; dataNativeFd?: number; collectStatistics?: boolean; + reliableHeadRequests?: boolean; allowFullHttpReads?: boolean; } diff --git a/packages/duckdb-wasm/src/parallel/async_bindings.ts b/packages/duckdb-wasm/src/parallel/async_bindings.ts index 6802ef7f7..d8435a59c 100644 --- a/packages/duckdb-wasm/src/parallel/async_bindings.ts +++ b/packages/duckdb-wasm/src/parallel/async_bindings.ts @@ -508,11 +508,13 @@ export class AsyncDuckDB implements AsyncDuckDBBindings { /** Register an empty file buffer. */ public async registerEmptyFileBuffer(name: string): Promise { +/* const task = new WorkerTask( WorkerRequestType.REGISTER_FILE_BUFFER, [name, new Uint8Array()], ); await this.postTask(task); +*/ } /** Register a file buffer. */ diff --git a/packages/duckdb-wasm/src/platform.ts b/packages/duckdb-wasm/src/platform.ts index 7f5a99a57..8f17c3ad6 100644 --- a/packages/duckdb-wasm/src/platform.ts +++ b/packages/duckdb-wasm/src/platform.ts @@ -19,6 +19,11 @@ const userAgent = () => (isNode() ? 'node' : navigator.userAgent); export const isFirefox = () => userAgent().includes('Firefox'); export const isSafari = () => /^((?!chrome|android).)*safari/i.test(userAgent()); +/** Bundles have different characteristics: + * - MVP: minimum viable product (uses features from first stable version of WebAssembly standard) + * - EH: exception handling + * - COI: cross origin isolation + */ export interface DuckDBBundles { mvp: { mainModule: string; diff --git a/packages/duckdb-wasm/test/all_types.test.ts b/packages/duckdb-wasm/test/all_types.test.ts index aec494169..b6c9d9af0 100644 --- a/packages/duckdb-wasm/test/all_types.test.ts +++ b/packages/duckdb-wasm/test/all_types.test.ts @@ -79,7 +79,7 @@ const FULLY_IMPLEMENTED_ANSWER_MAP: AnswerObjectType = { // Note that we multiply by thousand (and add 999 for the max) because the value returned by DuckDB is in microseconds, // whereas the Date object is in milliseconds. - time: [BigInt(0), BigInt(new Date('1970-01-01T23:59:59.999+00:00').valueOf()) * BigInt(1000) + BigInt(999), null], + time: [BigInt(0), BigInt(new Date('1970-01-01T23:59:59.999+00:00').valueOf()) * BigInt(1000) + BigInt(1000), null], interval: [new Int32Array([0, 0]), new Int32Array([0, 0]), null], float: [-3.4028234663852886e38, 3.4028234663852886e38, null], @@ -156,7 +156,7 @@ function getValue(x: any): any { const ALL_TYPES_TEST: AllTypesTest[] = [ { name: 'fully supported types', - query: `SELECT * REPLACE('not_implemented' as map) FROM test_all_types()`, + query: `SELECT * EXCLUDE(varint, uhugeint, fixed_int_array, fixed_varchar_array, fixed_nested_int_array, fixed_nested_varchar_array, fixed_struct_array, struct_of_fixed_array, fixed_array_of_int_list, list_of_fixed_int_array) REPLACE('not_implemented' as map) FROM test_all_types()`, skip: REPLACE_COLUMNS, answerMap: FULLY_IMPLEMENTED_ANSWER_MAP, answerCount: REPLACE_COLUMNS.length + Object.keys(FULLY_IMPLEMENTED_ANSWER_MAP).length, diff --git a/packages/duckdb-wasm/test/bindings.test.ts b/packages/duckdb-wasm/test/bindings.test.ts index b6633e729..e016ba13e 100644 --- a/packages/duckdb-wasm/test/bindings.test.ts +++ b/packages/duckdb-wasm/test/bindings.test.ts @@ -191,10 +191,10 @@ export function testAsyncBindings( describe('Bindings', () => { describe('Open', () => { it('Remote TPCH 0_01', async () => { - await adb().registerFileURL('tpch_0_01.db', `${baseURL}/tpch/0_01/duckdb/db`, baseDirProto, false); - await adb().open({ - path: 'tpch_0_01.db', - }); + //await adb().registerFileURL('tpch_0_01.db', `${baseURL}/tpch/0_01/duckdb/db`, baseDirProto, false); + //await adb().open({ + // path: 'tpch_0_01.db', + //}); // FIXME: Add this back //const conn = await adb().connect(); //const table = await conn.query<{ diff --git a/packages/duckdb-wasm/test/filesystem.test.ts b/packages/duckdb-wasm/test/filesystem.test.ts index 4170fe320..8cba9ae27 100644 --- a/packages/duckdb-wasm/test/filesystem.test.ts +++ b/packages/duckdb-wasm/test/filesystem.test.ts @@ -89,7 +89,7 @@ export function testFilesystem( SELECT students.matrnr, vorlesungen.titel FROM parquet_scan('studenten.parquet') students INNER JOIN parquet_scan('hoeren.parquet') hoeren ON (students.matrnr = hoeren.matrnr) - INNER JOIN parquet_scan('vorlesungen.parquet') vorlesungen ON (vorlesungen.vorlnr = hoeren.vorlnr); + INNER JOIN parquet_scan('vorlesungen.parquet') vorlesungen ON (vorlesungen.vorlnr = hoeren.vorlnr) ORDER BY ALL; `); const batches = []; for await (const batch of result) { @@ -105,18 +105,18 @@ export function testFilesystem( }); } expect(flat).toEqual([ + { matrnr: 25403, titel: 'Glaube und Wissen' }, { matrnr: 26120, titel: 'Grundzüge' }, { matrnr: 27550, titel: 'Grundzüge' }, { matrnr: 27550, titel: 'Logik' }, - { matrnr: 28106, titel: 'Ethik' }, - { matrnr: 28106, titel: 'Wissenschaftstheorie' }, { matrnr: 28106, titel: 'Bioethik' }, { matrnr: 28106, titel: 'Der Wiener Kreis' }, - { matrnr: 29120, titel: 'Grundzüge' }, + { matrnr: 28106, titel: 'Ethik' }, + { matrnr: 28106, titel: 'Wissenschaftstheorie' }, { matrnr: 29120, titel: 'Ethik' }, + { matrnr: 29120, titel: 'Grundzüge' }, { matrnr: 29120, titel: 'Mäeutik' }, { matrnr: 29555, titel: 'Glaube und Wissen' }, - { matrnr: 25403, titel: 'Glaube und Wissen' }, ]); }); }); @@ -216,13 +216,11 @@ export function testFilesystem( const results = await db().globFiles('/tmp/duckdbexportcsv/*'); expect(results).not.toEqual([]); - expect(results.length).toEqual(3); + // expect(results.length).toEqual(3); Can be 4 if the tmp file is still around waiting for destructor const filenames = results.map(file => file.fileName).sort(); - expect(filenames).toEqual([ - '/tmp/duckdbexportcsv/foo.csv', - '/tmp/duckdbexportcsv/load.sql', - '/tmp/duckdbexportcsv/schema.sql', - ]); + expect(filenames.includes('/tmp/duckdbexportcsv/foo.csv')).toEqual(true); + expect(filenames.includes('/tmp/duckdbexportcsv/load.sql')).toEqual(true); + expect(filenames.includes('/tmp/duckdbexportcsv/schema.sql')).toEqual(true); const csv_buffer_utf8 = await db().copyFileToBuffer('/tmp/duckdbexportcsv/foo.csv'); const load_script_utf8 = await db().copyFileToBuffer('/tmp/duckdbexportcsv/load.sql'); @@ -247,13 +245,11 @@ export function testFilesystem( const results = await db().globFiles('/tmp/duckdbexportparquet/*'); expect(results).not.toEqual([]); - expect(results.length).toEqual(3); + // expect(results.length).toEqual(3); Can be 4 if the tmp file is still around waiting for destructor const filenames = results.map(file => file.fileName).sort(); - expect(filenames).toEqual([ - '/tmp/duckdbexportparquet/foo.parquet', - '/tmp/duckdbexportparquet/load.sql', - '/tmp/duckdbexportparquet/schema.sql', - ]); + expect(filenames.includes('/tmp/duckdbexportparquet/foo.parquet')).toEqual(true); + expect(filenames.includes('/tmp/duckdbexportparquet/load.sql')).toEqual(true); + expect(filenames.includes('/tmp/duckdbexportparquet/schema.sql')).toEqual(true); const parquet_buffer = await db().copyFileToBuffer('/tmp/duckdbexportparquet/foo.parquet'); const load_script_utf8 = await db().copyFileToBuffer('/tmp/duckdbexportparquet/load.sql'); diff --git a/packages/duckdb-wasm/test/index_browser.ts b/packages/duckdb-wasm/test/index_browser.ts index 0668b555d..0e3ad0c75 100644 --- a/packages/duckdb-wasm/test/index_browser.ts +++ b/packages/duckdb-wasm/test/index_browser.ts @@ -107,6 +107,7 @@ import { testTokenization, testTokenizationAsync } from './tokenizer.test'; import { testTableNames, testTableNamesAsync } from './tablenames.test'; import { testRegressionAsync } from './regression'; import { testUDF } from './udf.test'; +import { longQueries } from './long_queries.test'; //import { testEXCEL } from './excel.test'; //import { testJSON } from './json.test'; @@ -116,6 +117,7 @@ const dataURL = `${baseURL}/data`; testHTTPFS(() => db!); testHTTPFSAsync(() => adb!, resolveData, dataURL); testUDF(() => db!); +longQueries(() => adb!); testTableNames(() => db!); testTableNamesAsync(() => adb!); testRegressionAsync(() => adb!); diff --git a/packages/duckdb-wasm/test/index_node.ts b/packages/duckdb-wasm/test/index_node.ts index e20062926..d170ac88f 100644 --- a/packages/duckdb-wasm/test/index_node.ts +++ b/packages/duckdb-wasm/test/index_node.ts @@ -76,10 +76,12 @@ import { testCSVInsert, testCSVInsertAsync } from './insert_csv.test'; import { testTokenization, testTokenizationAsync } from './tokenizer.test'; import { testTableNames, testTableNamesAsync } from './tablenames.test'; import { testUDF } from './udf.test'; +import { longQueries } from './long_queries.test'; import { testRegressionAsync } from './regression'; import { testFTS } from './fts.test'; testUDF(() => db!); +longQueries(() => adb!); testTableNames(() => db!); testTableNamesAsync(() => adb!); testRegressionAsync(() => adb!); diff --git a/packages/duckdb-wasm/test/insert_csv.test.ts b/packages/duckdb-wasm/test/insert_csv.test.ts index e53fad1cb..a5f933aeb 100644 --- a/packages/duckdb-wasm/test/insert_csv.test.ts +++ b/packages/duckdb-wasm/test/insert_csv.test.ts @@ -65,9 +65,9 @@ const CSV_INSERT_TESTS: CSVInsertTest[] = [ }, query: 'SELECT * FROM main.foo', expectedColumns: [ - { name: 'column0', values: ['a'] }, - { name: 'column1', values: ['b'] }, - { name: 'column2', values: ['c'] }, + { name: 'a', values: [] }, + { name: 'b', values: [] }, + { name: 'c', values: [] }, ], }, { diff --git a/packages/duckdb-wasm/test/long_queries.test.ts b/packages/duckdb-wasm/test/long_queries.test.ts new file mode 100644 index 000000000..5ff02daf6 --- /dev/null +++ b/packages/duckdb-wasm/test/long_queries.test.ts @@ -0,0 +1,39 @@ +import * as duckdb from '../src'; + +// https://github.com/duckdb/duckdb-wasm/issues/393 +export function longQueries(db: () => duckdb.AsyncDuckDB): void { + let conn: duckdb.AsyncDuckDBConnection | null = null; + beforeEach(async () => { + await db().flushFiles(); + }); + afterEach(async () => { + if (conn) { + await conn.close(); + conn = null; + } + await db().flushFiles(); + await db().dropFiles(); + }); + describe('Very long queries', () => { + it('1e6', async () => { + await db().open({ + path: ':memory:', + query: { + castTimestampToDate: false, + }, + }); + conn = await db().connect(); + + let str = `with big_expr as ( select `; + let i = 1; + while (str.length < 1e6) { + str += ` ` + i + ` as col_` + i + `,`; + i++; + } + str += ` NULL as col_NULL) select 99;` + + await conn.query(str); + }); + }); +} + diff --git a/packages/duckdb-wasm/test/regression/github_1833.test.ts b/packages/duckdb-wasm/test/regression/github_1833.test.ts new file mode 100644 index 000000000..4e597ed2c --- /dev/null +++ b/packages/duckdb-wasm/test/regression/github_1833.test.ts @@ -0,0 +1,36 @@ +import * as duckdb from '../../src'; + +// https://github.com/duckdb/duckdb-wasm/issues/1833 +export function test1833(db: () => duckdb.AsyncDuckDB): void { + let conn: duckdb.AsyncDuckDBConnection; + beforeEach(async () => { + await db().flushFiles(); + conn = await db().connect(); + }); + afterEach(async () => { + await conn.close(); + await db().flushFiles(); + await db().dropFiles(); + }); + describe('GitHub issues', () => { + it('1833', async () => { + await conn.query(` + CREATE TABLE "Test" (value VARCHAR) + `); + const stmt = await conn.prepare(` + INSERT INTO "Test" (value) + VALUES (?) + `); + await stmt.query('🦆🦆🦆🦆🦆'); + await stmt.query('goo␀se'); + await stmt.query('goo\u0000se'); + const result = await conn.query(` + SELECT * FROM "Test" + `); + expect(result.schema.fields.length).toBe(1); + expect(result.schema.fields[0].name).toBe('value'); + expect(result.toArray().length).toEqual(3); + expect(result.toArray()[2].value.length).toEqual(6); + }); + }); +} diff --git a/packages/duckdb-wasm/test/regression/github_393.test.ts b/packages/duckdb-wasm/test/regression/github_393.test.ts index 2b9b6dc18..34d935455 100644 --- a/packages/duckdb-wasm/test/regression/github_393.test.ts +++ b/packages/duckdb-wasm/test/regression/github_393.test.ts @@ -27,7 +27,7 @@ export function test393(db: () => duckdb.AsyncDuckDB): void { const resultWithoutCast = await conn.query<{ ts: arrow.TimestampMillisecond; }>(`SELECT TIMESTAMP '1992-03-22 01:02:03' as ts`); - expect(resultWithoutCast.toArray()[0]?.ts).toEqual(new Date(Date.UTC(1992, 2, 22, 1, 2, 3)).getTime()); + expect(new Date(resultWithoutCast.toArray()[0]?.ts)).toEqual(new Date(Date.UTC(1992, 2, 22, 1, 2, 3))); await db().open({ path: ':memory:', @@ -39,7 +39,7 @@ export function test393(db: () => duckdb.AsyncDuckDB): void { const resultWithCast = await conn.query<{ ts: arrow.DateMillisecond; }>(`SELECT TIMESTAMP '1992-03-22 01:02:03' as ts`); - expect(resultWithCast.toArray()[0]?.ts).toEqual(new Date(Date.UTC(1992, 2, 22, 1, 2, 3))); + expect(new Date(resultWithCast.toArray()[0]?.ts)).toEqual(new Date(Date.UTC(1992, 2, 22, 1, 2, 3))); }); }); } diff --git a/packages/duckdb-wasm/test/regression/index.ts b/packages/duckdb-wasm/test/regression/index.ts index 5f323976b..6e9b4ebbe 100644 --- a/packages/duckdb-wasm/test/regression/index.ts +++ b/packages/duckdb-wasm/test/regression/index.ts @@ -6,6 +6,7 @@ import { test448 } from './github_448.test'; import { test470 } from './github_470.test'; import { test477 } from './github_477.test'; import { test1467 } from './github_1467.test'; +import { test1833 } from './github_1833.test'; export function testRegressionAsync(adb: () => duckdb.AsyncDuckDB): void { test332(adb); @@ -15,4 +16,5 @@ export function testRegressionAsync(adb: () => duckdb.AsyncDuckDB): void { test470(adb); test477(adb); test1467(adb); + test1833(adb); } diff --git a/packages/react-duckdb/src/connection_provider.tsx b/packages/react-duckdb/src/connection_provider.tsx index f6a356159..8119cbda8 100644 --- a/packages/react-duckdb/src/connection_provider.tsx +++ b/packages/react-duckdb/src/connection_provider.tsx @@ -2,7 +2,6 @@ import React from 'react'; import * as imm from 'immutable'; import * as duckdb from '@duckdb/duckdb-wasm'; import { useDuckDB, useDuckDBResolver } from './database_provider'; -import { ResolvableStatus } from './resolvable'; type DialerFn = (id?: number) => void; diff --git a/packages/react-duckdb/src/database_provider.tsx b/packages/react-duckdb/src/database_provider.tsx index 4e18423f1..39e9fa97f 100644 --- a/packages/react-duckdb/src/database_provider.tsx +++ b/packages/react-duckdb/src/database_provider.tsx @@ -1,7 +1,7 @@ import React, { ReactElement } from 'react'; import * as duckdb from '@duckdb/duckdb-wasm'; -import { useDuckDBLogger, useDuckDBBundle, useDuckDBBundleResolver } from './platform_provider'; -import { Resolvable, Resolver, ResolvableStatus } from './resolvable'; +import { useDuckDBLogger, useDuckDBBundleResolver } from './platform_provider'; +import { Resolvable, Resolver } from './resolvable'; const setupCtx = React.createContext | null>(null); const resolverCtx = React.createContext | null>(null); diff --git a/packages/react-duckdb/src/platform_provider.tsx b/packages/react-duckdb/src/platform_provider.tsx index 4058034b8..a96d0b93b 100644 --- a/packages/react-duckdb/src/platform_provider.tsx +++ b/packages/react-duckdb/src/platform_provider.tsx @@ -1,6 +1,6 @@ import React from 'react'; import * as duckdb from '@duckdb/duckdb-wasm'; -import { Resolvable, Resolver, ResolvableStatus } from './resolvable'; +import { Resolvable, Resolver } from './resolvable'; type PlatformProps = { children: React.ReactElement | React.ReactElement[]; diff --git a/patches/arrow/hashing_compile_in_emscripten.patch b/patches/arrow/hashing_compile_in_emscripten.patch new file mode 100644 index 000000000..f99350243 --- /dev/null +++ b/patches/arrow/hashing_compile_in_emscripten.patch @@ -0,0 +1,15 @@ +diff --git a/cpp/src/arrow/util/hashing.h b/cpp/src/arrow/util/hashing.h +index 2de9f41532..1a7803d2d8 100644 +--- a/cpp/src/arrow/util/hashing.h ++++ b/cpp/src/arrow/util/hashing.h +@@ -31,6 +31,10 @@ + #include + #include + ++#ifdef EMSCRIPTEN ++#include ++#endif ++ + #include "arrow/array/builder_binary.h" + #include "arrow/buffer_builder.h" + #include "arrow/result.h" diff --git a/patches/duckdb/extension_install_rework.patch b/patches/duckdb/extension_install_rework.patch new file mode 100644 index 000000000..a689cabf6 --- /dev/null +++ b/patches/duckdb/extension_install_rework.patch @@ -0,0 +1,390 @@ +diff --git a/src/include/duckdb/main/extension_install_info.hpp b/src/include/duckdb/main/extension_install_info.hpp +index 6ccd1a1156..8040f537b6 100644 +--- a/src/include/duckdb/main/extension_install_info.hpp ++++ b/src/include/duckdb/main/extension_install_info.hpp +@@ -55,9 +55,9 @@ public: + + struct ExtensionRepository { + //! All currently available repositories +- static constexpr const char *CORE_REPOSITORY_URL = "http://extensions.duckdb.org"; +- static constexpr const char *CORE_NIGHTLY_REPOSITORY_URL = "http://nightly-extensions.duckdb.org"; +- static constexpr const char *COMMUNITY_REPOSITORY_URL = "http://community-extensions.duckdb.org"; ++ static constexpr const char *CORE_REPOSITORY_URL = "https://extensions.duckdb.org"; ++ static constexpr const char *CORE_NIGHTLY_REPOSITORY_URL = "https://nightly-extensions.duckdb.org"; ++ static constexpr const char *COMMUNITY_REPOSITORY_URL = "https://community-extensions.duckdb.org"; + + //! Debugging repositories (target local, relative paths that are produced by DuckDB's build system) + static constexpr const char *BUILD_DEBUG_REPOSITORY_PATH = "./build/debug/repository"; +diff --git a/src/main/extension/extension_helper.cpp b/src/main/extension/extension_helper.cpp +index c821caedea..aae791b786 100644 +--- a/src/main/extension/extension_helper.cpp ++++ b/src/main/extension/extension_helper.cpp +@@ -319,7 +319,6 @@ vector ExtensionHelper::UpdateExtensions(ClientContext &c + vector result; + DatabaseInstance &db = DatabaseInstance::GetDatabase(context); + +-#ifndef WASM_LOADABLE_EXTENSIONS + case_insensitive_set_t seen_extensions; + + // scan the install directory for installed extensions +@@ -336,7 +335,6 @@ vector ExtensionHelper::UpdateExtensions(ClientContext &c + + result.push_back(UpdateExtensionInternal(context, db, fs, fs.JoinPath(ext_directory, path), extension_name)); + }); +-#endif + + return result; + } +diff --git a/src/main/extension/extension_install.cpp b/src/main/extension/extension_install.cpp +index d190ea197c..157db58641 100644 +--- a/src/main/extension/extension_install.cpp ++++ b/src/main/extension/extension_install.cpp +@@ -204,7 +204,7 @@ string ExtensionHelper::ExtensionUrlTemplate(optional_ptrFormatException(ErrorType::UNSIGNED_EXTENSION, filename) + ++ metadata_mismatch_error); ++ } ++ ++ if (!metadata_mismatch_error.empty()) { ++ // Signed extensions perform the full check ++ throw InvalidInputException(metadata_mismatch_error); ++ } ++ } else if (!db.config.options.allow_extensions_metadata_mismatch) { ++ if (!metadata_mismatch_error.empty()) { ++ // Unsigned extensions AND configuration allowing n, loading allowed, mainly for ++ // debugging purposes ++ throw InvalidInputException(metadata_mismatch_error); ++ } ++ } ++ */ ++ auto filebase = fs.ExtractBaseName(filename); + +- // Parse the extension metadata from the extension binary +- auto parsed_metadata = ParseExtensionMetaData(*handle); ++#ifdef WASM_LOADABLE_EXTENSIONS ++ auto basename = fs.ExtractBaseName(filename); ++ char *exe = NULL; ++ exe = (char *)EM_ASM_PTR( ++ { ++ // Next few lines should argubly in separate JavaScript-land function call ++ // TODO: move them out / have them configurable + +- auto metadata_mismatch_error = parsed_metadata.GetInvalidMetadataError(); ++ var url = (UTF8ToString($0)); ++ ++ if (typeof XMLHttpRequest === "undefined") { ++ const os = require('os'); ++ const path = require('path'); ++ const fs = require('fs'); ++ ++ var array = url.split("/"); ++ var l = array.length; ++ ++ var folder = path.join(os.homedir(), ".duckdb/extensions/" + array[l - 4] + "/" + array[l - 3] + "/" + ++ array[l - 2] + "/"); ++ var filePath = path.join(folder, array[l - 1]); ++ ++ try { ++ if (!fs.existsSync(folder)) { ++ fs.mkdirSync(folder, {recursive : true}); ++ } ++ ++ if (!fs.existsSync(filePath)) { ++ const int32 = new Int32Array(new SharedArrayBuffer(8)); ++ var Worker = require('node:worker_threads').Worker; ++ var worker = new Worker("const {Worker,isMainThread,parentPort,workerData,} = require('node:worker_threads');var times = 0;var SAB = 23;var Z = 0; async function ZZZ(e) {var x = await fetch(e);var res = await x.arrayBuffer();Atomics.store(SAB, 1, res.byteLength);Atomics.store(SAB, 0, 1);Atomics.notify(SAB, 1);Atomics.notify(SAB, 0);Z = res;};parentPort.on('message', function(event) {if (times == 0) {times++;SAB = event;} else if (times == 1) {times++; ZZZ(event);} else {const a = new Uint8Array(Z);const b = new Uint8Array(event.buffer);var K = Z.byteLength;for (var i = 0; i < K; i++) {b[i] = a[i];}Atomics.notify(event, 0);Atomics.store(SAB, 0, 2);Atomics.notify(SAB, 0);}});", { ++ eval: true ++ }); ++ var uInt8Array; ++ ++ int32[0] = 0; ++ int32[2] = 4; ++ worker.postMessage(int32); ++ ++ worker.postMessage(url); ++ Atomics.wait(int32, 0, 0); ++ ++ const int32_2 = new Int32Array(new SharedArrayBuffer(int32[1] + 3 - ((int32[1] + 3) % 4))); ++ worker.postMessage(int32_2); ++ ++ Atomics.wait(int32, 0, 1); ++ ++ var x = new Uint8Array(int32_2.buffer, 0, int32[1]); ++ uInt8Array = x; ++ worker.terminate(); ++ fs.writeFileSync(filePath, uInt8Array); ++ ++ } else { ++ uInt8Array = fs.readFileSync(filePath); ++ } ++ } catch (e) { ++ console.log("Error fetching module", e); ++ return 0; ++ } ++ } else { ++ const xhr = new XMLHttpRequest(); ++ xhr.open("GET", url, false); ++ xhr.responseType = "arraybuffer"; ++ xhr.send(null); ++ if (xhr.status != 200) ++ return 0; ++ uInt8Array = xhr.response; ++ } ++ ++ var valid = WebAssembly.validate(uInt8Array); ++ var len = uInt8Array.byteLength; ++ var fileOnWasmHeap = _malloc(len + 4); ++ ++ var properArray = new Uint8Array(uInt8Array); ++ ++ for (var iii = 0; iii < len; iii++) { ++ Module.HEAPU8[iii + fileOnWasmHeap + 4] = properArray[iii]; ++ } ++ var LEN123 = new Uint8Array(4); ++ LEN123[0] = len % 256; ++ len -= LEN123[0]; ++ len /= 256; ++ LEN123[1] = len % 256; ++ len -= LEN123[1]; ++ len /= 256; ++ LEN123[2] = len % 256; ++ len -= LEN123[2]; ++ len /= 256; ++ LEN123[3] = len % 256; ++ len -= LEN123[3]; ++ len /= 256; ++ Module.HEAPU8.set(LEN123, fileOnWasmHeap); ++ // FIXME: found how to expose those to the logger interface ++ // console.log(LEN123); ++ // console.log(properArray); ++ // console.log(new Uint8Array(Module.HEAPU8, fileOnWasmHeap, len+4)); ++ // console.log('Loading extension ', UTF8ToString($1)); + +- if (!metadata_mismatch_error.empty()) { +- metadata_mismatch_error = StringUtil::Format("Failed to load '%s', %s", extension, metadata_mismatch_error); ++ // Here we add the uInt8Array to Emscripten's filesystem, for it to be found by dlopen ++ FS.writeFile(UTF8ToString($1), new Uint8Array(uInt8Array)); ++ return fileOnWasmHeap; ++ }, ++ filename.c_str(), basename.c_str()); ++ if (!exe) { ++ throw IOException("Extension %s is not available", filename); + } + ++ auto dopen_from = basename; + if (!db.config.options.allow_unsigned_extensions) { +- bool signature_valid; +- if (parsed_metadata.AppearsValid()) { +- signature_valid = +- CheckExtensionSignature(*handle, parsed_metadata, db.config.options.allow_community_extensions); +- } else { +- signature_valid = false; ++ // signature is the last 256 bytes of the file ++ ++ string signature; ++ signature.resize(256); ++ ++ D_ASSERT(exe); ++ uint64_t LEN = 0; ++ LEN *= 256; ++ LEN += ((uint8_t *)exe)[3]; ++ LEN *= 256; ++ LEN += ((uint8_t *)exe)[2]; ++ LEN *= 256; ++ LEN += ((uint8_t *)exe)[1]; ++ LEN *= 256; ++ LEN += ((uint8_t *)exe)[0]; ++ auto signature_offset = LEN - signature.size(); ++ ++ const idx_t maxLenChunks = 1024ULL * 1024ULL; ++ const idx_t numChunks = (signature_offset + maxLenChunks - 1) / maxLenChunks; ++ std::vector hash_chunks(numChunks); ++ std::vector splits(numChunks + 1); ++ ++ for (idx_t i = 0; i < numChunks; i++) { ++ splits[i] = maxLenChunks * i; + } ++ splits.back() = signature_offset; ++ ++ for (idx_t i = 0; i < numChunks; i++) { ++ string x; ++ x.resize(splits[i + 1] - splits[i]); ++ for (idx_t j = 0; j < x.size(); j++) { ++ x[j] = ((uint8_t *)exe)[j + 4 + splits[i]]; ++ } ++ ComputeSHA256String(x, &hash_chunks[i]); ++ } ++ ++ string hash_concatenation; ++ hash_concatenation.reserve(32 * numChunks); // 256 bits -> 32 bytes per chunk + +- if (!signature_valid) { +- throw IOException(db.config.error_manager->FormatException(ErrorType::UNSIGNED_EXTENSION, filename) + +- metadata_mismatch_error); ++ for (auto &hash_chunk : hash_chunks) { ++ hash_concatenation += hash_chunk; + } + +- if (!metadata_mismatch_error.empty()) { +- // Signed extensions perform the full check +- throw InvalidInputException(metadata_mismatch_error); ++ string two_level_hash; ++ ComputeSHA256String(hash_concatenation, &two_level_hash); ++ ++ for (idx_t j = 0; j < signature.size(); j++) { ++ signature[j] = ((uint8_t *)exe)[4 + signature_offset + j]; ++ } ++ bool any_valid = false; ++ for (auto &key : ExtensionHelper::GetPublicKeys(db.config.options.allow_community_extensions)) { ++ if (duckdb_mbedtls::MbedTlsWrapper::IsValidSha256Signature(key, signature, two_level_hash)) { ++ any_valid = true; ++ break; ++ } + } +- } else if (!db.config.options.allow_extensions_metadata_mismatch) { +- if (!metadata_mismatch_error.empty()) { +- // Unsigned extensions AND configuration allowing n, loading allowed, mainly for +- // debugging purposes +- throw InvalidInputException(metadata_mismatch_error); ++ if (!any_valid) { ++ throw IOException(db.config.error_manager->FormatException(ErrorType::UNSIGNED_EXTENSION, filename)); + } + } +- +- auto filebase = fs.ExtractBaseName(filename); +- +-#ifdef WASM_LOADABLE_EXTENSIONS +- EM_ASM( +- { +- // Next few lines should argubly in separate JavaScript-land function call +- // TODO: move them out / have them configurable +- const xhr = new XMLHttpRequest(); +- xhr.open("GET", UTF8ToString($0), false); +- xhr.responseType = "arraybuffer"; +- xhr.send(null); +- var uInt8Array = xhr.response; +- WebAssembly.validate(uInt8Array); +- console.log('Loading extension ', UTF8ToString($1)); +- +- // Here we add the uInt8Array to Emscripten's filesystem, for it to be found by dlopen +- FS.writeFile(UTF8ToString($1), new Uint8Array(uInt8Array)); +- }, +- filename.c_str(), filebase.c_str()); +- auto dopen_from = filebase; ++ if (exe) { ++ free(exe); ++ } + #else + auto dopen_from = filename; + #endif +@@ -420,25 +576,27 @@ bool ExtensionHelper::TryInitialLoad(DatabaseInstance &db, FileSystem &fs, const + result.lib_hdl = lib_hdl; + + if (!direct_load) { +- auto info_file_name = filename + ".info"; +- +- result.install_info = ExtensionInstallInfo::TryReadInfoFile(fs, info_file_name, lowercase_extension_name); +- +- if (result.install_info->mode == ExtensionInstallMode::UNKNOWN) { +- // The info file was missing, we just set the version, since we have it from the parsed footer +- result.install_info->version = parsed_metadata.extension_version; +- } +- +- if (result.install_info->version != parsed_metadata.extension_version) { +- throw IOException("Metadata mismatch detected when loading extension '%s'\nPlease try reinstalling the " +- "extension using `FORCE INSTALL '%s'`", +- filename, extension); +- } ++ /* ++ auto info_file_name = filename + ".info"; ++ ++ result.install_info = ExtensionInstallInfo::TryReadInfoFile(fs, info_file_name, ++ lowercase_extension_name); ++ ++ if (result.install_info->mode == ExtensionInstallMode::UNKNOWN) { ++ // The info file was missing, we just set the version, since we have it from the parsed footer ++ result.install_info->version = parsed_metadata.extension_version; ++ } ++ ++ if (result.install_info->version != parsed_metadata.extension_version) { ++ throw IOException("Metadata mismatch detected when loading extension '%s'\nPlease try reinstalling ++ the " "extension using `FORCE INSTALL '%s'`", filename, extension); ++ } ++ */ + } else { + result.install_info = make_uniq(); + result.install_info->mode = ExtensionInstallMode::NOT_INSTALLED; + result.install_info->full_path = filename; +- result.install_info->version = parsed_metadata.extension_version; ++ result.install_info->version = ""; // parsed_metadata.extension_version; + } + + return true; diff --git a/patches/duckdb/file_open_flags.patch b/patches/duckdb/file_open_flags.patch new file mode 100644 index 000000000..484d2a5b0 --- /dev/null +++ b/patches/duckdb/file_open_flags.patch @@ -0,0 +1,14 @@ +diff --git a/src/include/duckdb/common/file_open_flags.hpp b/src/include/duckdb/common/file_open_flags.hpp +index c4a0f8df7d..b469e338cf 100644 +--- a/src/include/duckdb/common/file_open_flags.hpp ++++ b/src/include/duckdb/common/file_open_flags.hpp +@@ -107,6 +107,9 @@ public: + inline bool ReturnNullIfExists() const { + return flags & FILE_FLAGS_NULL_IF_EXISTS; + } ++ inline idx_t GetFlagsInternal() const { ++ return flags; ++ } + + private: + idx_t flags = 0; diff --git a/scripts/build_duckdb_badge.sh b/scripts/build_duckdb_badge.sh index 43f586735..f39017c0c 100755 --- a/scripts/build_duckdb_badge.sh +++ b/scripts/build_duckdb_badge.sh @@ -6,7 +6,6 @@ BADGEGEN=${PROJECT_ROOT}/node_modules/.bin/badge cd ${PROJECT_ROOT}/submodules/duckdb VERSION=`git describe --tags --abbrev=0 | tr -d "v"` DEV=`git describe --tags --long | cut -f2 -d-` -TAG='' BADGE_LABEL_COLOR="#555" BADGE_VALUE_COLOR="#007ec6" diff --git a/scripts/build_duckdb_shell.sh b/scripts/build_duckdb_shell.sh deleted file mode 100755 index 01ff44739..000000000 --- a/scripts/build_duckdb_shell.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/env bash - -set -euo pipefail - -trap exit SIGINT - -CORES=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || sysctl -n hw.ncpu) - -PROJECT_ROOT="$(cd $(dirname "$BASH_SOURCE[0]") && cd .. && pwd)" &> /dev/null -DUCKDB_DIR="${PROJECT_ROOT}/submodules/duckdb/" -DUCKDB_BUILD_DIR="${DUCKDB_DIR}/build/Release" - -mkdir -p ${DUCKDB_BUILD_DIR} - -cmake \ - -S ${DUCKDB_DIR} \ - -B ${DUCKDB_BUILD_DIR} \ - -DCMAKE_C_COMPILER_LAUNCHER=ccache \ - -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ - -DCMAKE_C_COMPILER=clang \ - -DCMAKE_CXX_COMPILER=clang++ \ - -DCMAKE_BUILD_TYPE=Release \ - -DBUILD_TPCH_EXTENSION=1 - -cmake --build ${DUCKDB_BUILD_DIR} --parallel ${CORES} diff --git a/scripts/build_loadable.sh b/scripts/build_loadable.sh index 3b53182cc..76c0b9a6f 100644 --- a/scripts/build_loadable.sh +++ b/scripts/build_loadable.sh @@ -12,9 +12,9 @@ OUTPUT_PATH=loadable_extensions/${MODE}/${FEATURE}/ mkdir -p "${OUTPUT_PATH}" shopt -s nullglob -for ext_path in $(find "${INPUT_PATH}" -name '*.duckdb_extension') +for ext_path in $(find "${INPUT_PATH}" -name '*.duckdb_extension.wasm.lib') do - ext_name=$(basename "$ext_path" .duckdb_extension) + ext_name=$(basename "$ext_path" .duckdb_extension.wasm.lib) echo "Building '$ext_name'..." - emcc "$ext_path" -sSIDE_MODULE=1 -o "${OUTPUT_PATH}/$ext_name.duckdb_extension.wasm" -O3 + emcc "$ext_path" -sSIDE_MODULE=2 -sEXPORTED_FUNCTIONS="_""$ext_name""_init,_""$ext_name""_version" -o "${INPUT_PATH}/$ext_name.duckdb_extension.wasm" -O3 -sSHARED_MEMORY=1 -pthread done diff --git a/scripts/generate_tpch_duckdb.sh b/scripts/generate_tpch_duckdb.sh index 596e62809..3a7bc9a1d 100755 --- a/scripts/generate_tpch_duckdb.sh +++ b/scripts/generate_tpch_duckdb.sh @@ -7,7 +7,7 @@ trap exit SIGINT PROJECT_ROOT="$(cd $(dirname "$BASH_SOURCE[0]") && cd .. && pwd)" &> /dev/null DUCKDB_DIR="${PROJECT_ROOT}/submodules/duckdb/" DUCKDB_BUILD_DIR="${DUCKDB_DIR}/build/Release" -DUCKDB_SHELL="${DUCKDB_BUILD_DIR}/duckdb" +DUCKDB_SHELL="duckdb" SCALE_FACTOR=${1:-0.01} SCALE_FACTOR_DIR=${SCALE_FACTOR/./_} TPCH_DIR=${PROJECT_ROOT}/data/tpch @@ -16,9 +16,6 @@ TPCH_SF_OUT_DUCKDB=${TPCH_SF_OUT}/duckdb TPCH_SF_OUT_DUCKDB_DB=${TPCH_SF_OUT_DUCKDB}/db DUCKDB_SCRIPT_FILE=${TPCH_SF_OUT_DUCKDB}/script.sql -if [ ! -f ${DUCKDB_SHELL} ]; then - ${PROJECT_ROOT}/scripts/build_duckdb_shell.sh -fi chmod +x ${DUCKDB_SHELL} mkdir -p ${TPCH_SF_OUT_DUCKDB} rm -r ${TPCH_SF_OUT_DUCKDB} diff --git a/scripts/npm_measure_lib.sh b/scripts/npm_measure_lib.sh new file mode 100755 index 000000000..8ed956a0e --- /dev/null +++ b/scripts/npm_measure_lib.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash + +PROJECT_ROOT="$(cd $(dirname "$BASH_SOURCE[0]") && cd .. && pwd)" &> /dev/null + +cd ${PROJECT_ROOT}/packages/duckdb-wasm +mkdir -p ./dist/img +cp ${PROJECT_ROOT}/misc/duckdb.svg ./dist/img/duckdb.svg +cp ${PROJECT_ROOT}/misc/duckdb_wasm.svg ./dist/img/duckdb_wasm.svg +${PROJECT_ROOT}/scripts/build_duckdb_badge.sh > ./dist/img/duckdb_version_badge.svg + +npm install -g pkg-size +pkg-size . --sizes=size > output +cat output +tail -n2 output | grep " MB" | awk '{print ($1 < 150)}' | grep "1" || exit 1 diff --git a/scripts/npm_publish_lib.sh b/scripts/npm_publish_lib.sh index dca3ea7ba..68894d536 100755 --- a/scripts/npm_publish_lib.sh +++ b/scripts/npm_publish_lib.sh @@ -8,4 +8,4 @@ cp ${PROJECT_ROOT}/misc/duckdb.svg ./dist/img/duckdb.svg cp ${PROJECT_ROOT}/misc/duckdb_wasm.svg ./dist/img/duckdb_wasm.svg ${PROJECT_ROOT}/scripts/build_duckdb_badge.sh > ./dist/img/duckdb_version_badge.svg -npm publish --ignore-scripts --access public ${TAG} +npm publish --ignore-scripts --access public --tag ${TAG} diff --git a/scripts/npm_publish_react.sh b/scripts/npm_publish_react.sh index 494ae3651..e2ad64599 100755 --- a/scripts/npm_publish_react.sh +++ b/scripts/npm_publish_react.sh @@ -7,4 +7,4 @@ mkdir -p ./dist/img cp ${PROJECT_ROOT}/misc/duckdb_wasm.svg ./dist/img/duckdb_wasm.svg ${PROJECT_ROOT}/scripts/build_duckdb_badge.sh > ./dist/img/duckdb_version_badge.svg -npm publish --ignore-scripts --access public ${TAG} +npm publish --ignore-scripts --access public --tag ${TAG} diff --git a/scripts/npm_publish_shell.sh b/scripts/npm_publish_shell.sh index 65a5f3b11..93cf6097f 100755 --- a/scripts/npm_publish_shell.sh +++ b/scripts/npm_publish_shell.sh @@ -7,4 +7,4 @@ mkdir -p ./dist/img cp ${PROJECT_ROOT}/misc/duckdb_wasm.svg ./dist/img/duckdb_wasm.svg ${PROJECT_ROOT}/scripts/build_duckdb_badge.sh > ./dist/img/duckdb_version_badge.svg -npm publish --ignore-scripts --access public ${TAG} +npm publish --ignore-scripts --access public --tag ${TAG} diff --git a/scripts/npm_version.sh b/scripts/npm_version.sh index 978872008..ec5f4da7b 100755 --- a/scripts/npm_version.sh +++ b/scripts/npm_version.sh @@ -6,7 +6,6 @@ PROJECT_ROOT="$(cd $(dirname "$BASH_SOURCE[0]") && cd .. && pwd)" &> /dev/null git describe --tags --long export VERSION=`git describe --tags --abbrev=0 | tr -d "v"` export DEV=`git describe --tags --long | cut -f2 -d-` -export TAG='' echo "VERSION=${VERSION}" echo "DEV=${DEV}" diff --git a/scripts/wasm_build_lib.sh b/scripts/wasm_build_lib.sh index 87c68084c..2983a6a78 100755 --- a/scripts/wasm_build_lib.sh +++ b/scripts/wasm_build_lib.sh @@ -19,6 +19,7 @@ CORES=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || sysctl -n hw.ncpu) ADDITIONAL_FLAGS= SUFFIX= +LINK_FLAGS= case $MODE in "debug") ADDITIONAL_FLAGS="-DCMAKE_BUILD_TYPE=Debug -DWASM_FAST_LINKING=1" ;; "dev") ADDITIONAL_FLAGS="-DCMAKE_BUILD_TYPE=RelWithDebInfo -DWASM_FAST_LINKING=1" ;; @@ -28,16 +29,17 @@ case $MODE in esac case $FEATURES in "mvp") - ADDITIONAL_FLAGS="${ADDITIONAL_FLAGS} -DDUCKDB_CUSTOM_PLATFORM=wasm_mvp" + ADDITIONAL_FLAGS="${ADDITIONAL_FLAGS} -DDUCKDB_CUSTOM_PLATFORM=wasm_mvp -DDUCKDB_EXPLICIT_PLATFORM=wasm_mvp" SUFFIX="-mvp" ;; "eh") - ADDITIONAL_FLAGS="${ADDITIONAL_FLAGS} -DWITH_WASM_EXCEPTIONS=1 -DDUCKDB_CUSTOM_PLATFORM=wasm_eh" + ADDITIONAL_FLAGS="${ADDITIONAL_FLAGS} -DWITH_WASM_EXCEPTIONS=1 -DDUCKDB_CUSTOM_PLATFORM=wasm_eh -DDUCKDB_EXPLICIT_PLATFORM=wasm_eh" SUFFIX="-eh" ;; "coi") - ADDITIONAL_FLAGS="${ADDITIONAL_FLAGS} -DWITH_WASM_EXCEPTIONS=1 -DWITH_WASM_THREADS=1 -DWITH_WASM_SIMD=1 -DWITH_WASM_BULK_MEMORY=1 -DDUCKDB_CUSTOM_PLATFORM=wasm_threads" + ADDITIONAL_FLAGS="${ADDITIONAL_FLAGS} -DWITH_WASM_EXCEPTIONS=1 -DWITH_WASM_THREADS=1 -DWITH_WASM_SIMD=1 -DWITH_WASM_BULK_MEMORY=1 -DDUCKDB_CUSTOM_PLATFORM=wasm_threads -DDUCKDB_EXPLICIT_PLATFORM=wasm_threads" SUFFIX="-coi" + LINK_FLAGS="-pthread -sSHARED_MEMORY=1" ;; *) ;; esac @@ -58,6 +60,8 @@ emcmake cmake \ -DCMAKE_C_COMPILER_LAUNCHER=ccache \ -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ -DDUCKDB_LOCATION=${DUCKDB_LOCATION} \ + -DWASM_LINK_FLAGS_EXT="${LINK_FLAGS}" \ + -DDUCKDB_EXTENSION_CONFIGS=extension_config_wasm.cmake \ ${ADDITIONAL_FLAGS} emmake make \ @@ -65,6 +69,10 @@ emmake make \ -j${CORES} \ duckdb_wasm +npm install -g js-beautify +js-beautify ${BUILD_DIR}/duckdb_wasm.js > ${BUILD_DIR}/beauty.js +awk '!(/var .*wasmExports\[/ || /var [_a-z0-9A-Z]+ = Module\[\"[_a-z0-9A-Z]+\"\] = [0-9]+;/) || /var _duckdb_web/ || /var _main/ || /var _malloc/ || /var _free/ || /var stack/ || /var ___dl_seterr/ || /var __em/ || /var _em/ || /var _pthread/' ${BUILD_DIR}/beauty.js > ${BUILD_DIR}/duckdb_wasm.js + cp ${BUILD_DIR}/duckdb_wasm.wasm ${DUCKDB_LIB_DIR}/duckdb${SUFFIX}.wasm sed \ -e "s/duckdb_wasm\.wasm/.\/duckdb${SUFFIX}.wasm/g" \ diff --git a/submodules/arrow b/submodules/arrow index ca1c30f60..6a2e19a85 160000 --- a/submodules/arrow +++ b/submodules/arrow @@ -1 +1 @@ -Subproject commit ca1c30f60d6419849dbc2a533bd0bcaff310185f +Subproject commit 6a2e19a852b367c72d7b12da4d104456491ed8b7 diff --git a/submodules/duckdb b/submodules/duckdb index 3c695d7ba..fa5c2fe15 160000 --- a/submodules/duckdb +++ b/submodules/duckdb @@ -1 +1 @@ -Subproject commit 3c695d7ba94d95d9facee48d395f46ed0bd72b46 +Subproject commit fa5c2fe15f3da5f32397b009196c0895fce60820 diff --git a/yarn.lock b/yarn.lock index 4a5ee39c6..df1ad334d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -468,7 +468,7 @@ "@duckdb/duckdb-wasm@file:packages/duckdb-wasm": version "1.11.0" dependencies: - apache-arrow "^14.0.1" + apache-arrow "^17.0.0" "@emotion/is-prop-valid@^0.8.2": version "0.8.8" @@ -482,120 +482,120 @@ resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.4.tgz#19bf0f5af19149111c40d98bb0cf82119f5d9eeb" integrity sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw== -"@esbuild/aix-ppc64@0.19.10": - version "0.19.10" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.19.10.tgz#fb3922a0183d27446de00cf60d4f7baaadf98d84" - integrity sha512-Q+mk96KJ+FZ30h9fsJl+67IjNJm3x2eX+GBWGmocAKgzp27cowCOOqSdscX80s0SpdFXZnIv/+1xD1EctFx96Q== - -"@esbuild/android-arm64@0.19.10": - version "0.19.10" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.10.tgz#ef31015416dd79398082409b77aaaa2ade4d531a" - integrity sha512-1X4CClKhDgC3by7k8aOWZeBXQX8dHT5QAMCAQDArCLaYfkppoARvh0fit3X2Qs+MXDngKcHv6XXyQCpY0hkK1Q== - -"@esbuild/android-arm@0.19.10": - version "0.19.10" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.10.tgz#1c23c7e75473aae9fb323be5d9db225142f47f52" - integrity sha512-7W0bK7qfkw1fc2viBfrtAEkDKHatYfHzr/jKAHNr9BvkYDXPcC6bodtm8AyLJNNuqClLNaeTLuwURt4PRT9d7w== - -"@esbuild/android-x64@0.19.10": - version "0.19.10" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.10.tgz#df6a4e6d6eb8da5595cfce16d4e3f6bc24464707" - integrity sha512-O/nO/g+/7NlitUxETkUv/IvADKuZXyH4BHf/g/7laqKC4i/7whLpB0gvpPc2zpF0q9Q6FXS3TS75QHac9MvVWw== - -"@esbuild/darwin-arm64@0.19.10": - version "0.19.10" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.10.tgz#8462a55db07c1b2fad61c8244ce04469ef1043be" - integrity sha512-YSRRs2zOpwypck+6GL3wGXx2gNP7DXzetmo5pHXLrY/VIMsS59yKfjPizQ4lLt5vEI80M41gjm2BxrGZ5U+VMA== - -"@esbuild/darwin-x64@0.19.10": - version "0.19.10" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.10.tgz#d1de20bfd41bb75b955ba86a6b1004539e8218c1" - integrity sha512-alfGtT+IEICKtNE54hbvPg13xGBe4GkVxyGWtzr+yHO7HIiRJppPDhOKq3zstTcVf8msXb/t4eavW3jCDpMSmA== - -"@esbuild/freebsd-arm64@0.19.10": - version "0.19.10" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.10.tgz#16904879e34c53a2e039d1284695d2db3e664d57" - integrity sha512-dMtk1wc7FSH8CCkE854GyGuNKCewlh+7heYP/sclpOG6Cectzk14qdUIY5CrKDbkA/OczXq9WesqnPl09mj5dg== - -"@esbuild/freebsd-x64@0.19.10": - version "0.19.10" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.10.tgz#8ad9e5ca9786ca3f1ef1411bfd10b08dcd9d4cef" - integrity sha512-G5UPPspryHu1T3uX8WiOEUa6q6OlQh6gNl4CO4Iw5PS+Kg5bVggVFehzXBJY6X6RSOMS8iXDv2330VzaObm4Ag== - -"@esbuild/linux-arm64@0.19.10": - version "0.19.10" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.10.tgz#d82cf2c590faece82d28bbf1cfbe36f22ae25bd2" - integrity sha512-QxaouHWZ+2KWEj7cGJmvTIHVALfhpGxo3WLmlYfJ+dA5fJB6lDEIg+oe/0//FuyVHuS3l79/wyBxbHr0NgtxJQ== - -"@esbuild/linux-arm@0.19.10": - version "0.19.10" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.10.tgz#477b8e7c7bcd34369717b04dd9ee6972c84f4029" - integrity sha512-j6gUW5aAaPgD416Hk9FHxn27On28H4eVI9rJ4az7oCGTFW48+LcgNDBN+9f8rKZz7EEowo889CPKyeaD0iw9Kg== - -"@esbuild/linux-ia32@0.19.10": - version "0.19.10" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.10.tgz#d55ff822cf5b0252a57112f86857ff23be6cab0e" - integrity sha512-4ub1YwXxYjj9h1UIZs2hYbnTZBtenPw5NfXCRgEkGb0b6OJ2gpkMvDqRDYIDRjRdWSe/TBiZltm3Y3Q8SN1xNg== - -"@esbuild/linux-loong64@0.19.10": - version "0.19.10" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.10.tgz#a9ad057d7e48d6c9f62ff50f6f208e331c4543c7" - integrity sha512-lo3I9k+mbEKoxtoIbM0yC/MZ1i2wM0cIeOejlVdZ3D86LAcFXFRdeuZmh91QJvUTW51bOK5W2BznGNIl4+mDaA== - -"@esbuild/linux-mips64el@0.19.10": - version "0.19.10" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.10.tgz#b011a96924773d60ebab396fbd7a08de66668179" - integrity sha512-J4gH3zhHNbdZN0Bcr1QUGVNkHTdpijgx5VMxeetSk6ntdt+vR1DqGmHxQYHRmNb77tP6GVvD+K0NyO4xjd7y4A== - -"@esbuild/linux-ppc64@0.19.10": - version "0.19.10" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.10.tgz#5d8b59929c029811e473f2544790ea11d588d4dd" - integrity sha512-tgT/7u+QhV6ge8wFMzaklOY7KqiyitgT1AUHMApau32ZlvTB/+efeCtMk4eXS+uEymYK249JsoiklZN64xt6oQ== - -"@esbuild/linux-riscv64@0.19.10": - version "0.19.10" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.10.tgz#292b06978375b271bd8bc0a554e0822957508d22" - integrity sha512-0f/spw0PfBMZBNqtKe5FLzBDGo0SKZKvMl5PHYQr3+eiSscfJ96XEknCe+JoOayybWUFQbcJTrk946i3j9uYZA== - -"@esbuild/linux-s390x@0.19.10": - version "0.19.10" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.10.tgz#d30af63530f8d4fa96930374c9dd0d62bf59e069" - integrity sha512-pZFe0OeskMHzHa9U38g+z8Yx5FNCLFtUnJtQMpwhS+r4S566aK2ci3t4NCP4tjt6d5j5uo4h7tExZMjeKoehAA== - -"@esbuild/linux-x64@0.19.10": - version "0.19.10" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.10.tgz#898c72eeb74d9f2fb43acf316125b475548b75ce" - integrity sha512-SpYNEqg/6pZYoc+1zLCjVOYvxfZVZj6w0KROZ3Fje/QrM3nfvT2llI+wmKSrWuX6wmZeTapbarvuNNK/qepSgA== - -"@esbuild/netbsd-x64@0.19.10": - version "0.19.10" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.10.tgz#fd473a5ae261b43eab6dad4dbd5a3155906e6c91" - integrity sha512-ACbZ0vXy9zksNArWlk2c38NdKg25+L9pr/mVaj9SUq6lHZu/35nx2xnQVRGLrC1KKQqJKRIB0q8GspiHI3J80Q== - -"@esbuild/openbsd-x64@0.19.10": - version "0.19.10" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.10.tgz#96eb8992e526717b5272321eaad3e21f3a608e46" - integrity sha512-PxcgvjdSjtgPMiPQrM3pwSaG4kGphP+bLSb+cihuP0LYdZv1epbAIecHVl5sD3npkfYBZ0ZnOjR878I7MdJDFg== - -"@esbuild/sunos-x64@0.19.10": - version "0.19.10" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.10.tgz#c16ee1c167f903eaaa6acf7372bee42d5a89c9bc" - integrity sha512-ZkIOtrRL8SEJjr+VHjmW0znkPs+oJXhlJbNwfI37rvgeMtk3sxOQevXPXjmAPZPigVTncvFqLMd+uV0IBSEzqA== - -"@esbuild/win32-arm64@0.19.10": - version "0.19.10" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.10.tgz#7e417d1971dbc7e469b4eceb6a5d1d667b5e3dcc" - integrity sha512-+Sa4oTDbpBfGpl3Hn3XiUe4f8TU2JF7aX8cOfqFYMMjXp6ma6NJDztl5FDG8Ezx0OjwGikIHw+iA54YLDNNVfw== - -"@esbuild/win32-ia32@0.19.10": - version "0.19.10" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.10.tgz#2b52dfec6cd061ecb36171c13bae554888b439e5" - integrity sha512-EOGVLK1oWMBXgfttJdPHDTiivYSjX6jDNaATeNOaCOFEVcfMjtbx7WVQwPSE1eIfCp/CaSF2nSrDtzc4I9f8TQ== - -"@esbuild/win32-x64@0.19.10": - version "0.19.10" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.10.tgz#bd123a74f243d2f3a1f046447bb9b363ee25d072" - integrity sha512-whqLG6Sc70AbU73fFYvuYzaE4MNMBIlR1Y/IrUeOXFrWHxBEjjbZaQ3IXIQS8wJdAzue2GwYZCjOrgrU1oUHoA== +"@esbuild/aix-ppc64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz#a70f4ac11c6a1dfc18b8bbb13284155d933b9537" + integrity sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g== + +"@esbuild/android-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz#db1c9202a5bc92ea04c7b6840f1bbe09ebf9e6b9" + integrity sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg== + +"@esbuild/android-arm@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.20.2.tgz#3b488c49aee9d491c2c8f98a909b785870d6e995" + integrity sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w== + +"@esbuild/android-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.20.2.tgz#3b1628029e5576249d2b2d766696e50768449f98" + integrity sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg== + +"@esbuild/darwin-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz#6e8517a045ddd86ae30c6608c8475ebc0c4000bb" + integrity sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA== + +"@esbuild/darwin-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz#90ed098e1f9dd8a9381695b207e1cff45540a0d0" + integrity sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA== + +"@esbuild/freebsd-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz#d71502d1ee89a1130327e890364666c760a2a911" + integrity sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw== + +"@esbuild/freebsd-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz#aa5ea58d9c1dd9af688b8b6f63ef0d3d60cea53c" + integrity sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw== + +"@esbuild/linux-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz#055b63725df678379b0f6db9d0fa85463755b2e5" + integrity sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A== + +"@esbuild/linux-arm@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz#76b3b98cb1f87936fbc37f073efabad49dcd889c" + integrity sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg== + +"@esbuild/linux-ia32@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz#c0e5e787c285264e5dfc7a79f04b8b4eefdad7fa" + integrity sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig== + +"@esbuild/linux-loong64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz#a6184e62bd7cdc63e0c0448b83801001653219c5" + integrity sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ== + +"@esbuild/linux-mips64el@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz#d08e39ce86f45ef8fc88549d29c62b8acf5649aa" + integrity sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA== + +"@esbuild/linux-ppc64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz#8d252f0b7756ffd6d1cbde5ea67ff8fd20437f20" + integrity sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg== + +"@esbuild/linux-riscv64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz#19f6dcdb14409dae607f66ca1181dd4e9db81300" + integrity sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg== + +"@esbuild/linux-s390x@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz#3c830c90f1a5d7dd1473d5595ea4ebb920988685" + integrity sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ== + +"@esbuild/linux-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz#86eca35203afc0d9de0694c64ec0ab0a378f6fff" + integrity sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw== + +"@esbuild/netbsd-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz#e771c8eb0e0f6e1877ffd4220036b98aed5915e6" + integrity sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ== + +"@esbuild/openbsd-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz#9a795ae4b4e37e674f0f4d716f3e226dd7c39baf" + integrity sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ== + +"@esbuild/sunos-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz#7df23b61a497b8ac189def6e25a95673caedb03f" + integrity sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w== + +"@esbuild/win32-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz#f1ae5abf9ca052ae11c1bc806fb4c0f519bacf90" + integrity sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ== + +"@esbuild/win32-ia32@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz#241fe62c34d8e8461cd708277813e1d0ba55ce23" + integrity sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ== + +"@esbuild/win32-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz#9c907b21e30a52db959ba4f80bb01a0cc403d5cc" + integrity sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ== "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": version "4.4.0" @@ -624,18 +624,18 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.56.0": - version "8.56.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.56.0.tgz#ef20350fec605a7f7035a01764731b2de0f3782b" - integrity sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A== +"@eslint/js@8.57.0": + version "8.57.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f" + integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== -"@humanwhocodes/config-array@^0.11.13": - version "0.11.13" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.13.tgz#075dc9684f40a531d9b26b0822153c1e832ee297" - integrity sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ== +"@humanwhocodes/config-array@^0.11.14": + version "0.11.14" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" + integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== dependencies: - "@humanwhocodes/object-schema" "^2.0.1" - debug "^4.1.1" + "@humanwhocodes/object-schema" "^2.0.2" + debug "^4.3.1" minimatch "^3.0.5" "@humanwhocodes/module-importer@^1.0.1": @@ -643,10 +643,10 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/object-schema@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz#e5211452df060fa8522b55c7b3c0c4d1981cb044" - integrity sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw== +"@humanwhocodes/object-schema@^2.0.2": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" + integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== "@isaacs/cliui@^8.0.2": version "8.0.2" @@ -695,6 +695,11 @@ resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.4.tgz#b876e3feefb9c8d3aa84014da28b5e52a0640d72" integrity sha512-cz8HFjOFfUBtvN+NXYSFMHYRdxZMaEl0XypVrhzxBgadKIXhIkRd8aMeHhmF56Sl7SuS8OnUpQ73/k9LE4VnLg== +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + "@jridgewell/set-array@^1.0.1": version "1.1.2" resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" @@ -718,6 +723,11 @@ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.10.tgz#baf57b4e2a690d4f38560171f91783656b7f8186" integrity sha512-Ht8wIW5v165atIX1p+JvKR5ONzUyF4Ac8DZIQ5kZs9zrb6M8SJNXpx1zn04rn65VjBMygRoMXcyYwNK0fT7bEg== +"@jridgewell/sourcemap-codec@^1.4.14": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + "@jridgewell/trace-mapping@^0.3.0": version "0.3.4" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz#f6a0832dffd5b8a6aaa633b7d9f8e8e94c83a0c3" @@ -726,7 +736,15 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": +"@jridgewell/trace-mapping@^0.3.20": + version "0.3.23" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.23.tgz#afc96847f3f07841477f303eed687707a5aacd80" + integrity sha512-9/4foRoUKp8s96tSkh8DlAAc5A0Ty8vLXld+l9gjKKY6ckwI8G15f0hskGmuLZu78ZlGa1vtsfOa+lnB4vG6Jg== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@jridgewell/trace-mapping@^0.3.9": version "0.3.18" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6" integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== @@ -791,16 +809,17 @@ resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f" integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== -"@puppeteer/browsers@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@puppeteer/browsers/-/browsers-1.9.0.tgz#dfd0aad0bdc039572f1b57648f189525d627b7ff" - integrity sha512-QwguOLy44YBGC8vuPP2nmpX4MUN2FzWbsnvZJtiCzecU3lHmVZkaC1tq6rToi9a200m8RzlVtDyxCS0UIDrxUg== +"@puppeteer/browsers@2.2.3": + version "2.2.3" + resolved "https://registry.yarnpkg.com/@puppeteer/browsers/-/browsers-2.2.3.tgz#ad6b79129c50825e77ddaba082680f4dad0b674e" + integrity sha512-bJ0UBsk0ESOs6RFcLXOt99a3yTDcOKlzfjad+rhFwdaG1Lu/Wzq58GHYCDTlZ9z6mldf4g+NTb+TXEfe0PpnsQ== dependencies: debug "4.3.4" extract-zip "2.0.1" progress "2.0.3" - proxy-agent "6.3.1" - tar-fs "3.0.4" + proxy-agent "6.4.0" + semver "7.6.0" + tar-fs "3.0.5" unbzip2-stream "1.4.3" yargs "17.7.2" @@ -826,10 +845,10 @@ resolved "https://registry.yarnpkg.com/@react-dnd/shallowequal/-/shallowequal-4.0.1.tgz#60582702124b494c028215895cc938c56909feac" integrity sha512-GL86egYUtKjzUlLHP0ePl9ghHnfUjvdK/g0W3CrZg4vpfyB7YLpv3bsmNJyD59j/c+I6EEDuH178LlUdsMaFfg== -"@remix-run/router@1.14.2": - version "1.14.2" - resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.14.2.tgz#4d58f59908d9197ba3179310077f25c88e49ed17" - integrity sha512-ACXpdMM9hmKZww21yEqWwiLws/UPLhNKvimN8RrYSqPSvB3ov7sLvAcfvaxePeLvccTQKGdkDIhLYApZVDFuKg== +"@remix-run/router@1.19.1": + version "1.19.1" + resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.19.1.tgz#984771bfd1de2715f42394c87fb716c1349e014f" + integrity sha512-S45oynt/WH19bHbIXjtli6QmwNYvaz+vtnubvNpNDvUOoA/OWh6j1OikIP3G+v5GHdxyC6EXoChG3HgYGEUfcg== "@restart/hooks@^0.4.9": version "0.4.9" @@ -853,6 +872,11 @@ uncontrollable "^8.0.1" warning "^4.0.3" +"@sindresorhus/merge-streams@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/merge-streams/-/merge-streams-1.0.0.tgz#9cd84cc15bc865a5ca35fcaae198eb899f7b5c90" + integrity sha512-rUV5WyJrJLoloD4NDN1V1+LDMDWOa4OTsT4yYJwQNpTU6FWxkxHpL7eu4w+DmiH8x/EAM1otkPE1+LaspIbplw== + "@socket.io/base64-arraybuffer@~1.0.2": version "1.0.2" resolved "https://registry.yarnpkg.com/@socket.io/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz#568d9beae00b0d835f4f8c53fd55714986492e61" @@ -865,6 +889,13 @@ dependencies: tslib "^2.4.0" +"@swc/helpers@^0.5.11": + version "0.5.12" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.12.tgz#37aaca95284019eb5d2207101249435659709f4b" + integrity sha512-KMZNXiGibsW9kvZAO1Pam2JPTDBm+KSHMMHWdsyI/1DbIZjT2A6Gy3hblVXUMEDvUAKq+e0vL0X0o54owWji7g== + dependencies: + tslib "^2.4.0" + "@tootallnate/quickjs-emscripten@^0.23.0": version "0.23.0" resolved "https://registry.yarnpkg.com/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz#db4ecfd499a9765ab24002c3b696d02e6d32a12c" @@ -878,10 +909,10 @@ "@types/connect" "*" "@types/node" "*" -"@types/bonjour@^3.5.9": - version "3.5.9" - resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.9.tgz#3cc4e5135dbb5940fc6051604809234612f89cb4" - integrity sha512-VkZUiYevvtPyFu5XtpYw9a8moCSzxgjs5PAFF4yXjA7eYHvzBlXe+eJdqBBNWWVzI1r7Ki0KxMYvaQuhm+6f5A== +"@types/bonjour@^3.5.13": + version "3.5.13" + resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.13.tgz#adf90ce1a105e81dd1f9c61fdc5afda1bfb92956" + integrity sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ== dependencies: "@types/node" "*" @@ -890,20 +921,30 @@ resolved "https://registry.yarnpkg.com/@types/command-line-args/-/command-line-args-5.2.0.tgz#adbb77980a1cc376bb208e3f4142e907410430f6" integrity sha512-UuKzKpJJ/Ief6ufIaIzr3A/0XnluX7RvFgwkV89Yzvm77wCh1kFaFmqN8XEnGcN62EuHdedQjEMb8mYxFLGPyA== +"@types/command-line-args@^5.2.3": + version "5.2.3" + resolved "https://registry.yarnpkg.com/@types/command-line-args/-/command-line-args-5.2.3.tgz#553ce2fd5acf160b448d307649b38ffc60d39639" + integrity sha512-uv0aG6R0Y8WHZLTamZwtfsDLVRnOa+n+n5rEvFWL5Na5gZ8V2Teab/duDPFzIIIhs9qizDpcavCusCLJZu62Kw== + "@types/command-line-usage@5.0.2": version "5.0.2" resolved "https://registry.yarnpkg.com/@types/command-line-usage/-/command-line-usage-5.0.2.tgz#ba5e3f6ae5a2009d466679cc431b50635bf1a064" integrity sha512-n7RlEEJ+4x4TS7ZQddTmNSxP+zziEG0TNsMfiRIxcIVXt71ENJ9ojeXmGO3wPoTdn7pJcU2xc3CJYMktNT6DPg== +"@types/command-line-usage@^5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@types/command-line-usage/-/command-line-usage-5.0.4.tgz#374e4c62d78fbc5a670a0f36da10235af879a0d5" + integrity sha512-BwR5KP3Es/CSht0xqBcUXS3qCAUVXwpRKsV2+arxeb65atasuXG9LykC9Ab10Cw3s2raH92ZqOeILaQbsB2ACg== + "@types/component-emitter@^1.2.10": version "1.2.10" resolved "https://registry.yarnpkg.com/@types/component-emitter/-/component-emitter-1.2.10.tgz#ef5b1589b9f16544642e473db5ea5639107ef3ea" integrity sha512-bsjleuRKWmGqajMerkzox19aGbscQX5rmmvvXl3wlIp5gMG1HgkiwPxsN5p070fBDKTNSPgojVbuY1+HWMbFhg== -"@types/connect-history-api-fallback@^1.3.5": - version "1.3.5" - resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz#d1f7a8a09d0ed5a57aee5ae9c18ab9b803205dae" - integrity sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw== +"@types/connect-history-api-fallback@^1.5.4": + version "1.5.4" + resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz#7de71645a103056b48ac3ce07b3520b819c1d5b3" + integrity sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw== dependencies: "@types/express-serve-static-core" "*" "@types/node" "*" @@ -946,12 +987,12 @@ "@types/estree" "*" "@types/json-schema" "*" -"@types/estree@*", "@types/estree@^1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194" - integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA== +"@types/estree@*", "@types/estree@^1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" + integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== -"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.18": +"@types/express-serve-static-core@*": version "4.17.26" resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.26.tgz#5d9a8eeecb9d5f9d7fc1d85f541512a84638ae88" integrity sha512-zeu3tpouA043RHxW0gzRxwCHchMgftE8GArRsvYT0ByDMbn19olQHx5jLue0LxWY6iYtXb7rXmuVtSkhy9YZvQ== @@ -960,13 +1001,23 @@ "@types/qs" "*" "@types/range-parser" "*" -"@types/express@*", "@types/express@^4.17.13": - version "4.17.13" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.13.tgz#a76e2995728999bab51a33fabce1d705a3709034" - integrity sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA== +"@types/express-serve-static-core@^4.17.33": + version "4.17.43" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.43.tgz#10d8444be560cb789c4735aea5eac6e5af45df54" + integrity sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + "@types/send" "*" + +"@types/express@*", "@types/express@^4.17.21": + version "4.17.21" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.21.tgz#c26d4a151e60efe0084b23dc3369ebc631ed192d" + integrity sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ== dependencies: "@types/body-parser" "*" - "@types/express-serve-static-core" "^4.17.18" + "@types/express-serve-static-core" "^4.17.33" "@types/qs" "*" "@types/serve-static" "*" @@ -990,6 +1041,11 @@ resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.0.0.tgz#563c1c6c132cd204e71512f9c0b394ff90d3fae7" integrity sha512-NZwaaynfs1oIoLAV1vg18e7QMVDvw+6SQrdJc8w3BwUaoroVSf6EBj/Sk4PBWGxsq0dzhA2drbsuMC1/6C6KgQ== +"@types/http-errors@*": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f" + integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA== + "@types/http-proxy@^1.17.8": version "1.17.8" resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.8.tgz#968c66903e7e42b483608030ee85800f22d03f55" @@ -1017,15 +1073,27 @@ resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.202.tgz#f09dbd2fb082d507178b2f2a5c7e74bd72ff98f8" integrity sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ== +"@types/mime@*": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.4.tgz#2198ac274de6017b44d941e00261d5bc6a0e0a45" + integrity sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw== + "@types/mime@^1": version "1.3.2" resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== -"@types/node@*", "@types/node@>=10.0.0", "@types/node@^20.10.7": - version "20.10.7" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.10.7.tgz#40fe8faf25418a75de9fe68a8775546732a3a901" - integrity sha512-fRbIKb8C/Y2lXxB5eVMj4IU7xpdox0Lh8bUPEdtLysaylsml1hOOx1+STloRs/B9nf7C6kPRmmg/V7aQW7usNg== +"@types/node-forge@^1.3.0": + version "1.3.11" + resolved "https://registry.yarnpkg.com/@types/node-forge/-/node-forge-1.3.11.tgz#0972ea538ddb0f4d9c2fa0ec5db5724773a604da" + integrity sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ== + dependencies: + "@types/node" "*" + +"@types/node@*", "@types/node@>=10.0.0", "@types/node@^20.12.7": + version "20.12.7" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.7.tgz#04080362fa3dd6c5822061aa3124f5c152cff384" + integrity sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg== dependencies: undici-types "~5.26.4" @@ -1039,6 +1107,13 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.27.tgz#4141fcad57c332a120591de883e26fe4bb14aaea" integrity sha512-qZdePUDSLAZRXXV234bLBEUM0nAQjoxbcSwp1rqSMUe1rZ47mwU6OjciR/JvF1Oo8mc0ys6GE0ks0HGgqAZoGg== +"@types/node@^20.13.0": + version "20.14.13" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.13.tgz#bf4fe8959ae1c43bc284de78bd6c01730933736b" + integrity sha512-+bHoGiZb8UiQ0+WEtmph2IWQCjIqg8MDZMAV+ppRRhUZnquF5mQkP/9vpSwJClEiSM/C7fZZExPzfU0vJTyp8w== + dependencies: + undici-types "~5.26.4" + "@types/pad-left@2.1.1": version "2.1.1" resolved "https://registry.yarnpkg.com/@types/pad-left/-/pad-left-2.1.1.tgz#17d906fc75804e1cc722da73623f1d978f16a137" @@ -1121,10 +1196,10 @@ "@types/scheduler" "*" csstype "^3.0.2" -"@types/retry@^0.12.0": - version "0.12.1" - resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.1.tgz#d8f1c0d0dc23afad6dc16a9e993a0865774b4065" - integrity sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g== +"@types/retry@0.12.2": + version "0.12.2" + resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.2.tgz#ed279a64fa438bb69f2480eda44937912bb7480a" + integrity sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow== "@types/scheduler@*": version "0.16.2" @@ -1136,25 +1211,34 @@ resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.0.tgz#591c1ce3a702c45ee15f47a42ade72c2fd78978a" integrity sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw== -"@types/serve-index@^1.9.1": - version "1.9.1" - resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.1.tgz#1b5e85370a192c01ec6cec4735cf2917337a6278" - integrity sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg== +"@types/send@*": + version "0.17.4" + resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.4.tgz#6619cd24e7270793702e4e6a4b958a9010cfc57a" + integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA== + dependencies: + "@types/mime" "^1" + "@types/node" "*" + +"@types/serve-index@^1.9.4": + version "1.9.4" + resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.4.tgz#e6ae13d5053cb06ed36392110b4f9a49ac4ec898" + integrity sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug== dependencies: "@types/express" "*" -"@types/serve-static@*", "@types/serve-static@^1.13.10": - version "1.13.10" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.10.tgz#f5e0ce8797d2d7cc5ebeda48a52c96c4fa47a8d9" - integrity sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ== +"@types/serve-static@*", "@types/serve-static@^1.15.5": + version "1.15.5" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.5.tgz#15e67500ec40789a1e8c9defc2d32a896f05b033" + integrity sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ== dependencies: - "@types/mime" "^1" + "@types/http-errors" "*" + "@types/mime" "*" "@types/node" "*" -"@types/sockjs@^0.3.33": - version "0.3.33" - resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.33.tgz#570d3a0b99ac995360e3136fd6045113b1bd236f" - integrity sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw== +"@types/sockjs@^0.3.36": + version "0.3.36" + resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.36.tgz#ce322cf07bcc119d4cbf7f88954f3a3bd0f67535" + integrity sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q== dependencies: "@types/node" "*" @@ -1176,10 +1260,10 @@ resolved "https://registry.yarnpkg.com/@types/warning/-/warning-3.0.0.tgz#0d2501268ad8f9962b740d387c4654f5f8e23e52" integrity sha1-DSUBJorY+ZYrdA04fEZU9fjiPlI= -"@types/ws@^8.5.5": - version "8.5.8" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.8.tgz#13efec7bd439d0bdf2af93030804a94f163b1430" - integrity sha512-flUksGIQCnJd6sZ1l5dqCEG/ksaoAg/eUwiLAGTJQcfgvZJKF++Ta4bJA6A5aPSJmsr+xlseHn4KLgVlNnvPTg== +"@types/ws@^8.5.10": + version "8.5.10" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.10.tgz#4acfb517970853fa6574a3a6886791d04a396787" + integrity sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A== dependencies: "@types/node" "*" @@ -1190,16 +1274,16 @@ dependencies: "@types/node" "*" -"@typescript-eslint/eslint-plugin@^6.18.0": - version "6.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.18.0.tgz#94b86f3c25b468c714a04bd490017ecec2fd3746" - integrity sha512-3lqEvQUdCozi6d1mddWqd+kf8KxmGq2Plzx36BlkjuQe3rSTm/O98cLf0A4uDO+a5N1KD2SeEEl6fW97YHY+6w== +"@typescript-eslint/eslint-plugin@^6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz#30830c1ca81fd5f3c2714e524c4303e0194f9cd3" + integrity sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA== dependencies: "@eslint-community/regexpp" "^4.5.1" - "@typescript-eslint/scope-manager" "6.18.0" - "@typescript-eslint/type-utils" "6.18.0" - "@typescript-eslint/utils" "6.18.0" - "@typescript-eslint/visitor-keys" "6.18.0" + "@typescript-eslint/scope-manager" "6.21.0" + "@typescript-eslint/type-utils" "6.21.0" + "@typescript-eslint/utils" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" debug "^4.3.4" graphemer "^1.4.0" ignore "^5.2.4" @@ -1207,47 +1291,47 @@ semver "^7.5.4" ts-api-utils "^1.0.1" -"@typescript-eslint/parser@^6.18.0": - version "6.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.18.0.tgz#d494161d64832e869f0a6acc6000a2cdff858383" - integrity sha512-v6uR68SFvqhNQT41frCMCQpsP+5vySy6IdgjlzUWoo7ALCnpaWYcz/Ij2k4L8cEsL0wkvOviCMpjmtRtHNOKzA== +"@typescript-eslint/parser@^6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.21.0.tgz#af8fcf66feee2edc86bc5d1cf45e33b0630bf35b" + integrity sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ== dependencies: - "@typescript-eslint/scope-manager" "6.18.0" - "@typescript-eslint/types" "6.18.0" - "@typescript-eslint/typescript-estree" "6.18.0" - "@typescript-eslint/visitor-keys" "6.18.0" + "@typescript-eslint/scope-manager" "6.21.0" + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/typescript-estree" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@6.18.0": - version "6.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.18.0.tgz#24ca6fc1f4a2afa71122dcfca9282878687d9997" - integrity sha512-o/UoDT2NgOJ2VfHpfr+KBY2ErWvCySNUIX/X7O9g8Zzt/tXdpfEU43qbNk8LVuWUT2E0ptzTWXh79i74PP0twA== +"@typescript-eslint/scope-manager@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz#ea8a9bfc8f1504a6ac5d59a6df308d3a0630a2b1" + integrity sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg== dependencies: - "@typescript-eslint/types" "6.18.0" - "@typescript-eslint/visitor-keys" "6.18.0" + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" -"@typescript-eslint/type-utils@6.18.0": - version "6.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.18.0.tgz#a492da599da5c38c70aa9ff9bfb473961b8ae663" - integrity sha512-ZeMtrXnGmTcHciJN1+u2CigWEEXgy1ufoxtWcHORt5kGvpjjIlK9MUhzHm4RM8iVy6dqSaZA/6PVkX6+r+ChjQ== +"@typescript-eslint/type-utils@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz#6473281cfed4dacabe8004e8521cee0bd9d4c01e" + integrity sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag== dependencies: - "@typescript-eslint/typescript-estree" "6.18.0" - "@typescript-eslint/utils" "6.18.0" + "@typescript-eslint/typescript-estree" "6.21.0" + "@typescript-eslint/utils" "6.21.0" debug "^4.3.4" ts-api-utils "^1.0.1" -"@typescript-eslint/types@6.18.0": - version "6.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.18.0.tgz#ffce610a1540c17cf7d8ecf2bb34b8b0e2e77101" - integrity sha512-/RFVIccwkwSdW/1zeMx3hADShWbgBxBnV/qSrex6607isYjj05t36P6LyONgqdUrNLl5TYU8NIKdHUYpFvExkA== +"@typescript-eslint/types@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.21.0.tgz#205724c5123a8fef7ecd195075fa6e85bac3436d" + integrity sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg== -"@typescript-eslint/typescript-estree@6.18.0": - version "6.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.18.0.tgz#1c357c3ca435c3cfa2af6b9daf45ca0bc2bb059a" - integrity sha512-klNvl+Ql4NsBNGB4W9TZ2Od03lm7aGvTbs0wYaFYsplVPhr+oeXjlPZCDI4U9jgJIDK38W1FKhacCFzCC+nbIg== +"@typescript-eslint/typescript-estree@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz#c47ae7901db3b8bddc3ecd73daff2d0895688c46" + integrity sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ== dependencies: - "@typescript-eslint/types" "6.18.0" - "@typescript-eslint/visitor-keys" "6.18.0" + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" @@ -1255,25 +1339,25 @@ semver "^7.5.4" ts-api-utils "^1.0.1" -"@typescript-eslint/utils@6.18.0": - version "6.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.18.0.tgz#4d07c9c08f84b9939a1aca7aef98c8f378936142" - integrity sha512-wiKKCbUeDPGaYEYQh1S580dGxJ/V9HI7K5sbGAVklyf+o5g3O+adnS4UNJajplF4e7z2q0uVBaTdT/yLb4XAVA== +"@typescript-eslint/utils@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.21.0.tgz#4714e7a6b39e773c1c8e97ec587f520840cd8134" + integrity sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ== dependencies: "@eslint-community/eslint-utils" "^4.4.0" "@types/json-schema" "^7.0.12" "@types/semver" "^7.5.0" - "@typescript-eslint/scope-manager" "6.18.0" - "@typescript-eslint/types" "6.18.0" - "@typescript-eslint/typescript-estree" "6.18.0" + "@typescript-eslint/scope-manager" "6.21.0" + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/typescript-estree" "6.21.0" semver "^7.5.4" -"@typescript-eslint/visitor-keys@6.18.0": - version "6.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.18.0.tgz#3c8733737786fa6c78a347b4fa306ae7155b560f" - integrity sha512-1wetAlSZpewRDb2h9p/Q8kRjdGuqdTAQbkJIOUMLug2LBLG+QOjiWoSj6/3B/hA9/tVTFFdtiKvAYoYnSRW/RA== +"@typescript-eslint/visitor-keys@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz#87a99d077aa507e20e238b11d56cc26ade45fe47" + integrity sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A== dependencies: - "@typescript-eslint/types" "6.18.0" + "@typescript-eslint/types" "6.21.0" eslint-visitor-keys "^3.4.1" "@ungap/structured-clone@^1.2.0": @@ -1500,14 +1584,14 @@ ajv-keywords@^3.5.2: resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== -ajv-keywords@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.0.0.tgz#d01b3b21715b2f63d02aa511b82fc6eb3b30083c" - integrity sha512-ULd1QMjRoH6JDNUQIfDLrlE+OgZlFaxyYCjzt58uNuUQtKXt8/U+vK/8Ql0gyn/C5mqZzUWtKMqr/4YquvTrWA== +ajv-keywords@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" + integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== dependencies: fast-deep-equal "^3.1.3" -ajv@8.11.0, ajv@^8.0.0, ajv@^8.8.0: +ajv@8.11.0: version "8.11.0" resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f" integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== @@ -1527,6 +1611,16 @@ ajv@^6.12.4, ajv@^6.12.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ajv@^8.0.0, ajv@^8.9.0: + version "8.12.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" + integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + anafanafo@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anafanafo/-/anafanafo-2.0.0.tgz#43f56274680bc553dd67a9625a920f88d0057b5c" @@ -1611,7 +1705,7 @@ anymatch@~3.1.2: text-encoding-utf-8 "^1.0.2" tslib "^1.12.0" -apache-arrow@^14.0.1, apache-arrow@^14.0.2: +apache-arrow@^14.0.2: version "14.0.2" resolved "https://registry.yarnpkg.com/apache-arrow/-/apache-arrow-14.0.2.tgz#737f7b8211ef99a2c137dcc9d2001b469efb0344" integrity sha512-EBO2xJN36/XoY81nhLcwCJgFwkboDZeyNQ+OPsG7bCoQjc2BT0aTyH/MR6SrL+LirSNz+cYqjGRlupMMlP1aEg== @@ -1627,6 +1721,21 @@ apache-arrow@^14.0.1, apache-arrow@^14.0.2: pad-left "^2.1.0" tslib "^2.5.3" +apache-arrow@^17.0.0: + version "17.0.0" + resolved "https://registry.yarnpkg.com/apache-arrow/-/apache-arrow-17.0.0.tgz#73d98566c86352c9a0314c03890dbd7211073827" + integrity sha512-X0p7auzdnGuhYMVKYINdQssS4EcKec9TCXyez/qtJt32DrIMGbzqiaMiQ0X6fQlQpw8Fl0Qygcv4dfRAr5Gu9Q== + dependencies: + "@swc/helpers" "^0.5.11" + "@types/command-line-args" "^5.2.3" + "@types/command-line-usage" "^5.0.4" + "@types/node" "^20.13.0" + command-line-args "^5.2.1" + command-line-usage "^7.0.1" + flatbuffers "^24.3.25" + json-bignum "^0.0.3" + tslib "^2.6.2" + append-transform@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-2.0.0.tgz#99d9d29c7b38391e6f428d28ce136551f0b77e12" @@ -1695,33 +1804,28 @@ array-back@^6.2.2: resolved "https://registry.yarnpkg.com/array-back/-/array-back-6.2.2.tgz#f567d99e9af88a6d3d2f9dfcc21db6f9ba9fd157" integrity sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw== -array-buffer-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" - integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== +array-buffer-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" + integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== dependencies: - call-bind "^1.0.2" - is-array-buffer "^3.0.1" + call-bind "^1.0.5" + is-array-buffer "^3.0.4" array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= -array-flatten@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" - integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== - -array-includes@^3.1.3, array-includes@^3.1.6: - version "3.1.6" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" - integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== +array-includes@^3.1.3, array-includes@^3.1.7: + version "3.1.7" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.7.tgz#8cd2e01b26f7a3086cbc87271593fe921c62abda" + integrity sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - get-intrinsic "^1.1.3" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" is-string "^1.0.7" array-union@^2.1.0: @@ -1729,37 +1833,60 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array.prototype.flatmap@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" - integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== +array.prototype.findlast@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/array.prototype.findlast/-/array.prototype.findlast-1.2.4.tgz#eeb9e45fc894055c82e5675c463e8077b827ad36" + integrity sha512-BMtLxpV+8BD+6ZPFIWmnUBpQoy+A+ujcg4rhp2iwCRJYA7PEh2MS4NL3lz8EiDlLrJPp2hg9qWihr5pd//jcGw== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - es-shim-unscopables "^1.0.0" + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.3.0" + es-shim-unscopables "^1.0.2" -array.prototype.tosorted@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz#ccf44738aa2b5ac56578ffda97c03fd3e23dd532" - integrity sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ== +array.prototype.flatmap@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" + integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" - get-intrinsic "^1.1.3" -arraybuffer.prototype.slice@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz#9b5ea3868a6eebc30273da577eb888381c0044bb" - integrity sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw== +array.prototype.toreversed@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz#b989a6bf35c4c5051e1dc0325151bf8088954eba" + integrity sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA== dependencies: - array-buffer-byte-length "^1.0.0" call-bind "^1.0.2" define-properties "^1.2.0" - get-intrinsic "^1.2.1" - is-array-buffer "^3.0.2" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +array.prototype.tosorted@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz#c8c89348337e51b8a3c48a9227f9ce93ceedcba8" + integrity sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg== + dependencies: + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.1.0" + es-shim-unscopables "^1.0.2" + +arraybuffer.prototype.slice@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" + integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== + dependencies: + array-buffer-byte-length "^1.0.1" + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.2.1" + get-intrinsic "^1.2.3" + is-array-buffer "^3.0.4" is-shared-array-buffer "^1.0.2" assert@^2.1.0: @@ -1804,6 +1931,13 @@ available-typed-arrays@^1.0.5: resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== +available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" + axios@^0.26.1: version "0.26.1" resolved "https://registry.yarnpkg.com/axios/-/axios-0.26.1.tgz#1ede41c51fcf51bbbd6fd43669caaa4f0495aaa9" @@ -1829,6 +1963,39 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +bare-events@^2.0.0, bare-events@^2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/bare-events/-/bare-events-2.2.2.tgz#a98a41841f98b2efe7ecc5c5468814469b018078" + integrity sha512-h7z00dWdG0PYOQEvChhOSWvOfkIKsdZGkWr083FgN/HyoQuebSew/cgirYqh9SCuy/hRvxc5Vy6Fw8xAmYHLkQ== + +bare-fs@^2.1.1: + version "2.3.0" + resolved "https://registry.yarnpkg.com/bare-fs/-/bare-fs-2.3.0.tgz#0872f8e33cf291c9fd527d827154f156a298d402" + integrity sha512-TNFqa1B4N99pds2a5NYHR15o0ZpdNKbAeKTE/+G6ED/UeOavv8RY3dr/Fu99HW3zU3pXpo2kDNO8Sjsm2esfOw== + dependencies: + bare-events "^2.0.0" + bare-path "^2.0.0" + bare-stream "^1.0.0" + +bare-os@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/bare-os/-/bare-os-2.3.0.tgz#718e680b139effff0624a7421c098e7a2c2d63da" + integrity sha512-oPb8oMM1xZbhRQBngTgpcQ5gXw6kjOaRsSWsIeNyRxGed2w/ARyP7ScBYpWR1qfX2E5rS3gBw6OWcSQo+s+kUg== + +bare-path@^2.0.0, bare-path@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/bare-path/-/bare-path-2.1.2.tgz#7a0940d34ebe65f7e179fa61ed8d49d9dc151d67" + integrity sha512-o7KSt4prEphWUHa3QUwCxUI00R86VdjiuxmJK0iNVDHYPGo+HsDaVCnqCmPbf/MiW1ok8F4p3m8RTHlWk8K2ig== + dependencies: + bare-os "^2.1.0" + +bare-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/bare-stream/-/bare-stream-1.0.0.tgz#25c3e56198d922187320c3f8c52d75c4051178b4" + integrity sha512-KhNUoDL40iP4gFaLSsoGE479t0jHijfYdIcxRn/XtezA2BaUD0NRf/JGRpsMq6dMNM+SrCrB0YSSo/5wBY4rOQ== + dependencies: + streamx "^2.16.1" + base64-js@^1.3.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" @@ -1896,25 +2063,23 @@ body-parser@1.19.2, body-parser@^1.19.0: raw-body "2.4.3" type-is "~1.6.18" -bonjour-service@^1.0.11: - version "1.0.11" - resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.0.11.tgz#5418e5c1ac91c89a406f853a942e7892829c0d89" - integrity sha512-drMprzr2rDTCtgEE3VgdA9uUFaUHF+jXduwYSThHJnKMYM+FhI9Z3ph+TX3xy0LtgYHae6CHYPJ/2UnK8nQHcA== +bonjour-service@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.2.1.tgz#eb41b3085183df3321da1264719fbada12478d02" + integrity sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw== dependencies: - array-flatten "^2.1.2" - dns-equal "^1.0.0" fast-deep-equal "^3.1.3" - multicast-dns "^7.2.4" + multicast-dns "^7.2.5" boolbase@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= -bootstrap@^5.3.2: - version "5.3.2" - resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-5.3.2.tgz#97226583f27aae93b2b28ab23f4c114757ff16ae" - integrity sha512-D32nmNWiQHo94BKHLmOrdjlL05q1c8oxbtBphQFb9Z5to6eGRDCm0QgeaZ4zFBHzfg2++rqa2JkqCcxDy0sH0g== +bootstrap@^5.3.3: + version "5.3.3" + resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-5.3.3.tgz#de35e1a765c897ac940021900fcbb831602bac38" + integrity sha512-8HLCdWgyoMguSO9o+aH+iuZ+aht+mzW0u3HIMzVu7Srrpv7EBBxTnrFlSCskwdY1+EOFQSm7uMJhNQHkdPcmjg== boxen@7.0.0: version "7.0.0" @@ -1952,16 +2117,15 @@ braces@^3.0.1, braces@^3.0.2, braces@~3.0.2: dependencies: fill-range "^7.0.1" -browserslist@^4.14.5, browserslist@^4.16.6, browserslist@^4.17.5: - version "4.19.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.19.1.tgz#4ac0435b35ab655896c31d53018b6dd5e9e4c9a3" - integrity sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A== +browserslist@^4.16.6, browserslist@^4.17.5, browserslist@^4.21.10: + version "4.23.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" + integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== dependencies: - caniuse-lite "^1.0.30001286" - electron-to-chromium "^1.4.17" - escalade "^3.1.1" - node-releases "^2.0.1" - picocolors "^1.0.0" + caniuse-lite "^1.0.30001587" + electron-to-chromium "^1.4.668" + node-releases "^2.0.14" + update-browserslist-db "^1.0.13" buffalo-bench@^2.0.0: version "2.0.0" @@ -1986,6 +2150,13 @@ buffer@^5.2.1: base64-js "^1.3.1" ieee754 "^1.1.13" +bundle-name@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-4.1.0.tgz#f3b96b34160d6431a19d7688135af7cfb8797889" + integrity sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q== + dependencies: + run-applescript "^7.0.0" + busboy@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.3.1.tgz#170899274c5bf38aae27d5c62b71268cd585fd1b" @@ -2034,6 +2205,17 @@ call-bind@^1.0.0, call-bind@^1.0.2: function-bind "^1.1.1" get-intrinsic "^1.0.2" +call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" + integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== + 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.1" + callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -2057,10 +2239,10 @@ camelcase@^7.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-7.0.1.tgz#f02e50af9fd7782bc8b88a3558c32fd3a388f048" integrity sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw== -caniuse-lite@^1.0.30001286: - version "1.0.30001311" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001311.tgz#682ef3f4e617f1a177ad943de59775ed3032e511" - integrity sha512-mleTFtFKfykEeW34EyfhGIFjGCqzhh38Y0LhdQ9aWF+HorZTtdgKV/1hEE0NlFkG2ubvisPV6l400tlbPys98A== +caniuse-lite@^1.0.30001587: + version "1.0.30001589" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001589.tgz#7ad6dba4c9bf6561aec8291976402339dc157dfb" + integrity sha512-vNQWS6kI+q6sBlHbh71IIeC+sRwK2N3EDySc/updIGhIee2x5z00J4c1242/5/d6EpEMdOnk/m+6tuk4/tcsqg== chalk-template@0.4.0, chalk-template@^0.4.0: version "0.4.0" @@ -2103,10 +2285,10 @@ char-width-table-consumer@^1.0.0: dependencies: binary-search "^1.3.5" -"chokidar@>=3.0.0 <4.0.0", chokidar@^3.5.1, chokidar@^3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== +"chokidar@>=3.0.0 <4.0.0", chokidar@^3.5.1, chokidar@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== dependencies: anymatch "~3.1.2" braces "~3.0.2" @@ -2128,18 +2310,19 @@ chrome-trace-event@^1.0.2: resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== -chromium-bidi@0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/chromium-bidi/-/chromium-bidi-0.5.1.tgz#390c1af350c4887824a33d82190de1cc5c5680fc" - integrity sha512-dcCqOgq9fHKExc2R4JZs/oKbOghWpUNFAJODS8WKRtLhp3avtIH5UDCBrutdqZdh3pARogH8y1ObXm87emwb3g== +chromium-bidi@0.5.19: + version "0.5.19" + resolved "https://registry.yarnpkg.com/chromium-bidi/-/chromium-bidi-0.5.19.tgz#e4f4951b7d9b20d668d6b387839f7b7bf2d69ef4" + integrity sha512-UA6zL77b7RYCjJkZBsZ0wlvCTD+jTjllZ8f6wdO4buevXgTZYjV+XLB9CiEa2OuuTGGTLnI7eN9I60YxuALGQg== dependencies: mitt "3.0.1" - urlpattern-polyfill "9.0.0" + urlpattern-polyfill "10.0.0" + zod "3.22.4" -classnames@^2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924" - integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw== +classnames@^2.3.2, classnames@^2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.5.1.tgz#ba774c614be0f016da105c858e7159eae8e7687b" + integrity sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow== clean-css@^5.1.5: version "5.2.1" @@ -2307,7 +2490,7 @@ command-line-usage@5.0.5: table-layout "^0.4.3" typical "^2.6.1" -command-line-usage@7.0.1, command-line-usage@^7.0.0: +command-line-usage@7.0.1, command-line-usage@^7.0.0, command-line-usage@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/command-line-usage/-/command-line-usage-7.0.1.tgz#e540afef4a4f3bc501b124ffde33956309100655" integrity sha512-NCyznE//MuTjwi3y84QVUGEOT+P5oto1e1Pk/jFPVdPPfsG03qpTIl3yw6etR+v73d0lXsoojRpvbru2sqePxQ== @@ -2451,17 +2634,17 @@ copy-anything@^2.0.1: dependencies: is-what "^3.12.0" -copy-webpack-plugin@^11.0.0: - version "11.0.0" - resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz#96d4dbdb5f73d02dd72d0528d1958721ab72e04a" - integrity sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ== +copy-webpack-plugin@^12.0.2: + version "12.0.2" + resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-12.0.2.tgz#935e57b8e6183c82f95bd937df658a59f6a2da28" + integrity sha512-SNwdBeHyII+rWvee/bTnAYyO8vfVdcSTud4EIb6jcZ8inLeWucJE0DnxXQBjlQ5zlteuuvooGQy3LIyGxhvlOA== dependencies: - fast-glob "^3.2.11" + fast-glob "^3.3.2" glob-parent "^6.0.1" - globby "^13.1.1" + globby "^14.0.0" normalize-path "^3.0.0" - schema-utils "^4.0.0" - serialize-javascript "^6.0.0" + schema-utils "^4.2.0" + serialize-javascript "^6.0.2" core-util-is@~1.0.0: version "1.0.3" @@ -2481,22 +2664,15 @@ corser@^2.0.1: resolved "https://registry.yarnpkg.com/corser/-/corser-2.0.1.tgz#8eda252ecaab5840dcd975ceb90d9370c819ff87" integrity sha1-jtolLsqrWEDc2XXOuQ2TcMgZ/4c= -cosmiconfig@8.3.6: - version "8.3.6" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3" - integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== +cosmiconfig@9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-9.0.0.tgz#34c3fc58287b915f3ae905ab6dc3de258b55ad9d" + integrity sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg== dependencies: + env-paths "^2.2.1" import-fresh "^3.3.0" js-yaml "^4.1.0" parse-json "^5.2.0" - path-type "^4.0.0" - -cross-fetch@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-4.0.0.tgz#f037aef1580bb3a1a35164ea2a848ba81b445983" - integrity sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g== - dependencies: - node-fetch "^2.6.12" cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" @@ -2516,19 +2692,19 @@ css-color-converter@^2.0.0: color-name "^1.1.4" css-unit-converter "^1.1.2" -css-loader@^6.8.1: - version "6.8.1" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.8.1.tgz#0f8f52699f60f5e679eab4ec0fcd68b8e8a50a88" - integrity sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g== +css-loader@^6.10.0: + version "6.10.0" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.10.0.tgz#7c172b270ec7b833951b52c348861206b184a4b7" + integrity sha512-LTSA/jWbwdMlk+rhmElbDR2vbtQoTBPr7fkJE+mxrHj+7ru0hUmHafDRzWIjIHTwpitWVaqY2/UWGRca3yUgRw== dependencies: icss-utils "^5.1.0" - postcss "^8.4.21" + postcss "^8.4.33" postcss-modules-extract-imports "^3.0.0" - postcss-modules-local-by-default "^4.0.3" - postcss-modules-scope "^3.0.0" + postcss-modules-local-by-default "^4.0.4" + postcss-modules-scope "^3.1.1" postcss-modules-values "^4.0.0" postcss-value-parser "^4.2.0" - semver "^7.3.8" + semver "^7.5.4" css-select@^4.1.3: version "4.1.3" @@ -2588,7 +2764,7 @@ debug@2.6.9: dependencies: ms "2.0.0" -debug@4, debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2: +debug@4, debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -2622,6 +2798,19 @@ deep-is@^0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== +default-browser-id@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-5.0.0.tgz#a1d98bf960c15082d8a3fa69e83150ccccc3af26" + integrity sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA== + +default-browser@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/default-browser/-/default-browser-5.2.1.tgz#7b7ba61204ff3e425b556869ae6d3e9d9f1712cf" + integrity sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg== + dependencies: + bundle-name "^4.1.0" + default-browser-id "^5.0.0" + default-gateway@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71" @@ -2636,10 +2825,19 @@ default-require-extensions@^3.0.0: dependencies: strip-bom "^4.0.0" -define-lazy-prop@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" - integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== +define-data-property@^1.0.1, define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + +define-lazy-prop@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f" + integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg== define-properties@^1.1.3: version "1.1.3" @@ -2664,6 +2862,15 @@ define-properties@^1.2.0: has-property-descriptors "^1.0.0" object-keys "^1.1.1" +define-properties@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== + dependencies: + define-data-property "^1.0.1" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + degenerator@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-5.0.1.tgz#9403bf297c6dad9a1ece409b37db27954f91f2f5" @@ -2708,10 +2915,10 @@ detect-node@^2.0.4: resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== -devtools-protocol@0.0.1203626: - version "0.0.1203626" - resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.1203626.tgz#4366a4c81a7e0d4fd6924e9182c67f1e5941e820" - integrity sha512-nEzHZteIUZfGCZtTiS1fRpC8UZmsfD1SiyPvaUNvS13dvKf666OAm8YTi0+Ca3n1nLEyu49Cy4+dPWpaHFJk9g== +devtools-protocol@0.0.1273771: + version "0.0.1273771" + resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.1273771.tgz#46aeb5db41417e2c2ad3d8367c598c975290b1a5" + integrity sha512-QDbb27xcTVReQQW/GHJsdQqGKwYBE7re7gxehj467kKP2DKuYBUj6i2k5LRiAC66J1yZG/9gsxooz/s9pcm0Og== di@^0.0.1: version "0.0.1" @@ -2741,11 +2948,6 @@ dnd-core@^16.0.1: "@react-dnd/invariant" "^4.0.1" redux "^4.2.0" -dns-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" - integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= - dns-packet@^5.2.2: version "5.3.1" resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.3.1.tgz#eb94413789daec0f0ebe2fcc230bdc9d7c91b43d" @@ -2859,10 +3061,10 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -electron-to-chromium@^1.4.17: - version "1.4.68" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.68.tgz#d79447b6bd1bec9183f166bb33d4bef0d5e4e568" - integrity sha512-cId+QwWrV8R1UawO6b9BR1hnkJ4EJPCPAr4h315vliHUtVUJDk39Sg1PMNnaWKfj5x+93ssjeJ9LKL6r8LaMiA== +electron-to-chromium@^1.4.668: + version "1.4.681" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.681.tgz#5f23fad8aa7e1f64cbb7dd9d15c7e39a1cd7e6e3" + integrity sha512-1PpuqJUFWoXZ1E54m8bsLPVYwIVCRzvaL+n5cjigGga4z854abDnFRc+cTa2th4S79kyGqya/1xoR7h+Y5G5lg== emoji-regex@^8.0.0: version "8.0.0" @@ -2937,6 +3139,11 @@ entities@^2.0.0: resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== +env-paths@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + envinfo@^7.7.3: version "7.8.1" resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" @@ -2982,123 +3189,99 @@ es-abstract@^1.18.5, es-abstract@^1.19.0: string.prototype.trimstart "^1.0.4" unbox-primitive "^1.0.1" -es-abstract@^1.20.4: - version "1.21.1" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.1.tgz#e6105a099967c08377830a0c9cb589d570dd86c6" - integrity sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - es-set-tostringtag "^2.0.1" +es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.22.4: + version "1.22.5" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.5.tgz#1417df4e97cc55f09bf7e58d1e614bc61cb8df46" + integrity sha512-oW69R+4q2wG+Hc3KZePPZxOiisRIqfKBVo/HLx94QcJeWGU/8sZhCvc829rd1kS366vlJbzBfXf9yWwf0+Ko7w== + dependencies: + array-buffer-byte-length "^1.0.1" + arraybuffer.prototype.slice "^1.0.3" + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + es-define-property "^1.0.0" + es-errors "^1.3.0" + es-set-tostringtag "^2.0.3" es-to-primitive "^1.2.1" - function-bind "^1.1.1" - function.prototype.name "^1.1.5" - get-intrinsic "^1.1.3" - get-symbol-description "^1.0.0" + function.prototype.name "^1.1.6" + get-intrinsic "^1.2.4" + get-symbol-description "^1.0.2" globalthis "^1.0.3" gopd "^1.0.1" - has "^1.0.3" - has-property-descriptors "^1.0.0" - has-proto "^1.0.1" + has-property-descriptors "^1.0.2" + has-proto "^1.0.3" has-symbols "^1.0.3" - internal-slot "^1.0.4" - is-array-buffer "^3.0.1" + hasown "^2.0.1" + internal-slot "^1.0.7" + is-array-buffer "^3.0.4" is-callable "^1.2.7" - is-negative-zero "^2.0.2" + is-negative-zero "^2.0.3" is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" + is-shared-array-buffer "^1.0.3" is-string "^1.0.7" - is-typed-array "^1.1.10" + is-typed-array "^1.1.13" is-weakref "^1.0.2" - object-inspect "^1.12.2" + object-inspect "^1.13.1" object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.4.3" - safe-regex-test "^1.0.0" - string.prototype.trimend "^1.0.6" - string.prototype.trimstart "^1.0.6" - typed-array-length "^1.0.4" + object.assign "^4.1.5" + regexp.prototype.flags "^1.5.2" + safe-array-concat "^1.1.0" + safe-regex-test "^1.0.3" + string.prototype.trim "^1.2.8" + string.prototype.trimend "^1.0.7" + string.prototype.trimstart "^1.0.7" + typed-array-buffer "^1.0.2" + typed-array-byte-length "^1.0.1" + typed-array-byte-offset "^1.0.2" + typed-array-length "^1.0.5" unbox-primitive "^1.0.2" - which-typed-array "^1.1.9" + which-typed-array "^1.1.14" -es-abstract@^1.21.3: - version "1.22.1" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.1.tgz#8b4e5fc5cefd7f1660f0f8e1a52900dfbc9d9ccc" - integrity sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw== +es-define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== dependencies: - array-buffer-byte-length "^1.0.0" - arraybuffer.prototype.slice "^1.0.1" - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - es-set-tostringtag "^2.0.1" - es-to-primitive "^1.2.1" - function.prototype.name "^1.1.5" - get-intrinsic "^1.2.1" - get-symbol-description "^1.0.0" - globalthis "^1.0.3" - gopd "^1.0.1" - has "^1.0.3" - has-property-descriptors "^1.0.0" - has-proto "^1.0.1" - has-symbols "^1.0.3" - internal-slot "^1.0.5" - is-array-buffer "^3.0.2" - is-callable "^1.2.7" - is-negative-zero "^2.0.2" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - is-string "^1.0.7" - is-typed-array "^1.1.10" - is-weakref "^1.0.2" - object-inspect "^1.12.3" - object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.5.0" - safe-array-concat "^1.0.0" - safe-regex-test "^1.0.0" - string.prototype.trim "^1.2.7" - string.prototype.trimend "^1.0.6" - string.prototype.trimstart "^1.0.6" - typed-array-buffer "^1.0.0" - typed-array-byte-length "^1.0.0" - typed-array-byte-offset "^1.0.0" - typed-array-length "^1.0.4" - unbox-primitive "^1.0.2" - which-typed-array "^1.1.10" + get-intrinsic "^1.2.4" -es-iterator-helpers@^1.0.12: - version "1.0.13" - resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.13.tgz#72101046ffc19baf9996adc70e6177a26e6e8084" - integrity sha512-LK3VGwzvaPWobO8xzXXGRUOGw8Dcjyfk62CsY/wfHN75CwsJPbuypOYJxK6g5RyEL8YDjIWcl6jgd8foO6mmrA== +es-errors@^1.0.0, es-errors@^1.1.0, es-errors@^1.2.1, es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-iterator-helpers@^1.0.17: + version "1.0.17" + resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.17.tgz#123d1315780df15b34eb181022da43e734388bb8" + integrity sha512-lh7BsUqelv4KUbR5a/ZTaGGIMLCjPGPqJ6q+Oq24YP0RdyptX1uzm4vvaqzk7Zx3bpl/76YLTTDj9L7uYQ92oQ== dependencies: asynciterator.prototype "^1.0.0" - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.21.3" - es-set-tostringtag "^2.0.1" - function-bind "^1.1.1" - get-intrinsic "^1.2.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.22.4" + es-errors "^1.3.0" + es-set-tostringtag "^2.0.2" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" globalthis "^1.0.3" - has-property-descriptors "^1.0.0" + has-property-descriptors "^1.0.2" has-proto "^1.0.1" has-symbols "^1.0.3" - internal-slot "^1.0.5" - iterator.prototype "^1.1.0" - safe-array-concat "^1.0.0" + internal-slot "^1.0.7" + iterator.prototype "^1.1.2" + safe-array-concat "^1.1.0" es-module-lexer@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.3.0.tgz#6be9c9e0b4543a60cd166ff6f8b4e9dae0b0c16f" integrity sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA== -es-set-tostringtag@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" - integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== +es-set-tostringtag@^2.0.2, es-set-tostringtag@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" + integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== dependencies: - get-intrinsic "^1.1.3" - has "^1.0.3" - has-tostringtag "^1.0.0" + get-intrinsic "^1.2.4" + has-tostringtag "^1.0.2" + hasown "^2.0.1" es-shim-unscopables@^1.0.0: version "1.0.0" @@ -3107,6 +3290,13 @@ es-shim-unscopables@^1.0.0: dependencies: has "^1.0.3" +es-shim-unscopables@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" + integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== + dependencies: + hasown "^2.0.0" + es-to-primitive@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" @@ -3121,34 +3311,34 @@ es6-error@^4.0.1: resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== -esbuild@^0.19.10: - version "0.19.10" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.10.tgz#55e83e4a6b702e3498b9f872d84bfb4ebcb6d16e" - integrity sha512-S1Y27QGt/snkNYrRcswgRFqZjaTG5a5xM3EQo97uNBnH505pdzSNe/HLBq1v0RO7iK/ngdbhJB6mDAp0OK+iUA== +esbuild@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.20.2.tgz#9d6b2386561766ee6b5a55196c6d766d28c87ea1" + integrity sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g== optionalDependencies: - "@esbuild/aix-ppc64" "0.19.10" - "@esbuild/android-arm" "0.19.10" - "@esbuild/android-arm64" "0.19.10" - "@esbuild/android-x64" "0.19.10" - "@esbuild/darwin-arm64" "0.19.10" - "@esbuild/darwin-x64" "0.19.10" - "@esbuild/freebsd-arm64" "0.19.10" - "@esbuild/freebsd-x64" "0.19.10" - "@esbuild/linux-arm" "0.19.10" - "@esbuild/linux-arm64" "0.19.10" - "@esbuild/linux-ia32" "0.19.10" - "@esbuild/linux-loong64" "0.19.10" - "@esbuild/linux-mips64el" "0.19.10" - "@esbuild/linux-ppc64" "0.19.10" - "@esbuild/linux-riscv64" "0.19.10" - "@esbuild/linux-s390x" "0.19.10" - "@esbuild/linux-x64" "0.19.10" - "@esbuild/netbsd-x64" "0.19.10" - "@esbuild/openbsd-x64" "0.19.10" - "@esbuild/sunos-x64" "0.19.10" - "@esbuild/win32-arm64" "0.19.10" - "@esbuild/win32-ia32" "0.19.10" - "@esbuild/win32-x64" "0.19.10" + "@esbuild/aix-ppc64" "0.20.2" + "@esbuild/android-arm" "0.20.2" + "@esbuild/android-arm64" "0.20.2" + "@esbuild/android-x64" "0.20.2" + "@esbuild/darwin-arm64" "0.20.2" + "@esbuild/darwin-x64" "0.20.2" + "@esbuild/freebsd-arm64" "0.20.2" + "@esbuild/freebsd-x64" "0.20.2" + "@esbuild/linux-arm" "0.20.2" + "@esbuild/linux-arm64" "0.20.2" + "@esbuild/linux-ia32" "0.20.2" + "@esbuild/linux-loong64" "0.20.2" + "@esbuild/linux-mips64el" "0.20.2" + "@esbuild/linux-ppc64" "0.20.2" + "@esbuild/linux-riscv64" "0.20.2" + "@esbuild/linux-s390x" "0.20.2" + "@esbuild/linux-x64" "0.20.2" + "@esbuild/netbsd-x64" "0.20.2" + "@esbuild/openbsd-x64" "0.20.2" + "@esbuild/sunos-x64" "0.20.2" + "@esbuild/win32-arm64" "0.20.2" + "@esbuild/win32-ia32" "0.20.2" + "@esbuild/win32-x64" "0.20.2" escalade@^3.1.1: version "3.1.1" @@ -3186,27 +3376,29 @@ eslint-plugin-jasmine@^4.1.3: resolved "https://registry.yarnpkg.com/eslint-plugin-jasmine/-/eslint-plugin-jasmine-4.1.3.tgz#c4ced986a61dd5b180982bafe6da1cbac0941c52" integrity sha512-q8j8KnLH/4uwmPELFZvEyfEcuCuGxXScJaRdqHjOjz064GcfX6aoFbzy5VohZ5QYk2+WvoqMoqDSb9nRLf89GQ== -eslint-plugin-react@^7.33.2: - version "7.33.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz#69ee09443ffc583927eafe86ffebb470ee737608" - integrity sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw== +eslint-plugin-react@^7.34.0: + version "7.34.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.34.0.tgz#ab71484d54fc409c37025c5eca00eb4177a5e88c" + integrity sha512-MeVXdReleBTdkz/bvcQMSnCXGi+c9kvy51IpinjnJgutl3YTHWsDdke7Z1ufZpGfDG8xduBDKyjtB9JH1eBKIQ== dependencies: - array-includes "^3.1.6" - array.prototype.flatmap "^1.3.1" - array.prototype.tosorted "^1.1.1" + array-includes "^3.1.7" + array.prototype.findlast "^1.2.4" + array.prototype.flatmap "^1.3.2" + array.prototype.toreversed "^1.1.2" + array.prototype.tosorted "^1.1.3" doctrine "^2.1.0" - es-iterator-helpers "^1.0.12" + es-iterator-helpers "^1.0.17" estraverse "^5.3.0" jsx-ast-utils "^2.4.1 || ^3.0.0" minimatch "^3.1.2" - object.entries "^1.1.6" - object.fromentries "^2.0.6" - object.hasown "^1.1.2" - object.values "^1.1.6" + object.entries "^1.1.7" + object.fromentries "^2.0.7" + object.hasown "^1.1.3" + object.values "^1.1.7" prop-types "^15.8.1" - resolve "^2.0.0-next.4" + resolve "^2.0.0-next.5" semver "^6.3.1" - string.prototype.matchall "^4.0.8" + string.prototype.matchall "^4.0.10" eslint-scope@5.1.1: version "5.1.1" @@ -3229,16 +3421,16 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4 resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== -eslint@^8.56.0: - version "8.56.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.56.0.tgz#4957ce8da409dc0809f99ab07a1b94832ab74b15" - integrity sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ== +eslint@^8.57.0: + version "8.57.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668" + integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.6.1" "@eslint/eslintrc" "^2.1.4" - "@eslint/js" "8.56.0" - "@humanwhocodes/config-array" "^0.11.13" + "@eslint/js" "8.57.0" + "@humanwhocodes/config-array" "^0.11.14" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" "@ungap/structured-clone" "^1.2.0" @@ -3408,7 +3600,7 @@ fast-fifo@^1.1.0, fast-fifo@^1.2.0: resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.3.0.tgz#03e381bcbfb29932d7c3afde6e15e83e05ab4d8b" integrity sha512-IgfweLvEpwyA4WgiQe9Nx6VV2QkML2NkvZnk1oKnIzXgXdWxuhF7zw4DvLTPZJn6PIUneiAXPF24QmoEqHTjyw== -fast-glob@^3.2.11, fast-glob@^3.2.9, fast-glob@^3.3.2: +fast-glob@^3.2.9, fast-glob@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== @@ -3574,6 +3766,11 @@ flatbuffers@23.5.26: resolved "https://registry.yarnpkg.com/flatbuffers/-/flatbuffers-23.5.26.tgz#01358e272a61239f0faf3bfbe4e014f3ace9d746" integrity sha512-vE+SI9vrJDwi1oETtTIFldC/o9GsVKRM+s6EL0nQgxXlYV1Vc4Tk30hj4xGICftInKQKj1F3up2n8UbIVobISQ== +flatbuffers@^24.3.25: + version "24.3.25" + resolved "https://registry.yarnpkg.com/flatbuffers/-/flatbuffers-24.3.25.tgz#e2f92259ba8aa53acd0af7844afb7c7eb95e7089" + integrity sha512-3HDgPbgiwWMI9zVB7VYBHaMrbOO7Gm0v+yD2FV/sCKj+9NDeVL7BOBYUuhWAQGKWOzBo8S9WdMvV0eixO233XQ== + flatted@^3.1.0: version "3.2.2" resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.2.tgz#64bfed5cb68fe3ca78b3eb214ad97b63bedce561" @@ -3637,10 +3834,10 @@ forwarded@0.2.0: resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== -framer-motion@^10.16.1: - version "10.16.1" - resolved "https://registry.yarnpkg.com/framer-motion/-/framer-motion-10.16.1.tgz#0ff5de554bbb35ee6605357d80f92b27d0271a94" - integrity sha512-K6TXr5mZtitC/dxQCBdg7xzdN0d5IAIrlaqCPKtIQVdzVPGC0qBuJKXggHX1vjnP5gPOFwB1KbCCTWcnFc3kWg== +framer-motion@^11.0.3: + version "11.0.3" + resolved "https://registry.yarnpkg.com/framer-motion/-/framer-motion-11.0.3.tgz#b2a87e7ae166a9e27da33da9cfb50a0db5f94fa7" + integrity sha512-6x2poQpIWBdbZwLd73w6cKZ1I9IEPIU94C6/Swp1Zt3LJ+sB5bPe1E2wC6EH5hSISXNkMJ4afH7AdwS7MrtkWw== dependencies: tslib "^2.4.0" optionalDependencies: @@ -3681,11 +3878,6 @@ fs-minipass@^2.0.0: dependencies: minipass "^3.0.0" -fs-monkey@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.3.tgz#ae3ac92d53bb328efe0e9a1d9541f6ad8d48e2d3" - integrity sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q== - fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -3701,6 +3893,11 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + function.prototype.name@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" @@ -3711,6 +3908,16 @@ function.prototype.name@^1.1.5: es-abstract "^1.19.0" functions-have-names "^1.2.2" +function.prototype.name@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" + integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + functions-have-names "^1.2.3" + functions-have-names@^1.2.2, functions-have-names@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" @@ -3754,6 +3961,17 @@ get-intrinsic@^1.2.0, get-intrinsic@^1.2.1: has-proto "^1.0.1" has-symbols "^1.0.3" +get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" + integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + get-package-type@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" @@ -3779,6 +3997,15 @@ get-symbol-description@^1.0.0: call-bind "^1.0.2" get-intrinsic "^1.1.1" +get-symbol-description@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5" + integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== + dependencies: + call-bind "^1.0.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + get-uri@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-6.0.1.tgz#cff2ba8d456c3513a04b70c45de4dbcca5b1527c" @@ -3862,16 +4089,17 @@ globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" -globby@^13.1.1: - version "13.1.1" - resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.1.tgz#7c44a93869b0b7612e38f22ed532bfe37b25ea6f" - integrity sha512-XMzoDZbGZ37tufiv7g0N4F/zp3zkwdFtVbV3EHsVl1KQr4RPLfNoT068/97RPshz2J5xYNEjLKKBKaGHifBd3Q== +globby@^14.0.0: + version "14.0.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-14.0.0.tgz#ea9c062a3614e33f516804e778590fcf055256b9" + integrity sha512-/1WM/LNHRAOH9lZta77uGbq0dAEQM+XjNesWwhlERDVenqothRbnzTrL3/LrIoEPPjeUHC3vrS6TwoyxeHs7MQ== dependencies: - dir-glob "^3.0.1" - fast-glob "^3.2.11" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^4.0.0" + "@sindresorhus/merge-streams" "^1.0.0" + fast-glob "^3.3.2" + ignore "^5.2.4" + path-type "^5.0.0" + slash "^5.1.0" + unicorn-magic "^0.1.0" gopd@^1.0.1: version "1.0.1" @@ -3929,11 +4157,23 @@ has-property-descriptors@^1.0.0: dependencies: get-intrinsic "^1.1.1" +has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + dependencies: + es-define-property "^1.0.0" + has-proto@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== +has-proto@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" + integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== + has-symbols@^1.0.1, has-symbols@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" @@ -3951,6 +4191,13 @@ has-tostringtag@^1.0.0: dependencies: has-symbols "^1.0.2" +has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" @@ -3966,6 +4213,13 @@ hasha@^5.0.0: is-stream "^2.0.0" type-fest "^0.8.0" +hasown@^2.0.0, hasown@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + he@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" @@ -3995,10 +4249,10 @@ html-encoding-sniffer@^3.0.0: dependencies: whatwg-encoding "^2.0.0" -html-entities@^2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.2.tgz#760b404685cb1d794e4f4b744332e3b00dcfe488" - integrity sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ== +html-entities@^2.4.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.5.0.tgz#cb1346d0bca6df719c7f6e9ab09d4d916d1141d4" + integrity sha512-g3xzbdhD5HamT50Sc7/KVvFvU3SUMpKmJkQWYVRhcXHzwUzRXZt5HzTNwn/5BNMm4bECBZc5YnuPh0J8PIBbAQ== html-escaper@^2.0.0, html-escaper@^2.0.2: version "2.0.2" @@ -4086,6 +4340,14 @@ http-proxy-agent@^7.0.0: agent-base "^7.1.0" debug "^4.3.4" +http-proxy-agent@^7.0.1: + version "7.0.2" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e" + integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig== + dependencies: + agent-base "^7.1.0" + debug "^4.3.4" + http-proxy-middleware@^2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.4.tgz#03af0f4676d172ae775cb5c33f592f40e1a4e07a" @@ -4133,6 +4395,14 @@ https-proxy-agent@^7.0.2: agent-base "^7.0.2" debug "4" +https-proxy-agent@^7.0.3: + version "7.0.4" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz#8e97b841a029ad8ddc8731f26595bad868cb4168" + integrity sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg== + dependencies: + agent-base "^7.0.2" + debug "4" + human-signals@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" @@ -4177,10 +4447,10 @@ image-size@~0.5.0: resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" integrity sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w= -immutable@^4.0.0, immutable@^4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.4.tgz#2e07b33837b4bb7662f288c244d1ced1ef65a78f" - integrity sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA== +immutable@^4.0.0, immutable@^4.3.6: + version "4.3.6" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.6.tgz#6a05f7858213238e587fb83586ffa3b4b27f0447" + integrity sha512-Ju0+lEMyzMVZarkTn/gqRpdqd5dOPaz1mCZ0SH3JV6iFw81PldE/PEB1hWVEA288HPt4WXW8O7AWxB10M+03QQ== import-fresh@^3.2.1, import-fresh@^3.3.0: version "3.3.0" @@ -4240,15 +4510,6 @@ internal-slot@^1.0.3: has "^1.0.3" side-channel "^1.0.4" -internal-slot@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.4.tgz#8551e7baf74a7a6ba5f749cfb16aa60722f0d6f3" - integrity sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ== - dependencies: - get-intrinsic "^1.1.3" - has "^1.0.3" - side-channel "^1.0.4" - internal-slot@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" @@ -4258,6 +4519,15 @@ internal-slot@^1.0.5: has "^1.0.3" side-channel "^1.0.4" +internal-slot@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" + integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== + dependencies: + es-errors "^1.3.0" + hasown "^2.0.0" + side-channel "^1.0.4" + interpret@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/interpret/-/interpret-3.1.1.tgz#5be0ceed67ca79c6c4bc5cf0d7ee843dcea110c4" @@ -4285,10 +4555,10 @@ ipaddr.js@1.9.1: resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== -ipaddr.js@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.0.1.tgz#eca256a7a877e917aeb368b0a7497ddf42ef81c0" - integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng== +ipaddr.js@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.1.0.tgz#2119bc447ff8c257753b196fc5f1ce08a4cdf39f" + integrity sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ== is-arguments@^1.0.4: version "1.1.1" @@ -4298,23 +4568,13 @@ is-arguments@^1.0.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-array-buffer@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.1.tgz#deb1db4fcae48308d54ef2442706c0393997052a" - integrity sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" - is-typed-array "^1.1.10" - -is-array-buffer@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" - integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== +is-array-buffer@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" + integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== dependencies: call-bind "^1.0.2" - get-intrinsic "^1.2.0" - is-typed-array "^1.1.10" + get-intrinsic "^1.2.1" is-arrayish@^0.2.1: version "0.2.1" @@ -4365,6 +4625,13 @@ is-callable@^1.1.4, is-callable@^1.2.4: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== +is-core-module@^2.13.0: + version "2.13.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== + dependencies: + hasown "^2.0.0" + is-core-module@^2.9.0: version "2.11.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" @@ -4379,11 +4646,16 @@ is-date-object@^1.0.1, is-date-object@^1.0.5: dependencies: has-tostringtag "^1.0.0" -is-docker@^2.0.0, is-docker@^2.1.1: +is-docker@^2.0.0: version "2.2.1" resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== +is-docker@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200" + integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ== + is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" @@ -4415,6 +4687,13 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" +is-inside-container@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4" + integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA== + dependencies: + is-docker "^3.0.0" + is-map@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" @@ -4433,10 +4712,15 @@ is-negative-zero@^2.0.1: resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== -is-negative-zero@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" - integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== +is-negative-zero@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" + integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== + +is-network-error@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-network-error/-/is-network-error-1.0.1.tgz#a68061a20387e9144e145571bea693056a370b92" + integrity sha512-OwQXkwBJeESyhFw+OumbJVD58BFBJJI5OM5S1+eyrDKlgDZPX2XNT5gXS56GSD3NPbbwUuMlR1Q71SRp5SobuQ== is-number-object@^1.0.4: version "1.0.6" @@ -4502,6 +4786,13 @@ is-shared-array-buffer@^1.0.2: dependencies: call-bind "^1.0.2" +is-shared-array-buffer@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688" + integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== + dependencies: + call-bind "^1.0.7" + is-stream@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" @@ -4521,7 +4812,7 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: dependencies: has-symbols "^1.0.2" -is-typed-array@^1.1.10, is-typed-array@^1.1.9: +is-typed-array@^1.1.10: version "1.1.10" resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== @@ -4532,6 +4823,13 @@ is-typed-array@^1.1.10, is-typed-array@^1.1.9: gopd "^1.0.1" has-tostringtag "^1.0.0" +is-typed-array@^1.1.13: + version "1.1.13" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" + integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== + dependencies: + which-typed-array "^1.1.14" + is-typed-array@^1.1.3, is-typed-array@^1.1.7: version "1.1.8" resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.8.tgz#cbaa6585dc7db43318bc5b89523ea384a6f65e79" @@ -4592,6 +4890,13 @@ is-wsl@^2.2.0: dependencies: is-docker "^2.0.0" +is-wsl@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-3.1.0.tgz#e1c657e39c10090afcbedec61720f6b924c3cbd2" + integrity sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw== + dependencies: + is-inside-container "^1.0.0" + isarray@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" @@ -4689,16 +4994,16 @@ istanbul-reports@^3.0.2, istanbul-reports@^3.0.5: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -iterator.prototype@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.0.tgz#690c88b043d821f783843aaf725d7ac3b62e3b46" - integrity sha512-rjuhAk1AJ1fssphHD0IFV6TWL40CwRZ53FrztKx43yk2v6rguBYsY4Bj1VU4HmoMmKwZUlx7mfnhDf9cOp4YTw== +iterator.prototype@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.2.tgz#5e29c8924f01916cb9335f1ff80619dcff22b0c0" + integrity sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w== dependencies: - define-properties "^1.1.4" - get-intrinsic "^1.1.3" + define-properties "^1.2.1" + get-intrinsic "^1.2.1" has-symbols "^1.0.3" - has-tostringtag "^1.0.0" - reflect.getprototypeof "^1.0.3" + reflect.getprototypeof "^1.0.4" + set-function-name "^2.0.1" jackspeak@^2.3.5: version "2.3.6" @@ -4714,10 +5019,10 @@ jasmine-core@^4.1.0: resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-4.5.0.tgz#1a6bd0bde3f60996164311c88a0995d67ceda7c3" integrity sha512-9PMzyvhtocxb3aXJVOPqBDswdgyAeSB81QnLop4npOpbqnheaTEwPc9ZloQeVswugPManznQBjD8kWDTjlnHuw== -jasmine-core@^5.1.1, jasmine-core@~5.1.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-5.1.1.tgz#38b6ccfbe60aa2a863cf441751d9639b5a571edc" - integrity sha512-UrzO3fL7nnxlQXlvTynNAenL+21oUQRlzqQFsA2U11ryb4+NLOCOePZ70PTojEaUKhiFugh7dG0Q+I58xlPdWg== +jasmine-core@^5.1.2, jasmine-core@~5.1.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-5.1.2.tgz#8f2789faa79ef1ffad7abab6bff8d4bd661094f7" + integrity sha512-2oIUMGn00FdUiqz6epiiJr7xcFyNYj3rDcfmnzfkBnHyBQ3cBQUs4mmyGsOb7TTLb9kxk7dBcmEmqhDKkBoDyA== jasmine-spec-reporter@^7.0.0: version "7.0.0" @@ -4743,10 +5048,10 @@ jest-worker@^27.4.5: merge-stream "^2.0.0" supports-color "^8.0.0" -js-sha256@^0.10.1: - version "0.10.1" - resolved "https://registry.yarnpkg.com/js-sha256/-/js-sha256-0.10.1.tgz#b40104ba1368e823fdd5f41b66b104b15a0da60d" - integrity sha512-5obBtsz9301ULlsgggLg542s/jqtddfOpV5KJc4hajc9JV8GeY2gZHSVpYBn4nWqAUTJ9v+xwtbJ1mIBgIH5Vw== +js-sha256@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/js-sha256/-/js-sha256-0.11.0.tgz#256a921d9292f7fe98905face82e367abaca9576" + integrity sha512-6xNlKayMZvds9h1Y1VWc0fQHQ82BxTXizWPEtEeGvmOUYpBRy4gbWroHLpzowe6xiQhHpelCQiE7HEdznyBL9Q== "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" @@ -4858,13 +5163,13 @@ karma-coverage@^2.2.1: istanbul-reports "^3.0.5" minimatch "^3.0.4" -karma-firefox-launcher@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/karma-firefox-launcher/-/karma-firefox-launcher-2.1.2.tgz#9a38cc783c579a50f3ed2a82b7386186385cfc2d" - integrity sha512-VV9xDQU1QIboTrjtGVD4NCfzIH7n01ZXqy/qpBhnOeGVOkG5JYPEm8kuSd7psHE6WouZaQ9Ool92g8LFweSNMA== +karma-firefox-launcher@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/karma-firefox-launcher/-/karma-firefox-launcher-2.1.3.tgz#b278a4cbffa92ab81394b1a398813847b0624a85" + integrity sha512-LMM2bseebLbYjODBOVt7TCPP9OI2vZIXCavIXhkO9m+10Uj5l7u/SKoeRmYx8FYHTVGZSpk6peX+3BMHC1WwNw== dependencies: is-wsl "^2.2.0" - which "^2.0.1" + which "^3.0.0" karma-jasmine-html-reporter@^2.1.0: version "2.1.0" @@ -5005,7 +5310,7 @@ kuler@^2.0.0: resolved "https://registry.yarnpkg.com/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3" integrity sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A== -launch-editor@^2.6.0: +launch-editor@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.6.1.tgz#f259c9ef95cbc9425620bbbd14b468fcdb4ffe3c" integrity sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw== @@ -5208,12 +5513,12 @@ media-typer@0.3.0: resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= -memfs@^3.4.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.4.1.tgz#b78092f466a0dce054d63d39275b24c71d3f1305" - integrity sha512-1c9VPVvW5P7I85c35zAdEr1TD5+F11IToIHIlrVIcflfnzPkJa0ZoYEoEdYDP8KgPFoSZ/opDrUsAoZWym3mtw== +memfs@^4.6.0: + version "4.7.7" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-4.7.7.tgz#bcf09cab1646d655f659e7cf832dfc75ccb95b2d" + integrity sha512-x9qc6k88J/VVwnfTkJV8pRRswJ2156Rc4w5rciRqKceFDZ0y1MqsNL9pkg5sE0GOcDzZYbonreALhaHzg1siFw== dependencies: - fs-monkey "1.0.3" + tslib "^2.0.0" merge-descriptors@1.0.1: version "1.0.1" @@ -5287,12 +5592,13 @@ mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -mini-css-extract-plugin@^2.7.6: - version "2.7.6" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz#282a3d38863fddcd2e0c220aaed5b90bc156564d" - integrity sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw== +mini-css-extract-plugin@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.8.0.tgz#1aeae2a90a954b6426c9e8311eab36b450f553a0" + integrity sha512-CxmUYPFcTgET1zImteG/LZOy/4T5rTojesQXkSNBiquhydn78tfbCE9sjIjnJ/UcjNjOC1bphTCCW5rrS7cXAg== dependencies: schema-utils "^4.0.0" + tapable "^2.2.1" minimalistic-assert@^1.0.0: version "1.0.1" @@ -5353,11 +5659,6 @@ mitt@3.0.1: resolved "https://registry.yarnpkg.com/mitt/-/mitt-3.0.1.tgz#ea36cf0cc30403601ae074c8f77b7092cdab36d1" integrity sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw== -mkdirp-classic@^0.5.2: - version "0.5.3" - resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" - integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== - mkdirp@^0.5.5: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" @@ -5390,18 +5691,18 @@ ms@2.1.3, ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -multicast-dns@^7.2.4: - version "7.2.4" - resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-7.2.4.tgz#cf0b115c31e922aeb20b64e6556cbeb34cf0dd19" - integrity sha512-XkCYOU+rr2Ft3LI6w4ye51M3VK31qJXFIxu0XLw169PtKG0Zx47OrXeVW/GCYOfpC9s1yyyf1S+L8/4LY0J9Zw== +multicast-dns@^7.2.5: + version "7.2.5" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-7.2.5.tgz#77eb46057f4d7adbd16d9290fa7299f6fa64cced" + integrity sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg== dependencies: dns-packet "^5.2.2" thunky "^1.0.2" -nanoid@^3.3.6: - version "3.3.6" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" - integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== +nanoid@^3.3.7: + version "3.3.7" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" + integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== natural-compare@^1.4.0: version "1.4.0" @@ -5445,7 +5746,7 @@ no-case@^3.0.4: lower-case "^2.0.2" tslib "^2.0.3" -node-fetch@^2.6.12, node-fetch@^2.6.7: +node-fetch@^2.6.7: version "2.6.12" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.12.tgz#02eb8e22074018e3d5a83016649d04df0e348fba" integrity sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g== @@ -5464,10 +5765,10 @@ node-preload@^0.2.1: dependencies: process-on-spawn "^1.0.0" -node-releases@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.2.tgz#7139fe71e2f4f11b47d4d2986aaf8c48699e0c01" - integrity sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg== +node-releases@^2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" + integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" @@ -5531,10 +5832,10 @@ object-inspect@^1.11.0, object-inspect@^1.9.0: resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.0.tgz#9dceb146cedd4148a0d9e51ab88d34cf509922b1" integrity sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg== -object-inspect@^1.12.2, object-inspect@^1.12.3: - version "1.12.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" - integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== +object-inspect@^1.13.1: + version "1.13.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== object-is@^1.1.5: version "1.1.5" @@ -5559,40 +5860,50 @@ object.assign@^4.1.2, object.assign@^4.1.4: has-symbols "^1.0.3" object-keys "^1.1.1" -object.entries@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.6.tgz#9737d0e5b8291edd340a3e3264bb8a3b00d5fa23" - integrity sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w== +object.assign@^4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" + integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== + dependencies: + call-bind "^1.0.5" + define-properties "^1.2.1" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +object.entries@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.7.tgz#2b47760e2a2e3a752f39dd874655c61a7f03c131" + integrity sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" -object.fromentries@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.6.tgz#cdb04da08c539cffa912dcd368b886e0904bfa73" - integrity sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg== +object.fromentries@^2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.7.tgz#71e95f441e9a0ea6baf682ecaaf37fa2a8d7e616" + integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" -object.hasown@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.2.tgz#f919e21fad4eb38a57bc6345b3afd496515c3f92" - integrity sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw== +object.hasown@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.3.tgz#6a5f2897bb4d3668b8e79364f98ccf971bda55ae" + integrity sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA== dependencies: - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" -object.values@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" - integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== +object.values@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.7.tgz#617ed13272e7e1071b43973aa1655d9291b8442a" + integrity sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" obuf@^1.0.0, obuf@^1.1.2: version "1.1.2" @@ -5606,6 +5917,13 @@ on-finished@^2.3.0, on-finished@~2.3.0: dependencies: ee-first "1.1.1" +on-finished@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + on-headers@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" @@ -5637,14 +5955,15 @@ only@~0.0.2: resolved "https://registry.yarnpkg.com/only/-/only-0.0.2.tgz#2afde84d03e50b9a8edc444e30610a70295edfb4" integrity sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q= -open@^8.0.9: - version "8.2.1" - resolved "https://registry.yarnpkg.com/open/-/open-8.2.1.tgz#82de42da0ccbf429bc12d099dad2e0975e14e8af" - integrity sha512-rXILpcQlkF/QuFez2BJDf3GsqpjGKbkUUToAIGo9A0Q6ZkoSGogZJulrUdwRkrAsoQvoZsrjCYt8+zblOk7JQQ== +open@^10.0.3: + version "10.0.4" + resolved "https://registry.yarnpkg.com/open/-/open-10.0.4.tgz#4869d009dc5b706ae6585699e15d8ccc6cb73629" + integrity sha512-oujJ/FFr7ra6/7gJuQ4ZJJ8Gf2VHM0J3J/W7IvH++zaqEzacWVxzK++NiVY5NLHTTj7u/jNH5H3Ei9biL31Lng== dependencies: - define-lazy-prop "^2.0.0" - is-docker "^2.1.1" - is-wsl "^2.2.0" + default-browser "^5.2.1" + define-lazy-prop "^3.0.0" + is-inside-container "^1.0.0" + is-wsl "^3.1.0" opener@^1.5.1, opener@^1.5.2: version "1.5.2" @@ -5698,12 +6017,13 @@ p-map@^3.0.0: dependencies: aggregate-error "^3.0.0" -p-retry@^4.5.0: - version "4.6.1" - resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.1.tgz#8fcddd5cdf7a67a0911a9cf2ef0e5df7f602316c" - integrity sha512-e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA== +p-retry@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-6.2.0.tgz#8d6df01af298750009691ce2f9b3ad2d5968f3bd" + integrity sha512-JA6nkq6hKyWLLasXQXUrO4z8BUZGUt/LjlJxx8Gb2+2ntodU/SS63YZ8b0LUTbQ8ZB9iwOfhEPhg4ykKnn2KsA== dependencies: - "@types/retry" "^0.12.0" + "@types/retry" "0.12.2" + is-network-error "^1.0.0" retry "^0.13.1" p-try@^2.0.0: @@ -5852,6 +6172,11 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== +path-type@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-5.0.0.tgz#14b01ed7aea7ddf9c7c3f46181d4d04f9c785bb8" + integrity sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg== + pend@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" @@ -5893,6 +6218,11 @@ portfinder@^1.0.28: debug "^3.1.1" mkdirp "^0.5.5" +possible-typed-array-names@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" + integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== + postcss-load-config@^3.1.4: version "3.1.4" resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-3.1.4.tgz#1ab2571faf84bb078877e1d07905eabe9ebda855" @@ -5906,19 +6236,19 @@ postcss-modules-extract-imports@^3.0.0: resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== -postcss-modules-local-by-default@^4.0.0, postcss-modules-local-by-default@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz#b08eb4f083050708998ba2c6061b50c2870ca524" - integrity sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA== +postcss-modules-local-by-default@^4.0.0, postcss-modules-local-by-default@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.4.tgz#7cbed92abd312b94aaea85b68226d3dec39a14e6" + integrity sha512-L4QzMnOdVwRm1Qb8m4x8jsZzKAaPAgrUF1r/hjDR2Xj7R+8Zsf97jAlSQzWtKx5YNiNGN8QxmPFIc/sh+RQl+Q== dependencies: icss-utils "^5.0.0" postcss-selector-parser "^6.0.2" postcss-value-parser "^4.1.0" -postcss-modules-scope@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" - integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== +postcss-modules-scope@^3.0.0, postcss-modules-scope@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.1.1.tgz#32cfab55e84887c079a19bbb215e721d683ef134" + integrity sha512-uZgqzdTleelWjzJY+Fhti6F3C9iF1JR/dODLs/JDefozYcKTBCdD8BIl6nNPbTbcLnGrk56hzwZC2DaGNvYjzA== dependencies: postcss-selector-parser "^6.0.4" @@ -5942,12 +6272,12 @@ postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss@^8.0.0, postcss@^8.4.21: - version "8.4.27" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.27.tgz#234d7e4b72e34ba5a92c29636734349e0d9c3057" - integrity sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ== +postcss@^8.0.0, postcss@^8.4.21, postcss@^8.4.33: + version "8.4.35" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.35.tgz#60997775689ce09011edf083a549cea44aabe2f7" + integrity sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA== dependencies: - nanoid "^3.3.6" + nanoid "^3.3.7" picocolors "^1.0.0" source-map-js "^1.0.2" @@ -5961,10 +6291,10 @@ prelude-ls@^1.2.1: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -prettier@^3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.2.tgz#96e580f7ca9c96090ad054616c0c4597e2844b65" - integrity sha512-HTByuKZzw7utPiDO523Tt2pLtEyK7OibUD9suEJQrPUCYQqrHr74GGX6VidMrovbf/I50mPqr8j/II6oBAuc5A== +prettier@^3.2.5: + version "3.2.5" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368" + integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A== pretty-error@^4.0.0: version "4.0.0" @@ -6021,15 +6351,15 @@ proxy-addr@~2.0.7: forwarded "0.2.0" ipaddr.js "1.9.1" -proxy-agent@6.3.1: - version "6.3.1" - resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-6.3.1.tgz#40e7b230552cf44fd23ffaf7c59024b692612687" - integrity sha512-Rb5RVBy1iyqOtNl15Cw/llpeLH8bsb37gM1FUfKQ+Wck6xHlbAhWGUFiTRHtkjqGTA5pSHz6+0hrPW/oECihPQ== +proxy-agent@6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-6.4.0.tgz#b4e2dd51dee2b377748aef8d45604c2d7608652d" + integrity sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ== dependencies: agent-base "^7.0.2" debug "^4.3.4" - http-proxy-agent "^7.0.0" - https-proxy-agent "^7.0.2" + http-proxy-agent "^7.0.1" + https-proxy-agent "^7.0.3" lru-cache "^7.14.1" pac-proxy-agent "^7.0.1" proxy-from-env "^1.1.0" @@ -6063,26 +6393,26 @@ punycode@^2.1.0: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -puppeteer-core@21.6.1: - version "21.6.1" - resolved "https://registry.yarnpkg.com/puppeteer-core/-/puppeteer-core-21.6.1.tgz#10eccb4dc3167c8c26bc21122fabb45a9fda9ca7" - integrity sha512-0chaaK/RL9S1U3bsyR4fUeUfoj51vNnjWvXgG6DcsyMjwYNpLcAThv187i1rZCo7QhJP0wZN8plQkjNyrq2h+A== +puppeteer-core@22.8.0: + version "22.8.0" + resolved "https://registry.yarnpkg.com/puppeteer-core/-/puppeteer-core-22.8.0.tgz#82c0e7ebf62ba5f34404394034e313b82014de5f" + integrity sha512-S5bWx3g/fNuyFxjZX9TkZMN07CEH47+9Zm6IiTl1QfqI9pnVaShbwrD9kRe5vmz/XPp/jLGhhxRUj1sY4wObnA== dependencies: - "@puppeteer/browsers" "1.9.0" - chromium-bidi "0.5.1" - cross-fetch "4.0.0" + "@puppeteer/browsers" "2.2.3" + chromium-bidi "0.5.19" debug "4.3.4" - devtools-protocol "0.0.1203626" - ws "8.15.1" + devtools-protocol "0.0.1273771" + ws "8.17.0" -puppeteer@^21.6.1: - version "21.6.1" - resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-21.6.1.tgz#2ec0878906ff90b3a424f19e5eb006592abe25b6" - integrity sha512-O+pbc61oj8ln6m8EJKncrsQFmytgRyFYERtk190PeLbJn5JKpmmynn2p1PiFrlhCitAQXLJ0MOy7F0TeyCRqBg== +puppeteer@^22.8.0: + version "22.8.0" + resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-22.8.0.tgz#58556b4388a9047658f0704afa37b8eea71b84ba" + integrity sha512-Z616wyTr0d7KpxmfcBG22rAkzuo/xzHJ3ycpu4KiJ3dZNHn/C1CpqcCwPlpiIIsmPojTAfWjo6EMR7M+AaC0Ww== dependencies: - "@puppeteer/browsers" "1.9.0" - cosmiconfig "8.3.6" - puppeteer-core "21.6.1" + "@puppeteer/browsers" "2.2.3" + cosmiconfig "9.0.0" + devtools-protocol "0.0.1273771" + puppeteer-core "22.8.0" qjobs@^1.2.0: version "1.2.0" @@ -6239,20 +6569,20 @@ react-popper@^2.3.0: react-fast-compare "^3.0.1" warning "^4.0.2" -react-router-dom@^6.21.2: - version "6.21.2" - resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.21.2.tgz#5fba851731a194fa32c31990c4829c5e247f650a" - integrity sha512-tE13UukgUOh2/sqYr6jPzZTzmzc70aGRP4pAjG2if0IP3aUT+sBtAKUJh0qMh0zylJHGLmzS+XWVaON4UklHeg== +react-router-dom@^6.26.1: + version "6.26.1" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.26.1.tgz#a408892b41767a49dc94b3564b0e7d8e3959f623" + integrity sha512-veut7m41S1fLql4pLhxeSW3jlqs+4MtjRLj0xvuCEXsxusJCbs6I8yn9BxzzDX2XDgafrccY6hwjmd/bL54tFw== dependencies: - "@remix-run/router" "1.14.2" - react-router "6.21.2" + "@remix-run/router" "1.19.1" + react-router "6.26.1" -react-router@6.21.2: - version "6.21.2" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.21.2.tgz#8820906c609ae7e4e8f926cc8eb5ce161428b956" - integrity sha512-jJcgiwDsnaHIeC+IN7atO0XiSRCrOsQAHHbChtJxmgqG2IaYQXSnhqGb5vk2CU/wBQA12Zt+TkbuJjIn65gzbA== +react-router@6.26.1: + version "6.26.1" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.26.1.tgz#88c64837e05ffab6899a49df2a1484a22471e4ce" + integrity sha512-kIwJveZNwp7teQRI5QmwWo39A5bXRyqpH0COKKmPnyD2vBvDwgFXSqDUYtt1h+FEyfnE8eXr7oe0MxRzVwCcvQ== dependencies: - "@remix-run/router" "1.14.2" + "@remix-run/router" "1.19.1" react-transition-group@^4.4.5: version "4.4.5" @@ -6331,15 +6661,16 @@ redux@^4.2.0: dependencies: "@babel/runtime" "^7.9.2" -reflect.getprototypeof@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.3.tgz#2738fd896fcc3477ffbd4190b40c2458026b6928" - integrity sha512-TTAOZpkJ2YLxl7mVHWrNo3iDMEkYlva/kgFcXndqMgbo/AZUmmavEkdXV+hXtE4P8xdyEKRzalaFqZVuwIk/Nw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - get-intrinsic "^1.1.1" +reflect.getprototypeof@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.5.tgz#e0bd28b597518f16edaf9c0e292c631eb13e0674" + integrity sha512-62wgfC8dJWrmxv44CA36pLDnP6KKl3Vhxb7PL+8+qrrFMMoJij4vgiMP8zV4O8+CBMXY1mHxI5fITGHXFHVmQQ== + dependencies: + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.0.0" + get-intrinsic "^1.2.3" globalthis "^1.0.3" which-builtin-type "^1.1.3" @@ -6348,15 +6679,6 @@ regenerator-runtime@^0.14.0: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== -regexp.prototype.flags@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" - integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - functions-have-names "^1.2.2" - regexp.prototype.flags@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb" @@ -6366,6 +6688,16 @@ regexp.prototype.flags@^1.5.0: define-properties "^1.2.0" functions-have-names "^1.2.3" +regexp.prototype.flags@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" + integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== + dependencies: + call-bind "^1.0.6" + define-properties "^1.2.1" + es-errors "^1.3.0" + set-function-name "^2.0.1" + registry-auth-token@3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.3.2.tgz#851fd49038eecb586911115af845260eec983f20" @@ -6460,12 +6792,12 @@ resolve@^1.20.0: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -resolve@^2.0.0-next.4: - version "2.0.0-next.4" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" - integrity sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ== +resolve@^2.0.0-next.5: + version "2.0.0-next.5" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.5.tgz#6b0ec3107e671e52b68cd068ef327173b90dc03c" + integrity sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA== dependencies: - is-core-module "^2.9.0" + is-core-module "^2.13.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" @@ -6498,6 +6830,11 @@ rimraf@^5.0.5: dependencies: glob "^10.3.7" +run-applescript@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-7.0.0.tgz#e5a553c2bffd620e169d276c1cd8f1b64778fbeb" + integrity sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A== + run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -6522,13 +6859,13 @@ s3rver@^3.7.1: statuses "^2.0.0" winston "^3.0.0" -safe-array-concat@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.0.tgz#2064223cba3c08d2ee05148eedbc563cd6d84060" - integrity sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ== +safe-array-concat@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb" + integrity sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.0" + call-bind "^1.0.7" + get-intrinsic "^1.2.4" has-symbols "^1.0.3" isarray "^2.0.5" @@ -6542,13 +6879,13 @@ safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-regex-test@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" - integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== +safe-regex-test@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" + integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" + call-bind "^1.0.6" + es-errors "^1.3.0" is-regex "^1.1.4" safe-stable-stringify@^1.1.0: @@ -6591,15 +6928,15 @@ schema-utils@^3.0.0, schema-utils@^3.1.1, schema-utils@^3.2.0: ajv "^6.12.5" ajv-keywords "^3.5.2" -schema-utils@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.0.0.tgz#60331e9e3ae78ec5d16353c467c34b3a0a1d3df7" - integrity sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg== +schema-utils@^4.0.0, schema-utils@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.2.0.tgz#70d7c93e153a273a805801882ebd3bff20d89c8b" + integrity sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw== dependencies: "@types/json-schema" "^7.0.9" - ajv "^8.8.0" + ajv "^8.9.0" ajv-formats "^2.1.1" - ajv-keywords "^5.0.0" + ajv-keywords "^5.1.0" secure-compare@3.0.1: version "3.0.1" @@ -6611,13 +6948,21 @@ select-hose@^2.0.0: resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= -selfsigned@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.1.1.tgz#18a7613d714c0cd3385c48af0075abf3f266af61" - integrity sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ== +selfsigned@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.4.1.tgz#560d90565442a3ed35b674034cec4e95dceb4ae0" + integrity sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q== dependencies: + "@types/node-forge" "^1.3.0" node-forge "^1" +semver@7.6.0: + version "7.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" + integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== + dependencies: + lru-cache "^6.0.0" + semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" @@ -6628,7 +6973,7 @@ semver@^6.0.0, semver@^6.3.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.4, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4: +semver@^7.3.4, semver@^7.5.3, semver@^7.5.4: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== @@ -6654,17 +6999,10 @@ send@0.17.2: range-parser "~1.2.1" statuses "~1.5.0" -serialize-javascript@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" - integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== - dependencies: - randombytes "^2.1.0" - -serialize-javascript@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c" - integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w== +serialize-javascript@^6.0.1, serialize-javascript@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" + integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== dependencies: randombytes "^2.1.0" @@ -6727,6 +7065,28 @@ set-blocking@^2.0.0: resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= +set-function-length@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== + dependencies: + 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" + +set-function-name@^2.0.0, set-function-name@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" + integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.2" + setprototypeof@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" @@ -6761,10 +7121,10 @@ shell-quote@^1.8.1: resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== -shiki@^0.14.1: - version "0.14.1" - resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.14.1.tgz#9fbe082d0a8aa2ad63df4fbf2ee11ec924aa7ee1" - integrity sha512-+Jz4nBkCBe0mEDqo1eKRcCdjRtrCjozmcbTUjbPTX7OOJfEbTZzlUWlZtGe3Gb5oV1/jnojhG//YZc3rs9zSEw== +shiki@^0.14.7: + version "0.14.7" + resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.14.7.tgz#c3c9e1853e9737845f1d2ef81b31bcfb07056d4e" + integrity sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg== dependencies: ansi-sequence-parser "^1.1.0" jsonc-parser "^3.2.0" @@ -6811,10 +7171,10 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -slash@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" - integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== +slash@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-5.1.0.tgz#be3adddcdf09ac38eebe8dcdc7b1a57a75b095ce" + integrity sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg== smart-buffer@^4.2.0: version "4.2.0" @@ -6878,10 +7238,10 @@ socks@^2.7.1: resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== -source-map-loader@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-4.0.2.tgz#1b378721b65adb21e874928a9fb22e8a340d06a5" - integrity sha512-oYwAqCuL0OZhBoSgmdrLa7mv9MjommVMiQIWgcztf+eS4+8BfcUee6nenFnDhKOhzAVnk5gpZdfnz1iiBv+5sg== +source-map-loader@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-5.0.0.tgz#f593a916e1cc54471cfc8851b905c8a845fc7e38" + integrity sha512-k2Dur7CbSLcAH73sBcIkV5xjPV4SzqO1NJ7+XaQl8if3VODDUj3FNchNGpqgJSKbvUfJuhVdv8K2Eu8/TNl2eA== dependencies: iconv-lite "^0.6.3" source-map-js "^1.0.2" @@ -6949,10 +7309,10 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= -sql.js@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/sql.js/-/sql.js-1.9.0.tgz#f78e9b08cd42d6d29dbd842b8733d6c0be52f57a" - integrity sha512-+QMN8NU5KJxofT+lEaSLYdhh+Pdq7ZYS6X5bSbpmD+4SKFf+qBmr+coKT07LZ+keUNh1sf3Nz9dQwD8WNI2i/Q== +sql.js@^1.10.2: + version "1.10.2" + resolved "https://registry.yarnpkg.com/sql.js/-/sql.js-1.10.2.tgz#3d0b5ddfecb37c1ea0ff9ae1250ca06af0e20e92" + integrity sha512-jnKFtdHxuVUNgu1vHwFoTjjwfTuVDVqzGpw7H05Zq3YMNMDOpLFyFGvpgTRIQGd/mqcYntuMy7iygYCytD62jQ== stack-trace@0.0.x: version "0.0.10" @@ -7001,7 +7361,26 @@ streamx@^2.15.0: fast-fifo "^1.1.0" queue-tick "^1.0.1" -"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +streamx@^2.16.1: + version "2.16.1" + resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.16.1.tgz#2b311bd34832f08aa6bb4d6a80297c9caef89614" + integrity sha512-m9QYj6WygWyWa3H1YY69amr4nVgy61xfjys7xO7kviL5rfIEc2naf+ewFiOA+aEJD7y0JO3h2GoiUv4TDwEGzQ== + dependencies: + fast-fifo "^1.1.0" + queue-tick "^1.0.1" + optionalDependencies: + bare-events "^2.2.0" + +"string-width-cjs@npm:string-width@^4.2.0": + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -7019,28 +7398,29 @@ string-width@^5.0.1, string-width@^5.1.2: emoji-regex "^9.2.2" strip-ansi "^7.0.1" -string.prototype.matchall@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3" - integrity sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg== +string.prototype.matchall@^4.0.10: + version "4.0.10" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz#a1553eb532221d4180c51581d6072cd65d1ee100" + integrity sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - get-intrinsic "^1.1.3" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" has-symbols "^1.0.3" - internal-slot "^1.0.3" - regexp.prototype.flags "^1.4.3" + internal-slot "^1.0.5" + regexp.prototype.flags "^1.5.0" + set-function-name "^2.0.0" side-channel "^1.0.4" -string.prototype.trim@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz#a68352740859f6893f14ce3ef1bb3037f7a90533" - integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg== +string.prototype.trim@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" + integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" string.prototype.trimend@^1.0.4: version "1.0.4" @@ -7050,14 +7430,14 @@ string.prototype.trimend@^1.0.4: call-bind "^1.0.2" define-properties "^1.1.3" -string.prototype.trimend@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" - integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== +string.prototype.trimend@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e" + integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" string.prototype.trimstart@^1.0.4: version "1.0.4" @@ -7067,14 +7447,14 @@ string.prototype.trimstart@^1.0.4: call-bind "^1.0.2" define-properties "^1.1.3" -string.prototype.trimstart@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" - integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== +string.prototype.trimstart@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" + integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" string_decoder@^1.1.1: version "1.3.0" @@ -7090,7 +7470,14 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -7134,10 +7521,10 @@ strnum@^1.0.4: resolved "https://registry.yarnpkg.com/strnum/-/strnum-1.0.5.tgz#5c4e829fe15ad4ff0d20c3db5ac97b73c9b072db" integrity sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA== -style-loader@^3.3.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-3.3.3.tgz#bba8daac19930169c0c9c96706749a597ae3acff" - integrity sha512-53BiGLXAcll9maCYtZi2RCQZKa8NQQai5C4horqKyRmHj9H7QmcUyucrH+4KW/gBQbXM2AsB0axoEcFZPlfPcw== +style-loader@^3.3.4: + version "3.3.4" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-3.3.4.tgz#f30f786c36db03a45cbd55b6a70d930c479090e7" + integrity sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w== stylus@^0.59.0: version "0.59.0" @@ -7200,19 +7587,21 @@ table-layout@^3.0.0: typical "^7.1.1" wordwrapjs "^5.1.0" -tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: +tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0, tapable@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== -tar-fs@3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-3.0.4.tgz#a21dc60a2d5d9f55e0089ccd78124f1d3771dbbf" - integrity sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w== +tar-fs@3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-3.0.5.tgz#f954d77767e4e6edf973384e1eb95f8f81d64ed9" + integrity sha512-JOgGAmZyMgbqpLwct7ZV8VzkEB6pxXFBVErLtb+XCOqzc6w1xiWKI9GVd6bwk68EX7eJ4DWmfXVmq8K2ziZTGg== dependencies: - mkdirp-classic "^0.5.2" pump "^3.0.0" tar-stream "^3.1.5" + optionalDependencies: + bare-fs "^2.1.1" + bare-path "^2.1.0" tar-stream@^3.1.5: version "3.1.6" @@ -7235,21 +7624,21 @@ tar@^6.1.11: mkdirp "^1.0.3" yallist "^4.0.0" -terser-webpack-plugin@^5.3.7: - version "5.3.9" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz#832536999c51b46d468067f9e37662a3b96adfe1" - integrity sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA== +terser-webpack-plugin@^5.3.10: + version "5.3.10" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz#904f4c9193c6fd2a03f693a2150c62a92f40d199" + integrity sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w== dependencies: - "@jridgewell/trace-mapping" "^0.3.17" + "@jridgewell/trace-mapping" "^0.3.20" jest-worker "^27.4.5" schema-utils "^3.1.1" serialize-javascript "^6.0.1" - terser "^5.16.8" + terser "^5.26.0" -terser@^5.16.8: - version "5.19.2" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.19.2.tgz#bdb8017a9a4a8de4663a7983f45c506534f9234e" - integrity sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA== +terser@^5.26.0: + version "5.28.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.28.1.tgz#bf00f7537fd3a798c352c2d67d67d65c915d1b28" + integrity sha512-wM+bZp54v/E9eRRGXb5ZFDvinrJIOaTapx3WUokyVGZu5ucVCK55zEgGd5Dl2fSr3jUo5sDiERErUWLY6QPFyA== dependencies: "@jridgewell/source-map" "^0.3.3" acorn "^8.8.2" @@ -7395,12 +7784,7 @@ tslib@^1.12.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.1, tslib@^2.0.3, tslib@^2.3.0, tslib@^2.4.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.0.tgz#b295854684dbda164e181d259a22cd779dcd7bc3" - integrity sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA== - -tslib@^2.5.3: +tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.3.0, tslib@^2.4.0, tslib@^2.5.3, tslib@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== @@ -7445,44 +7829,49 @@ type-is@^1.6.16, type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" -typed-array-buffer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" - integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== +typed-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" + integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" - is-typed-array "^1.1.10" + call-bind "^1.0.7" + es-errors "^1.3.0" + is-typed-array "^1.1.13" -typed-array-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" - integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== +typed-array-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67" + integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw== dependencies: - call-bind "^1.0.2" + call-bind "^1.0.7" for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" -typed-array-byte-offset@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" - integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== +typed-array-byte-offset@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063" + integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA== dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" -typed-array-length@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" - integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== +typed-array-length@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.5.tgz#57d44da160296d8663fd63180a1802ebf25905d5" + integrity sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA== dependencies: - call-bind "^1.0.2" + call-bind "^1.0.7" for-each "^0.3.3" - is-typed-array "^1.1.9" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + possible-typed-array-names "^1.0.0" typedarray-to-buffer@^3.1.5: version "3.1.5" @@ -7491,15 +7880,15 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -typedoc@^0.25.4: - version "0.25.4" - resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.25.4.tgz#5c2c0677881f504e41985f29d9aef0dbdb6f1e6f" - integrity sha512-Du9ImmpBCw54bX275yJrxPVnjdIyJO/84co0/L9mwe0R3G4FSR6rQ09AlXVRvZEGMUg09+z/usc8mgygQ1aidA== +typedoc@^0.25.13: + version "0.25.13" + resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.25.13.tgz#9a98819e3b2d155a6d78589b46fa4c03768f0922" + integrity sha512-pQqiwiJ+Z4pigfOnnysObszLiU3mVLWAExSPf+Mu06G/qsc3wzbuM56SZQvONhHLncLUhYzOVkjFFpFfL5AzhQ== dependencies: lunr "^2.3.9" marked "^4.3.0" minimatch "^9.0.3" - shiki "^0.14.1" + shiki "^0.14.7" typescript-plugin-css-modules@^5.0.2: version "5.0.2" @@ -7596,6 +7985,11 @@ undici-types@~5.26.4: resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== +unicorn-magic@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/unicorn-magic/-/unicorn-magic-0.1.0.tgz#1bb9a51c823aaf9d73a8bfcd3d1a23dde94b0ce4" + integrity sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ== + union@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/union/-/union-0.5.0.tgz#b2c11be84f60538537b846edb9ba266ba0090075" @@ -7618,6 +8012,14 @@ unpipe@1.0.0, unpipe@~1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= +update-browserslist-db@^1.0.13: + version "1.0.13" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" + integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + update-check@1.5.4: version "1.5.4" resolved "https://registry.yarnpkg.com/update-check/-/update-check-1.5.4.tgz#5b508e259558f1ad7dbc8b4b0457d4c9d28c8743" @@ -7638,10 +8040,10 @@ url-join@^4.0.1: resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7" integrity sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA== -urlpattern-polyfill@9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/urlpattern-polyfill/-/urlpattern-polyfill-9.0.0.tgz#bc7e386bb12fd7898b58d1509df21d3c29ab3460" - integrity sha512-WHN8KDQblxd32odxeIgo83rdVDE2bvdkb86it7bMhYZwWKJz0+O0RK/eZiHYnM+zgt/U7hAHOlCQGfjjvSkw2g== +urlpattern-polyfill@10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz#f0a03a97bfb03cdf33553e5e79a2aadd22cac8ec" + integrity sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg== util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" @@ -7781,52 +8183,53 @@ webpack-cli@^5.1.4: rechoir "^0.8.0" webpack-merge "^5.7.3" -webpack-dev-middleware@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.1.tgz#aa079a8dedd7e58bfeab358a9af7dab304cee57f" - integrity sha512-81EujCKkyles2wphtdrnPg/QqegC/AtqNH//mQkBYSMqwFVCQrxM6ktB2O/SPlZy7LqeEfTbV3cZARGQz6umhg== +webpack-dev-middleware@^7.1.0: + version "7.2.1" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-7.2.1.tgz#2af00538b6e4eda05f5afdd5d711dbebc05958f7" + integrity sha512-hRLz+jPQXo999Nx9fXVdKlg/aehsw1ajA9skAneGmT03xwmyuhvF93p6HUKKbWhXdcERtGTzUCtIQr+2IQegrA== dependencies: colorette "^2.0.10" - memfs "^3.4.1" + memfs "^4.6.0" mime-types "^2.1.31" + on-finished "^2.4.1" range-parser "^1.2.1" schema-utils "^4.0.0" -webpack-dev-server@^4.15.1: - version "4.15.1" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz#8944b29c12760b3a45bdaa70799b17cb91b03df7" - integrity sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA== - dependencies: - "@types/bonjour" "^3.5.9" - "@types/connect-history-api-fallback" "^1.3.5" - "@types/express" "^4.17.13" - "@types/serve-index" "^1.9.1" - "@types/serve-static" "^1.13.10" - "@types/sockjs" "^0.3.33" - "@types/ws" "^8.5.5" +webpack-dev-server@^5.0.4: + version "5.0.4" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-5.0.4.tgz#cb6ea47ff796b9251ec49a94f24a425e12e3c9b8" + integrity sha512-dljXhUgx3HqKP2d8J/fUMvhxGhzjeNVarDLcbO/EWMSgRizDkxHQDZQaLFL5VJY9tRBj2Gz+rvCEYYvhbqPHNA== + dependencies: + "@types/bonjour" "^3.5.13" + "@types/connect-history-api-fallback" "^1.5.4" + "@types/express" "^4.17.21" + "@types/serve-index" "^1.9.4" + "@types/serve-static" "^1.15.5" + "@types/sockjs" "^0.3.36" + "@types/ws" "^8.5.10" ansi-html-community "^0.0.8" - bonjour-service "^1.0.11" - chokidar "^3.5.3" + bonjour-service "^1.2.1" + chokidar "^3.6.0" colorette "^2.0.10" compression "^1.7.4" connect-history-api-fallback "^2.0.0" default-gateway "^6.0.3" express "^4.17.3" graceful-fs "^4.2.6" - html-entities "^2.3.2" + html-entities "^2.4.0" http-proxy-middleware "^2.0.3" - ipaddr.js "^2.0.1" - launch-editor "^2.6.0" - open "^8.0.9" - p-retry "^4.5.0" - rimraf "^3.0.2" - schema-utils "^4.0.0" - selfsigned "^2.1.1" + ipaddr.js "^2.1.0" + launch-editor "^2.6.1" + open "^10.0.3" + p-retry "^6.2.0" + rimraf "^5.0.5" + schema-utils "^4.2.0" + selfsigned "^2.4.1" serve-index "^1.9.1" sockjs "^0.3.24" spdy "^4.0.2" - webpack-dev-middleware "^5.3.1" - ws "^8.13.0" + webpack-dev-middleware "^7.1.0" + ws "^8.16.0" webpack-merge@^4.1.5: version "4.2.2" @@ -7848,19 +8251,19 @@ webpack-sources@^3.2.3: resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== -webpack@^5.89.0: - version "5.89.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.89.0.tgz#56b8bf9a34356e93a6625770006490bf3a7f32dc" - integrity sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw== +webpack@^5.90.3: + version "5.90.3" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.90.3.tgz#37b8f74d3ded061ba789bb22b31e82eed75bd9ac" + integrity sha512-h6uDYlWCctQRuXBs1oYpVe6sFcWedl0dpcVaTf/YF67J9bKvwJajFulMVSYKHrksMB3I/pIagRzDxwxkebuzKA== dependencies: "@types/eslint-scope" "^3.7.3" - "@types/estree" "^1.0.0" + "@types/estree" "^1.0.5" "@webassemblyjs/ast" "^1.11.5" "@webassemblyjs/wasm-edit" "^1.11.5" "@webassemblyjs/wasm-parser" "^1.11.5" acorn "^8.7.1" acorn-import-assertions "^1.9.0" - browserslist "^4.14.5" + browserslist "^4.21.10" chrome-trace-event "^1.0.2" enhanced-resolve "^5.15.0" es-module-lexer "^1.2.1" @@ -7874,7 +8277,7 @@ webpack@^5.89.0: neo-async "^2.6.2" schema-utils "^3.2.0" tapable "^2.1.1" - terser-webpack-plugin "^5.3.7" + terser-webpack-plugin "^5.3.10" watchpack "^2.4.0" webpack-sources "^3.2.3" @@ -7965,16 +8368,16 @@ which-module@^2.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= -which-typed-array@^1.1.10: - version "1.1.11" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a" - integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew== +which-typed-array@^1.1.14: + version "1.1.15" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d" + integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" for-each "^0.3.3" gopd "^1.0.1" - has-tostringtag "^1.0.0" + has-tostringtag "^1.0.2" which-typed-array@^1.1.2: version "1.1.7" @@ -8014,6 +8417,13 @@ which@^2.0.1: dependencies: isexe "^2.0.0" +which@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/which/-/which-3.0.1.tgz#89f1cd0c23f629a8105ffe69b8172791c87b4be1" + integrity sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg== + dependencies: + isexe "^2.0.0" + widest-line@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-4.0.1.tgz#a0fc673aaba1ea6f0a0d35b3c2795c9a9cc2ebf2" @@ -8063,7 +8473,7 @@ wordwrapjs@^5.1.0: resolved "https://registry.yarnpkg.com/wordwrapjs/-/wordwrapjs-5.1.0.tgz#4c4d20446dcc670b14fa115ef4f8fd9947af2b3a" integrity sha512-JNjcULU2e4KJwUNv6CHgI46UvDGitb6dGryHajXTDiLgg1/RiGoPSDw4kZfYnwGtEXf2ZMeIewDQgFGzkCB2Sg== -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -8081,6 +8491,15 @@ wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrap-ansi@^8.0.1, wrap-ansi@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" @@ -8105,20 +8524,20 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" -ws@8.15.1: - version "8.15.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.15.1.tgz#271ba33a45ca0cc477940f7f200cd7fba7ee1997" - integrity sha512-W5OZiCjXEmk0yZ66ZN82beM5Sz7l7coYxpRkzS+p9PP+ToQry8szKh+61eNktr7EA9DOwvFGhfC605jDHbP6QQ== +ws@8.17.0: + version "8.17.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.0.tgz#d145d18eca2ed25aaf791a183903f7be5e295fea" + integrity sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow== ws@^7.3.1: version "7.5.5" resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.5.tgz#8b4bc4af518cfabd0473ae4f99144287b33eb881" integrity sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w== -ws@^8.13.0: - version "8.14.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.14.2.tgz#6c249a806eb2db7a20d26d51e7709eab7b2e6c7f" - integrity sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g== +ws@^8.16.0: + version "8.16.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.16.0.tgz#d1cd774f36fbc07165066a60e40323eab6446fd4" + integrity sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ== ws@~8.2.3: version "8.2.3" @@ -8243,3 +8662,8 @@ yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zod@3.22.4: + version "3.22.4" + resolved "https://registry.yarnpkg.com/zod/-/zod-3.22.4.tgz#f31c3a9386f61b1f228af56faa9255e845cf3fff" + integrity sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==