diff --git a/.appveyor.yml b/.appveyor.yml index 04831096..62c3f278 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -1,12 +1,12 @@ image: - - Visual Studio 2017 - Visual Studio 2019 + - Visual Studio 2022 platform: x64 environment: matrix: - - nodejs_version: "19" - nodejs_version: "18" - - nodejs_version: "16" + - nodejs_version: "20" + - nodejs_version: "22" install: - ps: Install-Product node $env:nodejs_version $env:platform diff --git a/.github/workflows/build-bindings.yml b/.github/workflows/build-bindings.yml index 1666c76e..042d7258 100644 --- a/.github/workflows/build-bindings.yml +++ b/.github/workflows/build-bindings.yml @@ -94,7 +94,7 @@ jobs: nodejs: [ ["v108", 18], ["v115", 20], - ["v120", 21] + ["v127", 22] ] platform: [ "x86_64", @@ -166,7 +166,7 @@ jobs: id: runcmd with: arch: aarch64 - distro: ubuntu22.04 + distro: ubuntu-22.04 # Set an output parameter `uname` for use in subsequent steps run: | @@ -175,7 +175,7 @@ jobs: ./scripts/build-c-client.sh wget https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash; source ~/.bashrc; - nvm i 20 + nvm i 22 npm install - name: Build client x64 @@ -215,9 +215,9 @@ jobs: nodejs: [ ["v108", 18], ["v115", 20], - ["v120", 21] + ["v127", 22] ] - runs-on: macos-latest + runs-on: macos-13 steps: - name: Show job status for commit uses: myrotvorets/set-commit-status-action@v2.0.0 @@ -301,7 +301,7 @@ jobs: # nodejs-version: [ # ["v108", "18"], # ["v115", "20"], -# ["v120", "21"], +# ["v127", 22] # ] # fail-fast: false # steps: @@ -413,7 +413,7 @@ jobs: # context: "Build bindings (${{ matrix.nodejs-version[0] }}-macosx_arm64)" test-npm-install: - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 needs: [manylinux, macOS-x86] steps: - uses: actions/checkout@v2 @@ -430,16 +430,22 @@ jobs: - name: Modify the package.json run: | sudo npm install -g json - json -I -f package.json -e "this.scripts.install=\"npm-run-all removeExtraBinaries build\"" + + - name: Modify the package.json + run: | + sudo 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 cd testDir + pwd sudo npm install .. test-yarn-install: - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 needs: [manylinux, macOS-x86] steps: - uses: actions/checkout@v2 @@ -467,7 +473,7 @@ jobs: yarn add link:.. test-pnpm-install: - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 needs: [manylinux, macOS-x86] steps: - uses: actions/checkout@v2 @@ -524,7 +530,7 @@ jobs: bun link aerospike test-typescript-install: - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 needs: [manylinux, macOS-x86] steps: - uses: actions/checkout@v2 diff --git a/.github/workflows/combine-bindings/action.yml b/.github/workflows/combine-bindings/action.yml index c5ccb6c1..e5cec388 100644 --- a/.github/workflows/combine-bindings/action.yml +++ b/.github/workflows/combine-bindings/action.yml @@ -26,11 +26,11 @@ runs: # - uses: actions/download-artifact@v4 # with: -# name: v120-macosx_aarch64.build +# name: v127-macosx_aarch64.build - uses: actions/download-artifact@v4 with: - name: v120-macosx_x86_64.build + name: v127-macosx_x86_64.build - uses: actions/download-artifact@v4 with: @@ -50,32 +50,31 @@ runs: - uses: actions/download-artifact@v4 with: - name: v120-manylinux_x86_64.build + name: v127-manylinux_x86_64.build # - uses: actions/download-artifact@v4 # with: -# name: v120-manylinux_aarch64.build +# name: v127-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/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 - 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 + mkdir -p lib/binding/node-v108-darwin-arm64 lib/binding/node-v115-darwin-arm64 lib/binding/node-v127-darwin-arm64 + mkdir -p lib/binding/glibc@2.39/node-v108-linux-arm64 lib/binding/glibc@2.39/node-v115-linux-arm64 lib/binding/glibc@2.39/node-v127-linux-arm64 + mkdir -p lib/binding/glibc@2.35/node-v108-linux-arm64 lib/binding/glibc@2.35/node-v115-linux-arm64 lib/binding/glibc@2.35/node-v127-linux-arm64 + mkdir -p lib/binding/glibc@2.31/node-v108-linux-arm64 lib/binding/glibc@2.31/node-v115-linux-arm64 lib/binding/glibc@2.31/node-v127-linux-arm64 + mkdir -p lib/binding/glibc@2.39/node-v108-linux-x64 lib/binding/glibc@2.39/node-v115-linux-x64 lib/binding/glibc@2.39/node-v127-linux-x64 + mkdir -p lib/binding/glibc@2.35/node-v108-linux-x64 lib/binding/glibc@2.35/node-v115-linux-x64 lib/binding/glibc@2.35/node-v127-linux-x64 + mkdir -p lib/binding/glibc@2.31/node-v108-linux-x64 lib/binding/glibc@2.31/node-v115-linux-x64 lib/binding/glibc@2.31/node-v127-linux-x64 + cp -r node-v108-linux-x64 lib/binding/glibc@2.35/ + cp -r node-v115-linux-x64 lib/binding/glibc@2.35/ + cp -r node-v127-linux-x64 lib/binding/glibc@2.35/ 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-v127-darwin-x64 lib/binding/node-v127-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-v127-linux-arm64 lib/binding/node-v127-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 - - - +# cp -r node-v127-darwin-arm64 lib/binding/node-v127-darwin-arm64 \ No newline at end of file diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 58431939..0d642062 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -40,7 +40,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - nodejs-version: ["18", "20", "21"] + nodejs-version: ["18", "20", "22"] fail-fast: false steps: - uses: actions/checkout@v4 @@ -170,7 +170,7 @@ jobs: node-version: [ "18", "20", - "21" + "22" ] fail-fast: false @@ -201,8 +201,8 @@ jobs: 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 + elif [ "${{ matrix.node-version }}" = "22" ]; then + cp -r node-v127-linux-x64 lib/binding/node-v127-linux-x64 fi - if: ${{ contains(github.event.pull_request.labels.*.name, 'new-server-features') }} @@ -265,7 +265,7 @@ jobs: run: sleep 3 - name: Run tests - run: npm run test + run: npm run test -- --t 20000 test-ee: runs-on: ubuntu-latest diff --git a/.github/workflows/windows-build.yml b/.github/workflows/windows-build.yml index 70d8bdf9..3a54bf9b 100644 --- a/.github/workflows/windows-build.yml +++ b/.github/workflows/windows-build.yml @@ -31,7 +31,7 @@ jobs: node-version: # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ - 18.x - 20.x - - 21.x + - 22.x continue-on-error: true name: Node ${{ matrix.node-version }} tester steps: diff --git a/CHANGELOG.md b/CHANGELOG.md index dee6c03a..4b0bdf61 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,45 @@ # Changelog All notable changes to this project will be documented in this file. + +## [5.12.1] + +* **Breaking Changes** + * [CLIENT-2984] - Dropped support for Node.js 21. + +* **New Features** + * [CLIENT-2976] - Added support for Ubuntu 24.04. + * [CLIENT-2977] - Added support for Node.js 22. +* **Bug Fixes** + * [CLIENT-2975] - Fixed issue with TLS pending buffer calculation in as_uv_tls_try_send_pending(). + +## [5.12.0] + +* **New Features** + * [CLIENT-2822] - Added the queryDuration enumeration to the policy module. The following values are supported: + * Aerospike.policy.queryDuration.LONG + * Aerospike.policy.queryDuration.SHORT + * Aerospike.policy.queryDuration.LONG_RELAX_AP + * [CLIENT-2822] - Added expectedDuration member to QueryPolicy. Use the queryDuration enumeration when setting expectedDuration. + * [CLIENT-2829] - Added support for readTouchTtlPercent for the following policies: + * ReadPolicy + * OperatePolicy + * BatchPolicy + * BatchReadPolicy + +## [5.11.0] + +* **New Features** + * [CLIENT-2770] - Added support for persistent list indexes. + * [CLIENT-2774] - Added 'ttl' property to 'batchWrite' policy. + * [CLIENT-2793] - Added support for the batchParentWrite policy in the client config policy. + * [CLIENT-2795] - Added the 'create' method for the 'aerospike/list' module. + +* **Bug Fixes** + * [CLIENT-2773] - Added missing error codes to status.js. + * [CLIENT-2794] - Fixed typescript compiler errors. + * [CLIENT-2781] - Batch repeat flag is no longer set on batch writes when the 'sendKey' policy is true. + ## [5.10.0] * **New Features** diff --git a/README.md b/README.md index bbadb18d..f33adabc 100644 --- a/README.md +++ b/README.md @@ -11,12 +11,12 @@ The Aerospike Node.js client is a Node.js add-on module, written using V8. -The client is compatible with Node.js 20 (Upcoming LTS) and 18 (LTS). +The client is compatible with Node.js 22, (Upcoming LTS), Node.js 20 (LTS),and 18 (LTS). It supports the following operating systems: - RHEL 8/9 - Debian 11 - Amazon Linux 2023 -- Ubuntu 20.04/22.04 (Focal Fossa, Jammy Jellyfish) +- Ubuntu 20.04/22.04/24.04 (Focal Fossa, Jammy Jellyfish, Noble Numbat) - Many Linux distributions compatible with one of the above OS releases. - macOS 12/13/14 diff --git a/aerospike-client-c b/aerospike-client-c index 49b8298d..54e25075 160000 --- a/aerospike-client-c +++ b/aerospike-client-c @@ -1 +1 @@ -Subproject commit 49b8298dfeb65f812be03544b907800054e827b7 +Subproject commit 54e25075646e815f023b5923603d35fa9d9b8f00 diff --git a/incompatible.md b/incompatible.md index 0f3ace53..6d53c7a7 100644 --- a/incompatible.md +++ b/incompatible.md @@ -1,6 +1,19 @@ # Backward Incompatible API Changes All notable changes to this project will be documented in this file. + +## [5.12.1] +### Client no longer supports Node.js version 21 + +## [5.9.0] + +### Client no longer supports Red Hat Enterprise Linux 7 +### Client no longer supports Amazon Linux 2 +### Client no longer supports Oracle Linux 7 +### Client no longer supports CentOS 7 +### Client no longer supports Debian 10 +### Client no longer supports macOS 11 + ## [5.8.0] ### Client no longer supports Node.js version 19 diff --git a/package-lock.json b/package-lock.json index 39fad55d..de872168 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "aerospike", - "version": "5.11.0", + "version": "5.12.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "aerospike", - "version": "5.11.0", + "version": "5.12.1", "cpu": [ "x64", "arm64" @@ -46,15 +46,6 @@ "node": ">=4" } }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/@ampproject/remapping": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", @@ -69,12 +60,12 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.24.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", - "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.6.tgz", + "integrity": "sha512-ZJhac6FkEd1yhG2AHOmfcXG4ceoLltoCVJjN5XsWN9BifBQr+cHJbWi0h68HZuSORq+3WtJ2z0hwF2NG1b5kcA==", "dev": true, "dependencies": { - "@babel/highlight": "^7.24.2", + "@babel/highlight": "^7.24.6", "picocolors": "^1.0.0" }, "engines": { @@ -82,30 +73,30 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.24.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.4.tgz", - "integrity": "sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.6.tgz", + "integrity": "sha512-aC2DGhBq5eEdyXWqrDInSqQjO0k8xtPRf5YylULqx8MCd6jBtzqfta/3ETMRpuKIc5hyswfO80ObyA1MvkCcUQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.24.4", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.4.tgz", - "integrity": "sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.6.tgz", + "integrity": "sha512-qAHSfAdVyFmIvl0VHELib8xar7ONuSHrE2hLnsaWkYNTI68dmi1x8GYDhJjMI/e7XWal9QBlZkwbOnkcw7Z8gQ==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.2", - "@babel/generator": "^7.24.4", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.24.4", - "@babel/parser": "^7.24.4", - "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.1", - "@babel/types": "^7.24.0", + "@babel/code-frame": "^7.24.6", + "@babel/generator": "^7.24.6", + "@babel/helper-compilation-targets": "^7.24.6", + "@babel/helper-module-transforms": "^7.24.6", + "@babel/helpers": "^7.24.6", + "@babel/parser": "^7.24.6", + "@babel/template": "^7.24.6", + "@babel/traverse": "^7.24.6", + "@babel/types": "^7.24.6", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -136,12 +127,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.24.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.4.tgz", - "integrity": "sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.6.tgz", + "integrity": "sha512-S7m4eNa6YAPJRHmKsLHIDJhNAGNKoWNiWefz1MBbpnt8g9lvMDl1hir4P9bo/57bQEmuwEhnRU/AMWsD0G/Fbg==", "dev": true, "dependencies": { - "@babel/types": "^7.24.0", + "@babel/types": "^7.24.6", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" @@ -151,13 +142,13 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", - "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.6.tgz", + "integrity": "sha512-VZQ57UsDGlX/5fFA7GkVPplZhHsVc+vuErWgdOiysI9Ksnw0Pbbd6pnPiR/mmJyKHgyIW0c7KT32gmhiF+cirg==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.23.5", - "@babel/helper-validator-option": "^7.23.5", + "@babel/compat-data": "^7.24.6", + "@babel/helper-validator-option": "^7.24.6", "browserslist": "^4.22.2", "lru-cache": "^5.1.1", "semver": "^6.3.1" @@ -191,62 +182,62 @@ "dev": true }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.6.tgz", + "integrity": "sha512-Y50Cg3k0LKLMjxdPjIl40SdJgMB85iXn27Vk/qbHZCFx/o5XO3PSnpi675h1KEmmDb6OFArfd5SCQEQ5Q4H88g==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.6.tgz", + "integrity": "sha512-xpeLqeeRkbxhnYimfr2PC+iA0Q7ljX/d1eZ9/inYbmfG2jpl8Lu3DyXvpOAnrS5kxkfOWJjioIMQsaMBXFI05w==", "dev": true, "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" + "@babel/template": "^7.24.6", + "@babel/types": "^7.24.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.6.tgz", + "integrity": "sha512-SF/EMrC3OD7dSta1bLJIlrsVxwtd0UpjRJqLno6125epQMJ/kyFmpTT4pbvPbdQHzCHg+biQ7Syo8lnDtbR+uA==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.24.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz", - "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.6.tgz", + "integrity": "sha512-a26dmxFJBF62rRO9mmpgrfTLsAuyHk4e1hKTUkD/fcMfynt8gvEKwQPQDVxWhca8dHoDck+55DFt42zV0QMw5g==", "dev": true, "dependencies": { - "@babel/types": "^7.24.0" + "@babel/types": "^7.24.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", - "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.6.tgz", + "integrity": "sha512-Y/YMPm83mV2HJTbX1Qh2sjgjqcacvOlhbzdCCsSlblOKjSYmQqEbO6rUniWQyRo9ncyfjT8hnUjlG06RXDEmcA==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.20" + "@babel/helper-environment-visitor": "^7.24.6", + "@babel/helper-module-imports": "^7.24.6", + "@babel/helper-simple-access": "^7.24.6", + "@babel/helper-split-export-declaration": "^7.24.6", + "@babel/helper-validator-identifier": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -256,77 +247,76 @@ } }, "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.6.tgz", + "integrity": "sha512-nZzcMMD4ZhmB35MOOzQuiGO5RzL6tJbsT37Zx8M5L/i9KSrukGXWTjLe1knIbb/RmxoJE9GON9soq0c0VEMM5g==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.6.tgz", + "integrity": "sha512-CvLSkwXGWnYlF9+J3iZUvwgAxKiYzK3BWuo+mLzD/MDGOZDj7Gq8+hqaOkMxmJwmlv0iu86uH5fdADd9Hxkymw==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", - "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.6.tgz", + "integrity": "sha512-WdJjwMEkmBicq5T9fm/cHND3+UlFa2Yj8ALLgmoSQAJZysYbBjw+azChSGPN4DSPLXOcooGRvDwZWMcF/mLO2Q==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.6.tgz", + "integrity": "sha512-4yA7s865JHaqUdRbnaxarZREuPTHrjpDT+pXoAZ1yhyo6uFnIEpS8VMu16siFOHDpZNKYv5BObhsB//ycbICyw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", - "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.6.tgz", + "integrity": "sha512-Jktc8KkF3zIkePb48QO+IapbXlSapOW9S+ogZZkcO6bABgYAxtZcjZ/O005111YLf+j4M84uEgwYoidDkXbCkQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.24.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.4.tgz", - "integrity": "sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.6.tgz", + "integrity": "sha512-V2PI+NqnyFu1i0GyTd/O/cTpxzQCYioSkUIRmgo7gFEHKKCg5w46+r/A6WeUR1+P3TeQ49dspGPNd/E3n9AnnA==", "dev": true, "dependencies": { - "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.1", - "@babel/types": "^7.24.0" + "@babel/template": "^7.24.6", + "@babel/types": "^7.24.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.24.2", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz", - "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.6.tgz", + "integrity": "sha512-2YnuOp4HAk2BsBrJJvYCbItHx0zWscI1C3zgWkz+wDyD9I7GIVrfnLyrR4Y1VR+7p+chAEcrgRQYZAGIKMV7vQ==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-validator-identifier": "^7.24.6", "chalk": "^2.4.2", "js-tokens": "^4.0.0", "picocolors": "^1.0.0" @@ -336,9 +326,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.24.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.4.tgz", - "integrity": "sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.6.tgz", + "integrity": "sha512-eNZXdfU35nJC2h24RznROuOpO94h6x8sg9ju0tT9biNtLZ2vuP8SduLqqV+/8+cebSLV9SJEAN5Z3zQbJG/M+Q==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -348,33 +338,33 @@ } }, "node_modules/@babel/template": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", - "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.6.tgz", + "integrity": "sha512-3vgazJlLwNXi9jhrR1ef8qiB65L1RK90+lEQwv4OxveHnqC3BfmnHdgySwRLzf6akhlOYenT+b7AfWq+a//AHw==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/parser": "^7.24.0", - "@babel/types": "^7.24.0" + "@babel/code-frame": "^7.24.6", + "@babel/parser": "^7.24.6", + "@babel/types": "^7.24.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz", - "integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.24.1", - "@babel/generator": "^7.24.1", - "@babel/helper-environment-visitor": "^7.22.20", - "@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.24.1", - "@babel/types": "^7.24.0", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.6.tgz", + "integrity": "sha512-OsNjaJwT9Zn8ozxcfoBc+RaHdj3gFmCmYoQLUII1o6ZrUwku0BMg80FoOTPx+Gi6XhcQxAYE4xyjPTo4SxEQqw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.6", + "@babel/generator": "^7.24.6", + "@babel/helper-environment-visitor": "^7.24.6", + "@babel/helper-function-name": "^7.24.6", + "@babel/helper-hoist-variables": "^7.24.6", + "@babel/helper-split-export-declaration": "^7.24.6", + "@babel/parser": "^7.24.6", + "@babel/types": "^7.24.6", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -383,13 +373,13 @@ } }, "node_modules/@babel/types": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", - "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.6.tgz", + "integrity": "sha512-WaMsgi6Q8zMgMth93GvWPXkhAIEobfsIkLTacoVZoK1J0CevIPGYY2Vo5YvJGqyHqXM6P4ppOYGsIRU8MM9pFQ==", "dev": true, "dependencies": { - "@babel/helper-string-parser": "^7.23.4", - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-string-parser": "^7.24.6", + "@babel/helper-validator-identifier": "^7.24.6", "to-fast-properties": "^2.0.0" }, "engines": { @@ -837,9 +827,9 @@ } }, "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==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", + "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", "dependencies": { "semver": "^7.3.5" }, @@ -872,9 +862,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.12.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz", - "integrity": "sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==", + "version": "20.12.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.13.tgz", + "integrity": "sha512-gBGeanV41c1L171rR7wjbMiEpEI/l5XFQdLLfhr/REwpgDy/4U8y89+i8kRiLzDyZdOkXh+cRaTetUnCYutoXA==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -1019,6 +1009,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "deprecated": "This package is no longer supported.", "dependencies": { "delegates": "^1.0.0", "readable-stream": "^3.6.0" @@ -1261,12 +1252,12 @@ } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -1320,9 +1311,9 @@ } }, "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==", + "version": "18.0.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.3.tgz", + "integrity": "sha512-qXCd4rh6I07cnDqh8V48/94Tc/WSfj+o3Gn6NZ0aZovS255bUx8O13uKxRFd2eWG0xgsco7+YItQNPaa5E85hg==", "dependencies": { "@npmcli/fs": "^3.1.0", "fs-minipass": "^3.0.0", @@ -1378,21 +1369,21 @@ } }, "node_modules/cacache/node_modules/glob": { - "version": "10.3.12", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", - "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.1.tgz", + "integrity": "sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==", "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.3.6", - "minimatch": "^9.0.1", - "minipass": "^7.0.4", - "path-scurry": "^1.10.2" + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=16 || 14 >=14.18" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -1521,9 +1512,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001611", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001611.tgz", - "integrity": "sha512-19NuN1/3PjA3QI8Eki55N8my4LzfkMCRLgCVfrl/slbSAchQfV0+GwjPrK3rq37As4UCLlM/DHajbKkAqbv92Q==", + "version": "1.0.30001625", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001625.tgz", + "integrity": "sha512-4KE9N2gcRH+HQhpeiRZXd+1niLB/XNLAhSy4z7fI8EzcbcPoAqjNInxVHTiTwWfTIV4w096XG8OtCOCQQKPv3w==", "dev": true, "funding": [ { @@ -1804,9 +1795,9 @@ } }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", "dependencies": { "ms": "2.1.2" }, @@ -1933,9 +1924,9 @@ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" }, "node_modules/electron-to-chromium": { - "version": "1.4.744", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.744.tgz", - "integrity": "sha512-nAGcF0yeKKfrP13LMFr5U1eghfFSvFLg302VUFzWlcjPOnUYd52yU5x6PBYrujhNbc4jYmZFrGZFK+xasaEzVA==", + "version": "1.4.787", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.787.tgz", + "integrity": "sha512-d0EFmtLPjctczO3LogReyM2pbBiiZbnsKnGF+cdZhsYzHm/A0GV7W94kqzLD8SN4O3f3iHlgLUChqghgyznvCQ==", "dev": true }, "node_modules/emoji-regex": { @@ -2052,14 +2043,14 @@ } }, "node_modules/es-iterator-helpers": { - "version": "1.0.18", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.18.tgz", - "integrity": "sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA==", + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", + "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==", "dev": true, "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", + "es-abstract": "^1.23.3", "es-errors": "^1.3.0", "es-set-tostringtag": "^2.0.3", "function-bind": "^1.1.2", @@ -2432,41 +2423,44 @@ } }, "node_modules/eslint-plugin-promise": { - "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==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.2.0.tgz", + "integrity": "sha512-QmAqwizauvnKOlifxyDj2ObfULpHQawlg/zQdgEixur9vl0CvZGv/LCJV2rtj3210QCoeGBzVMfMXqGAOr/4fA==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, + "funding": { + "url": "https://opencollective.com/eslint" + }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" } }, "node_modules/eslint-plugin-react": { - "version": "7.34.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz", - "integrity": "sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==", + "version": "7.34.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.2.tgz", + "integrity": "sha512-2HCmrU+/JNigDN6tg55cRDKCQWicYAPB38JGSFDQt95jDm8rrvSUo7YPkOIm5l6ts1j1zCvysNcasvfTMQzUOw==", "dev": true, "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlast": "^1.2.4", + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", "array.prototype.flatmap": "^1.3.2", "array.prototype.toreversed": "^1.1.2", "array.prototype.tosorted": "^1.1.3", "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.17", + "es-iterator-helpers": "^1.0.19", "estraverse": "^5.3.0", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", - "object.entries": "^1.1.7", - "object.fromentries": "^2.0.7", - "object.hasown": "^1.1.3", - "object.values": "^1.1.7", + "object.entries": "^1.1.8", + "object.fromentries": "^2.0.8", + "object.hasown": "^1.1.4", + "object.values": "^1.2.0", "prop-types": "^15.8.1", "resolve": "^2.0.0-next.5", "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.10" + "string.prototype.matchall": "^4.0.11" }, "engines": { "node": ">=4" @@ -2909,9 +2903,9 @@ "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "dependencies": { "to-regex-range": "^5.0.1" @@ -3155,6 +3149,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "deprecated": "This package is no longer supported.", "dependencies": { "aproba": "^1.0.3 || ^2.0.0", "color-support": "^1.1.2", @@ -3256,6 +3251,7 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", @@ -3314,11 +3310,12 @@ } }, "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dependencies": { - "define-properties": "^1.1.3" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -3594,6 +3591,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -4286,9 +4284,9 @@ } }, "node_modules/jackspeak": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", - "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.1.2.tgz", + "integrity": "sha512-kWmLKn2tRtfYMF/BakihVVRzBKOxz4gJMiL2Rj91WnAB5TPZumSH99R/Yf1qE1u4uRimvCSJfm6hnxohXeEXjQ==", "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -4567,9 +4565,9 @@ } }, "node_modules/lru-cache": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", - "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", "engines": { "node": "14 || >=16.14" } @@ -4597,9 +4595,9 @@ } }, "node_modules/make-fetch-happen": { - "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==", + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz", + "integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==", "dependencies": { "@npmcli/agent": "^2.0.0", "cacache": "^18.0.0", @@ -4610,6 +4608,7 @@ "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "negotiator": "^0.6.3", + "proc-log": "^4.2.0", "promise-retry": "^2.0.1", "ssri": "^10.0.0" }, @@ -4617,6 +4616,14 @@ "node": "^16.14.0 || >=18.0.0" } }, + "node_modules/make-fetch-happen/node_modules/proc-log": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", + "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/memorystream": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", @@ -4646,9 +4653,9 @@ } }, "node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "engines": { "node": ">=16 || 14 >=14.17" } @@ -4665,9 +4672,9 @@ } }, "node_modules/minipass-fetch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", - "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", + "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", "dependencies": { "minipass": "^7.0.3", "minipass-sized": "^1.0.3", @@ -4847,6 +4854,29 @@ "wrap-ansi": "^7.0.0" } }, + "node_modules/mocha/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "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", @@ -5061,21 +5091,21 @@ } }, "node_modules/node-gyp/node_modules/glob": { - "version": "10.3.12", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", - "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.1.tgz", + "integrity": "sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==", "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.3.6", - "minimatch": "^9.0.1", - "minipass": "^7.0.4", - "path-scurry": "^1.10.2" + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=16 || 14 >=14.18" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -5101,9 +5131,9 @@ } }, "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==", + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", + "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", "dependencies": { "abbrev": "^2.0.0" }, @@ -5240,6 +5270,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "deprecated": "This package is no longer supported.", "dependencies": { "are-we-there-yet": "^2.0.0", "console-control-strings": "^1.1.0", @@ -5349,6 +5380,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", @@ -5601,17 +5633,17 @@ } }, "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" }, "engines": { "node": ">= 0.8.0" @@ -5749,15 +5781,15 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "node_modules/path-scurry": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz", - "integrity": "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=16 || 14 >=14.18" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -5784,9 +5816,9 @@ } }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", "dev": true }, "node_modules/picomatch": { @@ -6267,6 +6299,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dependencies": { "glob": "^7.1.3" }, @@ -6281,6 +6314,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -6384,12 +6418,9 @@ "dev": true }, "node_modules/semver": { - "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" - }, + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "bin": { "semver": "bin/semver.js" }, @@ -6397,17 +6428,6 @@ "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", @@ -6618,9 +6638,9 @@ } }, "node_modules/spdx-license-ids": { - "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==" + "version": "3.0.18", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz", + "integrity": "sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==" }, "node_modules/sprintf-js": { "version": "1.0.3", @@ -6629,9 +6649,9 @@ "dev": true }, "node_modules/ssri": { - "version": "10.0.5", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", - "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==", + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", + "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", "dependencies": { "minipass": "^7.0.3" }, @@ -7004,6 +7024,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", @@ -7245,9 +7266,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", + "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==", "dev": true, "funding": [ { @@ -7264,8 +7285,8 @@ } ], "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.1.2", + "picocolors": "^1.0.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -7443,6 +7464,15 @@ "string-width": "^1.0.2 || 2 || 3 || 4" } }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/workerpool": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", diff --git a/package.json b/package.json index b5dd3d54..68ee55c8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "aerospike", - "version": "5.11.0", + "version": "5.12.1", "description": "Aerospike Client Library", "keywords": [ "aerospike", diff --git a/scripts/build-commands.sh b/scripts/build-commands.sh index adf39dd2..d285d074 100755 --- a/scripts/build-commands.sh +++ b/scripts/build-commands.sh @@ -35,6 +35,7 @@ LIBUV_URL=http://dist.libuv.org/dist/v1.45.0/${LIBUV_TAR} LIBUV_ABS_DIR=${CWD}/${LIBUV_DIR} LIBUV_BUILD=0 build_arch=$(uname -m) + if [[ "$OSTYPE" == "darwin"* ]]; then # Mac OSX AEROSPIKE_LIB_HOME=${AEROSPIKE_C_HOME}/target/Darwin-${build_arch} diff --git a/scripts/build-package.ps1 b/scripts/build-package.ps1 index 93ee3c86..b7c6e788 100644 --- a/scripts/build-package.ps1 +++ b/scripts/build-package.ps1 @@ -55,4 +55,11 @@ Remove-Item .\lib\binding\node-v120-win32-x64\aerospike.pdb Remove-Item .\lib\binding\node-v120-win32-x64\aerospike.ipdb Remove-Item .\lib\binding\node-v120-win32-x64\aerospike.iobj +build_nodejs_client v22 +Copy-Item -Recurse build\release\* lib\binding\node-v127-win32-x64 +Remove-Item -Recurse .\lib\binding\node-v127-win32-x64\obj +Remove-Item .\lib\binding\node-v127-win32-x64\aerospike.pdb +Remove-Item .\lib\binding\node-v127-win32-x64\aerospike.ipdb +Remove-Item .\lib\binding\node-v127-win32-x64\aerospike.iobj + nvm use v18.12.1 diff --git a/scripts/build-package.sh b/scripts/build-package.sh index 4342bbe3..fca24d77 100755 --- a/scripts/build-package.sh +++ b/scripts/build-package.sh @@ -57,7 +57,8 @@ rm -rf ${AEROSPIKE_NODEJS_RELEASE_HOME}/node-*-${OS_FLAVOR}-* build_nodejs_client v18 build_nodejs_client v20 build_nodejs_client v21 +build_nodejs_client v22 -nvm use v20 +nvm use v22 cd ${CWD} diff --git a/scripts/prebuiltBinding.js b/scripts/prebuiltBinding.js index f50d969b..b64ccbca 100644 --- a/scripts/prebuiltBinding.js +++ b/scripts/prebuiltBinding.js @@ -11,60 +11,71 @@ const rm = util.promisify(fs.rm) const arch = await os.arch() if (platform === 'darwin') { - rm('lib/binding/node-v120-win32-x64', { recursive: true, force: true }) + console.log('Darwin binaries') + rm('lib/binding/node-v127-win32-x64', { recursive: true, force: true }) rm('lib/binding/node-v115-win32-x64', { recursive: true, force: true }) rm('lib/binding/node-v108-win32-x64', { recursive: true, force: true }) if (arch === 'x64') { - rm('lib/binding/node-v120-darwin-arm64', { recursive: true, force: true }) + rm('lib/binding/node-v127-darwin-arm64', { recursive: true, force: true }) rm('lib/binding/node-v115-darwin-arm64', { recursive: true, force: true }) rm('lib/binding/node-v108-darwin-arm64', { recursive: true, force: true }) } else { - rm('lib/binding/node-v120-darwin-x64', { recursive: true, force: true }) + rm('lib/binding/node-v127-darwin-x64', { recursive: true, force: true }) rm('lib/binding/node-v115-darwin-x64', { recursive: true, force: true }) rm('lib/binding/node-v108-darwin-x64', { recursive: true, force: true }) } - await rm('lib/binding/openssl@3', { recursive: true, force: true }) - await rm('lib/binding/openssl@1', { recursive: true, force: true }) + await rm('lib/binding/glibc@3', { recursive: true, force: true }) + await rm('lib/binding/glibc@1', { recursive: true, force: true }) } else if (platform === 'win32') { - rm('lib/binding/node-v120-darwin-arm64', { recursive: true, force: true }) + console.log('Windows binaries') + rm('lib/binding/node-v127-darwin-arm64', { recursive: true, force: true }) rm('lib/binding/node-v115-darwin-arm64', { recursive: true, force: true }) rm('lib/binding/node-v108-darwin-arm64', { recursive: true, force: true }) - rm('lib/binding/node-v120-darwin-x64', { recursive: true, force: true }) + rm('lib/binding/node-v127-darwin-x64', { recursive: true, force: true }) rm('lib/binding/node-v115-darwin-x64', { recursive: true, force: true }) rm('lib/binding/node-v108-darwin-x64', { recursive: true, force: true }) - await rm('lib/binding/openssl@3', { recursive: true, force: true }) - await rm('lib/binding/openssl@1', { recursive: true, force: true }) + await rm('lib/binding/glibc@3', { recursive: true, force: true }) + await rm('lib/binding/glibc@1', { recursive: true, force: true }) } else { - rm('lib/binding/node-v120-win32-x64', { recursive: true, force: true }) + console.log('Linux binaries') + rm('lib/binding/node-v127-win32-x64', { recursive: true, force: true }) rm('lib/binding/node-v115-win32-x64', { recursive: true, force: true }) rm('lib/binding/node-v108-win32-x64', { recursive: true, force: true }) - rm('lib/binding/node-v120-darwin-arm64', { recursive: true, force: true }) + rm('lib/binding/node-v127-darwin-arm64', { recursive: true, force: true }) rm('lib/binding/node-v115-darwin-arm64', { recursive: true, force: true }) rm('lib/binding/node-v108-darwin-arm64', { recursive: true, force: true }) - rm('lib/binding/node-v120-darwin-x64', { recursive: true, force: true }) + rm('lib/binding/node-v127-darwin-x64', { recursive: true, force: true }) rm('lib/binding/node-v115-darwin-x64', { recursive: true, force: true }) rm('lib/binding/node-v108-darwin-x64', { recursive: true, force: true }) + await rm('lib/binding/node-v115-darwin-x64', { recursive: true, force: true }) + await rm('lib/binding/node-v108-darwin-x64', { recursive: true, force: true }) const output = await exec("ldd --version | awk 'NR==1{print $NF}'") const version = Number(output.stdout) - let openssl - if (version < 2.33) { - openssl = '1' + let glibc + if (version < 2.39) { + if (version < 2.35) { + glibc = '2.31' + } else { + glibc = '2.35' + } } else { - openssl = '3' + glibc = '2.39' } - + console.log('GLIBC version: ' + glibc) + console.log('ARCH: ' + arch) if (arch === 'x64') { - await rename('lib/binding/openssl@' + openssl + '/node-v120-linux-x64', 'lib/binding/node-v120-linux-x64') - await rename('lib/binding/openssl@' + openssl + '/node-v115-linux-x64', 'lib/binding/node-v115-linux-x64') - await rename('lib/binding/openssl@' + openssl + '/node-v108-linux-x64', 'lib/binding/node-v108-linux-x64') + await rename('lib/binding/glibc@' + glibc + '/node-v127-linux-x64', 'lib/binding/node-v127-linux-x64') + await rename('lib/binding/glibc@' + glibc + '/node-v115-linux-x64', 'lib/binding/node-v115-linux-x64') + await rename('lib/binding/glibc@' + glibc + '/node-v108-linux-x64', 'lib/binding/node-v108-linux-x64') } else { - await rename('lib/binding/openssl@' + openssl + '/node-v120-linux-arm64', 'lib/binding/node-v120-linux-arm64') - await rename('lib/binding/openssl@' + openssl + '/node-v115-linux-arm64', 'lib/binding/node-v115-linux-arm64') - await rename('lib/binding/openssl@' + openssl + '/node-v108-linux-arm64', 'lib/binding/node-v108-linux-arm64') + await rename('lib/binding/glibc@' + glibc + '/node-v127-linux-arm64', 'lib/binding/node-v127-linux-arm64') + await rename('lib/binding/glibc@' + glibc + '/node-v115-linux-arm64', 'lib/binding/node-v115-linux-arm64') + await rename('lib/binding/glibc@' + glibc + '/node-v108-linux-arm64', 'lib/binding/node-v108-linux-arm64') } - await rm('lib/binding/openssl@3', { recursive: true, force: true }) - await rm('lib/binding/openssl@1', { recursive: true, force: true }) + await rm('lib/binding/glibc@2.31', { recursive: true, force: true }) + await rm('lib/binding/glibc@2.35', { recursive: true, force: true }) + await rm('lib/binding/glibc@2.39', { recursive: true, force: true }) } })() diff --git a/src/main/client.cc b/src/main/client.cc index 71c28e5d..e19d7db1 100644 --- a/src/main/client.cc +++ b/src/main/client.cc @@ -224,9 +224,9 @@ NAN_METHOD(AerospikeClient::SetLogLevel) AerospikeClient *client = Nan::ObjectWrap::Unwrap(info.Holder()); if (info[0]->IsObject()) { - log_from_jsobject(client->log, info[0].As()); + log_from_jsobject(client->log, info[0].As()); } - info.GetReturnValue().Set(info.Holder()); + info.GetReturnValue().Set(Nan::New(info.Holder())); } /** diff --git a/src/main/commands/info_node.cc b/src/main/commands/info_node.cc index 7c5d6c40..291d8d60 100644 --- a/src/main/commands/info_node.cc +++ b/src/main/commands/info_node.cc @@ -81,7 +81,7 @@ static void *prepare(const Nan::FunctionCallbackInfo &info) } Local node_name = info[1].As(); - strncpy(cmd->node_name, *Nan::Utf8String(node_name), AS_NODE_NAME_SIZE); + snprintf(cmd->node_name, AS_NODE_NAME_SIZE, "%s", *Nan::Utf8String(node_name)); if (info[2]->IsObject()) { cmd->policy = (as_policy_info *)cf_malloc(sizeof(as_policy_info)); diff --git a/src/main/config.cc b/src/main/config.cc index 749274e9..4accfd89 100644 --- a/src/main/config.cc +++ b/src/main/config.cc @@ -360,8 +360,7 @@ int config_from_jsobject(as_config *config, Local configObj, goto Cleanup; } else if (defined) { - strncpy(config->lua.user_path, user_path, ((strlen(user_path) + 1) < AS_CONFIG_PATH_MAX_SIZE) ? - (strlen(user_path) + 1) : AS_CONFIG_PATH_MAX_SIZE); + snprintf(config->lua.user_path, AS_CONFIG_PATH_MAX_SIZE, "%s", user_path); } else { as_v8_debug(log, "Using default Lua user path: %s", diff --git a/test/batch_read.js b/test/batch_read.js index 5382b4f1..1004e129 100644 --- a/test/batch_read.js +++ b/test/batch_read.js @@ -181,183 +181,198 @@ describe('client.batchRead()', function () { }) }) }) + }) + context('readTouchTtlPercent policy', function () { + this.timeout(4000) - context('readTouchTtlPercent policy', function () { - let batch = [{ - key: new Aerospike.Key('test', 'demo', 'batchReadTtl1'), - readAllBins: true - }] - this.timeout(4000) + context('BatchPolicy policy', function () { + helper.skipUnlessVersion('>= 7.1.0', this) - context('BatchPolicy policy', function () { - helper.skipUnlessVersion('>= 7.1.0', this) + it('100% touches record', async function () { + const policy = new Aerospike.BatchReadPolicy({ + readTouchTtlPercent: 100 + }) - it('100% touches record', async function () { - const policy = new Aerospike.BatchReadPolicy({ - readTouchTtlPercent: 100 - }) + await client.put(new Aerospike.Key('test', 'demo', 'batchTtl1'), { i: 2 }, { ttl: 10 }) + await new Promise(resolve => setTimeout(resolve, 3000)) + + const batch = [{ + key: new Aerospike.Key('test', 'demo', 'batchTtl1'), + readAllBins: true + }] - await client.put(new Aerospike.Key('test', 'demo', 'batchReadTtl1'), { i: 2 }, { ttl: 10 }) - await new Promise(resolve => setTimeout(resolve, 3000)) + const batchResult = await client.batchRead(batch, policy) + expect(batchResult[0].record.bins).to.eql({ i: 2 }) + expect(batchResult[0].record.ttl).to.be.within(7, 8) - const batchResult = await client.batchRead(batch, policy) - expect(batchResult[0].record.bins).to.eql({ i: 2 }) - expect(batchResult[0].record.ttl).to.be.within(7, 8) + const record = await client.get(new Aerospike.Key('test', 'demo', 'batchTtl1')) + expect(record.bins).to.eql({ i: 2 }) + expect(record.ttl).to.be.within(9, 10) - const record = await client.get(new Aerospike.Key('test', 'demo', 'batchReadTtl1')) - expect(record.bins).to.eql({ i: 2 }) - expect(record.ttl).to.be.within(9, 10) + await client.remove(new Aerospike.Key('test', 'demo', 'batchTtl1')) + }) - await client.remove(new Aerospike.Key('test', 'demo', 'batchReadTtl1')) + it('71% touches record', async function () { + const policy = new Aerospike.BatchReadPolicy({ + readTouchTtlPercent: 71 }) - it('71% touches record', async function () { - const policy = new Aerospike.BatchReadPolicy({ - readTouchTtlPercent: 71 - }) + await client.put(new Aerospike.Key('test', 'demo', 'batchTtl2'), { i: 2 }, { ttl: 10 }) + await new Promise(resolve => setTimeout(resolve, 3000)) + + const batch = [{ + key: new Aerospike.Key('test', 'demo', 'batchTtl2'), + readAllBins: true + }] - await client.put(new Aerospike.Key('test', 'demo', 'batchReadTtl1'), { i: 2 }, { ttl: 10 }) - await new Promise(resolve => setTimeout(resolve, 3000)) + const batchResult = await client.batchRead(batch, policy) + expect(batchResult[0].record.bins).to.eql({ i: 2 }) + expect(batchResult[0].record.ttl).to.be.within(7, 8) - const batchResult = await client.batchRead(batch, policy) - expect(batchResult[0].record.bins).to.eql({ i: 2 }) - expect(batchResult[0].record.ttl).to.be.within(7, 8) + const record = await client.get(new Aerospike.Key('test', 'demo', 'batchTtl2')) + expect(record.bins).to.eql({ i: 2 }) + expect(record.ttl).to.be.within(9, 10) - const record = await client.get(new Aerospike.Key('test', 'demo', 'batchReadTtl1')) - expect(record.bins).to.eql({ i: 2 }) - expect(record.ttl).to.be.within(9, 10) + await client.remove(new Aerospike.Key('test', 'demo', 'batchTtl2')) + }) - await client.remove(new Aerospike.Key('test', 'demo', 'batchReadTtl1')) + it('60% doesnt touch record', async function () { + const policy = new Aerospike.BatchReadPolicy({ + readTouchTtlPercent: 60 }) - it('60% doesnt touch record', async function () { - const policy = new Aerospike.BatchReadPolicy({ - readTouchTtlPercent: 60 - }) + await client.put(new Aerospike.Key('test', 'demo', 'batchTtl3'), { i: 2 }, { ttl: 10 }) + await new Promise(resolve => setTimeout(resolve, 3000)) + + const batch = [{ + key: new Aerospike.Key('test', 'demo', 'batchTtl3'), + readAllBins: true + }] - await client.put(new Aerospike.Key('test', 'demo', 'batchReadTtl1'), { i: 2 }, { ttl: 10 }) - await new Promise(resolve => setTimeout(resolve, 3000)) + const batchResult = await client.batchRead(batch, policy) + expect(batchResult[0].record.bins).to.eql({ i: 2 }) + expect(batchResult[0].record.ttl).to.be.within(7, 8) - const batchResult = await client.batchRead(batch, policy) - expect(batchResult[0].record.bins).to.eql({ i: 2 }) - expect(batchResult[0].record.ttl).to.be.within(7, 8) + const record = await client.get(new Aerospike.Key('test', 'demo', 'batchTtl3')) + expect(record.bins).to.eql({ i: 2 }) + expect(record.ttl).to.be.within(7, 8) - const record = await client.get(new Aerospike.Key('test', 'demo', 'batchReadTtl1')) - expect(record.bins).to.eql({ i: 2 }) - expect(record.ttl).to.be.within(7, 8) + await client.remove(new Aerospike.Key('test', 'demo', 'batchTtl3')) + }) - await client.remove(new Aerospike.Key('test', 'demo', 'batchReadTtl1')) + it('0% doesnt touch record', async function () { + const policy = new Aerospike.BatchReadPolicy({ + readTouchTtlPercent: 0 }) - it('0% doesnt touch record', async function () { - const policy = new Aerospike.BatchReadPolicy({ - readTouchTtlPercent: 0 + await client.put(new Aerospike.Key('test', 'demo', 'batchTtl4'), { i: 2 }, { ttl: 10 }) + await new Promise(resolve => setTimeout(resolve, 3000)) + + const batch = [{ + key: new Aerospike.Key('test', 'demo', 'batchTtl4'), + readAllBins: true + }] + + const batchResult = await client.batchRead(batch, policy) + expect(batchResult[0].record.bins).to.eql({ i: 2 }) + expect(batchResult[0].record.ttl).to.be.within(7, 8) + + const record = await client.get(new Aerospike.Key('test', 'demo', 'batchTtl4')) + expect(record.bins).to.eql({ i: 2 }) + expect(record.ttl).to.be.within(7, 8) + + await client.remove(new Aerospike.Key('test', 'demo', 'batchTtl4')) + }) + }) + + context('BatchReadPolicy policy', function () { + helper.skipUnlessVersion('>= 7.1.0', this) + it('100% touches record', async function () { + const batch = [{ + key: new Aerospike.Key('test', 'demo', 'batchReadTtl1'), + readAllBins: true, + policy: new Aerospike.BatchPolicy({ + readTouchTtlPercent: 100 }) + }] + await client.put(new Aerospike.Key('test', 'demo', 'batchReadTtl1'), { i: 2 }, { ttl: 10 }) + await new Promise(resolve => setTimeout(resolve, 3000)) - await client.put(new Aerospike.Key('test', 'demo', 'batchReadTtl1'), { i: 2 }, { ttl: 10 }) - await new Promise(resolve => setTimeout(resolve, 3000)) + const batchResult = await client.batchRead(batch) + expect(batchResult[0].record.bins).to.eql({ i: 2 }) + expect(batchResult[0].record.ttl).to.be.within(7, 8) - const batchResult = await client.batchRead(batch, policy) - expect(batchResult[0].record.bins).to.eql({ i: 2 }) - expect(batchResult[0].record.ttl).to.be.within(7, 8) + const record = await client.get(new Aerospike.Key('test', 'demo', 'batchReadTtl1')) + expect(record.bins).to.eql({ i: 2 }) + expect(record.ttl).to.be.within(9, 10) - const record = await client.get(new Aerospike.Key('test', 'demo', 'batchReadTtl1')) - expect(record.bins).to.eql({ i: 2 }) - expect(record.ttl).to.be.within(7, 8) + await client.remove(new Aerospike.Key('test', 'demo', 'batchReadTtl1')) + }) - await client.remove(new Aerospike.Key('test', 'demo', 'batchReadTtl1')) - }) + it('71% touches record', async function () { + const batch = [{ + key: new Aerospike.Key('test', 'demo', 'batchReadTtl2'), + readAllBins: true, + policy: new Aerospike.BatchPolicy({ + readTouchTtlPercent: 71 + }) + }] + await client.put(new Aerospike.Key('test', 'demo', 'batchReadTtl2'), { i: 2 }, { ttl: 10 }) + await new Promise(resolve => setTimeout(resolve, 3000)) + + const batchResult = await client.batchRead(batch) + expect(batchResult[0].record.bins).to.eql({ i: 2 }) + expect(batchResult[0].record.ttl).to.be.within(7, 8) + + const record = await client.get(new Aerospike.Key('test', 'demo', 'batchReadTtl2')) + expect(record.bins).to.eql({ i: 2 }) + expect(record.ttl).to.be.within(9, 10) + + await client.remove(new Aerospike.Key('test', 'demo', 'batchReadTtl2')) }) - context('BatchReadPolicy policy', function () { - helper.skipUnlessVersion('>= 7.1.0', this) - it('100% touches record', async function () { - batch = [{ - key: new Aerospike.Key('test', 'demo', 'batchReadTtl1'), - readAllBins: true, - policy: new Aerospike.BatchPolicy({ - readTouchTtlPercent: 100 - }) - }] - await client.put(new Aerospike.Key('test', 'demo', 'batchReadTtl1'), { i: 2 }, { ttl: 10 }) - await new Promise(resolve => setTimeout(resolve, 3000)) - - const batchResult = await client.batchRead(batch) - expect(batchResult[0].record.bins).to.eql({ i: 2 }) - expect(batchResult[0].record.ttl).to.be.within(7, 8) - - const record = await client.get(new Aerospike.Key('test', 'demo', 'batchReadTtl1')) - expect(record.bins).to.eql({ i: 2 }) - expect(record.ttl).to.be.within(9, 10) - - await client.remove(new Aerospike.Key('test', 'demo', 'batchReadTtl1')) - }) + it('60% doesnt touch record', async function () { + const batch = [{ + key: new Aerospike.Key('test', 'demo', 'batchReadTtl3'), + readAllBins: true, + policy: new Aerospike.BatchPolicy({ + readTouchTtlPercent: 60 + }) + }] + await client.put(new Aerospike.Key('test', 'demo', 'batchReadTtl3'), { i: 2 }, { ttl: 10 }) + await new Promise(resolve => setTimeout(resolve, 3000)) - it('71% touches record', async function () { - batch = [{ - key: new Aerospike.Key('test', 'demo', 'batchReadTtl1'), - readAllBins: true, - policy: new Aerospike.BatchPolicy({ - readTouchTtlPercent: 71 - }) - }] - await client.put(new Aerospike.Key('test', 'demo', 'batchReadTtl1'), { i: 2 }, { ttl: 10 }) - await new Promise(resolve => setTimeout(resolve, 3000)) - - const batchResult = await client.batchRead(batch) - expect(batchResult[0].record.bins).to.eql({ i: 2 }) - expect(batchResult[0].record.ttl).to.be.within(7, 8) - - const record = await client.get(new Aerospike.Key('test', 'demo', 'batchReadTtl1')) - expect(record.bins).to.eql({ i: 2 }) - expect(record.ttl).to.be.within(9, 10) - - await client.remove(new Aerospike.Key('test', 'demo', 'batchReadTtl1')) - }) + const batchResult = await client.batchRead(batch) + expect(batchResult[0].record.bins).to.eql({ i: 2 }) + expect(batchResult[0].record.ttl).to.be.within(7, 8) - it('60% doesnt touch record', async function () { - batch = [{ - key: new Aerospike.Key('test', 'demo', 'batchReadTtl1'), - readAllBins: true, - policy: new Aerospike.BatchPolicy({ - readTouchTtlPercent: 60 - }) - }] - await client.put(new Aerospike.Key('test', 'demo', 'batchReadTtl1'), { i: 2 }, { ttl: 10 }) - await new Promise(resolve => setTimeout(resolve, 3000)) - - const batchResult = await client.batchRead(batch) - expect(batchResult[0].record.bins).to.eql({ i: 2 }) - expect(batchResult[0].record.ttl).to.be.within(7, 8) - - const record = await client.get(new Aerospike.Key('test', 'demo', 'batchReadTtl1')) - expect(record.bins).to.eql({ i: 2 }) - expect(record.ttl).to.be.within(7, 8) - - await client.remove(new Aerospike.Key('test', 'demo', 'batchReadTtl1')) - }) + const record = await client.get(new Aerospike.Key('test', 'demo', 'batchReadTtl3')) + expect(record.bins).to.eql({ i: 2 }) + expect(record.ttl).to.be.within(7, 8) - it('0% doesnt touch record', async function () { - batch = [{ - key: new Aerospike.Key('test', 'demo', 'batchReadTtl1'), - readAllBins: true, - policy: new Aerospike.BatchPolicy({ - readTouchTtlPercent: 0 - }) - }] - await client.put(new Aerospike.Key('test', 'demo', 'batchReadTtl1'), { i: 2 }, { ttl: 10 }) - await new Promise(resolve => setTimeout(resolve, 3000)) - - const batchResult = await client.batchRead(batch) - expect(batchResult[0].record.bins).to.eql({ i: 2 }) - expect(batchResult[0].record.ttl).to.be.within(7, 8) - - const record = await client.get(new Aerospike.Key('test', 'demo', 'batchReadTtl1')) - expect(record.bins).to.eql({ i: 2 }) - expect(record.ttl).to.be.within(7, 8) - - await client.remove(new Aerospike.Key('test', 'demo', 'batchReadTtl1')) - }) + await client.remove(new Aerospike.Key('test', 'demo', 'batchReadTtl3')) + }) + + it('0% doesnt touch record', async function () { + const batch = [{ + key: new Aerospike.Key('test', 'demo', 'batchReadTtl4'), + readAllBins: true, + policy: new Aerospike.BatchPolicy({ + readTouchTtlPercent: 0 + }) + }] + await client.put(new Aerospike.Key('test', 'demo', 'batchReadTtl4'), { i: 2 }, { ttl: 10 }) + await new Promise(resolve => setTimeout(resolve, 3000)) + + const batchResult = await client.batchRead(batch) + expect(batchResult[0].record.bins).to.eql({ i: 2 }) + expect(batchResult[0].record.ttl).to.be.within(7, 8) + + const record = await client.get(new Aerospike.Key('test', 'demo', 'batchReadTtl4')) + expect(record.bins).to.eql({ i: 2 }) + expect(record.ttl).to.be.within(7, 8) + + await client.remove(new Aerospike.Key('test', 'demo', 'batchReadTtl4')) }) }) })