From b2616e33eb0821c47135b25365b20bcb2ef4dbb6 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Wed, 24 Jan 2024 22:58:43 -0700 Subject: [PATCH 01/98] CLIENT-2758 Added mocha --dry-run Added test.yml --- .github/workflows/tests.yml | 292 ++++++++++++++++++++++++++++++++++++ package.json | 1 + 2 files changed, 293 insertions(+) create mode 100644 .github/workflows/tests.yml diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml new file mode 100644 index 00000000..3ad92d5b --- /dev/null +++ b/.github/workflows/tests.yml @@ -0,0 +1,292 @@ +name: PR pre-merge tests + +env: + LOWEST_SUPPORTED_NODEJS_VERSION: '18' + LOWEST_SUPPORTED_NODE_MODULE: 'v108' + +# Trigger test workflow whenever: +# 1. A pull request is updated (e.g with new commits) +# 2. Commits are pushed directly to the stage or master branch +on: + push: + branches: ["stage", "master"] + pull_request: + branches: ["stage"] + types: [ + # Default triggers + opened, + synchronize, + reopened, + # Additional triggers + labeled, + unlabeled + ] + workflow_dispatch: + +jobs: + lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + - uses: actions/setup-node@v4 + with: + node-version: '18' + architecture: 'x64' + - uses: pre-commit/action@v3.0.0 + + build: + runs-on: ubuntu-latest + strategy: + matrix: + nodejs-version: ["18", "20", "21"] + fail-fast: false + + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + + - uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.nodejs-version }} + architecture: 'x64' + + - run: sudo apt update + - name: Install build dependencies (C Client dependency packages) + run: sudo apt install g++ libssl-dev zlib1g-dev; + - name: Install build dependencies (make) + run: sudo apt-get install -y make; + - name: Install build dependencies (make) + run: sudo apt install build-essential; + + - name: Build client + run: ./scripts/build-c-client + env: + CFLAGS: '-Werror' + + - name: Send binding to test jobs + uses: actions/upload-artifact@v4 + with: + name: binding-${{ matrix.nodejs-version }} + path: ./lib/binding/node-*-linux-arm64 + +# test-memray: +# needs: build +# runs-on: ubuntu-latest +# steps: +# - uses: actions/checkout@v4 +# +# - uses: actions/setup-node@v4 +# with: +# python-version: ${{ matrix.nodejs-version }} +# architecture: 'x64' +# +# - uses: actions/download-artifact@v3 +# with: +# name: binding-18 +# +# - name: make binding folder +# run: mkdir lib/binding +# +# - name: Install client +# run: cp -r install node-v108-linux-x64 lib/binding/node-v108-linux-x64 +# +# - name: Install client +# run: npm install . +# +# - name: Run Aerospike server +# run: docker run -d --name aerospike -p 3000-3002:3000-3002 aerospike/aerospike-server +# +# - name: Wait for database to be ready +# # Should be ready after 3 seconds +# run: sleep 3 +# +# - name: Get number of tests +# run: echo "NUM_TESTS=$(npm test-dry-run | grep -oP '\d+ (passing|pending)' | awk '{ sum += $1 } END { print sum }')" >> $GITHUB_ENV +# working-directory: test +# +# - name: Run tests +# # Get number of tests since setting to 0 doesn't work properly +# # pytest-memray currently throws a ZeroDivision error due to having a bug +# # We ignore this for now +# run: python -m pytest ./new_tests --memray --memray-bin-path=./ --most-allocations=${{ env.NUM_TESTS }} || true +# working-directory: test + + # Run this when testing new server features on server release candidate + # to make sure the tests don't regress on the last server release. + test-ce-latest-release: + runs-on: ubuntu-latest + if: ${{ contains(github.event.pull_request.labels.*.name, 'new-server-features') }} + needs: build + + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + + - uses: actions/setup-node@v4 + with: + node-version: ${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} + architecture: 'x64' + + - uses: actions/download-artifact@v3 + with: + name: binding-${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} + + - name: make binding folder + run: mkdir lib/binding + + - name: Install client + run: cp -r node-${{ env.LOWEST_SUPPORTED_NODE_MODULE }}-linux-x64 lib/binding/node-${{ env.LOWEST_SUPPORTED_NODE_MODULE }}-linux-x64 + + - name: Run Aerospike server + run: docker run -d --name aerospike -p 3000-3002:3000-3002 aerospike/aerospike-server + + - name: Wait for database to be ready + # Should be ready after 3 seconds + run: sleep 3 + + - name: Run tests + run: npm test + working-directory: test + + test-ce: + runs-on: ubuntu-latest + needs: build + strategy: + matrix: + node-version: [ + "18", + "20", + "21" + ] + fail-fast: false + + steps: + - uses: actions/checkout@v2 + with: + submodules: recursive + + - uses: actions/setup-node@v4 + with: + python-version: ${{ matrix.node-version }} + architecture: 'x64' + + - uses: actions/download-artifact@v3 + with: + name: binding-${{ matrix.py-version }} + + - name: make binding folder + run: mkdir lib/binding + + - name: Install client + #fix the convention here + run: | + if [ "${{ matrix.node-version }}" = "18" ]; then + cp -r node-v108-linux-x64 lib/binding/node-v108-linux-x64 + elif [ "${{ matrix.node-version }}" = "20" ]; then + cp -r node-v108-linux-x64 lib/binding/node-v115-linux-x64 + elif [ "${{ matrix.node-version }}" = "21" ]; then + cp -r node-v108-linux-x64 lib/binding/node-v120-linux-x64 + fi + + - if: ${{ contains(github.event.pull_request.labels.*.name, 'new-server-features') }} + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKER_HUB_BOT_USERNAME }} + password: ${{ secrets.DOCKER_HUB_BOT_PW }} + + - name: Run Aerospike server release candidate with latest tag + if: ${{ contains(github.event.pull_request.labels.*.name, 'new-server-features') }} + run: docker run -d --name aerospike -p 3000-3002:3000-3002 aerospike/aerospike-server-rc:latest + + - name: Run Aerospike server + if: ${{ !contains(github.event.pull_request.labels.*.name, 'new-server-features') }} + run: docker run -d --name aerospike -p 3000-3002:3000-3002 aerospike/aerospike-server + + - name: Wait for database to be ready + # Should be ready after 3 seconds + run: sleep 3 + + - name: Run tests + run: npm test + + test-lowest-supported-server: + runs-on: ubuntu-latest + needs: build + steps: + - uses: actions/checkout@v2 + with: + submodules: recursive + + - uses: actions/setup-node@v4 + with: + node-version: ${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} + architecture: 'x64' + + - uses: actions/download-artifact@v3 + with: + name: binding-${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} + + - name: make binding folder + run: mkdir lib/binding + + - name: Install client + #fix the convention here + run: cp -r node-${{ env.LOWEST_SUPPORTED_NODE_MODULE }}-linux-x64 lib/binding/node-${{ env.LOWEST_SUPPORTED_NODE_MODULE }}-linux-x64 + + - name: Run lowest supported server + run: | + SERVER_VERSION=$(curl -s "https://registry.hub.docker.com/v2/repositories/aerospike/aerospike-server/tags?page_size=100" | jq '.results[] | select(.name | startswith("6.0")).name' -r | head -n 1) + docker run -d --name aerospike -p 3000-3002:3000-3002 aerospike/aerospike-server:$SERVER_VERSION + + - name: Wait for database to be ready + # Should be ready after 3 seconds + run: sleep 3 + + - name: Run tests + run: npm test + + test-ee: + runs-on: ubuntu-latest + needs: build + steps: + - uses: actions/checkout@v2 + with: + submodules: recursive + + - uses: actions/setup-node@v4 + with: + node-version: ${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} + architecture: 'x64' + + - uses: actions/download-artifact@v3 + with: + name: binding-${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} + + - name: make binding folder + run: mkdir lib/binding + + - name: Install client + #fix the convention here + run: cp -r node-${{ env.LOWEST_SUPPORTED_NODE_MODULE }}-linux-x64 lib/binding/node-${{ env.LOWEST_SUPPORTED_NODE_MODULE }}-linux-x64 + + - uses: ./.github/actions/run-ee-server + with: + use-server-rc: ${{ contains(github.event.pull_request.labels.*.name, 'new-server-features') }} + docker-hub-username: ${{ secrets.DOCKER_HUB_BOT_USERNAME }} + docker-hub-password: ${{ secrets.DOCKER_HUB_BOT_PW }} + + - name: Wait for server to start + run: sleep 5 + + - name: Run tests + run: npm test + + - name: Show logs if failed + if: ${{ failure() }} + run: | + docker container logs aerospike + cat ./configs/aerospike.conf \ No newline at end of file diff --git a/package.json b/package.json index 38f7424e..dce50b9a 100644 --- a/package.json +++ b/package.json @@ -42,6 +42,7 @@ "install": "npm run build", "build": "node-pre-gyp install --fallback-to-build", "test": "mocha", + "test-dry-run": "mocha --dry-run", "test-noserver": "GLOBAL_CLIENT=false mocha -g '#noserver'", "lint": "standard", "posttest": "npm run lint", From 81eb74bdf382f09bdae8d97dad4a1fc9d39fecfd Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Wed, 24 Jan 2024 23:10:43 -0700 Subject: [PATCH 02/98] Update tests.yml --- .github/workflows/tests.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 3ad92d5b..94bd964e 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -34,7 +34,7 @@ jobs: with: node-version: '18' architecture: 'x64' - - uses: pre-commit/action@v3.0.0 + run: npm lint build: runs-on: ubuntu-latest @@ -62,7 +62,7 @@ jobs: run: sudo apt install build-essential; - name: Build client - run: ./scripts/build-c-client + run: ./scripts/build-c-client.sh env: CFLAGS: '-Werror' @@ -150,7 +150,6 @@ jobs: - name: Run tests run: npm test - working-directory: test test-ce: runs-on: ubuntu-latest From 4acf56ea30b49d5451f14877f9e89515a2cd5e09 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Wed, 24 Jan 2024 23:31:29 -0700 Subject: [PATCH 03/98] Update tests.yml --- .github/workflows/tests.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 94bd964e..b8e8eed5 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -30,10 +30,7 @@ jobs: - uses: actions/checkout@v4 with: submodules: recursive - - uses: actions/setup-node@v4 - with: - node-version: '18' - architecture: 'x64' + - name: lint run: npm lint build: From f7d4e93da705c88d1118b0beee46bf1fd131c07d Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Wed, 24 Jan 2024 23:58:23 -0700 Subject: [PATCH 04/98] Update tests.yml Removed all actions to reduce testing scope --- .github/workflows/codeql.yml | 62 ----------------------- .github/workflows/linux-build.yml | 47 ------------------ .github/workflows/macOS-build.yml | 42 ---------------- .github/workflows/tests.yml | 4 +- .github/workflows/windows-build.yml | 77 ----------------------------- 5 files changed, 3 insertions(+), 229 deletions(-) delete mode 100644 .github/workflows/codeql.yml delete mode 100644 .github/workflows/linux-build.yml delete mode 100644 .github/workflows/macOS-build.yml delete mode 100644 .github/workflows/windows-build.yml diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml deleted file mode 100644 index b310fab1..00000000 --- a/.github/workflows/codeql.yml +++ /dev/null @@ -1,62 +0,0 @@ -# For most projects, this workflow file will not need changing; you simply need -# to commit it to your repository. -# -# You may wish to alter this file to override the set of languages analyzed, -# or to provide custom queries or build logic. -# -# ******** NOTE ******** -# We have attempted to detect the languages in your repository. Please check -# the `language` matrix defined below to confirm you have the correct set of -# supported CodeQL languages. -# -name: "CodeQL" - -on: - workflow_dispatch: - -jobs: - analyze: - name: Analyze - runs-on: ubuntu-latest - permissions: - actions: read - contents: read - security-events: write - - strategy: - fail-fast: false - matrix: - language: [ 'javascript' ] - # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ] - # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support - node-version: # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ - - 20.x - - steps: - - name: Checkout repository - uses: actions/checkout@v3 - with: - submodules: recursive - - run: ./scripts/build-c-client.sh - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v2 - with: - node-version: ${{ matrix.node-version }} - cache: 'npm' - - run: npm install --unsafe-perm --build-from-source - - # Initializes the CodeQL tools for scanning. - - name: Initialize CodeQL - uses: github/codeql-action/init@v2 - with: - languages: ${{ matrix.language }} - # If you wish to specify custom queries, you can do so here or in a config file. - # By default, queries listed here will override any specified in a config file. - # Prefix the list here with "+" to use these queries and those in the config file. - # Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs - # queries: security-extended,security-and-quality - - # Perform CodeQL Analysis - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v2 - diff --git a/.github/workflows/linux-build.yml b/.github/workflows/linux-build.yml deleted file mode 100644 index 910f3b79..00000000 --- a/.github/workflows/linux-build.yml +++ /dev/null @@ -1,47 +0,0 @@ -# This workflow will do a clean install of node dependencies, cache/restore them, build the source code and run tests across different versions of node -# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions - -name: Aerospike Node.js Linux Client Tests - -on: - push: - branches: - - master - - maint/3.x - - maint/4.x - - gh-action - pull_request: - branches: - - master - - stage - - maint/3.x - - maint/4.x - -jobs: - build: - runs-on: ubuntu-latest # https://github.com/actions/virtual-environments - strategy: - matrix: - node-version: # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ - - 18.x - - 20.x - - 21.x - continue-on-error: true - steps: - - uses: actions/checkout@v3 - with: - submodules: recursive - - run: ./scripts/build-c-client.sh - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v3 - with: - node-version: ${{ matrix.node-version }} - cache: 'npm' - - name: Set up Aerospike Database - uses: reugn/github-action-aerospike@v1 - - run: npm install - - run: npm run coverage - env: - AEROSPIKE_HOSTS: "127.0.0.1:3000" - OPTIONS: "--timeout 30000" - - run: npm run codecov diff --git a/.github/workflows/macOS-build.yml b/.github/workflows/macOS-build.yml deleted file mode 100644 index 2df7672d..00000000 --- a/.github/workflows/macOS-build.yml +++ /dev/null @@ -1,42 +0,0 @@ -# This workflow will do a clean install of node dependencies, cache/restore them, build the source code and run tests across different versions of node -# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions - -name: Aerospike Node.js macOS Client Tests - -on: - push: - branches: - - master - - maint/3.x - - maint/4.x - - gh-action - pull_request: - branches: - - master - - stage - - maint/3.x - - maint/4.x - -jobs: - setup: - runs-on: ubuntu-latest - steps: - - name: Set up Aerospike Database - uses: reugn/github-action-aerospike@v1 - build: - needs: setup - runs-on: macos-latest # https://github.com/actions/virtual-environments - steps: - - uses: actions/checkout@v3 - with: - submodules: recursive - - run: ./scripts/build-package.sh 1 - # test: - # needs: build - # runs-on: macos-latest - # steps: - # - run: npm test - # env: - # AEROSPIKE_HOSTS: "127.0.0.1:3000" - # OPTIONS: "--timeout 30000" - # - run: npm run codecov diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index b8e8eed5..bbb1713d 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -59,7 +59,9 @@ jobs: run: sudo apt install build-essential; - name: Build client - run: ./scripts/build-c-client.sh + run: | + ./scripts/build-c-client.sh + npm install env: CFLAGS: '-Werror' diff --git a/.github/workflows/windows-build.yml b/.github/workflows/windows-build.yml deleted file mode 100644 index 70d8bdf9..00000000 --- a/.github/workflows/windows-build.yml +++ /dev/null @@ -1,77 +0,0 @@ -# This workflow will do a clean install of node dependencies, cache/restore them, build the source code and run tests across different versions of node -# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions - -name: Aerospike Node.js Windows Client Tests - -on: - push: - branches: - - master - - maint/3.x - - maint/4.x - - gh-action - pull_request: - branches: - - master - - stage - - maint/3.x - - maint/4.x - -jobs: - # setup: - # runs-on: ubuntu-latest - # steps: - # - name: Set up Aerospike Database - # uses: reugn/github-action-aerospike@v1 - - build: - runs-on: windows-latest - strategy: - matrix: - node-version: # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ - - 18.x - - 20.x - - 21.x - continue-on-error: true - name: Node ${{ matrix.node-version }} tester - steps: - - uses: actions/checkout@v3 - with: - submodules: recursive - - uses: actions/setup-python@v4 - with: - python-version: '3.11' - - name: Setup Windows SDK - uses: GuillaumeFalourd/setup-windows10-sdk-action@v1.11 - with: - sdk-version: 17763 - - name: Setup NuGet.exe - uses: nuget/setup-nuget@v1 - with: - nuget-version: latest - - run: nuget restore aerospike.sln - working-directory: aerospike-client-c\vs\ - - name: Setup node - uses: actions/setup-node@v3 - with: - node-version: ${{ matrix.node-version }} - - name: Update node-gyp - run: | - $WhereNode = Get-Command node | Select-Object -ExpandProperty Definition - $NodeDirPath = Split-Path $WhereNode -Parent - [Version]$npmVersion = npm --version - if ($npmVersion -lt [Version]"7.0") { - $NodeModulesPath = $NodeDirPath + "\node_modules\npm\node_modules\npm-lifecycle" - } else { - $NodeModulesPath = $NodeDirPath + "\node_modules\npm\node_modules\@npmcli\run-script" - } - cd $NodeModulesPath - npm install node-gyp@10.x - - name: Install nodejs Client - shell: pwsh - run: npm ci --unsafe-perm --build-from-source - # - name: Test nodejs client - # run: npm test - # env: - # AEROSPIKE_HOSTS: "127.0.0.1:3000" - # OPTIONS: "--timeout 30000 --set demp ${{ matrix.node }}" \ No newline at end of file From e39c39062a4f08ad191395c169bdd0da44198636 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Thu, 25 Jan 2024 00:03:45 -0700 Subject: [PATCH 05/98] Update tests.yml --- .github/workflows/tests.yml | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index bbb1713d..bba8d19e 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -31,7 +31,7 @@ jobs: with: submodules: recursive - name: lint - run: npm lint + run: npm run lint build: runs-on: ubuntu-latest @@ -65,11 +65,13 @@ jobs: env: CFLAGS: '-Werror' + - name: list + run: ls lib/binding - name: Send binding to test jobs uses: actions/upload-artifact@v4 with: name: binding-${{ matrix.nodejs-version }} - path: ./lib/binding/node-*-linux-arm64 + path: ./lib/binding/node-*-linux-arm64/aero # test-memray: # needs: build @@ -103,7 +105,7 @@ jobs: # run: sleep 3 # # - name: Get number of tests -# run: echo "NUM_TESTS=$(npm test-dry-run | grep -oP '\d+ (passing|pending)' | awk '{ sum += $1 } END { print sum }')" >> $GITHUB_ENV +# run: echo "NUM_TESTS=$(npm run test-dry-run | grep -oP '\d+ (passing|pending)' | awk '{ sum += $1 } END { print sum }')" >> $GITHUB_ENV # working-directory: test # # - name: Run tests @@ -148,7 +150,7 @@ jobs: run: sleep 3 - name: Run tests - run: npm test + run: npm run test test-ce: runs-on: ubuntu-latest @@ -209,7 +211,7 @@ jobs: run: sleep 3 - name: Run tests - run: npm test + run: npm run test test-lowest-supported-server: runs-on: ubuntu-latest @@ -245,7 +247,7 @@ jobs: run: sleep 3 - name: Run tests - run: npm test + run: npm run test test-ee: runs-on: ubuntu-latest @@ -281,7 +283,7 @@ jobs: run: sleep 5 - name: Run tests - run: npm test + run: npm run test - name: Show logs if failed if: ${{ failure() }} From a8e872264f766566e533d29e833fd3fd807bd6a9 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Thu, 25 Jan 2024 00:13:52 -0700 Subject: [PATCH 06/98] Update tests.yml --- .github/workflows/tests.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index bba8d19e..fd41bfcd 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -30,6 +30,8 @@ jobs: - uses: actions/checkout@v4 with: submodules: recursive + - name: install standard + run: npm install standard - name: lint run: npm run lint @@ -60,8 +62,7 @@ jobs: - name: Build client run: | - ./scripts/build-c-client.sh - npm install + ./scripts/build-package.sh env: CFLAGS: '-Werror' @@ -71,7 +72,7 @@ jobs: uses: actions/upload-artifact@v4 with: name: binding-${{ matrix.nodejs-version }} - path: ./lib/binding/node-*-linux-arm64/aero + path: ./lib/binding/node-*-linux-x64/ # test-memray: # needs: build From 7325e5771218d7ebb07d7a2f0a221a15408b2b4b Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Thu, 25 Jan 2024 00:32:19 -0700 Subject: [PATCH 07/98] Update tests.yml --- .github/workflows/tests.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index fd41bfcd..58dc981d 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -85,7 +85,7 @@ jobs: # python-version: ${{ matrix.nodejs-version }} # architecture: 'x64' # -# - uses: actions/download-artifact@v3 +# - uses: actions/download-artifact@v4 # with: # name: binding-18 # @@ -133,7 +133,7 @@ jobs: node-version: ${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} architecture: 'x64' - - uses: actions/download-artifact@v3 + - uses: actions/download-artifact@v4 with: name: binding-${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} @@ -175,7 +175,7 @@ jobs: python-version: ${{ matrix.node-version }} architecture: 'x64' - - uses: actions/download-artifact@v3 + - uses: actions/download-artifact@v4 with: name: binding-${{ matrix.py-version }} @@ -227,7 +227,7 @@ jobs: node-version: ${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} architecture: 'x64' - - uses: actions/download-artifact@v3 + - uses: actions/download-artifact@v4 with: name: binding-${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} @@ -263,7 +263,7 @@ jobs: node-version: ${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} architecture: 'x64' - - uses: actions/download-artifact@v3 + - uses: actions/download-artifact@v4 with: name: binding-${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} From d8022b5220b90aa572d9af157101ea760594e2d3 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Thu, 25 Jan 2024 00:50:37 -0700 Subject: [PATCH 08/98] Update tests.yml --- .github/workflows/tests.yml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 58dc981d..594adfef 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -62,7 +62,8 @@ jobs: - name: Build client run: | - ./scripts/build-package.sh + ./scripts/build-c-client.sh + npm install env: CFLAGS: '-Werror' @@ -135,7 +136,7 @@ jobs: - uses: actions/download-artifact@v4 with: - name: binding-${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} + name: binding-${{ matrix.node-version }} - name: make binding folder run: mkdir lib/binding @@ -229,7 +230,7 @@ jobs: - uses: actions/download-artifact@v4 with: - name: binding-${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} + name: binding-${{ matrix.node-version }} - name: make binding folder run: mkdir lib/binding @@ -265,7 +266,7 @@ jobs: - uses: actions/download-artifact@v4 with: - name: binding-${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} + name: binding-${{ matrix.node-version }} - name: make binding folder run: mkdir lib/binding From 37892bbe90ee9a0fe87570e0d979a913615aac01 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Thu, 25 Jan 2024 01:06:01 -0700 Subject: [PATCH 09/98] Update tests.yml --- .github/workflows/tests.yml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 594adfef..8d77dd47 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -83,7 +83,7 @@ jobs: # # - uses: actions/setup-node@v4 # with: -# python-version: ${{ matrix.nodejs-version }} +# node-version: ${{ matrix.nodejs-version }} # architecture: 'x64' # # - uses: actions/download-artifact@v4 @@ -136,7 +136,8 @@ jobs: - uses: actions/download-artifact@v4 with: - name: binding-${{ matrix.node-version }} + name: binding-${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} + - name: make binding folder run: mkdir lib/binding @@ -173,12 +174,12 @@ jobs: - uses: actions/setup-node@v4 with: - python-version: ${{ matrix.node-version }} + node-version: ${{ matrix.node-version }} architecture: 'x64' - uses: actions/download-artifact@v4 with: - name: binding-${{ matrix.py-version }} + name: binding-${{ matrix.node-version }} - name: make binding folder run: mkdir lib/binding From 8d9d4916c81ea4b851a6da83f7ab0cca91d7b81f Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Thu, 25 Jan 2024 01:12:23 -0700 Subject: [PATCH 10/98] Update tests.yml --- .github/workflows/tests.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 8d77dd47..2b93fd96 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -42,6 +42,7 @@ jobs: nodejs-version: ["18", "20", "21"] fail-fast: false + steps: - uses: actions/checkout@v4 with: @@ -51,6 +52,9 @@ jobs: with: node-version: ${{ matrix.nodejs-version }} architecture: 'x64' + - name: debugging + run: | + echo "LOWEST_SUPPORTED_NODEJS_VERSION: $LOWEST_SUPPORTED_NODEJS_VERSION" - run: sudo apt update - name: Install build dependencies (C Client dependency packages) @@ -128,7 +132,9 @@ jobs: - uses: actions/checkout@v4 with: submodules: recursive - + - name: debugging + run: | + echo "LOWEST_SUPPORTED_NODEJS_VERSION: $LOWEST_SUPPORTED_NODEJS_VERSION" - uses: actions/setup-node@v4 with: node-version: ${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} From fc9c7f4c3dd2e7769b9c39df6126f18b8605c9cb Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Thu, 25 Jan 2024 01:15:01 -0700 Subject: [PATCH 11/98] Update tests.yml --- .github/workflows/tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 2b93fd96..9e645310 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -132,7 +132,7 @@ jobs: - uses: actions/checkout@v4 with: submodules: recursive - - name: debugging + - name: debugging run: | echo "LOWEST_SUPPORTED_NODEJS_VERSION: $LOWEST_SUPPORTED_NODEJS_VERSION" - uses: actions/setup-node@v4 From 3e820865433631acca934a6f4e2fe6b1e5f0f909 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Thu, 25 Jan 2024 01:16:34 -0700 Subject: [PATCH 12/98] Update tests.yml --- .github/workflows/tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 9e645310..ec5b4452 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -54,7 +54,7 @@ jobs: architecture: 'x64' - name: debugging run: | - echo "LOWEST_SUPPORTED_NODEJS_VERSION: $LOWEST_SUPPORTED_NODEJS_VERSION" + echo "LOWEST_SUPPORTED_NODEJS_VERSION: $LOWEST_SUPPORTED_NODEJS_VERSION" - run: sudo apt update - name: Install build dependencies (C Client dependency packages) From 9abbf6ee4bbaef7c1c30e397eb338ee5f52260ca Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Thu, 25 Jan 2024 01:27:06 -0700 Subject: [PATCH 13/98] Update tests.yml --- .github/workflows/tests.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index ec5b4452..f477c285 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -143,6 +143,8 @@ jobs: - uses: actions/download-artifact@v4 with: name: binding-${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} + env: + LOWEST_SUPPORTED_NODEJS_VERSION: ${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} - name: make binding folder From 4b9b590fe27b6398c41fdeb85a1a673423c0e941 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Thu, 25 Jan 2024 01:41:43 -0700 Subject: [PATCH 14/98] Update tests.yml --- .github/workflows/tests.yml | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index f477c285..c3465ded 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -192,6 +192,9 @@ jobs: - name: make binding folder run: mkdir lib/binding + - name: install mocha + run: npm install mocha + - name: Install client #fix the convention here run: | @@ -239,7 +242,9 @@ jobs: - uses: actions/download-artifact@v4 with: - name: binding-${{ matrix.node-version }} + name: binding-${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} + env: + LOWEST_SUPPORTED_NODEJS_VERSION: ${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} - name: make binding folder run: mkdir lib/binding @@ -275,8 +280,10 @@ jobs: - uses: actions/download-artifact@v4 with: - name: binding-${{ matrix.node-version }} - + name: binding-${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} + env: + LOWEST_SUPPORTED_NODEJS_VERSION: ${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} + - name: make binding folder run: mkdir lib/binding From 3b67cd8ecd676e4c1e0922d2b741ecd418ef45fa Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Thu, 25 Jan 2024 01:49:53 -0700 Subject: [PATCH 15/98] Update tests.yml --- .github/workflows/tests.yml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index c3465ded..9fabbb19 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -201,9 +201,9 @@ jobs: if [ "${{ matrix.node-version }}" = "18" ]; then cp -r node-v108-linux-x64 lib/binding/node-v108-linux-x64 elif [ "${{ matrix.node-version }}" = "20" ]; then - cp -r node-v108-linux-x64 lib/binding/node-v115-linux-x64 + cp -r node-v115-linux-x64 lib/binding/node-v115-linux-x64 elif [ "${{ matrix.node-version }}" = "21" ]; then - cp -r node-v108-linux-x64 lib/binding/node-v120-linux-x64 + cp -r node-v120-linux-x64 lib/binding/node-v120-linux-x64 fi - if: ${{ contains(github.event.pull_request.labels.*.name, 'new-server-features') }} @@ -249,6 +249,9 @@ jobs: - name: make binding folder run: mkdir lib/binding + - name: install mocha + run: npm install mocha + - name: Install client #fix the convention here run: cp -r node-${{ env.LOWEST_SUPPORTED_NODE_MODULE }}-linux-x64 lib/binding/node-${{ env.LOWEST_SUPPORTED_NODE_MODULE }}-linux-x64 @@ -283,7 +286,7 @@ jobs: name: binding-${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} env: LOWEST_SUPPORTED_NODEJS_VERSION: ${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} - + - name: make binding folder run: mkdir lib/binding From 09a16241745cc83d2f5e880be1afc00e2ee89055 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Thu, 25 Jan 2024 02:03:04 -0700 Subject: [PATCH 16/98] Create action.yml --- .github/actions/run-ee-server/action.yml | 75 ++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 .github/actions/run-ee-server/action.yml diff --git a/.github/actions/run-ee-server/action.yml b/.github/actions/run-ee-server/action.yml new file mode 100644 index 00000000..515ed030 --- /dev/null +++ b/.github/actions/run-ee-server/action.yml @@ -0,0 +1,75 @@ +name: 'Run EE Server' +description: 'Run EE server' +inputs: + use-server-rc: + required: true + default: false + server-tag: + required: true + default: 'latest' + # Github Composite Actions can't access secrets + # so we need to pass them in as inputs + docker-hub-username: + required: false + type: string + docker-hub-password: + required: false + type: string + +runs: + using: "composite" + steps: + - name: Install crudini to manipulate config.conf + run: python3 -m pip install crudini==0.9.4 + shell: bash + + - name: Add enterprise edition config to config.conf + run: | + python3 -m crudini --set config.conf enterprise-edition hosts 127.0.0.1:3000 + python3 -m crudini --set config.conf enterprise-edition user superuser + python3 -m crudini --set config.conf enterprise-edition password superuser + working-directory: test + shell: bash + + - name: Create config folder to store configs in + run: mkdir configs + shell: bash + + - name: Use release server + if: ${{ inputs.use-server-rc == 'false' }} + run: echo "SERVER_IMAGE=aerospike/aerospike-server-enterprise" >> $GITHUB_ENV + shell: bash + + - name: Use release candidate server + if: ${{ inputs.use-server-rc == 'true' }} + run: echo "SERVER_IMAGE=aerospike/aerospike-server-enterprise-rc" >> $GITHUB_ENV + shell: bash + + - name: Log into Docker Hub to get server RC + if: ${{ inputs.use-server-rc == 'true' }} + run: docker login --username ${{ inputs.docker-hub-username }} --password ${{ inputs.docker-hub-password }} + shell: bash + + - name: Get default aerospike.conf from Docker server EE container + run: | + docker run -d --name aerospike -p 3000-3002:3000-3002 $SERVER_IMAGE:${{ inputs.server-tag }} + sleep 5 + docker cp aerospike:/etc/aerospike/aerospike.conf ./configs/aerospike.conf + docker container stop aerospike + docker container rm aerospike + shell: bash + + - name: Enable security features using aerospike.conf + # Security stanza + run: echo -e "security {\n\tenable-quotas true\n}\n" >> ./aerospike.conf + working-directory: ./configs + shell: bash + + - name: Run enterprise edition server + run: docker run -tid -v $(pwd)/configs:/opt/aerospike/etc -p 3000:3000 --name aerospike $SERVER_IMAGE:${{ inputs.server-tag }} asd --config-file /opt/aerospike/etc/aerospike.conf + shell: bash + + - name: Create user in database for tests + # Use default admin user to create another user for testing + run: docker exec aerospike asadm --user admin --password admin --enable -e "manage acl create user superuser password superuser roles read-write-udf sys-admin user-admin data-admin" + shell: bash \ No newline at end of file From 886361aece85ab8d277619937678caa64c8a916c Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Thu, 25 Jan 2024 02:12:21 -0700 Subject: [PATCH 17/98] Update tests.yml --- .github/workflows/tests.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 9fabbb19..b48166e7 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -290,6 +290,9 @@ jobs: - name: make binding folder run: mkdir lib/binding + - name: install mocha + run: npm install mocha + - name: Install client #fix the convention here run: cp -r node-${{ env.LOWEST_SUPPORTED_NODE_MODULE }}-linux-x64 lib/binding/node-${{ env.LOWEST_SUPPORTED_NODE_MODULE }}-linux-x64 From 1c7a366119d5b7bcba14d70a7765e26f67d09ce0 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Thu, 25 Jan 2024 02:31:25 -0700 Subject: [PATCH 18/98] Specified server versions for some tests --- test/exp.js | 1 + test/lists.js | 1 + test/maps.js | 6 ++++++ 3 files changed, 8 insertions(+) diff --git a/test/exp.js b/test/exp.js index 58ba3505..73b77388 100644 --- a/test/exp.js +++ b/test/exp.js @@ -96,6 +96,7 @@ describe('Aerospike.exp', function () { }) describe('eq on map bin', function () { + helper.skipUnlessVersion('>= 6.3.0', this) it('evaluates to true if a map bin matches a value', async function () { const key = await createRecord({ map: { c: 1, b: 2, a: 3 } }) await orderByKey(key, 'map') diff --git a/test/lists.js b/test/lists.js index 961a825f..d4b7454e 100644 --- a/test/lists.js +++ b/test/lists.js @@ -1104,6 +1104,7 @@ describe('client.operate() - CDT List operations', function () { }) context('returnType=EXISTS', function () { + helper.skipUnlessVersion('>= 6.1.0', this) it('fetches all items with the specified values and returns the indexes', function () { return initState() .then(createRecord({ list: [1, 2, 3, 1, 2, 3] })) diff --git a/test/maps.js b/test/maps.js index 8c72ec4a..41b5b9f9 100644 --- a/test/maps.js +++ b/test/maps.js @@ -1556,6 +1556,7 @@ describe('client.operate() - CDT Map operations', function () { }) it('returns true or false for a single key read', function () { + helper.skipUnlessVersion('>= 6.1.0', this) return initState() .then(createRecord({ map: { a: 1, b: 2, c: 3 } })) .then(orderByKey('map')) @@ -1565,6 +1566,7 @@ describe('client.operate() - CDT Map operations', function () { }) it('returns true if any values exisst', function () { + helper.skipUnlessVersion('>= 6.1.0', this) return initState() .then(createRecord({ map: { a: 1, b: 2, c: 3 } })) .then(orderByKey('map')) @@ -1574,6 +1576,7 @@ describe('client.operate() - CDT Map operations', function () { }) it('returns key/value for a single read', function () { + helper.skipUnlessVersion('>= 6.3.0', this) return initState() .then(createRecord({ map: { a: 1, b: 2, c: 3 } })) .then(orderByKey('map')) @@ -1583,6 +1586,7 @@ describe('client.operate() - CDT Map operations', function () { }) it('returns key/value for a range read', function () { + helper.skipUnlessVersion('>= 6.3.0', this) return initState() .then(createRecord({ map: { a: 1, b: 2, c: 3 } })) .then(orderByKey('map')) @@ -1592,6 +1596,7 @@ describe('client.operate() - CDT Map operations', function () { }) it('returns key/value for a single read', function () { + helper.skipUnlessVersion('>= 6.3.0', this) return initState() .then(createRecord({ map: { a: 1, b: 2, c: 3 } })) .then(orderByKey('map')) @@ -1601,6 +1606,7 @@ describe('client.operate() - CDT Map operations', function () { }) it('returns key/value for a range read', function () { + helper.skipUnlessVersion('>= 6.3.0', this) return initState() .then(createRecord({ map: { a: 1, b: 2, c: 3 } })) .then(orderByKey('map')) From 4949a6164a8e134e439446aae58e4534458a0f96 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Thu, 25 Jan 2024 02:43:35 -0700 Subject: [PATCH 19/98] Update maps.js --- test/maps.js | 102 +++++++++++++++++++++++++-------------------------- 1 file changed, 51 insertions(+), 51 deletions(-) diff --git a/test/maps.js b/test/maps.js index 41b5b9f9..6012f96f 100644 --- a/test/maps.js +++ b/test/maps.js @@ -1554,65 +1554,65 @@ describe('client.operate() - CDT Map operations', function () { .then(assertResultEql({ map: ['a', 1, 'b', 2] })) .then(cleanup()) }) - - it('returns true or false for a single key read', function () { + context('Need Server 6.1+', function () { helper.skipUnlessVersion('>= 6.1.0', this) - return initState() - .then(createRecord({ map: { a: 1, b: 2, c: 3 } })) - .then(orderByKey('map')) - .then(operate(maps.getByKeyList('map', ['a', 'b', 'd'], maps.returnType.EXISTS))) - .then(assertResultEql({ map: true })) - .then(cleanup()) - }) + it('returns true or false for a single key read', function () { + return initState() + .then(createRecord({ map: { a: 1, b: 2, c: 3 } })) + .then(orderByKey('map')) + .then(operate(maps.getByKeyList('map', ['a', 'b', 'd'], maps.returnType.EXISTS))) + .then(assertResultEql({ map: true })) + .then(cleanup()) + }) - it('returns true if any values exisst', function () { - helper.skipUnlessVersion('>= 6.1.0', this) - return initState() - .then(createRecord({ map: { a: 1, b: 2, c: 3 } })) - .then(orderByKey('map')) - .then(operate(maps.getByValueList('map', [1, 2, 4], maps.returnType.EXISTS))) - .then(assertResultEql({ map: true })) - .then(cleanup()) - }) + it('returns true if any values exisst', function () { - it('returns key/value for a single read', function () { - helper.skipUnlessVersion('>= 6.3.0', this) - return initState() - .then(createRecord({ map: { a: 1, b: 2, c: 3 } })) - .then(orderByKey('map')) - .then(operate(maps.getByIndex('map', 0, maps.returnType.ORDERED_MAP))) - .then(assertResultEql({ map: { a: 1 } })) - .then(cleanup()) + return initState() + .then(createRecord({ map: { a: 1, b: 2, c: 3 } })) + .then(orderByKey('map')) + .then(operate(maps.getByValueList('map', [1, 2, 4], maps.returnType.EXISTS))) + .then(assertResultEql({ map: true })) + .then(cleanup()) + }) }) - it('returns key/value for a range read', function () { + context('Need Server 6.3+', function () { helper.skipUnlessVersion('>= 6.3.0', this) - return initState() - .then(createRecord({ map: { a: 1, b: 2, c: 3 } })) - .then(orderByKey('map')) - .then(operate(maps.getByIndexRange('map', 0, 2, maps.returnType.ORDERED_MAP))) - .then(assertResultEql({ map: { a: 1, b: 2 } })) - .then(cleanup()) - }) + it('returns key/value for a single read', function () { + return initState() + .then(createRecord({ map: { a: 1, b: 2, c: 3 } })) + .then(orderByKey('map')) + .then(operate(maps.getByIndex('map', 0, maps.returnType.ORDERED_MAP))) + .then(assertResultEql({ map: { a: 1 } })) + .then(cleanup()) + }) - it('returns key/value for a single read', function () { - helper.skipUnlessVersion('>= 6.3.0', this) - return initState() - .then(createRecord({ map: { a: 1, b: 2, c: 3 } })) - .then(orderByKey('map')) - .then(operate(maps.getByIndex('map', 0, maps.returnType.UNORDERED_MAP))) - .then(assertResultEql({ map: { a: 1 } })) - .then(cleanup()) - }) + it('returns key/value for a range read', function () { + return initState() + .then(createRecord({ map: { a: 1, b: 2, c: 3 } })) + .then(orderByKey('map')) + .then(operate(maps.getByIndexRange('map', 0, 2, maps.returnType.ORDERED_MAP))) + .then(assertResultEql({ map: { a: 1, b: 2 } })) + .then(cleanup()) + }) - it('returns key/value for a range read', function () { - helper.skipUnlessVersion('>= 6.3.0', this) - return initState() - .then(createRecord({ map: { a: 1, b: 2, c: 3 } })) - .then(orderByKey('map')) - .then(operate(maps.getByIndexRange('map', 0, 2, maps.returnType.UNORDERED_MAP))) - .then(assertResultEql({ map: { a: 1, b: 2 } })) - .then(cleanup()) + it('returns key/value for a single read', function () { + return initState() + .then(createRecord({ map: { a: 1, b: 2, c: 3 } })) + .then(orderByKey('map')) + .then(operate(maps.getByIndex('map', 0, maps.returnType.UNORDERED_MAP))) + .then(assertResultEql({ map: { a: 1 } })) + .then(cleanup()) + }) + + it('returns key/value for a range read', function () { + return initState() + .then(createRecord({ map: { a: 1, b: 2, c: 3 } })) + .then(orderByKey('map')) + .then(operate(maps.getByIndexRange('map', 0, 2, maps.returnType.UNORDERED_MAP))) + .then(assertResultEql({ map: { a: 1, b: 2 } })) + .then(cleanup()) + }) }) }) }) From e074c23cd8a41721568b5f534dba6675961985fb Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Thu, 25 Jan 2024 02:51:14 -0700 Subject: [PATCH 20/98] Added hostname --- .github/workflows/tests.yml | 4 ++-- test/maps.js | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index b48166e7..83696b23 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -292,7 +292,7 @@ jobs: - name: install mocha run: npm install mocha - + - name: Install client #fix the convention here run: cp -r node-${{ env.LOWEST_SUPPORTED_NODE_MODULE }}-linux-x64 lib/binding/node-${{ env.LOWEST_SUPPORTED_NODE_MODULE }}-linux-x64 @@ -307,7 +307,7 @@ jobs: run: sleep 5 - name: Run tests - run: npm run test + run: npm run test -- --h localhost - name: Show logs if failed if: ${{ failure() }} diff --git a/test/maps.js b/test/maps.js index 6012f96f..03daf486 100644 --- a/test/maps.js +++ b/test/maps.js @@ -1566,7 +1566,6 @@ describe('client.operate() - CDT Map operations', function () { }) it('returns true if any values exisst', function () { - return initState() .then(createRecord({ map: { a: 1, b: 2, c: 3 } })) .then(orderByKey('map')) From ef8a6c71854020dbb8ef0e6f08d910dd487a2fe7 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Thu, 25 Jan 2024 02:58:54 -0700 Subject: [PATCH 21/98] Update tests.yml --- .github/workflows/tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 83696b23..8f1efb71 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -307,7 +307,7 @@ jobs: run: sleep 5 - name: Run tests - run: npm run test -- --h localhost + run: npm run test -- --h localhost --U superuser --P superuser - name: Show logs if failed if: ${{ failure() }} From cecdb75d734191915ac7852a8e5d56308de072a7 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Thu, 25 Jan 2024 03:06:52 -0700 Subject: [PATCH 22/98] Update query.js --- test/query.js | 1 + 1 file changed, 1 insertion(+) diff --git a/test/query.js b/test/query.js index 63b4499b..668f397c 100644 --- a/test/query.js +++ b/test/query.js @@ -159,6 +159,7 @@ describe('Queries', function () { } before(() => { + this.timeout(10000) const generators = { keygen: keygen.string(helper.namespace, testSet, { prefix: 'test/query/', random: false }), recgen: () => samples.pop(), From 4059bc51fb74889db9ddd5085df2305d34d72678 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Thu, 25 Jan 2024 03:15:41 -0700 Subject: [PATCH 23/98] Update query.js --- test/query.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/test/query.js b/test/query.js index 668f397c..df204659 100644 --- a/test/query.js +++ b/test/query.js @@ -47,7 +47,7 @@ const putgen = helper.putgen describe('Queries', function () { const client = helper.client - + this.timeout(10000) const testSet = 'test/query-' + Math.floor(Math.random() * 100000) const samples = [ { name: 'int match', i: 5 }, @@ -159,7 +159,6 @@ describe('Queries', function () { } before(() => { - this.timeout(10000) const generators = { keygen: keygen.string(helper.namespace, testSet, { prefix: 'test/query/', random: false }), recgen: () => samples.pop(), From 8e39d5dfac82c4b7bec3e60d938d11f8eed207e6 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Thu, 25 Jan 2024 10:08:34 -0700 Subject: [PATCH 24/98] Update query.js --- test/query.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/query.js b/test/query.js index df204659..967a85fa 100644 --- a/test/query.js +++ b/test/query.js @@ -158,7 +158,7 @@ describe('Queries', function () { }) } - before(() => { + before(async () => { const generators = { keygen: keygen.string(helper.namespace, testSet, { prefix: 'test/query/', random: false }), recgen: () => samples.pop(), From dca76154d4fe8c7cc35d4079bf7eaeab058b7922 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Thu, 25 Jan 2024 10:23:09 -0700 Subject: [PATCH 25/98] Update query.js --- test/query.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/test/query.js b/test/query.js index 967a85fa..71500258 100644 --- a/test/query.js +++ b/test/query.js @@ -47,7 +47,7 @@ const putgen = helper.putgen describe('Queries', function () { const client = helper.client - this.timeout(10000) + const testSet = 'test/query-' + Math.floor(Math.random() * 100000) const samples = [ { name: 'int match', i: 5 }, @@ -158,7 +158,8 @@ describe('Queries', function () { }) } - before(async () => { + before(() => { + this.timeout(40000) const generators = { keygen: keygen.string(helper.namespace, testSet, { prefix: 'test/query/', random: false }), recgen: () => samples.pop(), From ff0fb68426e93c28c85b14c0843dc9c3a9163581 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Thu, 25 Jan 2024 10:30:08 -0700 Subject: [PATCH 26/98] Update query.js --- test/query.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/test/query.js b/test/query.js index 71500258..5db40745 100644 --- a/test/query.js +++ b/test/query.js @@ -47,7 +47,7 @@ const putgen = helper.putgen describe('Queries', function () { const client = helper.client - + this.timeout(40000) const testSet = 'test/query-' + Math.floor(Math.random() * 100000) const samples = [ { name: 'int match', i: 5 }, @@ -159,7 +159,6 @@ describe('Queries', function () { } before(() => { - this.timeout(40000) const generators = { keygen: keygen.string(helper.namespace, testSet, { prefix: 'test/query/', random: false }), recgen: () => samples.pop(), From dc8427358764975b1ad81834284e782a302f5af7 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Thu, 25 Jan 2024 10:46:28 -0700 Subject: [PATCH 27/98] Update query.js --- test/query.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/query.js b/test/query.js index 5db40745..66c878c4 100644 --- a/test/query.js +++ b/test/query.js @@ -192,9 +192,11 @@ describe('Queries', function () { indexes.push(['qidxBlobMapKeysNested', 'mkblob', BLOB, MAPKEYS, new Context().addMapKey('nested')]) } const numberOfSamples = samples.length + console.log("SPOT 1") return Promise.all([ putgen.put(numberOfSamples, generators) - .then((records) => { keys = records.map((rec) => rec.key) }) + .then((records) => { keys = records.map((rec) => rec.key) + console.log("SPOT 2") }) .then(() => Promise.all(indexes.map(idx => helper.index.create(idx[0], testSet, idx[1], idx[2], idx[3], idx[4])))), helper.udf.register('udf.lua') From bd607aa5a79d5485a065dff485ab5ec41615486a Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Wed, 31 Jan 2024 14:44:35 -0700 Subject: [PATCH 28/98] Added build-bindings.yml --- .github/workflows/build-bindings.yml | 344 +++++++++++++++++++++++++++ .github/workflows/tests.yml | 2 +- 2 files changed, 345 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/build-bindings.yml diff --git a/.github/workflows/build-bindings.yml b/.github/workflows/build-bindings.yml new file mode 100644 index 00000000..87b4fb4a --- /dev/null +++ b/.github/workflows/build-bindings.yml @@ -0,0 +1,344 @@ +name: Build bindings +run-name: Build bindings (run_tests=${{ inputs.run_tests }}, use-server-rc=${{ inputs.use-server-rc }}, server-tag=${{ inputs.server-tag }}) + +# Builds manylinux bindings and source distribution +# If running tests, publish results in commit status +# Publishes bindings and source distribution on Github Actions if no tests are run or tests pass + +on: + workflow_call: + inputs: + # The dev tests test the artifacts against a server release + # The stage tests and release workflow only need to build the artifacts + run_tests: + description: "Run integration tests" + required: true + type: boolean + default: true + commit_sha: + type: string + required: false + # Calling workflow doesn't actually use these 2 options + # But we need to set default values for workflow calls + use-server-rc: + required: false + default: true + type: boolean + server-tag: + type: string + required: false + default: 'latest' + secrets: + DOCKER_HUB_BOT_USERNAME: + required: false + DOCKER_HUB_BOT_PW: + required: false + MAC_M1_SELF_HOSTED_RUNNER_PW: + required: false + workflow_dispatch: + inputs: + # If we only want to check that the builds pass on an arbitrary branch + run_tests: + description: "Run integration tests" + required: true + type: boolean + default: true + use-server-rc: + type: boolean + required: true + default: false + description: 'Test against server release candidate?' + # If we are creating a backport and want to test an arbitrary branch against an older server version + server-tag: + required: true + default: 'latest' + description: 'Server docker image tag' + + manylinux: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + # nodejs versions to build bindings on + nodejs: [ + "v108", + "v115", + "v120" + ] + platform: [ + "x86_64", + "aarch64" + ] + + steps: + - name: Show job status for commit + uses: myrotvorets/set-commit-status-action@v2.0.0 + with: + sha: ${{ github.sha }} + context: "Build bindings (${{ matrix.nodejs }}-manylinux_${{ matrix.platform }})" + + - uses: actions/checkout@v4 + with: + submodules: recursive + ref: ${{ inputs.commit_sha }} + + - name: Set up QEMU for cross compiling arm64 + if: ${{ matrix.platform == 'aarch64' }} + uses: docker/setup-qemu-action@v2 + with: + platforms: arm64 + + - uses: ./.github/actions/run-ee-server + if: ${{ inputs.run_tests }} + with: + use-server-rc: ${{ inputs.use-server-rc }} + server-tag: ${{ inputs.server-tag }} + docker-hub-username: ${{ secrets.DOCKER_HUB_BOT_USERNAME }} + docker-hub-password: ${{ secrets.DOCKER_HUB_BOT_PW }} + + - name: Set config.conf to use Docker IP address of Aerospike server + if: ${{ inputs.run_tests }} + # config.conf should be copied into the cibuildwheel Docker container + run: | + export SERVER_DOCKER_IP=$(docker container inspect -f '{{ .NetworkSettings.IPAddress }}' aerospike) + # Install crudini + pip install crudini -c ../.github/workflows/requirements.txt + sed -i "s/127.0.0.1:3000//" config.conf + crudini --set config.conf enterprise-edition hosts ${SERVER_DOCKER_IP}:3000 + working-directory: test + + - name: Enable tests + if: ${{ inputs.run_tests }} + run: echo "TEST_COMMAND=npm test -- --h 172.17.0.2 --port 3000" >> $GITHUB_ENV + + - name: Disable tests (only run basic import test) + if: ${{ !inputs.run_tests }} + run: echo "TEST_COMMAND=node -e "aerospike = require('aerospike')"" >> $GITHUB_ENV + + - run: sudo apt update + - name: Install build dependencies (C Client dependency packages) + run: sudo apt install g++ libssl-dev zlib1g-dev; + - name: Install build dependencies (make) + run: sudo apt-get install -y make; + - name: Install build dependencies (make) + run: sudo apt install build-essential; + + - name: Build client + run: | + ./scripts/build-c-client.sh + npm install + env: + CFLAGS: '-Werror' + + - name: Test client + run: | + ${{ TEST_COMMAND }} + + - name: Send binding to test jobs + uses: actions/upload-artifact@v4 + with: + name: ${{ matrix.nodejs }}-manylinux_${{ matrix.platform }}.build} + path: ./lib/binding/node-*-linux-*/ + + - name: Set final commit status + uses: myrotvorets/set-commit-status-action@v2.0.0 + if: always() + with: + sha: ${{ github.sha }} + status: ${{ job.status }} + context: "Build bindings (${{ matrix.nodejs }}-manylinux_${{ matrix.platform }})" + + macOS-x86: + strategy: + fail-fast: false + matrix: + nodejs: [ + "v108", + "v115", + "v120" + ] + runs-on: macos-12-large + steps: + - name: Show job status for commit + uses: myrotvorets/set-commit-status-action@v2.0.0 + with: + sha: ${{ github.sha }} + context: "Build bindings (${{ matrix.nodejs }}-macosx_x86_64)" + + - uses: actions/checkout@v4 + with: + submodules: recursive + ref: ${{ inputs.commit_sha }} + + - name: Install Docker Engine + if: ${{ inputs.run_tests }} + run: brew install colima + + - name: Install Docker client + if: ${{ inputs.run_tests }} + run: brew install docker + + - name: Start Docker Engine + if: ${{ inputs.run_tests }} + run: colima start + + - uses: ./.github/actions/run-ee-server + if: ${{ inputs.run_tests }} + with: + use-server-rc: ${{ inputs.use-server-rc }} + server-tag: ${{ inputs.server-tag }} + docker-hub-username: ${{ secrets.DOCKER_HUB_BOT_USERNAME }} + docker-hub-password: ${{ secrets.DOCKER_HUB_BOT_PW }} + + - name: Enable tests + if: ${{ inputs.run_tests }} + run: echo "TEST_COMMAND=npm test -- --h 172.17.0.2 --port 3000" >> $GITHUB_ENV + + - name: Disable tests (only run basic import test) + if: ${{ !inputs.run_tests }} + run: echo "TEST_COMMAND=node -e "aerospike = require('aerospike')"" >> $GITHUB_ENV + + - name: Build client + run: | + ./scripts/build-c-client.sh + npm install + env: + CFLAGS: '-Werror' + + - name: Test client + run: | + ${{ TEST_COMMAND }} + + - name: Save macOS binding + uses: actions/upload-artifact@v4 + with: + name: ${{ matrix.nodejs }}-macosx_x86_64.build + path: ./lib/binding/*/ + + - name: Set final commit status + uses: myrotvorets/set-commit-status-action@v2.0.0 + if: always() + with: + status: ${{ job.status }} + sha: ${{ github.sha }} + context: "Build bindings (${{ matrix.nodejs }}-macosx_x86_64)" + + macOS-m1: + runs-on: [ + self-hosted, + macOS, + ARM64 + ] + strategy: + matrix: + nodejs-version: [ + ["v108", "18"], + ["v115", "20"], + ["v120", "21"], + ] + fail-fast: false + steps: + - name: Show job status for commit + uses: myrotvorets/set-commit-status-action@v2.0.0 + with: + sha: ${{ github.sha }} + context: "Build bindings (${{ matrix.nodejs-version[1] }}-macosx_arm64)" + + - uses: actions/checkout@v4 + with: + submodules: recursive + ref: ${{ inputs.commit_sha }} + + - name: Install NVM: + - run: | + curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash; + source ~/.zshrc; + nvm -v; + nvm i ${{ matrix.nodejs-version[1]; + + - name: Setup symlink folders + run: | + sudo rm -rf /usr/local/opt/openssl; + sudo rm -rf /usr/local/opt/libuv; + sudo mkdir -p /usr/local/opt; + sudo chown -R $(whoami) /usr/local/opt + + - name: Install brew packages + run: | + brew install openssl@3.2.1 + brew install libuv@1.47.0 + + - name: Set environment for building + run: | + echo "export PATH="/usr/local/bin/:/usr/local/opt/openssl/bin:$PATH" + export LDFLAGS="-L/usr/local/opt/openssl/lib" + export CPPFLAGS="-I/usr/local/opt/openssl/include" + export EXT_CFLAGS="-I/usr/local/opt/openssl/include"" >> ~/.zshrc; + source ~/.zshrc; + + - name: Setup symlink folders + run: | + sudo ln -s /usr/local/Cellar/libuv/1.47.0/ /usr/local/opt/libuv; + sudo ln -s /usr/local/Cellar/openssl@3/3.2.1/ /usr/local/opt/openssl; + + # Self-hosted runner only + # Need to be able to save Docker Hub credentials to keychain + - run: security unlock-keychain -p ${{ secrets.MAC_M1_SELF_HOSTED_RUNNER_PW }} + if: ${{ inputs.run_tests && inputs.use-server-rc }} + + - if: ${{ inputs.run_tests && inputs.use-server-rc }} + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKER_HUB_BOT_USERNAME }} + password: ${{ secrets.DOCKER_HUB_BOT_PW }} + + - name: Use server rc + if: ${{ inputs.run_tests && inputs.use-server-rc }} + run: echo IMAGE_NAME="${{ vars.SERVER_RC_REPO_LINK }}:${{ inputs.server-tag }}" >> $GITHUB_ENV + + - name: Use server release + if: ${{ inputs.run_tests && !inputs.use-server-rc }} + run: echo IMAGE_NAME="${{ vars.SERVER_REPO_LINK }}:${{ inputs.server-tag }}" >> $GITHUB_ENV + + - name: Run server + if: ${{ inputs.run_tests }} + run: docker run -d -p 3000:3000 --name aerospike ${{ env.IMAGE_NAME }} + + - name: Build client + run: | + ./scripts/build-c-client.sh + npm install + env: + CFLAGS: '-Werror' + + - name: Enable tests + if: ${{ inputs.run_tests }} + run: echo "TEST_COMMAND=npm test -- --h 172.17.0.2 --port 3000" >> $GITHUB_ENV + + - name: Disable tests (only run basic import test) + if: ${{ !inputs.run_tests }} + run: echo "TEST_COMMAND=node -e "aerospike = require('aerospike')"" >> $GITHUB_ENV + + - name: Test client + run: | + ${{ TEST_COMMAND }} + + - name: Save macOS wheel + uses: actions/upload-artifact@v4 + with: + name: ${{ matrix.nodejs-version[0] }}-macosx_arm64.build + path: ./lib/binding/*/ + + - name: Stop server + if: ${{ always() && inputs.run_tests }} + run: | + docker container stop aerospike + docker container prune -f + + - name: Set final commit status + uses: myrotvorets/set-commit-status-action@v2.0.0 + if: always() + with: + sha: ${{ github.sha }} + status: ${{ job.status }} + context: "Build bindings (${{ matrix.nodejs-version[0] }}-macosx_arm64)" diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 8f1efb71..cd6a4e78 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -35,7 +35,7 @@ jobs: - name: lint run: npm run lint - build: + build-ubuntu: runs-on: ubuntu-latest strategy: matrix: From 4a7b5a6cc1ea6f173c4708a92c58e64ed81766b5 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Wed, 31 Jan 2024 14:47:45 -0700 Subject: [PATCH 29/98] Update tests.yml --- .github/workflows/tests.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index cd6a4e78..0e7ba0db 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -80,7 +80,7 @@ jobs: path: ./lib/binding/node-*-linux-x64/ # test-memray: -# needs: build +# needs: build-ubuntu # runs-on: ubuntu-latest # steps: # - uses: actions/checkout@v4 @@ -126,7 +126,7 @@ jobs: test-ce-latest-release: runs-on: ubuntu-latest if: ${{ contains(github.event.pull_request.labels.*.name, 'new-server-features') }} - needs: build + needs: build-ubuntu steps: - uses: actions/checkout@v4 @@ -165,7 +165,7 @@ jobs: test-ce: runs-on: ubuntu-latest - needs: build + needs: build-ubuntu strategy: matrix: node-version: [ @@ -229,7 +229,7 @@ jobs: test-lowest-supported-server: runs-on: ubuntu-latest - needs: build + needs: build-ubuntu steps: - uses: actions/checkout@v2 with: @@ -270,7 +270,7 @@ jobs: test-ee: runs-on: ubuntu-latest - needs: build + needs: build-ubuntu steps: - uses: actions/checkout@v2 with: From 5b47c5c51f27e13d34cba5cd991492c809779abd Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Wed, 31 Jan 2024 14:52:57 -0700 Subject: [PATCH 30/98] Fixed typo --- .github/workflows/build-bindings.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-bindings.yml b/.github/workflows/build-bindings.yml index 87b4fb4a..6e0bb15d 100644 --- a/.github/workflows/build-bindings.yml +++ b/.github/workflows/build-bindings.yml @@ -249,7 +249,7 @@ on: submodules: recursive ref: ${{ inputs.commit_sha }} - - name: Install NVM: + - name: Install NVM - run: | curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash; source ~/.zshrc; From 96d03de0469758d1ad4714900ab7087014c814b1 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Wed, 31 Jan 2024 14:59:06 -0700 Subject: [PATCH 31/98] Update build-bindings.yml --- .github/workflows/build-bindings.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-bindings.yml b/.github/workflows/build-bindings.yml index 6e0bb15d..c5d5ea01 100644 --- a/.github/workflows/build-bindings.yml +++ b/.github/workflows/build-bindings.yml @@ -53,7 +53,7 @@ on: required: true default: 'latest' description: 'Server docker image tag' - +jobs: manylinux: runs-on: ubuntu-latest strategy: From ea254f2332e14c6ec91f5a4068acbf4dcd6a2123 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Wed, 31 Jan 2024 15:02:57 -0700 Subject: [PATCH 32/98] Update build-bindings.yml --- .github/workflows/build-bindings.yml | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build-bindings.yml b/.github/workflows/build-bindings.yml index c5d5ea01..d029b69a 100644 --- a/.github/workflows/build-bindings.yml +++ b/.github/workflows/build-bindings.yml @@ -53,6 +53,7 @@ on: required: true default: 'latest' description: 'Server docker image tag' + jobs: manylinux: runs-on: ubuntu-latest @@ -250,11 +251,12 @@ jobs: ref: ${{ inputs.commit_sha }} - name: Install NVM - - run: | - curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash; - source ~/.zshrc; - nvm -v; - nvm i ${{ matrix.nodejs-version[1]; + run: | + curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash + source ~/.zshrc + nvm -v + nvm install ${{ matrix.nodejs-version[1] }} + - name: Setup symlink folders run: | From af83aa2fa679595794be7878026189be22634535 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Wed, 31 Jan 2024 15:51:12 -0700 Subject: [PATCH 33/98] Update build-bindings.yml --- .github/workflows/build-bindings.yml | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/.github/workflows/build-bindings.yml b/.github/workflows/build-bindings.yml index d029b69a..89e2e119 100644 --- a/.github/workflows/build-bindings.yml +++ b/.github/workflows/build-bindings.yml @@ -1,9 +1,4 @@ name: Build bindings -run-name: Build bindings (run_tests=${{ inputs.run_tests }}, use-server-rc=${{ inputs.use-server-rc }}, server-tag=${{ inputs.server-tag }}) - -# Builds manylinux bindings and source distribution -# If running tests, publish results in commit status -# Publishes bindings and source distribution on Github Actions if no tests are run or tests pass on: workflow_call: @@ -53,7 +48,7 @@ on: required: true default: 'latest' description: 'Server docker image tag' - + jobs: manylinux: runs-on: ubuntu-latest From ca5700f18810bc442d76d764dcfd3ccc1995011d Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Wed, 31 Jan 2024 15:54:11 -0700 Subject: [PATCH 34/98] Update build-bindings.yml --- .github/workflows/build-bindings.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/build-bindings.yml b/.github/workflows/build-bindings.yml index 89e2e119..d328415a 100644 --- a/.github/workflows/build-bindings.yml +++ b/.github/workflows/build-bindings.yml @@ -1,4 +1,9 @@ name: Build bindings +run-name: Build bindings (run_tests=${{ inputs.run_tests }}, use-server-rc=${{ inputs.use-server-rc }}, server-tag=${{ inputs.server-tag }}) + +# Builds manylinux bindings and source distribution +# If running tests, publish results in commit status +# Publishes bindings and source distribution on Github Actions if no tests are run or tests pass on: workflow_call: From 7df0b77ed5cd9dfa5fef97e3d5d452e385c11360 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Wed, 31 Jan 2024 16:06:51 -0700 Subject: [PATCH 35/98] Update build-bindings.yml --- .github/workflows/build-bindings.yml | 13 + .github/workflows/tests.yml | 578 +++++++++++++-------------- 2 files changed, 302 insertions(+), 289 deletions(-) diff --git a/.github/workflows/build-bindings.yml b/.github/workflows/build-bindings.yml index d328415a..90b399fc 100644 --- a/.github/workflows/build-bindings.yml +++ b/.github/workflows/build-bindings.yml @@ -6,6 +6,19 @@ run-name: Build bindings (run_tests=${{ inputs.run_tests }}, use-server-rc=${{ i # Publishes bindings and source distribution on Github Actions if no tests are run or tests pass on: + push: + branches: ["stage", "master"] + pull_request: + branches: ["stage"] + types: [ + # Default triggers + opened, + synchronize, + reopened, + # Additional triggers + labeled, + unlabeled + ] workflow_call: inputs: # The dev tests test the artifacts against a server release diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 0e7ba0db..1d67ec7a 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -1,316 +1,316 @@ -name: PR pre-merge tests - -env: - LOWEST_SUPPORTED_NODEJS_VERSION: '18' - LOWEST_SUPPORTED_NODE_MODULE: 'v108' - -# Trigger test workflow whenever: -# 1. A pull request is updated (e.g with new commits) -# 2. Commits are pushed directly to the stage or master branch -on: - push: - branches: ["stage", "master"] - pull_request: - branches: ["stage"] - types: [ - # Default triggers - opened, - synchronize, - reopened, - # Additional triggers - labeled, - unlabeled - ] - workflow_dispatch: - -jobs: - lint: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - submodules: recursive - - name: install standard - run: npm install standard - - name: lint - run: npm run lint - - build-ubuntu: - runs-on: ubuntu-latest - strategy: - matrix: - nodejs-version: ["18", "20", "21"] - fail-fast: false - - - steps: - - uses: actions/checkout@v4 - with: - submodules: recursive - - - uses: actions/setup-node@v4 - with: - node-version: ${{ matrix.nodejs-version }} - architecture: 'x64' - - name: debugging - run: | - echo "LOWEST_SUPPORTED_NODEJS_VERSION: $LOWEST_SUPPORTED_NODEJS_VERSION" - - - run: sudo apt update - - name: Install build dependencies (C Client dependency packages) - run: sudo apt install g++ libssl-dev zlib1g-dev; - - name: Install build dependencies (make) - run: sudo apt-get install -y make; - - name: Install build dependencies (make) - run: sudo apt install build-essential; - - - name: Build client - run: | - ./scripts/build-c-client.sh - npm install - env: - CFLAGS: '-Werror' - - - name: list - run: ls lib/binding - - name: Send binding to test jobs - uses: actions/upload-artifact@v4 - with: - name: binding-${{ matrix.nodejs-version }} - path: ./lib/binding/node-*-linux-x64/ - -# test-memray: -# needs: build-ubuntu +#name: PR pre-merge tests +# +#env: +# LOWEST_SUPPORTED_NODEJS_VERSION: '18' +# LOWEST_SUPPORTED_NODE_MODULE: 'v108' +# +## Trigger test workflow whenever: +## 1. A pull request is updated (e.g with new commits) +## 2. Commits are pushed directly to the stage or master branch +#on: +# push: +# branches: ["stage", "master"] +# pull_request: +# branches: ["stage"] +# types: [ +# # Default triggers +# opened, +# synchronize, +# reopened, +# # Additional triggers +# labeled, +# unlabeled +# ] +# workflow_dispatch: +# +#jobs: +# lint: +# runs-on: ubuntu-latest +# steps: +# - uses: actions/checkout@v4 +# with: +# submodules: recursive +# - name: install standard +# run: npm install standard +# - name: lint +# run: npm run lint +# +# build-ubuntu: # runs-on: ubuntu-latest +# strategy: +# matrix: +# nodejs-version: ["18", "20", "21"] +# fail-fast: false +# +# # steps: # - uses: actions/checkout@v4 +# with: +# submodules: recursive # # - uses: actions/setup-node@v4 # with: # node-version: ${{ matrix.nodejs-version }} # architecture: 'x64' +# - name: debugging +# run: | +# echo "LOWEST_SUPPORTED_NODEJS_VERSION: $LOWEST_SUPPORTED_NODEJS_VERSION" +# +# - run: sudo apt update +# - name: Install build dependencies (C Client dependency packages) +# run: sudo apt install g++ libssl-dev zlib1g-dev; +# - name: Install build dependencies (make) +# run: sudo apt-get install -y make; +# - name: Install build dependencies (make) +# run: sudo apt install build-essential; +# +# - name: Build client +# run: | +# ./scripts/build-c-client.sh +# npm install +# env: +# CFLAGS: '-Werror' +# +# - name: list +# run: ls lib/binding +# - name: Send binding to test jobs +# uses: actions/upload-artifact@v4 +# with: +# name: binding-${{ matrix.nodejs-version }} +# path: ./lib/binding/node-*-linux-x64/ +# +## test-memray: +## needs: build-ubuntu +## runs-on: ubuntu-latest +## steps: +## - uses: actions/checkout@v4 +## +## - uses: actions/setup-node@v4 +## with: +## node-version: ${{ matrix.nodejs-version }} +## architecture: 'x64' +## +## - uses: actions/download-artifact@v4 +## with: +## name: binding-18 +## +## - name: make binding folder +## run: mkdir lib/binding +## +## - name: Install client +## run: cp -r install node-v108-linux-x64 lib/binding/node-v108-linux-x64 +## +## - name: Install client +## run: npm install . +## +## - name: Run Aerospike server +## run: docker run -d --name aerospike -p 3000-3002:3000-3002 aerospike/aerospike-server +## +## - name: Wait for database to be ready +## # Should be ready after 3 seconds +## run: sleep 3 +## +## - name: Get number of tests +## run: echo "NUM_TESTS=$(npm run test-dry-run | grep -oP '\d+ (passing|pending)' | awk '{ sum += $1 } END { print sum }')" >> $GITHUB_ENV +## working-directory: test +## +## - name: Run tests +## # Get number of tests since setting to 0 doesn't work properly +## # pytest-memray currently throws a ZeroDivision error due to having a bug +## # We ignore this for now +## run: python -m pytest ./new_tests --memray --memray-bin-path=./ --most-allocations=${{ env.NUM_TESTS }} || true +## working-directory: test +# +# # Run this when testing new server features on server release candidate +# # to make sure the tests don't regress on the last server release. +# test-ce-latest-release: +# runs-on: ubuntu-latest +# if: ${{ contains(github.event.pull_request.labels.*.name, 'new-server-features') }} +# needs: build-ubuntu +# +# steps: +# - uses: actions/checkout@v4 +# with: +# submodules: recursive +# - name: debugging +# run: | +# echo "LOWEST_SUPPORTED_NODEJS_VERSION: $LOWEST_SUPPORTED_NODEJS_VERSION" +# - uses: actions/setup-node@v4 +# with: +# node-version: ${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} +# architecture: 'x64' # # - uses: actions/download-artifact@v4 # with: -# name: binding-18 +# name: binding-${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} +# env: +# LOWEST_SUPPORTED_NODEJS_VERSION: ${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} +# # # - name: make binding folder # run: mkdir lib/binding -# +# # - name: Install client -# run: cp -r install node-v108-linux-x64 lib/binding/node-v108-linux-x64 +# run: cp -r node-${{ env.LOWEST_SUPPORTED_NODE_MODULE }}-linux-x64 lib/binding/node-${{ env.LOWEST_SUPPORTED_NODE_MODULE }}-linux-x64 +# +# - name: Run Aerospike server +# run: docker run -d --name aerospike -p 3000-3002:3000-3002 aerospike/aerospike-server +# +# - name: Wait for database to be ready +# # Should be ready after 3 seconds +# run: sleep 3 +# +# - name: Run tests +# run: npm run test +# +# test-ce: +# runs-on: ubuntu-latest +# needs: build-ubuntu +# strategy: +# matrix: +# node-version: [ +# "18", +# "20", +# "21" +# ] +# fail-fast: false +# +# steps: +# - uses: actions/checkout@v2 +# with: +# submodules: recursive +# +# - uses: actions/setup-node@v4 +# with: +# node-version: ${{ matrix.node-version }} +# architecture: 'x64' +# +# - uses: actions/download-artifact@v4 +# with: +# name: binding-${{ matrix.node-version }} +# +# - name: make binding folder +# run: mkdir lib/binding +# +# - name: install mocha +# run: npm install mocha # # - name: Install client -# run: npm install . +# #fix the convention here +# run: | +# if [ "${{ matrix.node-version }}" = "18" ]; then +# cp -r node-v108-linux-x64 lib/binding/node-v108-linux-x64 +# elif [ "${{ matrix.node-version }}" = "20" ]; then +# cp -r node-v115-linux-x64 lib/binding/node-v115-linux-x64 +# elif [ "${{ matrix.node-version }}" = "21" ]; then +# cp -r node-v120-linux-x64 lib/binding/node-v120-linux-x64 +# fi +# +# - if: ${{ contains(github.event.pull_request.labels.*.name, 'new-server-features') }} +# uses: docker/login-action@v3 +# with: +# username: ${{ secrets.DOCKER_HUB_BOT_USERNAME }} +# password: ${{ secrets.DOCKER_HUB_BOT_PW }} +# +# - name: Run Aerospike server release candidate with latest tag +# if: ${{ contains(github.event.pull_request.labels.*.name, 'new-server-features') }} +# run: docker run -d --name aerospike -p 3000-3002:3000-3002 aerospike/aerospike-server-rc:latest # # - name: Run Aerospike server +# if: ${{ !contains(github.event.pull_request.labels.*.name, 'new-server-features') }} # run: docker run -d --name aerospike -p 3000-3002:3000-3002 aerospike/aerospike-server # # - name: Wait for database to be ready # # Should be ready after 3 seconds # run: sleep 3 # -# - name: Get number of tests -# run: echo "NUM_TESTS=$(npm run test-dry-run | grep -oP '\d+ (passing|pending)' | awk '{ sum += $1 } END { print sum }')" >> $GITHUB_ENV -# working-directory: test +# - name: Run tests +# run: npm run test +# +# test-lowest-supported-server: +# runs-on: ubuntu-latest +# needs: build-ubuntu +# steps: +# - uses: actions/checkout@v2 +# with: +# submodules: recursive +# +# - uses: actions/setup-node@v4 +# with: +# node-version: ${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} +# architecture: 'x64' +# +# - uses: actions/download-artifact@v4 +# with: +# name: binding-${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} +# env: +# LOWEST_SUPPORTED_NODEJS_VERSION: ${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} +# +# - name: make binding folder +# run: mkdir lib/binding +# +# - name: install mocha +# run: npm install mocha +# +# - name: Install client +# #fix the convention here +# run: cp -r node-${{ env.LOWEST_SUPPORTED_NODE_MODULE }}-linux-x64 lib/binding/node-${{ env.LOWEST_SUPPORTED_NODE_MODULE }}-linux-x64 +# +# - name: Run lowest supported server +# run: | +# SERVER_VERSION=$(curl -s "https://registry.hub.docker.com/v2/repositories/aerospike/aerospike-server/tags?page_size=100" | jq '.results[] | select(.name | startswith("6.0")).name' -r | head -n 1) +# docker run -d --name aerospike -p 3000-3002:3000-3002 aerospike/aerospike-server:$SERVER_VERSION +# +# - name: Wait for database to be ready +# # Should be ready after 3 seconds +# run: sleep 3 +# +# - name: Run tests +# run: npm run test +# +# test-ee: +# runs-on: ubuntu-latest +# needs: build-ubuntu +# steps: +# - uses: actions/checkout@v2 +# with: +# submodules: recursive +# +# - uses: actions/setup-node@v4 +# with: +# node-version: ${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} +# architecture: 'x64' +# +# - uses: actions/download-artifact@v4 +# with: +# name: binding-${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} +# env: +# LOWEST_SUPPORTED_NODEJS_VERSION: ${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} +# +# - name: make binding folder +# run: mkdir lib/binding +# +# - name: install mocha +# run: npm install mocha +# +# - name: Install client +# #fix the convention here +# run: cp -r node-${{ env.LOWEST_SUPPORTED_NODE_MODULE }}-linux-x64 lib/binding/node-${{ env.LOWEST_SUPPORTED_NODE_MODULE }}-linux-x64 +# +# - uses: ./.github/actions/run-ee-server +# with: +# use-server-rc: ${{ contains(github.event.pull_request.labels.*.name, 'new-server-features') }} +# docker-hub-username: ${{ secrets.DOCKER_HUB_BOT_USERNAME }} +# docker-hub-password: ${{ secrets.DOCKER_HUB_BOT_PW }} +# +# - name: Wait for server to start +# run: sleep 5 # # - name: Run tests -# # Get number of tests since setting to 0 doesn't work properly -# # pytest-memray currently throws a ZeroDivision error due to having a bug -# # We ignore this for now -# run: python -m pytest ./new_tests --memray --memray-bin-path=./ --most-allocations=${{ env.NUM_TESTS }} || true -# working-directory: test - - # Run this when testing new server features on server release candidate - # to make sure the tests don't regress on the last server release. - test-ce-latest-release: - runs-on: ubuntu-latest - if: ${{ contains(github.event.pull_request.labels.*.name, 'new-server-features') }} - needs: build-ubuntu - - steps: - - uses: actions/checkout@v4 - with: - submodules: recursive - - name: debugging - run: | - echo "LOWEST_SUPPORTED_NODEJS_VERSION: $LOWEST_SUPPORTED_NODEJS_VERSION" - - uses: actions/setup-node@v4 - with: - node-version: ${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} - architecture: 'x64' - - - uses: actions/download-artifact@v4 - with: - name: binding-${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} - env: - LOWEST_SUPPORTED_NODEJS_VERSION: ${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} - - - - name: make binding folder - run: mkdir lib/binding - - - name: Install client - run: cp -r node-${{ env.LOWEST_SUPPORTED_NODE_MODULE }}-linux-x64 lib/binding/node-${{ env.LOWEST_SUPPORTED_NODE_MODULE }}-linux-x64 - - - name: Run Aerospike server - run: docker run -d --name aerospike -p 3000-3002:3000-3002 aerospike/aerospike-server - - - name: Wait for database to be ready - # Should be ready after 3 seconds - run: sleep 3 - - - name: Run tests - run: npm run test - - test-ce: - runs-on: ubuntu-latest - needs: build-ubuntu - strategy: - matrix: - node-version: [ - "18", - "20", - "21" - ] - fail-fast: false - - steps: - - uses: actions/checkout@v2 - with: - submodules: recursive - - - uses: actions/setup-node@v4 - with: - node-version: ${{ matrix.node-version }} - architecture: 'x64' - - - uses: actions/download-artifact@v4 - with: - name: binding-${{ matrix.node-version }} - - - name: make binding folder - run: mkdir lib/binding - - - name: install mocha - run: npm install mocha - - - name: Install client - #fix the convention here - run: | - if [ "${{ matrix.node-version }}" = "18" ]; then - cp -r node-v108-linux-x64 lib/binding/node-v108-linux-x64 - elif [ "${{ matrix.node-version }}" = "20" ]; then - cp -r node-v115-linux-x64 lib/binding/node-v115-linux-x64 - elif [ "${{ matrix.node-version }}" = "21" ]; then - cp -r node-v120-linux-x64 lib/binding/node-v120-linux-x64 - fi - - - if: ${{ contains(github.event.pull_request.labels.*.name, 'new-server-features') }} - uses: docker/login-action@v3 - with: - username: ${{ secrets.DOCKER_HUB_BOT_USERNAME }} - password: ${{ secrets.DOCKER_HUB_BOT_PW }} - - - name: Run Aerospike server release candidate with latest tag - if: ${{ contains(github.event.pull_request.labels.*.name, 'new-server-features') }} - run: docker run -d --name aerospike -p 3000-3002:3000-3002 aerospike/aerospike-server-rc:latest - - - name: Run Aerospike server - if: ${{ !contains(github.event.pull_request.labels.*.name, 'new-server-features') }} - run: docker run -d --name aerospike -p 3000-3002:3000-3002 aerospike/aerospike-server - - - name: Wait for database to be ready - # Should be ready after 3 seconds - run: sleep 3 - - - name: Run tests - run: npm run test - - test-lowest-supported-server: - runs-on: ubuntu-latest - needs: build-ubuntu - steps: - - uses: actions/checkout@v2 - with: - submodules: recursive - - - uses: actions/setup-node@v4 - with: - node-version: ${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} - architecture: 'x64' - - - uses: actions/download-artifact@v4 - with: - name: binding-${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} - env: - LOWEST_SUPPORTED_NODEJS_VERSION: ${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} - - - name: make binding folder - run: mkdir lib/binding - - - name: install mocha - run: npm install mocha - - - name: Install client - #fix the convention here - run: cp -r node-${{ env.LOWEST_SUPPORTED_NODE_MODULE }}-linux-x64 lib/binding/node-${{ env.LOWEST_SUPPORTED_NODE_MODULE }}-linux-x64 - - - name: Run lowest supported server - run: | - SERVER_VERSION=$(curl -s "https://registry.hub.docker.com/v2/repositories/aerospike/aerospike-server/tags?page_size=100" | jq '.results[] | select(.name | startswith("6.0")).name' -r | head -n 1) - docker run -d --name aerospike -p 3000-3002:3000-3002 aerospike/aerospike-server:$SERVER_VERSION - - - name: Wait for database to be ready - # Should be ready after 3 seconds - run: sleep 3 - - - name: Run tests - run: npm run test - - test-ee: - runs-on: ubuntu-latest - needs: build-ubuntu - steps: - - uses: actions/checkout@v2 - with: - submodules: recursive - - - uses: actions/setup-node@v4 - with: - node-version: ${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} - architecture: 'x64' - - - uses: actions/download-artifact@v4 - with: - name: binding-${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} - env: - LOWEST_SUPPORTED_NODEJS_VERSION: ${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} - - - name: make binding folder - run: mkdir lib/binding - - - name: install mocha - run: npm install mocha - - - name: Install client - #fix the convention here - run: cp -r node-${{ env.LOWEST_SUPPORTED_NODE_MODULE }}-linux-x64 lib/binding/node-${{ env.LOWEST_SUPPORTED_NODE_MODULE }}-linux-x64 - - - uses: ./.github/actions/run-ee-server - with: - use-server-rc: ${{ contains(github.event.pull_request.labels.*.name, 'new-server-features') }} - docker-hub-username: ${{ secrets.DOCKER_HUB_BOT_USERNAME }} - docker-hub-password: ${{ secrets.DOCKER_HUB_BOT_PW }} - - - name: Wait for server to start - run: sleep 5 - - - name: Run tests - run: npm run test -- --h localhost --U superuser --P superuser - - - name: Show logs if failed - if: ${{ failure() }} - run: | - docker container logs aerospike - cat ./configs/aerospike.conf \ No newline at end of file +# run: npm run test -- --h localhost --U superuser --P superuser +# +# - name: Show logs if failed +# if: ${{ failure() }} +# run: | +# docker container logs aerospike +# cat ./configs/aerospike.conf \ No newline at end of file From 71a0cdedb7f38a396a39bff27eca71089546a41c Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Wed, 31 Jan 2024 16:21:34 -0700 Subject: [PATCH 36/98] Update build-bindings.yml --- .github/workflows/build-bindings.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-bindings.yml b/.github/workflows/build-bindings.yml index 90b399fc..4f4cc328 100644 --- a/.github/workflows/build-bindings.yml +++ b/.github/workflows/build-bindings.yml @@ -7,7 +7,7 @@ run-name: Build bindings (run_tests=${{ inputs.run_tests }}, use-server-rc=${{ i on: push: - branches: ["stage", "master"] + branches: ["stage", "master"] pull_request: branches: ["stage"] types: [ From 366d74501732314ec8a02ab20505f9a1f7e8eb66 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Wed, 31 Jan 2024 16:29:59 -0700 Subject: [PATCH 37/98] Update build-bindings.yml --- .github/workflows/build-bindings.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-bindings.yml b/.github/workflows/build-bindings.yml index 4f4cc328..62857541 100644 --- a/.github/workflows/build-bindings.yml +++ b/.github/workflows/build-bindings.yml @@ -146,7 +146,7 @@ jobs: - name: Test client run: | - ${{ TEST_COMMAND }} + ${{ env.TEST_COMMAND }} - name: Send binding to test jobs uses: actions/upload-artifact@v4 @@ -221,7 +221,7 @@ jobs: - name: Test client run: | - ${{ TEST_COMMAND }} + ${{ env.TEST_COMMAND }} - name: Save macOS binding uses: actions/upload-artifact@v4 @@ -336,7 +336,7 @@ jobs: - name: Test client run: | - ${{ TEST_COMMAND }} + ${{ env.TEST_COMMAND }} - name: Save macOS wheel uses: actions/upload-artifact@v4 From fe95c5206a7111aa93c4cd868d692c89e352cf1f Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Wed, 31 Jan 2024 16:35:29 -0700 Subject: [PATCH 38/98] Update build-bindings.yml --- .github/workflows/build-bindings.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-bindings.yml b/.github/workflows/build-bindings.yml index 62857541..1642a1b2 100644 --- a/.github/workflows/build-bindings.yml +++ b/.github/workflows/build-bindings.yml @@ -210,7 +210,7 @@ jobs: - name: Disable tests (only run basic import test) if: ${{ !inputs.run_tests }} - run: echo "TEST_COMMAND=node -e "aerospike = require('aerospike')"" >> $GITHUB_ENV + run: echo "TEST_COMMAND=node -e 'aerospike = require('aerospike')'' >> $GITHUB_ENV - name: Build client run: | From d0ba6092f3752eafb17d834f374792bc6cad61c6 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Wed, 31 Jan 2024 16:41:30 -0700 Subject: [PATCH 39/98] Update build-bindings.yml --- .github/workflows/build-bindings.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-bindings.yml b/.github/workflows/build-bindings.yml index 1642a1b2..aace2ac4 100644 --- a/.github/workflows/build-bindings.yml +++ b/.github/workflows/build-bindings.yml @@ -210,7 +210,7 @@ jobs: - name: Disable tests (only run basic import test) if: ${{ !inputs.run_tests }} - run: echo "TEST_COMMAND=node -e 'aerospike = require('aerospike')'' >> $GITHUB_ENV + run: echo "TEST_COMMAND=node -e 'aerospike = require('aerospike')'" >> $GITHUB_ENV - name: Build client run: | From 58bc2bf4b67badccd9170bd69585971239e26453 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Wed, 31 Jan 2024 16:51:45 -0700 Subject: [PATCH 40/98] Update build-bindings.yml --- .github/workflows/build-bindings.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-bindings.yml b/.github/workflows/build-bindings.yml index aace2ac4..90e5ec63 100644 --- a/.github/workflows/build-bindings.yml +++ b/.github/workflows/build-bindings.yml @@ -210,7 +210,7 @@ jobs: - name: Disable tests (only run basic import test) if: ${{ !inputs.run_tests }} - run: echo "TEST_COMMAND=node -e 'aerospike = require('aerospike')'" >> $GITHUB_ENV + run: echo "TEST_COMMAND=node -e "aerospike = require\(\'aerospike\'\)"" >> $GITHUB_ENV - name: Build client run: | From 3470d859510ccd8308d259b84268e4e7d3218ba2 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Wed, 31 Jan 2024 16:54:50 -0700 Subject: [PATCH 41/98] Update build-bindings.yml --- .github/workflows/build-bindings.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-bindings.yml b/.github/workflows/build-bindings.yml index 90e5ec63..2b6dd3f6 100644 --- a/.github/workflows/build-bindings.yml +++ b/.github/workflows/build-bindings.yml @@ -127,7 +127,7 @@ jobs: - name: Disable tests (only run basic import test) if: ${{ !inputs.run_tests }} - run: echo "TEST_COMMAND=node -e "aerospike = require('aerospike')"" >> $GITHUB_ENV + run: echo "TEST_COMMAND=node -e "aerospike = require\(\'aerospike\'\)"" >> $GITHUB_ENV - run: sudo apt update - name: Install build dependencies (C Client dependency packages) @@ -332,7 +332,7 @@ jobs: - name: Disable tests (only run basic import test) if: ${{ !inputs.run_tests }} - run: echo "TEST_COMMAND=node -e "aerospike = require('aerospike')"" >> $GITHUB_ENV + run: echo "TEST_COMMAND=node -e "aerospike = require\(\'aerospike\'\)"" >> $GITHUB_ENV - name: Test client run: | From 3268d5fbd51f68b22c042dfa6a5d156304445054 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Wed, 31 Jan 2024 17:02:28 -0700 Subject: [PATCH 42/98] Update build-bindings.yml --- .github/workflows/build-bindings.yml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-bindings.yml b/.github/workflows/build-bindings.yml index 2b6dd3f6..b841c8b9 100644 --- a/.github/workflows/build-bindings.yml +++ b/.github/workflows/build-bindings.yml @@ -127,7 +127,8 @@ jobs: - name: Disable tests (only run basic import test) if: ${{ !inputs.run_tests }} - run: echo "TEST_COMMAND=node -e "aerospike = require\(\'aerospike\'\)"" >> $GITHUB_ENV + run: echo "TEST_COMMAND=node -e 'aerospike = require(\"aerospike\")'" >> $GITHUB_ENV + - run: sudo apt update - name: Install build dependencies (C Client dependency packages) @@ -210,7 +211,7 @@ jobs: - name: Disable tests (only run basic import test) if: ${{ !inputs.run_tests }} - run: echo "TEST_COMMAND=node -e "aerospike = require\(\'aerospike\'\)"" >> $GITHUB_ENV + run: echo "TEST_COMMAND=node -e 'aerospike = require(\"aerospike\")'" >> $GITHUB_ENV - name: Build client run: | @@ -332,7 +333,8 @@ jobs: - name: Disable tests (only run basic import test) if: ${{ !inputs.run_tests }} - run: echo "TEST_COMMAND=node -e "aerospike = require\(\'aerospike\'\)"" >> $GITHUB_ENV + run: echo "TEST_COMMAND=node -e 'aerospike = require(\"aerospike\")'" >> $GITHUB_ENV + - name: Test client run: | From 7404417fea686ea592bcd1e16f3cb3791d4cc1a2 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Wed, 31 Jan 2024 17:06:39 -0700 Subject: [PATCH 43/98] Update build-bindings.yml --- .github/workflows/build-bindings.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/build-bindings.yml b/.github/workflows/build-bindings.yml index b841c8b9..3130e95c 100644 --- a/.github/workflows/build-bindings.yml +++ b/.github/workflows/build-bindings.yml @@ -142,6 +142,7 @@ jobs: run: | ./scripts/build-c-client.sh npm install + npm install . env: CFLAGS: '-Werror' @@ -217,6 +218,7 @@ jobs: run: | ./scripts/build-c-client.sh npm install + npm install . env: CFLAGS: '-Werror' @@ -324,6 +326,7 @@ jobs: run: | ./scripts/build-c-client.sh npm install + npm install . env: CFLAGS: '-Werror' From 9af1ae2360f7c6bef6a1d33d1256cd078213ed34 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Wed, 31 Jan 2024 17:12:12 -0700 Subject: [PATCH 44/98] Update build-bindings.yml --- .github/workflows/build-bindings.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-bindings.yml b/.github/workflows/build-bindings.yml index 3130e95c..45323187 100644 --- a/.github/workflows/build-bindings.yml +++ b/.github/workflows/build-bindings.yml @@ -146,7 +146,7 @@ jobs: env: CFLAGS: '-Werror' - - name: Test client + - name: Testing client run: | ${{ env.TEST_COMMAND }} From 6daf618df6a08d66092f58a0148d0180f9f00fc7 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Wed, 31 Jan 2024 17:22:32 -0700 Subject: [PATCH 45/98] Update build-bindings.yml --- .github/workflows/build-bindings.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/build-bindings.yml b/.github/workflows/build-bindings.yml index 45323187..f5572b87 100644 --- a/.github/workflows/build-bindings.yml +++ b/.github/workflows/build-bindings.yml @@ -143,6 +143,7 @@ jobs: ./scripts/build-c-client.sh npm install npm install . + npm list aerospike env: CFLAGS: '-Werror' @@ -219,6 +220,7 @@ jobs: ./scripts/build-c-client.sh npm install npm install . + npm list aerospike env: CFLAGS: '-Werror' @@ -327,6 +329,7 @@ jobs: ./scripts/build-c-client.sh npm install npm install . + npm list aerospike env: CFLAGS: '-Werror' From f4442cbe02e10d50674ec3a2fb0ea767fbf527b2 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Wed, 31 Jan 2024 17:30:39 -0700 Subject: [PATCH 46/98] Update build-bindings.yml --- .github/workflows/build-bindings.yml | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-bindings.yml b/.github/workflows/build-bindings.yml index f5572b87..aed5f793 100644 --- a/.github/workflows/build-bindings.yml +++ b/.github/workflows/build-bindings.yml @@ -147,9 +147,15 @@ jobs: env: CFLAGS: '-Werror' - - name: Testing client + - name: foo test + run: | + npm install .. + working-directory: src + + - name: Test client run: | ${{ env.TEST_COMMAND }} + working-directory: src - name: Send binding to test jobs uses: actions/upload-artifact@v4 @@ -219,14 +225,19 @@ jobs: run: | ./scripts/build-c-client.sh npm install - npm install . - npm list aerospike + npm install .. env: CFLAGS: '-Werror' + - name: foo test + run: | + npm install . + working-directory: src + - name: Test client run: | ${{ env.TEST_COMMAND }} + working-directory: src - name: Save macOS binding uses: actions/upload-artifact@v4 @@ -342,9 +353,15 @@ jobs: run: echo "TEST_COMMAND=node -e 'aerospike = require(\"aerospike\")'" >> $GITHUB_ENV + - name: foo test + run: | + npm install .. + working-directory: src + - name: Test client run: | ${{ env.TEST_COMMAND }} + working-directory: src - name: Save macOS wheel uses: actions/upload-artifact@v4 From 816cebdc41fee5dd0f6a3451ab98f164e488882e Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Wed, 31 Jan 2024 17:36:23 -0700 Subject: [PATCH 47/98] Update build-bindings.yml --- .github/workflows/build-bindings.yml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/.github/workflows/build-bindings.yml b/.github/workflows/build-bindings.yml index aed5f793..8304addc 100644 --- a/.github/workflows/build-bindings.yml +++ b/.github/workflows/build-bindings.yml @@ -142,7 +142,6 @@ jobs: run: | ./scripts/build-c-client.sh npm install - npm install . npm list aerospike env: CFLAGS: '-Werror' @@ -225,13 +224,12 @@ jobs: run: | ./scripts/build-c-client.sh npm install - npm install .. env: CFLAGS: '-Werror' - name: foo test run: | - npm install . + npm install .. working-directory: src - name: Test client @@ -339,8 +337,6 @@ jobs: run: | ./scripts/build-c-client.sh npm install - npm install . - npm list aerospike env: CFLAGS: '-Werror' From 7037ba509c36a814761797d6228247e1d527301c Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Wed, 31 Jan 2024 17:52:15 -0700 Subject: [PATCH 48/98] Update build-bindings.yml --- .github/workflows/build-bindings.yml | 25 +++---------------------- 1 file changed, 3 insertions(+), 22 deletions(-) diff --git a/.github/workflows/build-bindings.yml b/.github/workflows/build-bindings.yml index 8304addc..d1bed973 100644 --- a/.github/workflows/build-bindings.yml +++ b/.github/workflows/build-bindings.yml @@ -127,7 +127,7 @@ jobs: - name: Disable tests (only run basic import test) if: ${{ !inputs.run_tests }} - run: echo "TEST_COMMAND=node -e 'aerospike = require(\"aerospike\")'" >> $GITHUB_ENV + run: echo "TEST_COMMAND=node -e 'aerospike = require(\".\\lib\\aerospike\")'" >> $GITHUB_ENV - run: sudo apt update @@ -142,19 +142,12 @@ jobs: run: | ./scripts/build-c-client.sh npm install - npm list aerospike env: CFLAGS: '-Werror' - - name: foo test - run: | - npm install .. - working-directory: src - - name: Test client run: | ${{ env.TEST_COMMAND }} - working-directory: src - name: Send binding to test jobs uses: actions/upload-artifact@v4 @@ -218,7 +211,7 @@ jobs: - name: Disable tests (only run basic import test) if: ${{ !inputs.run_tests }} - run: echo "TEST_COMMAND=node -e 'aerospike = require(\"aerospike\")'" >> $GITHUB_ENV + run: echo "TEST_COMMAND=node -e 'aerospike = require(\".\\lib\\aerospike\")'" >> $GITHUB_ENV - name: Build client run: | @@ -227,15 +220,9 @@ jobs: env: CFLAGS: '-Werror' - - name: foo test - run: | - npm install .. - working-directory: src - - name: Test client run: | ${{ env.TEST_COMMAND }} - working-directory: src - name: Save macOS binding uses: actions/upload-artifact@v4 @@ -346,18 +333,12 @@ jobs: - name: Disable tests (only run basic import test) if: ${{ !inputs.run_tests }} - run: echo "TEST_COMMAND=node -e 'aerospike = require(\"aerospike\")'" >> $GITHUB_ENV - + run: echo "TEST_COMMAND=node -e 'aerospike = require(\".\\lib\\aerospike\")'" >> $GITHUB_ENV - - name: foo test - run: | - npm install .. - working-directory: src - name: Test client run: | ${{ env.TEST_COMMAND }} - working-directory: src - name: Save macOS wheel uses: actions/upload-artifact@v4 From aa4a75d541c356538fb44ffc055d1f2e8eea7a95 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Wed, 31 Jan 2024 20:37:02 -0700 Subject: [PATCH 49/98] Update build-bindings.yml --- .github/workflows/build-bindings.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-bindings.yml b/.github/workflows/build-bindings.yml index d1bed973..5b08a0c5 100644 --- a/.github/workflows/build-bindings.yml +++ b/.github/workflows/build-bindings.yml @@ -127,7 +127,7 @@ jobs: - name: Disable tests (only run basic import test) if: ${{ !inputs.run_tests }} - run: echo "TEST_COMMAND=node -e 'aerospike = require(\".\\lib\\aerospike\")'" >> $GITHUB_ENV + run: echo "TEST_COMMAND=node -e 'aerospike = require(\".\/lib\/aerospike\")'" >> $GITHUB_ENV - run: sudo apt update @@ -211,7 +211,7 @@ jobs: - name: Disable tests (only run basic import test) if: ${{ !inputs.run_tests }} - run: echo "TEST_COMMAND=node -e 'aerospike = require(\".\\lib\\aerospike\")'" >> $GITHUB_ENV + run: echo "TEST_COMMAND=node -e 'aerospike = require(\".\/lib\/aerospike\")'" >> $GITHUB_ENV - name: Build client run: | @@ -333,7 +333,7 @@ jobs: - name: Disable tests (only run basic import test) if: ${{ !inputs.run_tests }} - run: echo "TEST_COMMAND=node -e 'aerospike = require(\".\\lib\\aerospike\")'" >> $GITHUB_ENV + run: echo "TEST_COMMAND=node -e 'aerospike = require(\".\/lib\/aerospike\")'" >> $GITHUB_ENV - name: Test client From 957820b8e68f00085d7805055328582d2f168172 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Wed, 31 Jan 2024 20:45:01 -0700 Subject: [PATCH 50/98] Update build-bindings.yml --- .github/workflows/build-bindings.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-bindings.yml b/.github/workflows/build-bindings.yml index 5b08a0c5..6852c2f3 100644 --- a/.github/workflows/build-bindings.yml +++ b/.github/workflows/build-bindings.yml @@ -1,4 +1,4 @@ -name: Build bindings +name: Build binding run-name: Build bindings (run_tests=${{ inputs.run_tests }}, use-server-rc=${{ inputs.use-server-rc }}, server-tag=${{ inputs.server-tag }}) # Builds manylinux bindings and source distribution From 1f5dcd0a400511eee47cec9f8a27dc6be2562a4d Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Wed, 31 Jan 2024 21:08:38 -0700 Subject: [PATCH 51/98] Update build-bindings.yml --- .github/workflows/build-bindings.yml | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-bindings.yml b/.github/workflows/build-bindings.yml index 6852c2f3..4c75ab09 100644 --- a/.github/workflows/build-bindings.yml +++ b/.github/workflows/build-bindings.yml @@ -19,6 +19,23 @@ on: labeled, unlabeled ] + inputs: + # If we only want to check that the builds pass on an arbitrary branch + run_tests: + description: "Run integration tests" + required: true + type: boolean + default: true + use-server-rc: + type: boolean + required: true + default: false + description: 'Test against server release candidate?' + # If we are creating a backport and want to test an arbitrary branch against an older server version + server-tag: + required: true + default: 'latest' + description: 'Server docker image tag' workflow_call: inputs: # The dev tests test the artifacts against a server release @@ -123,7 +140,7 @@ jobs: - name: Enable tests if: ${{ inputs.run_tests }} - run: echo "TEST_COMMAND=npm test -- --h 172.17.0.2 --port 3000" >> $GITHUB_ENV + run: echo "TEST_COMMAND=npm test -- --h 127.0.0.1 --port 3000" >> $GITHUB_ENV - name: Disable tests (only run basic import test) if: ${{ !inputs.run_tests }} @@ -207,7 +224,7 @@ jobs: - name: Enable tests if: ${{ inputs.run_tests }} - run: echo "TEST_COMMAND=npm test -- --h 172.17.0.2 --port 3000" >> $GITHUB_ENV + run: echo "TEST_COMMAND=npm test -- --h 127.0.0.1 --port 3000" >> $GITHUB_ENV - name: Disable tests (only run basic import test) if: ${{ !inputs.run_tests }} @@ -329,7 +346,7 @@ jobs: - name: Enable tests if: ${{ inputs.run_tests }} - run: echo "TEST_COMMAND=npm test -- --h 172.17.0.2 --port 3000" >> $GITHUB_ENV + run: echo "TEST_COMMAND=npm test -- --h 127.0.0.1 --port 3000" >> $GITHUB_ENV - name: Disable tests (only run basic import test) if: ${{ !inputs.run_tests }} From a56a5922c357268abcf46b31c4430c6fb681eecc Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Wed, 31 Jan 2024 21:14:23 -0700 Subject: [PATCH 52/98] Update build-bindings.yml --- .github/workflows/build-bindings.yml | 34 ++++++++++++++-------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/.github/workflows/build-bindings.yml b/.github/workflows/build-bindings.yml index 4c75ab09..dceec5c6 100644 --- a/.github/workflows/build-bindings.yml +++ b/.github/workflows/build-bindings.yml @@ -19,23 +19,23 @@ on: labeled, unlabeled ] - inputs: - # If we only want to check that the builds pass on an arbitrary branch - run_tests: - description: "Run integration tests" - required: true - type: boolean - default: true - use-server-rc: - type: boolean - required: true - default: false - description: 'Test against server release candidate?' - # If we are creating a backport and want to test an arbitrary branch against an older server version - server-tag: - required: true - default: 'latest' - description: 'Server docker image tag' + inputs: + # If we only want to check that the builds pass on an arbitrary branch + run_tests: + description: "Run integration tests" + required: true + type: boolean + default: true + use-server-rc: + type: boolean + required: true + default: false + description: 'Test against server release candidate?' + # If we are creating a backport and want to test an arbitrary branch against an older server version + server-tag: + required: true + default: 'latest' + description: 'Server docker image tag' workflow_call: inputs: # The dev tests test the artifacts against a server release From 6f643af328efa08b6759babf037d5d41150a10ba Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Thu, 8 Feb 2024 10:21:44 -0700 Subject: [PATCH 53/98] Added workflows to pipeline Fixed testing to be compatible with suitable servers. Added npm, yarn, pnpm, bun, and typescript actions Added binding-bindings workflow to compile binaries Added Admin testing and ee server testing --- .github/actions/run-ee-server/action.yml | 75 -- .github/workflows/build-bindings.yml | 379 +++++++--- .github/workflows/combine-bindings/action.yml | 77 ++ .github/workflows/tests.yml | 689 ++++++++++-------- examples/typescript.ts | 26 + test/admin.js | 8 +- test/exp.js | 1 + test/exp_map.js | 2 - test/index.js | 8 +- test/maps.js | 11 +- test/query.js | 387 +++++----- 11 files changed, 1010 insertions(+), 653 deletions(-) delete mode 100644 .github/actions/run-ee-server/action.yml create mode 100644 .github/workflows/combine-bindings/action.yml create mode 100644 examples/typescript.ts diff --git a/.github/actions/run-ee-server/action.yml b/.github/actions/run-ee-server/action.yml deleted file mode 100644 index 515ed030..00000000 --- a/.github/actions/run-ee-server/action.yml +++ /dev/null @@ -1,75 +0,0 @@ -name: 'Run EE Server' -description: 'Run EE server' -inputs: - use-server-rc: - required: true - default: false - server-tag: - required: true - default: 'latest' - # Github Composite Actions can't access secrets - # so we need to pass them in as inputs - docker-hub-username: - required: false - type: string - docker-hub-password: - required: false - type: string - -runs: - using: "composite" - steps: - - name: Install crudini to manipulate config.conf - run: python3 -m pip install crudini==0.9.4 - shell: bash - - - name: Add enterprise edition config to config.conf - run: | - python3 -m crudini --set config.conf enterprise-edition hosts 127.0.0.1:3000 - python3 -m crudini --set config.conf enterprise-edition user superuser - python3 -m crudini --set config.conf enterprise-edition password superuser - working-directory: test - shell: bash - - - name: Create config folder to store configs in - run: mkdir configs - shell: bash - - - name: Use release server - if: ${{ inputs.use-server-rc == 'false' }} - run: echo "SERVER_IMAGE=aerospike/aerospike-server-enterprise" >> $GITHUB_ENV - shell: bash - - - name: Use release candidate server - if: ${{ inputs.use-server-rc == 'true' }} - run: echo "SERVER_IMAGE=aerospike/aerospike-server-enterprise-rc" >> $GITHUB_ENV - shell: bash - - - name: Log into Docker Hub to get server RC - if: ${{ inputs.use-server-rc == 'true' }} - run: docker login --username ${{ inputs.docker-hub-username }} --password ${{ inputs.docker-hub-password }} - shell: bash - - - name: Get default aerospike.conf from Docker server EE container - run: | - docker run -d --name aerospike -p 3000-3002:3000-3002 $SERVER_IMAGE:${{ inputs.server-tag }} - sleep 5 - docker cp aerospike:/etc/aerospike/aerospike.conf ./configs/aerospike.conf - docker container stop aerospike - docker container rm aerospike - shell: bash - - - name: Enable security features using aerospike.conf - # Security stanza - run: echo -e "security {\n\tenable-quotas true\n}\n" >> ./aerospike.conf - working-directory: ./configs - shell: bash - - - name: Run enterprise edition server - run: docker run -tid -v $(pwd)/configs:/opt/aerospike/etc -p 3000:3000 --name aerospike $SERVER_IMAGE:${{ inputs.server-tag }} asd --config-file /opt/aerospike/etc/aerospike.conf - shell: bash - - - name: Create user in database for tests - # Use default admin user to create another user for testing - run: docker exec aerospike asadm --user admin --password admin --enable -e "manage acl create user superuser password superuser roles read-write-udf sys-admin user-admin data-admin" - shell: bash \ No newline at end of file diff --git a/.github/workflows/build-bindings.yml b/.github/workflows/build-bindings.yml index dceec5c6..cc0fc503 100644 --- a/.github/workflows/build-bindings.yml +++ b/.github/workflows/build-bindings.yml @@ -9,7 +9,7 @@ on: push: branches: ["stage", "master"] pull_request: - branches: ["stage"] + branches: ["stage", "master"] types: [ # Default triggers opened, @@ -86,15 +86,15 @@ on: jobs: manylinux: - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 strategy: fail-fast: false matrix: # nodejs versions to build bindings on nodejs: [ - "v108", - "v115", - "v120" + ["v108", 18], + ["v115", 20], + ["v120", 21] ] platform: [ "x86_64", @@ -102,22 +102,31 @@ jobs: ] steps: + - name: Show job status for commit uses: myrotvorets/set-commit-status-action@v2.0.0 with: sha: ${{ github.sha }} - context: "Build bindings (${{ matrix.nodejs }}-manylinux_${{ matrix.platform }})" + context: "Build bindings (${{ matrix.nodejs[0] }}-manylinux_${{ matrix.platform }})" - uses: actions/checkout@v4 with: submodules: recursive ref: ${{ inputs.commit_sha }} + - uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.nodejs[1] }} + architecture: 'x64' + + - name: print + run: uname -m + - name: Set up QEMU for cross compiling arm64 if: ${{ matrix.platform == 'aarch64' }} - uses: docker/setup-qemu-action@v2 + uses: docker/setup-qemu-action@v3 with: - platforms: arm64 + platforms: all - uses: ./.github/actions/run-ee-server if: ${{ inputs.run_tests }} @@ -146,21 +155,35 @@ jobs: if: ${{ !inputs.run_tests }} run: echo "TEST_COMMAND=node -e 'aerospike = require(\".\/lib\/aerospike\")'" >> $GITHUB_ENV - - - run: sudo apt update - - name: Install build dependencies (C Client dependency packages) - run: sudo apt install g++ libssl-dev zlib1g-dev; - - name: Install build dependencies (make) - run: sudo apt-get install -y make; - - name: Install build dependencies (make) - run: sudo apt install build-essential; - - - name: Build client + - uses: uraimo/run-on-arch-action@v2 + name: Build client arm + if: ${{ matrix.platform == 'aarch64' }} + id: runcmd + with: + arch: aarch64 + distro: ubuntu22.04 + + # Set an output parameter `uname` for use in subsequent steps + run: | + apt update + apt install -y g++ libssl-dev zlib1g-dev make build-essential libuv1-dev wget curl + ./scripts/build-c-client.sh + wget https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash; + source ~/.bashrc; + nvm i 20 + npm install + + - name: Build client x64 + if: ${{ matrix.platform != 'aarch64' }} run: | + sudo apt update + sudo apt install g++ libssl-dev zlib1g-dev; + sudo apt-get install -y make; + sudo apt install build-essential; ./scripts/build-c-client.sh npm install env: - CFLAGS: '-Werror' + CFLAGS: '-Werror' - name: Test client run: | @@ -169,7 +192,7 @@ jobs: - name: Send binding to test jobs uses: actions/upload-artifact@v4 with: - name: ${{ matrix.nodejs }}-manylinux_${{ matrix.platform }}.build} + name: ${{ matrix.nodejs[0] }}-manylinux_${{ matrix.platform }}.build path: ./lib/binding/node-*-linux-*/ - name: Set final commit status @@ -178,7 +201,7 @@ jobs: with: sha: ${{ github.sha }} status: ${{ job.status }} - context: "Build bindings (${{ matrix.nodejs }}-manylinux_${{ matrix.platform }})" + context: "Build bindings (${{ matrix.nodejs[0] }}-manylinux_${{ matrix.platform }})" macOS-x86: strategy: @@ -189,7 +212,7 @@ jobs: "v115", "v120" ] - runs-on: macos-12-large + runs-on: macos-latest steps: - name: Show job status for commit uses: myrotvorets/set-commit-status-action@v2.0.0 @@ -255,124 +278,254 @@ jobs: sha: ${{ github.sha }} context: "Build bindings (${{ matrix.nodejs }}-macosx_x86_64)" - macOS-m1: - runs-on: [ - self-hosted, - macOS, - ARM64 - ] - strategy: - matrix: - nodejs-version: [ - ["v108", "18"], - ["v115", "20"], - ["v120", "21"], - ] - fail-fast: false +# macOS-m1: +# runs-on: [ +# self-hosted, +# macOS, +# ARM64 +# ] +# strategy: +# matrix: +# nodejs-version: [ +# ["v108", "18"], +# ["v115", "20"], +# ["v120", "21"], +# ] +# fail-fast: false +# steps: +# - name: Show job status for commit +# uses: myrotvorets/set-commit-status-action@v2.0.0 +# with: +# sha: ${{ github.sha }} +# context: "Build bindings (${{ matrix.nodejs-version[1] }}-macosx_arm64)" +# +# - uses: actions/checkout@v4 +# with: +# submodules: recursive +# ref: ${{ inputs.commit_sha }} +# +# - name: Install NVM +# run: | +# curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash +# source ~/.zshrc +# nvm -v +# nvm install ${{ matrix.nodejs-version[1] }} +# +# +# - name: Setup symlink folders +# run: | +# sudo rm -rf /usr/local/opt/openssl; +# sudo rm -rf /usr/local/opt/libuv; +# sudo mkdir -p /usr/local/opt; +# sudo chown -R $(whoami) /usr/local/opt +# +# - name: Install brew packages +# run: | +# brew install openssl@3.2.1 +# brew install libuv@1.47.0 +# +# - name: Set environment for building +# run: | +# echo "export PATH="/usr/local/bin/:/usr/local/opt/openssl/bin:$PATH" +# export LDFLAGS="-L/usr/local/opt/openssl/lib" +# export CPPFLAGS="-I/usr/local/opt/openssl/include" +# export EXT_CFLAGS="-I/usr/local/opt/openssl/include"" >> ~/.zshrc; +# source ~/.zshrc; +# +# - name: Setup symlink folders +# run: | +# sudo ln -s /usr/local/Cellar/libuv/1.47.0/ /usr/local/opt/libuv; +# sudo ln -s /usr/local/Cellar/openssl@3/3.2.1/ /usr/local/opt/openssl; +# +# # Self-hosted runner only +# # Need to be able to save Docker Hub credentials to keychain +# - run: security unlock-keychain -p ${{ secrets.MAC_M1_SELF_HOSTED_RUNNER_PW }} +# if: ${{ inputs.run_tests && inputs.use-server-rc }} +# +# - if: ${{ inputs.run_tests && inputs.use-server-rc }} +# uses: docker/login-action@v3 +# with: +# username: ${{ secrets.DOCKER_HUB_BOT_USERNAME }} +# password: ${{ secrets.DOCKER_HUB_BOT_PW }} +# +# - name: Use server rc +# if: ${{ inputs.run_tests && inputs.use-server-rc }} +# run: echo IMAGE_NAME="${{ vars.SERVER_RC_REPO_LINK }}:${{ inputs.server-tag }}" >> $GITHUB_ENV +# +# - name: Use server release +# if: ${{ inputs.run_tests && !inputs.use-server-rc }} +# run: echo IMAGE_NAME="${{ vars.SERVER_REPO_LINK }}:${{ inputs.server-tag }}" >> $GITHUB_ENV +# +# - name: Run server +# if: ${{ inputs.run_tests }} +# run: docker run -d -p 3000:3000 --name aerospike ${{ env.IMAGE_NAME }} +# +# - name: Build client +# run: | +# ./scripts/build-c-client.sh +# npm install +# env: +# CFLAGS: '-Werror' +# +# - name: Enable tests +# if: ${{ inputs.run_tests }} +# run: echo "TEST_COMMAND=npm test -- --h 127.0.0.1 --port 3000" >> $GITHUB_ENV +# +# - name: Disable tests (only run basic import test) +# if: ${{ !inputs.run_tests }} +# run: echo "TEST_COMMAND=node -e 'aerospike = require(\".\/lib\/aerospike\")'" >> $GITHUB_ENV +# +# +# - name: Test client +# run: | +# ${{ env.TEST_COMMAND }} +# +# - name: Save macOS wheel +# uses: actions/upload-artifact@v4 +# with: +# name: ${{ matrix.nodejs-version[0] }}-macosx_arm64.build +# path: ./lib/binding/*/ +# +# - name: Stop server +# if: ${{ always() && inputs.run_tests }} +# run: | +# docker container stop aerospike +# docker container prune -f +# +# - name: Set final commit status +# uses: myrotvorets/set-commit-status-action@v2.0.0 +# if: always() +# with: +# sha: ${{ github.sha }} +# status: ${{ job.status }} +# context: "Build bindings (${{ matrix.nodejs-version[0] }}-macosx_arm64)" + + test-npm-install: + runs-on: ubuntu-latest + needs: [manylinux, macOS-x86] steps: - - name: Show job status for commit - uses: myrotvorets/set-commit-status-action@v2.0.0 - with: - sha: ${{ github.sha }} - context: "Build bindings (${{ matrix.nodejs-version[1] }}-macosx_arm64)" - - - uses: actions/checkout@v4 + - uses: actions/checkout@v2 with: submodules: recursive - ref: ${{ inputs.commit_sha }} - - name: Install NVM - run: | - curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash - source ~/.zshrc - nvm -v - nvm install ${{ matrix.nodejs-version[1] }} + - uses: ./.github/workflows/combine-bindings/ + - uses: actions/setup-node@v4 + with: + node-version: ${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} + architecture: 'x64' - - name: Setup symlink folders + - name: Modify the package.json run: | - sudo rm -rf /usr/local/opt/openssl; - sudo rm -rf /usr/local/opt/libuv; - sudo mkdir -p /usr/local/opt; - sudo chown -R $(whoami) /usr/local/opt + npm install -g json + json -I -f package.json -e "this.scripts.install=\"npm-run-all removeExtraBinaries build\"" - - name: Install brew packages + - name: Run tests run: | - brew install openssl@3.2.1 - brew install libuv@1.47.0 + mkdir -p testDir lib/binding/openssl@3/ lib/binding/openssl@1/ + cd testDir + npm install .. - - name: Set environment for building - run: | - echo "export PATH="/usr/local/bin/:/usr/local/opt/openssl/bin:$PATH" - export LDFLAGS="-L/usr/local/opt/openssl/lib" - export CPPFLAGS="-I/usr/local/opt/openssl/include" - export EXT_CFLAGS="-I/usr/local/opt/openssl/include"" >> ~/.zshrc; - source ~/.zshrc; + test-yarn-install: + runs-on: ubuntu-latest + needs: [manylinux, macOS-x86] + steps: + - uses: actions/checkout@v2 + with: + submodules: recursive - - name: Setup symlink folders + - uses: ./.github/workflows/combine-bindings/ + + - uses: actions/setup-node@v4 + with: + node-version: ${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} + architecture: 'x64' + + - name: Modify the package.json run: | - sudo ln -s /usr/local/Cellar/libuv/1.47.0/ /usr/local/opt/libuv; - sudo ln -s /usr/local/Cellar/openssl@3/3.2.1/ /usr/local/opt/openssl; + npm install -g json + json -I -f package.json -e "this.scripts.install=\"npm-run-all removeExtraBinaries build\"" - # Self-hosted runner only - # Need to be able to save Docker Hub credentials to keychain - - run: security unlock-keychain -p ${{ secrets.MAC_M1_SELF_HOSTED_RUNNER_PW }} - if: ${{ inputs.run_tests && inputs.use-server-rc }} + - name: Run tests + run: | + mkdir -p testDir lib/binding/openssl@3/ lib/binding/openssl@1/ + cd testDir + yarn install .. - - if: ${{ inputs.run_tests && inputs.use-server-rc }} - uses: docker/login-action@v3 + test-pnpm-install: + runs-on: ubuntu-latest + needs: [manylinux, macOS-x86] + steps: + - uses: actions/checkout@v2 with: - username: ${{ secrets.DOCKER_HUB_BOT_USERNAME }} - password: ${{ secrets.DOCKER_HUB_BOT_PW }} + submodules: recursive - - name: Use server rc - if: ${{ inputs.run_tests && inputs.use-server-rc }} - run: echo IMAGE_NAME="${{ vars.SERVER_RC_REPO_LINK }}:${{ inputs.server-tag }}" >> $GITHUB_ENV + - uses: ./.github/workflows/combine-bindings/ - - name: Use server release - if: ${{ inputs.run_tests && !inputs.use-server-rc }} - run: echo IMAGE_NAME="${{ vars.SERVER_REPO_LINK }}:${{ inputs.server-tag }}" >> $GITHUB_ENV + - uses: actions/setup-node@v4 + with: + node-version: ${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} + architecture: 'x64' - - name: Run server - if: ${{ inputs.run_tests }} - run: docker run -d -p 3000:3000 --name aerospike ${{ env.IMAGE_NAME }} + - name: Modify the package.json + run: | + npm install -g json + json -I -f package.json -e "this.scripts.install=\"npm-run-all removeExtraBinaries build\"" - - name: Build client + - name: Run tests run: | - ./scripts/build-c-client.sh - npm install - env: - CFLAGS: '-Werror' + mkdir -p testDir lib/binding/openssl@3/ lib/binding/openssl@1/ + cd testDir + pnpm install .. - - name: Enable tests - if: ${{ inputs.run_tests }} - run: echo "TEST_COMMAND=npm test -- --h 127.0.0.1 --port 3000" >> $GITHUB_ENV + test-bun-install: + runs-on: ubuntu-latest + needs: [manylinux, macOS-x86] + steps: + - uses: actions/checkout@v2 + with: + submodules: recursive - - name: Disable tests (only run basic import test) - if: ${{ !inputs.run_tests }} - run: echo "TEST_COMMAND=node -e 'aerospike = require(\".\/lib\/aerospike\")'" >> $GITHUB_ENV + - uses: ./.github/workflows/combine-bindings/ + - uses: actions/setup-node@v4 + with: + node-version: ${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} + architecture: 'x64' - - name: Test client + - name: Modify the package.json run: | - ${{ env.TEST_COMMAND }} + npm install -g json + json -I -f package.json -e "this.scripts.install=\"npm-run-all removeExtraBinaries build\"" - - name: Save macOS wheel - uses: actions/upload-artifact@v4 + - name: Run tests + run: | + mkdir -p testDir lib/binding/openssl@3/ lib/binding/openssl@1/ + cd testDir + bun install .. + + test-bun-install: + runs-on: ubuntu-latest + needs: [manylinux, macOS-x86] + steps: + - uses: actions/checkout@v2 with: - name: ${{ matrix.nodejs-version[0] }}-macosx_arm64.build - path: ./lib/binding/*/ + submodules: recursive - - name: Stop server - if: ${{ always() && inputs.run_tests }} - run: | - docker container stop aerospike - docker container prune -f + - uses: ./.github/workflows/combine-bindings/ - - name: Set final commit status - uses: myrotvorets/set-commit-status-action@v2.0.0 - if: always() + - uses: actions/setup-node@v4 with: - sha: ${{ github.sha }} - status: ${{ job.status }} - context: "Build bindings (${{ matrix.nodejs-version[0] }}-macosx_arm64)" + node-version: ${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} + architecture: 'x64' + + - name: Modify the package.json + run: | + npm install -g json + json -I -f package.json -e "this.scripts.install=\"npm-run-all removeExtraBinaries build\"" + + - name: Run tests + run: | + mkdir -p testDir lib/binding/openssl@3/ lib/binding/openssl@1/ + cd testDir + bun install .. diff --git a/.github/workflows/combine-bindings/action.yml b/.github/workflows/combine-bindings/action.yml new file mode 100644 index 00000000..be45e012 --- /dev/null +++ b/.github/workflows/combine-bindings/action.yml @@ -0,0 +1,77 @@ +name: Combine bindings +description: 'composite run action' + +runs: + using: "composite" + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + +# - uses: actions/download-artifact@v4 +# with: +# name: v108-macosx_aarch64.build + + - uses: actions/download-artifact@v4 + with: + name: v108-macosx_x86_64.build + +# - uses: actions/download-artifact@v4 +# with: +# name: v115-macosx_aarch64.build + + - uses: actions/download-artifact@v4 + with: + name: v115-macosx_x86_64.build + +# - uses: actions/download-artifact@v4 +# with: +# name: v120-macosx_aarch64.build + + - uses: actions/download-artifact@v4 + with: + name: v120-macosx_x86_64.build + + - uses: actions/download-artifact@v4 + with: + name: v108-manylinux_x86_64.build + + - uses: actions/download-artifact@v4 + with: + name: v108-manylinux_aarch64.build + + - uses: actions/download-artifact@v4 + with: + name: v115-manylinux_x86_64.build + + - uses: actions/download-artifact@v4 + with: + name: v115-manylinux_aarch64.build + + - uses: actions/download-artifact@v4 + with: + name: v120-manylinux_x86_64.build + + - uses: actions/download-artifact@v4 + with: + name: v120-manylinux_aarch64.build + + - name: Install client + shell: bash + run: | + mkdir -p lib/binding/node-v108-darwin-arm64 lib/binding/node-v115-darwin-arm64 lib/binding/node-v120-darwin-arm64 + cp -r node-v108-linux-x64 lib/binding/node-v108-linux-x64 + cp -r node-v115-linux-x64 lib/binding/node-v115-linux-x64 + cp -r node-v120-linux-x64 lib/binding/node-v120-linux-x64 + cp -r node-v108-linux-arm64 lib/binding/node-v108-linux-arm64 + cp -r node-v115-linux-arm64 lib/binding/node-v115-linux-arm64 + cp -r node-v120-linux-arm64 lib/binding/node-v120-linux-arm64 + cp -r node-v108-darwin-x64 lib/binding/node-v108-darwin-x64 + cp -r node-v115-darwin-x64 lib/binding/node-v115-darwin-x64 + cp -r node-v120-darwin-x64 lib/binding/node-v120-darwin-x64 +# cp -r node-v108-darwin-arm64 lib/binding/node-v108-darwin-arm64 +# cp -r node-v115-darwin-arm64 lib/binding/node-v115-darwin-arm64 +# cp -r node-v120-darwin-arm64 lib/binding/node-v120-darwin-arm64 + + + diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 1d67ec7a..3dad9484 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -1,316 +1,427 @@ -#name: PR pre-merge tests -# -#env: -# LOWEST_SUPPORTED_NODEJS_VERSION: '18' -# LOWEST_SUPPORTED_NODE_MODULE: 'v108' -# -## Trigger test workflow whenever: -## 1. A pull request is updated (e.g with new commits) -## 2. Commits are pushed directly to the stage or master branch -#on: -# push: -# branches: ["stage", "master"] -# pull_request: -# branches: ["stage"] -# types: [ -# # Default triggers -# opened, -# synchronize, -# reopened, -# # Additional triggers -# labeled, -# unlabeled -# ] -# workflow_dispatch: -# -#jobs: -# lint: -# runs-on: ubuntu-latest -# steps: -# - uses: actions/checkout@v4 -# with: -# submodules: recursive -# - name: install standard -# run: npm install standard -# - name: lint -# run: npm run lint -# -# build-ubuntu: +name: PR pre-merge tests + +env: + LOWEST_SUPPORTED_NODEJS_VERSION: '18' + LOWEST_SUPPORTED_NODE_MODULE: 'v108' + +# Trigger test workflow whenever: +# 1. A pull request is updated (e.g with new commits) +# 2. Commits are pushed directly to the stage or master branch +on: + push: + branches: ["stage", "master"] + pull_request: + branches: ["stage", "master"] + types: [ + # Default triggers + opened, + synchronize, + reopened, + # Additional triggers + labeled, + unlabeled + ] + workflow_dispatch: + +jobs: + lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + - name: install standard + run: npm install standard + + - name: lint + run: npm run lint + + build-ubuntu: + runs-on: ubuntu-latest + strategy: + matrix: + nodejs-version: ["18", "20", "21"] + fail-fast: false + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + + - uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.nodejs-version }} + architecture: 'x64' + - name: debugging + run: | + echo "LOWEST_SUPPORTED_NODEJS_VERSION: $LOWEST_SUPPORTED_NODEJS_VERSION" + + - run: sudo apt update + - name: Install build dependencies (C Client dependency packages) + run: sudo apt install g++ libssl-dev zlib1g-dev; + - name: Install build dependencies (make) + run: sudo apt-get install -y make; + - name: Install build dependencies (make) + run: sudo apt install build-essential; + + - name: Build client + run: | + ./scripts/build-c-client.sh + npm install + env: + CFLAGS: '-Werror' + + - name: list + run: ls lib/binding + - name: Send binding to test jobs + uses: actions/upload-artifact@v4 + with: + name: binding-${{ matrix.nodejs-version }} + path: ./lib/binding/node-*-linux-x64/ + +# test-memray: +# needs: build-ubuntu # runs-on: ubuntu-latest -# strategy: -# matrix: -# nodejs-version: ["18", "20", "21"] -# fail-fast: false -# -# # steps: # - uses: actions/checkout@v4 -# with: -# submodules: recursive # # - uses: actions/setup-node@v4 # with: # node-version: ${{ matrix.nodejs-version }} # architecture: 'x64' -# - name: debugging -# run: | -# echo "LOWEST_SUPPORTED_NODEJS_VERSION: $LOWEST_SUPPORTED_NODEJS_VERSION" -# -# - run: sudo apt update -# - name: Install build dependencies (C Client dependency packages) -# run: sudo apt install g++ libssl-dev zlib1g-dev; -# - name: Install build dependencies (make) -# run: sudo apt-get install -y make; -# - name: Install build dependencies (make) -# run: sudo apt install build-essential; -# -# - name: Build client -# run: | -# ./scripts/build-c-client.sh -# npm install -# env: -# CFLAGS: '-Werror' -# -# - name: list -# run: ls lib/binding -# - name: Send binding to test jobs -# uses: actions/upload-artifact@v4 -# with: -# name: binding-${{ matrix.nodejs-version }} -# path: ./lib/binding/node-*-linux-x64/ -# -## test-memray: -## needs: build-ubuntu -## runs-on: ubuntu-latest -## steps: -## - uses: actions/checkout@v4 -## -## - uses: actions/setup-node@v4 -## with: -## node-version: ${{ matrix.nodejs-version }} -## architecture: 'x64' -## -## - uses: actions/download-artifact@v4 -## with: -## name: binding-18 -## -## - name: make binding folder -## run: mkdir lib/binding -## -## - name: Install client -## run: cp -r install node-v108-linux-x64 lib/binding/node-v108-linux-x64 -## -## - name: Install client -## run: npm install . -## -## - name: Run Aerospike server -## run: docker run -d --name aerospike -p 3000-3002:3000-3002 aerospike/aerospike-server -## -## - name: Wait for database to be ready -## # Should be ready after 3 seconds -## run: sleep 3 -## -## - name: Get number of tests -## run: echo "NUM_TESTS=$(npm run test-dry-run | grep -oP '\d+ (passing|pending)' | awk '{ sum += $1 } END { print sum }')" >> $GITHUB_ENV -## working-directory: test -## -## - name: Run tests -## # Get number of tests since setting to 0 doesn't work properly -## # pytest-memray currently throws a ZeroDivision error due to having a bug -## # We ignore this for now -## run: python -m pytest ./new_tests --memray --memray-bin-path=./ --most-allocations=${{ env.NUM_TESTS }} || true -## working-directory: test -# -# # Run this when testing new server features on server release candidate -# # to make sure the tests don't regress on the last server release. -# test-ce-latest-release: -# runs-on: ubuntu-latest -# if: ${{ contains(github.event.pull_request.labels.*.name, 'new-server-features') }} -# needs: build-ubuntu -# -# steps: -# - uses: actions/checkout@v4 -# with: -# submodules: recursive -# - name: debugging -# run: | -# echo "LOWEST_SUPPORTED_NODEJS_VERSION: $LOWEST_SUPPORTED_NODEJS_VERSION" -# - uses: actions/setup-node@v4 -# with: -# node-version: ${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} -# architecture: 'x64' -# -# - uses: actions/download-artifact@v4 -# with: -# name: binding-${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} -# env: -# LOWEST_SUPPORTED_NODEJS_VERSION: ${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} -# -# -# - name: make binding folder -# run: mkdir lib/binding -# -# - name: Install client -# run: cp -r node-${{ env.LOWEST_SUPPORTED_NODE_MODULE }}-linux-x64 lib/binding/node-${{ env.LOWEST_SUPPORTED_NODE_MODULE }}-linux-x64 -# -# - name: Run Aerospike server -# run: docker run -d --name aerospike -p 3000-3002:3000-3002 aerospike/aerospike-server -# -# - name: Wait for database to be ready -# # Should be ready after 3 seconds -# run: sleep 3 -# -# - name: Run tests -# run: npm run test -# -# test-ce: -# runs-on: ubuntu-latest -# needs: build-ubuntu -# strategy: -# matrix: -# node-version: [ -# "18", -# "20", -# "21" -# ] -# fail-fast: false -# -# steps: -# - uses: actions/checkout@v2 -# with: -# submodules: recursive -# -# - uses: actions/setup-node@v4 -# with: -# node-version: ${{ matrix.node-version }} -# architecture: 'x64' # # - uses: actions/download-artifact@v4 # with: -# name: binding-${{ matrix.node-version }} +# name: binding-18 # # - name: make binding folder # run: mkdir lib/binding # -# - name: install mocha -# run: npm install mocha -# # - name: Install client -# #fix the convention here -# run: | -# if [ "${{ matrix.node-version }}" = "18" ]; then -# cp -r node-v108-linux-x64 lib/binding/node-v108-linux-x64 -# elif [ "${{ matrix.node-version }}" = "20" ]; then -# cp -r node-v115-linux-x64 lib/binding/node-v115-linux-x64 -# elif [ "${{ matrix.node-version }}" = "21" ]; then -# cp -r node-v120-linux-x64 lib/binding/node-v120-linux-x64 -# fi -# -# - if: ${{ contains(github.event.pull_request.labels.*.name, 'new-server-features') }} -# uses: docker/login-action@v3 -# with: -# username: ${{ secrets.DOCKER_HUB_BOT_USERNAME }} -# password: ${{ secrets.DOCKER_HUB_BOT_PW }} +# run: cp -r install node-v108-linux-x64 lib/binding/node-v108-linux-x64 # -# - name: Run Aerospike server release candidate with latest tag -# if: ${{ contains(github.event.pull_request.labels.*.name, 'new-server-features') }} -# run: docker run -d --name aerospike -p 3000-3002:3000-3002 aerospike/aerospike-server-rc:latest +# - name: Install client +# run: npm install . # # - name: Run Aerospike server -# if: ${{ !contains(github.event.pull_request.labels.*.name, 'new-server-features') }} # run: docker run -d --name aerospike -p 3000-3002:3000-3002 aerospike/aerospike-server # # - name: Wait for database to be ready # # Should be ready after 3 seconds # run: sleep 3 # -# - name: Run tests -# run: npm run test -# -# test-lowest-supported-server: -# runs-on: ubuntu-latest -# needs: build-ubuntu -# steps: -# - uses: actions/checkout@v2 -# with: -# submodules: recursive -# -# - uses: actions/setup-node@v4 -# with: -# node-version: ${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} -# architecture: 'x64' -# -# - uses: actions/download-artifact@v4 -# with: -# name: binding-${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} -# env: -# LOWEST_SUPPORTED_NODEJS_VERSION: ${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} -# -# - name: make binding folder -# run: mkdir lib/binding -# -# - name: install mocha -# run: npm install mocha -# -# - name: Install client -# #fix the convention here -# run: cp -r node-${{ env.LOWEST_SUPPORTED_NODE_MODULE }}-linux-x64 lib/binding/node-${{ env.LOWEST_SUPPORTED_NODE_MODULE }}-linux-x64 -# -# - name: Run lowest supported server -# run: | -# SERVER_VERSION=$(curl -s "https://registry.hub.docker.com/v2/repositories/aerospike/aerospike-server/tags?page_size=100" | jq '.results[] | select(.name | startswith("6.0")).name' -r | head -n 1) -# docker run -d --name aerospike -p 3000-3002:3000-3002 aerospike/aerospike-server:$SERVER_VERSION -# -# - name: Wait for database to be ready -# # Should be ready after 3 seconds -# run: sleep 3 -# -# - name: Run tests -# run: npm run test -# -# test-ee: -# runs-on: ubuntu-latest -# needs: build-ubuntu -# steps: -# - uses: actions/checkout@v2 -# with: -# submodules: recursive -# -# - uses: actions/setup-node@v4 -# with: -# node-version: ${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} -# architecture: 'x64' -# -# - uses: actions/download-artifact@v4 -# with: -# name: binding-${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} -# env: -# LOWEST_SUPPORTED_NODEJS_VERSION: ${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} -# -# - name: make binding folder -# run: mkdir lib/binding -# -# - name: install mocha -# run: npm install mocha -# -# - name: Install client -# #fix the convention here -# run: cp -r node-${{ env.LOWEST_SUPPORTED_NODE_MODULE }}-linux-x64 lib/binding/node-${{ env.LOWEST_SUPPORTED_NODE_MODULE }}-linux-x64 -# -# - uses: ./.github/actions/run-ee-server -# with: -# use-server-rc: ${{ contains(github.event.pull_request.labels.*.name, 'new-server-features') }} -# docker-hub-username: ${{ secrets.DOCKER_HUB_BOT_USERNAME }} -# docker-hub-password: ${{ secrets.DOCKER_HUB_BOT_PW }} -# -# - name: Wait for server to start -# run: sleep 5 +# - name: Get number of tests +# run: echo "NUM_TESTS=$(npm run test-dry-run | grep -oP '\d+ (passing|pending)' | awk '{ sum += $1 } END { print sum }')" >> $GITHUB_ENV +# working-directory: test # # - name: Run tests -# run: npm run test -- --h localhost --U superuser --P superuser -# -# - name: Show logs if failed -# if: ${{ failure() }} -# run: | -# docker container logs aerospike -# cat ./configs/aerospike.conf \ No newline at end of file +# # Get number of tests since setting to 0 doesn't work properly +# # pytest-memray currently throws a ZeroDivision error due to having a bug +# # We ignore this for now +# run: python -m pytest ./new_tests --memray --memray-bin-path=./ --most-allocations=${{ env.NUM_TESTS }} || true +# working-directory: test + + # Run this when testing new server features on server release candidate + # to make sure the tests don't regress on the last server release. + test-ce-latest-release: + runs-on: ubuntu-latest + if: ${{ contains(github.event.pull_request.labels.*.name, 'new-server-features') }} + needs: build-ubuntu + + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + - name: debugging + run: | + echo "LOWEST_SUPPORTED_NODEJS_VERSION: $LOWEST_SUPPORTED_NODEJS_VERSION" + - uses: actions/setup-node@v4 + with: + node-version: ${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} + architecture: 'x64' + + - uses: actions/download-artifact@v4 + with: + name: binding-${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} + env: + LOWEST_SUPPORTED_NODEJS_VERSION: ${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} + + + - name: make binding folder + run: mkdir lib/binding + + - name: Install client + run: cp -r node-${{ env.LOWEST_SUPPORTED_NODE_MODULE }}-linux-x64 lib/binding/node-${{ env.LOWEST_SUPPORTED_NODE_MODULE }}-linux-x64 + + - name: Run Aerospike server + run: docker run -d --name aerospike -p 3000-3002:3000-3002 aerospike/aerospike-server + + - name: Wait for database to be ready + # Should be ready after 3 seconds + run: sleep 3 + + - name: Run tests + run: npm run test + + test-ce: + runs-on: ubuntu-latest + needs: build-ubuntu + strategy: + matrix: + node-version: [ + "18", + "20", + "21" + ] + fail-fast: false + + steps: + - uses: actions/checkout@v2 + with: + submodules: recursive + + - uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node-version }} + architecture: 'x64' + + - uses: actions/download-artifact@v4 + with: + name: binding-${{ matrix.node-version }} + + - name: make binding folder + run: mkdir lib/binding + + - name: install mocha + run: npm install mocha + + - name: Install client + #fix the convention here + run: | + if [ "${{ matrix.node-version }}" = "18" ]; then + cp -r node-v108-linux-x64 lib/binding/node-v108-linux-x64 + elif [ "${{ matrix.node-version }}" = "20" ]; then + cp -r node-v115-linux-x64 lib/binding/node-v115-linux-x64 + elif [ "${{ matrix.node-version }}" = "21" ]; then + cp -r node-v120-linux-x64 lib/binding/node-v120-linux-x64 + fi + + - if: ${{ contains(github.event.pull_request.labels.*.name, 'new-server-features') }} + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKER_HUB_BOT_USERNAME }} + password: ${{ secrets.DOCKER_HUB_BOT_PW }} + + - name: Run Aerospike server release candidate with latest tag + if: ${{ contains(github.event.pull_request.labels.*.name, 'new-server-features') }} + run: docker run -d --name aerospike -p 3000-3002:3000-3002 aerospike/aerospike-server-rc:latest + + - name: Run Aerospike server + if: ${{ !contains(github.event.pull_request.labels.*.name, 'new-server-features') }} + run: docker run -d --name aerospike -p 3000-3002:3000-3002 aerospike/aerospike-server + + - name: Wait for database to be ready + # Should be ready after 3 seconds + run: sleep 3 + + - name: Run tests + run: npm run test + + test-lowest-supported-server: + runs-on: ubuntu-latest + needs: build-ubuntu + steps: + - uses: actions/checkout@v2 + with: + submodules: recursive + + - uses: actions/setup-node@v4 + with: + node-version: ${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} + architecture: 'x64' + + - uses: actions/download-artifact@v4 + with: + name: binding-${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} + env: + LOWEST_SUPPORTED_NODEJS_VERSION: ${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} + + - name: make binding folder + run: mkdir lib/binding + + - name: install mocha + run: npm install mocha + + - name: Install client + #fix the convention here + run: cp -r node-${{ env.LOWEST_SUPPORTED_NODE_MODULE }}-linux-x64 lib/binding/node-${{ env.LOWEST_SUPPORTED_NODE_MODULE }}-linux-x64 + + - name: Run lowest supported server + run: | + SERVER_VERSION=$(curl -s "https://registry.hub.docker.com/v2/repositories/aerospike/aerospike-server/tags?page_size=100" | jq '.results[] | select(.name | startswith("6.0")).name' -r | head -n 1) + docker run -d --name aerospike -p 3000-3002:3000-3002 aerospike/aerospike-server:$SERVER_VERSION + + - name: Wait for database to be ready + # Should be ready after 3 seconds + run: sleep 3 + + - name: Run tests + run: npm run test + + test-ee: + runs-on: ubuntu-latest + needs: build-ubuntu + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + + - uses: actions/setup-node@v4 + with: + node-version: ${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} + architecture: 'x64' + + - uses: actions/download-artifact@v4 + with: + name: binding-${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} + env: + LOWEST_SUPPORTED_NODEJS_VERSION: ${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} + + - name: make binding folder + run: mkdir lib/binding + + - name: install mocha + run: npm install mocha + + - name: Install client + #fix the convention here + run: cp -r node-${{ env.LOWEST_SUPPORTED_NODE_MODULE }}-linux-x64 lib/binding/node-${{ env.LOWEST_SUPPORTED_NODE_MODULE }}-linux-x64 + + - name: Download aerospike-client-python repository + run: git clone https://github.com/aerospike/aerospike-client-python.git + + - name: phil + run: | + ls aerospike-client-python/.github + pwd + + - name: Run ee server + uses: ./aerospike-client-python/.github/actions/run-ee-server/ + with: + use-server-rc: ${{ contains(github.event.pull_request.labels.*.name, 'new-server-features') }} + docker-hub-username: ${{ secrets.DOCKER_HUB_BOT_USERNAME }} + docker-hub-password: ${{ secrets.DOCKER_HUB_BOT_PW }} + + + - name: Wait for server to start + run: sleep 5 + + - name: Run tests + run: npm run test -- --h localhost --U admin --P admin --t 40000 test/admin.js + + test-valgrind: + runs-on: ubuntu-latest + needs: build-ubuntu + strategy: + matrix: + node-version: [ + "20", + ] + fail-fast: false + + steps: + - uses: actions/checkout@v2 + with: + submodules: recursive + + - uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node-version }} + architecture: 'x64' + + - uses: actions/download-artifact@v4 + with: + name: binding-${{ matrix.node-version }} + + - name: make binding folder + run: mkdir lib/binding + + - name: install mocha + run: npm install mocha + + - name: install valgrind + run: sudo apt install valgrind + + - name: Install client + #fix the convention here + run: | + cp -r node-v115-linux-x64 lib/binding/node-v115-linux-x64 + + - if: ${{ contains(github.event.pull_request.labels.*.name, 'new-server-features') }} + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKER_HUB_BOT_USERNAME }} + password: ${{ secrets.DOCKER_HUB_BOT_PW }} + + - name: Run Aerospike server release candidate with latest tag + if: ${{ contains(github.event.pull_request.labels.*.name, 'new-server-features') }} + run: docker run -d --name aerospike -p 3000-3002:3000-3002 aerospike/aerospike-server-rc:latest + + - name: Run Aerospike server + if: ${{ !contains(github.event.pull_request.labels.*.name, 'new-server-features') }} + run: docker run -d --name aerospike -p 3000-3002:3000-3002 aerospike/aerospike-server + + - name: Wait for database to be ready + # Should be ready after 3 seconds + run: sleep 3 + + - name: Run tests + run: npm run valgrind -- --t 40000 + + test-typescript: + runs-on: ubuntu-latest + needs: build-ubuntu + strategy: + matrix: + node-version: [ + "20", + ] + fail-fast: false + + steps: + - uses: actions/checkout@v2 + with: + submodules: recursive + + - uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node-version }} + architecture: 'x64' + + - uses: actions/download-artifact@v4 + with: + name: binding-${{ matrix.node-version }} + + - name: make binding folder + run: mkdir lib/binding + + - name: Install client + #fix the convention here + run: | + cp -r node-v115-linux-x64 lib/binding/node-v115-linux-x64 + + - name: Modify the package.json + run: | + mkdir my-aerospike-project + cd my-aerospike-project + npm init -y + npm install typescript ts-node --save-dev + npm install .. + cp ../examples/typescript.ts + npx tsc index.ts + node index.js + + - name: Run tests + run: | + mkdir -p testDir lib/binding/openssl@3/ lib/binding/openssl@1/ + cd testDir + bun install .. \ No newline at end of file diff --git a/examples/typescript.ts b/examples/typescript.ts new file mode 100644 index 00000000..659dc635 --- /dev/null +++ b/examples/typescript.ts @@ -0,0 +1,26 @@ +import * as Aerospike from 'aerospike'; + +(async function () { + let client: Aerospike.Client | undefined; + + try { + client = await Aerospike.connect(); + const key = new Aerospike.Key('test', 'test', 'abcd'); + const bins: Record = { + name: 'Norma', + age: 31 + }; + + await client.put(key, bins); + const record = await client.get(key); + console.info('Record:', record); + await client.remove(key); + } catch (error) { + console.error('Error:', error); + process.exit(1); + } finally { + if (client) { + await client.close(); + } + } +})(); diff --git a/test/admin.js b/test/admin.js index 62f71d58..015209ad 100644 --- a/test/admin.js +++ b/test/admin.js @@ -460,24 +460,28 @@ context('admin commands', async function () { describe('Client#changePassword()', function () { it('Changes password for user', async function () { client.changePassword(username1, 'password350', null) + await wait(waitMs + 30000) const config = { hosts: options.host + ':' + options.port, user: username1, password: 'password350' } const dummyClient = await Aerospike.connect(config) - dummyClient.close() + return dummyClient.close() }) it('With policy', async function () { client.changePassword(username2, 'password250', policy) + await wait(waitMs + 3000) + const config = { hosts: options.host + ':' + options.port, user: username2, password: 'password250' } + console.log(config) const dummyClient = await Aerospike.connect(config) - dummyClient.close() + return dummyClient.close() }) }) diff --git a/test/exp.js b/test/exp.js index 73b77388..18f4c596 100644 --- a/test/exp.js +++ b/test/exp.js @@ -113,6 +113,7 @@ describe('Aerospike.exp', function () { }) describe('eq on list bin', function () { + helper.skipUnlessVersion('>= 6.3.0', this) it('evaluates to true if a list bin matches a value', async function () { const key = await createRecord({ list: [4, 2, 0] }) await orderByKey(key, 'map') diff --git a/test/exp_map.js b/test/exp_map.js index 5f69179d..0da8d0c9 100644 --- a/test/exp_map.js +++ b/test/exp_map.js @@ -720,7 +720,6 @@ describe('Aerospike.exp_operations', function () { ] let result = await client.operate(key, ops, {}) result = await client.get(key) - console.log(result) expect(result.bins).to.eql({ tags: { a: 'blue', c: 'yellow' } }) }) @@ -738,7 +737,6 @@ describe('Aerospike.exp_operations', function () { ] let result = await client.operate(key, ops, {}) result = await client.get(key) - console.log(result) expect(result.bins).to.eql({ tags: { a: 'blue', nested: { d: 'orange', f: 'white', g: 'black' } } }) }) }) diff --git a/test/index.js b/test/index.js index 46a0323b..797d59c1 100644 --- a/test/index.js +++ b/test/index.js @@ -210,8 +210,8 @@ context('secondary indexes', function () { }) describe('Client#indexRemove()', async function () { - beforeEach(() => { - helper.index.create(testIndex.name, helper.set, testIndex.bin, + beforeEach(async () => { + await helper.index.create(testIndex.name, helper.set, testIndex.bin, Aerospike.indexDataType.STRING, Aerospike.indexType.DEFAULT) }) @@ -240,8 +240,8 @@ context('secondary indexes', function () { } }) - it('should return a Promise if called without callback function', function () { - return client.indexRemove(helper.namespace, testIndex.name) + it('should return a Promise if called without callback function', async function () { + return await client.indexRemove(helper.namespace, testIndex.name) }) }) }) diff --git a/test/maps.js b/test/maps.js index 03daf486..48460a4c 100644 --- a/test/maps.js +++ b/test/maps.js @@ -297,7 +297,6 @@ describe('client.operate() - CDT Map operations', function () { }) it('adds each item from the Map class to the map and returns the size of the map', function () { - console.log(maps.putItems('map', new Map([['e', 150], ['d', 100], ['c', 99]]))) return initState() .then(createRecord({ map: { a: 1, b: 2, c: 3 } })) .then(operate(maps.putItems('map', new Map([['e', 150], ['d', 100], ['c', 99]])))) @@ -1554,7 +1553,8 @@ describe('client.operate() - CDT Map operations', function () { .then(assertResultEql({ map: ['a', 1, 'b', 2] })) .then(cleanup()) }) - context('Need Server 6.1+', function () { + + context('returnType.EXISTS', function () { helper.skipUnlessVersion('>= 6.1.0', this) it('returns true or false for a single key read', function () { return initState() @@ -1565,7 +1565,7 @@ describe('client.operate() - CDT Map operations', function () { .then(cleanup()) }) - it('returns true if any values exisst', function () { + it('returns true if any values exist', function () { return initState() .then(createRecord({ map: { a: 1, b: 2, c: 3 } })) .then(orderByKey('map')) @@ -1575,7 +1575,7 @@ describe('client.operate() - CDT Map operations', function () { }) }) - context('Need Server 6.3+', function () { + context('returnType.ORDERED_MAP', function () { helper.skipUnlessVersion('>= 6.3.0', this) it('returns key/value for a single read', function () { return initState() @@ -1594,7 +1594,10 @@ describe('client.operate() - CDT Map operations', function () { .then(assertResultEql({ map: { a: 1, b: 2 } })) .then(cleanup()) }) + }) + context('returnType.UNORDERED_MAP', function () { + helper.skipUnlessVersion('>= 6.3.0', this) it('returns key/value for a single read', function () { return initState() .then(createRecord({ map: { a: 1, b: 2, c: 3 } })) diff --git a/test/query.js b/test/query.js index 66c878c4..6f65a2e6 100644 --- a/test/query.js +++ b/test/query.js @@ -44,12 +44,13 @@ const MAPKEYS = Aerospike.indexType.MAPKEYS const keygen = helper.keygen const metagen = helper.metagen const putgen = helper.putgen +let samples describe('Queries', function () { const client = helper.client - this.timeout(40000) + const testSet = 'test/query-' + Math.floor(Math.random() * 100000) - const samples = [ + samples = [ { name: 'int match', i: 5 }, { name: 'int non-match', i: 500 }, { name: 'int list match', li: [1, 5, 9] }, @@ -82,37 +83,7 @@ describe('Queries', function () { { name: 'filter', value: 1 }, { name: 'filter', value: 2 }, { name: 'filter', value: 3 }, - { name: 'filter', value: 4 }, - - { name: 'nested int list match', li: { nested: [1, 5, 9] } }, - { name: 'nested int list non-match', li: { nested: [500, 501, 502] } }, - { name: 'nested int map match', mi: { nested: { a: 1, b: 5, c: 9 } } }, - { name: 'nested int map non-match', mi: { nested: { a: 500, b: 501, c: 502 } } }, - { name: 'nested string list match', ls: { nested: ['banana', 'blueberry'] } }, - { name: 'nested string list non-match', ls: { nested: ['tomato', 'cuccumber'] } }, - { name: 'nested string map match', ms: { nested: { a: 'banana', b: 'blueberry' } } }, - { name: 'nested string map non-match', ms: { nested: { a: 'tomato', b: 'cuccumber' } } }, - { name: 'nested string mapkeys match', mks: { nested: { banana: 1, blueberry: 2 } } }, - { name: 'nested string mapkeys non-match', mks: { nested: { tomato: 3, cuccumber: 4 } } }, - { name: 'nested point match', g: { nested: GeoJSON.Point(103.913, 1.308) } }, - { name: 'nested point non-match', g: { nested: GeoJSON.Point(-122.101, 37.421) } }, - { name: 'nested point list match', lg: { nested: [GeoJSON.Point(103.913, 1.308), GeoJSON.Point(105.913, 3.308)] } }, - { name: 'nested point list non-match', lg: { nested: [GeoJSON.Point(-122.101, 37.421), GeoJSON.Point(-120.101, 39.421)] } }, - { name: 'nested point map match', mg: { nested: { a: GeoJSON.Point(103.913, 1.308), b: GeoJSON.Point(105.913, 3.308) } } }, - { name: 'nested point map non-match', mg: { nested: { a: GeoJSON.Point(-122.101, 37.421), b: GeoJSON.Point(-120.101, 39.421) } } }, - { name: 'nested region match', g: { nested: GeoJSON.Polygon([102.913, 0.308], [102.913, 2.308], [104.913, 2.308], [104.913, 0.308], [102.913, 0.308]) } }, - { name: 'nested region non-match', g: { nested: GeoJSON.Polygon([-121.101, 36.421], [-121.101, 38.421], [-123.101, 38.421], [-123.101, 36.421], [-121.101, 36.421]) } }, - { name: 'nested region list match', lg: { nested: [GeoJSON.Polygon([102.913, 0.308], [102.913, 2.308], [104.913, 2.308], [104.913, 0.308], [102.913, 0.308])] } }, - { name: 'nested region list non-match', lg: { nested: [GeoJSON.Polygon([-121.101, 36.421], [-121.101, 38.421], [-123.101, 38.421], [-123.101, 36.421], [-121.101, 36.421])] } }, - { name: 'nested region map match', mg: { nested: { a: GeoJSON.Polygon([102.913, 0.308], [102.913, 2.308], [104.913, 2.308], [104.913, 0.308], [102.913, 0.308]) } } }, - { name: 'nested region map non-match', mg: { nested: [GeoJSON.Polygon([-121.101, 36.421], [-121.101, 38.421], [-123.101, 38.421], [-123.101, 36.421], [-121.101, 36.421])] } }, - { name: 'nested aggregate', nested: { value: 10 } }, - { name: 'nested aggregate', nested: { value: 20 } }, - { name: 'nested aggregate', nested: { value: 30 } }, - { name: 'nested aggregate', nested: { doubleNested: { value: 10 } } }, - { name: 'nested aggregate', nested: { doubleNested: { value: 20 } } }, - { name: 'nested aggregate', nested: { doubleNested: { value: 30 } } } - + { name: 'filter', value: 4 } ] const indexes = [ @@ -126,19 +97,8 @@ describe('Queries', function () { ['qidxStrMapKeys', 'mks', STRING, MAPKEYS], ['qidxGeo', 'g', GEO2DSPHERE], ['qidxGeoList', 'lg', GEO2DSPHERE, LIST], - ['qidxGeoMap', 'mg', GEO2DSPHERE, MAPVALUES], - // CDT context indexes - ['qidxNameNested', 'name', STRING, MAPKEYS, new Context().addMapKey('nested')], - ['qidxIntListNested', 'li', NUMERIC, LIST, new Context().addMapKey('nested')], - ['qidxIntMapNested', 'mi', NUMERIC, MAPVALUES, new Context().addMapKey('nested')], - ['qidxStrListNested', 'ls', STRING, LIST, new Context().addMapKey('nested')], - ['qidxStrMapNested', 'ms', STRING, MAPVALUES, new Context().addMapKey('nested')], - ['qidxStrMapKeysNested', 'mks', STRING, MAPKEYS, new Context().addMapKey('nested')], - ['qidxGeoListNested', 'lg', GEO2DSPHERE, LIST, new Context().addMapKey('nested')], - ['qidxGeoMapNested', 'mg', GEO2DSPHERE, MAPVALUES, new Context().addMapKey('nested')], - - ['qidxAggregateMapNested', 'nested', STRING, MAPKEYS], - ['qidxAggregateMapDoubleNested', 'nested', STRING, MAPKEYS, new Context().addMapKey('doubleNested')] + ['qidxGeoMap', 'mg', GEO2DSPHERE, MAPVALUES] + ] let keys = [] @@ -191,12 +151,53 @@ describe('Queries', function () { indexes.push(['qidxBlobMapNested', 'mblob', BLOB, MAPVALUES, new Context().addMapKey('nested')]) indexes.push(['qidxBlobMapKeysNested', 'mkblob', BLOB, MAPKEYS, new Context().addMapKey('nested')]) } + + if (helper.cluster.isVersionInRange('>= 6.1.0')) { + samples.push({ name: 'nested int list match', li: { nested: [1, 5, 9] } }) + samples.push({ name: 'nested int list non-match', li: { nested: [500, 501, 502] } }) + samples.push({ name: 'nested int map match', mi: { nested: { a: 1, b: 5, c: 9 } } }) + samples.push({ name: 'nested int map non-match', mi: { nested: { a: 500, b: 501, c: 502 } } }) + samples.push({ name: 'nested string list match', ls: { nested: ['banana', 'blueberry'] } }) + samples.push({ name: 'nested string list non-match', ls: { nested: ['tomato', 'cuccumber'] } }) + samples.push({ name: 'nested string map match', ms: { nested: { a: 'banana', b: 'blueberry' } } }) + samples.push({ name: 'nested string map non-match', ms: { nested: { a: 'tomato', b: 'cuccumber' } } }) + samples.push({ name: 'nested string mapkeys match', mks: { nested: { banana: 1, blueberry: 2 } } }) + samples.push({ name: 'nested string mapkeys non-match', mks: { nested: { tomato: 3, cuccumber: 4 } } }) + samples.push({ name: 'nested point match', g: { nested: GeoJSON.Point(103.913, 1.308) } }) + samples.push({ name: 'nested point non-match', g: { nested: GeoJSON.Point(-122.101, 37.421) } }) + samples.push({ name: 'nested point list match', lg: { nested: [GeoJSON.Point(103.913, 1.308), GeoJSON.Point(105.913, 3.308)] } }) + samples.push({ name: 'nested point list non-match', lg: { nested: [GeoJSON.Point(-122.101, 37.421), GeoJSON.Point(-120.101, 39.421)] } }) + samples.push({ name: 'nested point map match', mg: { nested: { a: GeoJSON.Point(103.913, 1.308), b: GeoJSON.Point(105.913, 3.308) } } }) + samples.push({ name: 'nested point map non-match', mg: { nested: { a: GeoJSON.Point(-122.101, 37.421), b: GeoJSON.Point(-120.101, 39.421) } } }) + samples.push({ name: 'nested region match', g: { nested: GeoJSON.Polygon([102.913, 0.308], [102.913, 2.308], [104.913, 2.308], [104.913, 0.308], [102.913, 0.308]) } }) + samples.push({ name: 'nested region non-match', g: { nested: GeoJSON.Polygon([-121.101, 36.421], [-121.101, 38.421], [-123.101, 38.421], [-123.101, 36.421], [-121.101, 36.421]) } }) + samples.push({ name: 'nested region list match', lg: { nested: [GeoJSON.Polygon([102.913, 0.308], [102.913, 2.308], [104.913, 2.308], [104.913, 0.308], [102.913, 0.308])] } }) + samples.push({ name: 'nested region list non-match', lg: { nested: [GeoJSON.Polygon([-121.101, 36.421], [-121.101, 38.421], [-123.101, 38.421], [-123.101, 36.421], [-121.101, 36.421])] } }) + samples.push({ name: 'nested region map match', mg: { nested: { a: GeoJSON.Polygon([102.913, 0.308], [102.913, 2.308], [104.913, 2.308], [104.913, 0.308], [102.913, 0.308]) } } }) + samples.push({ name: 'nested region map non-match', mg: { nested: [GeoJSON.Polygon([-121.101, 36.421], [-121.101, 38.421], [-123.101, 38.421], [-123.101, 36.421], [-121.101, 36.421])] } }) + samples.push({ name: 'nested aggregate', nested: { value: 10 } }) + samples.push({ name: 'nested aggregate', nested: { value: 20 } }) + samples.push({ name: 'nested aggregate', nested: { value: 30 } }) + samples.push({ name: 'nested aggregate', nested: { doubleNested: { value: 10 } } }) + samples.push({ name: 'nested aggregate', nested: { doubleNested: { value: 20 } } }) + samples.push({ name: 'nested aggregate', nested: { doubleNested: { value: 30 } } }) + + indexes.push(['qidxNameNested', 'name', STRING, MAPKEYS, new Context().addMapKey('nested')]) + indexes.push(['qidxIntListNested', 'li', NUMERIC, LIST, new Context().addMapKey('nested')]) + indexes.push(['qidxIntMapNested', 'mi', NUMERIC, MAPVALUES, new Context().addMapKey('nested')]) + indexes.push(['qidxStrListNested', 'ls', STRING, LIST, new Context().addMapKey('nested')]) + indexes.push(['qidxStrMapNested', 'ms', STRING, MAPVALUES, new Context().addMapKey('nested')]) + indexes.push(['qidxStrMapKeysNested', 'mks', STRING, MAPKEYS, new Context().addMapKey('nested')]) + indexes.push(['qidxGeoListNested', 'lg', GEO2DSPHERE, LIST, new Context().addMapKey('nested')]) + indexes.push(['qidxGeoMapNested', 'mg', GEO2DSPHERE, MAPVALUES, new Context().addMapKey('nested')]) + indexes.push(['qidxAggregateMapNested', 'nested', STRING, MAPKEYS]) + indexes.push(['qidxAggregateMapDoubleNested', 'nested', STRING, MAPKEYS, new Context().addMapKey('doubleNested')]) + } + const numberOfSamples = samples.length - console.log("SPOT 1") return Promise.all([ putgen.put(numberOfSamples, generators) - .then((records) => { keys = records.map((rec) => rec.key) - console.log("SPOT 2") }) + .then((records) => { keys = records.map((rec) => rec.key) }) .then(() => Promise.all(indexes.map(idx => helper.index.create(idx[0], testSet, idx[1], idx[2], idx[3], idx[4])))), helper.udf.register('udf.lua') @@ -267,7 +268,7 @@ describe('Queries', function () { stream.on('error', error => { throw error }) stream.on('data', record => results.push(record.bins)) stream.on('end', () => { - expect(results.length).to.be.above(60) + expect(results.length).to.be.above(samples.length) done() }) }) @@ -286,7 +287,7 @@ describe('Queries', function () { recordTotal += recordsReceived if (recordsReceived !== maxRecs) { expect(query.hasNextPage()).to.equal(false) - expect(recordTotal).to.be.above(60) + expect(recordTotal).to.be.above(samples.length) break } recordsReceived = 0 @@ -309,19 +310,22 @@ describe('Queries', function () { }) }) - it('should apply a stream UDF to the nested context', function (done) { - const args = { - filters: [filter.contains('name', 'value', MAPKEYS, new Context().addMapKey('nested'))] - } - const query = client.query(helper.namespace, testSet, args) - query.setUdf('udf', 'even') - const stream = query.foreach() - const results = [] - stream.on('error', error => { throw error }) - stream.on('data', record => results.push(record.bins)) - stream.on('end', () => { - expect(results.sort()).to.eql([]) - done() + describe('index with cdt context', function () { + helper.skipUnlessVersion('>= 6.1.0', this) + it('should apply a stream UDF to the nested context', function (done) { + const args = { + filters: [filter.contains('name', 'value', MAPKEYS, new Context().addMapKey('nested'))] + } + const query = client.query(helper.namespace, testSet, args) + query.setUdf('udf', 'even') + const stream = query.foreach() + const results = [] + stream.on('error', error => { throw error }) + stream.on('data', record => results.push(record.bins)) + stream.on('end', () => { + expect(results.sort()).to.eql([]) + done() + }) }) }) @@ -416,29 +420,31 @@ describe('Queries', function () { recordsReceived = 0 } }) - - it('Paginates correctly using query.results() on an index with a cdt context', async function () { - let recordTotal = 0 - let recordsReceived = 0 - let pageTotal = 0 - const lastPage = 1 - const maxRecs = 5 - const query = client.query(helper.namespace, testSet, { paginate: true, maxRecords: maxRecs, filters: [filter.contains('nested', 'value', MAPKEYS, new Context().addMapKey('doubleNested'))] }) - let results = [] - while (1) { - results = await query.results() - recordsReceived += results.length - results = [] - pageTotal += 1 - recordTotal += recordsReceived - if (recordsReceived !== maxRecs) { - expect(query.hasNextPage()).to.equal(false) - expect(pageTotal).to.equal(lastPage) - expect(recordTotal).to.equal(3) - break + describe('index with cdt context', function () { + helper.skipUnlessVersion('>= 6.1.0', this) + it('Paginates correctly using query.results() on an index with a cdt context', async function () { + let recordTotal = 0 + let recordsReceived = 0 + let pageTotal = 0 + const lastPage = 1 + const maxRecs = 5 + const query = client.query(helper.namespace, testSet, { paginate: true, maxRecords: maxRecs, filters: [filter.contains('nested', 'value', MAPKEYS, new Context().addMapKey('doubleNested'))] }) + let results = [] + while (1) { + results = await query.results() + recordsReceived += results.length + results = [] + pageTotal += 1 + recordTotal += recordsReceived + if (recordsReceived !== maxRecs) { + expect(query.hasNextPage()).to.equal(false) + expect(pageTotal).to.equal(lastPage) + expect(recordTotal).to.equal(3) + break + } + recordsReceived = 0 } - recordsReceived = 0 - } + }) }) it('Throw error when query.UDF is set and query.paginate is true', async function () { @@ -636,9 +642,12 @@ describe('Queries', function () { verifyQueryResults(args, 'int list match', done) }) - it('should match integers in a list within a range in a nested context', function (done) { - const args = { filters: [filter.range('li', 3, 7, LIST, new Context().addMapKey('nested'))] } - verifyQueryResults(args, 'nested int list match', done) + describe('index with cdt context', function () { + helper.skipUnlessVersion('>= 6.1.0', this) + it('should match integers in a list within a range in a nested context', function (done) { + const args = { filters: [filter.range('li', 3, 7, LIST, new Context().addMapKey('nested'))] } + verifyQueryResults(args, 'nested int list match', done) + }) }) it('should match integers in a map within a range', function (done) { @@ -646,9 +655,12 @@ describe('Queries', function () { verifyQueryResults(args, 'int map match', done) }) - it('should match integers in a map within a range in a nested context', function (done) { - const args = { filters: [filter.range('mi', 3, 7, MAPVALUES, new Context().addMapKey('nested'))] } - verifyQueryResults(args, 'nested int map match', done) + describe('index with cdt context', function () { + helper.skipUnlessVersion('>= 6.1.0', this) + it('should match integers in a map within a range in a nested context', function (done) { + const args = { filters: [filter.range('mi', 3, 7, MAPVALUES, new Context().addMapKey('nested'))] } + verifyQueryResults(args, 'nested int map match', done) + }) }) }) @@ -658,9 +670,12 @@ describe('Queries', function () { verifyQueryResults(args, 'int list match', done) }) - it('should match lists containing an integer in a nested context', function (done) { - const args = { filters: [filter.contains('li', 5, LIST, new Context().addMapKey('nested'))] } - verifyQueryResults(args, 'nested int list match', done) + describe('index with cdt context', function () { + helper.skipUnlessVersion('>= 6.1.0', this) + it('should match lists containing an integer in a nested context', function (done) { + const args = { filters: [filter.contains('li', 5, LIST, new Context().addMapKey('nested'))] } + verifyQueryResults(args, 'nested int list match', done) + }) }) it('should match maps containing an integer value', function (done) { @@ -668,9 +683,12 @@ describe('Queries', function () { verifyQueryResults(args, 'int map match', done) }) - it('should match maps containing an integer value in a nested context', function (done) { - const args = { filters: [filter.contains('mi', 5, MAPVALUES, new Context().addMapKey('nested'))] } - verifyQueryResults(args, 'nested int map match', done) + describe('index with cdt context', function () { + helper.skipUnlessVersion('>= 6.1.0', this) + it('should match maps containing an integer value in a nested context', function (done) { + const args = { filters: [filter.contains('mi', 5, MAPVALUES, new Context().addMapKey('nested'))] } + verifyQueryResults(args, 'nested int map match', done) + }) }) it('should match lists containing a string', function (done) { @@ -678,9 +696,12 @@ describe('Queries', function () { verifyQueryResults(args, 'string list match', done) }) - it('should match lists containing a string in a nested context', function (done) { - const args = { filters: [filter.contains('ls', 'banana', LIST, new Context().addMapKey('nested'))] } - verifyQueryResults(args, 'nested string list match', done) + describe('index with cdt context', function () { + helper.skipUnlessVersion('>= 6.1.0', this) + it('should match lists containing a string in a nested context', function (done) { + const args = { filters: [filter.contains('ls', 'banana', LIST, new Context().addMapKey('nested'))] } + verifyQueryResults(args, 'nested string list match', done) + }) }) it('should match maps containing a string value', function (done) { @@ -688,9 +709,12 @@ describe('Queries', function () { verifyQueryResults(args, 'string map match', done) }) - it('should match maps containing a string value in a nested context', function (done) { - const args = { filters: [filter.contains('ms', 'banana', MAPVALUES, new Context().addMapKey('nested'))] } - verifyQueryResults(args, 'nested string map match', done) + describe('index with cdt context', function () { + helper.skipUnlessVersion('>= 6.1.0', this) + it('should match maps containing a string value in a nested context', function (done) { + const args = { filters: [filter.contains('ms', 'banana', MAPVALUES, new Context().addMapKey('nested'))] } + verifyQueryResults(args, 'nested string map match', done) + }) }) it('should match maps containing a string key', function (done) { @@ -698,10 +722,14 @@ describe('Queries', function () { verifyQueryResults(args, 'string mapkeys match', done) }) - it('should match maps containing a string key in a nested context', function (done) { - const args = { filters: [filter.contains('mks', 'banana', MAPKEYS, new Context().addMapKey('nested'))] } - verifyQueryResults(args, 'nested string mapkeys match', done) + describe('index with cdt context', function () { + helper.skipUnlessVersion('>= 6.1.0', this) + it('should match maps containing a string key in a nested context', function (done) { + const args = { filters: [filter.contains('mks', 'banana', MAPKEYS, new Context().addMapKey('nested'))] } + verifyQueryResults(args, 'nested string mapkeys match', done) + }) }) + context('Uses blob Secondary indexes', function () { helper.skipUnlessVersion('>= 7.0.0', this) it('should match lists containing a blob', function (done) { @@ -753,10 +781,13 @@ describe('Queries', function () { verifyQueryResults(args, 'point list match', done) }) - it('should match locations in a list within a GeoJSON region in a nested context', function (done) { - const region = new GeoJSON({ type: 'Polygon', coordinates: [[[103, 1.3], [104, 1.3], [104, 1.4], [103, 1.4], [103, 1.3]]] }) - const args = { filters: [filter.geoWithinGeoJSONRegion('lg', region, LIST, new Context().addMapKey('nested'))] } - verifyQueryResults(args, 'nested point list match', done) + describe('index with cdt context', function () { + helper.skipUnlessVersion('>= 6.1.0', this) + it('should match locations in a list within a GeoJSON region in a nested context', function (done) { + const region = new GeoJSON({ type: 'Polygon', coordinates: [[[103, 1.3], [104, 1.3], [104, 1.4], [103, 1.4], [103, 1.3]]] }) + const args = { filters: [filter.geoWithinGeoJSONRegion('lg', region, LIST, new Context().addMapKey('nested'))] } + verifyQueryResults(args, 'nested point list match', done) + }) }) it('should match locations in a map within a GeoJSON region', function (done) { @@ -764,11 +795,13 @@ describe('Queries', function () { const args = { filters: [filter.geoWithinGeoJSONRegion('mg', region, MAPVALUES)] } verifyQueryResults(args, 'point map match', done) }) - - it('should match locations in a map within a GeoJSON region in a nested context', function (done) { - const region = new GeoJSON({ type: 'Polygon', coordinates: [[[103, 1.3], [104, 1.3], [104, 1.4], [103, 1.4], [103, 1.3]]] }) - const args = { filters: [filter.geoWithinGeoJSONRegion('mg', region, MAPVALUES, new Context().addMapKey('nested'))] } - verifyQueryResults(args, 'nested point map match', done) + describe('index with cdt context', function () { + helper.skipUnlessVersion('>= 6.1.0', this) + it('should match locations in a map within a GeoJSON region in a nested context', function (done) { + const region = new GeoJSON({ type: 'Polygon', coordinates: [[[103, 1.3], [104, 1.3], [104, 1.4], [103, 1.4], [103, 1.3]]] }) + const args = { filters: [filter.geoWithinGeoJSONRegion('mg', region, MAPVALUES, new Context().addMapKey('nested'))] } + verifyQueryResults(args, 'nested point map match', done) + }) }) it('accepts a plain object as GeoJSON', function (done) { @@ -789,9 +822,12 @@ describe('Queries', function () { verifyQueryResults(args, 'point list match', done) }) - it('should match locations in a list within a radius from another location in a nested context', function (done) { - const args = { filters: [filter.geoWithinRadius('lg', 103.9135, 1.3085, 15000, LIST, new Context().addMapKey('nested'))] } - verifyQueryResults(args, 'nested point list match', done) + describe('index with cdt context', function () { + helper.skipUnlessVersion('>= 6.1.0', this) + it('should match locations in a list within a radius from another location in a nested context', function (done) { + const args = { filters: [filter.geoWithinRadius('lg', 103.9135, 1.3085, 15000, LIST, new Context().addMapKey('nested'))] } + verifyQueryResults(args, 'nested point list match', done) + }) }) it('should match locations in a map within a radius from another location', function (done) { @@ -799,9 +835,12 @@ describe('Queries', function () { verifyQueryResults(args, 'point map match', done) }) - it('should match locations in a map within a radius from another location in a nested context', function (done) { - const args = { filters: [filter.geoWithinRadius('mg', 103.9135, 1.3085, 15000, MAPVALUES, new Context().addMapKey('nested'))] } - verifyQueryResults(args, 'nested point map match', done) + describe('index with cdt context', function () { + helper.skipUnlessVersion('>= 6.1.0', this) + it('should match locations in a map within a radius from another location in a nested context', function (done) { + const args = { filters: [filter.geoWithinRadius('mg', 103.9135, 1.3085, 15000, MAPVALUES, new Context().addMapKey('nested'))] } + verifyQueryResults(args, 'nested point map match', done) + }) }) }) @@ -818,10 +857,13 @@ describe('Queries', function () { verifyQueryResults(args, 'region list match', done) }) - it('should match regions in a list that contain a GeoJSON point in a nested context', function (done) { - const point = new GeoJSON({ type: 'Point', coordinates: [103.913, 1.308] }) - const args = { filters: [filter.geoContainsGeoJSONPoint('lg', point, LIST, new Context().addMapKey('nested'))] } - verifyQueryResults(args, 'nested region list match', done) + describe('index with cdt context', function () { + helper.skipUnlessVersion('>= 6.1.0', this) + it('should match regions in a list that contain a GeoJSON point in a nested context', function (done) { + const point = new GeoJSON({ type: 'Point', coordinates: [103.913, 1.308] }) + const args = { filters: [filter.geoContainsGeoJSONPoint('lg', point, LIST, new Context().addMapKey('nested'))] } + verifyQueryResults(args, 'nested region list match', done) + }) }) it('should match regions in a map that contain a GeoJSON point', function (done) { @@ -830,10 +872,13 @@ describe('Queries', function () { verifyQueryResults(args, 'region map match', done) }) - it('should match regions in a map that contain a GeoJSON point in a nested context', function (done) { - const point = new GeoJSON({ type: 'Point', coordinates: [103.913, 1.308] }) - const args = { filters: [filter.geoContainsGeoJSONPoint('mg', point, MAPVALUES, new Context().addMapKey('nested'))] } - verifyQueryResults(args, 'nested region map match', done) + describe('index with cdt context', function () { + helper.skipUnlessVersion('>= 6.1.0', this) + it('should match regions in a map that contain a GeoJSON point in a nested context', function (done) { + const point = new GeoJSON({ type: 'Point', coordinates: [103.913, 1.308] }) + const args = { filters: [filter.geoContainsGeoJSONPoint('mg', point, MAPVALUES, new Context().addMapKey('nested'))] } + verifyQueryResults(args, 'nested region map match', done) + }) }) it('accepts a plain object as GeoJSON', function (done) { @@ -854,9 +899,12 @@ describe('Queries', function () { verifyQueryResults(args, 'region list match', done) }) - it('should match regions in a list that contain a lng/lat coordinate pair in a nested context', function (done) { - const args = { filters: [filter.geoContainsPoint('lg', 103.913, 1.308, LIST, new Context().addMapKey('nested'))] } - verifyQueryResults(args, 'nested region list match', done) + describe('index with cdt context', function () { + helper.skipUnlessVersion('>= 6.1.0', this) + it('should match regions in a list that contain a lng/lat coordinate pair in a nested context', function (done) { + const args = { filters: [filter.geoContainsPoint('lg', 103.913, 1.308, LIST, new Context().addMapKey('nested'))] } + verifyQueryResults(args, 'nested region list match', done) + }) }) it('should match regions in a map that contain a lng/lat coordinate pair', function (done) { @@ -864,9 +912,12 @@ describe('Queries', function () { verifyQueryResults(args, 'region map match', done) }) - it('should match regions in a map that contain a lng/lat coordinate pair in a nested context', function (done) { - const args = { filters: [filter.geoContainsPoint('mg', 103.913, 1.308, MAPVALUES, new Context().addMapKey('nested'))] } - verifyQueryResults(args, 'nested region map match', done) + describe('index with cdt context', function () { + helper.skipUnlessVersion('>= 6.1.0', this) + it('should match regions in a map that contain a lng/lat coordinate pair in a nested context', function (done) { + const args = { filters: [filter.geoContainsPoint('mg', 103.913, 1.308, MAPVALUES, new Context().addMapKey('nested'))] } + verifyQueryResults(args, 'nested region map match', done) + }) }) }) }) @@ -915,28 +966,33 @@ describe('Queries', function () { done() }) }) - - it('should apply a user defined function and aggregate the results from a map', function (done) { - const args = { - filters: [filter.contains('nested', 'value', MAPKEYS)] - } - const query = client.query(helper.namespace, testSet, args) - query.apply('udf', 'count', function (error, result) { - if (error) throw error - expect(result).to.equal(3) - done() + describe('index with cdt context', function () { + helper.skipUnlessVersion('>= 6.1.0', this) + it('should apply a user defined function and aggregate the results from a map', function (done) { + const args = { + filters: [filter.contains('nested', 'value', MAPKEYS)] + } + const query = client.query(helper.namespace, testSet, args) + query.apply('udf', 'count', function (error, result) { + if (error) throw error + expect(result).to.equal(3) + done() + }) }) }) - it('should apply a user defined function and aggregate the results from a nested map', function (done) { - const args = { - filters: [filter.contains('nested', 'value', MAPKEYS, new Context().addMapKey('doubleNested'))] - } - const query = client.query(helper.namespace, testSet, args) - query.apply('udf', 'count', function (error, result) { - if (error) throw error - expect(result).to.equal(3) - done() + describe('index with cdt context', function () { + helper.skipUnlessVersion('>= 6.1.0', this) + it('should apply a user defined function and aggregate the results from a nested map', function (done) { + const args = { + filters: [filter.contains('nested', 'value', MAPKEYS, new Context().addMapKey('doubleNested'))] + } + const query = client.query(helper.namespace, testSet, args) + query.apply('udf', 'count', function (error, result) { + if (error) throw error + expect(result).to.equal(3) + done() + }) }) }) @@ -987,15 +1043,18 @@ describe('Queries', function () { expect(job).to.be.instanceof(Job) }) }) - it('returns a Promise that resolves to a Job with a filter containing a CDT context', function () { - const args = { - filters: [filter.contains('nested', 'value', MAPKEYS, new Context().addMapKey('doubleNested'))] - } - const query = client.query(helper.namespace, testSet, args) - return query.background('udf', 'noop') - .then(job => { - expect(job).to.be.instanceof(Job) - }) + describe('index with cdt context', function () { + helper.skipUnlessVersion('>= 6.1.0', this) + it('returns a Promise that resolves to a Job with a filter containing a CDT context', function () { + const args = { + filters: [filter.contains('nested', 'value', MAPKEYS, new Context().addMapKey('doubleNested'))] + } + const query = client.query(helper.namespace, testSet, args) + return query.background('udf', 'noop') + .then(job => { + expect(job).to.be.instanceof(Job) + }) + }) }) }) From 806c36d8c7b51eb96f1963e8fd017f04b94b1031 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Thu, 8 Feb 2024 10:32:53 -0700 Subject: [PATCH 54/98] Fixed syntax errors --- .github/workflows/build-bindings.yml | 34 ++++++++++++++++++++++++++++ .github/workflows/tests.yml | 13 +++-------- 2 files changed, 37 insertions(+), 10 deletions(-) diff --git a/.github/workflows/build-bindings.yml b/.github/workflows/build-bindings.yml index cc0fc503..a3c22a30 100644 --- a/.github/workflows/build-bindings.yml +++ b/.github/workflows/build-bindings.yml @@ -529,3 +529,37 @@ jobs: mkdir -p testDir lib/binding/openssl@3/ lib/binding/openssl@1/ cd testDir bun install .. + + test-typescript-install: + runs-on: ubuntu-latest + needs: [manylinux, macOS-x86] + steps: + - uses: actions/checkout@v2 + with: + submodules: recursive + + - uses: ./.github/workflows/combine-bindings/ + + - uses: actions/setup-node@v4 + with: + node-version: ${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} + architecture: 'x64' + + - name: Modify the package.json + run: | + mkdir my-aerospike-project + cd my-aerospike-project + npm init -y + npm install typescript ts-node --save-dev + npm install aerospike + cp ../examples/typescript.ts + npx tsc index.ts + node index.js + + - name: Run tests + run: | + mkdir -p testDir lib/binding/openssl@3/ lib/binding/openssl@1/ + cd testDir + bun install .. + + diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 3dad9484..f1028256 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -397,7 +397,7 @@ jobs: node-version: ${{ matrix.node-version }} architecture: 'x64' - - uses: actions/download-artifact@v4 + - uses: actions/download-artifact@v4 with: name: binding-${{ matrix.node-version }} @@ -405,10 +405,9 @@ jobs: run: mkdir lib/binding - name: Install client - #fix the convention here run: | cp -r node-v115-linux-x64 lib/binding/node-v115-linux-x64 - + - name: Modify the package.json run: | mkdir my-aerospike-project @@ -418,10 +417,4 @@ jobs: npm install .. cp ../examples/typescript.ts npx tsc index.ts - node index.js - - - name: Run tests - run: | - mkdir -p testDir lib/binding/openssl@3/ lib/binding/openssl@1/ - cd testDir - bun install .. \ No newline at end of file + node index.js \ No newline at end of file From 731e367f20f902e09587946bc7f0566e92b80afe Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Thu, 8 Feb 2024 10:36:48 -0700 Subject: [PATCH 55/98] Removed repeated test --- .github/workflows/build-bindings.yml | 26 -------------------------- 1 file changed, 26 deletions(-) diff --git a/.github/workflows/build-bindings.yml b/.github/workflows/build-bindings.yml index a3c22a30..43dec409 100644 --- a/.github/workflows/build-bindings.yml +++ b/.github/workflows/build-bindings.yml @@ -504,32 +504,6 @@ jobs: cd testDir bun install .. - test-bun-install: - runs-on: ubuntu-latest - needs: [manylinux, macOS-x86] - steps: - - uses: actions/checkout@v2 - with: - submodules: recursive - - - uses: ./.github/workflows/combine-bindings/ - - - uses: actions/setup-node@v4 - with: - node-version: ${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} - architecture: 'x64' - - - name: Modify the package.json - run: | - npm install -g json - json -I -f package.json -e "this.scripts.install=\"npm-run-all removeExtraBinaries build\"" - - - name: Run tests - run: | - mkdir -p testDir lib/binding/openssl@3/ lib/binding/openssl@1/ - cd testDir - bun install .. - test-typescript-install: runs-on: ubuntu-latest needs: [manylinux, macOS-x86] From 596fbf60a200440b8ca949c3aa9f7deef231c09e Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Wed, 14 Feb 2024 08:37:27 -0700 Subject: [PATCH 56/98] Update action.yml --- .github/workflows/combine-bindings/action.yml | 25 ++++++++++--------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/.github/workflows/combine-bindings/action.yml b/.github/workflows/combine-bindings/action.yml index be45e012..1bae0840 100644 --- a/.github/workflows/combine-bindings/action.yml +++ b/.github/workflows/combine-bindings/action.yml @@ -36,36 +36,37 @@ runs: with: name: v108-manylinux_x86_64.build - - uses: actions/download-artifact@v4 - with: - name: v108-manylinux_aarch64.build +# - uses: actions/download-artifact@v4 +# with: +# name: v108-manylinux_aarch64.build - uses: actions/download-artifact@v4 with: name: v115-manylinux_x86_64.build - - uses: actions/download-artifact@v4 - with: - name: v115-manylinux_aarch64.build +# - uses: actions/download-artifact@v4 +# with: +# name: v115-manylinux_aarch64.build - uses: actions/download-artifact@v4 with: name: v120-manylinux_x86_64.build - - uses: actions/download-artifact@v4 - with: - name: v120-manylinux_aarch64.build +# - uses: actions/download-artifact@v4 +# with: +# name: v120-manylinux_aarch64.build - name: Install client shell: bash run: | mkdir -p lib/binding/node-v108-darwin-arm64 lib/binding/node-v115-darwin-arm64 lib/binding/node-v120-darwin-arm64 + mkdir -p lib/binding/node-v108-linux-arm64 lib/binding/node-v115-linux-arm64 lib/binding/node-v120-linux-arm64 cp -r node-v108-linux-x64 lib/binding/node-v108-linux-x64 cp -r node-v115-linux-x64 lib/binding/node-v115-linux-x64 cp -r node-v120-linux-x64 lib/binding/node-v120-linux-x64 - cp -r node-v108-linux-arm64 lib/binding/node-v108-linux-arm64 - cp -r node-v115-linux-arm64 lib/binding/node-v115-linux-arm64 - cp -r node-v120-linux-arm64 lib/binding/node-v120-linux-arm64 +# cp -r node-v108-linux-arm64 lib/binding/node-v108-linux-arm64 +# cp -r node-v115-linux-arm64 lib/binding/node-v115-linux-arm64 +# cp -r node-v120-linux-arm64 lib/binding/node-v120-linux-arm64 cp -r node-v108-darwin-x64 lib/binding/node-v108-darwin-x64 cp -r node-v115-darwin-x64 lib/binding/node-v115-darwin-x64 cp -r node-v120-darwin-x64 lib/binding/node-v120-darwin-x64 From 47ce0ca934224d6a287a7922c43ab8d6e3838c6c Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Wed, 14 Feb 2024 08:38:42 -0700 Subject: [PATCH 57/98] Update build-bindings.yml --- .github/workflows/build-bindings.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-bindings.yml b/.github/workflows/build-bindings.yml index 43dec409..51c767ca 100644 --- a/.github/workflows/build-bindings.yml +++ b/.github/workflows/build-bindings.yml @@ -98,7 +98,7 @@ jobs: ] platform: [ "x86_64", - "aarch64" + #"aarch64" ] steps: From d60e4a0a533f190f152437a4b12c7341fea12292 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Wed, 14 Feb 2024 08:55:38 -0700 Subject: [PATCH 58/98] pipeline update --- .github/workflows/build-bindings.yml | 2 +- .github/workflows/combine-bindings/action.yml | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build-bindings.yml b/.github/workflows/build-bindings.yml index 51c767ca..1c8be340 100644 --- a/.github/workflows/build-bindings.yml +++ b/.github/workflows/build-bindings.yml @@ -526,7 +526,7 @@ jobs: npm init -y npm install typescript ts-node --save-dev npm install aerospike - cp ../examples/typescript.ts + cp ../examples/typescript.ts index.ts npx tsc index.ts node index.js diff --git a/.github/workflows/combine-bindings/action.yml b/.github/workflows/combine-bindings/action.yml index 1bae0840..dd90815e 100644 --- a/.github/workflows/combine-bindings/action.yml +++ b/.github/workflows/combine-bindings/action.yml @@ -64,12 +64,13 @@ runs: cp -r node-v108-linux-x64 lib/binding/node-v108-linux-x64 cp -r node-v115-linux-x64 lib/binding/node-v115-linux-x64 cp -r node-v120-linux-x64 lib/binding/node-v120-linux-x64 -# cp -r node-v108-linux-arm64 lib/binding/node-v108-linux-arm64 -# cp -r node-v115-linux-arm64 lib/binding/node-v115-linux-arm64 -# cp -r node-v120-linux-arm64 lib/binding/node-v120-linux-arm64 cp -r node-v108-darwin-x64 lib/binding/node-v108-darwin-x64 cp -r node-v115-darwin-x64 lib/binding/node-v115-darwin-x64 cp -r node-v120-darwin-x64 lib/binding/node-v120-darwin-x64 + +# cp -r node-v108-linux-arm64 lib/binding/node-v108-linux-arm64 +# cp -r node-v115-linux-arm64 lib/binding/node-v115-linux-arm64 +# cp -r node-v120-linux-arm64 lib/binding/node-v120-linux-arm64 # cp -r node-v108-darwin-arm64 lib/binding/node-v108-darwin-arm64 # cp -r node-v115-darwin-arm64 lib/binding/node-v115-darwin-arm64 # cp -r node-v120-darwin-arm64 lib/binding/node-v120-darwin-arm64 From 509660f25c096819aded0262ac9c1705bd0715fd Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Wed, 14 Feb 2024 09:07:35 -0700 Subject: [PATCH 59/98] pipeline update --- .github/workflows/build-bindings.yml | 17 +++++++++++------ .github/workflows/tests.yml | 2 +- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/.github/workflows/build-bindings.yml b/.github/workflows/build-bindings.yml index 1c8be340..6215d19c 100644 --- a/.github/workflows/build-bindings.yml +++ b/.github/workflows/build-bindings.yml @@ -208,9 +208,9 @@ jobs: fail-fast: false matrix: nodejs: [ - "v108", - "v115", - "v120" + ["v108", 18], + ["v115", 20], + ["v120", 21] ] runs-on: macos-latest steps: @@ -218,13 +218,18 @@ jobs: uses: myrotvorets/set-commit-status-action@v2.0.0 with: sha: ${{ github.sha }} - context: "Build bindings (${{ matrix.nodejs }}-macosx_x86_64)" + context: "Build bindings (${{ matrix.nodejs[0] }}-macosx_x86_64)" - uses: actions/checkout@v4 with: submodules: recursive ref: ${{ inputs.commit_sha }} + - uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.nodejs[1] }} + architecture: 'x64' + - name: Install Docker Engine if: ${{ inputs.run_tests }} run: brew install colima @@ -267,7 +272,7 @@ jobs: - name: Save macOS binding uses: actions/upload-artifact@v4 with: - name: ${{ matrix.nodejs }}-macosx_x86_64.build + name: ${{ matrix.nodejs[0] }}-macosx_x86_64.build path: ./lib/binding/*/ - name: Set final commit status @@ -276,7 +281,7 @@ jobs: with: status: ${{ job.status }} sha: ${{ github.sha }} - context: "Build bindings (${{ matrix.nodejs }}-macosx_x86_64)" + context: "Build bindings (${{ matrix.nodejs[0] }}-macosx_x86_64)" # macOS-m1: # runs-on: [ diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index f1028256..fd565b59 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -415,6 +415,6 @@ jobs: npm init -y npm install typescript ts-node --save-dev npm install .. - cp ../examples/typescript.ts + cp ../examples/typescript.ts index.ts npx tsc index.ts node index.js \ No newline at end of file From 49eb089c2560b861061de349f637429f859d7372 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Wed, 14 Feb 2024 09:13:45 -0700 Subject: [PATCH 60/98] Test execute by default --- .github/workflows/build-bindings.yml | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/.github/workflows/build-bindings.yml b/.github/workflows/build-bindings.yml index 6215d19c..5d0c632f 100644 --- a/.github/workflows/build-bindings.yml +++ b/.github/workflows/build-bindings.yml @@ -129,7 +129,6 @@ jobs: platforms: all - uses: ./.github/actions/run-ee-server - if: ${{ inputs.run_tests }} with: use-server-rc: ${{ inputs.use-server-rc }} server-tag: ${{ inputs.server-tag }} @@ -137,7 +136,6 @@ jobs: docker-hub-password: ${{ secrets.DOCKER_HUB_BOT_PW }} - name: Set config.conf to use Docker IP address of Aerospike server - if: ${{ inputs.run_tests }} # config.conf should be copied into the cibuildwheel Docker container run: | export SERVER_DOCKER_IP=$(docker container inspect -f '{{ .NetworkSettings.IPAddress }}' aerospike) @@ -148,12 +146,11 @@ jobs: working-directory: test - name: Enable tests - if: ${{ inputs.run_tests }} run: echo "TEST_COMMAND=npm test -- --h 127.0.0.1 --port 3000" >> $GITHUB_ENV - - name: Disable tests (only run basic import test) - if: ${{ !inputs.run_tests }} - run: echo "TEST_COMMAND=node -e 'aerospike = require(\".\/lib\/aerospike\")'" >> $GITHUB_ENV +# - name: Disable tests (only run basic import test) +# if: ${{ !inputs.run_tests }} +# run: echo "TEST_COMMAND=node -e 'aerospike = require(\".\/lib\/aerospike\")'" >> $GITHUB_ENV - uses: uraimo/run-on-arch-action@v2 name: Build client arm @@ -243,7 +240,6 @@ jobs: run: colima start - uses: ./.github/actions/run-ee-server - if: ${{ inputs.run_tests }} with: use-server-rc: ${{ inputs.use-server-rc }} server-tag: ${{ inputs.server-tag }} @@ -251,12 +247,11 @@ jobs: docker-hub-password: ${{ secrets.DOCKER_HUB_BOT_PW }} - name: Enable tests - if: ${{ inputs.run_tests }} run: echo "TEST_COMMAND=npm test -- --h 127.0.0.1 --port 3000" >> $GITHUB_ENV - - name: Disable tests (only run basic import test) - if: ${{ !inputs.run_tests }} - run: echo "TEST_COMMAND=node -e 'aerospike = require(\".\/lib\/aerospike\")'" >> $GITHUB_ENV +# - name: Disable tests (only run basic import test) +# if: ${{ !inputs.run_tests }} +# run: echo "TEST_COMMAND=node -e 'aerospike = require(\".\/lib\/aerospike\")'" >> $GITHUB_ENV - name: Build client run: | From 6a4d77510dd72fd519653410fb98ca91997e84de Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Wed, 14 Feb 2024 09:26:36 -0700 Subject: [PATCH 61/98] Fixing typescript pipeline Added typescript fixes --- .github/workflows/build-bindings.yml | 6 ++- .github/workflows/combine-bindings/action.yml | 5 +- typings/index.d.ts | 46 +++++++++---------- 3 files changed, 31 insertions(+), 26 deletions(-) diff --git a/.github/workflows/build-bindings.yml b/.github/workflows/build-bindings.yml index 5d0c632f..7af028bf 100644 --- a/.github/workflows/build-bindings.yml +++ b/.github/workflows/build-bindings.yml @@ -450,7 +450,8 @@ jobs: run: | mkdir -p testDir lib/binding/openssl@3/ lib/binding/openssl@1/ cd testDir - yarn install .. + npm install --global yarn + yarn add .. test-pnpm-install: runs-on: ubuntu-latest @@ -476,6 +477,8 @@ jobs: run: | mkdir -p testDir lib/binding/openssl@3/ lib/binding/openssl@1/ cd testDir + apt install wget + wget -qO- https://get.pnpm.io/install.sh | sh - pnpm install .. test-bun-install: @@ -502,6 +505,7 @@ jobs: run: | mkdir -p testDir lib/binding/openssl@3/ lib/binding/openssl@1/ cd testDir + npm install -g bun bun install .. test-typescript-install: diff --git a/.github/workflows/combine-bindings/action.yml b/.github/workflows/combine-bindings/action.yml index dd90815e..1e79e903 100644 --- a/.github/workflows/combine-bindings/action.yml +++ b/.github/workflows/combine-bindings/action.yml @@ -60,14 +60,15 @@ runs: shell: bash run: | mkdir -p lib/binding/node-v108-darwin-arm64 lib/binding/node-v115-darwin-arm64 lib/binding/node-v120-darwin-arm64 - mkdir -p lib/binding/node-v108-linux-arm64 lib/binding/node-v115-linux-arm64 lib/binding/node-v120-linux-arm64 + mkdir -p lib/binding/openssl@3/node-v108-linux-arm64 lib/binding/openssl@3/node-v115-linux-arm64 lib/binding/openssl@3/node-v120-linux-arm64 + mkdir -p lib/binding/openssl@1/node-v108-linux-arm64 lib/binding/openssl@1/node-v115-linux-arm64 lib/binding/openssl@1/node-v120-linux-arm64 cp -r node-v108-linux-x64 lib/binding/node-v108-linux-x64 cp -r node-v115-linux-x64 lib/binding/node-v115-linux-x64 cp -r node-v120-linux-x64 lib/binding/node-v120-linux-x64 cp -r node-v108-darwin-x64 lib/binding/node-v108-darwin-x64 cp -r node-v115-darwin-x64 lib/binding/node-v115-darwin-x64 cp -r node-v120-darwin-x64 lib/binding/node-v120-darwin-x64 - + # cp -r node-v108-linux-arm64 lib/binding/node-v108-linux-arm64 # cp -r node-v115-linux-arm64 lib/binding/node-v115-linux-arm64 # cp -r node-v120-linux-arm64 lib/binding/node-v120-linux-arm64 diff --git a/typings/index.d.ts b/typings/index.d.ts index 27f82a34..968387c6 100644 --- a/typings/index.d.ts +++ b/typings/index.d.ts @@ -284,11 +284,6 @@ declare module 'commands/batch_command' { }; export = _exports; -} -declare module 'commands/command' { - const _exports: Class; - export = _exports; - } declare module 'commands/connect_command' { function _exports(asCommand: any): { @@ -564,7 +559,7 @@ declare module 'commands/query_background_command' { }; }; export = _exports; - import Job = require(".job"); + import Job = require("job"); } declare module 'commands/read_record_command' { @@ -972,20 +967,18 @@ declare module 'exp' { describe: (bin: any) => any; mayContain: (bin: any, list: any) => any; }; - export const expReadFlags { - const DEFAULT: 0; - const EVAL_NO_FAIL: 16; - } - export type expReadFlags = number; - export const expWriteFlags { - const DEFAULT: 0; - const CREATE_ONLY: 1; - const UPDATE_ONLY: 2; - const ALLOW_DELETE: 4; - const POLICY_NO_FAIL: 8; - const EVAL_NO_FAIL: 16; - } - export type expWriteFlags = number; + export const expReadFlags: { + DEFAULT: 0; + EVAL_NO_FAIL: 16; + } + export const expWriteFlags: { + DEFAULT: 0; + CREATE_ONLY: 1; + UPDATE_ONLY: 2; + ALLOW_DELETE: 4; + POLICY_NO_FAIL: 8; + EVAL_NO_FAIL: 16; + } function _val(value: any): { [x: number]: any; op: any; @@ -1104,8 +1097,8 @@ declare module 'exp_maps' { } declare module 'exp_operations' { - export function read(bin: string, exp: AerospikeExp, flags: expReadFlags): Operation; - export function write(bin: string, exp: AerospikeExp, flags: expWriteFlags): Operation; + export function read(bin: string, exp: AerospikeExp, flags: number): Operation; + export function write(bin: string, exp: AerospikeExp, flags: number): Operation; export class ExpOperation { protected constructor(); op: any; @@ -1851,6 +1844,9 @@ type QueryaggregationResultCallback = () => any; type AerospikeExp = object; type ApplyPolicy = object; type BatchPolicy = object; +type BatchApplyPolicy = object; +type BatchRemovePolicy = object; +type BatchWritePolicy = object; type InfoPolicy = object; type OperatePolicy = object; type ReadPolicy = object; @@ -1860,10 +1856,14 @@ type QueryPolicy = object; type WritePolicy = object; type BitwisePolicy = object; type MapPolicy = object; +type ListPolicy = object; type CommandQueuePolicy = object; type Policies = { apply: ApplyPolicy; batch: BatchPolicy; + batchApply: BatchApplyPolicy; + batchRemove: BatchRemovePolicy; + batchWrite: BatchWritePolicy; info: InfoPolicy; operate: OperatePolicy; read: ReadPolicy; @@ -1922,4 +1922,4 @@ declare module 'utils' { }; export function print(err: any, result: any): void; -} \ No newline at end of file +} From 66447bf32a2e3e017fd1db63d39921fdbd745492 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Wed, 14 Feb 2024 09:59:26 -0700 Subject: [PATCH 62/98] Updated typescript testing and ee-server action location --- .github/workflows/build-bindings.yml | 14 ++++++++------ examples/typescript.ts | 11 ++++------- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/.github/workflows/build-bindings.yml b/.github/workflows/build-bindings.yml index 7af028bf..90e0c01e 100644 --- a/.github/workflows/build-bindings.yml +++ b/.github/workflows/build-bindings.yml @@ -128,13 +128,14 @@ jobs: with: platforms: all - - uses: ./.github/actions/run-ee-server + - name: Run ee server + uses: ./aerospike-client-python/.github/actions/run-ee-server/ with: - use-server-rc: ${{ inputs.use-server-rc }} - server-tag: ${{ inputs.server-tag }} + use-server-rc: ${{ contains(github.event.pull_request.labels.*.name, 'new-server-features') }} docker-hub-username: ${{ secrets.DOCKER_HUB_BOT_USERNAME }} docker-hub-password: ${{ secrets.DOCKER_HUB_BOT_PW }} + - name: Set config.conf to use Docker IP address of Aerospike server # config.conf should be copied into the cibuildwheel Docker container run: | @@ -239,13 +240,14 @@ jobs: if: ${{ inputs.run_tests }} run: colima start - - uses: ./.github/actions/run-ee-server + - name: Run ee server + uses: ./aerospike-client-python/.github/actions/run-ee-server/ with: - use-server-rc: ${{ inputs.use-server-rc }} - server-tag: ${{ inputs.server-tag }} + use-server-rc: ${{ contains(github.event.pull_request.labels.*.name, 'new-server-features') }} docker-hub-username: ${{ secrets.DOCKER_HUB_BOT_USERNAME }} docker-hub-password: ${{ secrets.DOCKER_HUB_BOT_PW }} + - name: Enable tests run: echo "TEST_COMMAND=npm test -- --h 127.0.0.1 --port 3000" >> $GITHUB_ENV diff --git a/examples/typescript.ts b/examples/typescript.ts index 659dc635..51e30f12 100644 --- a/examples/typescript.ts +++ b/examples/typescript.ts @@ -1,12 +1,11 @@ import * as Aerospike from 'aerospike'; (async function () { - let client: Aerospike.Client | undefined; - + let client = null; try { - client = await Aerospike.connect(); + let client = await Aerospike.connect(); const key = new Aerospike.Key('test', 'test', 'abcd'); - const bins: Record = { + const bins = { name: 'Norma', age: 31 }; @@ -19,8 +18,6 @@ import * as Aerospike from 'aerospike'; console.error('Error:', error); process.exit(1); } finally { - if (client) { - await client.close(); - } + if (client) client.close(); } })(); From f4cac6f56299ebd2d4ed3652b2d1f238867d376c Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Wed, 14 Feb 2024 10:02:49 -0700 Subject: [PATCH 63/98] Fixed ee-server action use --- .github/workflows/build-bindings.yml | 8 +++++++- .github/workflows/tests.yml | 5 ----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build-bindings.yml b/.github/workflows/build-bindings.yml index 90e0c01e..580fa8ec 100644 --- a/.github/workflows/build-bindings.yml +++ b/.github/workflows/build-bindings.yml @@ -128,6 +128,9 @@ jobs: with: platforms: all + - name: Download aerospike-client-python repository + run: git clone https://github.com/aerospike/aerospike-client-python.git + - name: Run ee server uses: ./aerospike-client-python/.github/actions/run-ee-server/ with: @@ -238,7 +241,10 @@ jobs: - name: Start Docker Engine if: ${{ inputs.run_tests }} - run: colima start + run: colima star + + - name: Download aerospike-client-python repository + run: git clone https://github.com/aerospike/aerospike-client-python.git - name: Run ee server uses: ./aerospike-client-python/.github/actions/run-ee-server/ diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index fd565b59..449bd724 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -299,11 +299,6 @@ jobs: - name: Download aerospike-client-python repository run: git clone https://github.com/aerospike/aerospike-client-python.git - - name: phil - run: | - ls aerospike-client-python/.github - pwd - - name: Run ee server uses: ./aerospike-client-python/.github/actions/run-ee-server/ with: From 265d1c7c57d166598e503c7160e870e4b7169ceb Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Wed, 14 Feb 2024 10:08:54 -0700 Subject: [PATCH 64/98] Update build-bindings.yml --- .github/workflows/build-bindings.yml | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/build-bindings.yml b/.github/workflows/build-bindings.yml index 580fa8ec..0b5b5d17 100644 --- a/.github/workflows/build-bindings.yml +++ b/.github/workflows/build-bindings.yml @@ -130,7 +130,7 @@ jobs: - name: Download aerospike-client-python repository run: git clone https://github.com/aerospike/aerospike-client-python.git - + - name: Run ee server uses: ./aerospike-client-python/.github/actions/run-ee-server/ with: @@ -139,15 +139,15 @@ jobs: docker-hub-password: ${{ secrets.DOCKER_HUB_BOT_PW }} - - name: Set config.conf to use Docker IP address of Aerospike server - # config.conf should be copied into the cibuildwheel Docker container - run: | - export SERVER_DOCKER_IP=$(docker container inspect -f '{{ .NetworkSettings.IPAddress }}' aerospike) - # Install crudini - pip install crudini -c ../.github/workflows/requirements.txt - sed -i "s/127.0.0.1:3000//" config.conf - crudini --set config.conf enterprise-edition hosts ${SERVER_DOCKER_IP}:3000 - working-directory: test +# - name: Set config.conf to use Docker IP address of Aerospike server +# # config.conf should be copied into the cibuildwheel Docker container +# run: | +# export SERVER_DOCKER_IP=$(docker container inspect -f '{{ .NetworkSettings.IPAddress }}' aerospike) +# # Install crudini +# pip install crudini -c ../.github/workflows/requirements.txt +# sed -i "s/127.0.0.1:3000//" config.conf +# crudini --set config.conf enterprise-edition hosts ${SERVER_DOCKER_IP}:3000 +# working-directory: test - name: Enable tests run: echo "TEST_COMMAND=npm test -- --h 127.0.0.1 --port 3000" >> $GITHUB_ENV From 1d428eda388ad43d06954b454b15245dda2be78d Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Wed, 14 Feb 2024 10:17:17 -0700 Subject: [PATCH 65/98] update --- .github/workflows/build-bindings.yml | 1 - .github/workflows/tests.yml | 14 ++++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-bindings.yml b/.github/workflows/build-bindings.yml index 0b5b5d17..3bed7e83 100644 --- a/.github/workflows/build-bindings.yml +++ b/.github/workflows/build-bindings.yml @@ -253,7 +253,6 @@ jobs: docker-hub-username: ${{ secrets.DOCKER_HUB_BOT_USERNAME }} docker-hub-password: ${{ secrets.DOCKER_HUB_BOT_PW }} - - name: Enable tests run: echo "TEST_COMMAND=npm test -- --h 127.0.0.1 --port 3000" >> $GITHUB_ENV diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 449bd724..2b2ab7ef 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -403,6 +403,20 @@ jobs: run: | cp -r node-v115-linux-x64 lib/binding/node-v115-linux-x64 + - if: ${{ contains(github.event.pull_request.labels.*.name, 'new-server-features') }} + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKER_HUB_BOT_USERNAME }} + password: ${{ secrets.DOCKER_HUB_BOT_PW }} + + - name: Run Aerospike server release candidate with latest tag + if: ${{ contains(github.event.pull_request.labels.*.name, 'new-server-features') }} + run: docker run -d --name aerospike -p 3000-3002:3000-3002 aerospike/aerospike-server-rc:latest + + - name: Run Aerospike server + if: ${{ !contains(github.event.pull_request.labels.*.name, 'new-server-features') }} + run: docker run -d --name aerospike -p 3000-3002:3000-3002 aerospike/aerospike-server + - name: Modify the package.json run: | mkdir my-aerospike-project From b7c6f2a5b7761e5f531e16e12276de510b640e28 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Wed, 14 Feb 2024 10:19:41 -0700 Subject: [PATCH 66/98] Update build-bindings.yml --- .github/workflows/build-bindings.yml | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/.github/workflows/build-bindings.yml b/.github/workflows/build-bindings.yml index 3bed7e83..cbed94c3 100644 --- a/.github/workflows/build-bindings.yml +++ b/.github/workflows/build-bindings.yml @@ -128,15 +128,14 @@ jobs: with: platforms: all - - name: Download aerospike-client-python repository - run: git clone https://github.com/aerospike/aerospike-client-python.git + - name: Run Aerospike server release candidate with latest tag + if: ${{ contains(github.event.pull_request.labels.*.name, 'new-server-features') }} + run: docker run -d --name aerospike -p 3000-3002:3000-3002 aerospike/aerospike-server-rc:latest + + - name: Run Aerospike server + if: ${{ !contains(github.event.pull_request.labels.*.name, 'new-server-features') }} + run: docker run -d --name aerospike -p 3000-3002:3000-3002 aerospike/aerospike-server - - name: Run ee server - uses: ./aerospike-client-python/.github/actions/run-ee-server/ - with: - use-server-rc: ${{ contains(github.event.pull_request.labels.*.name, 'new-server-features') }} - docker-hub-username: ${{ secrets.DOCKER_HUB_BOT_USERNAME }} - docker-hub-password: ${{ secrets.DOCKER_HUB_BOT_PW }} # - name: Set config.conf to use Docker IP address of Aerospike server From 077f7ade0e6604079d845d12532e78d6c58b7d50 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Wed, 14 Feb 2024 10:22:44 -0700 Subject: [PATCH 67/98] Update build-bindings.yml --- .github/workflows/build-bindings.yml | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/.github/workflows/build-bindings.yml b/.github/workflows/build-bindings.yml index cbed94c3..e84a5ffa 100644 --- a/.github/workflows/build-bindings.yml +++ b/.github/workflows/build-bindings.yml @@ -136,8 +136,6 @@ jobs: if: ${{ !contains(github.event.pull_request.labels.*.name, 'new-server-features') }} run: docker run -d --name aerospike -p 3000-3002:3000-3002 aerospike/aerospike-server - - # - name: Set config.conf to use Docker IP address of Aerospike server # # config.conf should be copied into the cibuildwheel Docker container # run: | @@ -242,15 +240,13 @@ jobs: if: ${{ inputs.run_tests }} run: colima star - - name: Download aerospike-client-python repository - run: git clone https://github.com/aerospike/aerospike-client-python.git + - name: Run Aerospike server release candidate with latest tag + if: ${{ contains(github.event.pull_request.labels.*.name, 'new-server-features') }} + run: docker run -d --name aerospike -p 3000-3002:3000-3002 aerospike/aerospike-server-rc:latest - - name: Run ee server - uses: ./aerospike-client-python/.github/actions/run-ee-server/ - with: - use-server-rc: ${{ contains(github.event.pull_request.labels.*.name, 'new-server-features') }} - docker-hub-username: ${{ secrets.DOCKER_HUB_BOT_USERNAME }} - docker-hub-password: ${{ secrets.DOCKER_HUB_BOT_PW }} + - name: Run Aerospike server + if: ${{ !contains(github.event.pull_request.labels.*.name, 'new-server-features') }} + run: docker run -d --name aerospike -p 3000-3002:3000-3002 aerospike/aerospike-server - name: Enable tests run: echo "TEST_COMMAND=npm test -- --h 127.0.0.1 --port 3000" >> $GITHUB_ENV From d895cb607dd7d77b0b37deb468cd5b886f279500 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Wed, 14 Feb 2024 10:25:15 -0700 Subject: [PATCH 68/98] Update build-bindings.yml --- .github/workflows/build-bindings.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/.github/workflows/build-bindings.yml b/.github/workflows/build-bindings.yml index e84a5ffa..9fdafa04 100644 --- a/.github/workflows/build-bindings.yml +++ b/.github/workflows/build-bindings.yml @@ -128,6 +128,13 @@ jobs: with: platforms: all + - if: ${{ contains(github.event.pull_request.labels.*.name, 'new-server-features') }} + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKER_HUB_BOT_USERNAME }} + password: ${{ secrets.DOCKER_HUB_BOT_PW }} + + - name: Run Aerospike server release candidate with latest tag if: ${{ contains(github.event.pull_request.labels.*.name, 'new-server-features') }} run: docker run -d --name aerospike -p 3000-3002:3000-3002 aerospike/aerospike-server-rc:latest @@ -240,6 +247,13 @@ jobs: if: ${{ inputs.run_tests }} run: colima star + - if: ${{ contains(github.event.pull_request.labels.*.name, 'new-server-features') }} + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKER_HUB_BOT_USERNAME }} + password: ${{ secrets.DOCKER_HUB_BOT_PW }} + + - name: Run Aerospike server release candidate with latest tag if: ${{ contains(github.event.pull_request.labels.*.name, 'new-server-features') }} run: docker run -d --name aerospike -p 3000-3002:3000-3002 aerospike/aerospike-server-rc:latest From cee595f46550db12fc4a8b1ba331e94f9a35a166 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Wed, 14 Feb 2024 10:31:28 -0700 Subject: [PATCH 69/98] Update build-bindings.yml --- .github/workflows/build-bindings.yml | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build-bindings.yml b/.github/workflows/build-bindings.yml index 9fdafa04..76d6b3b3 100644 --- a/.github/workflows/build-bindings.yml +++ b/.github/workflows/build-bindings.yml @@ -128,8 +128,7 @@ jobs: with: platforms: all - - if: ${{ contains(github.event.pull_request.labels.*.name, 'new-server-features') }} - uses: docker/login-action@v3 + - uses: docker/login-action@v3 with: username: ${{ secrets.DOCKER_HUB_BOT_USERNAME }} password: ${{ secrets.DOCKER_HUB_BOT_PW }} @@ -247,13 +246,11 @@ jobs: if: ${{ inputs.run_tests }} run: colima star - - if: ${{ contains(github.event.pull_request.labels.*.name, 'new-server-features') }} - uses: docker/login-action@v3 + - uses: docker/login-action@v3 with: username: ${{ secrets.DOCKER_HUB_BOT_USERNAME }} password: ${{ secrets.DOCKER_HUB_BOT_PW }} - - name: Run Aerospike server release candidate with latest tag if: ${{ contains(github.event.pull_request.labels.*.name, 'new-server-features') }} run: docker run -d --name aerospike -p 3000-3002:3000-3002 aerospike/aerospike-server-rc:latest From 7a219b61d2836c60d1537acc92884e7bd73f3b35 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Wed, 14 Feb 2024 10:40:31 -0700 Subject: [PATCH 70/98] Update build-bindings.yml --- .github/workflows/build-bindings.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-bindings.yml b/.github/workflows/build-bindings.yml index 76d6b3b3..d008d79e 100644 --- a/.github/workflows/build-bindings.yml +++ b/.github/workflows/build-bindings.yml @@ -128,7 +128,8 @@ jobs: with: platforms: all - - uses: docker/login-action@v3 + - if: ${{ contains(github.event.pull_request.labels.*.name, 'new-server-features') }} + uses: docker/login-action@v3 with: username: ${{ secrets.DOCKER_HUB_BOT_USERNAME }} password: ${{ secrets.DOCKER_HUB_BOT_PW }} @@ -246,7 +247,8 @@ jobs: if: ${{ inputs.run_tests }} run: colima star - - uses: docker/login-action@v3 + - if: ${{ contains(github.event.pull_request.labels.*.name, 'new-server-features') }} + uses: docker/login-action@v3 with: username: ${{ secrets.DOCKER_HUB_BOT_USERNAME }} password: ${{ secrets.DOCKER_HUB_BOT_PW }} From cde47f3efa075773daf5477cf6d53fdfe3ff94e7 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Wed, 14 Feb 2024 11:04:04 -0700 Subject: [PATCH 71/98] typo fix --- .github/workflows/build-bindings.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-bindings.yml b/.github/workflows/build-bindings.yml index d008d79e..2d356d34 100644 --- a/.github/workflows/build-bindings.yml +++ b/.github/workflows/build-bindings.yml @@ -245,7 +245,7 @@ jobs: - name: Start Docker Engine if: ${{ inputs.run_tests }} - run: colima star + run: colima start - if: ${{ contains(github.event.pull_request.labels.*.name, 'new-server-features') }} uses: docker/login-action@v3 From 4c4a10db7ef51888aac7e1bacad0fffd745b6c5e Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Wed, 14 Feb 2024 11:06:47 -0700 Subject: [PATCH 72/98] Update build-bindings.yml --- .github/workflows/build-bindings.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/build-bindings.yml b/.github/workflows/build-bindings.yml index 2d356d34..ad762537 100644 --- a/.github/workflows/build-bindings.yml +++ b/.github/workflows/build-bindings.yml @@ -236,15 +236,12 @@ jobs: architecture: 'x64' - name: Install Docker Engine - if: ${{ inputs.run_tests }} run: brew install colima - name: Install Docker client - if: ${{ inputs.run_tests }} run: brew install docker - name: Start Docker Engine - if: ${{ inputs.run_tests }} run: colima start - if: ${{ contains(github.event.pull_request.labels.*.name, 'new-server-features') }} From c5b2670412d6a0b4cec99a37bb0642da50169d0e Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Wed, 14 Feb 2024 11:37:33 -0700 Subject: [PATCH 73/98] Update build-bindings.yml --- .github/workflows/build-bindings.yml | 44 ++++++++++++++-------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/.github/workflows/build-bindings.yml b/.github/workflows/build-bindings.yml index ad762537..d1d57c6a 100644 --- a/.github/workflows/build-bindings.yml +++ b/.github/workflows/build-bindings.yml @@ -235,31 +235,31 @@ jobs: node-version: ${{ matrix.nodejs[1] }} architecture: 'x64' - - name: Install Docker Engine - run: brew install colima +# - name: Install Docker Engine +# run: brew install colima - - name: Install Docker client - run: brew install docker +# - name: Install Docker client +# run: brew install docker - - name: Start Docker Engine - run: colima start +# - name: Start Docker Engine +# run: colima start - - if: ${{ contains(github.event.pull_request.labels.*.name, 'new-server-features') }} - uses: docker/login-action@v3 - with: - username: ${{ secrets.DOCKER_HUB_BOT_USERNAME }} - password: ${{ secrets.DOCKER_HUB_BOT_PW }} +# - if: ${{ contains(github.event.pull_request.labels.*.name, 'new-server-features') }} +# uses: docker/login-action@v3 +# with: +# username: ${{ secrets.DOCKER_HUB_BOT_USERNAME }} +# password: ${{ secrets.DOCKER_HUB_BOT_PW }} - - name: Run Aerospike server release candidate with latest tag - if: ${{ contains(github.event.pull_request.labels.*.name, 'new-server-features') }} - run: docker run -d --name aerospike -p 3000-3002:3000-3002 aerospike/aerospike-server-rc:latest +# - name: Run Aerospike server release candidate with latest tag +# if: ${{ contains(github.event.pull_request.labels.*.name, 'new-server-features') }} +# run: docker run -d --name aerospike -p 3000-3002:3000-3002 aerospike/aerospike-server-rc:latest - - name: Run Aerospike server - if: ${{ !contains(github.event.pull_request.labels.*.name, 'new-server-features') }} - run: docker run -d --name aerospike -p 3000-3002:3000-3002 aerospike/aerospike-server +# - name: Run Aerospike server +# if: ${{ !contains(github.event.pull_request.labels.*.name, 'new-server-features') }} +# run: docker run -d --name aerospike -p 3000-3002:3000-3002 aerospike/aerospike-server - - name: Enable tests - run: echo "TEST_COMMAND=npm test -- --h 127.0.0.1 --port 3000" >> $GITHUB_ENV +# - name: Enable tests +# run: echo "TEST_COMMAND=npm test -- --h 127.0.0.1 --port 3000" >> $GITHUB_ENV # - name: Disable tests (only run basic import test) # if: ${{ !inputs.run_tests }} @@ -272,9 +272,9 @@ jobs: env: CFLAGS: '-Werror' - - name: Test client - run: | - ${{ env.TEST_COMMAND }} +# - name: Test client +# run: | +# ${{ env.TEST_COMMAND }} - name: Save macOS binding uses: actions/upload-artifact@v4 From ac541476bc8edaaafce896aebc015a454c475756 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Wed, 14 Feb 2024 11:40:36 -0700 Subject: [PATCH 74/98] Update build-bindings.yml --- .github/workflows/build-bindings.yml | 44 ++++++++++++++-------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/.github/workflows/build-bindings.yml b/.github/workflows/build-bindings.yml index d1d57c6a..e6645540 100644 --- a/.github/workflows/build-bindings.yml +++ b/.github/workflows/build-bindings.yml @@ -235,31 +235,31 @@ jobs: node-version: ${{ matrix.nodejs[1] }} architecture: 'x64' -# - name: Install Docker Engine -# run: brew install colima + - name: Install Docker Engine + run: brew install colima -# - name: Install Docker client -# run: brew install docker + - name: Install Docker client + run: brew install docker -# - name: Start Docker Engine -# run: colima start + - name: Start Docker Engine + run: colima start -# - if: ${{ contains(github.event.pull_request.labels.*.name, 'new-server-features') }} -# uses: docker/login-action@v3 -# with: -# username: ${{ secrets.DOCKER_HUB_BOT_USERNAME }} -# password: ${{ secrets.DOCKER_HUB_BOT_PW }} + - if: ${{ contains(github.event.pull_request.labels.*.name, 'new-server-features') }} + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKER_HUB_BOT_USERNAME }} + password: ${{ secrets.DOCKER_HUB_BOT_PW }} -# - name: Run Aerospike server release candidate with latest tag -# if: ${{ contains(github.event.pull_request.labels.*.name, 'new-server-features') }} -# run: docker run -d --name aerospike -p 3000-3002:3000-3002 aerospike/aerospike-server-rc:latest + - name: Run Aerospike server release candidate with latest tag + if: ${{ contains(github.event.pull_request.labels.*.name, 'new-server-features') }} + run: docker run -d --name aerospike -p 3000-3002:3000-3002 aerospike/aerospike-server-rc:latest -# - name: Run Aerospike server -# if: ${{ !contains(github.event.pull_request.labels.*.name, 'new-server-features') }} -# run: docker run -d --name aerospike -p 3000-3002:3000-3002 aerospike/aerospike-server + - name: Run Aerospike server + if: ${{ !contains(github.event.pull_request.labels.*.name, 'new-server-features') }} + run: docker run -d --name aerospike -p 3000-3002:3000-3002 aerospike/aerospike-server -# - name: Enable tests -# run: echo "TEST_COMMAND=npm test -- --h 127.0.0.1 --port 3000" >> $GITHUB_ENV + - name: Enable tests + run: echo "TEST_COMMAND=npm test -- --h 127.0.0.1 --port 3000 --t 30000" >> $GITHUB_ENV # - name: Disable tests (only run basic import test) # if: ${{ !inputs.run_tests }} @@ -272,9 +272,9 @@ jobs: env: CFLAGS: '-Werror' -# - name: Test client -# run: | -# ${{ env.TEST_COMMAND }} + - name: Test client + run: | + ${{ env.TEST_COMMAND }} - name: Save macOS binding uses: actions/upload-artifact@v4 From c3af51104858b0323bf32374dd51f86362c0cd72 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Wed, 14 Feb 2024 11:42:42 -0700 Subject: [PATCH 75/98] fixed scope for client variable --- examples/typescript.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/typescript.ts b/examples/typescript.ts index 51e30f12..e1474155 100644 --- a/examples/typescript.ts +++ b/examples/typescript.ts @@ -3,7 +3,7 @@ import * as Aerospike from 'aerospike'; (async function () { let client = null; try { - let client = await Aerospike.connect(); + client = await Aerospike.connect(); const key = new Aerospike.Key('test', 'test', 'abcd'); const bins = { name: 'Norma', From 074c5dd0f18710dcb933182c1f2fc089e6c9328d Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Wed, 14 Feb 2024 11:56:20 -0700 Subject: [PATCH 76/98] Update build-bindings.yml --- .github/workflows/build-bindings.yml | 56 ++++++++++++++-------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/.github/workflows/build-bindings.yml b/.github/workflows/build-bindings.yml index e6645540..fc1a7479 100644 --- a/.github/workflows/build-bindings.yml +++ b/.github/workflows/build-bindings.yml @@ -235,31 +235,31 @@ jobs: node-version: ${{ matrix.nodejs[1] }} architecture: 'x64' - - name: Install Docker Engine - run: brew install colima - - - name: Install Docker client - run: brew install docker - - - name: Start Docker Engine - run: colima start - - - if: ${{ contains(github.event.pull_request.labels.*.name, 'new-server-features') }} - uses: docker/login-action@v3 - with: - username: ${{ secrets.DOCKER_HUB_BOT_USERNAME }} - password: ${{ secrets.DOCKER_HUB_BOT_PW }} - - - name: Run Aerospike server release candidate with latest tag - if: ${{ contains(github.event.pull_request.labels.*.name, 'new-server-features') }} - run: docker run -d --name aerospike -p 3000-3002:3000-3002 aerospike/aerospike-server-rc:latest - - - name: Run Aerospike server - if: ${{ !contains(github.event.pull_request.labels.*.name, 'new-server-features') }} - run: docker run -d --name aerospike -p 3000-3002:3000-3002 aerospike/aerospike-server - - - name: Enable tests - run: echo "TEST_COMMAND=npm test -- --h 127.0.0.1 --port 3000 --t 30000" >> $GITHUB_ENV +# - name: Install Docker Engine +# run: brew install colima +# +# - name: Install Docker client +# run: brew install docker +# +# - name: Start Docker Engine +# run: colima start +# +# - if: ${{ contains(github.event.pull_request.labels.*.name, 'new-server-features') }} +# uses: docker/login-action@v3 +# with: +# username: ${{ secrets.DOCKER_HUB_BOT_USERNAME }} +# password: ${{ secrets.DOCKER_HUB_BOT_PW }} +# +# - name: Run Aerospike server release candidate with latest tag +# if: ${{ contains(github.event.pull_request.labels.*.name, 'new-server-features') }} +# run: docker run -d --name aerospike -p 3000-3002:3000-3002 aerospike/aerospike-server-rc:latest +# +# - name: Run Aerospike server +# if: ${{ !contains(github.event.pull_request.labels.*.name, 'new-server-features') }} +# run: docker run -d --name aerospike -p 3000-3002:3000-3002 aerospike/aerospike-server +# +# - name: Enable tests +# run: echo "TEST_COMMAND=npm test -- --h 127.0.0.1 --port 3000 --t 30000" >> $GITHUB_ENV # - name: Disable tests (only run basic import test) # if: ${{ !inputs.run_tests }} @@ -272,9 +272,9 @@ jobs: env: CFLAGS: '-Werror' - - name: Test client - run: | - ${{ env.TEST_COMMAND }} +# - name: Test client +# run: | +# ${{ env.TEST_COMMAND }} - name: Save macOS binding uses: actions/upload-artifact@v4 From 6041d5afea640d22c1868e9cfee353ff73a8a465 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Wed, 14 Feb 2024 11:57:21 -0700 Subject: [PATCH 77/98] Added the ttl property to batchWritePolicy CLIENT-2774 CLIENT-2793 Added batchParentWrite policy to client config --- lib/policies/batch_write_policy.js | 8 +++++ lib/policy.js | 1 + src/include/enums.h | 1 + src/main/config.cc | 20 +++++++++++ src/main/enums/ttl.cc | 1 + src/main/policy.cc | 5 +++ src/main/util/conversions_batch.cc | 1 + test/batch_write.js | 58 +++++++++++++++++++++++++++++- 8 files changed, 94 insertions(+), 1 deletion(-) diff --git a/lib/policies/batch_write_policy.js b/lib/policies/batch_write_policy.js index 7bd43f6e..58c29b36 100644 --- a/lib/policies/batch_write_policy.js +++ b/lib/policies/batch_write_policy.js @@ -36,6 +36,14 @@ class BatchWritePolicy { * */ this.filterExpression = props.filterExpression + + /** + * The time-to-live (expiration) of the record in seconds. + * + * @type number + */ + this.ttl = props.ttl + /** * Specifies the behavior for the key. * diff --git a/lib/policy.js b/lib/policy.js index 6fb733b4..67b1711e 100644 --- a/lib/policy.js +++ b/lib/policy.js @@ -443,6 +443,7 @@ function policyClass (type) { case 'batchRead': return BatchReadPolicy case 'batchRemove': return BatchRemovePolicy case 'batchWrite': return BatchWritePolicy + case 'batchParentWrite': return BatchPolicy case 'batchApply': return BatchApplyPolicy case 'commandQueue': return CommandQueuePolicy case 'hll': return HLLPolicy diff --git a/src/include/enums.h b/src/include/enums.h index 6aff4cdf..2a5ac0d6 100644 --- a/src/include/enums.h +++ b/src/include/enums.h @@ -21,6 +21,7 @@ #define TTL_NAMESPACE_DEFAULT 0 #define TTL_NEVER_EXPIRE -1 #define TTL_DONT_UPDATE -2 +#define TTL_CLIENT_DEFAULT -3 v8::Local auth_mode_enum_values(); v8::Local bitwise_enum_values(); diff --git a/src/main/config.cc b/src/main/config.cc index 44da4f40..749274e9 100644 --- a/src/main/config.cc +++ b/src/main/config.cc @@ -257,6 +257,26 @@ int config_from_jsobject(as_config *config, Local configObj, } } + policy_val = Nan::Get(policies_obj, Nan::New("batchWrite").ToLocalChecked()) + .ToLocalChecked(); + if (policy_val->IsObject()) { + if ((rc = batchwrite_policy_from_jsobject(&policies->batch_write, + policy_val.As(), + log)) != AS_NODE_PARAM_OK) { + goto Cleanup; + } + } + + policy_val = Nan::Get(policies_obj, Nan::New("batchParentWrite").ToLocalChecked()) + .ToLocalChecked(); + if (policy_val->IsObject()) { + if ((rc = batchpolicy_from_jsobject(&policies->batch_parent_write, + policy_val.As(), + log)) != AS_NODE_PARAM_OK) { + goto Cleanup; + } + } + policy_val = Nan::Get(policies_obj, Nan::New("info").ToLocalChecked()) .ToLocalChecked(); if (policy_val->IsObject()) { diff --git a/src/main/enums/ttl.cc b/src/main/enums/ttl.cc index fd5a09c6..846e569b 100644 --- a/src/main/enums/ttl.cc +++ b/src/main/enums/ttl.cc @@ -31,5 +31,6 @@ Local ttl_enum_values() set(obj, "NAMESPACE_DEFAULT", TTL_NAMESPACE_DEFAULT); set(obj, "NEVER_EXPIRE", TTL_NEVER_EXPIRE); set(obj, "DONT_UPDATE", TTL_DONT_UPDATE); + set(obj, "CLIENT_DEFAULT", TTL_CLIENT_DEFAULT); return scope.Escape(obj); } diff --git a/src/main/policy.cc b/src/main/policy.cc index eb9a8be6..3a695f11 100644 --- a/src/main/policy.cc +++ b/src/main/policy.cc @@ -436,6 +436,11 @@ int batchwrite_policy_from_jsobject(as_policy_batch_write *policy, AS_NODE_PARAM_OK) { return rc; } + if ((rc = get_optional_uint32_property((uint32_t *)&policy->ttl, + NULL, obj, "ttl", log)) != + AS_NODE_PARAM_OK) { + return rc; + } if ((rc = get_optional_uint32_property((uint32_t *)&policy->gen, NULL, obj, "gen", log)) != AS_NODE_PARAM_OK) { return rc; diff --git a/src/main/util/conversions_batch.cc b/src/main/util/conversions_batch.cc index 5d96f348..bcdb2e51 100644 --- a/src/main/util/conversions_batch.cc +++ b/src/main/util/conversions_batch.cc @@ -204,6 +204,7 @@ int batch_write_record_from_jsobject(as_batch_records *batch_records, Local ops = maybeOps.As(); as_v8_debug(log, "Adding operations to batch write record"); record->ops = as_operations_new(ops->Length()); + record->ops->ttl = AS_RECORD_CLIENT_DEFAULT_TTL; if (operations_from_jsarray(record->ops, ops, (LogInfo *)log) != AS_NODE_PARAM_OK) { as_v8_error( diff --git a/test/batch_write.js b/test/batch_write.js index 477001bf..5545e445 100644 --- a/test/batch_write.js +++ b/test/batch_write.js @@ -32,6 +32,7 @@ const metagen = helper.metagen const recgen = helper.recgen const putgen = helper.putgen const valgen = helper.valgen +const options = require('./util/options') const Key = Aerospike.Key @@ -39,7 +40,7 @@ describe('client.batchWrite()', function () { const client = helper.client before(function () { - const nrecords = 17 + const nrecords = 20 const generators = { keygen: keygen.string(helper.namespace, helper.set, { prefix: 'test/batch_write/', random: false }), recgen: recgen.record({ @@ -509,4 +510,59 @@ describe('client.batchWrite()', function () { }) }) }) + + context('with BatchParentPolicy', function () { + helper.skipUnlessVersion('>= 6.0.0', this) + + it('returns list and map bins as byte buffers', async function () { + const batch = [{ + type: batchType.BATCH_READ, + key: new Key(helper.namespace, helper.set, 'test/batch_write/18'), + readAllBins: true + }] + + const config = { + hosts: options.host + ':' + options.port, + policies: { + batchParentWrite: new Aerospike.BatchPolicy({ socketTimeout: 0, totalTimeout: 0, deserialize: false }) + } + } + + const dummyClient = await Aerospike.connect(config) + const results = await dummyClient.batchWrite(batch) + const bins = results[0].record.bins + expect(bins.i).to.be.a('number') + expect(bins.s).to.be.a('string') + expect(bins.l).to.be.instanceof(Buffer) + expect(bins.m).to.be.instanceof(Buffer) + await dummyClient.close() + }) + }) + + context('with BatchWritePolicy ttl', function () { + helper.skipUnlessVersion('>= 6.0.0', this) + + it('writes value with correct ttl', async function () { + const batch = [{ + type: batchType.BATCH_WRITE, + key: new Key(helper.namespace, helper.set, 'test/batch_write/19'), + ops: [ + op.write('example', 35), + op.write('blob', [4, 14, 28]) + ], + policy: new Aerospike.BatchWritePolicy({ + exists: Aerospike.policy.exists.REPLACE, + ttl: 1367 + }) + }] + await client.batchWrite(batch) + return client.get(new Key(helper.namespace, helper.set, 'test/batch_write/19')) + .then(results => { + const bins = results.bins + expect(bins.example).to.be.a('number') + expect(bins.blob).to.be.a('array') + expect(results.ttl).to.equal(1367) + }) + }) + }) }) From f71fc616639304a7a9f2302e8ee62f3ff7613870 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Wed, 14 Feb 2024 11:58:11 -0700 Subject: [PATCH 78/98] Added persistent list indexes CLIENT-2770 CLIENT-2773 Added additional status to status.js --- lib/lists.js | 55 ++++++++++++++++++++++++++++++++ lib/status.js | 31 ++++++++++++++++++ src/main/list_operations.cc | 26 ++++++++++++++- src/main/policy.cc | 5 +++ test/lists.js | 63 +++++++++++++++++++++++++++++++++++++ 5 files changed, 179 insertions(+), 1 deletion(-) diff --git a/lib/lists.js b/lib/lists.js index 35b02019..4a9688d7 100644 --- a/lib/lists.js +++ b/lib/lists.js @@ -1079,6 +1079,61 @@ exports.clear = function (bin) { return new ListOperation(opcodes.LIST_CLEAR, bin) } +/** + * @summary Creates map create operation. + * + * + * @param {string} bin - bin name. + * @param {number} order - list order. + * @parm {boolean} pad - If true, the context is allowed to be beyond list boundaries. In that case, nil + * list entries will be inserted to satisfy the context position. + * @param {boolean} persistIndex - If true, persist list index. A list index improves lookup performance, + * but requires more storage. A list index can be created for a top-level ordered list only. Nested and + * unordered list indexes are not supported. + * @param {number} ctx - optional path to nested list. If not defined, the top-level list is used. + * + * @returns {Object} Operation that can be passed to the {@link Client#operate} command. + * + * @example + * + * const Aerospike = require('aerospike') + * const lists = Aerospike.lists + * const key = new Aerospike.Key('test', 'demo', 'mapKey') + * + * // INSERT HOSTNAME AND PORT NUMBER OF AEROSPIKE SERVER NODE HERE! + * var config = { + * hosts: '192.168.33.10:3000', + * // Timeouts disabled, latency dependent on server location. Configure as needed. + * policies: { + * operate : new Aerospike.OperatePolicy({socketTimeout : 0, totalTimeout : 0}) + * } + * } + * + * Aerospike.connect(config).then(async client => { + * let ops = [ + * lists.create('list', lists.order.ORDERED, false, true) + * ] + * let result = await client.operate(key, ops) + * console.log(result.bins) // => { list: null } + * let record = await client.get(key) + * console.log(record.bins) // => { list: [] } + * + * await client.remove(key) + * client.close() + * }) + */ +exports.create = function (bin, order, pad = false, persistIndex = false, ctx) { + const op = new ListOperation(opcodes.LIST_CREATE, bin) + op.order = order + op.pad = pad + op.persistIndex = persistIndex + if (ctx === undefined) { + return op + } + + return op.withContext(ctx) +} + /** * @summary Sets the list element at the specified index to a new value. * @description This operation returns no result. diff --git a/lib/status.js b/lib/status.js index b0485370..d003cc3e 100644 --- a/lib/status.js +++ b/lib/status.js @@ -24,6 +24,37 @@ const as = require('bindings')('aerospike.node') * @description Database operation error codes. */ +/** + * One or more keys failed in a batch. + * @const {number} + */ +exports.BATCH_FAILED = exports.AEROSPIKE_BATCH_FAILED = as.status.AEROSPIKE_BATCH_FAILED + +/** + * No response received from server. + * @const {number} + */ +exports.NO_RESPONSE = exports.AEROSPIKE_NO_RESPONSE = as.status.AEROSPIKE_NO_RESPONSE + +/** + * Max errors limit reached. + * @const {number} + */ +exports.MAX_ERROR_RATE = exports.AEROSPIKE_MAX_ERROR_RATE = as.status.AEROSPIKE_MAX_ERROR_RATE + +/** + * Abort split batch retry and use normal node retry instead. + * Used internally and should not be returned to user. + * @const {number} + */ +exports.USE_NORMAL_RETRY = exports.AEROSPIKE_USE_NORMAL_RETRY = as.status.AEROSPIKE_USE_NORMAL_RETRY + +/** + * Max retries limit reached. + * @const {number} + */ +exports.ERR_MAX_RETRIES_EXCEEDED = exports.AEROSPIKE_ERR_MAX_RETRIES_EXCEEDED = as.status.AEROSPIKE_ERR_MAX_RETRIES_EXCEEDED + /** * Async command delay queue is full. * @const {number} diff --git a/src/main/list_operations.cc b/src/main/list_operations.cc index 21604bc1..2240fdd1 100644 --- a/src/main/list_operations.cc +++ b/src/main/list_operations.cc @@ -1032,6 +1032,29 @@ bool add_list_increment_op(as_operations *ops, const char *bin, return true; } +bool add_list_create_op(as_operations *ops, const char *bin, + as_cdt_ctx *context, Local op, LogInfo *log) +{ + as_list_order order; + if (get_uint32_property((uint32_t*)&order, op, "order", log) != AS_NODE_PARAM_OK) { + return false; + } + + bool pad; + if (get_bool_property(&pad, op, "pad", log) != AS_NODE_PARAM_OK) { + return false; + } + + bool persist_index; + if (get_bool_property(&persist_index, op, "persistIndex", log) != AS_NODE_PARAM_OK) { + return false; + } + + as_v8_debug(log, "order=%i, pad=%s, persist_index=%s", order, pad ? "true" : "false", persist_index ? "true" : "false"); + as_operations_list_create_all(ops, bin, context, order, pad, persist_index); + return true; +} + bool add_list_size_op(as_operations *ops, const char *bin, as_cdt_ctx *context, Local obj, LogInfo *log) { @@ -1084,7 +1107,8 @@ const ops_table_entry ops_table[] = { {"LIST_GET_BY_RANK", add_list_get_by_rank_op}, {"LIST_GET_BY_RANK_RANGE", add_list_get_by_rank_range_op}, {"LIST_INCREMENT", add_list_increment_op}, - {"LIST_SIZE", add_list_size_op}}; + {"LIST_SIZE", add_list_size_op}, + {"LIST_CREATE", add_list_create_op}}; int add_list_op(as_operations *ops, uint32_t opcode, Local op, LogInfo *log) diff --git a/src/main/policy.cc b/src/main/policy.cc index 3a695f11..a4ba8bd4 100644 --- a/src/main/policy.cc +++ b/src/main/policy.cc @@ -450,6 +450,11 @@ int batchwrite_policy_from_jsobject(as_policy_batch_write *policy, AS_NODE_PARAM_OK) { return rc; } + if ((rc = get_optional_uint32_property((uint32_t *)&policy->ttl, NULL, obj, + "ttl", log)) != + AS_NODE_PARAM_OK) { + return rc; + } if ((rc = get_optional_bool_property(&policy->durable_delete, NULL, obj, "durableDelete", log)) != AS_NODE_PARAM_OK) { diff --git a/test/lists.js b/test/lists.js index 961a825f..a9ae6b77 100644 --- a/test/lists.js +++ b/test/lists.js @@ -841,6 +841,69 @@ describe('client.operate() - CDT List operations', function () { }) }) + describe('lists.create', function () { + it('creates a new list', function () { + return initState() + .then(createRecord({ list: [1, 2, 3, 4, 5] })) + .then(operate(lists.create('emptyList', lists.order.ORDERED))) + .then(assertRecordEql({ list: [1, 2, 3, 4, 5], emptyList: [] })) + .then(cleanup) + }) + + it('creates a new list with persist index true', function () { + return initState() + .then(createRecord({ list: [1, 2, 3, 4, 5] })) + .then(operate(lists.create('emptyList', lists.order.ORDERED, false, true))) + .then(assertRecordEql({ list: [1, 2, 3, 4, 5], emptyList: [] })) + .then(cleanup) + }) + + + it('creates a new list with persist index true and pad true', function () { + return initState() + .then(createRecord({ list: [1, 2, 3, 4, 5] })) + .then(operate(lists.create('emptyList', lists.order.ORDERED, true, true))) + .then(assertRecordEql({ list: [1, 2, 3, 4, 5], emptyList: [] })) + .then(cleanup) + }) + + it('creates a new list with pad true', function () { + return initState() + .then(createRecord({ list: [1, 2, 3, 4, 5] })) + .then(operate(lists.create('emptyList', lists.order.ORDERED, true, false))) + .then(assertRecordEql({ list: [1, 2, 3, 4, 5], emptyList: [] })) + .then(cleanup) + }) + + context('with nested list context', function () { + helper.skipUnlessVersion('>= 4.6.0', this) + + it('creates a new list within a map', function () { + return initState() + .then(createRecord({ map: { c: 1, b: 2, a: 3 } })) + .then(operate(lists.create('map', lists.order.ORDERED).withContext(ctx => ctx.addMapKeyCreate('nested')))) + .then(assertRecordEql({ map: { c: 1, b: 2, a: 3, nested: []} })) + .then(cleanup) + }) + + it('creates a new list within a list', function () { + return initState() + .then(createRecord({ list: [1, 2, 3, 4, 5] })) + .then(operate(lists.create('list', lists.order.UNORDERED, true, false).withContext(ctx => ctx.addListIndex(10)))) + .then(assertRecordEql({ list: [1, 2, 3, 4, 5, null, null, null, null, null, []] })) + .then(cleanup) + }) + + it('creates a new list within a list', function () { + return initState() + .then(createRecord({ list: [1, 2, 3, 4, 5] })) + .then(operate(lists.create('list', lists.order.UNORDERED, true, true).withContext(ctx => ctx.addListIndex(10)))) + .then(assertRecordEql({ list: [1, 2, 3, 4, 5, null, null, null, null, null, []] })) + .then(cleanup) + }) + }) + }) + describe('lists.set', function () { it('sets the item at the specified index', function () { return initState() From 10e840621808f2a85565d6c07d8c8383d09aa509 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Wed, 14 Feb 2024 12:24:58 -0700 Subject: [PATCH 79/98] updated pipeline --- .github/workflows/build-bindings.yml | 24 +++++++++---------- .github/workflows/combine-bindings/action.yml | 7 +++--- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/.github/workflows/build-bindings.yml b/.github/workflows/build-bindings.yml index fc1a7479..edf31845 100644 --- a/.github/workflows/build-bindings.yml +++ b/.github/workflows/build-bindings.yml @@ -463,7 +463,7 @@ jobs: mkdir -p testDir lib/binding/openssl@3/ lib/binding/openssl@1/ cd testDir npm install --global yarn - yarn add .. + yarn add file:.. test-pnpm-install: runs-on: ubuntu-latest @@ -487,9 +487,9 @@ jobs: - name: Run tests run: | - mkdir -p testDir lib/binding/openssl@3/ lib/binding/openssl@1/ + mkdir -p testDir cd testDir - apt install wget + sudo apt install wget wget -qO- https://get.pnpm.io/install.sh | sh - pnpm install .. @@ -515,10 +515,11 @@ jobs: - name: Run tests run: | - mkdir -p testDir lib/binding/openssl@3/ lib/binding/openssl@1/ + npm install -g bun + bun link + mkdir -p testDir cd testDir - npm install -g bun - bun install .. + bun link aerospike test-typescript-install: runs-on: ubuntu-latest @@ -536,6 +537,11 @@ jobs: architecture: 'x64' - name: Modify the package.json + run: | + npm install -g json + json -I -f package.json -e "this.scripts.install=\"npm-run-all removeExtraBinaries build\"" + + - name: Run tests run: | mkdir my-aerospike-project cd my-aerospike-project @@ -546,10 +552,4 @@ jobs: npx tsc index.ts node index.js - - name: Run tests - run: | - mkdir -p testDir lib/binding/openssl@3/ lib/binding/openssl@1/ - cd testDir - bun install .. - diff --git a/.github/workflows/combine-bindings/action.yml b/.github/workflows/combine-bindings/action.yml index 1e79e903..c5ccb6c1 100644 --- a/.github/workflows/combine-bindings/action.yml +++ b/.github/workflows/combine-bindings/action.yml @@ -62,9 +62,10 @@ runs: mkdir -p lib/binding/node-v108-darwin-arm64 lib/binding/node-v115-darwin-arm64 lib/binding/node-v120-darwin-arm64 mkdir -p lib/binding/openssl@3/node-v108-linux-arm64 lib/binding/openssl@3/node-v115-linux-arm64 lib/binding/openssl@3/node-v120-linux-arm64 mkdir -p lib/binding/openssl@1/node-v108-linux-arm64 lib/binding/openssl@1/node-v115-linux-arm64 lib/binding/openssl@1/node-v120-linux-arm64 - cp -r node-v108-linux-x64 lib/binding/node-v108-linux-x64 - cp -r node-v115-linux-x64 lib/binding/node-v115-linux-x64 - cp -r node-v120-linux-x64 lib/binding/node-v120-linux-x64 + mkdir -p lib/binding/openssl@1/node-v108-linux-x64 lib/binding/openssl@1/node-v115-linux-x64 lib/binding/openssl@1/node-v120-linux-x64 + cp -r node-v108-linux-x64 lib/binding/openssl@3/node-v108-linux-x64 + cp -r node-v115-linux-x64 lib/binding/openssl@3/node-v115-linux-x64 + cp -r node-v120-linux-x64 lib/binding/openssl@3/node-v120-linux-x64 cp -r node-v108-darwin-x64 lib/binding/node-v108-darwin-x64 cp -r node-v115-darwin-x64 lib/binding/node-v115-darwin-x64 cp -r node-v120-darwin-x64 lib/binding/node-v120-darwin-x64 From 027100fb86d0fd269dc7769124f71813ff7ca3d8 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Thu, 15 Feb 2024 03:22:45 -0700 Subject: [PATCH 80/98] Removed dirty-chai Disabled linting rule (no-unused-expressions) for several test files ran npm lint upgraded dependencies updated the submodule --- aerospike-client-c | 2 +- lib/lists.js | 2 +- package-lock.json | 3685 +++++++++++++++++++++++++++--------------- package.json | 27 +- test/batch_apply.js | 3 +- test/batch_exists.js | 3 +- test/batch_get.js | 3 +- test/batch_read.js | 23 +- test/batch_remove.js | 3 +- test/batch_select.js | 3 +- test/batch_write.js | 22 +- test/client.js | 15 +- test/config.js | 3 +- test/enterprise.js | 4 +- test/error.js | 9 +- test/exists.js | 9 +- test/index_job.js | 5 +- test/info.js | 15 +- test/key.js | 73 +- test/lists.js | 4 +- test/operate.js | 5 +- test/policy.js | 21 +- test/put.js | 2 +- test/query.js | 19 +- test/remove.js | 6 +- test/scan.js | 17 +- test/stats.js | 5 +- test/test_helper.js | 2 - 28 files changed, 2540 insertions(+), 1450 deletions(-) diff --git a/aerospike-client-c b/aerospike-client-c index 752b242a..029db7ac 160000 --- a/aerospike-client-c +++ b/aerospike-client-c @@ -1 +1 @@ -Subproject commit 752b242a8c39b4987e52f602113c212edf3b01ce +Subproject commit 029db7ac63ba3533150c359e0dec5a51e54914ab diff --git a/lib/lists.js b/lib/lists.js index 4a9688d7..92dc7205 100644 --- a/lib/lists.js +++ b/lib/lists.js @@ -1088,7 +1088,7 @@ exports.clear = function (bin) { * @parm {boolean} pad - If true, the context is allowed to be beyond list boundaries. In that case, nil * list entries will be inserted to satisfy the context position. * @param {boolean} persistIndex - If true, persist list index. A list index improves lookup performance, - * but requires more storage. A list index can be created for a top-level ordered list only. Nested and + * but requires more storage. A list index can be created for a top-level ordered list only. Nested and * unordered list indexes are not supported. * @param {number} ctx - optional path to nested list. If not defined, the top-level list is used. * diff --git a/package-lock.json b/package-lock.json index a4e7eb4e..612f0503 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,27 +21,26 @@ "dependencies": { "@mapbox/node-pre-gyp": "^1.0.11", "bindings": "^1.5.0", - "minimatch": "^3.1.2", - "nan": "^2.17.0", - "node-gyp": "^8.4.1", + "minimatch": "^9.0.3", + "nan": "^2.18.0", + "node-gyp": "^10.0.1", "npm-run-all": "^4.1.5" }, "devDependencies": { - "@types/node": "^17.0.45", - "chai": "^4.3.7", + "@types/node": "^20.11.18", + "chai": "^5.1.0", "choma": "^1.2.1", "codecov": "^3.8.3", - "deep-eql": "^4.1.3", - "dirty-chai": "^2.0.1", - "husky": "^7.0.4", - "mocha": "^9.2.2", + "deep-eql": "^5.0.1", + "husky": "^9.0.11", + "mocha": "^10.3.0", "mocha-clean": "^1.0.0", "nyc": "^15.1.0", - "p-throttle": "^3.1.0", - "semver": "^7.5.4", - "standard": "^16.0.4", - "tmp": "^0.1.0", - "yargs": "^15.4.1" + "p-throttle": "^6.1.0", + "semver": "^7.6.0", + "standard": "^17.1.0", + "tmp": "^0.2.1", + "yargs": "^17.7.2" }, "engines": { "node": ">=4" @@ -92,9 +91,9 @@ } }, "node_modules/@babel/core": { - "version": "7.23.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.7.tgz", - "integrity": "sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.9.tgz", + "integrity": "sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", @@ -102,11 +101,11 @@ "@babel/generator": "^7.23.6", "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.23.7", - "@babel/parser": "^7.23.6", - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.7", - "@babel/types": "^7.23.6", + "@babel/helpers": "^7.23.9", + "@babel/parser": "^7.23.9", + "@babel/template": "^7.23.9", + "@babel/traverse": "^7.23.9", + "@babel/types": "^7.23.9", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -308,14 +307,14 @@ } }, "node_modules/@babel/helpers": { - "version": "7.23.8", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.8.tgz", - "integrity": "sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.9.tgz", + "integrity": "sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==", "dev": true, "dependencies": { - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.7", - "@babel/types": "^7.23.6" + "@babel/template": "^7.23.9", + "@babel/traverse": "^7.23.9", + "@babel/types": "^7.23.9" }, "engines": { "node": ">=6.9.0" @@ -336,9 +335,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", - "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.9.tgz", + "integrity": "sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -348,23 +347,23 @@ } }, "node_modules/@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.23.9.tgz", + "integrity": "sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" + "@babel/code-frame": "^7.23.5", + "@babel/parser": "^7.23.9", + "@babel/types": "^7.23.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.23.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.7.tgz", - "integrity": "sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.9.tgz", + "integrity": "sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==", "dev": true, "dependencies": { "@babel/code-frame": "^7.23.5", @@ -373,8 +372,8 @@ "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.6", - "@babel/types": "^7.23.6", + "@babel/parser": "^7.23.9", + "@babel/types": "^7.23.9", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -383,9 +382,9 @@ } }, "node_modules/@babel/types": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", - "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.9.tgz", + "integrity": "sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==", "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.23.4", @@ -396,34 +395,76 @@ "node": ">=6.9.0" } }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, "node_modules/@eslint/eslintrc": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.3.0.tgz", - "integrity": "sha512-1JTKgrOKAHVivSvOYw+sJOunkBjUOvjqWk1DPja7ZFhIS2mX/4EgTT8M7eTK9jrKhL/FvXXEbQwIs3pg1xp3dg==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "lodash": "^4.17.20", - "minimatch": "^3.0.4", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "dependencies": { - "type-fest": "^0.8.1" + "type-fest": "^0.20.2" }, "engines": { "node": ">=8" @@ -432,10 +473,194 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@gar/promisify": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==" + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", + "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", + "dev": true + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", @@ -529,9 +754,9 @@ } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, "engines": { "node": ">=6.0.0" @@ -553,9 +778,9 @@ "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.21", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.21.tgz", - "integrity": "sha512-SRfKmRe1KvYnxjEMtxEr+J4HIeMX5YBg/qhRHpxEIGjhX1rshcHlnFUE9K0GazhVKWM7B+nARSkV8LuvJdJ5/g==", + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz", + "integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==", "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -581,32 +806,104 @@ "node-pre-gyp": "bin/node-pre-gyp" } }, - "node_modules/@npmcli/fs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", - "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, "dependencies": { - "@gar/promisify": "^1.0.1", - "semver": "^7.3.5" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/@npmcli/move-file": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", - "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", - "deprecated": "This functionality has been moved to @npmcli/fs", + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" }, "engines": { - "node": ">=10" + "node": ">= 8" + } + }, + "node_modules/@npmcli/agent": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.1.tgz", + "integrity": "sha512-H4FrOVtNyWC8MUwL3UfjOsAihHvT1Pe8POj3JvjXhSTJipsZMtgUALCT4mGyYZNxymkUfOw3PUj6dE4QPp6osQ==", + "dependencies": { + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^10.0.1", + "socks-proxy-agent": "^8.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/agent/node_modules/agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@npmcli/agent/node_modules/https-proxy-agent": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.3.tgz", + "integrity": "sha512-kCnwztfX0KZJSLOBrcL0emLeFako55NWMovvyPP2AjsghNk9RB1yjSI+jVumPHYZsNXegNoqupSW9IY3afSH8w==", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@npmcli/fs": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", + "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true, + "engines": { + "node": ">=14" } }, "node_modules/@tootallnate/once": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true, "engines": { "node": ">= 6" } @@ -618,15 +915,18 @@ "dev": true }, "node_modules/@types/node": { - "version": "17.0.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", - "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", - "dev": true + "version": "20.11.18", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.18.tgz", + "integrity": "sha512-ABT5VWnnYneSBcNWYSCuR05M826RoMyMSGiFivXGx6ZUIsXb9vn4643IEwkg2zbEOSgAiSogtapN2fgc4mAPlw==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } }, - "node_modules/@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", "dev": true }, "node_modules/abbrev": { @@ -635,9 +935,9 @@ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, "node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -666,17 +966,6 @@ "node": ">= 6.0.0" } }, - "node_modules/agentkeepalive": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", - "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", - "dependencies": { - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, "node_modules/aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", @@ -801,12 +1090,15 @@ } }, "node_modules/array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "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" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -831,16 +1123,17 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array.prototype.flat": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", - "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "node_modules/array.prototype.filter": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array.prototype.filter/-/array.prototype.filter-1.0.3.tgz", + "integrity": "sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.7" }, "engines": { "node": ">= 0.4" @@ -849,16 +1142,17 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "node_modules/array.prototype.findlastindex": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.4.tgz", + "integrity": "sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "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" }, "engines": { "node": ">= 0.4" @@ -867,17 +1161,67 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", - "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, "dependencies": { - "array-buffer-byte-length": "^1.0.0", "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-array-buffer": "^3.0.2", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz", + "integrity": "sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==", + "dev": true, + "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" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "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" }, "engines": { @@ -888,27 +1232,27 @@ } }, "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", "dev": true, "engines": { - "node": "*" + "node": ">=12" } }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "node_modules/asynciterator.prototype": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", + "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "has-symbols": "^1.0.3" } }, "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.6.tgz", + "integrity": "sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg==", "engines": { "node": ">= 0.4" }, @@ -939,12 +1283,11 @@ } }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "balanced-match": "^1.0.0" } }, "node_modules/braces": { @@ -966,9 +1309,9 @@ "dev": true }, "node_modules/browserslist": { - "version": "4.22.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", - "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", "dev": true, "funding": [ { @@ -985,8 +1328,8 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001565", - "electron-to-chromium": "^1.4.601", + "caniuse-lite": "^1.0.30001587", + "electron-to-chromium": "^1.4.668", "node-releases": "^2.0.14", "update-browserslist-db": "^1.0.13" }, @@ -997,32 +1340,141 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "node_modules/builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, "dependencies": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", + "semver": "^7.0.0" + } + }, + "node_modules/cacache": { + "version": "18.0.2", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.2.tgz", + "integrity": "sha512-r3NU8h/P+4lVUHfeRw1dtgQYar3DZMm4/cm2bZgOvrFC/su7budSOeqh52VJIC4U4iG1WWwV6vRW0znqBvxNuw==", + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", + "minipass-pipeline": "^1.2.4", "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/cacache/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cacache/node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/cacache/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/cacache/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacache/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/cacache/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" }, "engines": { - "node": ">= 10" + "node": ">= 8" } }, "node_modules/caching-transform": { @@ -1041,13 +1493,18 @@ } }, "node_modules/call-bind": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", - "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "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.1", - "set-function-length": "^1.1.1" + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -1072,9 +1529,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001576", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001576.tgz", - "integrity": "sha512-ff5BdakGe2P3SQsMsiqmt1Lc8221NR1VzHj5jXN5vBny9A6fpze94HiVV/n7XRosOlsShJcvMv5mdnpjOGCEgg==", + "version": "1.0.30001587", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001587.tgz", + "integrity": "sha512-HMFNotUmLXn71BQxg8cijvqxnIAofforZOwGsxyXJ0qugTdspUF4sPSJ2vhgprHCB996tIDzEq1ubumPDV8ULA==", "dev": true, "funding": [ { @@ -1092,21 +1549,19 @@ ] }, "node_modules/chai": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", - "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.0.tgz", + "integrity": "sha512-kDZ7MZyM6Q1DhR9jy7dalKohXQ2yrlXkk59CR52aRKxJrobmlBNqnFQxX9xOX8w+4mz8SYlKJa/7D7ddltFXCw==", "dev": true, "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.3", - "deep-eql": "^4.1.3", - "get-func-name": "^2.0.2", - "loupe": "^2.3.6", - "pathval": "^1.1.1", - "type-detect": "^4.0.8" + "assertion-error": "^2.0.1", + "check-error": "^2.0.0", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" }, "engines": { - "node": ">=4" + "node": ">=12" } }, "node_modules/chalk": { @@ -1123,15 +1578,12 @@ } }, "node_modules/check-error": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", - "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.0.0.tgz", + "integrity": "sha512-tjLAOBHKVxtPoHe/SA7kNOMvhCRdCJ3vETdeY0RuAc9popf+hyaSV6ZEg9hr4cpWF7jmo/JSWEnLDrnijS9Tog==", "dev": true, - "dependencies": { - "get-func-name": "^2.0.2" - }, "engines": { - "node": "*" + "node": ">= 16" } }, "node_modules/chokidar": { @@ -1191,14 +1643,17 @@ } }, "node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, "dependencies": { "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" } }, "node_modules/codecov": { @@ -1279,6 +1734,11 @@ "node": ">=4.8" } }, + "node_modules/cross-spawn/node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, "node_modules/cross-spawn/node_modules/semver": { "version": "5.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", @@ -1324,13 +1784,10 @@ } }, "node_modules/deep-eql": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", - "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.1.tgz", + "integrity": "sha512-nwQCf6ne2gez3o1MxWifqkciwt0zhl0LO1/UwVu4uMBuPmflWM4oQ70XMqHqnBJA+nhzncaqL9HVL6KkHJ28lw==", "dev": true, - "dependencies": { - "type-detect": "^4.0.0" - }, "engines": { "node": ">=6" } @@ -1357,16 +1814,19 @@ } }, "node_modules/define-data-property": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", - "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dependencies": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/define-properties": { @@ -1407,15 +1867,6 @@ "node": ">=0.3.1" } }, - "node_modules/dirty-chai": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/dirty-chai/-/dirty-chai-2.0.1.tgz", - "integrity": "sha512-ys79pWKvDMowIDEPC6Fig8d5THiC0DJ2gmTeGzVAoEH18J8OzLud0Jh7I9IWg3NSk8x2UocznUuFmfHCXYZx9w==", - "dev": true, - "peerDependencies": { - "chai": ">=2.2.1 <5" - } - }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -1428,10 +1879,15 @@ "node": ">=6.0.0" } }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, "node_modules/electron-to-chromium": { - "version": "1.4.630", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.630.tgz", - "integrity": "sha512-osHqhtjojpCsACVnuD11xO5g9xaCyw7Qqn/C2KParkMv42i8jrJJgx3g7mkHfpxwhy9MnOJr8+pKOdZ7qzgizg==", + "version": "1.4.670", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.670.tgz", + "integrity": "sha512-hcijYOWjOtjKrKPtNA6tuLlA/bTLO3heFG8pQA6mLpq7dRydSWicXova5lyxDzp1iVJaYhK7J2OQlGE52KYn7A==", "dev": true }, "node_modules/emoji-regex": { @@ -1448,19 +1904,6 @@ "iconv-lite": "^0.6.2" } }, - "node_modules/enquirer": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", - "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", - "dev": true, - "dependencies": { - "ansi-colors": "^4.1.1", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8.6" - } - }, "node_modules/env-paths": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", @@ -1483,49 +1926,51 @@ } }, "node_modules/es-abstract": { - "version": "1.22.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", - "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.2", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.5", - "es-set-tostringtag": "^2.0.1", + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.4.tgz", + "integrity": "sha512-vZYJlk2u6qHYxBOTjAeg7qUxHdNfih64Uu2J8QqWgXZ2cri0ZpJAkzDUK/q593+mvKwlxyaxr6F1Q+3LKoQRgg==", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.6", + "call-bind": "^1.0.7", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.2", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.2", - "get-symbol-description": "^1.0.0", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", "globalthis": "^1.0.3", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0", + "has-property-descriptors": "^1.0.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", - "hasown": "^2.0.0", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", + "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-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", - "is-typed-array": "^1.1.12", + "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", "object-inspect": "^1.13.1", "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "safe-array-concat": "^1.0.1", - "safe-regex-test": "^1.0.0", + "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.0", + "typed-array-buffer": "^1.0.1", "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.13" + "which-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -1534,6 +1979,57 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", + "dev": true + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.0.17", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.17.tgz", + "integrity": "sha512-lh7BsUqelv4KUbR5a/ZTaGGIMLCjPGPqJ6q+Oq24YP0RdyptX1uzm4vvaqzk7Zx3bpl/76YLTTDj9L7uYQ92oQ==", + "dev": true, + "dependencies": { + "asynciterator.prototype": "^1.0.0", + "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.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-set-tostringtag": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", @@ -1579,9 +2075,9 @@ "dev": true }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "dev": true, "engines": { "node": ">=6" @@ -1596,63 +2092,64 @@ } }, "node_modules/eslint": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.18.0.tgz", - "integrity": "sha512-fbgTiE8BfUJZuBeq2Yi7J3RB3WGUQ9PNuNbmgi6jt9Iv8qrkxfy19Ds3OpL1Pm7zg3BtTVhvcUZbIRQ0wmSjAQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "@eslint/eslintrc": "^0.3.0", - "ajv": "^6.10.0", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", + "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", + "dev": true, + "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", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", - "debug": "^4.0.1", + "debug": "^4.3.2", "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.2.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", "esutils": "^2.0.2", - "file-entry-cache": "^6.0.0", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", - "lodash": "^4.17.20", - "minimatch": "^3.0.4", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.4", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-config-standard": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-16.0.3.tgz", - "integrity": "sha512-x4fmJL5hGqNJKGHSjnLdgA6U6h1YW/G2dW9fA+cyVur4SK6lyue8+UgNKWlZtUDTXvgKDD/Oa3GQjmB5kjtVvg==", + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz", + "integrity": "sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==", "dev": true, "funding": [ { @@ -1668,17 +2165,20 @@ "url": "https://feross.org/support" } ], + "engines": { + "node": ">=12.0.0" + }, "peerDependencies": { - "eslint": "^7.12.1", - "eslint-plugin-import": "^2.22.1", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-promise": "^4.2.1 || ^5.0.0" + "eslint": "^8.0.1", + "eslint-plugin-import": "^2.25.2", + "eslint-plugin-n": "^15.0.0 || ^16.0.0 ", + "eslint-plugin-promise": "^6.0.0" } }, "node_modules/eslint-config-standard-jsx": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-10.0.0.tgz", - "integrity": "sha512-hLeA2f5e06W1xyr/93/QJulN/rLbUVUmqTlexv9PRKHFwEC9ffJcH2LvJhMoEqYQBEYafedgGZXH2W8NUpt5lA==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-11.0.0.tgz", + "integrity": "sha512-+1EV/R0JxEK1L0NGolAr8Iktm3Rgotx3BKwgaX+eAuSX8D952LULKtjgZD3F+e6SvibONnhLwoTi9DPxN5LvvQ==", "dev": true, "funding": [ { @@ -1695,8 +2195,8 @@ } ], "peerDependencies": { - "eslint": "^7.12.1", - "eslint-plugin-react": "^7.21.5" + "eslint": "^8.8.0", + "eslint-plugin-react": "^7.28.0" } }, "node_modules/eslint-import-resolver-node": { @@ -1746,9 +2246,9 @@ } }, "node_modules/eslint-plugin-es": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", - "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz", + "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==", "dev": true, "dependencies": { "eslint-utils": "^2.0.0", @@ -1764,204 +2264,210 @@ "eslint": ">=4.19.1" } }, - "node_modules/eslint-plugin-import": { - "version": "2.24.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.24.2.tgz", - "integrity": "sha512-hNVtyhiEtZmpsabL4neEj+6M5DCLgpYyG9nzJY8lZQeQXEn5UPW1DpUdsMHMXsq98dbNm7nt1w9ZMSVpfJdi8Q==", + "node_modules/eslint-plugin-es/node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", "dev": true, "dependencies": { - "array-includes": "^3.1.3", - "array.prototype.flat": "^1.2.4", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.6.2", - "find-up": "^2.0.0", - "has": "^1.0.3", - "is-core-module": "^2.6.0", - "minimatch": "^3.0.4", - "object.values": "^1.1.4", - "pkg-up": "^2.0.0", - "read-pkg-up": "^3.0.0", - "resolve": "^1.20.0", - "tsconfig-paths": "^3.11.0" + "eslint-visitor-keys": "^1.1.0" }, "engines": { - "node": ">=4" + "node": ">=6" }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" + "funding": { + "url": "https://github.com/sponsors/mysticatea" } }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "node_modules/eslint-plugin-es/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/eslint-plugin-import/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "node_modules/eslint-plugin-import": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", + "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", "dev": true, "dependencies": { - "locate-path": "^2.0.0" + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.8.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", + "semver": "^6.3.1", + "tsconfig-paths": "^3.15.0" }, "engines": { "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" } }, - "node_modules/eslint-plugin-import/node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "node_modules/eslint-plugin-import/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/eslint-plugin-import/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/eslint-plugin-import/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" + "ms": "^2.1.1" } }, - "node_modules/eslint-plugin-import/node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "dependencies": { - "p-limit": "^1.1.0" + "esutils": "^2.0.2" }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/eslint-plugin-import/node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", + "node_modules/eslint-plugin-import/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, "engines": { - "node": ">=4" + "node": "*" } }, - "node_modules/eslint-plugin-import/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "engines": { - "node": ">=4" + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/eslint-plugin-node": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", - "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", + "node_modules/eslint-plugin-n": { + "version": "15.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.7.0.tgz", + "integrity": "sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q==", "dev": true, "dependencies": { - "eslint-plugin-es": "^3.0.0", - "eslint-utils": "^2.0.0", + "builtins": "^5.0.1", + "eslint-plugin-es": "^4.1.0", + "eslint-utils": "^3.0.0", "ignore": "^5.1.1", - "minimatch": "^3.0.4", - "resolve": "^1.10.1", - "semver": "^6.1.0" + "is-core-module": "^2.11.0", + "minimatch": "^3.1.2", + "resolve": "^1.22.1", + "semver": "^7.3.8" }, "engines": { - "node": ">=8.10.0" + "node": ">=12.22.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" }, "peerDependencies": { - "eslint": ">=5.16.0" + "eslint": ">=7.0.0" } }, - "node_modules/eslint-plugin-node/node_modules/ignore": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", - "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", + "node_modules/eslint-plugin-n/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "engines": { - "node": ">= 4" + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/eslint-plugin-node/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "node_modules/eslint-plugin-n/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, "node_modules/eslint-plugin-promise": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-5.1.1.tgz", - "integrity": "sha512-XgdcdyNzHfmlQyweOPTxmc7pIsS6dE4MvwhXWMQ2Dxs1XAL2GJDilUsjWen6TWik0aSI+zD/PqocZBblcm9rdA==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", + "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==", "dev": true, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "peerDependencies": { - "eslint": "^7.0.0" + "eslint": "^7.0.0 || ^8.0.0" } }, "node_modules/eslint-plugin-react": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.25.3.tgz", - "integrity": "sha512-ZMbFvZ1WAYSZKY662MBVEWR45VaBT6KSJCiupjrNlcdakB90juaZeDCbJq19e73JZQubqFtgETohwgAt8u5P6w==", + "version": "7.33.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", + "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", "dev": true, "dependencies": { - "array-includes": "^3.1.3", - "array.prototype.flatmap": "^1.2.4", + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "array.prototype.tosorted": "^1.1.1", "doctrine": "^2.1.0", - "estraverse": "^5.2.0", + "es-iterator-helpers": "^1.0.12", + "estraverse": "^5.3.0", "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.0.4", - "object.entries": "^1.1.4", - "object.fromentries": "^2.0.4", - "object.hasown": "^1.0.0", - "object.values": "^1.1.4", - "prop-types": "^15.7.2", - "resolve": "^2.0.0-next.3", - "string.prototype.matchall": "^4.0.5" + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "object.hasown": "^1.1.2", + "object.values": "^1.1.6", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.4", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.8" }, "engines": { "node": ">=4" }, "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7" + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, "node_modules/eslint-plugin-react/node_modules/doctrine": { @@ -1976,6 +2482,18 @@ "node": ">=0.10.0" } }, + "node_modules/eslint-plugin-react/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/eslint-plugin-react/node_modules/resolve": { "version": "2.0.0-next.5", "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", @@ -1993,59 +2511,68 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "estraverse": "^5.2.0" }, "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-scope/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, "dependencies": { - "eslint-visitor-keys": "^1.1.0" + "eslint-visitor-keys": "^2.0.0" }, "engines": { - "node": ">=6" + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" }, "funding": { "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" } }, "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true, "engines": { - "node": ">=4" + "node": ">=10" } }, "node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, "engines": { - "node": ">=10" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint/node_modules/ansi-styles": { @@ -2063,6 +2590,22 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/eslint/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/eslint/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -2111,13 +2654,37 @@ "node": ">= 8" } }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/eslint/node_modules/globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "dependencies": { - "type-fest": "^0.8.1" + "type-fest": "^0.20.2" }, "engines": { "node": ">=8" @@ -2135,6 +2702,36 @@ "node": ">=8" } }, + "node_modules/eslint/node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/eslint/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/eslint/node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -2177,27 +2774,48 @@ "node": ">=8" } }, - "node_modules/espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">= 8" } }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, "engines": { - "node": ">=4" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/esprima": { @@ -2255,6 +2873,11 @@ "node": ">=0.10.0" } }, + "node_modules/exponential-backoff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==" + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -2288,6 +2911,15 @@ "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", "dev": true }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -2414,6 +3046,12 @@ "node": ">= 8" } }, + "node_modules/foreground-child/node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, "node_modules/foreground-child/node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -2444,6 +3082,21 @@ "node": ">=8" } }, + "node_modules/foreground-child/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/fromentries": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", @@ -2465,14 +3118,14 @@ ] }, "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", "dependencies": { - "minipass": "^3.0.0" + "minipass": "^7.0.3" }, "engines": { - "node": ">= 8" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/fs.realpath": { @@ -2519,12 +3172,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, "node_modules/functions-have-names": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", @@ -2580,15 +3227,19 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", - "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "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" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -2615,12 +3266,13 @@ } }, "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" }, "engines": { "node": ">= 0.4" @@ -2630,19 +3282,19 @@ } }, "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "minimatch": "^5.0.1", + "once": "^1.3.0" }, "engines": { - "node": "*" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -2660,6 +3312,18 @@ "node": ">= 6" } }, + "node_modules/glob/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -2699,23 +3363,11 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, - "node_modules/growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true, - "engines": { - "node": ">=4.x" - } - }, - "node_modules/has": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", - "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", - "dev": true, - "engines": { - "node": ">= 0.4.0" - } + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true }, "node_modules/has-bigints": { "version": "1.0.2", @@ -2734,11 +3386,11 @@ } }, "node_modules/has-property-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", - "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dependencies": { - "get-intrinsic": "^1.2.2" + "es-define-property": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2767,11 +3419,11 @@ } }, "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dependencies": { - "has-symbols": "^1.0.2" + "has-symbols": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -2802,9 +3454,9 @@ } }, "node_modules/hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", + "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", "dependencies": { "function-bind": "^1.1.2" }, @@ -2838,16 +3490,26 @@ "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" }, "node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.1.tgz", + "integrity": "sha512-My1KCEPs6A0hb4qCVzYp8iEvA8j8YqcvXLZZH8C9OFuTYpYjHE7N2dtG3mRl1HMD4+VGXpF3XcDVcxGBT7yDZQ==", "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" + "agent-base": "^7.1.0", + "debug": "^4.3.4" }, "engines": { - "node": ">= 6" + "node": ">= 14" + } + }, + "node_modules/http-proxy-agent/node_modules/agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" } }, "node_modules/https-proxy-agent": { @@ -2862,24 +3524,16 @@ "node": ">= 6" } }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "dependencies": { - "ms": "^2.0.0" - } - }, "node_modules/husky": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz", - "integrity": "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==", + "version": "9.0.11", + "resolved": "https://registry.npmjs.org/husky/-/husky-9.0.11.tgz", + "integrity": "sha512-AB6lFlbwwyIqMdHYhwPe+kjOC3Oc5P3nThEoW/AaO2BX3vJDjWPFxYLxokUZOo6RNX20He3AaT8sESs9NJcmEw==", "dev": true, "bin": { - "husky": "lib/bin.js" + "husky": "bin.mjs" }, "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/typicode" @@ -2898,9 +3552,9 @@ } }, "node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true, "engines": { "node": ">= 4" @@ -2915,6 +3569,28 @@ "minimatch": "^3.0.4" } }, + "node_modules/ignore-walk/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/ignore-walk/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -2956,11 +3632,6 @@ "node": ">=8" } }, - "node_modules/infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" - }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -2976,11 +3647,11 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/internal-slot": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", - "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dependencies": { - "get-intrinsic": "^1.2.2", + "es-errors": "^1.3.0", "hasown": "^2.0.0", "side-channel": "^1.0.4" }, @@ -2988,19 +3659,33 @@ "node": ">= 0.4" } }, - "node_modules/ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/ip-address/node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==" }, "node_modules/is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "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" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3011,6 +3696,21 @@ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", @@ -3094,6 +3794,18 @@ "node": ">=0.10.0" } }, + "node_modules/is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -3102,6 +3814,21 @@ "node": ">=8" } }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -3119,6 +3846,15 @@ "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==" }, + "node_modules/is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-negative-zero": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", @@ -3153,6 +3889,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/is-plain-obj": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", @@ -3177,6 +3922,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-shared-array-buffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", @@ -3229,11 +3983,11 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", "dependencies": { - "which-typed-array": "^1.1.11" + "which-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -3260,6 +4014,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", @@ -3271,6 +4034,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -3286,9 +4062,12 @@ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" }, "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "engines": { + "node": ">=16" + } }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", @@ -3366,6 +4145,12 @@ "node": ">= 8" } }, + "node_modules/istanbul-lib-processinfo/node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, "node_modules/istanbul-lib-processinfo/node_modules/p-map": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", @@ -3408,6 +4193,21 @@ "node": ">=8" } }, + "node_modules/istanbul-lib-processinfo/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/istanbul-lib-report": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", @@ -3485,6 +4285,36 @@ "node": ">=8" } }, + "node_modules/iterator.prototype": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", + "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" + } + }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -3504,6 +4334,11 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==" + }, "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -3625,22 +4460,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, "node_modules/lodash.flattendeep": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", "dev": true }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, "node_modules/log-symbols": { @@ -3742,23 +4571,20 @@ } }, "node_modules/loupe": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", - "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.0.tgz", + "integrity": "sha512-qKl+FrLXUhFuHUoDJG7f8P8gEMHq9NFS0c6ghXG1J0rldmZFQZoNVv/vyirE9qwCIhWZDsvEFd1sbFu3GvRQFg==", "dev": true, "dependencies": { "get-func-name": "^2.0.1" } }, "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", "engines": { - "node": ">=10" + "node": "14 || >=16.14" } }, "node_modules/make-dir": { @@ -3784,29 +4610,24 @@ } }, "node_modules/make-fetch-happen": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", - "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", - "dependencies": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.2.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.0.tgz", + "integrity": "sha512-7ThobcL8brtGo9CavByQrQi+23aIfgYU++wg4B87AIS8Rb2ZBt/MEaDqzA00Xwv/jUjAjYkLHjVolYuTLKda2A==", + "dependencies": { + "@npmcli/agent": "^2.0.0", + "cacache": "^18.0.0", + "http-cache-semantics": "^4.1.1", "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.2", + "negotiator": "^0.6.3", "promise-retry": "^2.0.1", - "socks-proxy-agent": "^6.0.0", - "ssri": "^8.0.0" + "ssri": "^10.0.0" }, "engines": { - "node": ">= 10" + "node": "^16.14.0 || >=18.0.0" } }, "node_modules/memorystream": { @@ -3818,14 +4639,17 @@ } }, "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "*" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/minimist": { @@ -3838,41 +4662,38 @@ } }, "node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dependencies": { - "yallist": "^4.0.0" - }, + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.17" } }, "node_modules/minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", "dependencies": { - "minipass": "^3.0.0" + "minipass": "^7.0.3" }, "engines": { - "node": ">= 8" + "node": ">=16 || 14 >=14.17" } }, "node_modules/minipass-fetch": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", - "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", + "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==", "dependencies": { - "minipass": "^3.1.0", + "minipass": "^7.0.3", "minipass-sized": "^1.0.3", - "minizlib": "^2.0.0" + "minizlib": "^2.1.2" }, "engines": { - "node": ">=8" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" }, "optionalDependencies": { - "encoding": "^0.1.12" + "encoding": "^0.1.13" } }, "node_modules/minipass-flush": { @@ -3886,12 +4707,34 @@ "node": ">= 8" } }, + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/minipass-pipeline": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", "dependencies": { - "minipass": "^3.0.0" + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" }, "engines": { "node": ">=8" @@ -3908,6 +4751,17 @@ "node": ">=8" } }, + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/minizlib": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", @@ -3920,6 +4774,17 @@ "node": ">= 8" } }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", @@ -3932,46 +4797,38 @@ } }, "node_modules/mocha": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", - "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.3.0.tgz", + "integrity": "sha512-uF2XJs+7xSLsrmIvn37i/wnc91nw7XjOQB8ccyx5aEgdnohr7n+rEiZP23WkCYHjilR6+EboEnbq/ZQDz4LSbg==", "dev": true, "dependencies": { - "@ungap/promise-all-settled": "1.1.2", "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", "chokidar": "3.5.3", - "debug": "4.3.3", + "debug": "4.3.4", "diff": "5.0.0", "escape-string-regexp": "4.0.0", "find-up": "5.0.0", - "glob": "7.2.0", - "growl": "1.10.5", + "glob": "8.1.0", "he": "1.2.0", "js-yaml": "4.1.0", "log-symbols": "4.1.0", - "minimatch": "4.2.1", + "minimatch": "5.0.1", "ms": "2.1.3", - "nanoid": "3.3.1", "serialize-javascript": "6.0.0", "strip-json-comments": "3.1.1", "supports-color": "8.1.1", - "which": "2.0.2", - "workerpool": "6.2.0", + "workerpool": "6.2.1", "yargs": "16.2.0", "yargs-parser": "20.2.4", "yargs-unparser": "2.0.0" }, "bin": { "_mocha": "bin/_mocha", - "mocha": "bin/mocha" + "mocha": "bin/mocha.js" }, "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" + "node": ">= 14.0.0" } }, "node_modules/mocha-clean": { @@ -3980,21 +4837,6 @@ "integrity": "sha512-1GFhy+5nkz6lle/fpoTvgiXnObhpzy7VZYkg+zfmHf2Dewu99uCJ6ycVXa5UjFlhMBGE0CvdIot9yifb85g2gw==", "dev": true }, - "node_modules/mocha/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/mocha/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -4012,47 +4854,6 @@ "wrap-ansi": "^7.0.0" } }, - "node_modules/mocha/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/mocha/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/mocha/node_modules/debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/mocha/node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "node_modules/mocha/node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -4087,12 +4888,12 @@ } }, "node_modules/mocha/node_modules/minimatch": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", - "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", "dev": true, "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" }, "engines": { "node": ">=10" @@ -4119,32 +4920,6 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/mocha/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/mocha/node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/mocha/node_modules/yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", @@ -4173,18 +4948,6 @@ "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz", "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==" }, - "node_modules/nanoid": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", - "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", - "dev": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -4224,70 +4987,154 @@ } }, "node_modules/node-gyp": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", - "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.0.1.tgz", + "integrity": "sha512-gg3/bHehQfZivQVfqIyy8wTdSymF9yTyP4CJifK73imyNMU8AIGQE2pUa7dNWfmMeG9cDVF2eehiRMv0LC1iAg==", "dependencies": { "env-paths": "^2.2.0", - "glob": "^7.1.4", + "exponential-backoff": "^3.1.1", + "glob": "^10.3.10", "graceful-fs": "^4.2.6", - "make-fetch-happen": "^9.1.0", - "nopt": "^5.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", + "make-fetch-happen": "^13.0.0", + "nopt": "^7.0.0", + "proc-log": "^3.0.0", "semver": "^7.3.5", "tar": "^6.1.2", - "which": "^2.0.2" + "which": "^4.0.0" }, "bin": { "node-gyp": "bin/node-gyp.js" }, "engines": { - "node": ">= 10.12.0" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/node-gyp/node_modules/are-we-there-yet": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", - "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "node_modules/node-gyp/node_modules/abbrev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", + "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/node-gyp/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">= 8" } }, - "node_modules/node-gyp/node_modules/gauge": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", - "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "node_modules/node-gyp/node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">= 8" } }, - "node_modules/node-gyp/node_modules/npmlog": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", - "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "node_modules/node-gyp/node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", "dependencies": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-gyp/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-gyp/node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/node-gyp/node_modules/nopt": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.0.tgz", + "integrity": "sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==", + "dependencies": { + "abbrev": "^2.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/node-gyp/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/node-gyp/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=8" + } + }, + "node_modules/node-gyp/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/node-gyp/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/node-preload": { @@ -4374,6 +5221,26 @@ "node": ">= 4" } }, + "node_modules/npm-run-all/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/npm-run-all/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/npmlog": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", @@ -4423,9 +5290,63 @@ "nyc": "bin/nyc.js" }, "engines": { - "node": ">=8.9" + "node": ">=8.9" + } + }, + "node_modules/nyc/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/nyc/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/nyc/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/nyc/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, + "node_modules/nyc/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/nyc/node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -4439,6 +5360,26 @@ "node": ">=8" } }, + "node_modules/nyc/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/nyc/node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -4451,6 +5392,18 @@ "node": ">=8" } }, + "node_modules/nyc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/nyc/node_modules/p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -4490,6 +5443,61 @@ "node": ">=8" } }, + "node_modules/nyc/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/nyc/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -4562,6 +5570,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/object.groupby": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.2.tgz", + "integrity": "sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw==", + "dev": true, + "dependencies": { + "array.prototype.filter": "^1.0.3", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.0.0" + } + }, "node_modules/object.hasown": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz", @@ -4662,12 +5683,15 @@ } }, "node_modules/p-throttle": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-throttle/-/p-throttle-3.1.0.tgz", - "integrity": "sha512-rLo81NXBihs3GJQhq89IXa0Egj/sbW1zW8/qnyadOwUhIUrZSUvyGdQ46ISRKELFBkVvmMJ4JUqWki4oAh30Qw==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/p-throttle/-/p-throttle-6.1.0.tgz", + "integrity": "sha512-eQMdGTxk2+047La67wefUtt0tEHh7D+C8Jl7QXoFCuIiNYeQ9zWs2AZiJdIAs72rSXZ06t11me2bgalRNdy3SQ==", "dev": true, "engines": { - "node": ">=6" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-try": { @@ -4748,6 +5772,21 @@ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, + "node_modules/path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "dependencies": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/path-type": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", @@ -4760,12 +5799,12 @@ } }, "node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", + "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", "dev": true, "engines": { - "node": "*" + "node": ">= 14.16" } }, "node_modules/picocolors": { @@ -4986,85 +6025,6 @@ "node": ">=8" } }, - "node_modules/pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", - "integrity": "sha512-fjAPuiws93rm7mPUu21RdBnkeZNrbfCFCwfAhPWY+rR3zG0ubpe5cEReHOw5fIbfmsxEV/g2kSxGTATY3Bpnwg==", - "dev": true, - "dependencies": { - "find-up": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-up/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "dev": true, - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-up/node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", - "dev": true, - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-up/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-up/node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", - "dev": true, - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-up/node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-up/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -5074,6 +6034,14 @@ "node": ">= 0.8.0" } }, + "node_modules/proc-log": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", + "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/process-on-spawn": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", @@ -5086,20 +6054,6 @@ "node": ">=8" } }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==" - }, "node_modules/promise-retry": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", @@ -5132,6 +6086,26 @@ "node": ">=6" } }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -5160,86 +6134,6 @@ "node": ">=4" } }, - "node_modules/read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==", - "dev": true, - "dependencies": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "dev": true, - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", - "dev": true, - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", - "dev": true, - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -5259,20 +6153,42 @@ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "dependencies": { - "picomatch": "^2.2.1" + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.5.tgz", + "integrity": "sha512-62wgfC8dJWrmxv44CA36pLDnP6KKl3Vhxb7PL+8+qrrFMMoJij4vgiMP8zV4O8+CBMXY1mHxI5fITGHXFHVmQQ==", + "dev": true, + "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" }, "engines": { - "node": ">=8.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/regexp.prototype.flags": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", - "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "set-function-name": "^2.0.0" + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" }, "engines": { "node": ">= 0.4" @@ -5314,15 +6230,6 @@ "node": ">=0.10.0" } }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", @@ -5362,6 +6269,16 @@ "node": ">= 4" } }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -5376,13 +6293,75 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/rimraf/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, "node_modules/safe-array-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", - "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz", + "integrity": "sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.5", + "get-intrinsic": "^1.2.2", "has-symbols": "^1.0.3", "isarray": "^2.0.5" }, @@ -5413,12 +6392,12 @@ ] }, "node_modules/safe-regex-test": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.2.tgz", - "integrity": "sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", "dependencies": { - "call-bind": "^1.0.5", - "get-intrinsic": "^1.2.2", + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", "is-regex": "^1.1.4" }, "engines": { @@ -5441,9 +6420,9 @@ "dev": true }, "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -5454,6 +6433,17 @@ "node": ">=10" } }, + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/serialize-javascript": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", @@ -5469,14 +6459,16 @@ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" }, "node_modules/set-function-length": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", - "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", + "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", "dependencies": { - "define-data-property": "^1.1.1", - "get-intrinsic": "^1.2.1", + "define-data-property": "^1.1.2", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.3", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -5523,13 +6515,17 @@ } }, "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.5.tgz", + "integrity": "sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==", "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5540,56 +6536,6 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/slice-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/smart-buffer": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", @@ -5600,29 +6546,40 @@ } }, "node_modules/socks": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", - "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.3.tgz", + "integrity": "sha512-vfuYK48HXCTFD03G/1/zkIls3Ebr2YNa4qU9gHDZdblHLiqhJrJGkY3+0Nx0JpN9qBhJbVObc1CNciT1bIZJxw==", "dependencies": { - "ip": "^2.0.0", + "ip-address": "^9.0.5", "smart-buffer": "^4.2.0" }, "engines": { - "node": ">= 10.13.0", + "node": ">= 10.0.0", "npm": ">= 3.0.0" } }, "node_modules/socks-proxy-agent": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", - "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz", + "integrity": "sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "socks": "^2.7.1" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/socks-proxy-agent/node_modules/agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" + "debug": "^4.3.4" }, "engines": { - "node": ">= 10" + "node": ">= 14" } }, "node_modules/source-map": { @@ -5651,6 +6608,27 @@ "node": ">=8" } }, + "node_modules/spawn-wrap/node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/spawn-wrap/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/spdx-correct": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", @@ -5661,9 +6639,9 @@ } }, "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==" }, "node_modules/spdx-expression-parse": { "version": "3.0.1", @@ -5675,9 +6653,9 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.16", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", - "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==" + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz", + "integrity": "sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==" }, "node_modules/sprintf-js": { "version": "1.0.3", @@ -5686,20 +6664,20 @@ "dev": true }, "node_modules/ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "version": "10.0.5", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", + "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==", "dependencies": { - "minipass": "^3.1.1" + "minipass": "^7.0.3" }, "engines": { - "node": ">= 8" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/standard": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/standard/-/standard-16.0.4.tgz", - "integrity": "sha512-2AGI874RNClW4xUdM+bg1LRXVlYLzTNEkHmTG5mhyn45OhbgwA+6znowkOGYy+WMb5HRyELvtNy39kcdMQMcYQ==", + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/standard/-/standard-17.1.0.tgz", + "integrity": "sha512-jaDqlNSzLtWYW4lvQmU0EnxWMUGQiwHasZl5ZEIwx3S/ijZDjZOzs1y1QqKwKs5vqnFpGtizo4NOYX2s0Voq/g==", "dev": true, "funding": [ { @@ -5716,26 +6694,27 @@ } ], "dependencies": { - "eslint": "~7.18.0", - "eslint-config-standard": "16.0.3", - "eslint-config-standard-jsx": "10.0.0", - "eslint-plugin-import": "~2.24.2", - "eslint-plugin-node": "~11.1.0", - "eslint-plugin-promise": "~5.1.0", - "eslint-plugin-react": "~7.25.1", - "standard-engine": "^14.0.1" + "eslint": "^8.41.0", + "eslint-config-standard": "17.1.0", + "eslint-config-standard-jsx": "^11.0.0", + "eslint-plugin-import": "^2.27.5", + "eslint-plugin-n": "^15.7.0", + "eslint-plugin-promise": "^6.1.1", + "eslint-plugin-react": "^7.32.2", + "standard-engine": "^15.0.0", + "version-guard": "^1.1.1" }, "bin": { - "standard": "bin/cmd.js" + "standard": "bin/cmd.cjs" }, "engines": { - "node": ">=10.12.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/standard-engine": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/standard-engine/-/standard-engine-14.0.1.tgz", - "integrity": "sha512-7FEzDwmHDOGva7r9ifOzD3BGdTbA7ujJ50afLVdW/tK14zQEptJjbFuUfn50irqdHDcTbNh0DTIoMPynMCXb0Q==", + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/standard-engine/-/standard-engine-15.1.0.tgz", + "integrity": "sha512-VHysfoyxFu/ukT+9v49d4BRXIokFRZuH3z1VRxzFArZdjSCFpro6rEIU3ji7e4AoAtuSfKBkiOmsrDqKW5ZSRw==", "dev": true, "funding": [ { @@ -5753,12 +6732,12 @@ ], "dependencies": { "get-stdin": "^8.0.0", - "minimist": "^1.2.5", + "minimist": "^1.2.6", "pkg-conf": "^3.1.0", "xdg-basedir": "^4.0.0" }, "engines": { - "node": ">=8.10" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/stream-events": { @@ -5791,6 +6770,20 @@ "node": ">=8" } }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "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" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/string.prototype.matchall": { "version": "4.0.10", "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", @@ -5880,6 +6873,18 @@ "node": ">=8" } }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-bom": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", @@ -5929,44 +6934,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/table": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", - "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", - "dev": true, - "dependencies": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/table/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/table/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, "node_modules/tar": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", @@ -5983,6 +6950,28 @@ "node": ">=10" } }, + "node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/tar/node_modules/minipass": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", @@ -5997,14 +6986,28 @@ "integrity": "sha512-iwY6rkW5DDGq8hE2YgNQlKbptYpY5Nn2xecjQiNjOXWbKzPGUfmeUBCSQbbr306d7Z7U2N0TPl+/SwYRfua1Dg==", "dev": true, "dependencies": { - "http-proxy-agent": "^4.0.0", - "https-proxy-agent": "^5.0.0", - "node-fetch": "^2.6.1", - "stream-events": "^1.0.5", - "uuid": "^8.0.0" + "http-proxy-agent": "^4.0.0", + "https-proxy-agent": "^5.0.0", + "node-fetch": "^2.6.1", + "stream-events": "^1.0.5", + "uuid": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/teeny-request/node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" }, "engines": { - "node": ">=10" + "node": ">= 6" } }, "node_modules/test-exclude": { @@ -6021,6 +7024,48 @@ "node": ">=8" } }, + "node_modules/test-exclude/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/test-exclude/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/test-exclude/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -6028,27 +7073,15 @@ "dev": true }, "node_modules/tmp": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.1.0.tgz", - "integrity": "sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", "dev": true, "dependencies": { - "rimraf": "^2.6.3" + "rimraf": "^3.0.0" }, "engines": { - "node": ">=6" - } - }, - "node_modules/tmp/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" + "node": ">=8.17.0" } }, "node_modules/to-fast-properties": { @@ -6122,15 +7155,6 @@ "node": ">= 0.8.0" } }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/type-fest": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", @@ -6141,13 +7165,13 @@ } }, "node_modules/typed-array-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", - "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.1.tgz", + "integrity": "sha512-RSqu1UEuSlrBhHTWC8O9FnPjOduNs4M7rJ4pRKoEjtx1zUNOPN2sSXHLDX+Y2WPbHIxbvg4JFo2DNAEfPIKWoQ==", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "is-typed-array": "^1.1.10" + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -6224,20 +7248,32 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, "node_modules/unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", "dependencies": { - "unique-slug": "^2.0.0" + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", "dependencies": { "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/update-browserslist-db": { @@ -6302,12 +7338,6 @@ "uuid": "dist/bin/uuid" } }, - "node_modules/v8-compile-cache": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz", - "integrity": "sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==", - "dev": true - }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -6317,6 +7347,15 @@ "spdx-expression-parse": "^3.0.0" } }, + "node_modules/version-guard": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/version-guard/-/version-guard-1.1.1.tgz", + "integrity": "sha512-MGQLX89UxmYHgDvcXyjBI0cbmoW+t/dANDppNPrno64rYr8nH4SHSuElQuSYdXGEs0mUzdQe1BY+FhVPNsAmJQ==", + "dev": true, + "engines": { + "node": ">=0.10.48" + } + }, "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", @@ -6332,17 +7371,17 @@ } }, "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", "dependencies": { - "isexe": "^2.0.0" + "isexe": "^3.1.1" }, "bin": { - "node-which": "bin/node-which" + "node-which": "bin/which.js" }, "engines": { - "node": ">= 8" + "node": "^16.13.0 || >=18.0.0" } }, "node_modules/which-boxed-primitive": { @@ -6360,6 +7399,47 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/which-builtin-type": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", + "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", + "dev": true, + "dependencies": { + "function.prototype.name": "^1.1.5", + "has-tostringtag": "^1.0.0", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dev": true, + "dependencies": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/which-module": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", @@ -6367,15 +7447,15 @@ "dev": true }, "node_modules/which-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", - "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.14.tgz", + "integrity": "sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.4", + "available-typed-arrays": "^1.0.6", + "call-bind": "^1.0.5", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "has-tostringtag": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -6393,25 +7473,75 @@ } }, "node_modules/workerpool": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", - "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", "dev": true }, "node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, + "node_modules/wrap-ansi-cjs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, "node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -6472,10 +7602,13 @@ } }, "node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } }, "node_modules/yallist": { "version": "4.0.0", @@ -6483,25 +7616,21 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" }, "engines": { - "node": ">=8" + "node": ">=12" } }, "node_modules/yargs-parser": { @@ -6552,69 +7681,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/yargs/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yargs/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/yargs/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, "engines": { - "node": ">=6" + "node": ">=12" } }, "node_modules/yocto-queue": { diff --git a/package.json b/package.json index dce50b9a..fad8f661 100644 --- a/package.json +++ b/package.json @@ -58,27 +58,26 @@ "dependencies": { "@mapbox/node-pre-gyp": "^1.0.11", "bindings": "^1.5.0", - "minimatch": "^3.1.2", - "nan": "^2.17.0", - "node-gyp": "^8.4.1", + "minimatch": "^9.0.3", + "nan": "^2.18.0", + "node-gyp": "^10.0.1", "npm-run-all": "^4.1.5" }, "devDependencies": { - "@types/node": "^17.0.45", - "chai": "^4.3.7", + "@types/node": "^20.11.18", + "chai": "^5.1.0", "choma": "^1.2.1", "codecov": "^3.8.3", - "deep-eql": "^4.1.3", - "dirty-chai": "^2.0.1", - "husky": "^7.0.4", - "mocha": "^9.2.2", + "deep-eql": "^5.0.1", + "husky": "^9.0.11", + "mocha": "^10.3.0", "mocha-clean": "^1.0.0", "nyc": "^15.1.0", - "p-throttle": "^3.1.0", - "semver": "^7.5.4", - "standard": "^16.0.4", - "tmp": "^0.1.0", - "yargs": "^15.4.1" + "p-throttle": "^6.1.0", + "semver": "^7.6.0", + "standard": "^17.1.0", + "tmp": "^0.2.1", + "yargs": "^17.7.2" }, "standard": { "ignore": [ diff --git a/test/batch_apply.js b/test/batch_apply.js index b0e30072..56e0065c 100644 --- a/test/batch_apply.js +++ b/test/batch_apply.js @@ -18,6 +18,7 @@ /* eslint-env mocha */ /* global expect */ +/* eslint-disable no-unused-expressions */ const Aerospike = require('../lib/aerospike') const helper = require('./test_helper') @@ -72,7 +73,7 @@ describe('client.batchApply()', function () { } client.batchApply(batchRecords, udf, policy, function (err, results) { - expect(err).not.to.be.ok() + expect(err).not.to.be.ok expect(results.length).to.equal(5) results.forEach(function (result) { // console.log(util.inspect(result, true, 10, true)) diff --git a/test/batch_exists.js b/test/batch_exists.js index dce2dc4b..940d8147 100644 --- a/test/batch_exists.js +++ b/test/batch_exists.js @@ -17,6 +17,7 @@ 'use strict' /* global expect, describe, it */ +/* eslint-disable no-unused-expressions */ const Aerospike = require('../lib/aerospike') const helper = require('./test_helper') @@ -57,7 +58,7 @@ describe('client.batchExists()', function () { const keys = keygen.range(kgen, numberOfRecords) client.batchExists(keys, function (err, results) { - expect(err).not.to.be.ok() + expect(err).not.to.be.ok expect(results.length).to.equal(numberOfRecords) results.forEach(function (result) { expect(result.status).to.equal(Aerospike.status.ERR_RECORD_NOT_FOUND) diff --git a/test/batch_get.js b/test/batch_get.js index a3bfc88c..a6b14e48 100644 --- a/test/batch_get.js +++ b/test/batch_get.js @@ -17,6 +17,7 @@ 'use strict' /* global expect, describe, it */ +/* eslint-disable no-unused-expressions */ const Aerospike = require('../lib/aerospike') const helper = require('./test_helper') @@ -57,7 +58,7 @@ describe('client.batchGet()', function () { const kgen = keygen.string(helper.namespace, helper.set, { prefix: 'test/batch_get/fail/', random: false }) const keys = keygen.range(kgen, numberOfRecords) client.batchGet(keys, function (err, results) { - expect(err).not.to.be.ok() + expect(err).not.to.be.ok expect(results.length).to.equal(numberOfRecords) results.forEach(function (result) { expect(result.status).to.equal(Aerospike.status.ERR_RECORD_NOT_FOUND) diff --git a/test/batch_read.js b/test/batch_read.js index 1969a2f1..fa988caa 100644 --- a/test/batch_read.js +++ b/test/batch_read.js @@ -18,6 +18,7 @@ /* eslint-env mocha */ /* global expect */ +/* eslint-disable no-unused-expressions */ const Aerospike = require('../lib/aerospike') const helper = require('./test_helper') @@ -58,7 +59,7 @@ describe('client.batchRead()', function () { ] client.batchRead(batchRecords, function (err, results) { - expect(err).not.to.be.ok() + expect(err).not.to.be.ok expect(results.length).to.equal(5) const found = results.filter( result => result.status === Aerospike.status.OK) @@ -78,11 +79,11 @@ describe('client.batchRead()', function () { ] client.batchRead(batchRecords, function (err, results) { - expect(err).not.to.be.ok() + expect(err).not.to.be.ok expect(results.length).to.equal(3) results.forEach(function (result) { expect(result.status).to.equal(Aerospike.status.OK) - expect(result.record.bins).to.be.empty() + expect(result.record.bins).to.be.empty }) done() }) @@ -96,13 +97,13 @@ describe('client.batchRead()', function () { ] client.batchRead(batchRecords, function (err, results) { - expect(err).not.to.be.ok() + expect(err).not.to.be.ok expect(results.length).to.equal(3) results.forEach(function (result) { expect(result.status).to.equal(Aerospike.status.OK) expect(result.record.bins).to.have.all.keys('i') - expect(result.record.gen).to.be.ok() - expect(result.record.ttl).to.be.ok() + expect(result.record.gen).to.be.ok + expect(result.record.ttl).to.be.ok }) done() }) @@ -116,13 +117,13 @@ describe('client.batchRead()', function () { ] client.batchRead(batchRecords, function (err, results) { - expect(err).not.to.be.ok() + expect(err).not.to.be.ok expect(results.length).to.equal(3) results.forEach(function (result) { expect(result.status).to.equal(Aerospike.status.OK) expect(result.record.bins).to.have.keys('i', 's', 'l', 'm') - expect(result.record.gen).to.be.ok() - expect(result.record.ttl).to.be.ok() + expect(result.record.gen).to.be.ok + expect(result.record.ttl).to.be.ok }) done() }) @@ -136,7 +137,7 @@ describe('client.batchRead()', function () { ] client.batchRead(batchRecords, function (err, results) { - expect(err).not.to.be.ok() + expect(err).not.to.be.ok expect(results.length).to.equal(3) results.forEach(function (result) { const record = result.record @@ -148,7 +149,7 @@ describe('client.batchRead()', function () { expect(record.bins).to.have.all.keys('i') break case 'test/batch_read/5': - expect(record.bins).to.be.empty() + expect(record.bins).to.be.empty break default: throw new Error('unpexected record key') diff --git a/test/batch_remove.js b/test/batch_remove.js index b6c7f5c2..2192767f 100644 --- a/test/batch_remove.js +++ b/test/batch_remove.js @@ -18,6 +18,7 @@ /* eslint-env mocha */ /* global expect */ +/* eslint-disable no-unused-expressions */ const Aerospike = require('../lib/aerospike') const helper = require('./test_helper') @@ -62,7 +63,7 @@ describe('client.batchRemove()', function () { ] client.batchRemove(batchRecords, function (err, results) { - expect(err).not.to.be.ok() + expect(err).not.to.be.ok expect(results.length).to.equal(5) results.forEach(function (result) { expect(result.status).to.equal(Aerospike.status.OK) diff --git a/test/batch_select.js b/test/batch_select.js index 8596be7e..e938dec7 100644 --- a/test/batch_select.js +++ b/test/batch_select.js @@ -17,6 +17,7 @@ 'use strict' /* global expect, describe, it */ +/* eslint-disable no-unused-expressions */ const Aerospike = require('../lib/aerospike') const helper = require('./test_helper') @@ -57,7 +58,7 @@ describe('client.batchSelect()', function () { const keys = keygen.range(kgen, numberOfRecords) const bins = ['i', 's'] client.batchSelect(keys, bins, function (err, results) { - expect(err).not.to.be.ok() + expect(err).not.to.be.ok expect(results.length).to.equal(numberOfRecords) results.forEach(function (result) { expect(result.status).to.equal(Aerospike.status.ERR_RECORD_NOT_FOUND) diff --git a/test/batch_write.js b/test/batch_write.js index 5545e445..958a5aac 100644 --- a/test/batch_write.js +++ b/test/batch_write.js @@ -18,6 +18,8 @@ /* eslint-env mocha */ /* global expect */ +/* eslint-disable no-unused-expressions */ + const Aerospike = require('../lib/aerospike') const helper = require('./test_helper') // const util = require('util') @@ -90,7 +92,7 @@ describe('client.batchWrite()', function () { result => result.inDoubt === true) const notFound = results.filter( result => result.status === Aerospike.status.ERR_RECORD_NOT_FOUND) - expect(err).not.to.be.ok() + expect(err).not.to.be.ok expect(results.length).to.equal(5) expect(found.length).to.equal(3 - inDoubt.length) expect(notFound.length).to.equal(2) @@ -133,15 +135,15 @@ describe('client.batchWrite()', function () { ] client.batchWrite(batchWriteRecords, function (err, results) { - expect(err).to.be.null() + expect(err).to.be.null expect(results.length).to.equal(2) - expect(results[1].record.bins).to.be.empty() + expect(results[1].record.bins).to.be.empty client.batchWrite(batchReadRecords, function (err, results) { - expect(err).not.to.be.ok() + expect(err).not.to.be.ok expect(results.length).to.equal(3) expect(results[0].record.bins).to.have.all.keys('i', 's', 'l', 'm', 'str2', 'geo', 'blob', 'string') expect(results[1].status).to.equal(Aerospike.status.ERR_RECORD_NOT_FOUND) - expect(results[2].record.bins).to.be.empty() + expect(results[2].record.bins).to.be.empty // results.forEach(function (result) { // console.log(util.inspect(result, true, 10, true)) // }) @@ -217,7 +219,7 @@ describe('client.batchWrite()', function () { client.batchWrite(batchRecords, function (error, results) { if (error) throw error client.batchWrite(batchRecords, function (error, results) { - expect(error).not.to.be.ok() + expect(error).not.to.be.ok expect(results[0].status).to.equal(status.OK) done() }) @@ -276,7 +278,7 @@ describe('client.batchWrite()', function () { client.batchWrite(batchRecords, function (error, results) { if (error) throw error client.batchWrite(batchRecords, function (error, results) { - expect(error).not.to.be.ok() + expect(error).not.to.be.ok expect(results[0].status).to.equal(status.ERR_RECORD_EXISTS) done() }) @@ -356,7 +358,7 @@ describe('client.batchWrite()', function () { client.remove(new Key(helper.namespace, helper.set, 'test/batch_write/12'), function (error, results) { if (error) throw error client.batchWrite(batchRecords, function (error, results) { - expect(error).not.to.be.ok() + expect(error).not.to.be.ok expect(results[0].status).to.equal(status.ERR_RECORD_NOT_FOUND) done() }) @@ -415,7 +417,7 @@ describe('client.batchWrite()', function () { client.remove(new Key(helper.namespace, helper.set, 'test/batch_write/14'), function (error, results) { if (error) throw error client.batchWrite(batchRecords, function (error, results) { - expect(error).not.to.be.ok() + expect(error).not.to.be.ok expect(results[0].status).to.equal(status.ERR_RECORD_NOT_FOUND) done() }) @@ -474,7 +476,7 @@ describe('client.batchWrite()', function () { client.batchWrite(batchRecords, function (error, results) { if (error) throw error client.batchWrite(batchRecords, function (error, results) { - expect(error).not.to.be.ok() + expect(error).not.to.be.ok expect(results[0].status).to.equal(status.OK) done() }) diff --git a/test/client.js b/test/client.js index 5cf7d11e..5b00feda 100644 --- a/test/client.js +++ b/test/client.js @@ -17,6 +17,7 @@ 'use strict' /* global context, expect, describe, it */ +/* eslint-disable no-unused-expressions */ const Aerospike = require('../lib/aerospike') const Client = Aerospike.Client @@ -40,7 +41,7 @@ describe('Client', function () { let async = false client.connect(error => { if (error) throw error - expect(async).to.be.true() + expect(async).to.be.true client.close(false) done() }) @@ -68,7 +69,7 @@ describe('Client', function () { it('should be possible to call close multiple times', function (done) { const client = new Client(helper.config) client.connect(error => { - expect(error).to.be.null() + expect(error).to.be.null client.close(false) client.close(false) done() @@ -99,13 +100,13 @@ describe('Client', function () { context('without tender health check', function () { it('returns false if the client is not connected', function () { const client = new Client(helper.config) - expect(client.isConnected(false)).to.be.false() + expect(client.isConnected(false)).to.be.false }) it('returns true if the client is connected', function (done) { const client = new Client(helper.config) client.connect(function () { - expect(client.isConnected(false)).to.be.true() + expect(client.isConnected(false)).to.be.true client.close(false) done() }) @@ -115,7 +116,7 @@ describe('Client', function () { const client = new Client(helper.config) client.connect(function () { client.close(false) - expect(client.isConnected(false)).to.be.false() + expect(client.isConnected(false)).to.be.false done() }) }) @@ -128,8 +129,8 @@ describe('Client', function () { client.connect(function () { let tenderHealthCheck = false client.as_client.isConnected = function () { tenderHealthCheck = true; return false } - expect(client.isConnected(true)).to.be.false() - expect(tenderHealthCheck).to.be.true() + expect(client.isConnected(true)).to.be.false + expect(tenderHealthCheck).to.be.true client.as_client.isConnected = orig client.close(false) done() diff --git a/test/config.js b/test/config.js index 58d1f3ea..c8cb0002 100644 --- a/test/config.js +++ b/test/config.js @@ -17,6 +17,7 @@ 'use strict' /* global beforeEach, afterEach, expect, describe, it */ +/* eslint-disable no-unused-expressions */ const Aerospike = require('../lib/aerospike') const Config = require('../lib/config') @@ -153,7 +154,7 @@ describe('Config #noserver', function () { expect(config).to.not.have.property('password') expect(config).to.not.have.property('sharedMemory') expect(config).to.not.have.property('rackId') - expect(config.policies).to.be.empty() + expect(config.policies).to.be.empty }) it('throws a TypeError if invalid policy values are passed', function () { diff --git a/test/enterprise.js b/test/enterprise.js index 4978cf5d..06bdc08a 100644 --- a/test/enterprise.js +++ b/test/enterprise.js @@ -17,7 +17,7 @@ 'use strict' /* global expect, it, context */ - +/* eslint-disable no-unused-expressions */ const helper = require('./test_helper') const keygen = helper.keygen.string(helper.namespace, helper.set, { prefix: 'test/enterprise/' }) @@ -60,7 +60,7 @@ context('Enterprise server features', function () { await client.put(key, record) await client.remove(key, policy) - expect(await client.exists(key)).to.be.false() + expect(await client.exists(key)).to.be.false }) }) }) diff --git a/test/error.js b/test/error.js index b852f7a7..e2092126 100644 --- a/test/error.js +++ b/test/error.js @@ -17,6 +17,7 @@ 'use strict' /* global expect, describe, it */ +/* eslint-disable no-unused-expressions */ const AerospikeError = require('../lib/error') const status = require('../lib/status') @@ -107,11 +108,11 @@ describe('AerospikeError #noserver', function () { it('returns null if the status code is OK', function () { const error = { code: status.OK } - expect(AerospikeError.fromASError(error)).to.be.null() + expect(AerospikeError.fromASError(error)).to.be.null }) it('returns null if no error is passed', function () { - expect(AerospikeError.fromASError(null)).to.be.null() + expect(AerospikeError.fromASError(null)).to.be.null }) }) @@ -119,13 +120,13 @@ describe('AerospikeError #noserver', function () { it('returns true if the error code indicates a server error', function () { const error = { code: status.ERR_RECORD_NOT_FOUND } const subject = AerospikeError.fromASError(error) - expect(subject.isServerError()).to.be.true() + expect(subject.isServerError()).to.be.true }) it('returns false if the error code indicates a client error', function () { const error = { code: status.ERR_PARAM } const subject = AerospikeError.fromASError(error) - expect(subject.isServerError()).to.be.false() + expect(subject.isServerError()).to.be.false }) }) diff --git a/test/exists.js b/test/exists.js index 3b650646..593ae37e 100644 --- a/test/exists.js +++ b/test/exists.js @@ -17,6 +17,7 @@ 'use strict' /* global context, expect, describe, it */ +/* eslint-disable no-unused-expressions */ const helper = require('./test_helper') const keygen = helper.keygen @@ -30,7 +31,7 @@ describe('client.exists()', function () { return client.put(key, { str: 'abcde' }) .then(() => client.exists(key)) - .then(result => expect(result).to.be.true()) + .then(result => expect(result).to.be.true) .then(() => client.remove(key)) }) @@ -38,7 +39,7 @@ describe('client.exists()', function () { const key = keygen.string(helper.namespace, helper.set, { prefix: 'test/exists/' })() return client.exists(key) - .then(result => expect(result).to.be.false()) + .then(result => expect(result).to.be.false) }) }) @@ -50,7 +51,7 @@ describe('client.exists()', function () { if (error) throw error client.exists(key, (error, result) => { if (error) throw error - expect(result).to.be.true() + expect(result).to.be.true client.remove(key, error => { if (error) throw error done() @@ -64,7 +65,7 @@ describe('client.exists()', function () { client.exists(key, (error, result) => { if (error) throw error - expect(result).to.be.false() + expect(result).to.be.false done() }) }) diff --git a/test/index_job.js b/test/index_job.js index 17d5a23b..fbc58064 100644 --- a/test/index_job.js +++ b/test/index_job.js @@ -17,6 +17,7 @@ 'use strict' /* global expect, beforeEach, afterEach, describe, it */ +/* eslint-disable no-unused-expressions */ const Aerospike = require('../lib/aerospike') const AerospikeError = require('../lib/error') @@ -45,7 +46,7 @@ describe('IndexJob', function () { if (err) throw err job.waitUntilDone(10, function (err) { - expect(err).to.not.be.ok() + expect(err).to.not.be.ok done() }) }) @@ -68,7 +69,7 @@ describe('IndexJob', function () { it('should return false if the index does not exist', function () { const job = new IndexJob(client, helper.namespace, 'thisIndexDoesNotExist') return job.checkStatus() - .then(status => expect(status).to.be.false()) + .then(status => expect(status).to.be.false) }) it('should return an error if one of the cluster nodes cannot be queried', function () { diff --git a/test/info.js b/test/info.js index 84a60ca7..e23a569a 100644 --- a/test/info.js +++ b/test/info.js @@ -17,6 +17,7 @@ 'use strict' /* global expect, describe, it, context, before */ +/* eslint-disable no-unused-expressions */ const Aerospike = require('../lib/aerospike') const info = require('../lib/info') @@ -104,7 +105,7 @@ context('Info commands', function () { describe('Client#infoAny()', function () { it('executes the info command on a single cluster node', function (done) { client.infoAny('status', function (err, result) { - expect(err).to.not.be.ok() + expect(err).to.not.be.ok expect(result).to.equal('status\tok\n') done() }) @@ -121,10 +122,10 @@ context('Info commands', function () { describe('client.infoAll()', function () { it('executes the info command on all cluster nodes an returns a list of results', function (done) { client.infoAll('status', function (err, results) { - expect(err).to.not.be.ok() - expect(Array.isArray(results)).to.be.true() + expect(err).to.not.be.ok + expect(Array.isArray(results)).to.be.true results.forEach(function (result) { - expect(result.host).to.be.ok() + expect(result.host).to.be.ok expect(result.info).to.equal('status\tok\n') }) done() @@ -134,15 +135,15 @@ context('Info commands', function () { it('does not require an info command', function () { return client.infoAll() .then(results => - expect(Array.isArray(results)).to.be.true()) + expect(Array.isArray(results)).to.be.true) }) it('returns a Promise that resolves to the result of the info query', function () { return client.infoAll('status') .then(results => { - expect(Array.isArray(results)).to.be.true() + expect(Array.isArray(results)).to.be.true results.forEach(result => { - expect(result.host).to.be.ok() + expect(result.host).to.be.ok expect(result.info).to.equal('status\tok\n') }) }) diff --git a/test/key.js b/test/key.js index 89feca03..3f06f904 100644 --- a/test/key.js +++ b/test/key.js @@ -17,6 +17,7 @@ 'use strict' /* global expect, describe, context, it */ +/* eslint-disable no-unused-expressions */ const Aerospike = require('../lib/aerospike') const Key = Aerospike.Key @@ -52,11 +53,11 @@ describe('Key #noserver', function () { context('set name', function () { it('allows null set name', function () { - expect(new Key('ns', null, 'key')).to.be.ok() + expect(new Key('ns', null, 'key')).to.be.ok }) it('allows undefined set name', function () { - expect(new Key('ns', undefined, 'key')).to.be.ok() + expect(new Key('ns', undefined, 'key')).to.be.ok }) it('rejects empty set name', function () { @@ -76,25 +77,25 @@ describe('Key #noserver', function () { const dummyDigest = Buffer.from([0x15, 0xc7, 0x49, 0xfd, 0x01, 0x54, 0x43, 0x8b, 0xa9, 0xd9, 0x5d, 0x0c, 0x6e, 0x27, 0x0f, 0x1a, 0x76, 0xfc, 0x31, 0x15]) it('allows string user key', function () { - expect(new Key('ns', 'set', 'abc')).to.be.ok() + expect(new Key('ns', 'set', 'abc')).to.be.ok }) it('allows string user key of arbitrary length', function () { - expect(new Key('ns', 'set', 'abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789')).to.be.ok() + expect(new Key('ns', 'set', 'abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789')).to.be.ok }) it('allows integer user key', function () { - expect(new Key('ns', 'set', 1234)).to.be.ok() - expect(new Key('ns', 'set', -1234)).to.be.ok() + expect(new Key('ns', 'set', 1234)).to.be.ok + expect(new Key('ns', 'set', -1234)).to.be.ok }) context('BigInt keys', function () { helper.skipUnless(this, bigint.bigIntSupported, 'BigInt not supported in this Node.js version') it('allows BigInt user key', function () { - expect(new Key('ns', 'set', BigInt(42))).to.be.ok() - expect(new Key('ns', 'set', BigInt(2) ** BigInt(63) - BigInt(1))).to.be.ok() - expect(new Key('ns', 'set', BigInt(-2) ** BigInt(63))).to.be.ok() + expect(new Key('ns', 'set', BigInt(42))).to.be.ok + expect(new Key('ns', 'set', BigInt(2) ** BigInt(63) - BigInt(1))).to.be.ok + expect(new Key('ns', 'set', BigInt(-2) ** BigInt(63))).to.be.ok }) it('rejects BigInt user keys outside valid range', function () { @@ -105,15 +106,15 @@ describe('Key #noserver', function () { it('allows byte array user key', function () { const buf = Buffer.from([0x62, 0x75, 0x66, 0x66, 0x65, 0x72]) - expect(new Key('ns', 'set', buf)).to.be.ok() + expect(new Key('ns', 'set', buf)).to.be.ok }) it('allows undefined user key', function () { - expect(new Key('ns', 'set', undefined, dummyDigest)).to.be.ok() + expect(new Key('ns', 'set', undefined, dummyDigest)).to.be.ok }) it('allows null user key', function () { - expect(new Key('ns', 'set', null, dummyDigest)).to.be.ok() + expect(new Key('ns', 'set', null, dummyDigest)).to.be.ok }) it('rejects empty string user key', function () { @@ -140,7 +141,7 @@ describe('Key #noserver', function () { context('digest', function () { it('allows creating a new key with just the namespace and digest', function () { const digest = Buffer.from([0x15, 0xc7, 0x49, 0xfd, 0x01, 0x54, 0x43, 0x8b, 0xa9, 0xd9, 0x5d, 0x0c, 0x6e, 0x27, 0x0f, 0x1a, 0x76, 0xfc, 0x31, 0x15]) - expect(new Key('ns', null, null, digest)).to.be.ok() + expect(new Key('ns', null, null, digest)).to.be.ok }) it('rejects a digest that is not a buffer', function () { @@ -157,78 +158,78 @@ describe('Key #noserver', function () { it('matches two keys with identical ns, set and user key', function () { const key1 = new Key('ns1', 'set1', 'key1') const key2 = new Key('ns1', 'set1', 'key1') - expect(key1.equals(key2)).to.be.true() - expect(key2.equals(key1)).to.be.true() + expect(key1.equals(key2)).to.be.true + expect(key2.equals(key1)).to.be.true }) it('matches two keys with identical ns, set, user key and digest', function () { const key1 = new Key('ns1', 'set1', 'key1', Buffer.from('a1b2c3d4e5f6g7h8i9j0')) const key2 = new Key('ns1', 'set1', 'key1', Buffer.from('a1b2c3d4e5f6g7h8i9j0')) - expect(key1.equals(key2)).to.be.true() - expect(key2.equals(key1)).to.be.true() + expect(key1.equals(key2)).to.be.true + expect(key2.equals(key1)).to.be.true }) it('matches two keys with identical ns, set and digest', function () { const key1 = new Key('ns1', 'set1', null, Buffer.from('a1b2c3d4e5f6g7h8i9j0')) const key2 = new Key('ns1', 'set1', null, Buffer.from('a1b2c3d4e5f6g7h8i9j0')) - expect(key1.equals(key2)).to.be.true() - expect(key2.equals(key1)).to.be.true() + expect(key1.equals(key2)).to.be.true + expect(key2.equals(key1)).to.be.true }) it('a key with digest to another key with identical ns, set and user key but without digest', function () { const key1 = new Key('ns1', 'set1', 'key1', Buffer.from('a1b2c3d4e5f6g7h8i9j0')) const key2 = new Key('ns1', 'set1', 'key1') - expect(key1.equals(key2)).to.be.true() - expect(key2.equals(key1)).to.be.true() + expect(key1.equals(key2)).to.be.true + expect(key2.equals(key1)).to.be.true }) it('matches two keys with identical ns, empty set and user key', function () { const key1 = new Key('ns1', null, 'key1') const key2 = new Key('ns1', null, 'key1') - expect(key1.equals(key2)).to.be.true() - expect(key2.equals(key1)).to.be.true() + expect(key1.equals(key2)).to.be.true + expect(key2.equals(key1)).to.be.true }) it('does not match two keys with different ns', function () { const key1 = new Key('ns1', 'set1', 'key1') const key2 = new Key('ns2', 'set1', 'key1') - expect(key1.equals(key2)).to.be.false() - expect(key2.equals(key1)).to.be.false() + expect(key1.equals(key2)).to.be.false + expect(key2.equals(key1)).to.be.false }) it('does not match two keys with different set', function () { const key1 = new Key('ns1', 'set1', 'key1') const key2 = new Key('ns1', 'set2', 'key1') - expect(key1.equals(key2)).to.be.false() - expect(key2.equals(key1)).to.be.false() + expect(key1.equals(key2)).to.be.false + expect(key2.equals(key1)).to.be.false }) it('does not match a key with set and a key without set', function () { const key1 = new Key('ns1', 'set1', 'key1') const key2 = new Key('ns1', null, 'key1') - expect(key1.equals(key2)).to.be.false() - expect(key2.equals(key1)).to.be.false() + expect(key1.equals(key2)).to.be.false + expect(key2.equals(key1)).to.be.false }) it('does not match two keys with different user keys', function () { const key1 = new Key('ns1', 'set1', 'key1') const key2 = new Key('ns1', 'set1', 'key2') - expect(key1.equals(key2)).to.be.false() - expect(key2.equals(key1)).to.be.false() + expect(key1.equals(key2)).to.be.false + expect(key2.equals(key1)).to.be.false }) it('does not match a key with user key and a key without user key', function () { const key1 = new Key('ns1', 'set1', 'key1', Buffer.from('a1b2c3d4e5f6g7h8i9j0')) const key2 = new Key('ns1', 'set1', null, Buffer.from('a1b2c3d4e5f6g7h8i9j0')) - expect(key1.equals(key2)).to.be.false() - expect(key2.equals(key1)).to.be.false() + expect(key1.equals(key2)).to.be.false + expect(key2.equals(key1)).to.be.false }) it('does not match two keys with different digests', function () { const key1 = new Key('ns1', 'set1', 'key1', Buffer.from('a1b2c3d4e5f6g7h8i9j0')) const key2 = new Key('ns1', 'set1', 'key1', Buffer.from('0j9i8h7g6f5e4d3c2b1a')) - expect(key1.equals(key2)).to.be.false() - expect(key2.equals(key1)).to.be.false() + expect(key1.equals(key2)).to.be.false + expect(key2.equals(key1)).to.be.false }) }) }) @@ -239,7 +240,7 @@ context('Plain Object Keys (for backward compatibility)', function () { it('accepts plain objects as user keys', function (done) { const key = { ns: helper.namespace, set: helper.set, key: 1234 } client.put(key, { foo: 'bar' }, function (err) { - expect(err).to.not.be.ok() + expect(err).to.not.be.ok done() }) }) diff --git a/test/lists.js b/test/lists.js index 6f339f58..13c9d631 100644 --- a/test/lists.js +++ b/test/lists.js @@ -18,6 +18,7 @@ /* eslint-env mocha */ /* global expect */ +/* eslint-disable no-unused-expressions */ const Aerospike = require('../lib/aerospike') const helper = require('./test_helper') @@ -858,7 +859,6 @@ describe('client.operate() - CDT List operations', function () { .then(cleanup) }) - it('creates a new list with persist index true and pad true', function () { return initState() .then(createRecord({ list: [1, 2, 3, 4, 5] })) @@ -882,7 +882,7 @@ describe('client.operate() - CDT List operations', function () { return initState() .then(createRecord({ map: { c: 1, b: 2, a: 3 } })) .then(operate(lists.create('map', lists.order.ORDERED).withContext(ctx => ctx.addMapKeyCreate('nested')))) - .then(assertRecordEql({ map: { c: 1, b: 2, a: 3, nested: []} })) + .then(assertRecordEql({ map: { c: 1, b: 2, a: 3, nested: [] } })) .then(cleanup) }) diff --git a/test/operate.js b/test/operate.js index 2a51251d..681d1f9f 100644 --- a/test/operate.js +++ b/test/operate.js @@ -18,6 +18,7 @@ /* eslint-env mocha */ /* global expect */ +/* eslint-disable no-unused-expressions */ const Aerospike = require('../lib/aerospike') const Double = Aerospike.Double @@ -83,7 +84,7 @@ context('Operations', function () { expect(new GeoJSON(record.bins.geo).toJSON()).to.eql( { type: 'Point', coordinates: [123.456, 1.308] } ) - expect(record.bins.blob.equals(Buffer.from('bar'))).to.be.ok() + expect(record.bins.blob.equals(Buffer.from('bar'))).to.be.ok expect(record.bins.list).to.eql([2, 3, 4]) expect(record.bins.map).to.eql({ d: 4, e: 5, f: 6 }) expect(record.bins.boolean).to.eql(true) @@ -275,7 +276,7 @@ context('Operations', function () { .then(() => 'error expected') .catch(error => expect(error).to.be.instanceof(AerospikeError).with.property('code', status.ERR_RECORD_NOT_FOUND)) .then(() => client.exists(notExistentKey)) - .then(exists => expect(exists).to.be.false()) + .then(exists => expect(exists).to.be.false) }) }) }) diff --git a/test/policy.js b/test/policy.js index 9da4886f..b2e03a24 100644 --- a/test/policy.js +++ b/test/policy.js @@ -18,6 +18,7 @@ /* eslint-env mocha */ /* global expect */ +/* eslint-disable no-unused-expressions */ const Aerospike = require('../lib/aerospike') const BasePolicy = require('../lib/policies/base_policy') @@ -37,7 +38,7 @@ context('Client Policies #noserver', function () { expect(subject.socketTimeout).to.equal(200) expect(subject.totalTimeout).to.equal(0) expect(subject.maxRetries).to.equal(2) - expect(subject.compress).to.be.true() + expect(subject.compress).to.be.true }) }) }) @@ -61,7 +62,7 @@ context('Client Policies #noserver', function () { expect(subject.key).to.equal(Aerospike.policy.key.SEND) expect(subject.commitLevel).to.equal(2) expect(subject.ttl).to.equal(3600) - expect(subject.durableDelete).to.be.true() + expect(subject.durableDelete).to.be.true }) }) }) @@ -89,7 +90,7 @@ context('Client Policies #noserver', function () { expect(subject.gen).to.equal(Aerospike.policy.gen.EQ) expect(subject.exists).to.equal(Aerospike.policy.exists.CREATE) expect(subject.commitLevel).to.equal(2) - expect(subject.durableDelete).to.be.true() + expect(subject.durableDelete).to.be.true }) }) }) @@ -136,8 +137,8 @@ context('Client Policies #noserver', function () { expect(subject.maxRetries).to.equal(1) expect(subject.readModeAP).to.equal(Aerospike.policy.readModeAP.ONE) expect(subject.readModeSC).to.equal(Aerospike.policy.readModeSC.SESSION) - expect(subject.allowInline).to.be.false() - expect(subject.sendSetName).to.be.true() + expect(subject.allowInline).to.be.false + expect(subject.sendSetName).to.be.true }) }) }) @@ -152,8 +153,8 @@ context('Client Policies #noserver', function () { }) expect(subject.timeout).to.equal(1000) - expect(subject.sendAsIs).to.be.true() - expect(subject.checkBounds).to.be.false() + expect(subject.sendAsIs).to.be.true + expect(subject.checkBounds).to.be.false }) }) }) @@ -179,7 +180,7 @@ context('Client Policies #noserver', function () { expect(subject.key).to.equal(Aerospike.policy.key.SEND) expect(subject.gen).to.equal(Aerospike.policy.gen.EQ) expect(subject.commitLevel).to.equal(2) - expect(subject.durableDelete).to.be.true() + expect(subject.durableDelete).to.be.true }) }) }) @@ -208,7 +209,7 @@ context('Client Policies #noserver', function () { expect(subject.readModeAP).to.equal(Aerospike.policy.readModeAP.ONE) expect(subject.readModeSC).to.equal(Aerospike.policy.readModeSC.SESSION) expect(subject.commitLevel).to.equal(2) - expect(subject.durableDelete).to.be.true() + expect(subject.durableDelete).to.be.true }) }) }) @@ -227,7 +228,7 @@ context('Client Policies #noserver', function () { expect(subject.socketTimeout).to.equal(1000) expect(subject.totalTimeout).to.equal(2000) expect(subject.maxRetries).to.equal(1) - expect(subject.durableDelete).to.be.true() + expect(subject.durableDelete).to.be.true expect(subject.recordsPerSecond).to.equal(100) }) }) diff --git a/test/put.js b/test/put.js index 3dab71b5..a715342b 100644 --- a/test/put.js +++ b/test/put.js @@ -577,7 +577,7 @@ describe('client.put()', function () { return client.put(key, { i: 49 }, {}, policy) .catch(error => expect(error).to.be.instanceof(AerospikeError).with.property('code', status.ERR_RECORD_NOT_FOUND)) .then(() => client.exists(key)) - .then(exists => expect(exists).to.be.false()) + .then(exists => expect(exists).to.be.false) }) }) diff --git a/test/query.js b/test/query.js index 6f65a2e6..51fec8e0 100644 --- a/test/query.js +++ b/test/query.js @@ -18,6 +18,7 @@ /* eslint-env mocha */ /* global expect */ +/* eslint-disable no-unused-expressions */ const Aerospike = require('../lib/aerospike') const Query = require('../lib/query') @@ -223,7 +224,7 @@ describe('Queries', function () { expect(query.ns).to.equal(helper.namespace) expect(query.set).to.equal('demo') expect(query.selected).to.eql(['a', 'b', 'c']) - expect(query.nobins).to.be.false() + expect(query.nobins).to.be.false expect(query.filters).to.be.instanceof(Array) expect(query.filters.length).to.equal(1) }) @@ -233,7 +234,7 @@ describe('Queries', function () { const query = client.query(namespace, { select: ['i'] }) expect(query).to.be.instanceof(Query) expect(query.ns).to.equal(helper.namespace) - expect(query.set).to.be.null() + expect(query.set).to.be.null expect(query.selected).to.eql(['i']) }) }) @@ -552,9 +553,9 @@ describe('Queries', function () { stream.abort() }) stream.on('end', () => { - expect(received.bins).to.be.empty() - expect(received.gen).to.be.ok() - expect(received.ttl).to.be.ok() + expect(received.bins).to.be.empty + expect(received.gen).to.be.ok + expect(received.ttl).to.be.ok done() }) }) @@ -571,9 +572,9 @@ describe('Queries', function () { stream.abort() }) stream.on('end', () => { - expect(received.bins).to.be.empty() - expect(received.gen).to.be.ok() - expect(received.ttl).to.be.ok() + expect(received.bins).to.be.empty + expect(received.gen).to.be.ok + expect(received.ttl).to.be.ok done() }) }) @@ -602,7 +603,7 @@ describe('Queries', function () { }, (error) => { throw error }, () => { - expect(dataHandlerCalled).to.be.true() + expect(dataHandlerCalled).to.be.true done() }) }) diff --git a/test/remove.js b/test/remove.js index 33f803fb..6fff8348 100644 --- a/test/remove.js +++ b/test/remove.js @@ -35,7 +35,7 @@ describe('client.remove()', function () { return client.put(key, { str: 'abcde' }) .then(() => client.remove(key)) .then(() => client.exists(key)) - .then(result => expect(result).to.be.false()) + .then(result => expect(result).to.be.false) }) it('returns an error when trying to remove a non-existing key', function () { @@ -59,7 +59,7 @@ describe('client.remove()', function () { return client.remove(key, policy) }) .then(() => client.exists(key)) - .then(result => expect(result).to.be.false()) + .then(result => expect(result).to.be.false) }) it('should not remove the record if the generation does not match', function () { @@ -76,7 +76,7 @@ describe('client.remove()', function () { expect(error).to.be.instanceof(AerospikeError).with.property('code', status.ERR_RECORD_GENERATION)) }) .then(() => client.exists(key)) - .then(result => expect(result).to.be.false()) + .then(result => expect(result).to.be.false) }) }) }) diff --git a/test/scan.js b/test/scan.js index a3c53c5a..d06f7c21 100644 --- a/test/scan.js +++ b/test/scan.js @@ -17,6 +17,7 @@ 'use strict' /* global expect, describe, it, before, after, context */ +/* eslint-disable no-unused-expressions */ const Aerospike = require('../lib/aerospike') const Scan = require('../lib/scan') @@ -70,9 +71,9 @@ context('Scans', function () { expect(scan).to.be.instanceof(Scan) expect(scan.ns).to.equal(helper.namespace) expect(scan.set).to.equal('demo') - expect(scan.concurrent).to.be.true() + expect(scan.concurrent).to.be.true expect(scan.selected).to.eql(['a', 'b', 'c']) - expect(scan.nobins).to.be.false() + expect(scan.nobins).to.be.false }) it('creates a scan without specifying the set', function () { @@ -80,7 +81,7 @@ context('Scans', function () { const scan = client.scan(namespace, { select: ['i'] }) expect(scan).to.be.instanceof(Scan) expect(scan.ns).to.equal(helper.namespace) - expect(scan.set).to.be.null() + expect(scan.set).to.be.null expect(scan.selected).to.eql(['i']) }) }) @@ -232,7 +233,7 @@ context('Scans', function () { const stream = scan.foreach() stream.on('data', record => { expect(record.key).to.be.instanceof(Key) - expect(record.key.key).to.not.be.empty() + expect(record.key.key).to.not.be.empty stream.abort() }) stream.on('end', done) @@ -249,7 +250,7 @@ context('Scans', function () { }, (error) => { throw error }, () => { - expect(dataHandlerCalled).to.be.true() + expect(dataHandlerCalled).to.be.true done() }) }) @@ -283,9 +284,9 @@ context('Scans', function () { const scan = client.scan(helper.namespace, testSet, { nobins: true }) const stream = scan.foreach() stream.on('data', record => { - expect(record.bins).to.be.empty() - expect(record.gen).to.be.ok() - expect(record.ttl).to.be.ok() + expect(record.bins).to.be.empty + expect(record.gen).to.be.ok + expect(record.ttl).to.be.ok stream.abort() }) stream.on('end', done) diff --git a/test/stats.js b/test/stats.js index fecc1386..4fd66342 100644 --- a/test/stats.js +++ b/test/stats.js @@ -18,6 +18,7 @@ /* eslint-env mocha */ /* global expect */ +/* eslint-disable no-unused-expressions */ const helper = require('./test_helper') const client = helper.client @@ -32,14 +33,14 @@ describe('Client#stats', function () { it('returns command queue stats', function () { const stats = client.stats() - expect(stats.commands).to.not.be.empty() + expect(stats.commands).to.not.be.empty expect(stats.commands.inFlight).to.be.at.least(0) expect(stats.commands.queued).to.be.at.least(0) }) it('returns cluster node stats', function () { const stats = client.stats() - expect(stats.nodes).to.be.an('array').that.is.not.empty() + expect(stats.nodes).to.be.an('array').that.is.not.empty const node = stats.nodes.pop() expect(node.name).to.be.a('string').of.length(15) diff --git a/test/test_helper.js b/test/test_helper.js index 9682b92d..a116cbf1 100644 --- a/test/test_helper.js +++ b/test/test_helper.js @@ -24,9 +24,7 @@ const path = require('path') const runInNewProcessFn = require('./util/run_in_new_process') const chai = require('chai') -const dirtyChai = require('dirty-chai') const expect = chai.expect -chai.use(dirtyChai) global.expect = expect exports.options = options From 8cde908e19a219585c4d8979676f9cd5124c66d2 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Thu, 15 Feb 2024 08:02:02 -0700 Subject: [PATCH 81/98] Reverted some dependenciess for CJS support --- package.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index fad8f661..0b97ce23 100644 --- a/package.json +++ b/package.json @@ -58,22 +58,22 @@ "dependencies": { "@mapbox/node-pre-gyp": "^1.0.11", "bindings": "^1.5.0", - "minimatch": "^9.0.3", + "minimatch": "^3.1.2", "nan": "^2.18.0", "node-gyp": "^10.0.1", "npm-run-all": "^4.1.5" }, "devDependencies": { "@types/node": "^20.11.18", - "chai": "^5.1.0", + "chai": "^4.3.7", "choma": "^1.2.1", "codecov": "^3.8.3", - "deep-eql": "^5.0.1", + "deep-eql": "^4.1.3", "husky": "^9.0.11", "mocha": "^10.3.0", "mocha-clean": "^1.0.0", "nyc": "^15.1.0", - "p-throttle": "^6.1.0", + "p-throttle": "^3.1.0", "semver": "^7.6.0", "standard": "^17.1.0", "tmp": "^0.2.1", From 112f2b87496d8b73b6ab8eebe3d31445e6b73475 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Thu, 15 Feb 2024 08:22:08 -0700 Subject: [PATCH 82/98] Added documentation Reverted mocha version for CJS support --- lib/policy.js | 2 +- lib/typedefs.js | 2 + package-lock.json | 412 ++++++++++++++-------------------------------- 3 files changed, 127 insertions(+), 289 deletions(-) diff --git a/lib/policy.js b/lib/policy.js index 67b1711e..b91e0297 100644 --- a/lib/policy.js +++ b/lib/policy.js @@ -60,7 +60,7 @@ const AdminPolicy = require('./policies/admin_policy') * * {@link WritePolicy} - Applies to {@link Client#put}. * * {@link BatchPolicy} - Applies to {@link Client#batchRead} as well as the * deprecated {@link Client#batchExists}, {@link Client#batchGet}, and {@link - * Client#batchSelect} operations. + * Client#batchSelect} operations. Also used when providing batchParentWrite policy to a client configuration. * * {@link BatchApplyPolicy} - Applies to {@link Client#batchApply}. * * {@link BatchReadPolicy} - Applies to {@link Client#batchRead}. * * {@link BatchRemovePolicy} - Applies to {@link Client#batchRemove}. diff --git a/lib/typedefs.js b/lib/typedefs.js index 76a2dd63..dcd8e1c4 100644 --- a/lib/typedefs.js +++ b/lib/typedefs.js @@ -229,6 +229,8 @@ * * @property {ApplyPolicy} apply - Default apply policy * @property {BatchPolicy} batch - Default batch policy + * @property {BatchPolicy} batchWrite - Default write policy used in batch operate commands. Contains a {@link BatchWritePolicy}. + * @property {BatchPolicy} batchParentWrite - Default parent policy used in batch write commands. Contains a {@link BatchPolicy}. * @property {InfoPolicy} info - Default info policy * @property {OperatePolicy} operate - Default operate policy * @property {ReadPolicy} read - Default read policy diff --git a/package-lock.json b/package-lock.json index 612f0503..85f9f556 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,22 +21,22 @@ "dependencies": { "@mapbox/node-pre-gyp": "^1.0.11", "bindings": "^1.5.0", - "minimatch": "^9.0.3", + "minimatch": "^3.1.2", "nan": "^2.18.0", "node-gyp": "^10.0.1", "npm-run-all": "^4.1.5" }, "devDependencies": { "@types/node": "^20.11.18", - "chai": "^5.1.0", + "chai": "^4.3.7", "choma": "^1.2.1", "codecov": "^3.8.3", - "deep-eql": "^5.0.1", + "deep-eql": "^4.1.3", "husky": "^9.0.11", "mocha": "^10.3.0", "mocha-clean": "^1.0.0", "nyc": "^15.1.0", - "p-throttle": "^6.1.0", + "p-throttle": "^3.1.0", "semver": "^7.6.0", "standard": "^17.1.0", "tmp": "^0.2.1", @@ -448,16 +448,6 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/@eslint/eslintrc/node_modules/globals": { "version": "13.24.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", @@ -485,18 +475,6 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/@eslint/eslintrc/node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -532,28 +510,6 @@ "node": ">=10.10.0" } }, - "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", @@ -1232,12 +1188,12 @@ } }, "node_modules/assertion-error": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", - "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true, "engines": { - "node": ">=12" + "node": "*" } }, "node_modules/asynciterator.prototype": { @@ -1283,11 +1239,12 @@ } }, "node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dependencies": { - "balanced-match": "^1.0.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, "node_modules/braces": { @@ -1371,6 +1328,14 @@ "node": "^16.14.0 || >=18.0.0" } }, + "node_modules/cacache/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/cacache/node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -1425,6 +1390,20 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, + "node_modules/cacache/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/cacache/node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -1549,19 +1528,21 @@ ] }, "node_modules/chai": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.0.tgz", - "integrity": "sha512-kDZ7MZyM6Q1DhR9jy7dalKohXQ2yrlXkk59CR52aRKxJrobmlBNqnFQxX9xOX8w+4mz8SYlKJa/7D7ddltFXCw==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", + "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==", "dev": true, "dependencies": { - "assertion-error": "^2.0.1", - "check-error": "^2.0.0", - "deep-eql": "^5.0.1", - "loupe": "^3.1.0", - "pathval": "^2.0.0" + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", + "pathval": "^1.1.1", + "type-detect": "^4.0.8" }, "engines": { - "node": ">=12" + "node": ">=4" } }, "node_modules/chalk": { @@ -1578,12 +1559,15 @@ } }, "node_modules/check-error": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.0.0.tgz", - "integrity": "sha512-tjLAOBHKVxtPoHe/SA7kNOMvhCRdCJ3vETdeY0RuAc9popf+hyaSV6ZEg9hr4cpWF7jmo/JSWEnLDrnijS9Tog==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", "dev": true, + "dependencies": { + "get-func-name": "^2.0.2" + }, "engines": { - "node": ">= 16" + "node": "*" } }, "node_modules/chokidar": { @@ -1784,10 +1768,13 @@ } }, "node_modules/deep-eql": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.1.tgz", - "integrity": "sha512-nwQCf6ne2gez3o1MxWifqkciwt0zhl0LO1/UwVu4uMBuPmflWM4oQ70XMqHqnBJA+nhzncaqL9HVL6KkHJ28lw==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", + "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", "dev": true, + "dependencies": { + "type-detect": "^4.0.0" + }, "engines": { "node": ">=6" } @@ -2319,16 +2306,6 @@ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" } }, - "node_modules/eslint-plugin-import/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/eslint-plugin-import/node_modules/debug": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", @@ -2350,18 +2327,6 @@ "node": ">=0.10.0" } }, - "node_modules/eslint-plugin-import/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/eslint-plugin-import/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -2396,28 +2361,6 @@ "eslint": ">=7.0.0" } }, - "node_modules/eslint-plugin-n/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint-plugin-n/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/eslint-plugin-promise": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", @@ -2460,16 +2403,6 @@ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, - "node_modules/eslint-plugin-react/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/eslint-plugin-react/node_modules/doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", @@ -2482,18 +2415,6 @@ "node": ">=0.10.0" } }, - "node_modules/eslint-plugin-react/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/eslint-plugin-react/node_modules/resolve": { "version": "2.0.0-next.5", "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", @@ -2596,16 +2517,6 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/eslint/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -2720,18 +2631,6 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/eslint/node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -3312,6 +3211,15 @@ "node": ">= 6" } }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/glob/node_modules/minimatch": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", @@ -3569,28 +3477,6 @@ "minimatch": "^3.0.4" } }, - "node_modules/ignore-walk/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/ignore-walk/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -4571,9 +4457,9 @@ } }, "node_modules/loupe": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.0.tgz", - "integrity": "sha512-qKl+FrLXUhFuHUoDJG7f8P8gEMHq9NFS0c6ghXG1J0rldmZFQZoNVv/vyirE9qwCIhWZDsvEFd1sbFu3GvRQFg==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", "dev": true, "dependencies": { "get-func-name": "^2.0.1" @@ -4639,17 +4525,14 @@ } }, "node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": "*" } }, "node_modules/minimist": { @@ -4843,6 +4726,15 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, + "node_modules/mocha/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/mocha/node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -5017,6 +4909,14 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/node-gyp/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/node-gyp/node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -5085,6 +4985,20 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, + "node_modules/node-gyp/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/node-gyp/node_modules/nopt": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.0.tgz", @@ -5221,26 +5135,6 @@ "node": ">= 4" } }, - "node_modules/npm-run-all/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/npm-run-all/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/npmlog": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", @@ -5308,16 +5202,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/nyc/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/nyc/node_modules/cliui": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", @@ -5392,18 +5276,6 @@ "node": ">=8" } }, - "node_modules/nyc/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/nyc/node_modules/p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -5683,15 +5555,12 @@ } }, "node_modules/p-throttle": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/p-throttle/-/p-throttle-6.1.0.tgz", - "integrity": "sha512-eQMdGTxk2+047La67wefUtt0tEHh7D+C8Jl7QXoFCuIiNYeQ9zWs2AZiJdIAs72rSXZ06t11me2bgalRNdy3SQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-throttle/-/p-throttle-3.1.0.tgz", + "integrity": "sha512-rLo81NXBihs3GJQhq89IXa0Egj/sbW1zW8/qnyadOwUhIUrZSUvyGdQ46ISRKELFBkVvmMJ4JUqWki4oAh30Qw==", "dev": true, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6" } }, "node_modules/p-try": { @@ -5799,12 +5668,12 @@ } }, "node_modules/pathval": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", - "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", "dev": true, "engines": { - "node": ">= 14.16" + "node": "*" } }, "node_modules/picocolors": { @@ -6293,15 +6162,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/rimraf/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/rimraf/node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -6321,17 +6181,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/rimraf/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -7024,16 +6873,6 @@ "node": ">=8" } }, - "node_modules/test-exclude/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/test-exclude/node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -7054,18 +6893,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/test-exclude/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -7155,6 +6982,15 @@ "node": ">= 0.8.0" } }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/type-fest": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", From 06461696003da2336a0a8307754a92826f13ef1b Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Thu, 15 Feb 2024 08:36:16 -0700 Subject: [PATCH 83/98] Fixing pipeline failures --- test/admin.js | 8 ++++---- test/batch_write.js | 3 ++- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/test/admin.js b/test/admin.js index 015209ad..6ba31666 100644 --- a/test/admin.js +++ b/test/admin.js @@ -440,7 +440,7 @@ context('admin commands', async function () { // Should fail, assert failure if error is not returned. expect(1).to.equal(2) } catch (error) { - expect(error).to.exist().and.have.property('code', Aerospike.status.INVALID_ROLE) + expect(error).to.exist.and.have.property('code', Aerospike.status.INVALID_ROLE) } }) @@ -452,7 +452,7 @@ context('admin commands', async function () { // Should fail, assert failure if error is not returned. expect(1).to.equal(2) } catch (error) { - expect(error).to.exist().and.have.property('code', Aerospike.status.INVALID_ROLE) + expect(error).to.exist.and.have.property('code', Aerospike.status.INVALID_ROLE) } }) }) @@ -494,7 +494,7 @@ context('admin commands', async function () { // Should fail, assert failure if error is not returned. expect(1).to.equal(2) } catch (error) { - expect(error).to.exist().and.have.property('code', Aerospike.status.INVALID_USER) + expect(error).to.exist.and.have.property('code', Aerospike.status.INVALID_USER) } }) it('With policy', async function () { @@ -505,7 +505,7 @@ context('admin commands', async function () { // Should fail, assert failure if error is not returned. expect(1).to.equal(2) } catch (error) { - expect(error).to.exist().and.have.property('code', Aerospike.status.INVALID_USER) + expect(error).to.exist.and.have.property('code', Aerospike.status.INVALID_USER) } }) }) diff --git a/test/batch_write.js b/test/batch_write.js index 958a5aac..5d73cfc6 100644 --- a/test/batch_write.js +++ b/test/batch_write.js @@ -515,7 +515,7 @@ describe('client.batchWrite()', function () { context('with BatchParentPolicy', function () { helper.skipUnlessVersion('>= 6.0.0', this) - + this.timeout(10000) it('returns list and map bins as byte buffers', async function () { const batch = [{ type: batchType.BATCH_READ, @@ -530,6 +530,7 @@ describe('client.batchWrite()', function () { } } + const dummyClient = await Aerospike.connect(config) const results = await dummyClient.batchWrite(batch) const bins = results[0].record.bins From b50e86804e098c604040d1a8aa0f367af59683db Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Thu, 15 Feb 2024 08:44:09 -0700 Subject: [PATCH 84/98] debugging pipeline failure --- test/batch_write.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/test/batch_write.js b/test/batch_write.js index 5d73cfc6..ca777ea8 100644 --- a/test/batch_write.js +++ b/test/batch_write.js @@ -513,7 +513,7 @@ describe('client.batchWrite()', function () { }) }) - context('with BatchParentPolicy', function () { + context('with BatchParentWritePolicy', function () { helper.skipUnlessVersion('>= 6.0.0', this) this.timeout(10000) it('returns list and map bins as byte buffers', async function () { @@ -523,8 +523,10 @@ describe('client.batchWrite()', function () { readAllBins: true }] + console.log(options.host + ':' + options.port) + console.log(helper.config.hosts) const config = { - hosts: options.host + ':' + options.port, + hosts: helper.config.hosts, policies: { batchParentWrite: new Aerospike.BatchPolicy({ socketTimeout: 0, totalTimeout: 0, deserialize: false }) } From 8226bf304eea5f899e8d022a48a2329c999cf2a9 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Thu, 15 Feb 2024 08:44:56 -0700 Subject: [PATCH 85/98] Ran standard fix --- test/batch_write.js | 1 - 1 file changed, 1 deletion(-) diff --git a/test/batch_write.js b/test/batch_write.js index ca777ea8..7057832f 100644 --- a/test/batch_write.js +++ b/test/batch_write.js @@ -532,7 +532,6 @@ describe('client.batchWrite()', function () { } } - const dummyClient = await Aerospike.connect(config) const results = await dummyClient.batchWrite(batch) const bins = results[0].record.bins From fa0bc22af8947513c2ca12d2ebaa99bdf7cadb31 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Thu, 15 Feb 2024 08:53:12 -0700 Subject: [PATCH 86/98] Fixed config for admin.js tests --- .github/workflows/tests.yml | 2 +- test/admin.js | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 2b2ab7ef..d4e83a0d 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -311,7 +311,7 @@ jobs: run: sleep 5 - name: Run tests - run: npm run test -- --h localhost --U admin --P admin --t 40000 test/admin.js + run: npm run test -- --h localhost --U superuser --P superuse --t 40000 test/admin.js test-valgrind: runs-on: ubuntu-latest diff --git a/test/admin.js b/test/admin.js index 6ba31666..cf7c7ddd 100644 --- a/test/admin.js +++ b/test/admin.js @@ -34,7 +34,7 @@ function wait (ms) { } context('admin commands', async function () { - if (helper.config.user !== 'admin') { + if (helper.config.user !== 'superuser') { return } const client = helper.client @@ -462,7 +462,7 @@ context('admin commands', async function () { client.changePassword(username1, 'password350', null) await wait(waitMs + 30000) const config = { - hosts: options.host + ':' + options.port, + hosts: helper.config.hosts, user: username1, password: 'password350' } @@ -475,7 +475,7 @@ context('admin commands', async function () { await wait(waitMs + 3000) const config = { - hosts: options.host + ':' + options.port, + hosts: helper.config.hosts, user: username2, password: 'password250' } From 58458d5a70e8863c55c9c04531481bbaa420a029 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Thu, 15 Feb 2024 09:20:47 -0700 Subject: [PATCH 87/98] Pipeline correction update typings ran npm lint --- .github/workflows/build-bindings.yml | 10 ++++++---- test/admin.js | 1 - typings/index.d.ts | 2 ++ 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build-bindings.yml b/.github/workflows/build-bindings.yml index edf31845..059c39bb 100644 --- a/.github/workflows/build-bindings.yml +++ b/.github/workflows/build-bindings.yml @@ -434,7 +434,7 @@ jobs: - name: Run tests run: | - mkdir -p testDir lib/binding/openssl@3/ lib/binding/openssl@1/ + mkdir -p testDir cd testDir npm install .. @@ -460,10 +460,11 @@ jobs: - name: Run tests run: | - mkdir -p testDir lib/binding/openssl@3/ lib/binding/openssl@1/ + mkdir -p testDir + yarn link cd testDir npm install --global yarn - yarn add file:.. + yarn add link:.. test-pnpm-install: runs-on: ubuntu-latest @@ -491,6 +492,7 @@ jobs: cd testDir sudo apt install wget wget -qO- https://get.pnpm.io/install.sh | sh - + export SHELL=/bin/sh pnpm install .. test-bun-install: @@ -547,7 +549,7 @@ jobs: cd my-aerospike-project npm init -y npm install typescript ts-node --save-dev - npm install aerospike + npm install .. cp ../examples/typescript.ts index.ts npx tsc index.ts node index.js diff --git a/test/admin.js b/test/admin.js index cf7c7ddd..8bb606d7 100644 --- a/test/admin.js +++ b/test/admin.js @@ -20,7 +20,6 @@ const Aerospike = require('../lib/aerospike') const helper = require('./test_helper') -const options = require('./util/options') function getRandomInt (max) { return Math.floor(Math.random() * max) diff --git a/typings/index.d.ts b/typings/index.d.ts index 968387c6..f4c53a56 100644 --- a/typings/index.d.ts +++ b/typings/index.d.ts @@ -881,6 +881,7 @@ declare module 'exp' { increment: (bin: any, value: any, idx: any, policy?: any, ctx?: any) => any; set: (bin: any, value: any, idx: any, policy?: any, ctx?: any) => any; clear: (bin: any, ctx?: any) => any; + create: (bin: any, order?: number, persistIndex?: pad, persistIndex?: boolean, ctx?: any) => any; sort: (bin: any, order: number, ctx?: any) => any; removeByValue: (bin: any, value: any, ctx?: any, returnType?: any) => any; removeByValueList: (bin: any, values: any, ctx?: any, returnType?: any) => any; @@ -899,6 +900,7 @@ declare module 'exp' { putItems: (bin: any, map: any, policy?: any, ctx?: any) => any; increment: (bin: any, value: any, key: any, policy?: any, ctx?: any) => any; clear: (bin: any, ctx?: any) => any; + create: (bin: any, order?: number, persistIndex?: boolean, ctx?: any) => any; removeByKey: (bin: any, key: any, ctx?: any, returnType?: any) => any; removeByKeyList: (bin: any, keys: any, ctx?: any, returnType?: any) => any; removeByKeyRange: (bin: any, end: any, begin: any, ctx?: any, returnType?: any) => any; From d1512b84a394c6ca4623aa0887e06de19eeac101 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Thu, 15 Feb 2024 09:29:14 -0700 Subject: [PATCH 88/98] pipeline correction --- .github/workflows/tests.yml | 2 +- typings/index.d.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index d4e83a0d..a8a47051 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -311,7 +311,7 @@ jobs: run: sleep 5 - name: Run tests - run: npm run test -- --h localhost --U superuser --P superuse --t 40000 test/admin.js + run: npm run test -- --h localhost --U superuser --P superuser --t 40000 test/admin.js test-valgrind: runs-on: ubuntu-latest diff --git a/typings/index.d.ts b/typings/index.d.ts index f4c53a56..28dde3cc 100644 --- a/typings/index.d.ts +++ b/typings/index.d.ts @@ -881,7 +881,7 @@ declare module 'exp' { increment: (bin: any, value: any, idx: any, policy?: any, ctx?: any) => any; set: (bin: any, value: any, idx: any, policy?: any, ctx?: any) => any; clear: (bin: any, ctx?: any) => any; - create: (bin: any, order?: number, persistIndex?: pad, persistIndex?: boolean, ctx?: any) => any; + create: (bin: any, order?: number, pad?: boolean, persistIndex?: boolean, ctx?: any) => any; sort: (bin: any, order: number, ctx?: any) => any; removeByValue: (bin: any, value: any, ctx?: any, returnType?: any) => any; removeByValueList: (bin: any, values: any, ctx?: any, returnType?: any) => any; From a4eaf0935152136dd43de8c9ab5f33b9d775ecfd Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Thu, 15 Feb 2024 09:37:06 -0700 Subject: [PATCH 89/98] debugging test-ee --- test/admin.js | 3 ++- test/batch_write.js | 2 -- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/test/admin.js b/test/admin.js index 8bb606d7..4a91337e 100644 --- a/test/admin.js +++ b/test/admin.js @@ -478,7 +478,8 @@ context('admin commands', async function () { user: username2, password: 'password250' } - console.log(config) + console.log(options.host + ':' + options.port) + console.log(helper.config.hosts) const dummyClient = await Aerospike.connect(config) return dummyClient.close() }) diff --git a/test/batch_write.js b/test/batch_write.js index 7057832f..aa735d1e 100644 --- a/test/batch_write.js +++ b/test/batch_write.js @@ -523,8 +523,6 @@ describe('client.batchWrite()', function () { readAllBins: true }] - console.log(options.host + ':' + options.port) - console.log(helper.config.hosts) const config = { hosts: helper.config.hosts, policies: { From 4cc38a7b53883e687f878549055e5f9df38c3da6 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Thu, 15 Feb 2024 09:45:06 -0700 Subject: [PATCH 90/98] pipeline troubleshooting --- test/admin.js | 1 + test/batch_write.js | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/test/admin.js b/test/admin.js index 4a91337e..f597730d 100644 --- a/test/admin.js +++ b/test/admin.js @@ -20,6 +20,7 @@ const Aerospike = require('../lib/aerospike') const helper = require('./test_helper') +const options = require('./util/options') function getRandomInt (max) { return Math.floor(Math.random() * max) diff --git a/test/batch_write.js b/test/batch_write.js index aa735d1e..2d44ad79 100644 --- a/test/batch_write.js +++ b/test/batch_write.js @@ -34,7 +34,6 @@ const metagen = helper.metagen const recgen = helper.recgen const putgen = helper.putgen const valgen = helper.valgen -const options = require('./util/options') const Key = Aerospike.Key From 9b0ec945c2b6c5df58d0dac73bd612b4e2ba5670 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Thu, 15 Feb 2024 09:55:59 -0700 Subject: [PATCH 91/98] Added windows and codeql pipelines back Expanded ee testing --- .github/workflows/codeql.yml | 62 +++++++++++++++++++++++ .github/workflows/tests.yml | 2 +- .github/workflows/windows-build.yml | 77 +++++++++++++++++++++++++++++ 3 files changed, 140 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/codeql.yml create mode 100644 .github/workflows/windows-build.yml diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml new file mode 100644 index 00000000..c532c4c7 --- /dev/null +++ b/.github/workflows/codeql.yml @@ -0,0 +1,62 @@ +# For most projects, this workflow file will not need changing; you simply need +# to commit it to your repository. +# +# You may wish to alter this file to override the set of languages analyzed, +# or to provide custom queries or build logic. +# +# ******** NOTE ******** +# We have attempted to detect the languages in your repository. Please check +# the `language` matrix defined below to confirm you have the correct set of +# supported CodeQL languages. +# +name: "CodeQL" + +on: + workflow_dispatch: + +jobs: + analyze: + name: Analyze + runs-on: ubuntu-latest + permissions: + actions: read + contents: read + security-events: write + + strategy: + fail-fast: false + matrix: + language: [ 'javascript' ] + # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ] + # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support + node-version: # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ + - 20.x + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + with: + submodules: recursive + - run: ./scripts/build-c-client.sh + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v2 + with: + node-version: ${{ matrix.node-version }} + cache: 'npm' + - run: npm install --unsafe-perm --build-from-source + + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@v2 + with: + languages: ${{ matrix.language }} + # If you wish to specify custom queries, you can do so here or in a config file. + # By default, queries listed here will override any specified in a config file. + # Prefix the list here with "+" to use these queries and those in the config file. + # Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs + # queries: security-extended,security-and-quality + + # Perform CodeQL Analysis + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v2 + \ No newline at end of file diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index a8a47051..266a049e 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -311,7 +311,7 @@ jobs: run: sleep 5 - name: Run tests - run: npm run test -- --h localhost --U superuser --P superuser --t 40000 test/admin.js + run: npm run test -- --h localhost --U superuser --P superuser --t 40000 test-valgrind: runs-on: ubuntu-latest diff --git a/.github/workflows/windows-build.yml b/.github/workflows/windows-build.yml new file mode 100644 index 00000000..70d8bdf9 --- /dev/null +++ b/.github/workflows/windows-build.yml @@ -0,0 +1,77 @@ +# This workflow will do a clean install of node dependencies, cache/restore them, build the source code and run tests across different versions of node +# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions + +name: Aerospike Node.js Windows Client Tests + +on: + push: + branches: + - master + - maint/3.x + - maint/4.x + - gh-action + pull_request: + branches: + - master + - stage + - maint/3.x + - maint/4.x + +jobs: + # setup: + # runs-on: ubuntu-latest + # steps: + # - name: Set up Aerospike Database + # uses: reugn/github-action-aerospike@v1 + + build: + runs-on: windows-latest + strategy: + matrix: + node-version: # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ + - 18.x + - 20.x + - 21.x + continue-on-error: true + name: Node ${{ matrix.node-version }} tester + steps: + - uses: actions/checkout@v3 + with: + submodules: recursive + - uses: actions/setup-python@v4 + with: + python-version: '3.11' + - name: Setup Windows SDK + uses: GuillaumeFalourd/setup-windows10-sdk-action@v1.11 + with: + sdk-version: 17763 + - name: Setup NuGet.exe + uses: nuget/setup-nuget@v1 + with: + nuget-version: latest + - run: nuget restore aerospike.sln + working-directory: aerospike-client-c\vs\ + - name: Setup node + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node-version }} + - name: Update node-gyp + run: | + $WhereNode = Get-Command node | Select-Object -ExpandProperty Definition + $NodeDirPath = Split-Path $WhereNode -Parent + [Version]$npmVersion = npm --version + if ($npmVersion -lt [Version]"7.0") { + $NodeModulesPath = $NodeDirPath + "\node_modules\npm\node_modules\npm-lifecycle" + } else { + $NodeModulesPath = $NodeDirPath + "\node_modules\npm\node_modules\@npmcli\run-script" + } + cd $NodeModulesPath + npm install node-gyp@10.x + - name: Install nodejs Client + shell: pwsh + run: npm ci --unsafe-perm --build-from-source + # - name: Test nodejs client + # run: npm test + # env: + # AEROSPIKE_HOSTS: "127.0.0.1:3000" + # OPTIONS: "--timeout 30000 --set demp ${{ matrix.node }}" \ No newline at end of file From faf9dbe4b41085e95e4681a904d97218344b8d33 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Thu, 15 Feb 2024 10:06:01 -0700 Subject: [PATCH 92/98] Modified ee testing --- .github/workflows/tests.yml | 2 +- test/admin.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 266a049e..2b2ab7ef 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -311,7 +311,7 @@ jobs: run: sleep 5 - name: Run tests - run: npm run test -- --h localhost --U superuser --P superuser --t 40000 + run: npm run test -- --h localhost --U admin --P admin --t 40000 test/admin.js test-valgrind: runs-on: ubuntu-latest diff --git a/test/admin.js b/test/admin.js index f597730d..f8031011 100644 --- a/test/admin.js +++ b/test/admin.js @@ -34,7 +34,7 @@ function wait (ms) { } context('admin commands', async function () { - if (helper.config.user !== 'superuser') { + if (helper.config.user !== 'admin') { return } const client = helper.client From c2caa5e3fae4a0ecd4f30124b9c8a9f34352089f Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Thu, 15 Feb 2024 10:17:53 -0700 Subject: [PATCH 93/98] Fixing pnpm and typescript workflow --- .github/workflows/build-bindings.yml | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-bindings.yml b/.github/workflows/build-bindings.yml index 059c39bb..752954c4 100644 --- a/.github/workflows/build-bindings.yml +++ b/.github/workflows/build-bindings.yml @@ -490,9 +490,9 @@ jobs: run: | mkdir -p testDir cd testDir - sudo apt install wget - wget -qO- https://get.pnpm.io/install.sh | sh - - export SHELL=/bin/sh + npm install --global pnpm + SHELL=bash pnpm setup + source /root/.bashrc pnpm install .. test-bun-install: @@ -538,6 +538,21 @@ jobs: node-version: ${{ env.LOWEST_SUPPORTED_NODEJS_VERSION }} architecture: 'x64' + - if: ${{ contains(github.event.pull_request.labels.*.name, 'new-server-features') }} + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKER_HUB_BOT_USERNAME }} + password: ${{ secrets.DOCKER_HUB_BOT_PW }} + + + - name: Run Aerospike server release candidate with latest tag + if: ${{ contains(github.event.pull_request.labels.*.name, 'new-server-features') }} + run: docker run -d --name aerospike -p 3000-3002:3000-3002 aerospike/aerospike-server-rc:latest + + - name: Run Aerospike server + if: ${{ !contains(github.event.pull_request.labels.*.name, 'new-server-features') }} + run: docker run -d --name aerospike -p 3000-3002:3000-3002 aerospike/aerospike-server + - name: Modify the package.json run: | npm install -g json @@ -555,3 +570,4 @@ jobs: node index.js + From f7b39aa2beaf4bdf4e504bd59bc1ccdc121c8a13 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Thu, 15 Feb 2024 10:23:46 -0700 Subject: [PATCH 94/98] pnpm pipepline fix --- .github/workflows/build-bindings.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-bindings.yml b/.github/workflows/build-bindings.yml index 752954c4..c7ed27de 100644 --- a/.github/workflows/build-bindings.yml +++ b/.github/workflows/build-bindings.yml @@ -492,7 +492,7 @@ jobs: cd testDir npm install --global pnpm SHELL=bash pnpm setup - source /root/.bashrc + sudo source /home/runner/.bashrc pnpm install .. test-bun-install: @@ -552,7 +552,7 @@ jobs: - name: Run Aerospike server if: ${{ !contains(github.event.pull_request.labels.*.name, 'new-server-features') }} run: docker run -d --name aerospike -p 3000-3002:3000-3002 aerospike/aerospike-server - + - name: Modify the package.json run: | npm install -g json From 79e279674ae7e9dcb73750cbfa9dd038fe896e4a Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Thu, 15 Feb 2024 10:26:27 -0700 Subject: [PATCH 95/98] remove console.log --- test/admin.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/test/admin.js b/test/admin.js index f8031011..b831a52a 100644 --- a/test/admin.js +++ b/test/admin.js @@ -479,8 +479,7 @@ context('admin commands', async function () { user: username2, password: 'password250' } - console.log(options.host + ':' + options.port) - console.log(helper.config.hosts) + const dummyClient = await Aerospike.connect(config) return dummyClient.close() }) From c9aa1578a7385592ab817c7e73515b3b2f449869 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Thu, 15 Feb 2024 10:28:56 -0700 Subject: [PATCH 96/98] npm run lint --- test/admin.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/test/admin.js b/test/admin.js index b831a52a..71786696 100644 --- a/test/admin.js +++ b/test/admin.js @@ -20,7 +20,6 @@ const Aerospike = require('../lib/aerospike') const helper = require('./test_helper') -const options = require('./util/options') function getRandomInt (max) { return Math.floor(Math.random() * max) @@ -479,7 +478,7 @@ context('admin commands', async function () { user: username2, password: 'password250' } - + const dummyClient = await Aerospike.connect(config) return dummyClient.close() }) From 333091d8966153f1de2c1479c64d9b2eb25bb78d Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Thu, 15 Feb 2024 10:36:19 -0700 Subject: [PATCH 97/98] Corrected pnpm workflow --- .github/workflows/build-bindings.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-bindings.yml b/.github/workflows/build-bindings.yml index c7ed27de..7b846a3f 100644 --- a/.github/workflows/build-bindings.yml +++ b/.github/workflows/build-bindings.yml @@ -492,7 +492,7 @@ jobs: cd testDir npm install --global pnpm SHELL=bash pnpm setup - sudo source /home/runner/.bashrc + source /home/runner/.bashrc pnpm install .. test-bun-install: From 8680a0523fc5a182da5258b4f353c89fe5c91663 Mon Sep 17 00:00:00 2001 From: Dominic Pelini <111786059+DomPeliniAerospike@users.noreply.github.com> Date: Fri, 16 Feb 2024 10:58:34 -0700 Subject: [PATCH 98/98] Added windows documentation --- README.md | 4 ++++ README_WINDOWS.md | 37 ++++++++++++++++++++++--------------- lib/lists.js | 4 ++-- package-lock.json | 28 ++++++++++++++-------------- package.json | 2 +- 5 files changed, 43 insertions(+), 32 deletions(-) diff --git a/README.md b/README.md index d104d596..bbadb18d 100644 --- a/README.md +++ b/README.md @@ -188,6 +188,10 @@ To install library prerequisites using `apt`: sudo apt install g++ libssl libssl-dev zlib1g-dev ``` +### Windows + +See our [Windows README.md](https://github.com/aerospike/aerospike-client-nodejs/blob/master/README_WINDOWS.md) for details on how to build and install on windows. + ### macOS Before starting with the Aerospike Nodejs Client, verify that you have the following prerequisites: diff --git a/README_WINDOWS.md b/README_WINDOWS.md index 0ed0d410..fdd12787 100644 --- a/README_WINDOWS.md +++ b/README_WINDOWS.md @@ -3,37 +3,44 @@ [appveyor-image]: https://ci.appveyor.com/api/projects/status/1pwlt87blqrmgyis/branch/master?svg=true [appveyor-url]: https://ci.appveyor.com/project/aerospike/aerospike-client-nodejs/ -The Aerospike Node.js client port to Windows is a community supported project -and suitable for application prototyping and development. - ## Prerequisites -* Windows 7 or later -* Node.js v10.x (LTS) or later +Visual Studio is used to manage the Aerospike Node.js Client on Windows. Many components can be installed using the Visual Studio installer. Neccessary components include: + +* C++ core features +* MSVC (v143 recommended) +* Windows SDK (11 recommended) -The package includes a native add-on. To compile the add-on, Microsoft's Visual -C++ Build Tools 2015 are required, which you can download from the -[Visual Studio website](https://visualstudio.microsoft.com/vs/older-downloads/). -The required components are: +Powershell 7 is required to build the project. DO NOT use Windows Powershell; it will cause your install to fail. -* Windows 8.1 SDK -* Visual C++ 2015 (v140) Toolset for Desktop +Python 3.11 or below is also required to build the project. -![Windows 8.1 SDK](./docs/assets/windows-8-1-sdk.png) -![VC++ 2015.3 v14.00 (v140) toolset for desktop](./docs/assets/vc-2015-3-v140.png) +When building the project, make sure the full path of the project directory does not have any spaces. C:\Users\Administrator\Documents\Visual Studio 2022\aerospike will fail to build. +The error given will be `error MSB1008: Only one project can be specified`. ## Aerospike C Client SDK The Aerospike Node.js client depends on the Aerospike C client. During installation, a copy of the C client SDK is downloaded and compiled. + Additionally, a set of pre-built, third-party libraries are downloaded and installed via the [`aerospike-client-c-dependencies`](https://www.nuget.org/packages/aerospike-client-c-dependencies) -nuget package. Please refer to the [Aerospike C client +nuget package. These dependencies are required to build the project on Windows. To download these dependencies, use `nuget restore aerospike.sln` inside the `aerospike-client-c/vs` folder, or simply restoring the package inside the solution view of visual studio. + +Please refer to the [Aerospike C client documentation](https://github.com/aerospike/aerospike-client-c/tree/master/vs) -for further information. +for further information on the visual studio build steps. + +## Builidng the C Client dependency + +If you are building on a local machine, you will need to build the C Cient dependency. This can be achieved by using the build script located at `scripts\build-package.ps1` + +## Install the Aerospike Node.js Client + +If you only wish to install the Client, the `aerospike` npm package supports windows installation using [nvm-windows](https://github.com/coreybutler/nvm-windows). ## Frequently Asked Questions diff --git a/lib/lists.js b/lib/lists.js index 92dc7205..ce18969e 100644 --- a/lib/lists.js +++ b/lib/lists.js @@ -1080,7 +1080,7 @@ exports.clear = function (bin) { } /** - * @summary Creates map create operation. + * @summary Creates list create operation. * * * @param {string} bin - bin name. @@ -1098,7 +1098,7 @@ exports.clear = function (bin) { * * const Aerospike = require('aerospike') * const lists = Aerospike.lists - * const key = new Aerospike.Key('test', 'demo', 'mapKey') + * const key = new Aerospike.Key('test', 'demo', 'listKey') * * // INSERT HOSTNAME AND PORT NUMBER OF AEROSPIKE SERVER NODE HERE! * var config = { diff --git a/package-lock.json b/package-lock.json index 85f9f556..b8285830 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "aerospike", - "version": "5.10.0", + "version": "5.11.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "aerospike", - "version": "5.10.0", + "version": "5.11.0", "cpu": [ "x64", "arm64" @@ -824,9 +824,9 @@ } }, "node_modules/@npmcli/agent/node_modules/https-proxy-agent": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.3.tgz", - "integrity": "sha512-kCnwztfX0KZJSLOBrcL0emLeFako55NWMovvyPP2AjsghNk9RB1yjSI+jVumPHYZsNXegNoqupSW9IY3afSH8w==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", + "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", "dependencies": { "agent-base": "^7.0.2", "debug": "4" @@ -871,9 +871,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.11.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.18.tgz", - "integrity": "sha512-ABT5VWnnYneSBcNWYSCuR05M826RoMyMSGiFivXGx6ZUIsXb9vn4643IEwkg2zbEOSgAiSogtapN2fgc4mAPlw==", + "version": "20.11.19", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.19.tgz", + "integrity": "sha512-7xMnVEcZFu0DikYjWOlRq7NTPETrm7teqUT2WkQjrTIkEgUyyGdWsj/Zg8bEJt5TNklzbPD1X3fqfsHw3SpapQ==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -1872,9 +1872,9 @@ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" }, "node_modules/electron-to-chromium": { - "version": "1.4.670", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.670.tgz", - "integrity": "sha512-hcijYOWjOtjKrKPtNA6tuLlA/bTLO3heFG8pQA6mLpq7dRydSWicXova5lyxDzp1iVJaYhK7J2OQlGE52KYn7A==", + "version": "1.4.672", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.672.tgz", + "integrity": "sha512-YYCy+goe3UqZqa3MOQCI5Mx/6HdBLzXL/mkbGCEWL3sP3Z1BP9zqAzeD3YEmLZlespYGFtyM8tRp5i2vfaUGCA==", "dev": true }, "node_modules/emoji-regex": { @@ -3398,9 +3398,9 @@ "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" }, "node_modules/http-proxy-agent": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.1.tgz", - "integrity": "sha512-My1KCEPs6A0hb4qCVzYp8iEvA8j8YqcvXLZZH8C9OFuTYpYjHE7N2dtG3mRl1HMD4+VGXpF3XcDVcxGBT7yDZQ==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" diff --git a/package.json b/package.json index 0b97ce23..7ec7667b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "aerospike", - "version": "5.10.0", + "version": "5.11.0", "description": "Aerospike Client Library", "keywords": [ "aerospike",