diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml index 70932712..b58bbe60 100644 --- a/.github/workflows/main.yaml +++ b/.github/workflows/main.yaml @@ -9,9 +9,11 @@ on: env: WEAVIATE_133: 1.33.18 WEAVIATE_134: 1.34.20 - WEAVIATE_135: 1.35.16 - WEAVIATE_136: 1.36.10 - WEAVIATE_137: 1.37.5 + WEAVIATE_135: 1.35.23 + WEAVIATE_136: 1.36.19 + WEAVIATE_137: 1.37.10 + WEAVIATE_138: 1.38.2 + WEAVIATE_139: 1.39.0-dev-45692cd.amd64 concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} @@ -22,15 +24,20 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + - uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4 + with: + version: 10 - uses: actions/setup-node@3235b876344d2a9aa001b8d1453c930bba69e610 # v3 with: - node-version: "24.x" + node-version: 24 + cache: 'pnpm' - name: "Run checks" run: | - npm ci + npm run ci:checks npm run lint npm run format:check npm run docs + npm run build tests-without-auth: needs: checks @@ -44,30 +51,34 @@ jobs: { node: "24.x", weaviate: $WEAVIATE_134 }, { node: "24.x", weaviate: $WEAVIATE_135 }, { node: "24.x", weaviate: $WEAVIATE_136 }, - { node: "22.x", weaviate: $WEAVIATE_137 }, { node: "24.x", weaviate: $WEAVIATE_137 }, + { node: "22.x", weaviate: $WEAVIATE_138 }, + { node: "24.x", weaviate: $WEAVIATE_138 }, + { node: "24.x", weaviate: $WEAVIATE_139 }, ] steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 - - uses: actions/setup-node@3235b876344d2a9aa001b8d1453c930bba69e610 # v3 - with: - node-version: ${{ matrix.versions.node }} - - name: Login to Docker Hub - if: ${{ !github.event.pull_request.head.repo.fork && github.triggering_actor != 'dependabot[bot]' }} - uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4 - with: - username: ${{secrets.DOCKER_USERNAME}} - password: ${{secrets.DOCKER_PASSWORD}} - - name: "Install dependencies" - run: | - npm ci - ci/run_dependencies.sh ${{ matrix.versions.weaviate }} - - name: "Run tests without authentication tests" - run: WEAVIATE_VERSION=${{ matrix.versions.weaviate }} npm test - - name: "Transpile the package" - run: npm run build - - name: "Stop Weaviate" - run: ci/stop_dependencies.sh ${{ matrix.versions.weaviate }} + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + - uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4 + with: + version: 10 + - uses: actions/setup-node@3235b876344d2a9aa001b8d1453c930bba69e610 # v3 + with: + node-version: ${{ matrix.versions.node }} + cache: 'pnpm' + - name: Login to Docker Hub + if: ${{ !github.event.pull_request.head.repo.fork && github.triggering_actor != 'dependabot[bot]' }} + uses: docker/login-action@v3 + with: + username: ${{secrets.DOCKER_USERNAME}} + password: ${{secrets.DOCKER_PASSWORD}} + - name: "Install dependencies" + run: | + npm run ci:test + ci/run_dependencies.sh ${{ matrix.versions.weaviate }} + - name: "Run tests without authentication tests" + run: WEAVIATE_VERSION=${{ matrix.versions.weaviate }} npm run test + - name: "Stop Weaviate" + run: ci/stop_dependencies.sh ${{ matrix.versions.weaviate }} tests-with-auth: needs: checks @@ -75,32 +86,35 @@ jobs: strategy: fail-fast: false matrix: - versions: [{ node: "24.x", weaviate: $WEAVIATE_137 }] + versions: [{ node: "24.x", weaviate: $WEAVIATE_138 }] steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 - - uses: actions/setup-node@3235b876344d2a9aa001b8d1453c930bba69e610 # v3 - with: - node-version: ${{ matrix.versions.node }} - - name: Login to Docker Hub - if: ${{ !github.event.pull_request.head.repo.fork && github.triggering_actor != 'dependabot[bot]' }} - uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4 - with: - username: ${{secrets.DOCKER_USERNAME}} - password: ${{secrets.DOCKER_PASSWORD}} - - name: "Install dependencies" - run: | - npm ci - ci/run_dependencies.sh ${{ matrix.versions.weaviate }} - - name: "Run tests with authentication tests" - if: ${{ !github.event.pull_request.head.repo.fork }} - env: - OKTA_DUMMY_CI_PW: ${{ secrets.OKTA_DUMMY_CI_PW }} - WCS_DUMMY_CI_PW: ${{ secrets.WCS_DUMMY_CI_PW }} - AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }} - OKTA_CLIENT_SECRET: ${{ secrets.OKTA_CLIENT_SECRET }} - run: WEAVIATE_VERSION=${{ matrix.versions.weaviate }} npm test - - name: "Stop Weaviate" - run: ci/stop_dependencies.sh ${{ matrix.versions.weaviate }} + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + - uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4 + with: + version: 10 + - uses: actions/setup-node@3235b876344d2a9aa001b8d1453c930bba69e610 # v3 + with: + node-version: ${{ matrix.versions.node }} + - name: Login to Docker Hub + if: ${{ !github.event.pull_request.head.repo.fork && github.triggering_actor != 'dependabot[bot]' }} + uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4 + with: + username: ${{secrets.DOCKER_USERNAME}} + password: ${{secrets.DOCKER_PASSWORD}} + - name: "Install dependencies" + run: | + npm run ci:test + ci/run_dependencies.sh ${{ matrix.versions.weaviate }} + - name: "Run tests with authentication tests" + if: ${{ !github.event.pull_request.head.repo.fork }} + env: + OKTA_DUMMY_CI_PW: ${{ secrets.OKTA_DUMMY_CI_PW }} + WCS_DUMMY_CI_PW: ${{ secrets.WCS_DUMMY_CI_PW }} + AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }} + OKTA_CLIENT_SECRET: ${{ secrets.OKTA_CLIENT_SECRET }} + run: WEAVIATE_VERSION=${{ matrix.versions.weaviate }} npm run test + - name: "Stop Weaviate" + run: ci/stop_dependencies.sh ${{ matrix.versions.weaviate }} publish: needs: [tests-with-auth, tests-without-auth] @@ -113,11 +127,15 @@ jobs: steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 # Setup .npmrc file to publish to npm + - uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4 + with: + version: 10 - uses: actions/setup-node@3235b876344d2a9aa001b8d1453c930bba69e610 # v3 with: - node-version: "24.x" + node-version: 24 + cache: 'pnpm' registry-url: "https://registry.npmjs.org" - - run: npm ci + - run: npm run ci:publish - run: npm run build - run: npm publish - run: npm run docs diff --git a/.husky/pre-commit b/.husky/pre-commit index 36af2198..3199e8e0 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,4 +1,4 @@ #!/bin/sh . "$(dirname "$0")/_/husky.sh" -npx lint-staged +npm run lint:staged diff --git a/.prettierignore b/.prettierignore index ea33ce5b..645d44ec 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,3 +1,3 @@ -src/proto/**/*.ts -dist/**/* -docs/**/*.js \ No newline at end of file +**/proto/**/*.ts +**/dist/**/* +**/docs/**/*.js diff --git a/ci/docker-compose.yml b/ci/docker-compose.yml index 305e2e8c..82acd435 100644 --- a/ci/docker-compose.yml +++ b/ci/docker-compose.yml @@ -31,6 +31,7 @@ services: DISABLE_TELEMETRY: "true" DEFAULT_VECTOR_INDEX: "hfresh" OBJECTS_TTL_DELETE_SCHEDULE: "@hourly" + GRPC_WEB_ENABLED: "true" contextionary: environment: OCCURRENCE_WEIGHT_LINEAR_FACTOR: 0.75 diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 05c5a566..00000000 --- a/package-lock.json +++ /dev/null @@ -1,11658 +0,0 @@ -{ - "name": "weaviate-client", - "version": "3.13.1", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "weaviate-client", - "version": "3.13.1", - "license": "BSD-3-Clause", - "dependencies": { - "@datastructures-js/deque": "^1.0.8", - "abort-controller-x": "^0.5.0", - "graphql": "^16.12.0", - "graphql-request": "^6.1.0", - "long": "^5.3.2", - "nice-grpc": "^2.1.14", - "nice-grpc-client-middleware-retry": "^3.1.13", - "nice-grpc-common": "^2.0.2", - "uuid": "^14.0.0" - }, - "devDependencies": { - "@babel/core": "^7.20.12", - "@babel/preset-typescript": "^7.18.6", - "@babel/runtime": "^7.20.7", - "@curveball/bodyparser": "0.5.0", - "@curveball/core": "0.20.0", - "@curveball/kernel": "0.20.1", - "@rollup/plugin-babel": "^5.3.1", - "@testcontainers/weaviate": "^11.14.0", - "@types/express": "^4.17.21", - "@types/node": "^25.0.3", - "@types/uuid": "^9.0.1", - "@typescript-eslint/eslint-plugin": "^6.21.0", - "@typescript-eslint/parser": "^6.21.0", - "babel-jest": "^29.4.3", - "eslint": "^8.35.0", - "eslint-config-prettier": "^8.7.0", - "eslint-plugin-prettier": "^4.2.1", - "express": "^4.19.2", - "grpc-tools": "^1.12.4", - "husky": "^8.0.3", - "jest": "^29.4.3", - "lint-staged": "^13.2.0", - "openapi-typescript": "^5.4.1", - "prettier": "^2.8.4", - "prettier-plugin-organize-imports": "^3.2.4", - "protobufjs": "^7.5.5", - "ts-jest": "^29.0.5", - "ts-node": "^10.9.2", - "ts-proto": "^1.176.0", - "tsup": "^8.0.2", - "typedoc": "^0.28.15", - "typedoc-plugin-extras": "^4.0.1", - "typescript": "^5.9.3", - "vitest": "^4.0.16" - }, - "engines": { - "node": ">=22.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.28.6.tgz", - "integrity": "sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.28.5", - "js-tokens": "^4.0.0", - "picocolors": "^1.1.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.6.tgz", - "integrity": "sha512-2lfu57JtzctfIrcGMz992hyLlByuzgIk58+hhGCxjKZ3rWI82NnVLjXcaTqkI2NvlcvOskZaiZ5kjUALo3Lpxg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.6.tgz", - "integrity": "sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.28.6", - "@babel/generator": "^7.28.6", - "@babel/helper-compilation-targets": "^7.28.6", - "@babel/helper-module-transforms": "^7.28.6", - "@babel/helpers": "^7.28.6", - "@babel/parser": "^7.28.6", - "@babel/template": "^7.28.6", - "@babel/traverse": "^7.28.6", - "@babel/types": "^7.28.6", - "@jridgewell/remapping": "^2.3.5", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/generator": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.6.tgz", - "integrity": "sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.28.6", - "@babel/types": "^7.28.6", - "@jridgewell/gen-mapping": "^0.3.12", - "@jridgewell/trace-mapping": "^0.3.28", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", - "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.28.6", - "@babel/helper-validator-option": "^7.27.1", - "browserslist": "^4.24.0", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.21.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-member-expression-to-functions": "^7.21.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.20.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/helper-split-export-declaration": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "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==", - "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==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-globals": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", - "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.21.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.21.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", - "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.28.6", - "@babel/types": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", - "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.28.6", - "@babel/helper-validator-identifier": "^7.28.5", - "@babel/traverse": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", - "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.20.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.20.7", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.7", - "@babel/types": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.20.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.20.0" - }, - "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==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", - "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz", - "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.28.6", - "@babel/types": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.6.tgz", - "integrity": "sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.28.6" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz", - "integrity": "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.20.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typescript": { - "version": "7.21.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-typescript": "^7.20.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-typescript": { - "version": "7.21.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-option": "^7.21.0", - "@babel/plugin-transform-typescript": "^7.21.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.27.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.6.tgz", - "integrity": "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", - "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.28.6", - "@babel/parser": "^7.28.6", - "@babel/types": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.6.tgz", - "integrity": "sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.28.6", - "@babel/generator": "^7.28.6", - "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.6", - "@babel/template": "^7.28.6", - "@babel/types": "^7.28.6", - "debug": "^4.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.6.tgz", - "integrity": "sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@balena/dockerignore": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@balena/dockerignore/-/dockerignore-1.0.2.tgz", - "integrity": "sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@curveball/bodyparser": { - "version": "0.5.0", - "dev": true, - "license": "MIT", - "peerDependencies": { - "@curveball/kernel": ">=0.20.0 <1" - } - }, - "node_modules/@curveball/core": { - "version": "0.20.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@curveball/http-errors": "^0.4.0", - "@curveball/kernel": "^0.20.0", - "@types/ws": "^8.5.3", - "raw-body": "^2.4.1", - "ws": "^8.5.0" - }, - "engines": { - "node": ">=14.4" - } - }, - "node_modules/@curveball/http-errors": { - "version": "0.4.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@curveball/kernel": { - "version": "0.20.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@curveball/http-errors": "^0.4.0", - "@types/ws": "^8.5.3", - "accepts": "^1.3.7", - "raw-body": "^2.4.1", - "ws": "^8.5.0" - }, - "engines": { - "node": ">=14.4" - } - }, - "node_modules/@datastructures-js/deque": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@datastructures-js/deque/-/deque-1.0.8.tgz", - "integrity": "sha512-PSBhJ2/SmeRPRHuBv7i/fHWIdSC3JTyq56qb+Rq0wjOagi0/fdV5/B/3Md5zFZus/W6OkSPMaxMKKMNMrSmubg==", - "license": "MIT" - }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz", - "integrity": "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.5.tgz", - "integrity": "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz", - "integrity": "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.5.tgz", - "integrity": "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz", - "integrity": "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz", - "integrity": "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz", - "integrity": "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz", - "integrity": "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz", - "integrity": "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz", - "integrity": "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz", - "integrity": "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz", - "integrity": "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz", - "integrity": "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz", - "integrity": "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz", - "integrity": "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz", - "integrity": "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz", - "integrity": "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz", - "integrity": "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz", - "integrity": "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz", - "integrity": "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz", - "integrity": "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openharmony-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz", - "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz", - "integrity": "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz", - "integrity": "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz", - "integrity": "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz", - "integrity": "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "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": "2.0.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.0.tgz", - "integrity": "sha512-fluIaaV+GyV24CCu/ggiHdV+j4RNh85yQnAYS/G2mZODZgGmmlrgCydjUcV3YvxCm9x8nMAfThsqTni4KiXT4A==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.4.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "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/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "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.35.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.35.0.tgz", - "integrity": "sha512-JXdzbRiWclLVoD8sNUjR443VVlYqiYmDVT6rGUEIEHU5YJW0gaVZwV2xgM7D4arkvASqD0IlLUVjHiFuxaftRw==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@fastify/busboy": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.0.0.tgz", - "integrity": "sha512-JUFJad5lv7jxj926GPgymrWQxxjPYuJNiNjNMzqT+HiuP6Vl3dk5xzG+8sTX96np0ZAluvaMzPsjhHZ5rNuNQQ==", - "dev": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@gerrit0/mini-shiki": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/@gerrit0/mini-shiki/-/mini-shiki-3.21.0.tgz", - "integrity": "sha512-9PrsT5DjZA+w3lur/aOIx3FlDeHdyCEFlv9U+fmsVyjPZh61G5SYURQ/1ebe2U63KbDmI2V8IhIUegWb8hjOyg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/engine-oniguruma": "^3.21.0", - "@shikijs/langs": "^3.21.0", - "@shikijs/themes": "^3.21.0", - "@shikijs/types": "^3.21.0", - "@shikijs/vscode-textmate": "^10.0.2" - } - }, - "node_modules/@graphql-typed-document-node/core": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz", - "integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==", - "peerDependencies": { - "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/@grpc/grpc-js": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.14.0.tgz", - "integrity": "sha512-N8Jx6PaYzcTRNzirReJCtADVoq4z7+1KQ4E70jTg/koQiMoUSN1kbNjPOqpPbhMFhfU1/l7ixspPl8dNY+FoUg==", - "license": "Apache-2.0", - "dependencies": { - "@grpc/proto-loader": "^0.8.0", - "@js-sdsl/ordered-map": "^4.4.2" - }, - "engines": { - "node": ">=12.10.0" - } - }, - "node_modules/@grpc/grpc-js/node_modules/@grpc/proto-loader": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.8.0.tgz", - "integrity": "sha512-rc1hOQtjIWGxcxpb9aHAfLpIctjEnsDehj0DAiVfBlmT84uvR0uUtN2hEi/ecvWVjXUGf5qPF4qEgiLOx1YIMQ==", - "license": "Apache-2.0", - "dependencies": { - "lodash.camelcase": "^4.3.0", - "long": "^5.0.0", - "protobufjs": "^7.5.3", - "yargs": "^17.7.2" - }, - "bin": { - "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@grpc/proto-loader": { - "version": "0.7.15", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.15.tgz", - "integrity": "sha512-tMXdRCfYVixjuFK+Hk0Q1s38gV9zDiDJfWL3h1rv4Qc39oILCu1TRTDt7+fGUI8K4G1Fj125Hx/ru3azECWTyQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "lodash.camelcase": "^4.3.0", - "long": "^5.0.0", - "protobufjs": "^7.2.5", - "yargs": "^17.7.2" - }, - "bin": { - "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", - "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "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": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "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==", - "dev": true, - "license": "ISC", - "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.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "dev": true, - "license": "MIT", - "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==", - "dev": true, - "license": "MIT", - "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==", - "dev": true, - "license": "MIT" - }, - "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==", - "dev": true, - "license": "MIT", - "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==", - "dev": true, - "license": "MIT", - "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==", - "dev": true, - "license": "MIT", - "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/@isaacs/fs-minipass": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", - "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.4" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", - "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/core": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", - "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/reporters": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.7.0", - "jest-config": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-resolve-dependencies": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "jest-watcher": "^29.7.0", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/environment": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", - "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "expect": "^29.7.0", - "jest-snapshot": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", - "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "jest-get-type": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", - "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/globals": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", - "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/types": "^29.6.3", - "jest-mock": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/reporters": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", - "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^6.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/reporters/node_modules/istanbul-lib-instrument": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", - "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/core": "^7.23.9", - "@babel/parser": "^7.23.9", - "@istanbuljs/schema": "^0.1.3", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@jest/reporters/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/source-map": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", - "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.18", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-result": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", - "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", - "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/test-result": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/transform": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", - "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/remapping": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", - "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@js-sdsl/ordered-map": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz", - "integrity": "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/js-sdsl" - } - }, - "node_modules/@kwsites/file-exists": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz", - "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.1.1" - } - }, - "node_modules/@mapbox/node-pre-gyp": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-2.0.3.tgz", - "integrity": "sha512-uwPAhccfFJlsfCxMYTwOdVfOz3xqyj8xYL3zJj8f0pb30tLohnnFPhLuqp4/qoEz8sNxe4SESZedcBojRefIzg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "consola": "^3.2.3", - "detect-libc": "^2.0.0", - "https-proxy-agent": "^7.0.5", - "node-fetch": "^2.6.7", - "nopt": "^8.0.0", - "semver": "^7.5.3", - "tar": "^7.4.0" - }, - "bin": { - "node-pre-gyp": "bin/node-pre-gyp" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "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": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "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": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "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==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" - }, - "node_modules/@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" - }, - "node_modules/@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" - }, - "node_modules/@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" - }, - "node_modules/@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", - "dependencies": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "node_modules/@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" - }, - "node_modules/@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" - }, - "node_modules/@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" - }, - "node_modules/@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" - }, - "node_modules/@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" - }, - "node_modules/@rollup/plugin-babel": { - "version": "5.3.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.10.4", - "@rollup/pluginutils": "^3.1.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "@types/babel__core": "^7.1.9", - "rollup": "^1.20.0||^2.0.0" - }, - "peerDependenciesMeta": { - "@types/babel__core": { - "optional": true - } - } - }, - "node_modules/@rollup/pluginutils": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" - } - }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.2.tgz", - "integrity": "sha512-dnlp69efPPg6Uaw2dVqzWRfAWRnYVb1XJ8CyyhIbZeaq4CA5/mLeZ1IEt9QqQxmbdvagjLIm2ZL8BxXv5lH4Yw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.2.tgz", - "integrity": "sha512-OqZTwDRDchGRHHm/hwLOL7uVPB9aUvI0am/eQuWMNyFHf5PSEQmyEeYYheA0EPPKUO/l0uigCp+iaTjoLjVoHg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.2.tgz", - "integrity": "sha512-UwRE7CGpvSVEQS8gUMBe1uADWjNnVgP3Iusyda1nSRwNDCsRjnGc7w6El6WLQsXmZTbLZx9cecegumcitNfpmA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.2.tgz", - "integrity": "sha512-gjEtURKLCC5VXm1I+2i1u9OhxFsKAQJKTVB8WvDAHF+oZlq0GTVFOlTlO1q3AlCTE/DF32c16ESvfgqR7343/g==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.2.tgz", - "integrity": "sha512-Bcl6CYDeAgE70cqZaMojOi/eK63h5Me97ZqAQoh77VPjMysA/4ORQBRGo3rRy45x4MzVlU9uZxs8Uwy7ZaKnBw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.2.tgz", - "integrity": "sha512-LU+TPda3mAE2QB0/Hp5VyeKJivpC6+tlOXd1VMoXV/YFMvk/MNk5iXeBfB4MQGRWyOYVJ01625vjkr0Az98OJQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.2.tgz", - "integrity": "sha512-2QxQrM+KQ7DAW4o22j+XZ6RKdxjLD7BOWTP0Bv0tmjdyhXSsr2Ul1oJDQqh9Zf5qOwTuTc7Ek83mOFaKnodPjg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.2.tgz", - "integrity": "sha512-TbziEu2DVsTEOPif2mKWkMeDMLoYjx95oESa9fkQQK7r/Orta0gnkcDpzwufEcAO2BLBsD7mZkXGFqEdMRRwfw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.2.tgz", - "integrity": "sha512-bO/rVDiDUuM2YfuCUwZ1t1cP+/yqjqz+Xf2VtkdppefuOFS2OSeAfgafaHNkFn0t02hEyXngZkxtGqXcXwO8Rg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.2.tgz", - "integrity": "sha512-hr26p7e93Rl0Za+JwW7EAnwAvKkehh12BU1Llm9Ykiibg4uIr2rbpxG9WCf56GuvidlTG9KiiQT/TXT1yAWxTA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.2.tgz", - "integrity": "sha512-pOjB/uSIyDt+ow3k/RcLvUAOGpysT2phDn7TTUB3n75SlIgZzM6NKAqlErPhoFU+npgY3/n+2HYIQVbF70P9/A==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loong64-musl": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.2.tgz", - "integrity": "sha512-2/w+q8jszv9Ww1c+6uJT3OwqhdmGP2/4T17cu8WuwyUuuaCDDJ2ojdyYwZzCxx0GcsZBhzi3HmH+J5pZNXnd+Q==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.2.tgz", - "integrity": "sha512-11+aL5vKheYgczxtPVVRhdptAM2H7fcDR5Gw4/bTcteuZBlH4oP9f5s9zYO9aGZvoGeBpqXI/9TZZihZ609wKw==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-ppc64-musl": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.2.tgz", - "integrity": "sha512-i16fokAGK46IVZuV8LIIwMdtqhin9hfYkCh8pf8iC3QU3LpwL+1FSFGej+O7l3E/AoknL6Dclh2oTdnRMpTzFQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.2.tgz", - "integrity": "sha512-49FkKS6RGQoriDSK/6E2GkAsAuU5kETFCh7pG4yD/ylj9rKhTmO3elsnmBvRD4PgJPds5W2PkhC82aVwmUcJ7A==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.2.tgz", - "integrity": "sha512-mjYNkHPfGpUR00DuM1ZZIgs64Hpf4bWcz9Z41+4Q+pgDx73UwWdAYyf6EG/lRFldmdHHzgrYyge5akFUW0D3mQ==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.2.tgz", - "integrity": "sha512-ALyvJz965BQk8E9Al/JDKKDLH2kfKFLTGMlgkAbbYtZuJt9LU8DW3ZoDMCtQpXAltZxwBHevXz5u+gf0yA0YoA==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.2.tgz", - "integrity": "sha512-UQjrkIdWrKI626Du8lCQ6MJp/6V1LAo2bOK9OTu4mSn8GGXIkPXk/Vsp4bLHCd9Z9Iz2OTEaokUE90VweJgIYQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.2.tgz", - "integrity": "sha512-bTsRGj6VlSdn/XD4CGyzMnzaBs9bsRxy79eTqTCBsA8TMIEky7qg48aPkvJvFe1HyzQ5oMZdg7AnVlWQSKLTnw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-openbsd-x64": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.2.tgz", - "integrity": "sha512-6d4Z3534xitaA1FcMWP7mQPq5zGwBmGbhphh2DwaA1aNIXUu3KTOfwrWpbwI4/Gr0uANo7NTtaykFyO2hPuFLg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ] - }, - "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.2.tgz", - "integrity": "sha512-NetAg5iO2uN7eB8zE5qrZ3CSil+7IJt4WDFLcC75Ymywq1VZVD6qJ6EvNLjZ3rEm6gB7XW5JdT60c6MN35Z85Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.2.tgz", - "integrity": "sha512-NCYhOotpgWZ5kdxCZsv6Iudx0wX8980Q/oW4pNFNihpBKsDbEA1zpkfxJGC0yugsUuyDZ7gL37dbzwhR0VI7pQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.2.tgz", - "integrity": "sha512-RXsaOqXxfoUBQoOgvmmijVxJnW2IGB0eoMO7F8FAjaj0UTywUO/luSqimWBJn04WNgUkeNhh7fs7pESXajWmkg==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.2.tgz", - "integrity": "sha512-qdAzEULD+/hzObedtmV6iBpdL5TIbKVztGiK7O3/KYSf+HIzU257+MX1EXJcyIiDbMAqmbwaufcYPvyRryeZtA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.2.tgz", - "integrity": "sha512-Nd/SgG27WoA9e+/TdK74KnHz852TLa94ovOYySo/yMPuTmpckK/jIF2jSwS3g7ELSKXK13/cVdmg1Z/DaCWKxA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@shikijs/engine-oniguruma": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.21.0.tgz", - "integrity": "sha512-OYknTCct6qiwpQDqDdf3iedRdzj6hFlOPv5hMvI+hkWfCKs5mlJ4TXziBG9nyabLwGulrUjHiCq3xCspSzErYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/types": "3.21.0", - "@shikijs/vscode-textmate": "^10.0.2" - } - }, - "node_modules/@shikijs/langs": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.21.0.tgz", - "integrity": "sha512-g6mn5m+Y6GBJ4wxmBYqalK9Sp0CFkUqfNzUy2pJglUginz6ZpWbaWjDB4fbQ/8SHzFjYbtU6Ddlp1pc+PPNDVA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/types": "3.21.0" - } - }, - "node_modules/@shikijs/themes": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.21.0.tgz", - "integrity": "sha512-BAE4cr9EDiZyYzwIHEk7JTBJ9CzlPuM4PchfcA5ao1dWXb25nv6hYsoDiBq2aZK9E3dlt3WB78uI96UESD+8Mw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/types": "3.21.0" - } - }, - "node_modules/@shikijs/types": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.21.0.tgz", - "integrity": "sha512-zGrWOxZ0/+0ovPY7PvBU2gIS9tmhSUUt30jAcNV0Bq0gb2S98gwfjIs1vxlmH5zM7/4YxLamT6ChlqqAJmPPjA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/vscode-textmate": "^10.0.2", - "@types/hast": "^3.0.4" - } - }, - "node_modules/@shikijs/vscode-textmate": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", - "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@sinonjs/commons": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", - "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.0" - } - }, - "node_modules/@standard-schema/spec": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", - "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@testcontainers/weaviate": { - "version": "11.14.0", - "resolved": "https://registry.npmjs.org/@testcontainers/weaviate/-/weaviate-11.14.0.tgz", - "integrity": "sha512-Nt4cqZaq7FB1f1P3QKHrhbP2NkOFrN33p7ZwZxdaBPzCVHHhe2Rffsm3+sU+vgJuRiPcWxr87QS22cPVsDZ28w==", - "dev": true, - "license": "MIT", - "dependencies": { - "testcontainers": "^11.14.0" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", - "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", - "dev": true - }, - "node_modules/@types/babel__core": { - "version": "7.20.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.0.14", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.3.0" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.5", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", - "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", - "dev": true, - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/chai": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", - "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/deep-eql": "*", - "assertion-error": "^2.0.1" - } - }, - "node_modules/@types/color-name": { - "version": "1.1.1", - "license": "MIT" - }, - "node_modules/@types/connect": { - "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/deep-eql": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", - "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/docker-modem": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@types/docker-modem/-/docker-modem-3.0.6.tgz", - "integrity": "sha512-yKpAGEuKRSS8wwx0joknWxsmLha78wNMe9R2S3UNsVOkZded8UqOrV8KoeDXoXsjndxwyF3eIhyClGbO1SEhEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/ssh2": "*" - } - }, - "node_modules/@types/dockerode": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/dockerode/-/dockerode-4.0.1.tgz", - "integrity": "sha512-cmUpB+dPN955PxBEuXE3f6lKO1hHiIGYJA46IVF3BJpNsZGvtBDcRnlrHYHtOH/B6vtDOyl2kZ2ShAu3mgc27Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/docker-modem": "*", - "@types/node": "*", - "@types/ssh2": "*" - } - }, - "node_modules/@types/estree": { - "version": "0.0.39", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/express": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", - "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", - "dev": true, - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.19.5", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz", - "integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==", - "dev": true, - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", - "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/hast": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", - "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/http-errors": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", - "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", - "dev": true - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true - }, - "node_modules/@types/mime": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", - "dev": true - }, - "node_modules/@types/node": { - "version": "25.0.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.9.tgz", - "integrity": "sha512-/rpCXHlCWeqClNBwUhDcusJxXYDjZTyE8v5oTO7WbL8eij2nKhUeU89/6xgjU7N4/Vh3He0BtyhJdQbDyhiXAw==", - "license": "MIT", - "dependencies": { - "undici-types": "~7.16.0" - } - }, - "node_modules/@types/qs": { - "version": "6.9.15", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", - "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==", - "dev": true - }, - "node_modules/@types/range-parser": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "dev": true - }, - "node_modules/@types/semver": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", - "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", - "dev": true - }, - "node_modules/@types/send": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", - "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", - "dev": true, - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.15.7", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", - "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", - "dev": true, - "dependencies": { - "@types/http-errors": "*", - "@types/node": "*", - "@types/send": "*" - } - }, - "node_modules/@types/ssh2": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/@types/ssh2/-/ssh2-1.15.5.tgz", - "integrity": "sha512-N1ASjp/nXH3ovBHddRJpli4ozpk6UdDYIX4RJWFa9L1YKnzdhTlVmiGHm4DZnj/jLbqZpes4aeR30EFGQtvhQQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "^18.11.18" - } - }, - "node_modules/@types/ssh2-streams": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/@types/ssh2-streams/-/ssh2-streams-0.1.13.tgz", - "integrity": "sha512-faHyY3brO9oLEA0QlcO8N2wT7R0+1sHWZvQ+y3rMLwdY1ZyS1z0W3t65j9PqT4HmQ6ALzNe7RZlNuCNE0wBSWA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/ssh2/node_modules/@types/node": { - "version": "18.19.130", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.130.tgz", - "integrity": "sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@types/ssh2/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, - "license": "MIT" - }, - "node_modules/@types/stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/unist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", - "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-rFT3ak0/2trgvp4yYZo5iKFEPsET7vKydKF+VRCxlQ9bpheehyAJH89dAkaLEq/j/RZXJIqcgsmPJKUP1Z28HA==", - "dev": true - }, - "node_modules/@types/ws": { - "version": "8.5.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/yargs": { - "version": "17.0.22", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", - "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", - "dev": true, - "dependencies": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/type-utils": "6.21.0", - "@typescript-eslint/utils": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.4", - "natural-compare": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/eslint-plugin/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==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/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==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/@typescript-eslint/parser": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", - "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", - "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", - "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", - "dev": true, - "dependencies": { - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/utils": "6.21.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", - "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", - "dev": true, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", - "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", - "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", - "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "semver": "^7.5.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", - "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "6.21.0", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@vitest/expect": { - "version": "4.0.17", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.0.17.tgz", - "integrity": "sha512-mEoqP3RqhKlbmUmntNDDCJeTDavDR+fVYkSOw8qRwJFaW/0/5zA9zFeTrHqNtcmwh6j26yMmwx2PqUDPzt5ZAQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@standard-schema/spec": "^1.0.0", - "@types/chai": "^5.2.2", - "@vitest/spy": "4.0.17", - "@vitest/utils": "4.0.17", - "chai": "^6.2.1", - "tinyrainbow": "^3.0.3" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/mocker": { - "version": "4.0.17", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.0.17.tgz", - "integrity": "sha512-+ZtQhLA3lDh1tI2wxe3yMsGzbp7uuJSWBM1iTIKCbppWTSBN09PUC+L+fyNlQApQoR+Ps8twt2pbSSXg2fQVEQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/spy": "4.0.17", - "estree-walker": "^3.0.3", - "magic-string": "^0.30.21" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "msw": "^2.4.9", - "vite": "^6.0.0 || ^7.0.0-0" - }, - "peerDependenciesMeta": { - "msw": { - "optional": true - }, - "vite": { - "optional": true - } - } - }, - "node_modules/@vitest/mocker/node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@vitest/mocker/node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0" - } - }, - "node_modules/@vitest/pretty-format": { - "version": "4.0.17", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.0.17.tgz", - "integrity": "sha512-Ah3VAYmjcEdHg6+MwFE17qyLqBHZ+ni2ScKCiW2XrlSBV4H3Z7vYfPfz7CWQ33gyu76oc0Ai36+kgLU3rfF4nw==", - "dev": true, - "license": "MIT", - "dependencies": { - "tinyrainbow": "^3.0.3" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/runner": { - "version": "4.0.17", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.0.17.tgz", - "integrity": "sha512-JmuQyf8aMWoo/LmNFppdpkfRVHJcsgzkbCA+/Bk7VfNH7RE6Ut2qxegeyx2j3ojtJtKIbIGy3h+KxGfYfk28YQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/utils": "4.0.17", - "pathe": "^2.0.3" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/snapshot": { - "version": "4.0.17", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.0.17.tgz", - "integrity": "sha512-npPelD7oyL+YQM2gbIYvlavlMVWUfNNGZPcu0aEUQXt7FXTuqhmgiYupPnAanhKvyP6Srs2pIbWo30K0RbDtRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/pretty-format": "4.0.17", - "magic-string": "^0.30.21", - "pathe": "^2.0.3" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/spy": { - "version": "4.0.17", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.0.17.tgz", - "integrity": "sha512-I1bQo8QaP6tZlTomQNWKJE6ym4SHf3oLS7ceNjozxxgzavRAgZDc06T7kD8gb9bXKEgcLNt00Z+kZO6KaJ62Ew==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/utils": { - "version": "4.0.17", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.0.17.tgz", - "integrity": "sha512-RG6iy+IzQpa9SB8HAFHJ9Y+pTzI+h8553MrciN9eC6TFBErqrQaTas4vG+MVj8S4uKk8uTT2p0vgZPnTdxd96w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/pretty-format": "4.0.17", - "tinyrainbow": "^3.0.3" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/abbrev": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz", - "integrity": "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dev": true, - "license": "MIT", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, - "node_modules/abort-controller-x": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/abort-controller-x/-/abort-controller-x-0.5.0.tgz", - "integrity": "sha512-yTt9CI0x+nRfX6BFMenEGP8ooPvErGH6AbFz20C2IeOLIlDsrw/VHpgne3GsCEuTA410IiFiaLVFKmgM4bKEPQ==", - "license": "MIT" - }, - "node_modules/accepts": { - "version": "1.3.8", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/agent-base": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", - "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", - "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.2.1", - "license": "MIT", - "dependencies": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "dev": true, - "license": "MIT" - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/archiver": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-7.0.1.tgz", - "integrity": "sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "archiver-utils": "^5.0.2", - "async": "^3.2.4", - "buffer-crc32": "^1.0.0", - "readable-stream": "^4.0.0", - "readdir-glob": "^1.1.2", - "tar-stream": "^3.0.0", - "zip-stream": "^6.0.1" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/archiver-utils": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-5.0.2.tgz", - "integrity": "sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==", - "dev": true, - "license": "MIT", - "dependencies": { - "glob": "^10.0.0", - "graceful-fs": "^4.2.0", - "is-stream": "^2.0.1", - "lazystream": "^1.0.0", - "lodash": "^4.17.15", - "normalize-path": "^3.0.0", - "readable-stream": "^4.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/archiver-utils/node_modules/brace-expansion": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", - "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/archiver-utils/node_modules/glob": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", - "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/archiver-utils/node_modules/minimatch": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", - "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.2" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "node_modules/argparse": { - "version": "1.0.10", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/assertion-error": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", - "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", - "dev": true, - "license": "MIT", - "engines": { - "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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/async": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", - "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", - "dev": true, - "license": "MIT" - }, - "node_modules/async-lock": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/async-lock/-/async-lock-1.4.1.tgz", - "integrity": "sha512-Az2ZTpuytrtqENulXwO3GGv1Bztugx6TT37NIo7imr/Qo0gsYiGtSdBa2B6fsXhTpVZDNfu1Qn3pk531e3q+nQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/b4a": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.8.0.tgz", - "integrity": "sha512-qRuSmNSkGQaHwNbM7J78Wwy+ghLEYF1zNrSeMxj4Kgw6y33O3mXcQ6Ie9fRvfU/YnxWkOchPXbaLb73TkIsfdg==", - "dev": true, - "license": "Apache-2.0", - "peerDependencies": { - "react-native-b4a": "*" - }, - "peerDependenciesMeta": { - "react-native-b4a": { - "optional": true - } - } - }, - "node_modules/babel-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", - "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/transform": "^29.7.0", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.6.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", - "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-jest": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", - "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-plugin-jest-hoist": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/bare-events": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.2.tgz", - "integrity": "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==", - "dev": true, - "license": "Apache-2.0", - "peerDependencies": { - "bare-abort-controller": "*" - }, - "peerDependenciesMeta": { - "bare-abort-controller": { - "optional": true - } - } - }, - "node_modules/bare-fs": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.7.1.tgz", - "integrity": "sha512-WDRsyVN52eAx/lBamKD6uyw8H4228h/x0sGGGegOamM2cd7Pag88GfMQalobXI+HaEUxpCkbKQUDOQqt9wawRw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "bare-events": "^2.5.4", - "bare-path": "^3.0.0", - "bare-stream": "^2.6.4", - "bare-url": "^2.2.2", - "fast-fifo": "^1.3.2" - }, - "engines": { - "bare": ">=1.16.0" - }, - "peerDependencies": { - "bare-buffer": "*" - }, - "peerDependenciesMeta": { - "bare-buffer": { - "optional": true - } - } - }, - "node_modules/bare-os": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.9.0.tgz", - "integrity": "sha512-JTjuZyNIDpw+GytMO4a6TK1VXdVKKJr6DRxEHasyuYyShV2deuiHJK/ahGZlebc+SG0/wJCB9XK8gprBGDFi/Q==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "bare": ">=1.14.0" - } - }, - "node_modules/bare-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz", - "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "bare-os": "^3.0.1" - } - }, - "node_modules/bare-stream": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.13.0.tgz", - "integrity": "sha512-3zAJRZMDFGjdn+RVnNpF9kuELw+0Fl3lpndM4NcEOhb9zwtSo/deETfuIwMSE5BXanA0FrN1qVjffGwAg2Y7EA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "streamx": "^2.25.0", - "teex": "^1.0.1" - }, - "peerDependencies": { - "bare-abort-controller": "*", - "bare-buffer": "*", - "bare-events": "*" - }, - "peerDependenciesMeta": { - "bare-abort-controller": { - "optional": true - }, - "bare-buffer": { - "optional": true - }, - "bare-events": { - "optional": true - } - } - }, - "node_modules/bare-url": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.4.2.tgz", - "integrity": "sha512-/9a2j4ac6ckpmAHvod/ob7x439OAHst/drc2Clnq+reRYd/ovddwcF4LfoxHyNk5AuGBnPg+HqFjmE/Zpq6v0A==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "bare-path": "^3.0.0" - } - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "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" - } - ], - "license": "MIT" - }, - "node_modules/baseline-browser-mapping": { - "version": "2.9.15", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.15.tgz", - "integrity": "sha512-kX8h7K2srmDyYnXRIppo4AH/wYgzWVCs+eKr3RusRSQ5PvRYoEFmR/I0PbdTjKFAoKqp5+kbxnNTFO9jOfSVJg==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "baseline-browser-mapping": "dist/cli.js" - } - }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/bl/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "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" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/bl/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/body-parser": { - "version": "1.20.4", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", - "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", - "dev": true, - "license": "MIT", - "dependencies": { - "bytes": "~3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "~1.2.0", - "http-errors": "~2.0.1", - "iconv-lite": "~0.4.24", - "on-finished": "~2.4.1", - "qs": "~6.14.0", - "raw-body": "~2.5.3", - "type-is": "~1.6.18", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/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, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "depd": "~2.0.0", - "inherits": "~2.0.4", - "setprototypeof": "~1.2.0", - "statuses": "~2.0.2", - "toidentifier": "~1.0.1" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, - "node_modules/body-parser/node_modules/statuses": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", - "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", - "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "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.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", - "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "baseline-browser-mapping": "^2.9.0", - "caniuse-lite": "^1.0.30001759", - "electron-to-chromium": "^1.5.263", - "node-releases": "^2.0.27", - "update-browserslist-db": "^1.2.0" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bs-logger": { - "version": "0.2.6", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-json-stable-stringify": "2.x" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "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" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/buffer-crc32": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-1.0.0.tgz", - "integrity": "sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/buildcheck": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.7.tgz", - "integrity": "sha512-lHblz4ahamxpTmnsk+MNTRWsjYKv965MwOrSJyeD588rR3Jcu7swE+0wN5F+PbL5cjgu/9ObkhfzEPuofEMwLA==", - "dev": true, - "optional": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/bundle-require": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/bundle-require/-/bundle-require-5.1.0.tgz", - "integrity": "sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==", - "dev": true, - "license": "MIT", - "dependencies": { - "load-tsconfig": "^0.2.3" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "peerDependencies": { - "esbuild": ">=0.18" - } - }, - "node_modules/byline": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz", - "integrity": "sha512-s6webAy+R4SR8XVuJWt2V2rGvhnrhxN+9S15GNuTK3wKPOXFF6RNc+8ug2XhH+2s4f+uudG4kUVYmYOQWL2g0Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cac": { - "version": "6.7.14", - "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", - "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001765", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001765.tgz", - "integrity": "sha512-LWcNtSyZrakjECqmpP4qdg0MMGdN368D7X8XvvAqOcqMv0RxnlqVKZl2V6/mBR68oYMxOZPLw/gO7DuisMHUvQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/case-anything": { - "version": "2.1.13", - "resolved": "https://registry.npmjs.org/case-anything/-/case-anything-2.1.13.tgz", - "integrity": "sha512-zlOQ80VrQ2Ue+ymH5OuM/DlDq64mEm+B9UTdHULv5osUMD6HalNTblf2b1u/m6QecjsnOkBpqVZ+XPwIVsy7Ng==", - "dev": true, - "engines": { - "node": ">=12.13" - }, - "funding": { - "url": "https://github.com/sponsors/mesqueeb" - } - }, - "node_modules/chai": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz", - "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", - "dev": true, - "license": "MIT", - "dependencies": { - "readdirp": "^4.0.1" - }, - "engines": { - "node": ">= 14.16.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/chownr": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", - "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/ci-info": { - "version": "3.8.0", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/cjs-module-lexer": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", - "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-truncate": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", - "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", - "dev": true, - "dependencies": { - "slice-ansi": "^5.0.0", - "string-width": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-truncate/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==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/cli-truncate/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==", - "dev": true - }, - "node_modules/cli-truncate/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==", - "dev": true, - "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/cli-truncate/node_modules/strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz", - "integrity": "sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==", - "dev": true, - "license": "MIT" - }, - "node_modules/color-convert": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "license": "MIT" - }, - "node_modules/colorette": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", - "dev": true - }, - "node_modules/commander": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.0.tgz", - "integrity": "sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==", - "dev": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/compress-commons": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-6.0.2.tgz", - "integrity": "sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "crc-32": "^1.2.0", - "crc32-stream": "^6.0.0", - "is-stream": "^2.0.1", - "normalize-path": "^3.0.0", - "readable-stream": "^4.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/confbox": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", - "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/consola": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", - "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.18.0 || >=16.10.0" - } - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dev": true, - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, - "license": "MIT" - }, - "node_modules/cookie": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dev": true - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/cpu-features": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.10.tgz", - "integrity": "sha512-9IkYqtX3YHPCzoVg1Py+o9057a3i0fp7S530UWokCSaFVTc7CwXPRiOjRjBQQ18ZCNafx78YfnG+HALxtVmOGA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "dependencies": { - "buildcheck": "~0.0.6", - "nan": "^2.19.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/crc-32": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", - "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "crc32": "bin/crc32.njs" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/crc32-stream": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-6.0.0.tgz", - "integrity": "sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==", - "dev": true, - "license": "MIT", - "dependencies": { - "crc-32": "^1.2.0", - "readable-stream": "^4.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/create-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", - "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "prompts": "^2.0.1" - }, - "bin": { - "create-jest": "bin/create-jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "node_modules/cross-fetch": { - "version": "3.1.5", - "license": "MIT", - "dependencies": { - "node-fetch": "2.6.7" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/dedent": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.1.tgz", - "integrity": "sha512-9JmrhGZpOlEgOLdQgSm0zxFaYoQon408V1v49aqTWuXENVlnCuY9JBZcXZiCsZQWDjTm5Qf/nIvAy77mXDAjEg==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "babel-plugin-macros": "^3.1.0" - }, - "peerDependenciesMeta": { - "babel-plugin-macros": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-libc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", - "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=8" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/diff": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz", - "integrity": "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/diff-sequences": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/docker-compose": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/docker-compose/-/docker-compose-1.4.2.tgz", - "integrity": "sha512-rPHigTKGaEHpkUmfd69QgaOp+Os5vGJwG/Ry8lcr8W/382AmI+z/D7qoa9BybKIkqNppaIbs8RYeHSevdQjWww==", - "dev": true, - "license": "MIT", - "dependencies": { - "yaml": "^2.2.2" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/docker-modem": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/docker-modem/-/docker-modem-5.0.7.tgz", - "integrity": "sha512-XJgGhoR/CLpqshm4d3L7rzH6t8NgDFUIIpztYlLHIApeJjMZKYJMz2zxPsYxnejq5h3ELYSw/RBsi3t5h7gNTA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "debug": "^4.1.1", - "readable-stream": "^3.5.0", - "split-ca": "^1.0.1", - "ssh2": "^1.15.0" - }, - "engines": { - "node": ">= 8.0" - } - }, - "node_modules/docker-modem/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/dockerode": { - "version": "4.0.12", - "resolved": "https://registry.npmjs.org/dockerode/-/dockerode-4.0.12.tgz", - "integrity": "sha512-/bCZd6KlGcjZO8Buqmi/vXuqEGVEZ0PNjx/biBNqJD3MhK9DmdiAuKxqfNhflgDESDIiBz3qF+0e55+CpnrUcw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@balena/dockerignore": "^1.0.2", - "@grpc/grpc-js": "^1.11.1", - "@grpc/proto-loader": "^0.7.13", - "docker-modem": "^5.0.7", - "protobufjs": "^7.3.2", - "tar-fs": "^2.1.4", - "uuid": "^10.0.0" - }, - "engines": { - "node": ">= 8.0" - } - }, - "node_modules/dockerode/node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true, - "license": "ISC" - }, - "node_modules/dockerode/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/dockerode/node_modules/tar-fs": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", - "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/dockerode/node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/dockerode/node_modules/uuid": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", - "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", - "dev": true, - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dprint-node": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/dprint-node/-/dprint-node-1.0.8.tgz", - "integrity": "sha512-iVKnUtYfGrYcW1ZAlfR/F59cUVL8QIhWoBJoSjkkdua/dkWIgjZfiLMeTjiB06X0ZLkQ0M2C1VbUj/CxkIf1zg==", - "dev": true, - "dependencies": { - "detect-libc": "^1.0.3" - } - }, - "node_modules/dprint-node/node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", - "dev": true, - "bin": { - "detect-libc": "bin/detect-libc.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true, - "license": "MIT" - }, - "node_modules/electron-to-chromium": { - "version": "1.5.267", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz", - "integrity": "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==", - "dev": true, - "license": "ISC" - }, - "node_modules/emittery": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "license": "MIT" - }, - "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/error-ex": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", - "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "dev": true, - "license": "MIT", - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-module-lexer": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", - "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", - "dev": true, - "license": "MIT" - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/esbuild": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz", - "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.5", - "@esbuild/android-arm": "0.25.5", - "@esbuild/android-arm64": "0.25.5", - "@esbuild/android-x64": "0.25.5", - "@esbuild/darwin-arm64": "0.25.5", - "@esbuild/darwin-x64": "0.25.5", - "@esbuild/freebsd-arm64": "0.25.5", - "@esbuild/freebsd-x64": "0.25.5", - "@esbuild/linux-arm": "0.25.5", - "@esbuild/linux-arm64": "0.25.5", - "@esbuild/linux-ia32": "0.25.5", - "@esbuild/linux-loong64": "0.25.5", - "@esbuild/linux-mips64el": "0.25.5", - "@esbuild/linux-ppc64": "0.25.5", - "@esbuild/linux-riscv64": "0.25.5", - "@esbuild/linux-s390x": "0.25.5", - "@esbuild/linux-x64": "0.25.5", - "@esbuild/netbsd-arm64": "0.25.5", - "@esbuild/netbsd-x64": "0.25.5", - "@esbuild/openbsd-arm64": "0.25.5", - "@esbuild/openbsd-x64": "0.25.5", - "@esbuild/sunos-x64": "0.25.5", - "@esbuild/win32-arm64": "0.25.5", - "@esbuild/win32-ia32": "0.25.5", - "@esbuild/win32-x64": "0.25.5" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true, - "license": "MIT" - }, - "node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint": { - "version": "8.35.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.35.0.tgz", - "integrity": "sha512-BxAf1fVL7w+JLRQhWl2pzGeSiGqbWumV4WNvc9Rhp6tiCtm4oHnyPBSEtMGZwrQgudFQ+otqzWoPB7x+hxoWsw==", - "dev": true, - "dependencies": { - "@eslint/eslintrc": "^2.0.0", - "@eslint/js": "8.35.0", - "@humanwhocodes/config-array": "^0.11.8", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.4.0", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "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", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-sdsl": "^4.1.4", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-prettier": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.7.0.tgz", - "integrity": "sha512-HHVXLSlVUhMSmyW4ZzEuvjpwqamgmlfkutD53cYXLikh4pt/modINRcCIApJ84czDxM4GZInwUrromsDdTImTA==", - "dev": true, - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-plugin-prettier": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", - "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", - "dev": true, - "dependencies": { - "prettier-linter-helpers": "^1.0.0" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "eslint": ">=7.28.0", - "prettier": ">=2.0.0" - }, - "peerDependenciesMeta": { - "eslint-config-prettier": { - "optional": true - } - } - }, - "node_modules/eslint-utils": { - "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": "^2.0.0" - }, - "engines": { - "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": "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": ">=10" - } - }, - "node_modules/eslint-visitor-keys": { - "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": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "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/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/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/js-yaml": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/eslint/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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/espree": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", - "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", - "dev": true, - "dependencies": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "dev": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estree-walker": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/events-universal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz", - "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "bare-events": "^2.7.0" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/expect-utils": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/expect-type": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz", - "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/express": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz", - "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", - "dev": true, - "license": "MIT", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "~1.20.3", - "content-disposition": "~0.5.4", - "content-type": "~1.0.4", - "cookie": "~0.7.1", - "cookie-signature": "~1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.3.1", - "fresh": "~0.5.2", - "http-errors": "~2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "~2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "~0.1.12", - "proxy-addr": "~2.0.7", - "qs": "~6.14.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "~0.19.0", - "serve-static": "~1.16.2", - "setprototypeof": "1.2.0", - "statuses": "~2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/express/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" - } - }, - "node_modules/express/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/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true - }, - "node_modules/fast-fifo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", - "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-range": { - "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" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/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, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, - "node_modules/find-up": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fix-dts-default-cjs-exports": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fix-dts-default-cjs-exports/-/fix-dts-default-cjs-exports-1.0.1.tgz", - "integrity": "sha512-pVIECanWFC61Hzl2+oOCtoJ3F17kglZC/6N94eRWycFgBH35hHx0Li604ZIzhseh97mf2p0cv7vVrOZGoqhlEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "magic-string": "^0.30.17", - "mlly": "^1.7.4", - "rollup": "^4.34.8" - } - }, - "node_modules/fix-dts-default-cjs-exports/node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/fix-dts-default-cjs-exports/node_modules/rollup": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.2.tgz", - "integrity": "sha512-J9qZyW++QK/09NyN/zeO0dG/1GdGfyp9lV8ajHnRVLfo/uFsbji5mHnDgn/qYdUHyCkM2N+8VyspgZclfAh0eQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "1.0.8" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.60.2", - "@rollup/rollup-android-arm64": "4.60.2", - "@rollup/rollup-darwin-arm64": "4.60.2", - "@rollup/rollup-darwin-x64": "4.60.2", - "@rollup/rollup-freebsd-arm64": "4.60.2", - "@rollup/rollup-freebsd-x64": "4.60.2", - "@rollup/rollup-linux-arm-gnueabihf": "4.60.2", - "@rollup/rollup-linux-arm-musleabihf": "4.60.2", - "@rollup/rollup-linux-arm64-gnu": "4.60.2", - "@rollup/rollup-linux-arm64-musl": "4.60.2", - "@rollup/rollup-linux-loong64-gnu": "4.60.2", - "@rollup/rollup-linux-loong64-musl": "4.60.2", - "@rollup/rollup-linux-ppc64-gnu": "4.60.2", - "@rollup/rollup-linux-ppc64-musl": "4.60.2", - "@rollup/rollup-linux-riscv64-gnu": "4.60.2", - "@rollup/rollup-linux-riscv64-musl": "4.60.2", - "@rollup/rollup-linux-s390x-gnu": "4.60.2", - "@rollup/rollup-linux-x64-gnu": "4.60.2", - "@rollup/rollup-linux-x64-musl": "4.60.2", - "@rollup/rollup-openbsd-x64": "4.60.2", - "@rollup/rollup-openharmony-arm64": "4.60.2", - "@rollup/rollup-win32-arm64-msvc": "4.60.2", - "@rollup/rollup-win32-ia32-msvc": "4.60.2", - "@rollup/rollup-win32-x64-gnu": "4.60.2", - "@rollup/rollup-win32-x64-msvc": "4.60.2", - "fsevents": "~2.3.2" - } - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", - "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", - "dev": true, - "license": "ISC" - }, - "node_modules/foreground-child": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", - "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", - "dev": true, - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/foreground-child/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==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true, - "license": "MIT" - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-port": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-7.2.0.tgz", - "integrity": "sha512-afP4W205ONCuMoPBqcR6PSXnzX35KTcJygfJfcp+QY+uwm3p20p1YczWXhlICIzGMCxYBQcySEcOgsJcrkyobg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "dev": true, - "license": "ISC", - "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/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/globalyzer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", - "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", - "dev": true - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globrex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", - "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", - "dev": true - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "dev": true, - "license": "ISC" - }, - "node_modules/grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true - }, - "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/graphql": { - "version": "16.12.0", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.12.0.tgz", - "integrity": "sha512-DKKrynuQRne0PNpEbzuEdHlYOMksHSUI8Zc9Unei5gTsMNA2/vMpoMz/yKba50pejK56qj98qM0SjYxAKi13gQ==", - "license": "MIT", - "engines": { - "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" - } - }, - "node_modules/graphql-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/graphql-request/-/graphql-request-6.1.0.tgz", - "integrity": "sha512-p+XPfS4q7aIpKVcgmnZKhMNqhltk20hfXtkaIkTfjjmiKMJ5xrt5c743cL03y/K7y1rg3WrIC49xGiEQ4mxdNw==", - "dependencies": { - "@graphql-typed-document-node/core": "^3.2.0", - "cross-fetch": "^3.1.5" - }, - "peerDependencies": { - "graphql": "14 - 16" - } - }, - "node_modules/grpc-tools": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/grpc-tools/-/grpc-tools-1.13.1.tgz", - "integrity": "sha512-0sttMUxThNIkCTJq5qI0xXMz5zWqV2u3yG1kR3Sj9OokGIoyRBFjoInK9NyW7x5fH7knj48Roh1gq5xbl0VoDQ==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "@mapbox/node-pre-gyp": "^2.0.0" - }, - "bin": { - "grpc_tools_node_protoc": "bin/protoc.js", - "grpc_tools_node_protoc_plugin": "bin/protoc_plugin.js" - } - }, - "node_modules/handlebars": { - "version": "4.7.9", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.9.tgz", - "integrity": "sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.2", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "handlebars": "bin/handlebars" - }, - "engines": { - "node": ">=0.4.7" - }, - "optionalDependencies": { - "uglify-js": "^3.1.4" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true, - "license": "MIT" - }, - "node_modules/http-errors": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/https-proxy-agent": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", - "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/husky": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz", - "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==", - "dev": true, - "bin": { - "husky": "lib/bin.js" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/typicode" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "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" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/import-local": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", - "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", - "dev": true, - "license": "MIT", - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "dev": true, - "license": "ISC" - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "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-stream": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "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", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-reports": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", - "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", - "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/core": "^29.7.0", - "@jest/types": "^29.6.3", - "import-local": "^3.0.2", - "jest-cli": "^29.7.0" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-changed-files": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", - "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", - "dev": true, - "license": "MIT", - "dependencies": { - "execa": "^5.0.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-circus": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", - "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^1.0.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.7.0", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0", - "pretty-format": "^29.7.0", - "pure-rand": "^6.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-cli": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", - "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/core": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "create-jest": "^29.7.0", - "exit": "^0.1.2", - "import-local": "^3.0.2", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "yargs": "^17.3.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-config": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", - "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-jest": "^29.7.0", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-diff": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", - "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-docblock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", - "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-each": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", - "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "jest-util": "^29.7.0", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-environment-node": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", - "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", - "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/jest-leak-detector": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", - "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", - "dev": true, - "license": "MIT", - "dependencies": { - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-matcher-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", - "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-message-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", - "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-mock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", - "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", - "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", - "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", - "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", - "dev": true, - "license": "MIT", - "dependencies": { - "jest-regex-util": "^29.6.3", - "jest-snapshot": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runner": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", - "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/environment": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-leak-detector": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-resolve": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-util": "^29.7.0", - "jest-watcher": "^29.7.0", - "jest-worker": "^29.7.0", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runtime": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", - "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/globals": "^29.7.0", - "@jest/source-map": "^29.6.3", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-snapshot": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", - "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "natural-compare": "^1.4.0", - "pretty-format": "^29.7.0", - "semver": "^7.5.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", - "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "leven": "^3.1.0", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-watcher": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", - "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.7.0", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/joycon": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", - "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/js-sdsl": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz", - "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/js-sdsl" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", - "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.3", - "dev": true, - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/lazystream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", - "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", - "dev": true, - "license": "MIT", - "dependencies": { - "readable-stream": "^2.0.5" - }, - "engines": { - "node": ">= 0.6.3" - } - }, - "node_modules/lazystream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/lazystream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "license": "MIT" - }, - "node_modules/lazystream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "dev": true, - "license": "MIT" - }, - "node_modules/linkify-it": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", - "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "uc.micro": "^2.0.0" - } - }, - "node_modules/lint-staged": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-13.2.0.tgz", - "integrity": "sha512-GbyK5iWinax5Dfw5obm2g2ccUiZXNGtAS4mCbJ0Lv4rq6iEtfBSjOYdcbOtAIFtM114t0vdpViDDetjVTSd8Vw==", - "dev": true, - "dependencies": { - "chalk": "5.2.0", - "cli-truncate": "^3.1.0", - "commander": "^10.0.0", - "debug": "^4.3.4", - "execa": "^7.0.0", - "lilconfig": "2.1.0", - "listr2": "^5.0.7", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-inspect": "^1.12.3", - "pidtree": "^0.6.0", - "string-argv": "^0.3.1", - "yaml": "^2.2.1" - }, - "bin": { - "lint-staged": "bin/lint-staged.js" - }, - "engines": { - "node": "^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/lint-staged" - } - }, - "node_modules/lint-staged/node_modules/chalk": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", - "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", - "dev": true, - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/lint-staged/node_modules/execa": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-7.0.0.tgz", - "integrity": "sha512-tQbH0pH/8LHTnwTrsKWideqi6rFB/QNUawEwrn+WHyz7PX1Tuz2u7wfTvbaNBdP5JD5LVWxNo8/A8CHNZ3bV6g==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^4.3.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": "^14.18.0 || ^16.14.0 || >=18.0.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/lint-staged/node_modules/human-signals": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.0.tgz", - "integrity": "sha512-zyzVyMjpGBX2+6cDVZeFPCdtOtdsxOeseRhB9tkQ6xXmGUNrcnBzdEKPy3VPNYz+4gy1oukVOXcrJCunSyc6QQ==", - "dev": true, - "engines": { - "node": ">=14.18.0" - } - }, - "node_modules/lint-staged/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/npm-run-path": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", - "dev": true, - "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dev": true, - "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/listr2": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-5.0.7.tgz", - "integrity": "sha512-MD+qXHPmtivrHIDRwPYdfNkrzqDiuaKU/rfBcec3WMyMF3xylQj3jMq344OtvQxz7zaCFViRAeqlr2AFhPvXHw==", - "dev": true, - "dependencies": { - "cli-truncate": "^2.1.0", - "colorette": "^2.0.19", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rfdc": "^1.3.0", - "rxjs": "^7.8.0", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": "^14.13.1 || >=16.0.0" - }, - "peerDependencies": { - "enquirer": ">= 2.3.0 < 3" - }, - "peerDependenciesMeta": { - "enquirer": { - "optional": true - } - } - }, - "node_modules/listr2/node_modules/cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, - "dependencies": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/listr2/node_modules/slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/load-tsconfig": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/load-tsconfig/-/load-tsconfig-0.2.5.tgz", - "integrity": "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/locate-path": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", - "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "license": "MIT" - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "dev": true, - "license": "MIT" - }, - "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/lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", - "dev": true - }, - "node_modules/log-update": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/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/log-update/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/long": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", - "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", - "license": "Apache-2.0" - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/lunr": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", - "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", - "dev": true - }, - "node_modules/magic-string": { - "version": "0.30.21", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", - "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.5" - } - }, - "node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "dev": true, - "license": "ISC" - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "tmpl": "1.0.5" - } - }, - "node_modules/markdown-it": { - "version": "14.1.1", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.1.tgz", - "integrity": "sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1", - "entities": "^4.4.0", - "linkify-it": "^5.0.0", - "mdurl": "^2.0.0", - "punycode.js": "^2.3.1", - "uc.micro": "^2.1.0" - }, - "bin": { - "markdown-it": "bin/markdown-it.mjs" - } - }, - "node_modules/markdown-it/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, - "license": "Python-2.0" - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/mdurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", - "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", - "dev": true, - "license": "MIT" - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/minizlib": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", - "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "minipass": "^7.1.2" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/mkdirp": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", - "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", - "dev": true, - "license": "MIT", - "bin": { - "mkdirp": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true, - "license": "MIT" - }, - "node_modules/mlly": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.4.tgz", - "integrity": "sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^8.14.0", - "pathe": "^2.0.1", - "pkg-types": "^1.3.0", - "ufo": "^1.5.4" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, - "node_modules/nan": { - "version": "2.26.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.26.2.tgz", - "integrity": "sha512-0tTvBTYkt3tdGw22nrAy50x7gpbGCCFH3AFcyS5WiUu7Eu4vWlri1woE6qHBSfy11vksDqkiwjOnlR7WV8G1Hw==", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/negotiator": { - "version": "0.6.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true, - "license": "MIT" - }, - "node_modules/nice-grpc": { - "version": "2.1.14", - "resolved": "https://registry.npmjs.org/nice-grpc/-/nice-grpc-2.1.14.tgz", - "integrity": "sha512-GK9pKNxlvnU5FAdaw7i2FFuR9CqBspcE+if2tqnKXBcE0R8525wj4BZvfcwj7FjvqbssqKxRHt2nwedalbJlww==", - "license": "MIT", - "dependencies": { - "@grpc/grpc-js": "^1.14.0", - "abort-controller-x": "^0.4.0", - "nice-grpc-common": "^2.0.2" - } - }, - "node_modules/nice-grpc-client-middleware-retry": { - "version": "3.1.13", - "resolved": "https://registry.npmjs.org/nice-grpc-client-middleware-retry/-/nice-grpc-client-middleware-retry-3.1.13.tgz", - "integrity": "sha512-Q9I/wm5lYkDTveKFirrTHBkBY137yavXZ4xQDXTPIycUp7aLXD8xPTHFhqtAFWUw05aS91uffZZRgdv3HS0y/g==", - "license": "MIT", - "dependencies": { - "abort-controller-x": "^0.4.0", - "nice-grpc-common": "^2.0.2" - } - }, - "node_modules/nice-grpc-client-middleware-retry/node_modules/abort-controller-x": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/abort-controller-x/-/abort-controller-x-0.4.3.tgz", - "integrity": "sha512-VtUwTNU8fpMwvWGn4xE93ywbogTYsuT+AUxAXOeelbXuQVIwNmC5YLeho9sH4vZ4ITW8414TTAOG1nW6uIVHCA==", - "license": "MIT" - }, - "node_modules/nice-grpc-common": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/nice-grpc-common/-/nice-grpc-common-2.0.2.tgz", - "integrity": "sha512-7RNWbls5kAL1QVUOXvBsv1uO0wPQK3lHv+cY1gwkTzirnG1Nop4cBJZubpgziNbaVc/bl9QJcyvsf/NQxa3rjQ==", - "dependencies": { - "ts-error": "^1.0.6" - } - }, - "node_modules/nice-grpc/node_modules/abort-controller-x": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/abort-controller-x/-/abort-controller-x-0.4.3.tgz", - "integrity": "sha512-VtUwTNU8fpMwvWGn4xE93ywbogTYsuT+AUxAXOeelbXuQVIwNmC5YLeho9sH4vZ4ITW8414TTAOG1nW6uIVHCA==", - "license": "MIT" - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-fetch/node_modules/tr46": { - "version": "0.0.3", - "license": "MIT" - }, - "node_modules/node-fetch/node_modules/webidl-conversions": { - "version": "3.0.1", - "license": "BSD-2-Clause" - }, - "node_modules/node-fetch/node_modules/whatwg-url": { - "version": "5.0.0", - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-releases": { - "version": "2.0.27", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", - "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/nopt": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-8.1.0.tgz", - "integrity": "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==", - "dev": true, - "license": "ISC", - "dependencies": { - "abbrev": "^3.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/obug": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.1.tgz", - "integrity": "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==", - "dev": true, - "funding": [ - "https://github.com/sponsors/sxzz", - "https://opencollective.com/debug" - ], - "license": "MIT" - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/openapi-typescript": { - "version": "5.4.2", - "resolved": "https://registry.npmjs.org/openapi-typescript/-/openapi-typescript-5.4.2.tgz", - "integrity": "sha512-tHeRv39Yh7brqJpbUntdjtUaXrTHmC4saoyTLU/0J2I8LEFQYDXRLgnmWTMiMOB2GXugJiqHa5n9sAyd6BRqiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "js-yaml": "^4.1.0", - "mime": "^3.0.0", - "prettier": "^2.6.2", - "tiny-glob": "^0.2.9", - "undici": "^5.4.0", - "yargs-parser": "^21.0.1" - }, - "bin": { - "openapi-typescript": "bin/cli.js" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/openapi-typescript/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/openapi-typescript/node_modules/js-yaml": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-locate/node_modules/p-limit": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "dev": true, - "license": "BlueOak-1.0.0" - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "license": "MIT" - }, - "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/path-to-regexp": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.13.tgz", - "integrity": "sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA==", - "dev": true, - "license": "MIT" - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/pathe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", - "dev": true, - "license": "MIT" - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true, - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pidtree": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", - "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", - "dev": true, - "bin": { - "pidtree": "bin/pidtree.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/pirates": { - "version": "4.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-types": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", - "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "confbox": "^0.1.8", - "mlly": "^1.7.4", - "pathe": "^2.0.1" - } - }, - "node_modules/postcss": { - "version": "8.5.12", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.12.tgz", - "integrity": "sha512-W62t/Se6rA0Az3DfCL0AqJwXuKwBeYg6nOaIgzP+xZ7N5BFCI7DYi1qs6ygUYT6rvfi6t9k65UMLJC+PHZpDAA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.11", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-load-config": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz", - "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "lilconfig": "^3.1.1" - }, - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "jiti": ">=1.21.0", - "postcss": ">=8.0.9", - "tsx": "^4.8.1", - "yaml": "^2.4.2" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - }, - "postcss": { - "optional": true - }, - "tsx": { - "optional": true - }, - "yaml": { - "optional": true - } - } - }, - "node_modules/postcss-load-config/node_modules/lilconfig": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", - "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antonk52" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "2.8.4", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.4.tgz", - "integrity": "sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==", - "dev": true, - "license": "MIT", - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "dependencies": { - "fast-diff": "^1.1.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/prettier-plugin-organize-imports": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/prettier-plugin-organize-imports/-/prettier-plugin-organize-imports-3.2.4.tgz", - "integrity": "sha512-6m8WBhIp0dfwu0SkgfOxJqh+HpdyfqSSLfKKRZSFbDuEQXDDndb8fTpRWkUrX/uBenkex3MgnVk0J3b3Y5byog==", - "dev": true, - "peerDependencies": { - "@volar/vue-language-plugin-pug": "^1.0.4", - "@volar/vue-typescript": "^1.0.4", - "prettier": ">=2.0", - "typescript": ">=2.9" - }, - "peerDependenciesMeta": { - "@volar/vue-language-plugin-pug": { - "optional": true - }, - "@volar/vue-typescript": { - "optional": true - } - } - }, - "node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true, - "license": "MIT" - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/proper-lockfile": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", - "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.4", - "retry": "^0.12.0", - "signal-exit": "^3.0.2" - } - }, - "node_modules/properties-reader": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/properties-reader/-/properties-reader-3.0.1.tgz", - "integrity": "sha512-WPn+h9RGEExOKdu4bsF4HksG/uzd3cFq3MFtq8PsFeExPse5Ha/VOjQNyHhjboBFwGXGev6muJYTSPAOkROq2g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@kwsites/file-exists": "^1.1.1", - "mkdirp": "^3.0.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "type": "github", - "url": "https://github.com/steveukx/properties?sponsor=1" - } - }, - "node_modules/protobufjs": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.5.tgz", - "integrity": "sha512-3wY1AxV+VBNW8Yypfd1yQY9pXnqTAN+KwQxL8iYm3/BjKYMNg4i0owhEe26PWDOMaIrzeeF98Lqd5NGz4omiIg==", - "hasInstallScript": true, - "license": "BSD-3-Clause", - "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/node": ">=13.7.0", - "long": "^5.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dev": true, - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/pump": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", - "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/punycode.js": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", - "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/pure-rand": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", - "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ], - "license": "MIT" - }, - "node_modules/qs": { - "version": "6.14.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz", - "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", - "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", - "dev": true, - "license": "MIT", - "dependencies": { - "bytes": "~3.1.2", - "http-errors": "~2.0.1", - "iconv-lite": "~0.4.24", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "depd": "~2.0.0", - "inherits": "~2.0.4", - "setprototypeof": "~1.2.0", - "statuses": "~2.0.2", - "toidentifier": "~1.0.1" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/raw-body/node_modules/statuses": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", - "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true, - "license": "MIT" - }, - "node_modules/readable-stream": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", - "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", - "dev": true, - "license": "MIT", - "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/readdir-glob": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", - "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "minimatch": "^5.1.0" - } - }, - "node_modules/readdir-glob/node_modules/brace-expansion": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", - "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/readdir-glob/node_modules/minimatch": { - "version": "5.1.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", - "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/readdirp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", - "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14.18.0" - }, - "funding": { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.11", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", - "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve.exports": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", - "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "dev": true, - "license": "MIT", - "engines": { - "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/rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "dev": true - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rollup": { - "version": "2.80.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.80.0.tgz", - "integrity": "sha512-cIFJOD1DESzpjOBl763Kp1AH7UE/0fcdHe6rZXUdQ9c50uvgigvW97u3IcSeBwOkgqL/PXPBktBCh0KEu5L8XQ==", - "dev": true, - "license": "MIT", - "peer": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=10.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "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/rxjs": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", - "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/rxjs/node_modules/tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", - "dev": true - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "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" - } - ], - "license": "MIT" - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "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/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/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, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, - "node_modules/send/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/send/node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", - "dev": true, - "license": "MIT", - "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.19.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "dev": true, - "license": "ISC" - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/siginfo": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", - "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", - "dev": true, - "license": "ISC" - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "dev": true, - "license": "ISC" - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true, - "license": "MIT" - }, - "node_modules/slash": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", - "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/slice-ansi/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==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/split-ca": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split-ca/-/split-ca-1.0.1.tgz", - "integrity": "sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/ssh-remote-port-forward": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/ssh-remote-port-forward/-/ssh-remote-port-forward-1.0.4.tgz", - "integrity": "sha512-x0LV1eVDwjf1gmG7TTnfqIzf+3VPRz7vrNIjX6oYLbeCrf/PeVY6hkT68Mg+q02qXxQhrLjB0jfgvhevoCRmLQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/ssh2": "^0.5.48", - "ssh2": "^1.4.0" - } - }, - "node_modules/ssh-remote-port-forward/node_modules/@types/ssh2": { - "version": "0.5.52", - "resolved": "https://registry.npmjs.org/@types/ssh2/-/ssh2-0.5.52.tgz", - "integrity": "sha512-lbLLlXxdCZOSJMCInKH2+9V/77ET2J6NPQHpFI0kda61Dd1KglJs+fPQBchizmzYSOJBgdTajhPqBO1xxLywvg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/ssh2-streams": "*" - } - }, - "node_modules/ssh2": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.17.0.tgz", - "integrity": "sha512-wPldCk3asibAjQ/kziWQQt1Wh3PgDFpC0XpwclzKcdT1vql6KeYxf5LIt4nlFkUeR8WuphYMKqUA56X4rjbfgQ==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "asn1": "^0.2.6", - "bcrypt-pbkdf": "^1.0.2" - }, - "engines": { - "node": ">=10.16.0" - }, - "optionalDependencies": { - "cpu-features": "~0.0.10", - "nan": "^2.23.0" - } - }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stackback": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", - "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", - "dev": true, - "license": "MIT" - }, - "node_modules/statuses": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/std-env": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", - "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", - "dev": true, - "license": "MIT" - }, - "node_modules/streamx": { - "version": "2.25.0", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.25.0.tgz", - "integrity": "sha512-0nQuG6jf1w+wddNEEXCF4nTg3LtufWINB5eFEN+5TNZW7KWJp6x87+JFL43vaAUPyCfH1wID+mNVyW6OHtFamg==", - "dev": true, - "license": "MIT", - "dependencies": { - "events-universal": "^1.0.0", - "fast-fifo": "^1.3.2", - "text-decoder": "^1.1.0" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-argv": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", - "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", - "dev": true, - "engines": { - "node": ">=0.6.19" - } - }, - "node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "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==", - "dev": true, - "license": "MIT", - "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", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/sucrase": { - "version": "3.35.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", - "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.2", - "commander": "^4.0.0", - "glob": "^10.3.10", - "lines-and-columns": "^1.1.6", - "mz": "^2.7.0", - "pirates": "^4.0.1", - "ts-interface-checker": "^0.1.9" - }, - "bin": { - "sucrase": "bin/sucrase", - "sucrase-node": "bin/sucrase-node" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/sucrase/node_modules/brace-expansion": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", - "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/sucrase/node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/sucrase/node_modules/glob": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", - "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/sucrase/node_modules/minimatch": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", - "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.2" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/tar": { - "version": "7.5.13", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.13.tgz", - "integrity": "sha512-tOG/7GyXpFevhXVh8jOPJrmtRpOTsYqUIkVdVooZYJS/z8WhfQUX8RJILmeuJNinGAMSu1veBr4asSHFt5/hng==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/fs-minipass": "^4.0.0", - "chownr": "^3.0.0", - "minipass": "^7.1.2", - "minizlib": "^3.1.0", - "yallist": "^5.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/tar-fs": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.1.2.tgz", - "integrity": "sha512-QGxxTxxyleAdyM3kpFs14ymbYmNFrfY+pHj7Z8FgtbZ7w2//VAgLMac7sT6nRpIHjppXO2AwwEOg0bPFVRcmXw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pump": "^3.0.0", - "tar-stream": "^3.1.5" - }, - "optionalDependencies": { - "bare-fs": "^4.0.1", - "bare-path": "^3.0.0" - } - }, - "node_modules/tar-stream": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.8.tgz", - "integrity": "sha512-U6QpVRyCGHva435KoNWy9PRoi2IFYCgtEhq9nmrPPpbRacPs9IH4aJ3gbrFC8dPcXvdSZ4XXfXT5Fshbp2MtlQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "b4a": "^1.6.4", - "bare-fs": "^4.5.5", - "fast-fifo": "^1.2.0", - "streamx": "^2.15.0" - } - }, - "node_modules/tar/node_modules/yallist": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", - "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/teex": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/teex/-/teex-1.0.1.tgz", - "integrity": "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "streamx": "^2.12.5" - } - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/testcontainers": { - "version": "11.14.0", - "resolved": "https://registry.npmjs.org/testcontainers/-/testcontainers-11.14.0.tgz", - "integrity": "sha512-r9pniwv/iwzyHaI7gwAvAm4Y+IvjJg3vBWdjrUCaDMc2AXIr4jKbq7jJO18Mw2ybs73pZy1Aj7p/4RVBGMRWjg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@balena/dockerignore": "^1.0.2", - "@types/dockerode": "^4.0.1", - "archiver": "^7.0.1", - "async-lock": "^1.4.1", - "byline": "^5.0.0", - "debug": "^4.4.3", - "docker-compose": "^1.4.2", - "dockerode": "^4.0.10", - "get-port": "^7.2.0", - "proper-lockfile": "^4.1.2", - "properties-reader": "^3.0.1", - "ssh-remote-port-forward": "^1.0.4", - "tar-fs": "^3.1.2", - "tmp": "^0.2.5", - "undici": "^7.24.5" - } - }, - "node_modules/testcontainers/node_modules/undici": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-7.25.0.tgz", - "integrity": "sha512-xXnp4kTyor2Zq+J1FfPI6Eq3ew5h6Vl0F/8d9XU5zZQf1tX9s2Su1/3PiMmUANFULpmksxkClamIZcaUqryHsQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=20.18.1" - } - }, - "node_modules/text-decoder": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.7.tgz", - "integrity": "sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "b4a": "^1.6.4" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "any-promise": "^1.0.0" - } - }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "dev": true, - "license": "MIT", - "dependencies": { - "thenify": ">= 3.1.0 < 4" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, - "node_modules/tiny-glob": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", - "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", - "dev": true, - "dependencies": { - "globalyzer": "0.1.0", - "globrex": "^0.1.2" - } - }, - "node_modules/tinybench": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", - "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", - "dev": true, - "license": "MIT" - }, - "node_modules/tinyexec": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", - "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/tinyglobby": { - "version": "0.2.15", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", - "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "fdir": "^6.5.0", - "picomatch": "^4.0.3" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" - } - }, - "node_modules/tinyglobby/node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", - "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/tinyrainbow": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.0.3.tgz", - "integrity": "sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/tmp": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", - "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.14" - } - }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true, - "bin": { - "tree-kill": "cli.js" - } - }, - "node_modules/ts-api-utils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", - "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", - "dev": true, - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "typescript": ">=4.2.0" - } - }, - "node_modules/ts-error": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/ts-error/-/ts-error-1.0.6.tgz", - "integrity": "sha512-tLJxacIQUM82IR7JO1UUkKlYuUTmoY9HBJAmNWFzheSlDS5SPMcNIepejHJa4BpPQLAcbRhRf3GDJzyj6rbKvA==" - }, - "node_modules/ts-interface-checker": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/ts-jest": { - "version": "29.4.6", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.6.tgz", - "integrity": "sha512-fSpWtOO/1AjSNQguk43hb/JCo16oJDnMJf3CdEGNkqsEX3t0KX96xvyX1D7PfLCpVoKu4MfVrqUkFyblYoY4lA==", - "dev": true, - "license": "MIT", - "dependencies": { - "bs-logger": "^0.2.6", - "fast-json-stable-stringify": "^2.1.0", - "handlebars": "^4.7.8", - "json5": "^2.2.3", - "lodash.memoize": "^4.1.2", - "make-error": "^1.3.6", - "semver": "^7.7.3", - "type-fest": "^4.41.0", - "yargs-parser": "^21.1.1" - }, - "bin": { - "ts-jest": "cli.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" - }, - "peerDependencies": { - "@babel/core": ">=7.0.0-beta.0 <8", - "@jest/transform": "^29.0.0 || ^30.0.0", - "@jest/types": "^29.0.0 || ^30.0.0", - "babel-jest": "^29.0.0 || ^30.0.0", - "jest": "^29.0.0 || ^30.0.0", - "jest-util": "^29.0.0 || ^30.0.0", - "typescript": ">=4.3 <6" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "@jest/transform": { - "optional": true - }, - "@jest/types": { - "optional": true - }, - "babel-jest": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "jest-util": { - "optional": true - } - } - }, - "node_modules/ts-jest/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ts-jest/node_modules/type-fest": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", - "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "dev": true, - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/ts-poet": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/ts-poet/-/ts-poet-6.9.0.tgz", - "integrity": "sha512-roe6W6MeZmCjRmppyfOURklO5tQFQ6Sg7swURKkwYJvV7dbGCrK28um5+51iW3twdPRKtwarqFAVMU6G1mvnuQ==", - "dev": true, - "dependencies": { - "dprint-node": "^1.0.8" - } - }, - "node_modules/ts-proto": { - "version": "1.176.0", - "resolved": "https://registry.npmjs.org/ts-proto/-/ts-proto-1.176.0.tgz", - "integrity": "sha512-OWVrVUpNfZVfvKJZlSjRmCPkcNcox6IPRw3RIeyK2Z4d0Uoy1/gkumMwCVOAMznZcv80D1r9GyYHgYVdp6Cj+g==", - "dev": true, - "dependencies": { - "case-anything": "^2.1.13", - "protobufjs": "^7.2.4", - "ts-poet": "^6.7.0", - "ts-proto-descriptors": "1.16.0" - }, - "bin": { - "protoc-gen-ts_proto": "protoc-gen-ts_proto" - } - }, - "node_modules/ts-proto-descriptors": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/ts-proto-descriptors/-/ts-proto-descriptors-1.16.0.tgz", - "integrity": "sha512-3yKuzMLpltdpcyQji1PJZRfoo4OJjNieKTYkQY8pF7xGKsYz/RHe3aEe4KiRxcinoBmnEhmuI+yJTxLb922ULA==", - "dev": true, - "dependencies": { - "long": "^5.2.3", - "protobufjs": "^7.2.4" - } - }, - "node_modules/tsup": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/tsup/-/tsup-8.5.0.tgz", - "integrity": "sha512-VmBp77lWNQq6PfuMqCHD3xWl22vEoWsKajkF8t+yMBawlUS8JzEI+vOVMeuNZIuMML8qXRizFKi9oD5glKQVcQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "bundle-require": "^5.1.0", - "cac": "^6.7.14", - "chokidar": "^4.0.3", - "consola": "^3.4.0", - "debug": "^4.4.0", - "esbuild": "^0.25.0", - "fix-dts-default-cjs-exports": "^1.0.0", - "joycon": "^3.1.1", - "picocolors": "^1.1.1", - "postcss-load-config": "^6.0.1", - "resolve-from": "^5.0.0", - "rollup": "^4.34.8", - "source-map": "0.8.0-beta.0", - "sucrase": "^3.35.0", - "tinyexec": "^0.3.2", - "tinyglobby": "^0.2.11", - "tree-kill": "^1.2.2" - }, - "bin": { - "tsup": "dist/cli-default.js", - "tsup-node": "dist/cli-node.js" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@microsoft/api-extractor": "^7.36.0", - "@swc/core": "^1", - "postcss": "^8.4.12", - "typescript": ">=4.5.0" - }, - "peerDependenciesMeta": { - "@microsoft/api-extractor": { - "optional": true - }, - "@swc/core": { - "optional": true - }, - "postcss": { - "optional": true - }, - "typescript": { - "optional": true - } - } - }, - "node_modules/tsup/node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/tsup/node_modules/rollup": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.2.tgz", - "integrity": "sha512-J9qZyW++QK/09NyN/zeO0dG/1GdGfyp9lV8ajHnRVLfo/uFsbji5mHnDgn/qYdUHyCkM2N+8VyspgZclfAh0eQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "1.0.8" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.60.2", - "@rollup/rollup-android-arm64": "4.60.2", - "@rollup/rollup-darwin-arm64": "4.60.2", - "@rollup/rollup-darwin-x64": "4.60.2", - "@rollup/rollup-freebsd-arm64": "4.60.2", - "@rollup/rollup-freebsd-x64": "4.60.2", - "@rollup/rollup-linux-arm-gnueabihf": "4.60.2", - "@rollup/rollup-linux-arm-musleabihf": "4.60.2", - "@rollup/rollup-linux-arm64-gnu": "4.60.2", - "@rollup/rollup-linux-arm64-musl": "4.60.2", - "@rollup/rollup-linux-loong64-gnu": "4.60.2", - "@rollup/rollup-linux-loong64-musl": "4.60.2", - "@rollup/rollup-linux-ppc64-gnu": "4.60.2", - "@rollup/rollup-linux-ppc64-musl": "4.60.2", - "@rollup/rollup-linux-riscv64-gnu": "4.60.2", - "@rollup/rollup-linux-riscv64-musl": "4.60.2", - "@rollup/rollup-linux-s390x-gnu": "4.60.2", - "@rollup/rollup-linux-x64-gnu": "4.60.2", - "@rollup/rollup-linux-x64-musl": "4.60.2", - "@rollup/rollup-openbsd-x64": "4.60.2", - "@rollup/rollup-openharmony-arm64": "4.60.2", - "@rollup/rollup-win32-arm64-msvc": "4.60.2", - "@rollup/rollup-win32-ia32-msvc": "4.60.2", - "@rollup/rollup-win32-x64-gnu": "4.60.2", - "@rollup/rollup-win32-x64-msvc": "4.60.2", - "fsevents": "~2.3.2" - } - }, - "node_modules/tsup/node_modules/source-map": { - "version": "0.8.0-beta.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", - "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", - "dev": true, - "dependencies": { - "whatwg-url": "^7.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "dev": true, - "license": "Unlicense" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "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, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typedoc": { - "version": "0.28.16", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.28.16.tgz", - "integrity": "sha512-x4xW77QC3i5DUFMBp0qjukOTnr/sSg+oEs86nB3LjDslvAmwe/PUGDWbe3GrIqt59oTqoXK5GRK9tAa0sYMiog==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@gerrit0/mini-shiki": "^3.17.0", - "lunr": "^2.3.9", - "markdown-it": "^14.1.0", - "minimatch": "^9.0.5", - "yaml": "^2.8.1" - }, - "bin": { - "typedoc": "bin/typedoc" - }, - "engines": { - "node": ">= 18", - "pnpm": ">= 10" - }, - "peerDependencies": { - "typescript": "5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x || 5.8.x || 5.9.x" - } - }, - "node_modules/typedoc-plugin-extras": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/typedoc-plugin-extras/-/typedoc-plugin-extras-4.0.1.tgz", - "integrity": "sha512-ab3T37ukHCwBjwBJpAcWdxy/XAaLdUyy5pwbgF9WDqCRN0DTJmJPLew9Kv6qrx5qnxiyfe6F4Og+PUp15kJWLw==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "typedoc": "0.27.x || 0.28.x" - } - }, - "node_modules/typedoc/node_modules/brace-expansion": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", - "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/typedoc/node_modules/minimatch": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", - "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.2" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/uc.micro": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", - "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", - "dev": true, - "license": "MIT" - }, - "node_modules/ufo": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz", - "integrity": "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==", - "dev": true, - "license": "MIT" - }, - "node_modules/uglify-js": { - "version": "3.19.3", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", - "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", - "dev": true, - "license": "BSD-2-Clause", - "optional": true, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/undici": { - "version": "5.29.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz", - "integrity": "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@fastify/busboy": "^2.0.0" - }, - "engines": { - "node": ">=14.0" - } - }, - "node_modules/undici-types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", - "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", - "license": "MIT" - }, - "node_modules/unpipe": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", - "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true, - "license": "MIT" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "dev": true, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-14.0.0.tgz", - "integrity": "sha512-Qo+uWgilfSmAhXCMav1uYFynlQO7fMFiMVZsQqZRMIXp0O7rR7qjkj+cPvBHLgBqi960QCoo/PH2/6ZtVqKvrg==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "bin": { - "uuid": "dist-node/bin/uuid" - } - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true - }, - "node_modules/v8-to-istanbul": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", - "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", - "dev": true, - "license": "ISC", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^2.0.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vite": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.2.tgz", - "integrity": "sha512-Bby3NOsna2jsjfLVOHKes8sGwgl4TT0E6vvpYgnAYDIF/tie7MRaFthmKuHx1NSXjiTueXH3do80FMQgvEktRg==", - "dev": true, - "license": "MIT", - "dependencies": { - "esbuild": "^0.27.0", - "fdir": "^6.5.0", - "picomatch": "^4.0.3", - "postcss": "^8.5.6", - "rollup": "^4.43.0", - "tinyglobby": "^0.2.15" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^20.19.0 || >=22.12.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^20.19.0 || >=22.12.0", - "jiti": ">=1.21.0", - "less": "^4.0.0", - "lightningcss": "^1.21.0", - "sass": "^1.70.0", - "sass-embedded": "^1.70.0", - "stylus": ">=0.54.8", - "sugarss": "^5.0.0", - "terser": "^5.16.0", - "tsx": "^4.8.1", - "yaml": "^2.4.2" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "jiti": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - }, - "tsx": { - "optional": true - }, - "yaml": { - "optional": true - } - } - }, - "node_modules/vite/node_modules/@esbuild/aix-ppc64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", - "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/android-arm": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz", - "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/android-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz", - "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/android-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz", - "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/darwin-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz", - "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/darwin-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz", - "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz", - "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/freebsd-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz", - "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-arm": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz", - "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz", - "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-ia32": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz", - "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-loong64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz", - "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-mips64el": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz", - "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-ppc64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz", - "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-riscv64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz", - "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-s390x": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz", - "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz", - "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/netbsd-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz", - "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/netbsd-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz", - "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/openbsd-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz", - "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/openbsd-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz", - "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/sunos-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz", - "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/win32-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz", - "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/win32-ia32": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz", - "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/win32-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz", - "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/vite/node_modules/esbuild": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz", - "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.27.2", - "@esbuild/android-arm": "0.27.2", - "@esbuild/android-arm64": "0.27.2", - "@esbuild/android-x64": "0.27.2", - "@esbuild/darwin-arm64": "0.27.2", - "@esbuild/darwin-x64": "0.27.2", - "@esbuild/freebsd-arm64": "0.27.2", - "@esbuild/freebsd-x64": "0.27.2", - "@esbuild/linux-arm": "0.27.2", - "@esbuild/linux-arm64": "0.27.2", - "@esbuild/linux-ia32": "0.27.2", - "@esbuild/linux-loong64": "0.27.2", - "@esbuild/linux-mips64el": "0.27.2", - "@esbuild/linux-ppc64": "0.27.2", - "@esbuild/linux-riscv64": "0.27.2", - "@esbuild/linux-s390x": "0.27.2", - "@esbuild/linux-x64": "0.27.2", - "@esbuild/netbsd-arm64": "0.27.2", - "@esbuild/netbsd-x64": "0.27.2", - "@esbuild/openbsd-arm64": "0.27.2", - "@esbuild/openbsd-x64": "0.27.2", - "@esbuild/openharmony-arm64": "0.27.2", - "@esbuild/sunos-x64": "0.27.2", - "@esbuild/win32-arm64": "0.27.2", - "@esbuild/win32-ia32": "0.27.2", - "@esbuild/win32-x64": "0.27.2" - } - }, - "node_modules/vite/node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/vite/node_modules/picomatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", - "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/vite/node_modules/rollup": { - "version": "4.60.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.2.tgz", - "integrity": "sha512-J9qZyW++QK/09NyN/zeO0dG/1GdGfyp9lV8ajHnRVLfo/uFsbji5mHnDgn/qYdUHyCkM2N+8VyspgZclfAh0eQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "1.0.8" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.60.2", - "@rollup/rollup-android-arm64": "4.60.2", - "@rollup/rollup-darwin-arm64": "4.60.2", - "@rollup/rollup-darwin-x64": "4.60.2", - "@rollup/rollup-freebsd-arm64": "4.60.2", - "@rollup/rollup-freebsd-x64": "4.60.2", - "@rollup/rollup-linux-arm-gnueabihf": "4.60.2", - "@rollup/rollup-linux-arm-musleabihf": "4.60.2", - "@rollup/rollup-linux-arm64-gnu": "4.60.2", - "@rollup/rollup-linux-arm64-musl": "4.60.2", - "@rollup/rollup-linux-loong64-gnu": "4.60.2", - "@rollup/rollup-linux-loong64-musl": "4.60.2", - "@rollup/rollup-linux-ppc64-gnu": "4.60.2", - "@rollup/rollup-linux-ppc64-musl": "4.60.2", - "@rollup/rollup-linux-riscv64-gnu": "4.60.2", - "@rollup/rollup-linux-riscv64-musl": "4.60.2", - "@rollup/rollup-linux-s390x-gnu": "4.60.2", - "@rollup/rollup-linux-x64-gnu": "4.60.2", - "@rollup/rollup-linux-x64-musl": "4.60.2", - "@rollup/rollup-openbsd-x64": "4.60.2", - "@rollup/rollup-openharmony-arm64": "4.60.2", - "@rollup/rollup-win32-arm64-msvc": "4.60.2", - "@rollup/rollup-win32-ia32-msvc": "4.60.2", - "@rollup/rollup-win32-x64-gnu": "4.60.2", - "@rollup/rollup-win32-x64-msvc": "4.60.2", - "fsevents": "~2.3.2" - } - }, - "node_modules/vitest": { - "version": "4.0.17", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.0.17.tgz", - "integrity": "sha512-FQMeF0DJdWY0iOnbv466n/0BudNdKj1l5jYgl5JVTwjSsZSlqyXFt/9+1sEyhR6CLowbZpV7O1sCHrzBhucKKg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/expect": "4.0.17", - "@vitest/mocker": "4.0.17", - "@vitest/pretty-format": "4.0.17", - "@vitest/runner": "4.0.17", - "@vitest/snapshot": "4.0.17", - "@vitest/spy": "4.0.17", - "@vitest/utils": "4.0.17", - "es-module-lexer": "^1.7.0", - "expect-type": "^1.2.2", - "magic-string": "^0.30.21", - "obug": "^2.1.1", - "pathe": "^2.0.3", - "picomatch": "^4.0.3", - "std-env": "^3.10.0", - "tinybench": "^2.9.0", - "tinyexec": "^1.0.2", - "tinyglobby": "^0.2.15", - "tinyrainbow": "^3.0.3", - "vite": "^6.0.0 || ^7.0.0", - "why-is-node-running": "^2.3.0" - }, - "bin": { - "vitest": "vitest.mjs" - }, - "engines": { - "node": "^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "@edge-runtime/vm": "*", - "@opentelemetry/api": "^1.9.0", - "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", - "@vitest/browser-playwright": "4.0.17", - "@vitest/browser-preview": "4.0.17", - "@vitest/browser-webdriverio": "4.0.17", - "@vitest/ui": "4.0.17", - "happy-dom": "*", - "jsdom": "*" - }, - "peerDependenciesMeta": { - "@edge-runtime/vm": { - "optional": true - }, - "@opentelemetry/api": { - "optional": true - }, - "@types/node": { - "optional": true - }, - "@vitest/browser-playwright": { - "optional": true - }, - "@vitest/browser-preview": { - "optional": true - }, - "@vitest/browser-webdriverio": { - "optional": true - }, - "@vitest/ui": { - "optional": true - }, - "happy-dom": { - "optional": true - }, - "jsdom": { - "optional": true - } - } - }, - "node_modules/vitest/node_modules/picomatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", - "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/vitest/node_modules/tinyexec": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.2.tgz", - "integrity": "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "makeerror": "1.0.12" - } - }, - "node_modules/webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - }, - "node_modules/whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "dev": true, - "dependencies": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "node_modules/which": { - "version": "2.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/why-is-node-running": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", - "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", - "dev": true, - "license": "MIT", - "dependencies": { - "siginfo": "^2.0.0", - "stackback": "0.0.2" - }, - "bin": { - "why-is-node-running": "cli.js" - }, - "engines": { - "node": ">=8" - } - }, - "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/wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "license": "MIT", - "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==", - "dev": true, - "license": "MIT", - "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/wrappy": { - "version": "1.0.2", - "dev": true, - "license": "ISC" - }, - "node_modules/write-file-atomic": { - "version": "4.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/ws": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", - "dev": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true, - "license": "ISC" - }, - "node_modules/yaml": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.3.tgz", - "integrity": "sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==", - "dev": true, - "license": "ISC", - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14.6" - }, - "funding": { - "url": "https://github.com/sponsors/eemeli" - } - }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zip-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-6.0.1.tgz", - "integrity": "sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==", - "dev": true, - "license": "MIT", - "dependencies": { - "archiver-utils": "^5.0.0", - "compress-commons": "^6.0.2", - "readable-stream": "^4.0.0" - }, - "engines": { - "node": ">= 14" - } - } - } -} diff --git a/package.json b/package.json index be07ff32..91d2c28b 100644 --- a/package.json +++ b/package.json @@ -2,42 +2,36 @@ "name": "weaviate-client", "version": "3.13.1", "description": "JS/TS client for Weaviate", - "main": "dist/node/cjs/index.js", "type": "module", - "exports": { - ".": { - "types": { - "require": "./dist/node/cjs/index.d.ts", - "default": "./dist/node/esm/index.d.ts" - }, - "default": { - "require": "./dist/node/cjs/index.js", - "default": "./dist/node/esm/index.js" - } - } - }, "engines": { "node": ">=22.0.0" }, + "private": true, + "workspaces": [ + "packages/*" + ], "scripts": { - "test": "vitest run --no-file-parallelism --isolate=true --reporter=verbose --reporter=hanging-process --silent=false", - "test:unit": "vitest run --no-file-parallelism --isolate=true --reporter=verbose --reporter=hanging-process --silent=false --project unit", - "test:coverage": "npm run test -- --coverage", - "build": "npm run build:node", - "build:web": "tsup", - "build:cjs": "tsc --module commonjs --moduleResolution node10 --outDir dist/node/cjs && touch dist/node/cjs/package.json && echo '{\"type\": \"commonjs\"}' > dist/node/cjs/package.json", - "build:esm": "tsc --outDir dist/node/esm && touch dist/node/esm/package.json && echo '{\"type\": \"module\"}' > dist/node/esm/package.json", - "build:node": "npm run lint && npm run build:cjs && npm run build:esm && prettier --write --no-error-on-unmatched-pattern '**/dist/**/*.{ts,js}'", - "prepack": "npm run build", + "test": "pnpm --filter @weaviate/test run test", "lint": "eslint --ext .ts,.js .", "lint:fix": "npm run lint -- --fix", - "format": "npm run generate:version && prettier --write --no-error-on-unmatched-pattern '**/*.{ts,js}' '!dist/**'", + "lint:staged": "npm run format:check && npm run lint -- --cache", + "format": "prettier --write --no-error-on-unmatched-pattern '**/*.{ts,js}' '!dist/**'", "format:check": "prettier --check --no-error-on-unmatched-pattern '**/*.{ts,js}' '!dist/**'", "format:dist": "prettier --write --no-error-on-unmatched-pattern '**/dist/**/*.{ts,js}'", "refresh-schema": "./tools/refresh_schema.sh", "refresh-protos": "./tools/refresh_protos.sh", - "docs": "typedoc --plugin typedoc-plugin-extras --favicon public/favicon.ico --out docs/ src/", - "generate:version": "node ./scripts/gen-version.mjs" + "docs": "typedoc --plugin typedoc-plugin-extras --favicon public/favicon.ico --out docs/ ./packages/core/src ./packages/node/src ./packages/web/src", + "install:core": "pnpm install --filter @weaviate/core --no-frozen-lockfile", + "install:node": "pnpm install --filter @weaviate/node --no-frozen-lockfile", + "install:web": "pnpm install --filter @weaviate/web --no-frozen-lockfile", + "install:test": "pnpm install --filter @weaviate/test --no-frozen-lockfile", + "build:core": "pnpm --filter @weaviate/core... run build", + "build:node": "pnpm --filter @weaviate/node... run build", + "build:web": "pnpm --filter @weaviate/web... run build", + "build": "npm run build:core && npm run build:node && npm run build:web", + "ci:checks": "npm run install:core && npm run build:core && npm run install:node && npm run install:web", + "ci:test": "npm run ci:checks && npm run build:core && npm run build:node && npm run build:web && npm run install:test", + "ci:publish": "npm run ci:checks" }, "repository": { "type": "git", @@ -52,58 +46,20 @@ "url": "https://github.com/weaviate/typescript-client/issues" }, "homepage": "https://github.com/weaviate/typescript-client#readme", - "dependencies": { - "@datastructures-js/deque": "^1.0.8", - "abort-controller-x": "^0.5.0", - "graphql": "^16.12.0", - "graphql-request": "^6.1.0", - "long": "^5.3.2", - "nice-grpc": "^2.1.14", - "nice-grpc-client-middleware-retry": "^3.1.13", - "nice-grpc-common": "^2.0.2", - "uuid": "^14.0.0" - }, "devDependencies": { - "@babel/core": "^7.20.12", - "@babel/preset-typescript": "^7.18.6", - "@babel/runtime": "^7.20.7", - "@curveball/bodyparser": "0.5.0", - "@curveball/core": "0.20.0", - "@curveball/kernel": "0.20.1", - "@rollup/plugin-babel": "^5.3.1", - "@testcontainers/weaviate": "^11.14.0", - "@types/express": "^4.17.21", - "@types/node": "^25.0.3", - "@types/uuid": "^9.0.1", "@typescript-eslint/eslint-plugin": "^6.21.0", "@typescript-eslint/parser": "^6.21.0", - "babel-jest": "^29.4.3", - "eslint": "^8.35.0", - "eslint-config-prettier": "^8.7.0", + "eslint": "^8.57.1", + "eslint-config-prettier": "^8.10.0", "eslint-plugin-prettier": "^4.2.1", - "express": "^4.19.2", - "grpc-tools": "^1.12.4", "husky": "^8.0.3", - "jest": "^29.4.3", - "lint-staged": "^13.2.0", - "openapi-typescript": "^5.4.1", - "prettier": "^2.8.4", + "lint-staged": "^13.3.0", + "openapi-typescript": "^5.4.2", + "prettier": "^2.8.8", "prettier-plugin-organize-imports": "^3.2.4", - "protobufjs": "^7.5.5", - "ts-jest": "^29.0.5", - "ts-node": "^10.9.2", - "ts-proto": "^1.176.0", - "tsup": "^8.0.2", + "ts-proto": "^1.181.2", "typedoc": "^0.28.15", "typedoc-plugin-extras": "^4.0.1", - "typescript": "^5.9.3", - "vitest": "^4.0.16" - }, - "lint-staged": { - "*.{ts,js}": [ - "npm run format:check", - "npm run lint -- --cache", - "npm run prepack" - ] + "typescript": "^5.9.3" } } diff --git a/packages/core/package.json b/packages/core/package.json new file mode 100644 index 00000000..d0d81ff2 --- /dev/null +++ b/packages/core/package.json @@ -0,0 +1,66 @@ +{ + "name": "@weaviate/core", + "version": "1.0.0", + "description": "JS/TS client for Weaviate", + "main": "dist/src/index.js", + "type": "module", + "exports": { + ".": { + "types": "./dist/src/index.d.ts", + "default": "./dist/src/index.js" + }, + "./proto": { + "types": "./dist/src/proto/index.d.ts", + "default": "./dist/src/proto/index.js" + }, + "./errors": { + "types": "./dist/src/errors.d.ts", + "default": "./dist/src/errors.js" + } + }, + "files": [ + "dist/" + ], + "engines": { + "node": ">=22.0.0" + }, + "scripts": { + "build": "tsc" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/weaviate/typescript-client.git" + }, + "keywords": [ + "weaviate" + ], + "author": "Weaviate", + "license": "BSD 3-Clause", + "bugs": { + "url": "https://github.com/weaviate/typescript-client/issues" + }, + "homepage": "https://github.com/weaviate/typescript-client#readme", + "dependencies": { + "@datastructures-js/deque": "^1.0.8", + "abort-controller-x": "^0.5.0", + "graphql": "^16.12.0", + "graphql-request": "^6.1.0", + "long": "^5.3.2", + "nice-grpc-common": "^2.0.3", + "uuid": "^14.0.0" + }, + "devDependencies": { + "@types/node": "^25.0.3", + "@types/uuid": "^9.0.1", + "grpc-tools": "^1.12.4", + "openapi-typescript": "^5.4.1", + "protobufjs": "^7.5.5", + "typescript": "^5.9.3" + }, + "lint-staged": { + "*.{ts,js}": [ + "npm run format:check", + "npm run lint -- --cache" + ] + } +} diff --git a/src/collections/aggregate/index.ts b/packages/core/src/aggregate/index.ts similarity index 78% rename from src/collections/aggregate/index.ts rename to packages/core/src/aggregate/index.ts index 9060ad8d..c4e076c6 100644 --- a/src/collections/aggregate/index.ts +++ b/packages/core/src/aggregate/index.ts @@ -1,26 +1,27 @@ -import Connection from '../../connection/grpc.js'; +import Connection from '../connection/grpc.js'; -import { ConsistencyLevel } from '../../data/index.js'; -import { DbVersionSupport } from '../../utils/dbVersion.js'; +import { ConsistencyLevel } from '../replication.js'; +import { DbVersionSupport } from '../utils/dbVersion.js'; import { FilterValue } from '../filters/index.js'; -import { WeaviateInvalidInputError, WeaviateQueryError } from '../../errors.js'; -import { Aggregator } from '../../graphql/index.js'; -import { PrimitiveKeys, toBase64FromMedia } from '../../index.js'; import { Deserialize } from '../deserialize/index.js'; +import { WeaviateInvalidInputError, WeaviateQueryError } from '../errors.js'; +import { PrimitiveKeys } from '../index.js'; import { Bm25OperatorOptions, Bm25QueryProperty, NearVectorInputType, TargetVector } from '../query/types.js'; import { NearVectorInputGuards } from '../query/utils.js'; import { Serialize } from '../serialize/index.js'; +import { ToBase64FromMedia } from '../utils/base64.js'; +import { Aggregator } from '../v2/graphql/index.js'; -export type AggregateBaseOptions = { +export type AggregateBaseOptions

= { filters?: FilterValue; - returnMetrics?: M; + returnMetrics?: P; }; export type PropertyOf = T extends undefined ? string : keyof T & string; -export type AggregateGroupByOptions = AggregateBaseOptions & { +export type AggregateGroupByOptions = AggregateBaseOptions

& { groupBy: PropertyOf | GroupByAggregate; }; @@ -29,16 +30,16 @@ export type GroupByAggregate = { limit?: number; }; -export type AggregateOverAllOptions = AggregateBaseOptions; +export type AggregateOverAllOptions

= AggregateBaseOptions

; -export type AggregateNearOptions = AggregateBaseOptions & { +export type AggregateNearOptions = AggregateBaseOptions

& { certainty?: number; distance?: number; objectLimit?: number; targetVector?: TargetVector; }; -export type AggregateHybridOptions = AggregateBaseOptions & { +export type AggregateHybridOptions = AggregateBaseOptions

& { alpha?: number; maxVectorDistance?: number; objectLimit?: number; @@ -48,11 +49,11 @@ export type AggregateHybridOptions = AggregateBaseOptions & { bm25Operator?: Bm25OperatorOptions; }; -export type AggregateGroupByHybridOptions = AggregateHybridOptions & { +export type AggregateGroupByHybridOptions = AggregateHybridOptions & { groupBy: PropertyOf | GroupByAggregate; }; -export type AggregateGroupByNearOptions = AggregateNearOptions & { +export type AggregateGroupByNearOptions = AggregateNearOptions & { groupBy: PropertyOf | GroupByAggregate; }; @@ -139,8 +140,8 @@ export type MetricsText = MetricsBase & { minOccurrences?: number; }; -export type AggregateMetrics = { - [K in keyof M]: M[K] extends true ? number : never; +export type AggregateMetrics

= { + [K in keyof P]: P[K] extends true ? number : never; }; export type MetricsProperty = PropertyOf; @@ -316,16 +317,16 @@ type KindToAggregateType = K extends 'text' export type AggregateType = AggregateBoolean | AggregateDate | AggregateNumber | AggregateText; -export type AggregateResult | undefined = undefined> = { +export type AggregateResult | undefined = undefined> = { properties: T extends undefined ? Record - : M extends MetricsInput[] + : P extends MetricsInput[] ? { - [K in M[number] as K['propertyName']]: KindToAggregateType; + [K in P[number] as K['propertyName']]: KindToAggregateType; } - : M extends MetricsInput + : P extends MetricsInput ? { - [K in M as K['propertyName']]: KindToAggregateType; + [K in P as K['propertyName']]: KindToAggregateType; } : undefined; totalCount: number; @@ -339,19 +340,20 @@ export type AggregatedGeoCoordinate = { export type AggregateGroupByResult< T, - M extends PropertiesMetrics | undefined = undefined -> = AggregateResult & { + P extends PropertiesMetrics | undefined = undefined +> = AggregateResult & { groupedBy: { prop: string; value: string | number | boolean | AggregatedGeoCoordinate | string[] | number[] | boolean[]; }; }; -class AggregateManager implements Aggregate { +class AggregateManager implements Aggregate { connection: Connection; - groupBy: AggregateGroupBy; + groupBy: AggregateGroupBy; name: string; - dbVersionSupport: DbVersionSupport; + private dbVersionSupport: DbVersionSupport; + private toBase64FromMedia: ToBase64FromMedia; consistencyLevel?: ConsistencyLevel; tenant?: string; grpcChecker: Promise; @@ -360,22 +362,24 @@ class AggregateManager implements Aggregate { connection: Connection, name: string, dbVersionSupport: DbVersionSupport, + toBase64FromMedia: ToBase64FromMedia, consistencyLevel?: ConsistencyLevel, tenant?: string ) { this.connection = connection; this.name = name; this.dbVersionSupport = dbVersionSupport; + this.toBase64FromMedia = toBase64FromMedia; this.consistencyLevel = consistencyLevel; this.tenant = tenant; this.grpcChecker = this.dbVersionSupport.supportsAggregateGRPC().then((res) => res.supports); this.groupBy = { - hybrid: async >( + hybrid: async

>( query: string, - opts: AggregateGroupByHybridOptions - ): Promise[]> => { + opts: AggregateGroupByHybridOptions + ): Promise[]> => { if (await this.grpcChecker) { const group = typeof opts.groupBy === 'string' ? { property: opts.groupBy } : opts.groupBy; return this.grpc() @@ -401,11 +405,14 @@ class AggregateManager implements Aggregate { } return this.doGroupBy(builder); }, - nearImage: async >( - image: string | Buffer, - opts: AggregateGroupByNearOptions - ): Promise[]> => { - const [b64, usesGrpc] = await Promise.all([await toBase64FromMedia(image), await this.grpcChecker]); + nearImage: async

>( + image: M, + opts: AggregateGroupByNearOptions + ): Promise[]> => { + const [b64, usesGrpc] = await Promise.all([ + await this.toBase64FromMedia(image), + await this.grpcChecker, + ]); if (usesGrpc) { const group = typeof opts.groupBy === 'string' ? { property: opts.groupBy } : opts.groupBy; return this.grpc() @@ -429,10 +436,10 @@ class AggregateManager implements Aggregate { } return this.doGroupBy(builder); }, - nearObject: async >( + nearObject: async

>( id: string, - opts: AggregateGroupByNearOptions - ): Promise[]> => { + opts: AggregateGroupByNearOptions + ): Promise[]> => { if (await this.grpcChecker) { const group = typeof opts.groupBy === 'string' ? { property: opts.groupBy } : opts.groupBy; return this.grpc() @@ -456,10 +463,10 @@ class AggregateManager implements Aggregate { } return this.doGroupBy(builder); }, - nearText: async >( + nearText: async

>( query: string | string[], - opts: AggregateGroupByNearOptions - ): Promise[]> => { + opts: AggregateGroupByNearOptions + ): Promise[]> => { if (await this.grpcChecker) { const group = typeof opts.groupBy === 'string' ? { property: opts.groupBy } : opts.groupBy; return this.grpc() @@ -483,10 +490,10 @@ class AggregateManager implements Aggregate { } return this.doGroupBy(builder); }, - nearVector: async >( + nearVector: async

>( vector: number[], - opts: AggregateGroupByNearOptions - ): Promise[]> => { + opts: AggregateGroupByNearOptions + ): Promise[]> => { if (await this.grpcChecker) { const group = typeof opts.groupBy === 'string' ? { property: opts.groupBy } : opts.groupBy; return this.grpc() @@ -510,9 +517,9 @@ class AggregateManager implements Aggregate { } return this.doGroupBy(builder); }, - overAll: async >( - opts: AggregateGroupByOptions - ): Promise[]> => { + overAll: async

>( + opts: AggregateGroupByOptions + ): Promise[]> => { if (await this.grpcChecker) { const group = typeof opts.groupBy === 'string' ? { property: opts.groupBy } : opts.groupBy; return this.grpc() @@ -594,20 +601,28 @@ class AggregateManager implements Aggregate { return `${propertyName} { ${body} }`; } - static use( + static use( connection: Connection, name: string, dbVersionSupport: DbVersionSupport, + toBase64FromMedia: ToBase64FromMedia, consistencyLevel?: ConsistencyLevel, tenant?: string - ): AggregateManager { - return new AggregateManager(connection, name, dbVersionSupport, consistencyLevel, tenant); + ): AggregateManager { + return new AggregateManager( + connection, + name, + dbVersionSupport, + toBase64FromMedia, + consistencyLevel, + tenant + ); } - async hybrid>( + async hybrid

>( query: string, - opts?: AggregateHybridOptions - ): Promise> { + opts?: AggregateHybridOptions + ): Promise> { if (await this.grpcChecker) { return this.grpc() .then(async (aggregate) => aggregate.withHybrid(await Serialize.aggregate.hybrid(query, opts))) @@ -627,11 +642,11 @@ class AggregateManager implements Aggregate { return this.do(builder); } - async nearImage>( - image: string | Buffer, - opts?: AggregateNearOptions - ): Promise> { - const [b64, usesGrpc] = await Promise.all([await toBase64FromMedia(image), await this.grpcChecker]); + async nearImage

>( + image: M, + opts?: AggregateNearOptions + ): Promise> { + const [b64, usesGrpc] = await Promise.all([await this.toBase64FromMedia(image), await this.grpcChecker]); if (usesGrpc) { return this.grpc() .then((aggregate) => aggregate.withNearImage(Serialize.aggregate.nearImage(b64, opts))) @@ -649,10 +664,10 @@ class AggregateManager implements Aggregate { return this.do(builder); } - async nearObject>( + async nearObject

>( id: string, - opts?: AggregateNearOptions - ): Promise> { + opts?: AggregateNearOptions + ): Promise> { if (await this.grpcChecker) { return this.grpc() .then((aggregate) => aggregate.withNearObject(Serialize.aggregate.nearObject(id, opts))) @@ -670,10 +685,10 @@ class AggregateManager implements Aggregate { return this.do(builder); } - async nearText>( + async nearText

>( query: string | string[], - opts?: AggregateNearOptions - ): Promise> { + opts?: AggregateNearOptions + ): Promise> { if (await this.grpcChecker) { return this.grpc() .then((aggregate) => aggregate.withNearText(Serialize.aggregate.nearText(query, opts))) @@ -691,10 +706,10 @@ class AggregateManager implements Aggregate { return this.do(builder); } - async nearVector>( + async nearVector

>( vector: NearVectorInputType, - opts?: AggregateNearOptions - ): Promise> { + opts?: AggregateNearOptions + ): Promise> { if (await this.grpcChecker) { return this.grpc() .then(async (aggregate) => @@ -719,9 +734,9 @@ class AggregateManager implements Aggregate { return this.do(builder); } - async overAll>( - opts?: AggregateOverAllOptions - ): Promise> { + async overAll

>( + opts?: AggregateOverAllOptions

+ ): Promise> { if (await this.grpcChecker) { return this.grpc() .then((aggregate) => aggregate.withFetch(Serialize.aggregate.overAll(opts))) @@ -730,9 +745,9 @@ class AggregateManager implements Aggregate { return this.do(this.base(opts?.returnMetrics, opts?.filters)); } - do = | undefined = undefined>( + do =

| undefined = undefined>( query: Aggregator - ): Promise> => { + ): Promise> => { return query .do() .then(({ data }: any) => { @@ -747,9 +762,9 @@ class AggregateManager implements Aggregate { }); }; - doGroupBy = | undefined = undefined>( + doGroupBy =

| undefined = undefined>( query: Aggregator - ): Promise[]> => { + ): Promise[]> => { return query .do() .then(({ data }: any) => @@ -771,22 +786,22 @@ class AggregateManager implements Aggregate { }; } -export interface Aggregate { +export interface Aggregate { /** This namespace contains methods perform a group by search while aggregating metrics. */ - groupBy: AggregateGroupBy; + groupBy: AggregateGroupBy; /** * Aggregate metrics over the objects returned by a hybrid search on this collection. * * This method requires that the objects in the collection have associated vectors. * * @param {string} query The text query to search for. - * @param {AggregateHybridOptions} opts The options for the request. - * @returns {Promise[]>} The aggregated metrics for the objects returned by the vector search. + * @param {AggregateHybridOptions} opts The options for the request. + * @returns {Promise[]>} The aggregated metrics for the objects returned by the vector search. */ - hybrid>( + hybrid

>( query: string, - opts?: AggregateHybridOptions - ): Promise>; + opts?: AggregateHybridOptions + ): Promise>; /** * Aggregate metrics over the objects returned by a near image vector search on this collection. * @@ -794,14 +809,14 @@ export interface Aggregate { * * This method requires a vectorizer capable of handling base64-encoded images, e.g. `img2vec-neural`, `multi2vec-clip`, and `multi2vec-bind`. * - * @param {string | Buffer} image The image to search on. This can be a base64 string, a file path string, or a buffer. - * @param {AggregateNearOptions} [opts] The options for the request. - * @returns {Promise[]>} The aggregated metrics for the objects returned by the vector search. + * @param {M} image The image to search on. This can be a base64 string, a file path string, or a buffer. + * @param {AggregateNearOptions} [opts] The options for the request. + * @returns {Promise[]>} The aggregated metrics for the objects returned by the vector search. */ - nearImage>( - image: string | Buffer, - opts?: AggregateNearOptions - ): Promise>; + nearImage

>( + image: M, + opts?: AggregateNearOptions + ): Promise>; /** * Aggregate metrics over the objects returned by a near object search on this collection. * @@ -810,13 +825,13 @@ export interface Aggregate { * This method requires that the objects in the collection have associated vectors. * * @param {string} id The ID of the object to search for. - * @param {AggregateNearOptions} [opts] The options for the request. - * @returns {Promise[]>} The aggregated metrics for the objects returned by the vector search. + * @param {AggregateNearOptions} [opts] The options for the request. + * @returns {Promise[]>} The aggregated metrics for the objects returned by the vector search. */ - nearObject>( + nearObject

>( id: string, - opts?: AggregateNearOptions - ): Promise>; + opts?: AggregateNearOptions + ): Promise>; /** * Aggregate metrics over the objects returned by a near vector search on this collection. * @@ -825,13 +840,13 @@ export interface Aggregate { * This method requires that the objects in the collection have associated vectors. * * @param {number[]} query The text query to search for. - * @param {AggregateNearOptions} [opts] The options for the request. - * @returns {Promise[]>} The aggregated metrics for the objects returned by the vector search. + * @param {AggregateNearOptions} [opts] The options for the request. + * @returns {Promise[]>} The aggregated metrics for the objects returned by the vector search. */ - nearText>( + nearText

>( query: string | string[], - opts?: AggregateNearOptions - ): Promise>; + opts?: AggregateNearOptions + ): Promise>; /** * Aggregate metrics over the objects returned by a near vector search on this collection. * @@ -840,36 +855,36 @@ export interface Aggregate { * This method requires that the objects in the collection have associated vectors. * * @param {number[]} vector The vector to search for. - * @param {AggregateNearOptions} [opts] The options for the request. - * @returns {Promise[]>} The aggregated metrics for the objects returned by the vector search. + * @param {AggregateNearOptions} [opts] The options for the request. + * @returns {Promise[]>} The aggregated metrics for the objects returned by the vector search. */ - nearVector>( + nearVector

>( vector: number[], - opts?: AggregateNearOptions - ): Promise>; + opts?: AggregateNearOptions + ): Promise>; /** * Aggregate metrics over all the objects in this collection without any vector search. * - * @param {AggregateOptions} [opts] The options for the request. - * @returns {Promise[]>} The aggregated metrics for the objects in the collection. + * @param {AggregateOverAllOptions

} [opts] The options for the request. + * @returns {Promise[]>} The aggregated metrics for the objects in the collection. */ - overAll>(opts?: AggregateOverAllOptions): Promise>; + overAll

>(opts?: AggregateOverAllOptions

): Promise>; } -export interface AggregateGroupBy { +export interface AggregateGroupBy { /** * Aggregate metrics over the objects grouped by a specified property and returned by a hybrid search on this collection. * * This method requires that the objects in the collection have associated vectors. * * @param {string} query The text query to search for. - * @param {AggregateGroupByHybridOptions} opts The options for the request. - * @returns {Promise[]>} The aggregated metrics for the objects returned by the vector search. + * @param {AggregateGroupByHybridOptions} opts The options for the request. + * @returns {Promise[]>} The aggregated metrics for the objects returned by the vector search. */ - hybrid>( + hybrid

>( query: string, - opts: AggregateGroupByHybridOptions - ): Promise[]>; + opts: AggregateGroupByHybridOptions + ): Promise[]>; /** * Aggregate metrics over the objects grouped by a specified property and returned by a near image vector search on this collection. * @@ -877,14 +892,14 @@ export interface AggregateGroupBy { * * This method requires a vectorizer capable of handling base64-encoded images, e.g. `img2vec-neural`, `multi2vec-clip`, and `multi2vec-bind`. * - * @param {string | Buffer} image The image to search on. This can be a base64 string, a file path string, or a buffer. - * @param {AggregateGroupByNearOptions} opts The options for the request. - * @returns {Promise[]>} The aggregated metrics for the objects returned by the vector search. + * @param {M} image The image to search on. This can be a base64 string, a file path string, or a buffer. + * @param {AggregateGroupByNearOptions} opts The options for the request. + * @returns {Promise[]>} The aggregated metrics for the objects returned by the vector search. */ - nearImage>( - image: string | Buffer, - opts: AggregateGroupByNearOptions - ): Promise[]>; + nearImage

>( + image: M, + opts: AggregateGroupByNearOptions + ): Promise[]>; /** * Aggregate metrics over the objects grouped by a specified property and returned by a near object search on this collection. * @@ -893,13 +908,13 @@ export interface AggregateGroupBy { * This method requires that the objects in the collection have associated vectors. * * @param {string} id The ID of the object to search for. - * @param {AggregateGroupByNearOptions} opts The options for the request. - * @returns {Promise[]>} The aggregated metrics for the objects returned by the vector search. + * @param {AggregateGroupByNearOptions} opts The options for the request. + * @returns {Promise[]>} The aggregated metrics for the objects returned by the vector search. */ - nearObject>( + nearObject

>( id: string, - opts: AggregateGroupByNearOptions - ): Promise[]>; + opts: AggregateGroupByNearOptions + ): Promise[]>; /** * Aggregate metrics over the objects grouped by a specified property and returned by a near text vector search on this collection. * @@ -908,13 +923,13 @@ export interface AggregateGroupBy { * This method requires a vectorizer capable of handling text, e.g. `text2vec-contextionary`, `text2vec-openai`, etc. * * @param {string | string[]} query The text to search for. - * @param {AggregateGroupByNearOptions} opts The options for the request. - * @returns {Promise[]>} The aggregated metrics for the objects returned by the vector search. + * @param {AggregateGroupByNearOptions} opts The options for the request. + * @returns {Promise[]>} The aggregated metrics for the objects returned by the vector search. */ - nearText>( + nearText

>( query: string | string[], - opts: AggregateGroupByNearOptions - ): Promise[]>; + opts: AggregateGroupByNearOptions + ): Promise[]>; /** * Aggregate metrics over the objects grouped by a specified property and returned by a near vector search on this collection. * @@ -923,22 +938,22 @@ export interface AggregateGroupBy { * This method requires that the objects in the collection have associated vectors. * * @param {number[]} vector The vector to search for. - * @param {AggregateGroupByNearOptions} opts The options for the request. - * @returns {Promise[]>} The aggregated metrics for the objects returned by the vector search. + * @param {AggregateGroupByNearOptions} opts The options for the request. + * @returns {Promise[]>} The aggregated metrics for the objects returned by the vector search. */ - nearVector>( + nearVector

>( vector: number[], - opts: AggregateGroupByNearOptions - ): Promise[]>; + opts: AggregateGroupByNearOptions + ): Promise[]>; /** * Aggregate metrics over all the objects in this collection grouped by a specified property without any vector search. * - * @param {AggregateGroupByOptions} [opts] The options for the request. - * @returns {Promise[]>} The aggregated metrics for the objects in the collection. + * @param {AggregateGroupByOptions} [opts] The options for the request. + * @returns {Promise[]>} The aggregated metrics for the objects in the collection. */ - overAll>( - opts?: AggregateGroupByOptions - ): Promise[]>; + overAll

>( + opts?: AggregateGroupByOptions + ): Promise[]>; } export default AggregateManager.use; diff --git a/src/alias/index.ts b/packages/core/src/alias/index.ts similarity index 98% rename from src/alias/index.ts rename to packages/core/src/alias/index.ts index e910d8cf..824a02c1 100644 --- a/src/alias/index.ts +++ b/packages/core/src/alias/index.ts @@ -77,3 +77,4 @@ const alias = (connection: ConnectionREST): Aliases => { }; export default alias; +export * from './types.js'; diff --git a/src/alias/types.ts b/packages/core/src/alias/types.ts similarity index 100% rename from src/alias/types.ts rename to packages/core/src/alias/types.ts diff --git a/src/collections/backup/client.ts b/packages/core/src/backup/client.ts similarity index 97% rename from src/collections/backup/client.ts rename to packages/core/src/backup/client.ts index 4a655f10..d505f842 100644 --- a/src/collections/backup/client.ts +++ b/packages/core/src/backup/client.ts @@ -1,12 +1,4 @@ -import { - Backend, - BackupCreateStatusGetter, - BackupCreator, - BackupRestoreStatusGetter, - BackupRestorer, -} from '../../backup/index.js'; -import { validateBackend, validateBackupId } from '../../backup/validation.js'; -import Connection from '../../connection/index.js'; +import Connection from '../connection/index.js'; import { WeaviateBackupCanceled, WeaviateBackupCancellationError, @@ -14,12 +6,16 @@ import { WeaviateInvalidInputError, WeaviateUnexpectedResponseError, WeaviateUnexpectedStatusCodeError, -} from '../../errors.js'; +} from '../errors.js'; +import { BackupCreateResponse, BackupCreateStatusResponse, BackupRestoreResponse } from '../openapi/types.js'; import { - BackupCreateResponse, - BackupCreateStatusResponse, - BackupRestoreResponse, -} from '../../openapi/types.js'; + Backend, + BackupCreateStatusGetter, + BackupCreator, + BackupRestoreStatusGetter, + BackupRestorer, +} from '../v2/backup/index.js'; +import { validateBackend, validateBackupId } from '../v2/backup/validation.js'; import { BackupArgs, BackupCancelArgs, diff --git a/src/collections/backup/collection.ts b/packages/core/src/backup/collection.ts similarity index 96% rename from src/collections/backup/collection.ts rename to packages/core/src/backup/collection.ts index 377d8009..8c1d2190 100644 --- a/src/collections/backup/collection.ts +++ b/packages/core/src/backup/collection.ts @@ -1,5 +1,5 @@ -import { Backend } from '../../backup/index.js'; -import Connection from '../../connection/index.js'; +import Connection from '../connection/index.js'; +import { Backend } from '../v2/backup/index.js'; import { backup } from './client.js'; import { BackupReturn, BackupStatusArgs, BackupStatusReturn } from './types.js'; diff --git a/src/collections/backup/index.ts b/packages/core/src/backup/index.ts similarity index 100% rename from src/collections/backup/index.ts rename to packages/core/src/backup/index.ts diff --git a/src/collections/backup/types.ts b/packages/core/src/backup/types.ts similarity index 95% rename from src/collections/backup/types.ts rename to packages/core/src/backup/types.ts index c76e5a25..1cce6a3c 100644 --- a/src/collections/backup/types.ts +++ b/packages/core/src/backup/types.ts @@ -1,5 +1,5 @@ -import { Backend, BackupCompressionLevel } from '../../index.js'; -import { WeaviateBackupStatus } from '../../openapi/types.js'; +import { WeaviateBackupStatus } from '../openapi/types.js'; +import { Backend, BackupCompressionLevel } from '../v2/index.js'; /** The status of a backup operation */ export type BackupStatus = NonNullable; diff --git a/src/collections/cluster/index.ts b/packages/core/src/cluster/index.ts similarity index 98% rename from src/collections/cluster/index.ts rename to packages/core/src/cluster/index.ts index 592ebc45..b9b86450 100644 --- a/src/collections/cluster/index.ts +++ b/packages/core/src/cluster/index.ts @@ -1,4 +1,4 @@ -import { IConnection } from '../../connection/index.js'; +import { IConnection } from '../connection/index.js'; import { BatchStats, NodeShardStatus, @@ -9,8 +9,8 @@ import { WeaviateReplicationResponse, WeaviateReplicationType, WeaviateShardingState, -} from '../../openapi/types.js'; -import { DeepRequired } from '../../utils/types.js'; +} from '../openapi/types.js'; +import { DeepRequired } from '../utils/types.js'; export type Output = 'minimal' | 'verbose' | undefined; diff --git a/src/collections/collection/index.ts b/packages/core/src/collection/index.ts similarity index 83% rename from src/collections/collection/index.ts rename to packages/core/src/collection/index.ts index c4164352..c21ff245 100644 --- a/src/collections/collection/index.ts +++ b/packages/core/src/collection/index.ts @@ -1,8 +1,8 @@ -import Connection from '../../connection/grpc.js'; -import { ConsistencyLevel } from '../../data/index.js'; -import { WeaviateInvalidInputError } from '../../errors.js'; -import ClassExists from '../../schema/classExists.js'; -import { DbVersionSupport } from '../../utils/dbVersion.js'; +import Connection from '../connection/grpc.js'; +import { WeaviateInvalidInputError } from '../errors.js'; +import { ConsistencyLevel } from '../replication.js'; +import { DbVersionSupport } from '../utils/dbVersion.js'; +import ClassExists from '../v2/schema/classExists.js'; import aggregate, { Aggregate, Metrics, metrics } from '../aggregate/index.js'; import { BackupCollection, backupCollection } from '../backup/collection.js'; @@ -16,11 +16,12 @@ import sort, { Sort } from '../sort/index.js'; import tenants, { TenantBase, Tenants } from '../tenants/index.js'; import { QueryMetadata, QueryProperty, QueryReference, ReturnVectors } from '../types/index.js'; import { IncludeVector } from '../types/internal.js'; +import { ToBase64FromMedia } from '../utils/base64.js'; import multiTargetVector, { MultiTargetVector } from '../vectors/multiTargetVector.js'; -export interface Collection { +export interface ICollection { /** This namespace includes all the querying methods available to you when using Weaviate's standard aggregation capabilities. */ - aggregate: Aggregate; + aggregate: Aggregate; /** This namespace includes all the backup methods available to you when backing up a collection in Weaviate. */ backup: BackupCollection; /** This namespace includes all the CRUD methods available to you when modifying the configuration of the collection in Weaviate. */ @@ -30,13 +31,13 @@ export interface Collection { /** This namespace includes the methods by which you can create the `FilterValue` values for use when filtering queries over your collection. */ filter: Filter; /** This namespace includes all the querying methods available to you when using Weaviate's generative capabilities. */ - generate: Generate; + generate: Generate; /** This namespace includes the methods by which you can create the `MetricsX` values for use when aggregating over your collection. */ metrics: Metrics; /** The name of the collection. */ name: N; /** This namespace includes all the querying methods available to you when using Weaviate's standard query capabilities. */ - query: Query; + query: Query; /** This namespaces includes the methods by which you can create the `Sorting` values for use when sorting queries over your collection. */ sort: Sort; /** This namespace includes all the CRUD methods available to you when modifying the tenants of a multi-tenancy-enabled collection in Weaviate. */ @@ -82,9 +83,9 @@ export interface Collection { * This method does not send a request to Weaviate. It only returns a new collection object that is specific to the consistency level you specify. * * @param {ConsistencyLevel} consistencyLevel The consistency level to use. - * @returns {Collection} A new collection object specific to the consistency level you specified. + * @returns {ICollection} A new collection object specific to the consistency level you specified. */ - withConsistency: (consistencyLevel: ConsistencyLevel) => Collection; + withConsistency: (consistencyLevel: ConsistencyLevel) => ICollection; /** * Use this method to return a collection object specific to a single tenant. * @@ -94,9 +95,9 @@ export interface Collection { * * @typedef {TenantBase} TT A type that extends TenantBase. * @param {string | TT} tenant The tenant name or tenant object to use. - * @returns {Collection} A new collection object specific to the tenant you specified. + * @returns {ICollection} A new collection object specific to the tenant you specified. */ - withTenant: (tenant: string | TT) => Collection; + withTenant: (tenant: string | TT) => ICollection; } export type IteratorOptions = { @@ -111,28 +112,31 @@ const isString = (value: any): value is string => typeof value === 'string'; const capitalizeCollectionName = (name: N): N => (name.charAt(0).toUpperCase() + name.slice(1)) as N; -const collection = ( +const collection = ( connection: Connection, name: N, dbVersionSupport: DbVersionSupport, + toBase64FromMedia: ToBase64FromMedia, consistencyLevel?: ConsistencyLevel, tenant?: string -): Collection => { +): ICollection => { if (!isString(name)) { throw new WeaviateInvalidInputError(`The collection name must be a string, got: ${typeof name}`); } const capitalizedName = capitalizeCollectionName(name); - const aggregateCollection = aggregate( + const aggregateCollection = aggregate( connection, capitalizedName, dbVersionSupport, + toBase64FromMedia, consistencyLevel, tenant ); - const queryCollection = query( + const queryCollection = query( connection, capitalizedName, dbVersionSupport, + toBase64FromMedia, consistencyLevel, tenant ); @@ -142,7 +146,14 @@ const collection = ( config: config(connection, capitalizedName, dbVersionSupport, tenant), data: data(connection, capitalizedName, dbVersionSupport, consistencyLevel, tenant), filter: filter(), - generate: generate(connection, capitalizedName, dbVersionSupport, consistencyLevel, tenant), + generate: generate( + connection, + capitalizedName, + dbVersionSupport, + toBase64FromMedia, + consistencyLevel, + tenant + ), metrics: metrics(), multiTargetVector: multiTargetVector(), name: name, @@ -165,12 +176,20 @@ const collection = ( ), length: () => aggregateCollection.overAll().then(({ totalCount }) => totalCount), withConsistency: (consistencyLevel: ConsistencyLevel) => - collection(connection, capitalizedName, dbVersionSupport, consistencyLevel, tenant), + collection( + connection, + capitalizedName, + dbVersionSupport, + toBase64FromMedia, + consistencyLevel, + tenant + ), withTenant: (tenant: string | TT) => - collection( + collection( connection, capitalizedName, dbVersionSupport, + toBase64FromMedia, consistencyLevel, typeof tenant === 'string' ? tenant : tenant.name ), diff --git a/src/collections/index.ts b/packages/core/src/collections.ts similarity index 77% rename from src/collections/index.ts rename to packages/core/src/collections.ts index d43470a7..2030b7c8 100644 --- a/src/collections/index.ts +++ b/packages/core/src/collections.ts @@ -1,10 +1,7 @@ -import Connection from '../connection/grpc.js'; -import { WeaviateClass, WeaviateObjectTTLConfig } from '../openapi/types.js'; -import ClassExists from '../schema/classExists.js'; -import { ClassCreator, ClassDeleter, ClassGetter, SchemaGetter } from '../schema/index.js'; -import { DbVersionSupport } from '../utils/dbVersion.js'; -import collection, { Collection } from './collection/index.js'; +import collection, { ICollection } from './collection/index.js'; import { classToCollection, makeVectorsConfig, resolveProperty, resolveReference } from './config/utils.js'; +import Connection from './connection/grpc.js'; +import { WeaviateClass, WeaviateObjectTTLConfig } from './openapi/types.js'; import { CollectionConfig, GenerativeConfig, @@ -23,6 +20,10 @@ import { VectorizersConfigCreate, Vectors, } from './types/index.js'; +import { ToBase64FromMedia } from './utils/base64.js'; +import { DbVersionSupport } from './utils/dbVersion.js'; +import ClassExists from './v2/schema/classExists.js'; +import { ClassCreator, ClassDeleter, ClassGetter, SchemaGetter } from './v2/schema/index.js'; /** * All the options available when creating a new collection. @@ -57,7 +58,11 @@ export type CollectionConfigCreate; }; -const collections = (connection: Connection, dbVersionSupport: DbVersionSupport) => { +const collections = ( + connection: Connection, + dbVersionSupport: DbVersionSupport, + toBase64FromMedia: ToBase64FromMedia +) => { const listAll = () => new SchemaGetter(connection) .do() @@ -121,15 +126,30 @@ const collections = (connection: Connection, dbVersionSupport: DbVersionSupport) schema.properties = [...properties, ...references]; await new ClassCreator(connection).withClass(schema).do(); - return collection(connection, name, dbVersionSupport); + return collection( + connection, + name, + dbVersionSupport, + toBase64FromMedia + ); }, createFromSchema: async function (config: WeaviateClass) { const { class: name } = await new ClassCreator(connection).withClass(config).do(); - return collection(connection, name as string, dbVersionSupport); + return collection( + connection, + name as string, + dbVersionSupport, + toBase64FromMedia + ); }, createFromJson: async (schemaJson: WeaviateClass) => { const { class: name } = await connection.postReturn('/schema', schemaJson); - return collection(connection, name as string, dbVersionSupport); + return collection( + connection, + name as string, + dbVersionSupport, + toBase64FromMedia + ); }, delete: deleteCollection, deleteAll: () => listAll().then((configs) => Promise.all(configs?.map((c) => deleteCollection(c.name)))), @@ -141,37 +161,47 @@ const collections = (connection: Connection, dbVersionSupport: DbVersionSupport) .then(classToCollection), exportToJson: (name: string) => connection.get(`/schema/${name}`, true), listAll: listAll, - get: ( + get: < + TProperties extends Properties | undefined = undefined, + TVectors extends Vectors | undefined = undefined, + TName extends string = string + >( name: TName - ) => collection(connection, name, dbVersionSupport), + ) => + collection(connection, name, dbVersionSupport, toBase64FromMedia), use: < TProperties extends Properties | undefined = undefined, TName extends string = string, TVectors extends Vectors | undefined = undefined >( name: TName - ) => collection(connection, name, dbVersionSupport), + ) => + collection(connection, name, dbVersionSupport, toBase64FromMedia), }; }; -export interface Collections { +export interface ICollections { create< TProperties extends Properties | undefined = undefined, TName = string, TVectors extends Vectors | undefined = undefined >( config: CollectionConfigCreate - ): Promise>; - createFromSchema(config: WeaviateClass): Promise>; - createFromJson(schemaJson: WeaviateClass): Promise>; + ): Promise>; + createFromSchema(config: WeaviateClass): Promise>; + createFromJson(schemaJson: WeaviateClass): Promise>; delete(collection: string): Promise; deleteAll(): Promise; exists(name: string): Promise; export(name: string): Promise; exportToJson(name: string): Promise; - get( + get< + TProperties extends Properties | undefined = undefined, + TName extends string = string, + TVectors extends Vectors | undefined = undefined + >( name: TName - ): Collection; + ): ICollection; listAll(): Promise; use< TName extends string = string, @@ -179,11 +209,10 @@ export interface Collections { TVectors extends Vectors | undefined = undefined >( name: TName - ): Collection; + ): ICollection; } export default collections; -export { WeaviateClass } from '../openapi/types.js'; export * from './aggregate/index.js'; export * from './backup/index.js'; export * from './cluster/index.js'; @@ -194,6 +223,7 @@ export * from './data/index.js'; export * from './filters/index.js'; export * from './generate/index.js'; export * from './iterator/index.js'; +export { WeaviateClass } from './openapi/types.js'; export * from './query/index.js'; export * from './references/index.js'; export * from './sort/index.js'; diff --git a/src/collections/config/classes.ts b/packages/core/src/config/classes.ts similarity index 99% rename from src/collections/config/classes.ts rename to packages/core/src/config/classes.ts index 38cd2762..85160c5f 100644 --- a/src/collections/config/classes.ts +++ b/packages/core/src/config/classes.ts @@ -1,15 +1,4 @@ /* eslint-disable @typescript-eslint/no-non-null-assertion */ -import { WeaviateInvalidInputError } from '../../errors.js'; -import { - WeaviateClass, - WeaviateInvertedIndexConfig, - WeaviateModuleConfig, - WeaviateMultiTenancyConfig, - WeaviateObjectTTLConfig, - WeaviateReplicationConfig, - WeaviateVectorIndexConfig, - WeaviateVectorsConfig, -} from '../../openapi/types.js'; import { QuantizerGuards } from '../configure/parsing.js'; import { InvertedIndexConfigUpdate, @@ -22,6 +11,17 @@ import { VectorIndexConfigHFreshUpdate, VectorIndexConfigHNSWUpdate, } from '../configure/types/index.js'; +import { WeaviateInvalidInputError } from '../errors.js'; +import { + WeaviateClass, + WeaviateInvertedIndexConfig, + WeaviateModuleConfig, + WeaviateMultiTenancyConfig, + WeaviateObjectTTLConfig, + WeaviateReplicationConfig, + WeaviateVectorIndexConfig, + WeaviateVectorsConfig, +} from '../openapi/types.js'; import { CollectionConfigUpdate, GenerativeConfig, diff --git a/src/collections/config/index.ts b/packages/core/src/config/index.ts similarity index 94% rename from src/collections/config/index.ts rename to packages/core/src/config/index.ts index 6c26dfc0..2d421bc2 100644 --- a/src/collections/config/index.ts +++ b/packages/core/src/config/index.ts @@ -1,17 +1,17 @@ -import Connection from '../../connection/index.js'; -import { WeaviateDeserializationError } from '../../errors.js'; -import { WeaviateShardStatus } from '../../openapi/types.js'; -import ClassUpdater from '../../schema/classUpdater.js'; -import { ClassGetter, PropertyCreator, ShardUpdater } from '../../schema/index.js'; -import ShardsGetter from '../../schema/shardsGetter.js'; -import VectorAdder from '../../schema/vectorAdder.js'; -import { DbVersionSupport } from '../../utils/dbVersion.js'; import { PropertyConfigCreate, ReferenceMultiTargetConfigCreate, ReferenceSingleTargetConfigCreate, VectorizersConfigAdd, } from '../configure/types/index.js'; +import Connection from '../connection/index.js'; +import { WeaviateDeserializationError } from '../errors.js'; +import { WeaviateShardStatus } from '../openapi/types.js'; +import { DbVersionSupport } from '../utils/dbVersion.js'; +import ClassUpdater from '../v2/schema/classUpdater.js'; +import { ClassGetter, PropertyCreator, ShardUpdater } from '../v2/schema/index.js'; +import ShardsGetter from '../v2/schema/shardsGetter.js'; +import VectorAdder from '../v2/schema/vectorAdder.js'; import { MergeWithExisting } from './classes.js'; import { BQConfig, diff --git a/src/collections/config/types/generative.ts b/packages/core/src/config/types/generative.ts similarity index 100% rename from src/collections/config/types/generative.ts rename to packages/core/src/config/types/generative.ts diff --git a/src/collections/config/types/index.ts b/packages/core/src/config/types/index.ts similarity index 99% rename from src/collections/config/types/index.ts rename to packages/core/src/config/types/index.ts index e82c4909..5d41f451 100644 --- a/src/collections/config/types/index.ts +++ b/packages/core/src/config/types/index.ts @@ -7,7 +7,7 @@ import { WeaviateAsyncReplicationConfig, WeaviateDropPropertyIndexName, WeaviateTokenization, -} from '../../../openapi/types.js'; +} from '../../openapi/types.js'; import { InvertedIndexConfigUpdate, MultiTenancyConfigUpdate, diff --git a/src/collections/config/types/reranker.ts b/packages/core/src/config/types/reranker.ts similarity index 100% rename from src/collections/config/types/reranker.ts rename to packages/core/src/config/types/reranker.ts diff --git a/src/collections/config/types/vectorIndex.ts b/packages/core/src/config/types/vectorIndex.ts similarity index 100% rename from src/collections/config/types/vectorIndex.ts rename to packages/core/src/config/types/vectorIndex.ts diff --git a/src/collections/config/types/vectorizer.ts b/packages/core/src/config/types/vectorizer.ts similarity index 100% rename from src/collections/config/types/vectorizer.ts rename to packages/core/src/config/types/vectorizer.ts diff --git a/src/collections/config/utils.ts b/packages/core/src/config/utils.ts similarity index 99% rename from src/collections/config/utils.ts rename to packages/core/src/config/utils.ts index ddd98edd..94806a6e 100644 --- a/src/collections/config/utils.ts +++ b/packages/core/src/config/utils.ts @@ -1,4 +1,16 @@ -import { WeaviateDeserializationError, WeaviateInvalidInputError } from '../../errors.js'; +import { MultiVectorEncodingGuards, QuantizerGuards, VectorIndexGuards } from '../configure/parsing.js'; +import { + PropertyConfigCreate, + ReferenceConfigCreate, + ReferenceMultiTargetConfigCreate, + ReferenceSingleTargetConfigCreate, + VectorIndexConfigCreate, + VectorIndexConfigFlatCreate, + VectorIndexConfigHNSWCreate, + VectorizersConfigAdd, + VectorizersConfigCreate, +} from '../configure/types/index.js'; +import { WeaviateDeserializationError, WeaviateInvalidInputError } from '../errors.js'; import { WeaviateBM25Config, WeaviateClass, @@ -13,19 +25,7 @@ import { WeaviateStopwordConfig, WeaviateVectorIndexConfig, WeaviateVectorsConfig, -} from '../../openapi/types.js'; -import { MultiVectorEncodingGuards, QuantizerGuards, VectorIndexGuards } from '../configure/parsing.js'; -import { - PropertyConfigCreate, - ReferenceConfigCreate, - ReferenceMultiTargetConfigCreate, - ReferenceSingleTargetConfigCreate, - VectorIndexConfigCreate, - VectorIndexConfigFlatCreate, - VectorIndexConfigHNSWCreate, - VectorizersConfigAdd, - VectorizersConfigCreate, -} from '../configure/types/index.js'; +} from '../openapi/types.js'; import { BQConfig, CollectionConfig, diff --git a/src/collections/configure/generative.ts b/packages/core/src/configure/generative.ts similarity index 99% rename from src/collections/configure/generative.ts rename to packages/core/src/configure/generative.ts index f00ca85c..7292174b 100644 --- a/src/collections/configure/generative.ts +++ b/packages/core/src/configure/generative.ts @@ -1,3 +1,19 @@ +import { + GenerativeAWSConfigCreate, + GenerativeAnthropicConfigCreate, + GenerativeAnyscaleConfigCreate, + GenerativeAzureOpenAIConfigCreate, + GenerativeCohereConfigCreate, + GenerativeContextualAIConfigCreate, + GenerativeDatabricksConfigCreate, + GenerativeFriendliAIConfigCreate, + GenerativeMistralConfigCreate, + GenerativeNvidiaConfigCreate, + GenerativeOllamaConfigCreate, + GenerativeOpenAIConfigCreate, + GenerativePaLMConfigCreate, + GenerativeXAIConfigCreate, +} from '../collections.js'; import { GenerativeAWSConfig, GenerativeAnthropicConfig, @@ -16,22 +32,6 @@ import { GenerativeXAIConfig, ModuleConfig, } from '../config/types/index.js'; -import { - GenerativeAWSConfigCreate, - GenerativeAnthropicConfigCreate, - GenerativeAnyscaleConfigCreate, - GenerativeAzureOpenAIConfigCreate, - GenerativeCohereConfigCreate, - GenerativeContextualAIConfigCreate, - GenerativeDatabricksConfigCreate, - GenerativeFriendliAIConfigCreate, - GenerativeMistralConfigCreate, - GenerativeNvidiaConfigCreate, - GenerativeOllamaConfigCreate, - GenerativeOpenAIConfigCreate, - GenerativePaLMConfigCreate, - GenerativeXAIConfigCreate, -} from './types/index.js'; export default { /** diff --git a/src/collections/configure/index.ts b/packages/core/src/configure/index.ts similarity index 100% rename from src/collections/configure/index.ts rename to packages/core/src/configure/index.ts diff --git a/src/collections/configure/parsing.ts b/packages/core/src/configure/parsing.ts similarity index 100% rename from src/collections/configure/parsing.ts rename to packages/core/src/configure/parsing.ts diff --git a/src/collections/configure/reranker.ts b/packages/core/src/configure/reranker.ts similarity index 100% rename from src/collections/configure/reranker.ts rename to packages/core/src/configure/reranker.ts diff --git a/src/collections/configure/types/base.ts b/packages/core/src/configure/types/base.ts similarity index 99% rename from src/collections/configure/types/base.ts rename to packages/core/src/configure/types/base.ts index c2e46d14..8c1b13aa 100644 --- a/src/collections/configure/types/base.ts +++ b/packages/core/src/configure/types/base.ts @@ -1,4 +1,3 @@ -import { WeaviateNestedProperty, WeaviateProperty } from '../../../openapi/types.js'; import { InvertedIndexConfig, MultiTenancyConfig, @@ -7,6 +6,7 @@ import { ReplicationConfig, TextAnalyzerConfig, } from '../../config/types/index.js'; +import { WeaviateNestedProperty, WeaviateProperty } from '../../openapi/types.js'; import { DataType, QuantizerRecursivePartial } from '../../types/index.js'; import { NonRefKeys, RefKeys } from '../../types/internal.js'; diff --git a/src/collections/configure/types/generative.ts b/packages/core/src/configure/types/generative.ts similarity index 98% rename from src/collections/configure/types/generative.ts rename to packages/core/src/configure/types/generative.ts index b46a0de3..0de8fd86 100644 --- a/src/collections/configure/types/generative.ts +++ b/packages/core/src/configure/types/generative.ts @@ -9,7 +9,7 @@ import { GenerativeOllamaConfig, GenerativePaLMConfig, GenerativeXAIConfig, -} from '../../config/types/index.js'; +} from '../../collections.js'; export type GenerativeOpenAIConfigBaseCreate = { baseURL?: string; diff --git a/src/collections/configure/types/index.ts b/packages/core/src/configure/types/index.ts similarity index 100% rename from src/collections/configure/types/index.ts rename to packages/core/src/configure/types/index.ts diff --git a/src/collections/configure/types/vectorIndex.ts b/packages/core/src/configure/types/vectorIndex.ts similarity index 100% rename from src/collections/configure/types/vectorIndex.ts rename to packages/core/src/configure/types/vectorIndex.ts diff --git a/src/collections/configure/types/vectorizer.ts b/packages/core/src/configure/types/vectorizer.ts similarity index 100% rename from src/collections/configure/types/vectorizer.ts rename to packages/core/src/configure/types/vectorizer.ts diff --git a/src/collections/configure/vectorIndex.ts b/packages/core/src/configure/vectorIndex.ts similarity index 100% rename from src/collections/configure/vectorIndex.ts rename to packages/core/src/configure/vectorIndex.ts diff --git a/src/collections/configure/vectorizer.ts b/packages/core/src/configure/vectorizer.ts similarity index 99% rename from src/collections/configure/vectorizer.ts rename to packages/core/src/configure/vectorizer.ts index 02235540..d0276534 100644 --- a/src/collections/configure/vectorizer.ts +++ b/packages/core/src/configure/vectorizer.ts @@ -1,4 +1,3 @@ -import { WeaviateInvalidInputError } from '../../errors.js'; import { ModuleConfig, Multi2VecBindConfig, @@ -12,6 +11,7 @@ import { Vectorizer, VectorizerConfigType, } from '../config/types/index.js'; +import { WeaviateInvalidInputError } from '../errors.js'; import { PrimitiveKeys } from '../types/internal.js'; import { VectorIndexGuards } from './parsing.js'; import { diff --git a/src/connection/auth.ts b/packages/core/src/connection/auth.ts similarity index 94% rename from src/connection/auth.ts rename to packages/core/src/connection/auth.ts index ec18aed4..c99d3c18 100644 --- a/src/connection/auth.ts +++ b/packages/core/src/connection/auth.ts @@ -150,6 +150,7 @@ export interface UserPasswordCredentialsInput { } export class AuthUserPasswordCredentials implements OidcCredentials { + readonly kind = 'user'; private username: string; private password?: string; private scopes?: any[]; @@ -182,7 +183,7 @@ class UserPasswordAuthenticator implements OidcAuthFlow { } refresh = () => { - this.validateOpenidConfig(); + this.openidConfig.scopes.push('offline_access'); return this.requestAccessToken() .then((tokenResp: RequestAccessTokenResponse) => { return { @@ -196,22 +197,6 @@ class UserPasswordAuthenticator implements OidcAuthFlow { }); }; - validateOpenidConfig = () => { - if ( - this.openidConfig.provider.grant_types_supported !== undefined && - !this.openidConfig.provider.grant_types_supported.includes('password') - ) { - throw new Error('grant_type password not supported'); - } - if (this.openidConfig.provider.token_endpoint.includes('https://login.microsoftonline.com')) { - throw new Error( - 'microsoft/azure recommends to avoid authentication using ' + - 'username and password, so this method is not supported by this client' - ); - } - this.openidConfig.scopes.push('offline_access'); - }; - requestAccessToken = () => { const url = this.openidConfig.provider.token_endpoint; const params = new URLSearchParams({ @@ -234,6 +219,7 @@ export interface AccessTokenCredentialsInput { } export class AuthAccessTokenCredentials implements OidcCredentials { + readonly kind = 'access_token'; public readonly accessToken: string; public readonly expiresAt: number; public readonly refreshToken?: string; @@ -310,6 +296,7 @@ export interface ClientCredentialsInput { } export class AuthClientCredentials implements OidcCredentials { + readonly kind = 'client_credentials'; private clientSecret: any; private scopes?: any[]; public readonly silentRefresh: boolean; @@ -374,6 +361,7 @@ class ClientCredentialsAuthenticator implements OidcAuthFlow { } export class ApiKey { + readonly kind = 'api_key'; public readonly apiKey: string; constructor(apiKey: string) { diff --git a/src/connection/gql.ts b/packages/core/src/connection/gql.ts similarity index 100% rename from src/connection/gql.ts rename to packages/core/src/connection/gql.ts diff --git a/src/connection/grpc.ts b/packages/core/src/connection/grpc.ts similarity index 68% rename from src/connection/grpc.ts rename to packages/core/src/connection/grpc.ts index bae6c7de..94cc2255 100644 --- a/src/connection/grpc.ts +++ b/packages/core/src/connection/grpc.ts @@ -1,40 +1,26 @@ -import { isAbortError } from 'abort-controller-x'; - import ConnectionGQL from './gql.js'; import { getClientVersionHeader, InternalConnectionParams } from './http.js'; -import { ConsistencyLevel } from '../data/index.js'; - -import { - ChannelCredentials, - ChannelOptions, - ClientError, - createChannel, - createClientFactory, - Metadata, - Status, -} from 'nice-grpc'; -import { retryMiddleware } from 'nice-grpc-client-middleware-retry'; +import { ConsistencyLevel } from '../replication.js'; -import { HealthCheckResponse_ServingStatus, HealthDefinition } from '../proto/google/health/v1/health.js'; -import { WeaviateDefinition } from '../proto/v1/weaviate.js'; - -import Batcher, { Batch } from '../grpc/batcher.js'; -import Searcher, { Search } from '../grpc/searcher.js'; -import TenantsManager, { Tenants } from '../grpc/tenantsManager.js'; import { DbVersionSupport, initDbVersionProvider } from '../utils/dbVersion.js'; +import { isAbortError } from 'abort-controller-x'; +import { Metadata, Status } from 'nice-grpc-common'; import { WeaviateGRPCUnavailableError, WeaviateUnsupportedFeatureError } from '../errors.js'; import Aggregator, { Aggregate } from '../grpc/aggregator.js'; +import Batcher, { Batch } from '../grpc/batcher.js'; +import Searcher, { Search } from '../grpc/searcher.js'; +import TenantsManager, { Tenants } from '../grpc/tenantsManager.js'; import { Meta } from '../openapi/types.js'; +import { HealthCheckResponse_ServingStatus, HealthClient } from '../proto/google/health/v1/health.js'; +import { WeaviateClient } from '../proto/v1/weaviate.js'; export interface GrpcConnectionParams extends InternalConnectionParams { grpcAddress: string; grpcSecure: boolean; } -const clientFactory = createClientFactory().use(retryMiddleware); - const MAX_GRPC_MESSAGE_LENGTH = 104858000; // 10mb, needs to be synchronized with GRPC server // Must extend from ConnectionGQL so that it can be passed to all the builder methods, @@ -43,76 +29,66 @@ export default class ConnectionGRPC extends ConnectionGQL { private grpc: GrpcClient; public grpcMaxMessageLength: number; private params: GrpcConnectionParams & { grpcMaxMessageLength: number }; + private transports: Transports; - private constructor(params: GrpcConnectionParams & { grpcMaxMessageLength: number }) { + private constructor( + transports: Transports, + params: GrpcConnectionParams & { grpcMaxMessageLength: number } + ) { super(params); - this.grpc = grpcClient(params); + this.transports = transports; + this.grpc = grpcClient(this.transports, params); this.grpcMaxMessageLength = params.grpcMaxMessageLength; this.params = params; } - static use = (params: GrpcConnectionParams) => { + static use = async (transportsMaker: TransportsMaker, params: GrpcConnectionParams) => { const rest = new ConnectionGQL(params); const dbVersionProvider = initDbVersionProvider(rest); const dbVersionSupport = new DbVersionSupport(dbVersionProvider); - if (params.skipInitChecks) { - return { - connection: new ConnectionGRPC({ - ...params, - grpcMaxMessageLength: MAX_GRPC_MESSAGE_LENGTH, - }), - dbVersionProvider, - dbVersionSupport, - }; - } - return Promise.all([ - ConnectionGRPC.connect( - params, + let grpcMaxMessageLength = MAX_GRPC_MESSAGE_LENGTH; + if (!params.skipInitChecks) { + grpcMaxMessageLength = await Promise.all([ (rest.get('/meta', true) as Promise).then( (res: Meta) => res.grpcMaxMessageSize || MAX_GRPC_MESSAGE_LENGTH - ) - ), - dbVersionSupport.supportsCompatibleGrpcService().then((check) => { - if (!check.supports) { - throw new WeaviateUnsupportedFeatureError( - `Checking for gRPC compatibility failed with message: ${check.message}` - ); - } + ), + dbVersionSupport.supportsCompatibleGrpcService().then((check) => { + if (!check.supports) { + throw new WeaviateUnsupportedFeatureError( + `Checking for gRPC compatibility failed with message: ${check.message}` + ); + } + }), + ]).then(([grpcMaxMessageLength]) => grpcMaxMessageLength); + } + const connection = new ConnectionGRPC( + transportsMaker({ + grpcAddress: params.grpcAddress, + grpcSecure: params.grpcSecure, + grpcMaxMessageLength, }), - ]).then(([connection]) => { - return { connection, dbVersionProvider, dbVersionSupport }; - }); + { ...params, grpcMaxMessageLength } + ); + if (!params.skipInitChecks) { + const isHealthy = await connection.grpc.health(); + if (!isHealthy) { + await connection.close(); + throw new WeaviateGRPCUnavailableError(params.grpcAddress); + } + } + return { connection, dbVersionProvider, dbVersionSupport }; }; public async reconnect() { // Only need to reconnect grpc by making a new channel as rest/gql are stateless this.grpc.close(); - this.grpc = grpcClient(this.params); + this.grpc = grpcClient(this.transports, this.params); const isHealthy = await this.grpc.health(); if (!isHealthy) { throw new WeaviateGRPCUnavailableError(this.params.grpcAddress); } } - private static async connect( - params: GrpcConnectionParams, - grpcMaxLengthPromise: Promise - ): Promise { - const connection = await grpcMaxLengthPromise.then( - (grpcMaxMessageLength) => - new ConnectionGRPC({ - ...params, - grpcMaxMessageLength, - }) - ); - const isHealthy = await connection.grpc.health(); - if (!isHealthy) { - await connection.close(); - throw new WeaviateGRPCUnavailableError(params.grpcAddress); - } - return connection; - } - batch = (collection: string, consistencyLevel?: ConsistencyLevel, tenant?: string) => { if (this.authEnabled) { return this.login().then((token) => @@ -187,24 +163,20 @@ export interface GrpcClient { tenants: (collection: string, bearerToken?: string) => Tenants; } -export const grpcClient = (config: GrpcConnectionParams & { grpcMaxMessageLength: number }): GrpcClient => { - const channelOptions: ChannelOptions = { - 'grpc.max_send_message_length': config.grpcMaxMessageLength, - 'grpc.max_receive_message_length': config.grpcMaxMessageLength, - }; - if (config.grpcProxyUrl) { - // grpc.http_proxy is not used by grpc.js under-the-hood - // only uses the env var and whether http_proxy is enabled - process.env.grpc_proxy = config.grpcProxyUrl; - channelOptions['grpc.enabled_http_proxy'] = true; - } - const channel = createChannel( - config.grpcAddress, - config.grpcSecure ? ChannelCredentials.createSsl() : ChannelCredentials.createInsecure(), - channelOptions - ); - const client = clientFactory.create(WeaviateDefinition, channel); - const health = clientFactory.create(HealthDefinition, channel); +export type Transports = { + weaviate: WeaviateClient; + health: HealthClient; +}; + +export type TransportsParams = { + grpcAddress: string; + grpcSecure: boolean; + grpcMaxMessageLength: number; +}; + +export type TransportsMaker = (params: TransportsParams) => Transports; + +const grpcClient = (transports: Transports, config: GrpcConnectionParams) => { return { aggregate: ( collection: string, @@ -213,7 +185,7 @@ export const grpcClient = (config: GrpcConnectionParams & { grpcMaxMessageLength bearerToken?: string ) => Aggregator.use( - client, + transports.weaviate, collection, getMetadataWithEmbeddingServiceAuth(config, bearerToken), config.timeout?.query || 30, @@ -222,18 +194,18 @@ export const grpcClient = (config: GrpcConnectionParams & { grpcMaxMessageLength ), batch: (collection: string, consistencyLevel?: ConsistencyLevel, tenant?: string, bearerToken?: string) => Batcher.use( - client, + transports.weaviate, collection, getMetadataWithEmbeddingServiceAuth(config, bearerToken), config.timeout?.insert || 90, consistencyLevel, tenant ), - close: () => channel.close(), + close: () => {}, health: () => { const controller = new AbortController(); const timeoutId = setTimeout(() => controller.abort(), (config.timeout?.init || 2) * 1000); - return health + return transports.health .check( { service: '/grpc.health.v1.Health/Check' }, { @@ -241,7 +213,7 @@ export const grpcClient = (config: GrpcConnectionParams & { grpcMaxMessageLength retry: true, retryMaxAttempts: 1, retryableStatuses: [Status.UNAVAILABLE], - onRetryableError(error: ClientError, attempt: number, delayMs: number) { + onRetryableError(error: any, attempt: number, delayMs: number) { console.warn(error, `Healthcheck ${attempt} failed. Retrying in ${delayMs}ms.`); }, } @@ -263,7 +235,7 @@ export const grpcClient = (config: GrpcConnectionParams & { grpcMaxMessageLength abortSignal?: AbortSignal ) => Searcher.use( - client, + transports.weaviate, collection, getMetadataWithEmbeddingServiceAuth(config, bearerToken), config.timeout?.query || 30, @@ -273,7 +245,7 @@ export const grpcClient = (config: GrpcConnectionParams & { grpcMaxMessageLength ), tenants: (collection: string, bearerToken?: string) => TenantsManager.use( - client, + transports.weaviate, collection, new Metadata(bearerToken ? { ...config.headers, authorization: bearerToken } : config.headers), config.timeout?.query || 30 diff --git a/src/connection/helpers.ts b/packages/core/src/connection/helpers.ts similarity index 86% rename from src/connection/helpers.ts rename to packages/core/src/connection/helpers.ts index 28a0a959..ae5a2614 100644 --- a/src/connection/helpers.ts +++ b/packages/core/src/connection/helpers.ts @@ -1,5 +1,5 @@ import { WeaviateStartUpError } from '../errors.js'; -import { ClientParams, WeaviateClient } from '../index.js'; +import { ClientParams, Context, IWeaviateClient } from '../index.js'; import { AuthAccessTokenCredentials, AuthClientCredentials, @@ -70,11 +70,12 @@ export type ConnectToCustomOptions = { skipInitChecks?: boolean; }; -export function connectToWeaviateCloud( +export function connectToWeaviateCloud, TMedia>( clusterURL: string, - clientMaker: (params: ClientParams) => Promise, + clientMaker: (context: C, params: ClientParams) => Promise>, + context: C, options?: ConnectToWeaviateCloudOptions -): Promise { +): Promise> { // check if the URL is set if (!clusterURL) throw new Error('Missing `clusterURL` parameter'); @@ -103,7 +104,7 @@ export function connectToWeaviateCloud( ); } - return clientMaker({ + return clientMaker(context, { connectionParams: { http: { secure: true, @@ -124,12 +125,13 @@ export function connectToWeaviateCloud( }); } -export function connectToLocal( - clientMaker: (params: ClientParams) => Promise, +export function connectToLocal, TMedia>( + clientMaker: (context: C, params: ClientParams) => Promise>, + context: C, options?: ConnectToLocalOptions -): Promise { +): Promise> { const { host, port, grpcPort, authCredentials: auth, ...rest } = options || {}; - return clientMaker({ + return clientMaker(context, { connectionParams: { http: { secure: false, @@ -149,10 +151,11 @@ export function connectToLocal( }); } -export function connectToCustom( - clientMaker: (params: ClientParams) => Promise, +export function connectToCustom, TMedia>( + clientMaker: (context: C, params: ClientParams) => Promise>, + context: C, options?: ConnectToCustomOptions -): Promise { +): Promise> { const { httpHost, httpPath, @@ -164,7 +167,8 @@ export function connectToCustom( authCredentials: auth, ...rest } = options || {}; - return clientMaker({ + + return clientMaker(context, { connectionParams: { http: { secure: httpSecure || false, diff --git a/src/connection/http.ts b/packages/core/src/connection/http.ts similarity index 99% rename from src/connection/http.ts rename to packages/core/src/connection/http.ts index 53b4bdfd..5d805ab3 100644 --- a/src/connection/http.ts +++ b/packages/core/src/connection/http.ts @@ -1,8 +1,7 @@ -import { isAbortError } from 'abort-controller-x'; -import { Agent } from 'http'; - -import OpenidConfigurationGetter from '../misc/openidConfigurationGetter.js'; +import OpenidConfigurationGetter from '../v2/misc/openidConfigurationGetter.js'; +import { isAbortError } from 'abort-controller-x'; +import type { Agent } from 'http'; import { WeaviateInsufficientPermissionsError, WeaviateInvalidInputError, @@ -218,8 +217,6 @@ export default class ConnectionREST implements IConnection { }); } -export * from './auth.js'; - export interface HttpClient { close: () => void; patch: (path: string, payload: any, bearerToken?: string) => any; @@ -452,6 +449,7 @@ const getAuthHeaders = (config: InternalConnectionParams, bearerToken: string) = } : undefined; +export * from './auth.js'; export const getClientVersionHeader = () => { return { 'X-Weaviate-Client': `weaviate-client-typescript/${WEAVIATE_CLIENT_VERSION}`, diff --git a/src/connection/index.ts b/packages/core/src/connection/index.ts similarity index 84% rename from src/connection/index.ts rename to packages/core/src/connection/index.ts index f2440149..107c8d0f 100644 --- a/src/connection/index.ts +++ b/packages/core/src/connection/index.ts @@ -4,6 +4,7 @@ import ConnectionREST from './http.js'; export default ConnectionGQL; +export type { Transports, TransportsMaker, TransportsParams } from './grpc.js'; export type { ConnectToCustomOptions, ConnectToLocalOptions, diff --git a/src/collections/data/batch.ts b/packages/core/src/data/batch.ts similarity index 98% rename from src/collections/data/batch.ts rename to packages/core/src/data/batch.ts index 26baea63..2aa690df 100644 --- a/src/collections/data/batch.ts +++ b/packages/core/src/data/batch.ts @@ -1,14 +1,13 @@ import { Deque } from '@datastructures-js/deque'; import { v4 as uuidv4 } from 'uuid'; -import Connection from '../../connection/grpc.js'; -import { ConsistencyLevel } from '../../index.js'; +import Connection from '../connection/grpc.js'; import { BatchObject as BatchObjectGRPC, BatchReference as BatchReferenceGRPC, BatchStreamRequest, -} from '../../proto/v1/batch.js'; -import { DbVersionSupport } from '../../utils/dbVersion.js'; -import { BatchObject, BatchReference, ErrorObject, ErrorReference } from '../index.js'; +} from '../proto/v1/batch.js'; +import { DbVersionSupport } from '../utils/dbVersion.js'; +import { BatchObject, BatchReference, ConsistencyLevel, ErrorObject, ErrorReference } from '../index.js'; import { Serialize } from '../serialize/index.js'; const GCP_STREAM_TIMEOUT = 160 * 1000; // 160 seconds diff --git a/src/collections/data/index.ts b/packages/core/src/data/index.ts similarity index 97% rename from src/collections/data/index.ts rename to packages/core/src/data/index.ts index 8e6bc04a..3b453ca4 100644 --- a/src/collections/data/index.ts +++ b/packages/core/src/data/index.ts @@ -1,12 +1,8 @@ -import Connection from '../../connection/grpc.js'; +import Connection from '../connection/grpc.js'; -import { buildRefsPath } from '../../batch/path.js'; -import { Checker, ConsistencyLevel } from '../../data/index.js'; -import { ObjectsPath, ReferencesPath } from '../../data/path.js'; -import { BatchReference, BatchReferenceResponse, WeaviateObject } from '../../openapi/types.js'; -import { DbVersionSupport } from '../../utils/dbVersion.js'; import { Deserialize } from '../deserialize/index.js'; import { FilterValue } from '../filters/index.js'; +import { BatchReference, BatchReferenceResponse, WeaviateObject } from '../openapi/types.js'; import { referenceToBeacons } from '../references/utils.js'; import { DataGuards, Serialize } from '../serialize/index.js'; import { @@ -22,6 +18,10 @@ import { ReferenceInputs, Vectors, } from '../types/index.js'; +import { DbVersionSupport } from '../utils/dbVersion.js'; +import { buildRefsPath } from '../v2/batch/path.js'; +import { Checker, ConsistencyLevel } from '../v2/data/index.js'; +import { ObjectsPath, ReferencesPath } from '../v2/data/path.js'; import batch from './batch.js'; /** The available options to the `data.deleteMany` method. */ diff --git a/src/collections/deserialize/index.ts b/packages/core/src/deserialize/index.ts similarity index 96% rename from src/collections/deserialize/index.ts rename to packages/core/src/deserialize/index.ts index 5ad7489e..d0d69819 100644 --- a/src/collections/deserialize/index.ts +++ b/packages/core/src/deserialize/index.ts @@ -1,25 +1,4 @@ import { stringify } from 'uuid'; -import { WeaviateDeserializationError } from '../../errors.js'; -import { Tenant as TenantREST } from '../../openapi/types.js'; -import { - AggregateReply, - AggregateReply_Aggregations, - AggregateReply_Aggregations_Aggregation, - AggregateReply_Aggregations_Aggregation_Boolean, - AggregateReply_Aggregations_Aggregation_DateMessage, - AggregateReply_Aggregations_Aggregation_Integer, - AggregateReply_Aggregations_Aggregation_Number, - AggregateReply_Aggregations_Aggregation_Text, - AggregateReply_Group_GroupedBy, -} from '../../proto/v1/aggregate.js'; -import { Vectors_VectorType } from '../../proto/v1/base.js'; -import { BatchObject as BatchObjectGRPC, BatchObjectsReply } from '../../proto/v1/batch.js'; -import { BatchDeleteReply } from '../../proto/v1/batch_delete.js'; -import { ListValue, Properties as PropertiesGrpc, Value } from '../../proto/v1/properties.js'; -import { MetadataResult, PropertiesResult, SearchReply } from '../../proto/v1/search_get.js'; -import { TenantActivityStatus, TenantsGetReply } from '../../proto/v1/tenants.js'; -import { DbVersionSupport } from '../../utils/dbVersion.js'; -import { yieldToEventLoop } from '../../utils/yield.js'; import { AggregateBoolean, AggregateDate, @@ -31,9 +10,27 @@ import { GenerativeConfigRuntime, GenerativeMetadata, PropertiesMetrics, - Vectors, - WeaviateObject, -} from '../index.js'; +} from '../collections.js'; +import { WeaviateDeserializationError } from '../errors.js'; +import { Vectors, WeaviateObject } from '../index.js'; +import { Tenant as TenantREST } from '../openapi/types.js'; +import { + AggregateReply, + AggregateReply_Aggregations, + AggregateReply_Aggregations_Aggregation, + AggregateReply_Aggregations_Aggregation_Boolean, + AggregateReply_Aggregations_Aggregation_DateMessage, + AggregateReply_Aggregations_Aggregation_Integer, + AggregateReply_Aggregations_Aggregation_Number, + AggregateReply_Aggregations_Aggregation_Text, + AggregateReply_Group_GroupedBy, +} from '../proto/v1/aggregate.js'; +import { Vectors_VectorType } from '../proto/v1/base.js'; +import { BatchObject as BatchObjectGRPC, BatchObjectsReply } from '../proto/v1/batch.js'; +import { BatchDeleteReply } from '../proto/v1/batch_delete.js'; +import { ListValue, Properties as PropertiesGrpc, Value } from '../proto/v1/properties.js'; +import { MetadataResult, PropertiesResult, SearchReply } from '../proto/v1/search_get.js'; +import { TenantActivityStatus, TenantsGetReply } from '../proto/v1/tenants.js'; import { MultiVectorType, SingleVectorType } from '../query/types.js'; import { referenceFromObjects } from '../references/utils.js'; import { Tenant } from '../tenants/index.js'; @@ -52,6 +49,8 @@ import { ReturnMetadata, WeaviateReturn, } from '../types/index.js'; +import { DbVersionSupport } from '../utils/dbVersion.js'; +import { yieldToEventLoop } from '../utils/yield.js'; const UINT16LEN = 2; const UINT32LEN = 4; @@ -493,7 +492,7 @@ export class Deserialize { mappedObjs: BatchObjectGRPC[], elapsed: number ): BatchObjectsReturn { - const allResponses = []; + const allResponses: (string | ErrorObject)[] = []; const errors: Record> = {}; const successes: Record = {}; diff --git a/src/errors.ts b/packages/core/src/errors.ts similarity index 100% rename from src/errors.ts rename to packages/core/src/errors.ts diff --git a/src/collections/filters/classes.ts b/packages/core/src/filters/classes.ts similarity index 99% rename from src/collections/filters/classes.ts rename to packages/core/src/filters/classes.ts index 8951d828..4e0ea2ee 100644 --- a/src/collections/filters/classes.ts +++ b/packages/core/src/filters/classes.ts @@ -1,10 +1,10 @@ -import { WeaviateInvalidInputError } from '../../errors.js'; +import { WeaviateInvalidInputError } from '../errors.js'; import { FilterReferenceCount, FilterReferenceMultiTarget, FilterReferenceSingleTarget, FilterTarget, -} from '../../proto/v1/base.js'; +} from '../proto/v1/base.js'; import { ExtractCrossReferenceType, NonRefKeys, RefKeys } from '../types/internal.js'; import { ContainsValue, diff --git a/src/collections/filters/index.ts b/packages/core/src/filters/index.ts similarity index 100% rename from src/collections/filters/index.ts rename to packages/core/src/filters/index.ts diff --git a/src/collections/filters/types.ts b/packages/core/src/filters/types.ts similarity index 99% rename from src/collections/filters/types.ts rename to packages/core/src/filters/types.ts index 67359e24..6a987392 100644 --- a/src/collections/filters/types.ts +++ b/packages/core/src/filters/types.ts @@ -1,4 +1,4 @@ -import { FilterTarget } from '../../proto/v1/base.js'; +import { FilterTarget } from '../proto/v1/base.js'; import { ExtractCrossReferenceType, NonRefKeys, RefKeys } from '../types/internal.js'; export type Operator = diff --git a/src/collections/filters/utils.ts b/packages/core/src/filters/utils.ts similarity index 100% rename from src/collections/filters/utils.ts rename to packages/core/src/filters/utils.ts diff --git a/src/collections/generate/config.ts b/packages/core/src/generate/config.ts similarity index 99% rename from src/collections/generate/config.ts rename to packages/core/src/generate/config.ts index c808a66d..54461bc7 100644 --- a/src/collections/generate/config.ts +++ b/packages/core/src/generate/config.ts @@ -1,5 +1,3 @@ -import { TextArray } from '../../proto/v1/base.js'; -import { ModuleConfig } from '../config/types/index.js'; import { GenerativeAWSConfigRuntime, GenerativeAnthropicConfigRuntime, @@ -15,7 +13,9 @@ import { GenerativeOllamaConfigRuntime, GenerativeOpenAIConfigRuntime, GenerativeXAIConfigRuntime, -} from '../index.js'; +} from '../collections.js'; +import { ModuleConfig } from '../config/types/index.js'; +import { TextArray } from '../proto/v1/base.js'; export const generativeParameters = { /** diff --git a/src/collections/generate/index.ts b/packages/core/src/generate/index.ts similarity index 88% rename from src/collections/generate/index.ts rename to packages/core/src/generate/index.ts index 0fdcfd6d..a23c90e9 100644 --- a/src/collections/generate/index.ts +++ b/packages/core/src/generate/index.ts @@ -1,13 +1,12 @@ -import Connection from '../../connection/grpc.js'; +import Connection from '../connection/grpc.js'; -import { ConsistencyLevel } from '../../data/index.js'; -import { DbVersionSupport } from '../../utils/dbVersion.js'; +import { ConsistencyLevel } from '../replication.js'; +import { DbVersionSupport } from '../utils/dbVersion.js'; -import { WeaviateInvalidInputError } from '../../errors.js'; -import { toBase64FromMedia } from '../../index.js'; -import { GenerativeSearch } from '../../proto/v1/generative.js'; -import { SearchReply } from '../../proto/v1/search_get.js'; import { Deserialize } from '../deserialize/index.js'; +import { WeaviateInvalidInputError } from '../errors.js'; +import { GenerativeSearch } from '../proto/v1/generative.js'; +import { SearchReply } from '../proto/v1/search_get.js'; import { Check } from '../query/check.js'; import { CallOptions } from '../query/index.js'; import { @@ -37,24 +36,29 @@ import { ReturnVectors, } from '../types/index.js'; import { IncludeVector } from '../types/internal.js'; +import { ToBase64FromMedia } from '../utils/base64.js'; import { Generate } from './types.js'; -class GenerateManager implements Generate { +class GenerateManager implements Generate { private check: Check; + private toBase64FromMedia: ToBase64FromMedia; - private constructor(check: Check) { + private constructor(check: Check, toBase64FromMedia: ToBase64FromMedia) { this.check = check; + this.toBase64FromMedia = toBase64FromMedia; } - public static use( + public static use( connection: Connection, name: string, dbVersionSupport: DbVersionSupport, + toBase64FromMedia: ToBase64FromMedia, consistencyLevel?: ConsistencyLevel, tenant?: string - ): GenerateManager { - return new GenerateManager( - new Check(connection, name, dbVersionSupport, consistencyLevel, tenant) + ): GenerateManager { + return new GenerateManager( + new Check(connection, name, dbVersionSupport, consistencyLevel, tenant), + toBase64FromMedia ); } @@ -87,7 +91,7 @@ class GenerateManager implements Generate { search, args: { ...Serialize.search.fetchObjects(opts), - generative: await Serialize.generative({ supportsSingleGrouped }, generate), + generative: await Serialize.generative({ supportsSingleGrouped }, this.toBase64FromMedia, generate), }, })) .then(({ search, args }) => search.withFetch(args)) @@ -133,7 +137,7 @@ class GenerateManager implements Generate { search, args: { ...Serialize.search.bm25(query, opts), - generative: await Serialize.generative({ supportsSingleGrouped }, generate), + generative: await Serialize.generative({ supportsSingleGrouped }, this.toBase64FromMedia, generate), }, })) .then(({ search, args }) => search.withBm25(args)) @@ -185,7 +189,7 @@ class GenerateManager implements Generate { }, opts )), - generative: await Serialize.generative({ supportsSingleGrouped }, generate), + generative: await Serialize.generative({ supportsSingleGrouped }, this.toBase64FromMedia, generate), }, })) .then(({ search, args }) => search.withHybrid(args)) @@ -197,7 +201,7 @@ class GenerateManager implements Generate { RV extends ReturnVectors, C extends GenerativeConfigRuntime | undefined = undefined >( - image: string | Buffer, + image: TMedia, generate: GenerateOptions, opts?: BaseNearOptions, callOpts?: CallOptions @@ -207,7 +211,7 @@ class GenerateManager implements Generate { RV extends ReturnVectors, C extends GenerativeConfigRuntime | undefined = undefined >( - image: string | Buffer, + image: TMedia, generate: GenerateOptions, opts: GroupByNearOptions, callOpts?: CallOptions @@ -217,7 +221,7 @@ class GenerateManager implements Generate { RV extends ReturnVectors, C extends GenerativeConfigRuntime | undefined = undefined >( - image: string | Buffer, + image: TMedia, generate: GenerateOptions, opts?: NearOptions, callOpts?: CallOptions @@ -227,18 +231,23 @@ class GenerateManager implements Generate { this.check.supportForSingleGroupedGenerative(), this.check.supportForGenerativeConfigRuntime(generate.config), ]) - .then(async ([{ search }, supportsSingleGrouped]) => ({ - search, - args: { - ...Serialize.search.nearImage( - { - image: await toBase64FromMedia(image), - }, - opts - ), - generative: await Serialize.generative({ supportsSingleGrouped }, generate), - }, - })) + .then(([{ search }, supportsSingleGrouped]) => + Promise.all([ + this.toBase64FromMedia(image), + Serialize.generative({ supportsSingleGrouped }, this.toBase64FromMedia, generate), + ]).then(([image, generative]) => ({ + search, + args: { + ...Serialize.search.nearImage( + { + image, + }, + opts + ), + generative, + }, + })) + ) .then(({ search, args }) => search.withNearImage(args)) .then((reply) => this.parseGroupByReply(opts, reply)); } @@ -287,7 +296,7 @@ class GenerateManager implements Generate { }, opts ), - generative: await Serialize.generative({ supportsSingleGrouped }, generate), + generative: await Serialize.generative({ supportsSingleGrouped }, this.toBase64FromMedia, generate), }, })) .then(({ search, args }) => search.withNearObject(args)) @@ -338,7 +347,7 @@ class GenerateManager implements Generate { }, opts ), - generative: await Serialize.generative({ supportsSingleGrouped }, generate), + generative: await Serialize.generative({ supportsSingleGrouped }, this.toBase64FromMedia, generate), }, })) .then(({ search, args }) => search.withNearText(args)) @@ -390,7 +399,7 @@ class GenerateManager implements Generate { }, opts )), - generative: await Serialize.generative({ supportsSingleGrouped }, generate), + generative: await Serialize.generative({ supportsSingleGrouped }, this.toBase64FromMedia, generate), }, })) .then(({ search, args }) => search.withNearVector(args)) @@ -402,7 +411,7 @@ class GenerateManager implements Generate { RV extends ReturnVectors, C extends GenerativeConfigRuntime | undefined = undefined >( - media: string | Buffer, + media: TMedia, type: NearMediaType, generate: GenerateOptions, opts?: BaseNearOptions, @@ -413,7 +422,7 @@ class GenerateManager implements Generate { RV extends ReturnVectors, C extends GenerativeConfigRuntime | undefined = undefined >( - media: string | Buffer, + media: TMedia, type: NearMediaType, generate: GenerateOptions, opts: GroupByNearOptions, @@ -424,7 +433,7 @@ class GenerateManager implements Generate { RV extends ReturnVectors, C extends GenerativeConfigRuntime | undefined = undefined >( - media: string | Buffer, + media: TMedia, type: NearMediaType, generate: GenerateOptions, opts?: NearOptions, @@ -484,8 +493,8 @@ class GenerateManager implements Generate { throw new WeaviateInvalidInputError(`Invalid media type: ${type}`); } return Promise.all([ - toBase64FromMedia(media), - Serialize.generative({ supportsSingleGrouped }, generate), + this.toBase64FromMedia(media), + Serialize.generative({ supportsSingleGrouped }, this.toBase64FromMedia, generate), ]).then(([media, generative]) => send(media, generative)); }) .then((reply) => this.parseGroupByReply(opts, reply)); diff --git a/src/collections/generate/types.ts b/packages/core/src/generate/types.ts similarity index 97% rename from src/collections/generate/types.ts rename to packages/core/src/generate/types.ts index 21f7d52e..35efc58a 100644 --- a/src/collections/generate/types.ts +++ b/packages/core/src/generate/types.ts @@ -170,7 +170,7 @@ interface Hybrid { ): GenerateReturn; } -interface NearMedia { +interface NearMedia { /** * Perform retrieval-augmented generation (RaG) on the results of a by-audio object search in this collection using an audio-capable vectorization module and vector-based similarity search. * @@ -180,7 +180,7 @@ interface NearMedia { * * This overload is for performing a search without the `groupBy` param. * - * @param {string | Buffer} media - The media file to search on. This can be a base64 string, a file path string, or a buffer. + * @param {TMedia} media - The media file to search on. This can be a base64 string, a file path string, or a buffer. * @param {NearMediaType} type - The type of media to search on. * @param {GenerateOptions} generate - The available options for performing the generation. * @param {BaseNearOptions} [opts] - The available options for performing the near-media search. @@ -192,7 +192,7 @@ interface NearMedia { RV extends ReturnVectors, C extends GenerativeConfigRuntime | undefined = undefined >( - media: string | Buffer, + media: TMedia, type: NearMediaType, generate: GenerateOptions, opts?: BaseNearOptions, @@ -207,7 +207,7 @@ interface NearMedia { * * This overload is for performing a search with the `groupBy` param. * - * @param {string | Buffer} media - The media file to search on. This can be a base64 string, a file path string, or a buffer. + * @param {TMedia} media - The media file to search on. This can be a base64 string, a file path string, or a buffer. * @param {NearMediaType} type - The type of media to search on. * @param {GenerateOptions} generate - The available options for performing the generation. * @param {GroupByNearOptions} opts - The available options for performing the near-media search. @@ -219,7 +219,7 @@ interface NearMedia { RV extends ReturnVectors, C extends GenerativeConfigRuntime | undefined = undefined >( - media: string | Buffer, + media: TMedia, type: NearMediaType, generate: GenerateOptions, opts: GroupByNearOptions, @@ -234,7 +234,7 @@ interface NearMedia { * * This overload is for performing a search with a programmatically defined `opts` param. * - * @param {string | Buffer} media - The media to search on. This can be a base64 string, a file path string, or a buffer. + * @param {TMedia} media - The media to search on. This can be a base64 string, a file path string, or a buffer. * @param {NearMediaType} type - The type of media to search on. * @param {GenerateOptions} generate - The available options for performing the generation. * @param {NearOptions} [opts] - The available options for performing the near-media search. @@ -246,7 +246,7 @@ interface NearMedia { RV extends ReturnVectors, C extends GenerativeConfigRuntime | undefined = undefined >( - media: string | Buffer, + media: TMedia, type: NearMediaType, generate: GenerateOptions, opts?: NearOptions, @@ -476,10 +476,10 @@ interface NearVector { ): GenerateReturn; } -export interface Generate +export interface Generate extends Bm25, Hybrid, - NearMedia, + NearMedia, NearObject, NearText, NearVector { diff --git a/src/groups/index.ts b/packages/core/src/groups/index.ts similarity index 100% rename from src/groups/index.ts rename to packages/core/src/groups/index.ts diff --git a/src/grpc/aggregator.ts b/packages/core/src/grpc/aggregator.ts similarity index 95% rename from src/grpc/aggregator.ts rename to packages/core/src/grpc/aggregator.ts index 4262fe5d..de3c4c70 100644 --- a/src/grpc/aggregator.ts +++ b/packages/core/src/grpc/aggregator.ts @@ -1,6 +1,6 @@ -import { ConsistencyLevel } from '../data/index.js'; +import { ConsistencyLevel } from '../replication.js'; -import { Metadata } from 'nice-grpc'; +import { Metadata } from 'nice-grpc-common'; import { AggregateReply, AggregateRequest, @@ -22,7 +22,6 @@ import { } from '../proto/v1/base_search.js'; import { WeaviateClient } from '../proto/v1/weaviate.js'; -import { RetryOptions } from 'nice-grpc-client-middleware-retry'; import { WeaviateQueryError } from '../errors.js'; import Base from './base.js'; import { retryOptions } from './retry.js'; @@ -93,7 +92,7 @@ export interface Aggregate { export default class Aggregator extends Base implements Aggregate { public static use( - connection: WeaviateClient, + connection: WeaviateClient, collection: string, metadata: Metadata, timeout: number, diff --git a/src/grpc/base.ts b/packages/core/src/grpc/base.ts similarity index 90% rename from src/grpc/base.ts rename to packages/core/src/grpc/base.ts index af84976e..8255e48d 100644 --- a/src/grpc/base.ts +++ b/packages/core/src/grpc/base.ts @@ -1,14 +1,14 @@ -import { ConsistencyLevel } from '../data/index.js'; +import { ConsistencyLevel } from '../replication.js'; import { isAbortError } from 'abort-controller-x'; -import { Metadata, ServerError, Status } from 'nice-grpc'; -import { RetryOptions } from 'nice-grpc-client-middleware-retry'; +import { Metadata, ServerError, Status } from 'nice-grpc-common'; +// import { RetryOptions } from 'nice-grpc-client-middleware-retry'; import { WeaviateInsufficientPermissionsError, WeaviateRequestTimeoutError } from '../errors.js'; import { ConsistencyLevel as ConsistencyLevelGRPC } from '../proto/v1/base.js'; import { WeaviateClient } from '../proto/v1/weaviate.js'; export default class Base { - protected connection: WeaviateClient; + protected connection: WeaviateClient; protected collection: string; protected timeout: number; protected consistencyLevel?: ConsistencyLevelGRPC; @@ -17,7 +17,7 @@ export default class Base { protected abortSignal?: AbortSignal; protected constructor( - connection: WeaviateClient, + connection: WeaviateClient, collection: string, metadata: Metadata, timeout: number, diff --git a/src/grpc/batcher.ts b/packages/core/src/grpc/batcher.ts similarity index 93% rename from src/grpc/batcher.ts rename to packages/core/src/grpc/batcher.ts index c995ddf4..f1c3eefd 100644 --- a/src/grpc/batcher.ts +++ b/packages/core/src/grpc/batcher.ts @@ -1,6 +1,6 @@ -import { ClientError, Metadata } from 'nice-grpc'; +import { ClientError, Metadata } from 'nice-grpc-common'; -import { ConsistencyLevel } from '../data/index.js'; +import { ConsistencyLevel } from '../replication.js'; import { BatchObject, @@ -11,7 +11,6 @@ import { } from '../proto/v1/batch.js'; import { WeaviateClient } from '../proto/v1/weaviate.js'; -import { RetryOptions } from 'nice-grpc-client-middleware-retry'; import { WeaviateBatchError, WeaviateBatchStreamError, WeaviateDeleteManyError } from '../errors.js'; import { Filters } from '../proto/v1/base.js'; import { BatchDeleteReply, BatchDeleteRequest } from '../proto/v1/batch_delete.js'; @@ -37,7 +36,7 @@ export interface BatchDeleteArgs { export default class Batcher extends Base implements Batch { public static use( - connection: WeaviateClient, + connection: WeaviateClient, collection: string, metadata: Metadata, timeout: number, diff --git a/src/grpc/retry.ts b/packages/core/src/grpc/retry.ts similarity index 60% rename from src/grpc/retry.ts rename to packages/core/src/grpc/retry.ts index a2628117..64ffd3f0 100644 --- a/src/grpc/retry.ts +++ b/packages/core/src/grpc/retry.ts @@ -1,7 +1,6 @@ -import { ClientError, Status } from 'nice-grpc'; -import { RetryOptions } from 'nice-grpc-client-middleware-retry'; +import { ClientError, Status } from 'nice-grpc-common'; -export const retryOptions: RetryOptions = { +export const retryOptions = { retry: true, retryMaxAttempts: 5, retryableStatuses: [Status.UNAVAILABLE], diff --git a/src/grpc/searcher.ts b/packages/core/src/grpc/searcher.ts similarity index 96% rename from src/grpc/searcher.ts rename to packages/core/src/grpc/searcher.ts index 60f38cf4..b9af2fa4 100644 --- a/src/grpc/searcher.ts +++ b/packages/core/src/grpc/searcher.ts @@ -1,6 +1,6 @@ -import { ConsistencyLevel } from '../data/index.js'; +import { ConsistencyLevel } from '../replication.js'; -import { Metadata } from 'nice-grpc'; +import { Metadata } from 'nice-grpc-common'; import { Filters } from '../proto/v1/base.js'; import { BM25, @@ -26,7 +26,6 @@ import { } from '../proto/v1/search_get.js'; import { WeaviateClient } from '../proto/v1/weaviate.js'; -import { RetryOptions } from 'nice-grpc-client-middleware-retry'; import { WeaviateQueryError } from '../errors.js'; import { NearMediaType } from '../index.js'; import { GenerativeSearch } from '../proto/v1/generative.js'; @@ -132,7 +131,7 @@ export interface Search { export default class Searcher extends Base implements Search { public static use( - connection: WeaviateClient, + connection: WeaviateClient, collection: string, metadata: Metadata, timeout: number, diff --git a/src/grpc/tenantsManager.ts b/packages/core/src/grpc/tenantsManager.ts similarity index 89% rename from src/grpc/tenantsManager.ts rename to packages/core/src/grpc/tenantsManager.ts index 82473f76..649f6e81 100644 --- a/src/grpc/tenantsManager.ts +++ b/packages/core/src/grpc/tenantsManager.ts @@ -1,5 +1,4 @@ -import { Metadata } from 'nice-grpc'; -import { RetryOptions } from 'nice-grpc-client-middleware-retry'; +import { Metadata } from 'nice-grpc-common'; import { WeaviateTenantsGetError } from '../errors.js'; import { TenantsGetReply, TenantsGetRequest } from '../proto/v1/tenants.js'; import { WeaviateClient } from '../proto/v1/weaviate.js'; @@ -16,7 +15,7 @@ export interface Tenants { export default class TenantsManager extends Base implements Tenants { public static use( - connection: WeaviateClient, + connection: WeaviateClient, collection: string, metadata: Metadata, timeout: number diff --git a/src/index.ts b/packages/core/src/index.ts similarity index 50% rename from src/index.ts rename to packages/core/src/index.ts index b3fa9e7d..2e213636 100644 --- a/src/index.ts +++ b/packages/core/src/index.ts @@ -1,9 +1,6 @@ -import { Backend, BackupCompressionLevel, BackupStatus } from './backup/index.js'; -import { Backup, backup } from './collections/backup/client.js'; -import cluster, { Cluster } from './collections/cluster/index.js'; -import { configGuards } from './collections/config/index.js'; -import { configure, reconfigure } from './collections/configure/index.js'; -import collections, { Collections, queryFactory } from './collections/index.js'; +import { Backup, backup } from './backup/client.js'; +import cluster, { Cluster } from './cluster/index.js'; +import collections, { ICollections } from './collections.js'; import { AccessTokenCredentialsInput, ApiKey, @@ -18,33 +15,28 @@ import { mapApiKey, } from './connection/auth.js'; import * as helpers from './connection/helpers.js'; -import { - ConnectToCustomOptions, - ConnectToLocalOptions, - ConnectToWCDOptions, - ConnectToWCSOptions, - ConnectToWeaviateCloudOptions, -} from './connection/helpers.js'; import { ConnectionDetails, Headers, ProxiesParams, TimeoutParams } from './connection/http.js'; import { ConnectionGRPC } from './connection/index.js'; -import MetaGetter from './misc/metaGetter.js'; import { Meta } from './openapi/types.js'; import roles, { Roles, permissions } from './roles/index.js'; import { DbVersion } from './utils/dbVersion.js'; +import { Backend, BackupCompressionLevel, BackupStatus } from './v2/backup/index.js'; +import MetaGetter from './v2/misc/metaGetter.js'; -import { Agent as HttpAgent } from 'http'; -import { Agent as HttpsAgent } from 'https'; -import { LiveChecker, OpenidConfigurationGetter, ReadyChecker } from './misc/index.js'; +import type { Agent } from 'http'; +import { LiveChecker, OpenidConfigurationGetter, ReadyChecker } from './v2/misc/index.js'; import weaviateV2 from './v2/index.js'; import alias, { Aliases } from './alias/index.js'; -import batch, { Batch } from './collections/data/batch.js'; -import filter from './collections/filters/index.js'; -import { ConsistencyLevel } from './data/replication.js'; +import { TransportsMaker } from './connection/grpc.js'; +// import batch, { Batch } from './data/batch.js'; +import filter from './filters/index.js'; import groups, { Groups } from './groups/index.js'; +import { ConsistencyLevel } from './replication.js'; import tokenize, { Tokenize } from './tokenize/index.js'; import users, { Users } from './users/index.js'; +import { ToBase64FromMedia } from './utils/base64.js'; export type ProtocolParams = { /** @@ -105,12 +97,12 @@ export type ClientParams = { skipInitChecks?: boolean; }; -export interface WeaviateClient { +export interface IWeaviateClient { alias: Aliases; backup: Backup; - batch: Batch; + // batch: Batch; cluster: Cluster; - collections: Collections; + collections: ICollections; oidcAuth?: OidcAuthenticator; groups: Groups; roles: Roles; @@ -126,7 +118,7 @@ export interface WeaviateClient { isReady: () => Promise; } -const cleanHost = (host: string, protocol: 'rest' | 'grpc') => { +export const cleanHost = (host: string, protocol: 'rest' | 'grpc') => { if (host.includes('http')) { console.warn( `The ${protocol}.host parameter should not include the protocol. Please remove the http:// or https:// from the ${protocol}.host parameter.\ @@ -137,77 +129,26 @@ const cleanHost = (host: string, protocol: 'rest' | 'grpc') => { return host; }; -/** - * Connect to a custom Weaviate deployment, e.g. your own self-hosted Kubernetes cluster. - * - * @param {ConnectToCustomOptions} options Options for the connection. - * @returns {Promise} A Promise that resolves to a client connected to your custom Weaviate deployment. - */ -export function connectToCustom(options: ConnectToCustomOptions): Promise { - return helpers.connectToCustom(client, options); -} - -/** - * Connect to a locally-deployed Weaviate instance, e.g. as a Docker compose stack. - * - * @param {ConnectToLocalOptions} [options] Options for the connection. - * @returns {Promise} A Promise that resolves to a client connected to your local Weaviate instance. - */ -export function connectToLocal(options?: ConnectToLocalOptions): Promise { - return helpers.connectToLocal(client, options); -} - -/** - * Connect to your own Weaviate Cloud (WCD) instance. - * - * @deprecated Use `connectToWeaviateCloud` instead. - * - * @param {string} clusterURL The URL of your WCD instance. E.g., `https://example.weaviate.network`. - * @param {ConnectToWCDOptions} [options] Additional options for the connection. - * @returns {Promise} A Promise that resolves to a client connected to your WCD instance. - */ -export function connectToWCD(clusterURL: string, options?: ConnectToWCDOptions): Promise { - console.warn( - 'The `connectToWCD` method is deprecated. Please use `connectToWeaviateCloud` instead. This method will be removed in a future release.' - ); - return helpers.connectToWeaviateCloud(clusterURL, client, options); -} - -/** - * Connect to your own Weaviate Cloud Service (WCS) instance. - * - * @deprecated Use `connectToWeaviateCloud` instead. - * - * @param {string} clusterURL The URL of your WCD instance. E.g., `https://example.weaviate.network`. - * @param {ConnectToWCSOptions} [options] Additional options for the connection. - * @returns {Promise} A Promise that resolves to a client connected to your WCS instance. - */ -export function connectToWCS(clusterURL: string, options?: ConnectToWCSOptions): Promise { - console.warn( - 'The `connectToWCS` method is deprecated. Please use `connectToWeaviateCloud` instead. This method will be removed in a future release.' - ); - return helpers.connectToWeaviateCloud(clusterURL, client, options); -} - -/** - * Connect to your own Weaviate Cloud (WCD) instance. - * - * @param {string} clusterURL The URL of your WCD instance. E.g., `https://example.weaviate.network`. - * @param {ConnectToWeaviateCloudOptions} [options] Additional options for the connection. - * @returns {Promise} A Promise that resolves to a client connected to your WCD instance. - */ -export function connectToWeaviateCloud( - clusterURL: string, - options?: ConnectToWeaviateCloudOptions -): Promise { - return helpers.connectToWeaviateCloud(clusterURL, client, options); -} +export type Context = { + transportsMaker: TransportsMaker; + toBase64FromMedia: ToBase64FromMedia; + /** + * Creates the HTTP(S) keep-alive agent for the REST/GraphQL connection. Supplied by the Node shim + * (`@weaviate/node`); omitted by the browser shim (`@weaviate/web`) so no Node `http`/`https` + * builtins are pulled into the browser bundle. When undefined, `fetch` runs without a custom agent. + */ + agentMaker?: (secure: boolean) => Agent | undefined; +}; -async function client(params: ClientParams): Promise { +const client = async ( + context: Context, + params: ClientParams, + isGrpcWeb: boolean = false +): Promise> => { let { host: httpHost } = params.connectionParams.http; let { host: grpcHost } = params.connectionParams.grpc; const { port: httpPort, secure: httpSecure, path: httpPath } = params.connectionParams.http; - const { port: grpcPort, secure: grpcSecure } = params.connectionParams.grpc; + const { port: grpcPort, secure: grpcSecure, path: grpcPath } = params.connectionParams.grpc; httpHost = cleanHost(httpHost, 'rest'); grpcHost = cleanHost(grpcHost, 'grpc'); @@ -215,28 +156,33 @@ async function client(params: ClientParams): Promise { if (!params.headers) params.headers = {}; const scheme = httpSecure ? 'https' : 'http'; - const agent = httpSecure ? new HttpsAgent({ keepAlive: true }) : new HttpAgent({ keepAlive: true }); - - const { connection, dbVersionProvider, dbVersionSupport } = await ConnectionGRPC.use({ - host: `${scheme}://${httpHost}:${httpPort}${httpPath || ''}`, - scheme: scheme, - headers: params.headers, - grpcAddress: `${grpcHost}:${grpcPort}`, - grpcSecure: grpcSecure, - grpcProxyUrl: params.proxies?.grpc, - apiKey: isApiKey(params.auth) ? mapApiKey(params.auth) : undefined, - authClientSecret: isApiKey(params.auth) ? undefined : params.auth, - agent, - timeout: params.timeout, - skipInitChecks: params.skipInitChecks, - }); + const agent = context.agentMaker?.(httpSecure); + + const { connection, dbVersionProvider, dbVersionSupport } = await ConnectionGRPC.use( + context.transportsMaker, + { + host: `${scheme}://${httpHost}:${httpPort}${httpPath || ''}`, + scheme: scheme, + headers: params.headers, + grpcAddress: `${isGrpcWeb ? (grpcSecure ? 'https://' : 'http://') : ''}${grpcHost}:${grpcPort}${ + grpcPath || '' + }`, + grpcSecure: grpcSecure, + grpcProxyUrl: params.proxies?.grpc, + apiKey: isApiKey(params.auth) ? mapApiKey(params.auth) : undefined, + authClientSecret: isApiKey(params.auth) ? undefined : params.auth, + agent, + timeout: params.timeout, + skipInitChecks: params.skipInitChecks, + } + ); - const ifc: WeaviateClient = { + const ifc: IWeaviateClient = { alias: alias(connection), backup: backup(connection), - batch: batch(connection, dbVersionSupport), + // batch: batch(connection, dbVersionSupport), cluster: cluster(connection), - collections: collections(connection, dbVersionSupport), + collections: collections(connection, dbVersionSupport, context.toBase64FromMedia), groups: groups(connection), roles: roles(connection), tokenize: tokenize(connection, dbVersionSupport), @@ -252,30 +198,14 @@ async function client(params: ClientParams): Promise { if (connection.oidcAuth) ifc.oidcAuth = connection.oidcAuth; return ifc; -} - -export default { - connectToCustom, - connectToLocal, - connectToWCD, - connectToWCS, - connectToWeaviateCloud, - client, - ApiKey, - AuthUserPasswordCredentials, - AuthAccessTokenCredentials, - AuthClientCredentials, - configure, - configGuards, - filter: filter(), - reconfigure, - permissions, - query: queryFactory, }; -export * from './collections/index.js'; + +export default client; +export * from './collections.js'; export * from './connection/index.js'; +export * from './errors.js'; export * from './roles/types.js'; -export * from './utils/base64.js'; +// export * from './utils/base64.js'; export * from './utils/uuid.js'; export { AccessTokenCredentialsInput, @@ -292,5 +222,8 @@ export { ProxiesParams, TimeoutParams, UserPasswordCredentialsInput, + filter, + helpers, + permissions, weaviateV2, }; diff --git a/src/collections/iterator/index.ts b/packages/core/src/iterator/index.ts similarity index 94% rename from src/collections/iterator/index.ts rename to packages/core/src/iterator/index.ts index edb35762..4282f6eb 100644 --- a/src/collections/iterator/index.ts +++ b/packages/core/src/iterator/index.ts @@ -1,4 +1,4 @@ -import { WeaviateDeserializationError } from '../../errors.js'; +import { WeaviateDeserializationError } from '../errors.js'; import { WeaviateObject } from '../types/index.js'; const ITERATOR_CACHE_SIZE = 100; diff --git a/src/openapi/schema.ts b/packages/core/src/openapi/schema.ts similarity index 100% rename from src/openapi/schema.ts rename to packages/core/src/openapi/schema.ts diff --git a/src/openapi/types.ts b/packages/core/src/openapi/types.ts similarity index 100% rename from src/openapi/types.ts rename to packages/core/src/openapi/types.ts diff --git a/src/proto/google/health/v1/health.ts b/packages/core/src/proto/google/health/v1/health.ts similarity index 100% rename from src/proto/google/health/v1/health.ts rename to packages/core/src/proto/google/health/v1/health.ts diff --git a/src/proto/google/protobuf/struct.ts b/packages/core/src/proto/google/protobuf/struct.ts similarity index 100% rename from src/proto/google/protobuf/struct.ts rename to packages/core/src/proto/google/protobuf/struct.ts diff --git a/packages/core/src/proto/index.ts b/packages/core/src/proto/index.ts new file mode 100644 index 00000000..9141a08d --- /dev/null +++ b/packages/core/src/proto/index.ts @@ -0,0 +1,2 @@ +export { HealthCheckResponse_ServingStatus, HealthDefinition } from './google/health/v1/health.js'; +export { WeaviateDefinition } from './v1/weaviate.js'; \ No newline at end of file diff --git a/src/proto/v1/aggregate.ts b/packages/core/src/proto/v1/aggregate.ts similarity index 100% rename from src/proto/v1/aggregate.ts rename to packages/core/src/proto/v1/aggregate.ts diff --git a/src/proto/v1/base.ts b/packages/core/src/proto/v1/base.ts similarity index 100% rename from src/proto/v1/base.ts rename to packages/core/src/proto/v1/base.ts diff --git a/src/proto/v1/base_search.ts b/packages/core/src/proto/v1/base_search.ts similarity index 100% rename from src/proto/v1/base_search.ts rename to packages/core/src/proto/v1/base_search.ts diff --git a/src/proto/v1/batch.ts b/packages/core/src/proto/v1/batch.ts similarity index 100% rename from src/proto/v1/batch.ts rename to packages/core/src/proto/v1/batch.ts diff --git a/src/proto/v1/batch_delete.ts b/packages/core/src/proto/v1/batch_delete.ts similarity index 100% rename from src/proto/v1/batch_delete.ts rename to packages/core/src/proto/v1/batch_delete.ts diff --git a/src/proto/v1/file_replication.ts b/packages/core/src/proto/v1/file_replication.ts similarity index 100% rename from src/proto/v1/file_replication.ts rename to packages/core/src/proto/v1/file_replication.ts diff --git a/src/proto/v1/generative.ts b/packages/core/src/proto/v1/generative.ts similarity index 100% rename from src/proto/v1/generative.ts rename to packages/core/src/proto/v1/generative.ts diff --git a/src/proto/v1/health_weaviate.ts b/packages/core/src/proto/v1/health_weaviate.ts similarity index 100% rename from src/proto/v1/health_weaviate.ts rename to packages/core/src/proto/v1/health_weaviate.ts diff --git a/src/proto/v1/properties.ts b/packages/core/src/proto/v1/properties.ts similarity index 100% rename from src/proto/v1/properties.ts rename to packages/core/src/proto/v1/properties.ts diff --git a/src/proto/v1/search_get.ts b/packages/core/src/proto/v1/search_get.ts similarity index 100% rename from src/proto/v1/search_get.ts rename to packages/core/src/proto/v1/search_get.ts diff --git a/src/proto/v1/tenants.ts b/packages/core/src/proto/v1/tenants.ts similarity index 100% rename from src/proto/v1/tenants.ts rename to packages/core/src/proto/v1/tenants.ts diff --git a/src/proto/v1/weaviate.ts b/packages/core/src/proto/v1/weaviate.ts similarity index 100% rename from src/proto/v1/weaviate.ts rename to packages/core/src/proto/v1/weaviate.ts diff --git a/src/collections/query/check.ts b/packages/core/src/query/check.ts similarity index 91% rename from src/collections/query/check.ts rename to packages/core/src/query/check.ts index 460cf384..2ba284c7 100644 --- a/src/collections/query/check.ts +++ b/packages/core/src/query/check.ts @@ -1,9 +1,8 @@ -import Connection from '../../connection/grpc.js'; -import { WeaviateUnsupportedFeatureError } from '../../errors.js'; -import { ConsistencyLevel } from '../../index.js'; -import { DbVersionSupport } from '../../utils/dbVersion.js'; -import { CallOptions, GenerativeConfigRuntime } from '../index.js'; +import Connection from '../connection/grpc.js'; +import { WeaviateUnsupportedFeatureError } from '../errors.js'; +import { CallOptions, ConsistencyLevel, GenerativeConfigRuntime } from '../index.js'; import { Serialize } from '../serialize/index.js'; +import { DbVersionSupport } from '../utils/dbVersion.js'; import { BaseHybridOptions, BaseNearOptions, diff --git a/src/collections/query/factories.ts b/packages/core/src/query/factories.ts similarity index 100% rename from src/collections/query/factories.ts rename to packages/core/src/query/factories.ts diff --git a/src/collections/query/index.ts b/packages/core/src/query/index.ts similarity index 91% rename from src/collections/query/index.ts rename to packages/core/src/query/index.ts index f1b23531..2600b0ed 100644 --- a/src/collections/query/index.ts +++ b/packages/core/src/query/index.ts @@ -1,12 +1,10 @@ -import Connection from '../../connection/grpc.js'; +import Connection from '../connection/grpc.js'; -import { toBase64FromMedia } from '../../utils/base64.js'; +import { ConsistencyLevel } from '../replication.js'; +import { DbVersionSupport } from '../utils/dbVersion.js'; -import { ConsistencyLevel } from '../../data/index.js'; -import { DbVersionSupport } from '../../utils/dbVersion.js'; - -import { SearchReply } from '../../proto/v1/search_get.js'; import { Deserialize } from '../deserialize/index.js'; +import { SearchReply } from '../proto/v1/search_get.js'; import { Serialize } from '../serialize/index.js'; import { GroupByOptions, @@ -16,8 +14,9 @@ import { WeaviateReturn, } from '../types/index.js'; -import { WeaviateInvalidInputError } from '../../errors.js'; +import { WeaviateInvalidInputError } from '../errors.js'; import { IncludeVector } from '../types/internal.js'; +import { ToBase64FromMedia } from '../utils/base64.js'; import { Check } from './check.js'; import { BaseBm25Options, @@ -41,22 +40,26 @@ import { SearchOptions, } from './types.js'; -class QueryManager implements Query { +class QueryManager implements Query { private check: Check; + private toBase64FromMedia: ToBase64FromMedia; - private constructor(check: Check) { + private constructor(check: Check, toBase64FromMedia: ToBase64FromMedia) { this.check = check; + this.toBase64FromMedia = toBase64FromMedia; } - public static use( + public static use( connection: Connection, name: string, dbVersionSupport: DbVersionSupport, + toBase64FromMedia: ToBase64FromMedia, consistencyLevel?: ConsistencyLevel, tenant?: string - ): QueryManager { - return new QueryManager( - new Check(connection, name, dbVersionSupport, consistencyLevel, tenant) + ): QueryManager { + return new QueryManager( + new Check(connection, name, dbVersionSupport, consistencyLevel, tenant), + toBase64FromMedia ); } @@ -150,24 +153,24 @@ class QueryManager implements Query { } public nearImage, RV extends ReturnVectors>( - image: string | Buffer, + image: M, opts?: BaseNearOptions, callOpts?: CallOptions ): Promise>; public nearImage, RV extends ReturnVectors>( - image: string | Buffer, + image: M, opts: GroupByNearOptions, callOpts?: CallOptions ): Promise>; public nearImage, RV extends ReturnVectors>( - image: string | Buffer, + image: M, opts?: NearOptions, callOpts?: CallOptions ): QueryReturn { return this.check .nearSearch(callOpts) .then(({ search }) => { - return toBase64FromMedia(image).then((image) => ({ + return this.toBase64FromMedia(image).then((image) => ({ search, args: Serialize.search.nearImage( { @@ -182,19 +185,19 @@ class QueryManager implements Query { } public nearMedia, RV extends ReturnVectors>( - media: string | Buffer, + media: M, type: NearMediaType, opts?: BaseNearOptions, callOpts?: CallOptions ): Promise>; public nearMedia, RV extends ReturnVectors>( - media: string | Buffer, + media: M, type: NearMediaType, opts: GroupByNearOptions, callOpts?: CallOptions ): Promise>; public nearMedia, RV extends ReturnVectors>( - media: string | Buffer, + media: M, type: NearMediaType, opts?: NearOptions, callOpts?: CallOptions @@ -225,7 +228,7 @@ class QueryManager implements Query { default: throw new WeaviateInvalidInputError(`Invalid media type: ${type}`); } - return toBase64FromMedia(media).then(send); + return this.toBase64FromMedia(media).then(send); }) .then((reply) => this.parseGroupByReply(opts, reply)); } diff --git a/src/collections/query/types.ts b/packages/core/src/query/types.ts similarity index 96% rename from src/collections/query/types.ts rename to packages/core/src/query/types.ts index 62e5b95c..52a2768c 100644 --- a/src/collections/query/types.ts +++ b/packages/core/src/query/types.ts @@ -344,7 +344,7 @@ interface Hybrid { ): QueryReturn; } -interface NearImage { +interface NearImage { /** * Search for objects by image in this collection using an image-capable vectorization module and vector-based similarity search. * You must have an image-capable vectorization module installed in order to use this method, @@ -354,13 +354,13 @@ interface NearImage { * * This overload is for performing a search without the `groupBy` param. * - * @param {string | Buffer} image - The image to search on. This can be a base64 string, a file path string, or a buffer. + * @param {M} image - The image to search on. This can be a base64 string, a file path string, or a buffer. * @param {BaseNearOptions} [opts] - The available options for the search excluding the `groupBy` param. * @param {CallOptions} [callOpts] - The available options for the API call. * @returns {Promise>} - The result of the search within the fetched collection. */ nearImage, RV extends ReturnVectors>( - image: string | Buffer, + image: M, opts?: BaseNearOptions, callOpts?: CallOptions ): Promise>; @@ -373,13 +373,13 @@ interface NearImage { * * This overload is for performing a search with the `groupBy` param. * - * @param {string | Buffer} image - The image to search on. This can be a base64 string, a file path string, or a buffer. + * @param {M} image - The image to search on. This can be a base64 string, a file path string, or a buffer. * @param {GroupByNearOptions} opts - The available options for the search including the `groupBy` param. * @param {CallOptions} [callOpts] - The available options for the API call. * @returns {Promise>} - The group by result of the search within the fetched collection. */ nearImage, RV extends ReturnVectors>( - image: string | Buffer, + image: M, opts: GroupByNearOptions, callOpts?: CallOptions ): Promise>; @@ -392,19 +392,19 @@ interface NearImage { * * This overload is for performing a search with a programmatically defined `opts` param. * - * @param {string | Buffer} image - The image to search on. This can be a base64 string, a file path string, or a buffer. + * @param {M} image - The image to search on. This can be a base64 string, a file path string, or a buffer. * @param {NearOptions} [opts] - The available options for the search. * @param {CallOptions} [callOpts] - The available options for the API call. * @returns {QueryReturn} - The result of the search within the fetched collection. */ nearImage, RV extends ReturnVectors>( - image: string | Buffer, + image: M, opts?: NearOptions, callOpts?: CallOptions ): QueryReturn; } -interface NearMedia { +interface NearMedia { /** * Search for objects by image in this collection using an image-capable vectorization module and vector-based similarity search. * You must have a multi-media-capable vectorization module installed in order to use this method, e.g. `multi2vec-bind` or `multi2vec-palm`. @@ -413,14 +413,14 @@ interface NearMedia { * * This overload is for performing a search without the `groupBy` param. * - * @param {string | Buffer} media - The media to search on. This can be a base64 string, a file path string, or a buffer. + * @param {M} media - The media to search on. This can be a base64 string, a file path string, or a buffer. * @param {NearMediaType} type - The type of media to search for, e.g. 'audio'. * @param {BaseNearOptions} [opts] - The available options for the search excluding the `groupBy` param. * @param {CallOptions} [callOpts] - The available options for the API call. * @returns {Promise>} - The result of the search within the fetched collection. */ nearMedia, RV extends ReturnVectors>( - media: string | Buffer, + media: M, type: NearMediaType, opts?: BaseNearOptions, callOpts?: CallOptions @@ -433,14 +433,14 @@ interface NearMedia { * * This overload is for performing a search with the `groupBy` param. * - * @param {string | Buffer} media - The media to search on. This can be a base64 string, a file path string, or a buffer. + * @param {M} media - The media to search on. This can be a base64 string, a file path string, or a buffer. * @param {NearMediaType} type - The type of media to search for, e.g. 'audio'. * @param {GroupByNearOptions} opts - The available options for the search including the `groupBy` param. * @param {CallOptions} [callOpts] - The available options for the API call. * @returns {Promise>} - The group by result of the search within the fetched collection. */ nearMedia, RV extends ReturnVectors>( - media: string | Buffer, + media: M, type: NearMediaType, opts: GroupByNearOptions, callOpts?: CallOptions @@ -453,14 +453,14 @@ interface NearMedia { * * This overload is for performing a search with a programmatically defined `opts` param. * - * @param {string | Buffer} media - The media to search on. This can be a base64 string, a file path string, or a buffer. + * @param {M} media - The media to search on. This can be a base64 string, a file path string, or a buffer. * @param {NearMediaType} type - The type of media to search for, e.g. 'audio'. * @param {NearOptions} [opts] - The available options for the search. * @param {CallOptions} [callOpts] - The available options for the API call. * @returns {QueryReturn} - The result of the search within the fetched collection. */ nearMedia, RV extends ReturnVectors>( - media: string | Buffer, + media: M, type: NearMediaType, opts?: NearOptions, callOpts?: CallOptions @@ -636,11 +636,11 @@ interface NearVector { } /** All the available methods on the `.query` namespace. */ -export interface Query +export interface Query extends Bm25, Hybrid, - NearImage, - NearMedia, + NearImage, + NearMedia, NearObject, NearText, NearVector { diff --git a/src/collections/query/utils.ts b/packages/core/src/query/utils.ts similarity index 100% rename from src/collections/query/utils.ts rename to packages/core/src/query/utils.ts diff --git a/src/collections/references/classes.ts b/packages/core/src/references/classes.ts similarity index 100% rename from src/collections/references/classes.ts rename to packages/core/src/references/classes.ts diff --git a/src/collections/references/index.ts b/packages/core/src/references/index.ts similarity index 100% rename from src/collections/references/index.ts rename to packages/core/src/references/index.ts diff --git a/src/collections/references/types.ts b/packages/core/src/references/types.ts similarity index 100% rename from src/collections/references/types.ts rename to packages/core/src/references/types.ts diff --git a/src/collections/references/utils.ts b/packages/core/src/references/utils.ts similarity index 100% rename from src/collections/references/utils.ts rename to packages/core/src/references/utils.ts diff --git a/src/data/replication.ts b/packages/core/src/replication.ts similarity index 100% rename from src/data/replication.ts rename to packages/core/src/replication.ts diff --git a/src/roles/index.ts b/packages/core/src/roles/index.ts similarity index 99% rename from src/roles/index.ts rename to packages/core/src/roles/index.ts index a0d0c88e..a92819d1 100644 --- a/src/roles/index.ts +++ b/packages/core/src/roles/index.ts @@ -1,4 +1,4 @@ -import { ConnectionREST } from '../index.js'; +import { ConnectionREST } from '../connection/index.js'; import { WeaviateAssignedUser, WeaviateGroupAssignment, diff --git a/src/roles/types.ts b/packages/core/src/roles/types.ts similarity index 100% rename from src/roles/types.ts rename to packages/core/src/roles/types.ts diff --git a/src/roles/util.ts b/packages/core/src/roles/util.ts similarity index 100% rename from src/roles/util.ts rename to packages/core/src/roles/util.ts diff --git a/src/collections/serialize/index.ts b/packages/core/src/serialize/index.ts similarity index 98% rename from src/collections/serialize/index.ts rename to packages/core/src/serialize/index.ts index 04413230..ed326000 100644 --- a/src/collections/serialize/index.ts +++ b/packages/core/src/serialize/index.ts @@ -1,5 +1,5 @@ import { v4 as uuidv4 } from 'uuid'; -import { WhereFilter } from '../../openapi/types.js'; +import { WhereFilter } from '../openapi/types.js'; import { BM25, CombinationMethod, @@ -20,20 +20,20 @@ import { Targets, VectorForTarget, WeightsForTarget, -} from '../../proto/v1/base_search.js'; +} from '../proto/v1/base_search.js'; import { BatchObject as BatchObjectGRPC, BatchObject_MultiTargetRefProps, BatchObject_Properties, BatchObject_SingleTargetRefProps, BatchReference as BatchReferenceGRPC, -} from '../../proto/v1/batch.js'; +} from '../proto/v1/batch.js'; import { GenerativeProvider, GenerativeSearch, GenerativeSearch_Grouped, GenerativeSearch_Single, -} from '../../proto/v1/generative.js'; +} from '../proto/v1/generative.js'; import { GroupBy, MetadataRequest, @@ -41,13 +41,33 @@ import { PropertiesRequest, Rerank, SortBy as SortByGrpc, -} from '../../proto/v1/search_get.js'; +} from '../proto/v1/search_get.js'; +import { + AggregateBaseOptions, + AggregateHybridOptions, + AggregateNearOptions, + GenerativeConfigRuntime, + GroupByAggregate, + GroupedTask, + MultiTargetVectorJoin, + PrimitiveKeys, + PropertiesMetrics, + SinglePrompt, +} from '../collections.js'; import { WeaviateInvalidInputError, WeaviateSerializationError, WeaviateUnsupportedFeatureError, -} from '../../errors.js'; +} from '../errors.js'; +import { FilterId } from '../filters/classes.js'; +import { FilterValue, Filters } from '../filters/index.js'; +import { + FilterValueType, + GeoRangeFilter, + PrimitiveFilterValueType, + PrimitiveListFilterValueType, +} from '../filters/types.js'; import { AggregateFetchArgs, AggregateHybridArgs, @@ -55,7 +75,7 @@ import { AggregateNearObjectArgs, AggregateNearTextArgs, AggregateNearVectorArgs, -} from '../../grpc/aggregator.js'; +} from '../grpc/aggregator.js'; import { BaseSearchArgs, SearchBm25Args, @@ -70,8 +90,7 @@ import { SearchNearThermalArgs, SearchNearVectorArgs, SearchNearVideoArgs, -} from '../../grpc/searcher.js'; -import { toBase64FromMedia } from '../../index.js'; +} from '../grpc/searcher.js'; import { AggregateRequest_Aggregation, AggregateRequest_Aggregation_Boolean, @@ -80,7 +99,7 @@ import { AggregateRequest_Aggregation_Number, AggregateRequest_Aggregation_Text, AggregateRequest_GroupBy, -} from '../../proto/v1/aggregate.js'; +} from '../proto/v1/aggregate.js'; import { BooleanArrayProperties, FilterTarget, @@ -96,29 +115,7 @@ import { Vectors, Vectors as VectorsGrpc, Vectors_VectorType, -} from '../../proto/v1/base.js'; -import { yieldToEventLoop } from '../../utils/yield.js'; -import { FilterId } from '../filters/classes.js'; -import { FilterValue, Filters } from '../filters/index.js'; -import { - FilterValueType, - GeoRangeFilter, - PrimitiveFilterValueType, - PrimitiveListFilterValueType, -} from '../filters/types.js'; -import { - AggregateBaseOptions, - AggregateHybridOptions, - AggregateNearOptions, - BatchReference, - GenerativeConfigRuntime, - GroupByAggregate, - GroupedTask, - MultiTargetVectorJoin, - PrimitiveKeys, - PropertiesMetrics, - SinglePrompt, -} from '../index.js'; +} from '../proto/v1/base.js'; import { BaseHybridOptions, BaseNearOptions, @@ -153,6 +150,7 @@ import { TenantBC, TenantCreate, TenantUpdate } from '../tenants/types.js'; import { BatchObject, BatchObjects, + BatchReference, DataObject, GenerateOptions, GeoCoordinate, @@ -170,6 +168,8 @@ import { SortBy, WeaviateField, } from '../types/index.js'; +import { ToBase64FromMedia } from '../utils/base64.js'; +import { yieldToEventLoop } from '../utils/yield.js'; class FilterGuards { static isFilters = ( @@ -515,7 +515,7 @@ class Search { | string[] | undefined; const refProperties = references; - const objectProperties = properties?.filter((property) => typeof property === 'object') as + const objectProperties = properties?.filter((property) => typeof property === 'object') as unknown as | QueryNested[] | undefined; @@ -852,6 +852,7 @@ export class Serialize { private static withImages = async >( config: T, + toBase64FromMedia: ToBase64FromMedia, imgs?: (string | Buffer)[], imgProps?: string[] ): Promise => { @@ -866,8 +867,10 @@ export class Serialize { imageProperties: TextArray.fromPartial({ values: imgProps }), }; }; + private static generativeQuery = async ( generative: GenerativeConfigRuntime, + toBase64FromMedia: ToBase64FromMedia, opts?: { metadata?: boolean; images?: (string | Buffer)[]; imageProperties?: string[] } ): Promise => { const provider = GenerativeProvider.fromPartial({ returnMetadata: opts?.metadata }); @@ -875,6 +878,7 @@ export class Serialize { case 'generative-anthropic': provider.anthropic = await Serialize.withImages( generative.config || {}, + toBase64FromMedia, opts?.images, opts?.imageProperties ); @@ -885,6 +889,7 @@ export class Serialize { case 'generative-aws': provider.aws = await Serialize.withImages( generative.config || {}, + toBase64FromMedia, opts?.images, opts?.imageProperties ); @@ -892,6 +897,7 @@ export class Serialize { case 'generative-cohere': provider.cohere = await Serialize.withImages( generative.config || {}, + toBase64FromMedia, opts?.images, opts?.imageProperties ); @@ -908,6 +914,7 @@ export class Serialize { case 'generative-google': provider.google = await Serialize.withImages( generative.config || {}, + toBase64FromMedia, opts?.images, opts?.imageProperties ); @@ -921,6 +928,7 @@ export class Serialize { case 'generative-ollama': provider.ollama = await Serialize.withImages( generative.config || {}, + toBase64FromMedia, opts?.images, opts?.imageProperties ); @@ -928,6 +936,7 @@ export class Serialize { case 'generative-openai': provider.openai = await Serialize.withImages( generative.config || {}, + toBase64FromMedia, opts?.images, opts?.imageProperties ); @@ -938,6 +947,7 @@ export class Serialize { public static generative = async ( args: { supportsSingleGrouped: boolean }, + toBase64FromMedia: ToBase64FromMedia, opts?: GenerateOptions ): Promise => { const singlePrompt = Serialize.isSinglePrompt(opts?.singlePrompt) @@ -963,14 +973,16 @@ export class Serialize { ? GenerativeSearch_Single.fromPartial({ prompt: singlePrompt, debug: singlePromptDebug, - queries: opts.config ? [await Serialize.generativeQuery(opts.config, singleOpts)] : undefined, + queries: opts.config + ? [await Serialize.generativeQuery(opts.config, toBase64FromMedia, singleOpts)] + : undefined, }) : undefined, grouped: opts?.groupedTask ? GenerativeSearch_Grouped.fromPartial({ task: groupedTask, queries: opts.config - ? [await Serialize.generativeQuery(opts.config, groupedOpts)] + ? [await Serialize.generativeQuery(opts.config, toBase64FromMedia, groupedOpts)] : undefined, properties: groupedProperties ? TextArray.fromPartial({ values: groupedProperties as string[] }) @@ -2047,7 +2059,7 @@ export class Serialize { }; public static tenants(tenants: T[], mapper: (tenant: T) => M): M[][] { - const mapped = []; + const mapped: M[][] = []; const batches = Math.ceil(tenants.length / 100); for (let i = 0; i < batches; i++) { const batch = tenants.slice(i * 100, (i + 1) * 100); diff --git a/src/collections/sort/classes.ts b/packages/core/src/sort/classes.ts similarity index 100% rename from src/collections/sort/classes.ts rename to packages/core/src/sort/classes.ts diff --git a/src/collections/sort/index.ts b/packages/core/src/sort/index.ts similarity index 100% rename from src/collections/sort/index.ts rename to packages/core/src/sort/index.ts diff --git a/src/collections/sort/types.ts b/packages/core/src/sort/types.ts similarity index 100% rename from src/collections/sort/types.ts rename to packages/core/src/sort/types.ts diff --git a/src/collections/tenants/index.ts b/packages/core/src/tenants/index.ts similarity index 96% rename from src/collections/tenants/index.ts rename to packages/core/src/tenants/index.ts index 7f455b28..a4ed3273 100644 --- a/src/collections/tenants/index.ts +++ b/packages/core/src/tenants/index.ts @@ -1,10 +1,10 @@ -import { ConnectionGRPC } from '../../connection/index.js'; -import { WeaviateUnexpectedStatusCodeError } from '../../errors.js'; -import { Tenant as TenantREST } from '../../openapi/types.js'; -import { TenantsCreator, TenantsDeleter, TenantsUpdater } from '../../schema/index.js'; -import { DbVersionSupport } from '../../utils/dbVersion.js'; +import { ConnectionGRPC } from '../connection/index.js'; import { Deserialize } from '../deserialize/index.js'; +import { WeaviateUnexpectedStatusCodeError } from '../errors.js'; +import { Tenant as TenantREST } from '../openapi/types.js'; import { Serialize } from '../serialize/index.js'; +import { DbVersionSupport } from '../utils/dbVersion.js'; +import { TenantsCreator, TenantsDeleter, TenantsUpdater } from '../v2/schema/index.js'; import { Tenant, TenantBC, TenantBase, TenantCreate, TenantUpdate } from './types.js'; const parseValueOrValueArray = (value: V | V[]) => (Array.isArray(value) ? value : [value]); diff --git a/src/collections/tenants/types.ts b/packages/core/src/tenants/types.ts similarity index 100% rename from src/collections/tenants/types.ts rename to packages/core/src/tenants/types.ts diff --git a/src/tokenize/index.ts b/packages/core/src/tokenize/index.ts similarity index 95% rename from src/tokenize/index.ts rename to packages/core/src/tokenize/index.ts index fd14eef1..15b21c3b 100644 --- a/src/tokenize/index.ts +++ b/packages/core/src/tokenize/index.ts @@ -1,5 +1,4 @@ -import { textAnalyzerConfigToWire } from '../collections/config/utils.js'; -import { Stopwords, Tokenization } from '../collections/types/index.js'; +import { textAnalyzerConfigToWire } from '../config/utils.js'; import ConnectionGRPC from '../connection/grpc.js'; import { WeaviateInvalidInputError } from '../errors.js'; import { @@ -7,6 +6,7 @@ import { WeaviateTokenizeRequest, WeaviateTokenizeResponse, } from '../openapi/types.js'; +import { Stopwords, Tokenization } from '../types/index.js'; import { DbVersionSupport } from '../utils/dbVersion.js'; import { TextAnalyzerConfig, TokenizeResult } from './types.js'; import { parseResult } from './util.js'; diff --git a/src/tokenize/types.ts b/packages/core/src/tokenize/types.ts similarity index 75% rename from src/tokenize/types.ts rename to packages/core/src/tokenize/types.ts index 70e3adca..d793cc47 100644 --- a/src/tokenize/types.ts +++ b/packages/core/src/tokenize/types.ts @@ -1,4 +1,4 @@ -import { StopwordsPreset } from '../collections/types/index.js'; +import { StopwordsPreset } from '../types/index.js'; export type TextAnalyzerConfig = { asciiFold?: boolean | { ignore: string[] }; diff --git a/src/tokenize/util.ts b/packages/core/src/tokenize/util.ts similarity index 100% rename from src/tokenize/util.ts rename to packages/core/src/tokenize/util.ts diff --git a/src/collections/types/batch.ts b/packages/core/src/types/batch.ts similarity index 81% rename from src/collections/types/batch.ts rename to packages/core/src/types/batch.ts index 319fda42..d7be854a 100644 --- a/src/collections/types/batch.ts +++ b/packages/core/src/types/batch.ts @@ -1,6 +1,6 @@ -import { BatchReference as BatchReferenceREST } from '../../openapi/types.js'; -import { BatchObject as BatchObjectGRPC } from '../../proto/v1/batch.js'; -import { NonReferenceInputs, ReferenceInputs, Vectors } from '../index.js'; +import { BatchReference as BatchReferenceREST } from '../openapi/types.js'; +import { BatchObject as BatchObjectGRPC } from '../proto/v1/batch.js'; +import { NonReferenceInputs, ReferenceInputs, Vectors } from './index.js'; export type BatchObjectsReturn = { allResponses: (string | ErrorObject)[]; diff --git a/src/collections/types/data.ts b/packages/core/src/types/data.ts similarity index 100% rename from src/collections/types/data.ts rename to packages/core/src/types/data.ts diff --git a/src/collections/types/generate.ts b/packages/core/src/types/generate.ts similarity index 99% rename from src/collections/types/generate.ts rename to packages/core/src/types/generate.ts index 06df9a07..d31606ad 100644 --- a/src/collections/types/generate.ts +++ b/packages/core/src/types/generate.ts @@ -27,8 +27,8 @@ import { GenerativeOpenAIMetadata, GenerativeXAI as GenerativeXAIGRPC, GenerativeXAIMetadata, -} from '../../proto/v1/generative.js'; -import { GenerativeXAIConfig, ModuleConfig, QueryProfile } from '../index.js'; +} from '../proto/v1/generative.js'; +import { GenerativeXAIConfig, ModuleConfig, QueryProfile } from './index.js'; import { GroupByObject, GroupByResult, WeaviateGenericObject, WeaviateNonGenericObject } from './query.js'; export type GenerativeGenericObject< diff --git a/src/collections/types/index.ts b/packages/core/src/types/index.ts similarity index 95% rename from src/collections/types/index.ts rename to packages/core/src/types/index.ts index 80894648..f79b6e78 100644 --- a/src/collections/types/index.ts +++ b/packages/core/src/types/index.ts @@ -1,6 +1,5 @@ export * from '../config/types/index.js'; export * from '../configure/types/index.js'; -export type { CollectionConfigCreate } from '../index.js'; export * from './batch.js'; export * from './data.js'; export * from './generate.js'; @@ -25,7 +24,7 @@ export * from './query.js'; import { GeoCoordinate as GeoCoordinateGRPC, PhoneNumber as PhoneNumberGRPC, -} from '../../proto/v1/properties.js'; +} from '../proto/v1/properties.js'; import { CrossReference } from '../references/index.js'; diff --git a/src/collections/types/internal.ts b/packages/core/src/types/internal.ts similarity index 99% rename from src/collections/types/internal.ts rename to packages/core/src/types/internal.ts index 0227d769..732e9c19 100644 --- a/src/collections/types/internal.ts +++ b/packages/core/src/types/internal.ts @@ -1,3 +1,5 @@ +import { ReferenceManager } from '../references/classes.js'; +import { CrossReference } from '../references/index.js'; import { NestedProperties, PhoneNumber, @@ -7,9 +9,7 @@ import { RefPropertyDefault, ReferenceToMultiTarget, WeaviateField, -} from '../index.js'; -import { ReferenceManager } from '../references/classes.js'; -import { CrossReference } from '../references/index.js'; +} from './index.js'; export type ExtractCrossReferenceType = T extends CrossReference ? U : never; diff --git a/src/collections/types/query.ts b/packages/core/src/types/query.ts similarity index 99% rename from src/collections/types/query.ts rename to packages/core/src/types/query.ts index a257cc99..37217825 100644 --- a/src/collections/types/query.ts +++ b/packages/core/src/types/query.ts @@ -1,6 +1,6 @@ -import { WeaviateField } from '../index.js'; import { PrimitiveVectorType } from '../query/types.js'; import { CrossReferenceDefault } from '../references/index.js'; +import { WeaviateField } from './index.js'; import { ExtractCrossReferenceType, NonRefKeys, diff --git a/src/users/index.ts b/packages/core/src/users/index.ts similarity index 99% rename from src/users/index.ts rename to packages/core/src/users/index.ts index 79e33a72..d702d50a 100644 --- a/src/users/index.ts +++ b/packages/core/src/users/index.ts @@ -1,5 +1,5 @@ +import { ConnectionREST } from '../connection/index.js'; import { WeaviateUnexpectedStatusCodeError } from '../errors.js'; -import { ConnectionREST } from '../index.js'; import { WeaviateUserTypeInternal as UserTypeInternal, WeaviateDBUser, diff --git a/src/users/types.ts b/packages/core/src/users/types.ts similarity index 100% rename from src/users/types.ts rename to packages/core/src/users/types.ts diff --git a/packages/core/src/utils/base64.ts b/packages/core/src/utils/base64.ts new file mode 100644 index 00000000..b9d61387 --- /dev/null +++ b/packages/core/src/utils/base64.ts @@ -0,0 +1,8 @@ +/** + * This function converts a file buffer into a base64 string so that it can be + * sent to Weaviate and stored as a media field. + * + * @param {string | Buffer} file The media to convert either as a base64 string, a file path string, an url, or as a buffer. If you passed a base64 string, the function does nothing and returns the string as is. + * @returns {string} The base64 string + */ +export type ToBase64FromMedia = (media: M) => Promise; diff --git a/src/utils/beaconPath.ts b/packages/core/src/utils/beaconPath.ts similarity index 100% rename from src/utils/beaconPath.ts rename to packages/core/src/utils/beaconPath.ts diff --git a/src/utils/dbVersion.ts b/packages/core/src/utils/dbVersion.ts similarity index 99% rename from src/utils/dbVersion.ts rename to packages/core/src/utils/dbVersion.ts index b37c328f..3381fd9c 100644 --- a/src/utils/dbVersion.ts +++ b/packages/core/src/utils/dbVersion.ts @@ -1,5 +1,5 @@ -import { ConnectionGQL } from '../index.js'; -import MetaGetter from '../misc/metaGetter.js'; +import ConnectionGQL from '../connection/gql.js'; +import MetaGetter from '../v2/misc/metaGetter.js'; export class DbVersionSupport { private dbVersionProvider: VersionProvider; diff --git a/src/utils/testData.ts b/packages/core/src/utils/testData.ts similarity index 100% rename from src/utils/testData.ts rename to packages/core/src/utils/testData.ts diff --git a/src/utils/types.ts b/packages/core/src/utils/types.ts similarity index 100% rename from src/utils/types.ts rename to packages/core/src/utils/types.ts diff --git a/src/utils/uuid.ts b/packages/core/src/utils/uuid.ts similarity index 100% rename from src/utils/uuid.ts rename to packages/core/src/utils/uuid.ts diff --git a/src/utils/yield.ts b/packages/core/src/utils/yield.ts similarity index 100% rename from src/utils/yield.ts rename to packages/core/src/utils/yield.ts diff --git a/src/backup/backupCreateStatusGetter.ts b/packages/core/src/v2/backup/backupCreateStatusGetter.ts similarity index 80% rename from src/backup/backupCreateStatusGetter.ts rename to packages/core/src/v2/backup/backupCreateStatusGetter.ts index ea131685..a854daf2 100644 --- a/src/backup/backupCreateStatusGetter.ts +++ b/packages/core/src/v2/backup/backupCreateStatusGetter.ts @@ -1,7 +1,7 @@ -import Connection from '../connection/index.js'; -import { WeaviateInvalidInputError } from '../errors.js'; -import { BackupCreateStatusResponse } from '../openapi/types.js'; -import { CommandBase } from '../validation/commandBase.js'; +import Connection from '../../connection/index.js'; +import { WeaviateInvalidInputError } from '../../errors.js'; +import { BackupCreateStatusResponse } from '../../openapi/types.js'; +import { CommandBase } from '../../validation/commandBase.js'; import { Backend } from './index.js'; import { validateBackend, validateBackupId } from './validation.js'; diff --git a/src/backup/backupCreator.ts b/packages/core/src/v2/backup/backupCreator.ts similarity index 95% rename from src/backup/backupCreator.ts rename to packages/core/src/v2/backup/backupCreator.ts index 5690f73e..66a98e61 100644 --- a/src/backup/backupCreator.ts +++ b/packages/core/src/v2/backup/backupCreator.ts @@ -1,12 +1,12 @@ -import Connection from '../connection/index.js'; -import { WeaviateInvalidInputError } from '../errors.js'; +import Connection from '../../connection/index.js'; +import { WeaviateInvalidInputError } from '../../errors.js'; import { BackupConfig, BackupCreateRequest, BackupCreateResponse, BackupCreateStatusResponse, -} from '../openapi/types.js'; -import { CommandBase } from '../validation/commandBase.js'; +} from '../../openapi/types.js'; +import { CommandBase } from '../../validation/commandBase.js'; import BackupCreateStatusGetter from './backupCreateStatusGetter.js'; import { Backend } from './index.js'; import { diff --git a/src/backup/backupRestoreStatusGetter.ts b/packages/core/src/v2/backup/backupRestoreStatusGetter.ts similarity index 79% rename from src/backup/backupRestoreStatusGetter.ts rename to packages/core/src/v2/backup/backupRestoreStatusGetter.ts index 3599287f..a2a49831 100644 --- a/src/backup/backupRestoreStatusGetter.ts +++ b/packages/core/src/v2/backup/backupRestoreStatusGetter.ts @@ -1,7 +1,7 @@ -import Connection from '../connection/index.js'; -import { WeaviateInvalidInputError } from '../errors.js'; -import { BackupRestoreStatusResponse } from '../openapi/types.js'; -import { CommandBase } from '../validation/commandBase.js'; +import Connection from '../../connection/index.js'; +import { WeaviateInvalidInputError } from '../../errors.js'; +import { BackupRestoreStatusResponse } from '../../openapi/types.js'; +import { CommandBase } from '../../validation/commandBase.js'; import { Backend } from './index.js'; import { validateBackend, validateBackupId } from './validation.js'; diff --git a/src/backup/backupRestorer.ts b/packages/core/src/v2/backup/backupRestorer.ts similarity index 95% rename from src/backup/backupRestorer.ts rename to packages/core/src/v2/backup/backupRestorer.ts index b6528c68..ec4f2291 100644 --- a/src/backup/backupRestorer.ts +++ b/packages/core/src/v2/backup/backupRestorer.ts @@ -1,12 +1,12 @@ -import Connection from '../connection/index.js'; -import { WeaviateInvalidInputError } from '../errors.js'; +import Connection from '../../connection/index.js'; +import { WeaviateInvalidInputError } from '../../errors.js'; import { BackupRestoreRequest, BackupRestoreResponse, BackupRestoreStatusResponse, RestoreConfig, -} from '../openapi/types.js'; -import { CommandBase } from '../validation/commandBase.js'; +} from '../../openapi/types.js'; +import { CommandBase } from '../../validation/commandBase.js'; import BackupRestoreStatusGetter from './backupRestoreStatusGetter.js'; import { Backend } from './index.js'; import { diff --git a/src/backup/index.ts b/packages/core/src/v2/backup/index.ts similarity index 96% rename from src/backup/index.ts rename to packages/core/src/v2/backup/index.ts index d66736fa..bc18dfcb 100644 --- a/src/backup/index.ts +++ b/packages/core/src/v2/backup/index.ts @@ -1,4 +1,4 @@ -import Connection from '../connection/index.js'; +import Connection from '../../connection/index.js'; import BackupCreateStatusGetter from './backupCreateStatusGetter.js'; import BackupCreator from './backupCreator.js'; import BackupRestoreStatusGetter from './backupRestoreStatusGetter.js'; diff --git a/test/data/journey.test.ts b/packages/core/src/v2/backup/journey.test.ts similarity index 99% rename from test/data/journey.test.ts rename to packages/core/src/v2/backup/journey.test.ts index 8bb6bced..5088c156 100644 --- a/test/data/journey.test.ts +++ b/packages/core/src/v2/backup/journey.test.ts @@ -7,8 +7,8 @@ import { WeaviateError, WeaviateObject, WeaviateObjectsList, -} from '../../src/openapi/types.js'; -import weaviate, { WeaviateClient } from '../../src/v2/index.js'; +} from '../../openapi/types.js'; +import weaviate, { WeaviateClient } from '../../v2/index.js'; const thingClassName = 'DataJourneyTestThing'; const refSourceClassName = 'DataJourneyTestRefSource'; diff --git a/src/backup/validation.ts b/packages/core/src/v2/backup/validation.ts similarity index 95% rename from src/backup/validation.ts rename to packages/core/src/v2/backup/validation.ts index 778ecb87..4f6ab98e 100644 --- a/src/backup/validation.ts +++ b/packages/core/src/v2/backup/validation.ts @@ -1,4 +1,4 @@ -import { isValidStringProperty } from '../validation/string.js'; +import { isValidStringProperty } from '../../validation/string.js'; export function validateIncludeClassNames(classNames?: string[]) { if (Array.isArray(classNames)) { diff --git a/src/batch/index.ts b/packages/core/src/v2/batch/index.ts similarity index 87% rename from src/batch/index.ts rename to packages/core/src/v2/batch/index.ts index fa2b1486..d6f863c5 100644 --- a/src/batch/index.ts +++ b/packages/core/src/v2/batch/index.ts @@ -1,6 +1,6 @@ -import Connection from '../connection/index.js'; -import { BeaconPath } from '../utils/beaconPath.js'; -import { DbVersionSupport } from '../utils/dbVersion.js'; +import Connection from '../../connection/index.js'; +import { BeaconPath } from '../../utils/beaconPath.js'; +import { DbVersionSupport } from '../../utils/dbVersion.js'; import ObjectsBatchDeleter from './objectsBatchDeleter.js'; import ObjectsBatcher from './objectsBatcher.js'; import ReferencePayloadBuilder from './referencePayloadBuilder.js'; diff --git a/test/batch/journey.test.ts b/packages/core/src/v2/batch/journey.test.ts similarity index 99% rename from test/batch/journey.test.ts rename to packages/core/src/v2/batch/journey.test.ts index 4bb5bdb7..d5a6fa45 100644 --- a/test/batch/journey.test.ts +++ b/packages/core/src/v2/batch/journey.test.ts @@ -1,6 +1,5 @@ /* eslint-disable @typescript-eslint/no-non-null-assertion */ import { describe, expect, it } from 'vitest'; -import weaviate, { WeaviateClient } from '../../src/v2/index.js'; import { BatchDeleteResponse, BatchReference, @@ -8,7 +7,8 @@ import { Tenant, WeaviateClass, WeaviateObject, -} from '../openapi/types.js'; +} from '../../openapi/types.js'; +import weaviate, { WeaviateClient } from '../../v2/index.js'; const thingClassName = 'BatchJourneyTestThing'; const otherThingClassName = 'BatchJourneyTestOtherThing'; diff --git a/src/batch/objectsBatchDeleter.ts b/packages/core/src/v2/batch/objectsBatchDeleter.ts similarity index 91% rename from src/batch/objectsBatchDeleter.ts rename to packages/core/src/v2/batch/objectsBatchDeleter.ts index 5998af12..a73335d6 100644 --- a/src/batch/objectsBatchDeleter.ts +++ b/packages/core/src/v2/batch/objectsBatchDeleter.ts @@ -1,8 +1,8 @@ -import Connection from '../connection/index.js'; +import Connection from '../../connection/index.js'; +import { BatchDelete, BatchDeleteResponse, WhereFilter } from '../../openapi/types.js'; +import { CommandBase } from '../../validation/commandBase.js'; +import { isValidStringProperty } from '../../validation/string.js'; import { ConsistencyLevel } from '../data/replication.js'; -import { BatchDelete, BatchDeleteResponse, WhereFilter } from '../openapi/types.js'; -import { CommandBase } from '../validation/commandBase.js'; -import { isValidStringProperty } from '../validation/string.js'; import { DeleteOutput } from './index.js'; import { buildObjectsPath } from './path.js'; diff --git a/src/batch/objectsBatcher.ts b/packages/core/src/v2/batch/objectsBatcher.ts similarity index 92% rename from src/batch/objectsBatcher.ts rename to packages/core/src/v2/batch/objectsBatcher.ts index df9d02d2..06738796 100644 --- a/src/batch/objectsBatcher.ts +++ b/packages/core/src/v2/batch/objectsBatcher.ts @@ -1,7 +1,7 @@ -import Connection from '../connection/index.js'; +import Connection from '../../connection/index.js'; +import { BatchRequest, WeaviateObject, WeaviateObjectsGet } from '../../openapi/types.js'; +import { CommandBase } from '../../validation/commandBase.js'; import { ConsistencyLevel } from '../data/replication.js'; -import { BatchRequest, WeaviateObject, WeaviateObjectsGet } from '../openapi/types.js'; -import { CommandBase } from '../validation/commandBase.js'; import { buildObjectsPath } from './path.js'; export default class ObjectsBatcher extends CommandBase { diff --git a/src/batch/unit.test.ts b/packages/core/src/v2/batch/path.test.ts similarity index 100% rename from src/batch/unit.test.ts rename to packages/core/src/v2/batch/path.test.ts diff --git a/src/batch/path.ts b/packages/core/src/v2/batch/path.ts similarity index 100% rename from src/batch/path.ts rename to packages/core/src/v2/batch/path.ts diff --git a/src/batch/referencePayloadBuilder.ts b/packages/core/src/v2/batch/referencePayloadBuilder.ts similarity index 88% rename from src/batch/referencePayloadBuilder.ts rename to packages/core/src/v2/batch/referencePayloadBuilder.ts index ddf76e27..9b31193b 100644 --- a/src/batch/referencePayloadBuilder.ts +++ b/packages/core/src/v2/batch/referencePayloadBuilder.ts @@ -1,7 +1,7 @@ -import Connection from '../connection/index.js'; -import { BatchReference } from '../openapi/types.js'; -import { CommandBase } from '../validation/commandBase.js'; -import { isValidStringProperty } from '../validation/string.js'; +import Connection from '../../connection/index.js'; +import { BatchReference } from '../../openapi/types.js'; +import { CommandBase } from '../../validation/commandBase.js'; +import { isValidStringProperty } from '../../validation/string.js'; export default class ReferencesBatcher extends CommandBase { private fromClassName?: string; diff --git a/src/batch/referencesBatcher.ts b/packages/core/src/v2/batch/referencesBatcher.ts similarity index 90% rename from src/batch/referencesBatcher.ts rename to packages/core/src/v2/batch/referencesBatcher.ts index 13e89bc2..e9a5803d 100644 --- a/src/batch/referencesBatcher.ts +++ b/packages/core/src/v2/batch/referencesBatcher.ts @@ -1,8 +1,8 @@ -import Connection from '../connection/index.js'; +import Connection from '../../connection/index.js'; +import { BatchReference, BatchReferenceResponse } from '../../openapi/types.js'; +import { BeaconPath } from '../../utils/beaconPath.js'; +import { CommandBase } from '../../validation/commandBase.js'; import { ConsistencyLevel } from '../data/replication.js'; -import { BatchReference, BatchReferenceResponse } from '../openapi/types.js'; -import { BeaconPath } from '../utils/beaconPath.js'; -import { CommandBase } from '../validation/commandBase.js'; import { buildRefsPath } from './path.js'; export default class ReferencesBatcher extends CommandBase { diff --git a/src/c11y/conceptsGetter.ts b/packages/core/src/v2/c11y/conceptsGetter.ts similarity index 83% rename from src/c11y/conceptsGetter.ts rename to packages/core/src/v2/c11y/conceptsGetter.ts index e8bd7840..28181bcb 100644 --- a/src/c11y/conceptsGetter.ts +++ b/packages/core/src/v2/c11y/conceptsGetter.ts @@ -1,6 +1,6 @@ -import Connection from '../connection/index.js'; -import { C11yWordsResponse } from '../openapi/types.js'; -import { CommandBase } from '../validation/commandBase.js'; +import Connection from '../../connection/index.js'; +import { C11yWordsResponse } from '../../openapi/types.js'; +import { CommandBase } from '../../validation/commandBase.js'; export default class ConceptsGetter extends CommandBase { private concept?: string; diff --git a/src/c11y/extensionCreator.ts b/packages/core/src/v2/c11y/extensionCreator.ts similarity index 89% rename from src/c11y/extensionCreator.ts rename to packages/core/src/v2/c11y/extensionCreator.ts index eee75ea3..127e13ce 100644 --- a/src/c11y/extensionCreator.ts +++ b/packages/core/src/v2/c11y/extensionCreator.ts @@ -1,6 +1,6 @@ -import Connection from '../connection/index.js'; -import { C11yExtension } from '../openapi/types.js'; -import { CommandBase } from '../validation/commandBase.js'; +import Connection from '../../connection/index.js'; +import { C11yExtension } from '../../openapi/types.js'; +import { CommandBase } from '../../validation/commandBase.js'; export default class ExtensionCreator extends CommandBase { private concept?: string; diff --git a/src/c11y/index.ts b/packages/core/src/v2/c11y/index.ts similarity index 91% rename from src/c11y/index.ts rename to packages/core/src/v2/c11y/index.ts index e9ee7281..2a10a5eb 100644 --- a/src/c11y/index.ts +++ b/packages/core/src/v2/c11y/index.ts @@ -1,4 +1,4 @@ -import Connection from '../connection/index.js'; +import Connection from '../../connection/index.js'; import ConceptsGetter from './conceptsGetter.js'; import ExtensionCreator from './extensionCreator.js'; diff --git a/test/c11y/journey.test.ts b/packages/core/src/v2/c11y/journey.test.ts similarity index 90% rename from test/c11y/journey.test.ts rename to packages/core/src/v2/c11y/journey.test.ts index 08c20244..3d140845 100644 --- a/test/c11y/journey.test.ts +++ b/packages/core/src/v2/c11y/journey.test.ts @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/no-non-null-assertion */ import { describe, expect, it } from 'vitest'; -import weaviate from '../../src/v2/index.js'; -import { C11yExtension, C11yWordsResponse } from '../openapi/types.js'; +import { C11yExtension, C11yWordsResponse } from '../../openapi/types.js'; +import weaviate from '../../v2/index.js'; describe('c11y endpoints', () => { const client = weaviate.client({ diff --git a/test/classifications/contextual.journey.test.ts b/packages/core/src/v2/classifications/contextual.journey.test.ts similarity index 97% rename from test/classifications/contextual.journey.test.ts rename to packages/core/src/v2/classifications/contextual.journey.test.ts index 4875288b..fed5203d 100644 --- a/test/classifications/contextual.journey.test.ts +++ b/packages/core/src/v2/classifications/contextual.journey.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest'; -import { Classification } from '../../src/openapi/types.js'; -import weaviate from '../../src/v2/index.js'; +import { Classification } from '../../openapi/types.js'; +import weaviate from '../../v2/index.js'; const targetDessertId = '9f399d3e-45a4-44f4-b0fd-fa291abfb211'; const targetSavoryId = 'b7a64fbd-7c22-44ac-afbb-8d1432b8061b'; diff --git a/src/classifications/getter.ts b/packages/core/src/v2/classifications/getter.ts similarity index 83% rename from src/classifications/getter.ts rename to packages/core/src/v2/classifications/getter.ts index ba06739c..a890356c 100644 --- a/src/classifications/getter.ts +++ b/packages/core/src/v2/classifications/getter.ts @@ -1,6 +1,6 @@ -import Connection from '../connection/index.js'; -import { Classification } from '../openapi/types.js'; -import { CommandBase } from '../validation/commandBase.js'; +import Connection from '../../connection/index.js'; +import { Classification } from '../../openapi/types.js'; +import { CommandBase } from '../../validation/commandBase.js'; export default class ClassificationsGetter extends CommandBase { private id?: string; diff --git a/src/classifications/index.ts b/packages/core/src/v2/classifications/index.ts similarity index 91% rename from src/classifications/index.ts rename to packages/core/src/v2/classifications/index.ts index 21708781..4c4335e2 100644 --- a/src/classifications/index.ts +++ b/packages/core/src/v2/classifications/index.ts @@ -1,4 +1,4 @@ -import Connection from '../connection/index.js'; +import Connection from '../../connection/index.js'; import ClassificationsGetter from './getter.js'; import ClassificationsScheduler from './scheduler.js'; diff --git a/test/classifications/knn.journey.test.ts b/packages/core/src/v2/classifications/knn.journey.test.ts similarity index 98% rename from test/classifications/knn.journey.test.ts rename to packages/core/src/v2/classifications/knn.journey.test.ts index 866e8295..bb8adbaf 100644 --- a/test/classifications/knn.journey.test.ts +++ b/packages/core/src/v2/classifications/knn.journey.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest'; -import { Classification } from '../../src/openapi/types.js'; -import weaviate, { WeaviateClient } from '../../src/v2/index.js'; +import { Classification } from '../../openapi/types.js'; +import weaviate, { WeaviateClient } from '../../v2/index.js'; const targetDessertId = 'cd54852a-209d-423b-bf1c-884468215237'; const targetSavoryId = 'e5da0127-327e-4184-85b8-7b9d1af4a850'; diff --git a/src/classifications/scheduler.ts b/packages/core/src/v2/classifications/scheduler.ts similarity index 95% rename from src/classifications/scheduler.ts rename to packages/core/src/v2/classifications/scheduler.ts index a46045e3..fcfddcb8 100644 --- a/src/classifications/scheduler.ts +++ b/packages/core/src/v2/classifications/scheduler.ts @@ -1,6 +1,6 @@ -import Connection from '../connection/index.js'; -import { Classification } from '../openapi/types.js'; -import { CommandBase } from '../validation/commandBase.js'; +import Connection from '../../connection/index.js'; +import { Classification } from '../../openapi/types.js'; +import { CommandBase } from '../../validation/commandBase.js'; import ClassificationsGetter from './getter.js'; export default class ClassificationsScheduler extends CommandBase { diff --git a/src/cluster/index.ts b/packages/core/src/v2/cluster/index.ts similarity index 89% rename from src/cluster/index.ts rename to packages/core/src/v2/cluster/index.ts index a26567a2..cb321d7d 100644 --- a/src/cluster/index.ts +++ b/packages/core/src/v2/cluster/index.ts @@ -1,4 +1,4 @@ -import Connection from '../connection/index.js'; +import Connection from '../../connection/index.js'; import NodesStatusGetter from './nodesStatusGetter.js'; export type NodeStatus = 'HEALTHY' | 'UNHEALTHY' | 'UNAVAILABLE'; diff --git a/src/cluster/nodesStatusGetter.ts b/packages/core/src/v2/cluster/nodesStatusGetter.ts similarity index 80% rename from src/cluster/nodesStatusGetter.ts rename to packages/core/src/v2/cluster/nodesStatusGetter.ts index b29ed7a2..bed73291 100644 --- a/src/cluster/nodesStatusGetter.ts +++ b/packages/core/src/v2/cluster/nodesStatusGetter.ts @@ -1,6 +1,6 @@ -import Connection from '../connection/index.js'; -import { NodesStatusResponse } from '../openapi/types.js'; -import { CommandBase } from '../validation/commandBase.js'; +import Connection from '../../connection/index.js'; +import { NodesStatusResponse } from '../../openapi/types.js'; +import { CommandBase } from '../../validation/commandBase.js'; export default class NodesStatusGetter extends CommandBase { private className?: string; diff --git a/src/data/checker.ts b/packages/core/src/v2/data/checker.ts similarity index 93% rename from src/data/checker.ts rename to packages/core/src/v2/data/checker.ts index 2e824732..515b4059 100644 --- a/src/data/checker.ts +++ b/packages/core/src/v2/data/checker.ts @@ -1,5 +1,5 @@ -import Connection from '../connection/index.js'; -import { CommandBase } from '../validation/commandBase.js'; +import Connection from '../../connection/index.js'; +import { CommandBase } from '../../validation/commandBase.js'; import { ObjectsPath } from './path.js'; import { ConsistencyLevel } from './replication.js'; diff --git a/src/data/creator.ts b/packages/core/src/v2/data/creator.ts similarity index 89% rename from src/data/creator.ts rename to packages/core/src/v2/data/creator.ts index a22912da..0c8120ce 100644 --- a/src/data/creator.ts +++ b/packages/core/src/v2/data/creator.ts @@ -1,7 +1,7 @@ -import Connection from '../connection/index.js'; -import { Properties, WeaviateObject } from '../openapi/types.js'; -import { CommandBase } from '../validation/commandBase.js'; -import { isValidStringProperty } from '../validation/string.js'; +import Connection from '../../connection/index.js'; +import { Properties, WeaviateObject } from '../../openapi/types.js'; +import { CommandBase } from '../../validation/commandBase.js'; +import { isValidStringProperty } from '../../validation/string.js'; import { ObjectsPath } from './path.js'; import { ConsistencyLevel } from './replication.js'; diff --git a/src/data/deleter.ts b/packages/core/src/v2/data/deleter.ts similarity index 93% rename from src/data/deleter.ts rename to packages/core/src/v2/data/deleter.ts index 93cc070d..5f8ef2e3 100644 --- a/src/data/deleter.ts +++ b/packages/core/src/v2/data/deleter.ts @@ -1,5 +1,5 @@ -import Connection from '../connection/index.js'; -import { CommandBase } from '../validation/commandBase.js'; +import Connection from '../../connection/index.js'; +import { CommandBase } from '../../validation/commandBase.js'; import { ObjectsPath } from './path.js'; import { ConsistencyLevel } from './replication.js'; diff --git a/src/data/getter.ts b/packages/core/src/v2/data/getter.ts similarity index 88% rename from src/data/getter.ts rename to packages/core/src/v2/data/getter.ts index e6c5b441..4d004ecc 100644 --- a/src/data/getter.ts +++ b/packages/core/src/v2/data/getter.ts @@ -1,6 +1,6 @@ -import Connection from '../connection/index.js'; -import { WeaviateObjectsList } from '../openapi/types.js'; -import { CommandBase } from '../validation/commandBase.js'; +import Connection from '../../connection/index.js'; +import { WeaviateObjectsList } from '../../openapi/types.js'; +import { CommandBase } from '../../validation/commandBase.js'; import { ObjectsPath } from './path.js'; export default class Getter extends CommandBase { diff --git a/src/data/getterById.ts b/packages/core/src/v2/data/getterById.ts similarity index 91% rename from src/data/getterById.ts rename to packages/core/src/v2/data/getterById.ts index 6b0df240..ecec2f8d 100644 --- a/src/data/getterById.ts +++ b/packages/core/src/v2/data/getterById.ts @@ -1,6 +1,6 @@ -import Connection from '../connection/index.js'; -import { WeaviateObject } from '../openapi/types.js'; -import { CommandBase } from '../validation/commandBase.js'; +import Connection from '../../connection/index.js'; +import { WeaviateObject } from '../../openapi/types.js'; +import { CommandBase } from '../../validation/commandBase.js'; import { ObjectsPath } from './path.js'; import { ConsistencyLevel } from './replication.js'; diff --git a/src/data/index.ts b/packages/core/src/v2/data/index.ts similarity index 94% rename from src/data/index.ts rename to packages/core/src/v2/data/index.ts index c0161027..22542809 100644 --- a/src/data/index.ts +++ b/packages/core/src/v2/data/index.ts @@ -1,6 +1,6 @@ -import Connection from '../connection/index.js'; -import { BeaconPath } from '../utils/beaconPath.js'; -import { DbVersionSupport } from '../utils/dbVersion.js'; +import Connection from '../../connection/index.js'; +import { BeaconPath } from '../../utils/beaconPath.js'; +import { DbVersionSupport } from '../../utils/dbVersion.js'; import Checker from './checker.js'; import Creator from './creator.js'; import Deleter from './deleter.js'; diff --git a/packages/core/src/v2/data/journey.test.ts b/packages/core/src/v2/data/journey.test.ts new file mode 100644 index 00000000..5088c156 --- /dev/null +++ b/packages/core/src/v2/data/journey.test.ts @@ -0,0 +1,1821 @@ +/* eslint-disable @typescript-eslint/no-non-null-assertion */ +import { describe, expect, it } from 'vitest'; +import { + Properties, + Tenant, + WeaviateClass, + WeaviateError, + WeaviateObject, + WeaviateObjectsList, +} from '../../openapi/types.js'; +import weaviate, { WeaviateClient } from '../../v2/index.js'; + +const thingClassName = 'DataJourneyTestThing'; +const refSourceClassName = 'DataJourneyTestRefSource'; +const classCustomVectorClassName = 'ClassCustomVector'; + +const fail = (msg: string) => { + throw new Error(msg); +}; + +describe('data', () => { + const client = weaviate.client({ + scheme: 'http', + host: 'localhost:8080', + }); + + it('creates a schema class', () => { + // this is just test setup, not part of what we want to test here + return setup(client); + }); + + it('validates a valid thing', () => { + const properties = { + stringProp: 'without-id', + objectProp: { + nestedInt: 123, + nestedNumber: 123.45, + nestedText: 'some text', + nestedObjects: [ + { + nestedBoolLvl2: true, + nestedDateLvl2: '2022-01-01T00:00:00+02:00', + nestedNumbersLvl2: [11.1, 22.2], + }, + { + nestedBoolLvl2: false, + nestedDateLvl2: '2023-01-01T00:00:00+02:00', + nestedNumbersLvl2: [33.3, 44.4], + }, + ], + }, + }; + + return client.data + .validator() + .withId('11992f06-2eac-4f0b-973f-7d230d3bdbaf') + .withClassName(thingClassName) + .withProperties(properties) + .do() + .then((res: boolean) => { + expect(res).toEqual(true); + }) + .catch((e: WeaviateError) => { + throw new Error('it should not have errord: ' + e); + }); + }); + + it('(validator) errors on an invalid valid object', () => { + const properties = { stringProp: 234 }; // number is invalid + + return client.data + .validator() + .withId('11992f06-2eac-4f0b-973f-7d230d3bdbaf') + .withClassName(thingClassName) + .withProperties(properties) + .do() + .catch((e: Error) => { + expect(e.message).toEqual( + `The request to Weaviate failed with status code: 422 and message: {"error":[{"message":"invalid object: invalid text property 'stringProp' on class 'DataJourneyTestThing': not a string, but json.Number"}]}` + ); + }); + }); + + let implicitThingId: string | undefined; + + it('creates a new thing object without an explicit id', () => { + const properties = { + stringProp: 'without-id', + objectProp: { + nestedInt: 123, + nestedNumber: 123.45, + nestedText: 'some text', + nestedObjects: [ + { + nestedBoolLvl2: true, + nestedDateLvl2: '2022-01-01T00:00:00+02:00', + nestedNumbersLvl2: [11.1, 22.2], + }, + { + nestedBoolLvl2: false, + nestedDateLvl2: '2023-01-01T00:00:00+02:00', + nestedNumbersLvl2: [33.3, 44.4], + }, + ], + }, + }; + + return client.data + .creator() + .withClassName(thingClassName) + .withProperties(properties) + .do() + .then((res: WeaviateObject) => { + expect(res.properties).toEqual(properties); + implicitThingId = res.id; + }) + .catch((e: WeaviateError) => { + throw new Error('it should not have errord: ' + e); + }); + }); + + it('creates a new thing object with an explicit id', () => { + const properties = { + stringProp: 'with-id', + objectProp: { + nestedInt: 999, + nestedNumber: 88.8, + nestedText: 'another text', + nestedObjects: [ + { + nestedBoolLvl2: false, + nestedDateLvl2: '2020-01-01T00:00:00+02:00', + nestedNumbersLvl2: [55.5, 66.6], + }, + { + nestedBoolLvl2: true, + nestedDateLvl2: '2021-01-01T00:00:00+02:00', + nestedNumbersLvl2: [77.7, 88.8], + }, + ], + }, + }; + // explicitly make this an all-zero UUID. This way we can be sure that it's + // the first to come up when using the cursor API. Since this test suite + // also contains dynamicaly generated IDs, this is the only way to make + // sure that this ID is first. This way the tests returning objects after + // this ID won't be flaky. + const id = '00000000-0000-0000-0000-000000000000'; + + return client.data + .creator() + .withClassName(thingClassName) + .withProperties(properties) + .withId(id) + .do() + .then((res: WeaviateObject) => { + expect(res.properties).toEqual(properties); + expect(res.id).toEqual(id); + }) + .catch((e: WeaviateError) => { + throw new Error('it should not have errord: ' + e); + }); + }); + + it('creates another thing', () => { + // we need this later for the reference test! + const properties = {}; + const id = '599a0c64-5ed5-4d30-978b-6c9c45516db1'; + + return client.data + .creator() + .withClassName(refSourceClassName) + .withProperties(properties) + .withId(id) + .do() + .then((res: WeaviateObject) => { + expect(res.properties).toEqual(properties); + expect(res.id).toEqual(id); + }) + .catch((e: WeaviateError) => { + throw new Error('it should not have errord: ' + e); + }); + }); + + it('errors without a className', () => { + return client.data + .creator() + .do() + .then(() => { + throw new Error('it should have errord'); + }) + .catch((err: Error) => { + expect(err.message).toEqual( + 'invalid usage: className must be set - set with .withClassName(className)' + ); + }); + }); + + it('gets all things', () => { + return client.data + .getter() + .do() + .then((res: WeaviateObjectsList) => { + expect(res.objects).toHaveLength(3); + expect(res.objects).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + id: '00000000-0000-0000-0000-000000000000', + properties: { + stringProp: 'with-id', + objectProp: { + nestedInt: 999, + nestedNumber: 88.8, + nestedText: 'another text', + nestedObjects: [ + { + nestedBoolLvl2: false, + nestedDateLvl2: '2020-01-01T00:00:00+02:00', + nestedNumbersLvl2: [55.5, 66.6], + }, + { + nestedBoolLvl2: true, + nestedDateLvl2: '2021-01-01T00:00:00+02:00', + nestedNumbersLvl2: [77.7, 88.8], + }, + ], + }, + }, + }), + expect.objectContaining({ + properties: { + stringProp: 'without-id', + objectProp: { + nestedInt: 123, + nestedNumber: 123.45, + nestedText: 'some text', + nestedObjects: [ + { + nestedBoolLvl2: true, + nestedDateLvl2: '2022-01-01T00:00:00+02:00', + nestedNumbersLvl2: [11.1, 22.2], + }, + { + nestedBoolLvl2: false, + nestedDateLvl2: '2023-01-01T00:00:00+02:00', + nestedNumbersLvl2: [33.3, 44.4], + }, + ], + }, + }, + }), + ]) + ); + }) + .catch((e: WeaviateError) => { + throw new Error('it should not have errord: ' + e); + }); + }); + + it('gets all classes objects', () => { + return client.data + .getter() + .withClassName(thingClassName) + .do() + .then((res: WeaviateObjectsList) => { + expect(res.objects).toHaveLength(2); + expect(res.objects).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + id: '00000000-0000-0000-0000-000000000000', + properties: { + stringProp: 'with-id', + objectProp: { + nestedInt: 999, + nestedNumber: 88.8, + nestedText: 'another text', + nestedObjects: [ + { + nestedBoolLvl2: false, + nestedDateLvl2: '2020-01-01T00:00:00+02:00', + nestedNumbersLvl2: [55.5, 66.6], + }, + { + nestedBoolLvl2: true, + nestedDateLvl2: '2021-01-01T00:00:00+02:00', + nestedNumbersLvl2: [77.7, 88.8], + }, + ], + }, + }, + }), + expect.objectContaining({ + properties: { + stringProp: 'without-id', + objectProp: { + nestedInt: 123, + nestedNumber: 123.45, + nestedText: 'some text', + nestedObjects: [ + { + nestedBoolLvl2: true, + nestedDateLvl2: '2022-01-01T00:00:00+02:00', + nestedNumbersLvl2: [11.1, 22.2], + }, + { + nestedBoolLvl2: false, + nestedDateLvl2: '2023-01-01T00:00:00+02:00', + nestedNumbersLvl2: [33.3, 44.4], + }, + ], + }, + }, + }), + ]) + ); + }) + .catch((e: WeaviateError) => { + throw new Error('it should not have errord: ' + e); + }); + }); + + it('gets all classes after a specfic object (Cursor API)', () => { + return client.data + .getter() + .withClassName(thingClassName) + .withLimit(100) + .withAfter('00000000-0000-0000-0000-000000000000') + .do() + .then((res: WeaviateObjectsList) => { + expect(res.objects).toHaveLength(1); + expect(res.objects).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + properties: { + stringProp: 'without-id', + objectProp: { + nestedInt: 123, + nestedNumber: 123.45, + nestedText: 'some text', + nestedObjects: [ + { + nestedBoolLvl2: true, + nestedDateLvl2: '2022-01-01T00:00:00+02:00', + nestedNumbersLvl2: [11.1, 22.2], + }, + { + nestedBoolLvl2: false, + nestedDateLvl2: '2023-01-01T00:00:00+02:00', + nestedNumbersLvl2: [33.3, 44.4], + }, + ], + }, + }, + }), + ]) + ); + }) + .catch((e) => fail('it should not have errord: ' + e)); + }); + + // it('gets all things with all optional _additional params', () => { + // return client.data + // .getter() + // .withAdditional('classification') + // .withAdditional('interpretation') + // .withAdditional('nearestNeighbors') + // .withAdditional('featureProjection') + // .withVector() + // .withLimit(2) + // .do() + // .then((res: WeaviateObjectsList) => { + // if (!res.objects) { + // throw new Error(`response should have objects: ${JSON.stringify(res)}`); + // } + // expect(res.objects).toHaveLength(2); + // expect(res.objects[0].vector?.length).toBeGreaterThan(10); + // expect(res.objects[0].additional?.interpretation).toBeDefined(); + // expect(res.objects[0].additional?.featureProjection).toBeDefined(); + // expect(res.objects[0].additional?.nearestNeighbors).toBeDefined(); + // // not testing for classification as that's only set if the object was + // // actually classified, this one wasn't + // }) + // .catch((e: WeaviateError) => { + // throw new Error('it should not have errord: ' + e); + // }); + // }); + + // it('gets all classes objects with all optional _additional params', () => { + // return client.data + // .getter() + // .withClassName(thingClassName) + // .withAdditional('classification') + // .withAdditional('interpretation') + // .withAdditional('nearestNeighbors') + // .withAdditional('featureProjection') + // .withVector() + // .do() + // .then((res: WeaviateObjectsList) => { + // if (!res.objects) { + // throw new Error(`response should have objects: ${JSON.stringify(res)}`); + // } + // expect(res.objects).toHaveLength(2); + // expect(res.objects[0].vector?.length).toBeGreaterThan(10); + // expect(res.objects[0].additional?.interpretation).toBeDefined(); + // expect(res.objects[0].additional?.featureProjection).toBeDefined(); + // expect(res.objects[0].additional?.nearestNeighbors).toBeDefined(); + // }) + // .catch((e: WeaviateError) => { + // throw new Error('it should not have errord: ' + e); + // }); + // }); + + it('gets one thing by id only', () => { + return client.data + .getterById() + .withId('00000000-0000-0000-0000-000000000000') + .do() + .then((res: WeaviateObject) => { + expect(res).toEqual( + expect.objectContaining({ + id: '00000000-0000-0000-0000-000000000000', + properties: { + stringProp: 'with-id', + objectProp: { + nestedInt: 999, + nestedNumber: 88.8, + nestedText: 'another text', + nestedObjects: [ + { + nestedBoolLvl2: false, + nestedDateLvl2: '2020-01-01T00:00:00+02:00', + nestedNumbersLvl2: [55.5, 66.6], + }, + { + nestedBoolLvl2: true, + nestedDateLvl2: '2021-01-01T00:00:00+02:00', + nestedNumbersLvl2: [77.7, 88.8], + }, + ], + }, + }, + }) + ); + }) + .catch((e: WeaviateError) => { + throw new Error('it should not have errord: ' + e); + }); + }); + + it('gets one thing by id and class name', () => { + return client.data + .getterById() + .withClassName(thingClassName) + .withId('00000000-0000-0000-0000-000000000000') + .do() + .then((res: WeaviateObject) => { + expect(res).toEqual( + expect.objectContaining({ + id: '00000000-0000-0000-0000-000000000000', + properties: { + stringProp: 'with-id', + objectProp: { + nestedInt: 999, + nestedNumber: 88.8, + nestedText: 'another text', + nestedObjects: [ + { + nestedBoolLvl2: false, + nestedDateLvl2: '2020-01-01T00:00:00+02:00', + nestedNumbersLvl2: [55.5, 66.6], + }, + { + nestedBoolLvl2: true, + nestedDateLvl2: '2021-01-01T00:00:00+02:00', + nestedNumbersLvl2: [77.7, 88.8], + }, + ], + }, + }, + }) + ); + }) + .catch((e: WeaviateError) => { + throw new Error('it should not have errord: ' + e); + }); + }); + + it('fails to get one thing by id with invalid class name', () => { + return client.data + .getterById() + .withClassName('DoesNotExist') + .withId('00000000-0000-0000-0000-000000000000') + .do() + .catch((err: Error) => { + expect(err.message).toEqual('The request to Weaviate failed with status code: 404 and message: '); + }); + }); + + it('gets one thing by id with all optional additional props', () => { + return client.data + .getterById() + .withId('00000000-0000-0000-0000-000000000000') + .withAdditional('classification') + .withAdditional('interpretation') + .withAdditional('nearestNeighbors') + .withVector() + .do() + .then((res: WeaviateObject) => { + expect(res.vector?.length).toBeGreaterThan(10); + expect(res.additional?.interpretation).toBeDefined(); + expect(res.additional?.nearestNeighbors).toBeDefined(); + // not testing for classification as that's only set if the object was + // actually classified, this one wasn't + }) + .catch((e: WeaviateError) => { + throw new Error('it should not have errord: ' + e); + }); + }); + + it('errors if the id is empty', () => { + return client.data + .getterById() + .do() + .then(() => { + throw new Error('it should have errord'); + }) + .catch((e: WeaviateError) => { + expect(e).toEqual(new Error('invalid usage: id must be set - initialize with getterById(id)')); + }); + }); + + it('updates a thing by id only', () => { + const id = '00000000-0000-0000-0000-000000000000'; + return client.data + .getterById() + .withId(id) + .do() + .then((res: WeaviateObject) => { + // alter the schema + const properties: Properties = res.properties!; + properties!.stringProp = 'thing-updated'; + properties!.objectProp = { + nestedNumber: 55.5, + nestedText: 'updated text', + nestedObjects: [ + { + nestedBoolLvl2: false, + nestedNumbersLvl2: [], + }, + { + nestedBoolLvl2: true, + nestedNumbersLvl2: [1.1], + }, + { + nestedBoolLvl2: true, + nestedNumbersLvl2: [2.2, 3.3], + }, + ], + }; + return client.data.updater().withId(id).withClassName(thingClassName).withProperties(properties).do(); + }) + .then((res: WeaviateObject) => { + expect(res.properties).toEqual({ + stringProp: 'thing-updated', + objectProp: { + nestedNumber: 55.5, + nestedText: 'updated text', + nestedObjects: [ + { + nestedBoolLvl2: false, + nestedNumbersLvl2: [], + }, + { + nestedBoolLvl2: true, + nestedNumbersLvl2: [1.1], + }, + { + nestedBoolLvl2: true, + nestedNumbersLvl2: [2.2, 3.3], + }, + ], + }, + }); + }) + .catch((e: WeaviateError) => { + throw new Error('it should not have errord: ' + e); + }); + }); + + it('updates a thing by id and class name', () => { + const id = '00000000-0000-0000-0000-000000000000'; + return client.data + .getterById() + .withId(id) + .withClassName(thingClassName) + .do() + .then((res: WeaviateObject) => { + const properties: Properties = res.properties!; + properties!.stringProp = 'thing-updated-with-class-name'; + return client.data.updater().withId(id).withClassName(thingClassName).withProperties(properties).do(); + }) + .then((res: WeaviateObject) => { + expect(res.properties).toEqual({ + stringProp: 'thing-updated-with-class-name', + objectProp: { + nestedNumber: 55.5, + nestedText: 'updated text', + nestedObjects: [ + { + nestedBoolLvl2: false, + nestedNumbersLvl2: [], + }, + { + nestedBoolLvl2: true, + nestedNumbersLvl2: [1.1], + }, + { + nestedBoolLvl2: true, + nestedNumbersLvl2: [2.2, 3.3], + }, + ], + }, + }); + }) + .catch((e: WeaviateError) => { + throw new Error('it should not have errord: ' + e); + }); + }); + + it('merges a thing', () => { + const id = '00000000-0000-0000-0000-000000000000'; + return client.data + .getterById() + .withId(id) + .do() + .then((res: WeaviateObject) => { + // alter the schema + const properties: Properties = res.properties!; + properties!.intProp = 7; + return client.data.merger().withId(id).withClassName(thingClassName).withProperties(properties).do(); + }) + .catch((e: WeaviateError) => { + throw new Error('it should not have errord: ' + e); + }); + }); + + it('adds a reference to a thing by id only', () => { + const sourceId = '599a0c64-5ed5-4d30-978b-6c9c45516db1'; + const targetId = '00000000-0000-0000-0000-000000000000'; + + return client.data + .referenceCreator() + .withId(sourceId) + .withReferenceProperty('refProp') + .withReference(client.data.referencePayloadBuilder().withId(targetId).payload()) + .do() + .catch((e: WeaviateError) => { + throw new Error('it should not have errord: ' + e); + }); + }); + + it('replaces all references of a thing by id only', () => { + const sourceId = '599a0c64-5ed5-4d30-978b-6c9c45516db1'; + const targetId: string | undefined = implicitThingId; + + return client.data + .referenceReplacer() + .withId(sourceId) + .withReferenceProperty('refProp') + .withReferences([client.data.referencePayloadBuilder().withId(targetId!).payload()]) + .do() + .catch((e: WeaviateError) => { + throw new Error('it should not have errord: ' + e); + }); + }); + + it('deletes a single reference of a thing by id only', () => { + const sourceId = '599a0c64-5ed5-4d30-978b-6c9c45516db1'; + const targetId: string | undefined = implicitThingId; + + return client.data + .referenceDeleter() + .withId(sourceId) + .withReferenceProperty('refProp') + .withReference(client.data.referencePayloadBuilder().withId(targetId!).payload()) + .do() + .catch((e: WeaviateError) => { + throw new Error('it should not have errord: ' + e); + }); + }); + + it('adds a reference to a thing by id and class name', () => { + const sourceId = '599a0c64-5ed5-4d30-978b-6c9c45516db1'; + const targetId = '00000000-0000-0000-0000-000000000000'; + + return client.data + .referenceCreator() + .withId(sourceId) + .withClassName(refSourceClassName) + .withReferenceProperty('refProp') + .withReference( + client.data.referencePayloadBuilder().withId(targetId).withClassName(thingClassName).payload() + ) + .do() + .catch((e: WeaviateError) => { + throw new Error('it should not have errord: ' + e); + }); + }); + + it('replaces all references of a thing by id and class name', () => { + const sourceId = '599a0c64-5ed5-4d30-978b-6c9c45516db1'; + const targetId: string | undefined = implicitThingId; + + return client.data + .referenceReplacer() + .withId(sourceId) + .withClassName(refSourceClassName) + .withReferenceProperty('refProp') + .withReferences([ + client.data.referencePayloadBuilder().withId(targetId!).withClassName(thingClassName).payload(), + ]) + .do() + .catch((e: WeaviateError) => { + throw new Error('it should not have errord: ' + e); + }); + }); + + it('deletes a single reference of a thing by id and class name', () => { + const sourceId = '599a0c64-5ed5-4d30-978b-6c9c45516db1'; + const targetId: string | undefined = implicitThingId; + + return client.data + .referenceDeleter() + .withId(sourceId) + .withClassName(refSourceClassName) + .withReferenceProperty('refProp') + .withReference( + client.data.referencePayloadBuilder().withId(targetId!).withClassName(thingClassName).payload() + ) + .do() + .catch((e: WeaviateError) => { + throw new Error('it should not have errord: ' + e); + }); + }); + + it('checks that object exists by id only', () => { + return client.data + .checker() + .withId('00000000-0000-0000-0000-000000000000') + .do() + .then((exists: any) => { + if (!exists) { + fail('it should exist in DB'); + } + }) + .catch((e: WeaviateError) => { + throw new Error('it should not have errord: ' + e); + }); + }); + + it('checks that object exists by id and class name', () => { + return client.data + .checker() + .withId('00000000-0000-0000-0000-000000000000') + .withClassName(thingClassName) + .do() + .then((exists: any) => { + if (!exists) { + fail('it should exist in DB'); + } + }) + .catch((e: WeaviateError) => { + throw new Error('it should not have errord: ' + e); + }); + }); + + it('deletes a thing by id only', () => { + return client.data + .deleter() + .withId('00000000-0000-0000-0000-000000000000') + .do() + .catch((e: WeaviateError) => { + throw new Error('it should not have errord: ' + e); + }); + }); + + it("checks that object doesn't exist anymore with delete by id only", () => { + return client.data + .checker() + .withId('00000000-0000-0000-0000-000000000000') + .do() + .then((exists: any) => { + if (exists) { + fail('it should not exist in DB'); + } + }) + .catch((e: WeaviateError) => { + throw new Error('it should not have errord: ' + e); + }); + }); + + it('deletes a thing with id and class name', async () => { + const properties = { stringProp: 'with-id' }; + const id = '6781a974-cfbf-455d-ace8-f1dba4564230'; + + await client.data + .creator() + .withClassName(thingClassName) + .withProperties(properties) + .withId(id) + .do() + .then((res: WeaviateObject) => { + expect(res.properties).toEqual(properties); + expect(res.id).toEqual(id); + }) + .catch((e: WeaviateError) => { + throw new Error('it should not have errord: ' + e); + }); + + return client.data + .deleter() + .withId(id) + .withClassName(thingClassName) + .do() + .catch((e: WeaviateError) => { + throw new Error('it should not have errord: ' + e); + }); + }); + + it("checks that object doesn't exist anymore with delete by id and class name", () => { + return client.data + .checker() + .withId('6781a974-cfbf-455d-ace8-f1dba4564230') + .do() + .then((exists: any) => { + if (exists) { + fail('it should not exist in DB'); + } + }) + .catch((e: WeaviateError) => { + throw new Error('it should not have errord: ' + e); + }); + }); + + it('verifies there are now fewer things (after delete)', () => { + return Promise.all([ + client.data + .getter() + .do() + .then((res: WeaviateObjectsList) => { + expect(res.objects).toHaveLength(2); + }) + .catch((e: WeaviateError) => { + throw new Error('it should not have errord: ' + e); + }), + ]); + }); + + it('creates a new class with custom vector and explicit id', () => { + const properties = { foo: 'bar' }; + const id = 'aaaac06c-463f-466c-9092-5930dbac3887'; + const vector = [ + -0.26736435, -0.112380296, 0.29648793, 0.39212644, 0.0033650293, -0.07112332, 0.07513781, 0.22459874, + ]; + + return client.data + .creator() + .withClassName(classCustomVectorClassName) + .withProperties(properties) + .withVector(vector) + .withId(id) + .do() + .then((res: WeaviateObject) => { + expect(res.properties).toEqual(properties); + expect(res.vector).toEqual(vector); + expect(res.id).toEqual(id); + }) + .catch((e: WeaviateError) => { + throw new Error('it should not have errord: ' + e); + }); + }); + + it('verifies that class with custom vector has been created', () => { + const id = 'aaaac06c-463f-466c-9092-5930dbac3887'; + const vector = [ + -0.26736435, -0.112380296, 0.29648793, 0.39212644, 0.0033650293, -0.07112332, 0.07513781, 0.22459874, + ]; + + return client.data + .getterById() + .withId(id) + .withVector() + .do() + .then((res: WeaviateObject) => { + expect(res.vector).toEqual(vector); + }) + .catch((e: WeaviateError) => { + throw new Error('it should not have errord: ' + e); + }); + }); + + it('deletes a class with custom vector', () => { + return client.data + .deleter() + .withId('aaaac06c-463f-466c-9092-5930dbac3887') + .do() + .catch((e: WeaviateError) => { + throw new Error('it should not have errord: ' + e); + }); + }); + + it('forms a get by id query with node_name set', () => { + const id = '00000000-0000-0000-0000-000000000000'; + + return client.data + .getterById() + .withClassName(thingClassName) + .withId(id) + .withVector() + .withNodeName('node1') + .buildPath() + .then((path: string) => { + expect(path).toContain('?include=vector'); + expect(path).toContain('&node_name=node1'); + }) + .catch((e: WeaviateError) => { + throw new Error('it should not have errord: ' + e); + }); + }); + + it('forms a get by id query with consistency_level set', () => { + const id = '00000000-0000-0000-0000-000000000000'; + + return client.data + .getterById() + .withClassName(thingClassName) + .withId(id) + .withVector() + .withConsistencyLevel('QUORUM') + .buildPath() + .then((path: string) => { + expect(path).toContain('?include=vector'); + expect(path).toContain('consistency_level=QUORUM'); + }) + .catch((e: WeaviateError) => { + throw new Error('it should not have errord: ' + e); + }); + }); + + it('forms a exists query with consistency_level set', () => { + const id = '00000000-0000-0000-0000-000000000000'; + + return client.data + .checker() + .withClassName(thingClassName) + .withId(id) + .withConsistencyLevel('QUORUM') + .buildPath() + .then((path: string) => { + expect(path).toContain('consistency_level=QUORUM'); + }) + .catch((e: WeaviateError) => { + throw new Error('it should not have errord: ' + e); + }); + }); + + it('creates object with consistency_level set', async () => { + const id = '144d1944-3ab4-4aa1-8095-92429d6cbaba'; + const properties = { foo: 'bar' }; + const vector = [ + -0.26736435, -0.112380296, 0.29648793, 0.39212644, 0.0033650293, -0.07112332, 0.07513781, 0.22459874, + ]; + + await client.data + .creator() + .withClassName(classCustomVectorClassName) + .withProperties(properties) + .withVector(vector) + .withId(id) + .withConsistencyLevel('ALL') + .do() + .then((res) => { + expect(res.properties).toEqual(properties); + expect(res.vector).toEqual(vector); + expect(res.id).toEqual(id); + }) + .catch((e) => fail('it should not have errord: ' + e)); + + return client.data + .getterById() + .withClassName(classCustomVectorClassName) + .withId(id) + .do() + .then((res) => { + expect(res).toEqual( + expect.objectContaining({ + id: id, + properties: properties, + }) + ); + }) + .catch((e) => fail('it should not have errord: ' + e)); + }); + + it('deletes object with consistency_level set', async () => { + const id = '7a78b029-e7b4-499f-9bd8-70ea11b12345'; + const properties = { foo: 'bar' }; + const vector = [ + -0.26736435, -0.112380296, 0.29648793, 0.39212644, 0.0033650293, -0.07112332, 0.07513781, 0.22459874, + ]; + + await client.data + .creator() + .withClassName(classCustomVectorClassName) + .withProperties(properties) + .withVector(vector) + .withId(id) + .do() + .then((res) => { + expect(res.properties).toEqual(properties); + expect(res.vector).toEqual(vector); + expect(res.id).toEqual(id); + }) + .catch((e: WeaviateError) => fail('it should not have errord: ' + e)); + + await client.data + .getterById() + .withClassName(classCustomVectorClassName) + .withId(id) + .do() + .then((res) => { + expect(res).toEqual( + expect.objectContaining({ + id: id, + properties: properties, + }) + ); + }) + .catch((e: WeaviateError) => fail('it should not have errord: ' + e)); + + return client.data + .deleter() + .withClassName(classCustomVectorClassName) + .withId(id) + .withConsistencyLevel('QUORUM') + .do() + .then() + .catch((e: WeaviateError) => fail('it should not have errord: ' + e)); + }); + + it('patches object with consistency_level set', async () => { + const id = '7a78b029-e7b4-499f-9bd8-70ea11b12345'; + const properties: Properties = { foo: 'bar' }; + const vector = [ + -0.26736435, -0.112380296, 0.29648793, 0.39212644, 0.0033650293, -0.07112332, 0.07513781, 0.22459874, + ]; + + await client.data + .creator() + .withClassName(classCustomVectorClassName) + .withProperties(properties) + .withVector(vector) + .withId(id) + .do() + .then((res) => { + expect(res.properties).toEqual(properties); + expect(res.vector).toEqual(vector); + expect(res.id).toEqual(id); + }) + .catch((e: WeaviateError) => fail('it should not have errord: ' + e)); + + await client.data + .getterById() + .withClassName(classCustomVectorClassName) + .withId(id) + .do() + .then((res) => { + expect(res).toEqual( + expect.objectContaining({ + id: id, + properties: properties, + }) + ); + }) + .catch((e: WeaviateError) => fail('it should not have errord: ' + e)); + + const newProperties: Properties = { foo: 'baz' }; + + await client.data + .merger() + .withClassName(classCustomVectorClassName) + .withId(id) + .withProperties(newProperties) + .withConsistencyLevel('QUORUM') + .do() + .then() + .catch((e) => fail('it should not have errord: ' + e)); + + return client.data + .getterById() + .withClassName(classCustomVectorClassName) + .withId(id) + .do() + .then((res) => { + expect(res).toEqual( + expect.objectContaining({ + id: id, + properties: newProperties, + }) + ); + }) + .catch((e) => fail('it should not have errord: ' + e)); + }); + + it('updates object with consistency_level set', async () => { + const id = '55eaf761-11fd-48a9-bf21-60e2048db188'; + const properties: Properties = { foo: 'bar' }; + const vector = [ + -0.26736435, -0.112380296, 0.29648793, 0.39212644, 0.0033650293, -0.07112332, 0.07513781, 0.22459874, + ]; + + await client.data + .creator() + .withClassName(classCustomVectorClassName) + .withProperties(properties) + .withVector(vector) + .withId(id) + .do() + .then((res) => { + expect(res.properties).toEqual(properties); + expect(res.vector).toEqual(vector); + expect(res.id).toEqual(id); + }) + .catch((e: WeaviateError) => fail('it should not have errord: ' + e)); + + await client.data + .getterById() + .withClassName(classCustomVectorClassName) + .withId(id) + .do() + .then((res) => { + expect(res).toEqual( + expect.objectContaining({ + id: id, + properties: properties, + }) + ); + }) + .catch((e: WeaviateError) => fail('it should not have errord: ' + e)); + + const newProperties: Properties = { foo: 'baz' }; + + await client.data + .updater() + .withClassName(classCustomVectorClassName) + .withId(id) + .withProperties(newProperties) + .withConsistencyLevel('QUORUM') + .do() + .then() + .catch((e) => fail('it should not have errord: ' + e)); + + return client.data + .getterById() + .withClassName(classCustomVectorClassName) + .withId(id) + .do() + .then((res) => { + expect(res).toEqual( + expect.objectContaining({ + id: id, + properties: newProperties, + }) + ); + }) + .catch((e: WeaviateError) => fail('it should not have errord: ' + e)); + }); + + it('creates reference with consistency_level set', async () => { + const id1 = '5a99f759-400a-453e-b83a-766472994d05'; + const props1 = { stringProp: 'foobar' }; + + const id2 = '8d3ae97a-664b-4252-91d5-9886eda9b580'; + + await client.data + .creator() + .withClassName(thingClassName) + .withProperties(props1) + .withId(id1) + .do() + .then((res) => { + expect(res.properties).toEqual(props1); + expect(res.id).toEqual(id1); + }) + .catch((e) => fail('it should not have errord: ' + e)); + + await client.data + .creator() + .withClassName(refSourceClassName) + .withId(id2) + .do() + .then((res) => { + expect(res.id).toEqual(id2); + }) + .catch((e) => fail('it should not have errord: ' + e)); + + await client.data + .referenceCreator() + .withId(id2) + .withReferenceProperty('refProp') + .withConsistencyLevel('ONE') + .withReference(client.data.referencePayloadBuilder().withId(id1).payload()) + .do() + .catch((e) => fail('it should not have errord: ' + e)); + + return client.data + .getterById() + .withClassName(refSourceClassName) + .withId(id2) + .do() + .then((res) => { + expect(res).toEqual( + expect.objectContaining({ + id: id2, + properties: { + refProp: [ + { + beacon: `weaviate://localhost/DataJourneyTestThing/${id1}`, + href: `/v1/objects/DataJourneyTestThing/${id1}`, + }, + ], + }, + }) + ); + }) + .catch((e) => fail('it should not have errord: ' + e)); + }); + + it('replaces reference with consistency_level set', async () => { + const id1 = '84c58d72-7303-4528-90d2-ebaa39bdd9d4'; + const props1 = { stringProp: 'foobar' }; + + const id2 = '6ca5a30f-f3df-400f-92d2-7de1a48d80ac'; + + await client.data + .creator() + .withClassName(thingClassName) + .withProperties(props1) + .withId(id1) + .do() + .then((res) => { + expect(res.properties).toEqual(props1); + expect(res.id).toEqual(id1); + }) + .catch((e) => fail('it should not have errord: ' + e)); + + await client.data + .creator() + .withClassName(refSourceClassName) + .withId(id2) + .do() + .then((res) => { + expect(res.id).toEqual(id2); + }) + .catch((e) => fail('it should not have errord: ' + e)); + + return client.data + .referenceReplacer() + .withId(id2) + .withReferenceProperty('refProp') + .withConsistencyLevel('ONE') + .withReferences(client.data.referencePayloadBuilder().withId(id1).payload()) + .do() + .catch((e) => fail('it should not have errord: ' + e)); + }); + + it('deletes reference with consistency_level set', async () => { + const id1 = 'cfc3151c-6f45-45e2-bb6a-55789c1fbbb2'; + const props1 = { stringProp: 'foobar' }; + + const id2 = '70ff8bc0-1d3d-4df4-8bf0-774806ba53e3'; + + await client.data + .creator() + .withClassName(thingClassName) + .withProperties(props1) + .withId(id1) + .do() + .then((res) => { + expect(res.properties).toEqual(props1); + expect(res.id).toEqual(id1); + }) + .catch((e) => fail('it should not have errord: ' + e)); + + await client.data + .creator() + .withClassName(refSourceClassName) + .withId(id2) + .do() + .then((res) => { + expect(res.id).toEqual(id2); + }) + .catch((e) => fail('it should not have errord: ' + e)); + + await client.data + .referenceCreator() + .withId(id2) + .withReferenceProperty('refProp') + .withConsistencyLevel('ONE') + .withReference(client.data.referencePayloadBuilder().withId(id1).payload()) + .do() + .catch((e) => fail('it should not have errord: ' + e)); + + await client.data + .getterById() + .withClassName(refSourceClassName) + .withId(id2) + .do() + .then((res) => { + expect(res).toEqual( + expect.objectContaining({ + id: id2, + properties: { + refProp: [ + { + beacon: `weaviate://localhost/DataJourneyTestThing/${id1}`, + href: `/v1/objects/DataJourneyTestThing/${id1}`, + }, + ], + }, + }) + ); + }) + .catch((e) => fail('it should not have errord: ' + e)); + + return client.data + .referenceDeleter() + .withId(id2) + .withReferenceProperty('refProp') + .withConsistencyLevel('ONE') + .withReference(client.data.referencePayloadBuilder().withId(id1).payload()) + .do() + .catch((e) => fail('it should not have errord: ' + e)); + }); + + it('checks an object exists with consistency_level set', async () => { + const id = 'e7c7f6d5-4c9d-4a4e-8e1b-9d3d5a0e4d9f'; + const props = { stringProp: 'foobar' }; + + await client.data + .creator() + .withClassName(thingClassName) + .withProperties(props) + .withId(id) + .do() + .then((res) => { + expect(res.properties).toEqual(props); + expect(res.id).toEqual(id); + }) + .catch((e) => fail('it should not have errord: ' + e)); + + return client.data + .checker() + .withId(id) + .withConsistencyLevel('QUORUM') + .do() + .then((exists) => { + expect(exists).toBe(true); + }) + .catch((e) => fail('it should not have errord: ' + e)); + }); + + it('tears down and cleans up', () => { + return Promise.all([ + client.schema.classDeleter().withClassName(thingClassName).do(), + client.schema.classDeleter().withClassName(refSourceClassName).do(), + client.schema.classDeleter().withClassName(classCustomVectorClassName).do(), + ]); + }); +}); + +describe('uuid support', () => { + const client = weaviate.client({ + scheme: 'http', + host: 'localhost:8080', + }); + + it('creates class with properties of uuid and uuid[]', async () => { + const className = 'ClassUUID'; + const id = 'abefd256-8574-442b-9293-9205193737ee'; + + await client.schema + .classCreator() + .withClass({ + class: className, + properties: [ + { + dataType: ['uuid'], + name: 'uuidProp', + }, + { + dataType: ['uuid[]'], + name: 'uuidArrayProp', + }, + ], + }) + .do() + .then((res: WeaviateClass) => { + expect(res).toBeTruthy(); + }); + + await client.data + .creator() + .withClassName(className) + .withId(id) + .withProperties({ + uuidProp: '7aaa79d3-a564-45db-8fa8-c49e20b8a39a', + uuidArrayProp: ['f70512a3-26cb-4ae4-9369-204555917f15', '9e516f40-fd54-4083-a476-f4675b2b5f92'], + }) + .do() + .then((res: WeaviateObject) => { + expect(res).toBeTruthy(); + }); + + await client.data + .getterById() + .withId(id) + .withClassName(className) + .do() + .then((res: WeaviateObject) => { + expect(res).toBeTruthy(); + expect(res.properties).toHaveProperty('uuidProp', '7aaa79d3-a564-45db-8fa8-c49e20b8a39a'); + expect(res.properties).toHaveProperty('uuidArrayProp', [ + 'f70512a3-26cb-4ae4-9369-204555917f15', + '9e516f40-fd54-4083-a476-f4675b2b5f92', + ]); + }); + + return client.schema + .classDeleter() + .withClassName(className) + .do() + .then((res: void) => { + expect(res).toEqual(undefined); + }); + }); +}); + +describe('multi tenancy', () => { + const client = weaviate.client({ + scheme: 'http', + host: 'localhost:8080', + }); + + const documentClassName = 'Document'; + const document: WeaviateClass = { + class: documentClassName, + properties: [ + { + name: 'tenant', + dataType: ['text'], + }, + { + name: 'title', + dataType: ['text'], + }, + ], + multiTenancyConfig: { enabled: true }, + }; + + const passageClassName = 'Passage'; + const passage: WeaviateClass = { + class: passageClassName, + properties: [ + { + name: 'tenant', + dataType: ['text'], + }, + { + name: 'content', + dataType: ['text'], + }, + { + name: 'ofDocument', + dataType: [documentClassName], + }, + ], + multiTenancyConfig: { enabled: true }, + }; + + const tenants: Array = [{ name: 'tenantA' }, { name: 'tenantB' }, { name: 'tenantC' }]; + const documentIDs = [ + '00000000-0000-0000-0000-000000000011', + '00000000-0000-0000-0000-000000000022', + '00000000-0000-0000-0000-000000000033', + ]; + const documentTitles = ['GAN', 'OpenAI', 'SpaceX']; + const passageIDs = [ + '00000000-0000-0000-0000-000000000001', + '00000000-0000-0000-0000-000000000002', + '00000000-0000-0000-0000-000000000003', + ]; + const txts = [ + 'A generative adversarial network (GAN) is a class of machine learning frameworks designed by Ian Goodfellow and his colleagues in June 2014.', + 'OpenAI is an American artificial intelligence (AI) research laboratory consisting of the non-profit OpenAI Incorporated and its for-profit subsidiary corporation OpenAI Limited Partnership.', + 'The Space Exploration Technologies Corporation, commonly referred to as SpaceX is an American spacecraft manufacturer, launcher, and satellite communications company headquartered in Hawthorne, California.', + ]; + + it('create Document and Passage class with tenants', async () => { + await client.schema + .classCreator() + .withClass(document) + .do() + .then() + .catch((e) => fail('it should not have errord: ' + e)); + + await client.schema + .tenantsCreator(documentClassName, tenants) + .do() + .then((res) => expect(res).toHaveLength(3)) + .catch((e) => fail('it should not have errord: ' + e)); + + await client.schema + .classCreator() + .withClass(passage) + .do() + .then() + .catch((e) => fail('it should not have errord: ' + e)); + + return client.schema + .tenantsCreator(passageClassName, tenants) + .do() + .then((res) => expect(res).toHaveLength(3)) + .catch((e) => fail('it should not have errord: ' + e)); + }); + + it('inserts Documents tenants objects', async () => { + const expectFn = expect; + for (let i = 0; i < documentIDs.length; i++) { + client.data + .creator() + .withClassName(documentClassName) + .withId(documentIDs[i]) + .withTenant(tenants[i].name!) + .withProperties({ + title: documentTitles[i], + tenant: tenants[i].name, + }) + .do() + .then((r) => { + expectFn(r.id).toEqual(documentIDs[i]); + }) + .catch((e) => { + throw new Error('it should not have errored: ' + e); + }); + } + + await client.data + .creator() + .withClassName(passageClassName) + .withId(passageIDs[0]) + .withTenant(tenants[0].name!) + .withProperties({ + content: txts[0], + tenant: tenants[0].name, + }) + .do() + .then((r) => { + expectFn(r.id).toEqual(passageIDs[0]); + }) + .catch((e) => { + throw new Error('it should not have errored: ' + e); + }); + + await client.data + .creator() + .withClassName(passageClassName) + .withId(passageIDs[1]) + .withTenant(tenants[1].name!) + .withProperties({ + content: txts[1], + tenant: tenants[1].name, + }) + .do() + .then((r) => { + expectFn(r.id).toEqual(passageIDs[1]); + }) + .catch((e) => { + throw new Error('it should not have errored: ' + e); + }); + + return client.data + .creator() + .withClassName(passageClassName) + .withId(passageIDs[2]) + .withTenant(tenants[2].name!) + .withProperties({ + content: txts[2], + tenant: tenants[2].name, + }) + .do() + .then((r) => { + expectFn(r.id).toEqual(passageIDs[2]); + }) + .catch((e) => { + throw new Error('it should not have errored: ' + e); + }); + }); + + it('exists Passage tenants objects', () => { + return client.data + .checker() + .withClassName(passageClassName) + .withId(passageIDs[0]) + .withTenant(tenants[0].name!) + .do() + .then((r) => { + expect(r).toBe(true); + }) + .catch((e) => { + throw new Error('it should not have errored: ' + e); + }); + }); + + it('replaces Passage object', () => { + return client.data + .updater() + .withClassName(passageClassName) + .withId(passageIDs[0]) + .withTenant(tenants[0].name!) + .withProperties({ + content: 'some new content', + tenant: tenants[0].name, + }) + .do() + .then((r) => { + expect(r.id).toEqual(passageIDs[0]); + expect(r.properties.content).toEqual('some new content'); + }) + .catch((e) => { + console.log(`error: ${e}`); + throw new Error('it should not have errored: ' + e); + }); + }); + + it('gets by id a Passage object', () => { + return client.data + .getterById() + .withClassName(passageClassName) + .withId(passageIDs[0]) + .withTenant(tenants[0].name!) + .do() + .then((r) => { + expect(r.id).toEqual(passageIDs[0]); + expect(r.properties!.content).toEqual('some new content'); + }) + .catch((e) => { + throw new Error('it should not have errored: ' + e); + }); + }); + + it('adds a referene Passage object', () => { + return client.data + .referenceCreator() + .withId(passageIDs[0]) + .withClassName(passageClassName) + .withReferenceProperty('ofDocument') + .withReference( + client.data + .referencePayloadBuilder() + .withId(documentIDs[0]) + .withClassName(documentClassName) + .payload() + ) + .withTenant(tenants[0].name!) + .do() + .catch((e: WeaviateError) => { + throw new Error('it should not have errord: ' + e); + }); + }); + + it('gets by id a Passage object with reference', () => { + return client.data + .getterById() + .withClassName(passageClassName) + .withId(passageIDs[0]) + .withTenant(tenants[0].name!) + .do() + .then((r) => { + expect(r.id).toEqual(passageIDs[0]); + expect(r.properties!.ofDocument).toHaveLength(1); + }) + .catch((e) => { + throw new Error('it should not have errored: ' + e); + }); + }); + + it('removes a referene Passage object', () => { + return client.data + .referenceDeleter() + .withId(passageIDs[0]) + .withClassName(passageClassName) + .withReferenceProperty('ofDocument') + .withReference( + client.data + .referencePayloadBuilder() + .withId(documentIDs[0]) + .withClassName(documentClassName) + .payload() + ) + .withTenant(tenants[0].name!) + .do() + .catch((e: WeaviateError) => { + throw new Error('it should not have errord: ' + e); + }); + }); + + it('gets by id a Passage object with no reference', () => { + return client.data + .getterById() + .withClassName(passageClassName) + .withId(passageIDs[0]) + .withTenant(tenants[0].name!) + .do() + .then((r) => { + expect(r.id).toEqual(passageIDs[0]); + expect(r.properties!.ofDocument).toHaveLength(0); + }) + .catch((e) => { + throw new Error('it should not have errored: ' + e); + }); + }); + + it('delete Passage class', () => { + return client.schema.classDeleter().withClassName(passageClassName).do(); + }); + + it('delete Document class', () => { + return client.schema.classDeleter().withClassName(documentClassName).do(); + }); +}); + +const setup = async (client: WeaviateClient) => { + const thing: WeaviateClass = { + class: thingClassName, + properties: [ + { + name: 'stringProp', + dataType: ['string'], + }, + { + name: 'intProp', + dataType: ['int'], + }, + { + name: 'objectProp', + dataType: ['object'], + nestedProperties: [ + { + name: 'nestedInt', + dataType: ['int'], + }, + { + name: 'nestedNumber', + dataType: ['number'], + }, + { + name: 'nestedText', + dataType: ['text'], + }, + { + name: 'nestedObjects', + dataType: ['object[]'], + nestedProperties: [ + { + name: 'nestedBoolLvl2', + dataType: ['boolean'], + }, + { + name: 'nestedDateLvl2', + dataType: ['date'], + }, + { + name: 'nestedNumbersLvl2', + dataType: ['number[]'], + }, + ], + }, + ], + }, + ], + }; + + await Promise.all([client.schema.classCreator().withClass(thing).do()]); + + const classCustomVector = { + class: classCustomVectorClassName, + vectorizer: 'none', + properties: [ + { + name: 'foo', + dataType: ['string'], + }, + ], + }; + + await Promise.all([client.schema.classCreator().withClass(classCustomVector).do()]); + + const refSource = { + class: refSourceClassName, + properties: [ + { + name: 'refProp', + dataType: [thingClassName], + cardinality: 'many', + }, + ], + }; + + return client.schema.classCreator().withClass(refSource).do(); +}; diff --git a/src/data/merger.ts b/packages/core/src/v2/data/merger.ts similarity index 87% rename from src/data/merger.ts rename to packages/core/src/v2/data/merger.ts index 2d62024f..0714fe64 100644 --- a/src/data/merger.ts +++ b/packages/core/src/v2/data/merger.ts @@ -1,7 +1,7 @@ -import Connection from '../connection/index.js'; -import { Properties, WeaviateObject } from '../openapi/types.js'; -import { CommandBase } from '../validation/commandBase.js'; -import { isValidStringProperty } from '../validation/string.js'; +import Connection from '../../connection/index.js'; +import { Properties, WeaviateObject } from '../../openapi/types.js'; +import { CommandBase } from '../../validation/commandBase.js'; +import { isValidStringProperty } from '../../validation/string.js'; import { ObjectsPath } from './path.js'; import { ConsistencyLevel } from './replication.js'; diff --git a/src/data/path.ts b/packages/core/src/v2/data/path.ts similarity index 97% rename from src/data/path.ts rename to packages/core/src/v2/data/path.ts index 871c33d4..a5250a43 100644 --- a/src/data/path.ts +++ b/packages/core/src/v2/data/path.ts @@ -1,6 +1,6 @@ -import { DbVersionSupport } from '../utils/dbVersion.js'; -import { isValidStringProperty } from '../validation/string.js'; -import { isValidWeaviateVersion } from '../validation/version.js'; +import { DbVersionSupport } from '../../utils/dbVersion.js'; +import { isValidStringProperty } from '../../validation/string.js'; +import { isValidWeaviateVersion } from '../../validation/version.js'; import { ConsistencyLevel } from './replication.js'; const objectsPathPrefix = '/objects'; diff --git a/src/data/referenceCreator.ts b/packages/core/src/v2/data/referenceCreator.ts similarity index 90% rename from src/data/referenceCreator.ts rename to packages/core/src/v2/data/referenceCreator.ts index b99888e7..8788d28b 100644 --- a/src/data/referenceCreator.ts +++ b/packages/core/src/v2/data/referenceCreator.ts @@ -1,7 +1,7 @@ -import Connection from '../connection/index.js'; -import { Reference } from '../openapi/types.js'; -import { BeaconPath } from '../utils/beaconPath.js'; -import { CommandBase } from '../validation/commandBase.js'; +import Connection from '../../connection/index.js'; +import { Reference } from '../../openapi/types.js'; +import { BeaconPath } from '../../utils/beaconPath.js'; +import { CommandBase } from '../../validation/commandBase.js'; import { ReferencesPath } from './path.js'; import { ConsistencyLevel } from './replication.js'; diff --git a/src/data/referenceDeleter.ts b/packages/core/src/v2/data/referenceDeleter.ts similarity index 90% rename from src/data/referenceDeleter.ts rename to packages/core/src/v2/data/referenceDeleter.ts index 667e5e10..9d08da6c 100644 --- a/src/data/referenceDeleter.ts +++ b/packages/core/src/v2/data/referenceDeleter.ts @@ -1,7 +1,7 @@ -import Connection from '../connection/index.js'; -import { Reference } from '../openapi/types.js'; -import { BeaconPath } from '../utils/beaconPath.js'; -import { CommandBase } from '../validation/commandBase.js'; +import Connection from '../../connection/index.js'; +import { Reference } from '../../openapi/types.js'; +import { BeaconPath } from '../../utils/beaconPath.js'; +import { CommandBase } from '../../validation/commandBase.js'; import { ReferencesPath } from './path.js'; import { ConsistencyLevel } from './replication.js'; diff --git a/src/data/referencePayloadBuilder.ts b/packages/core/src/v2/data/referencePayloadBuilder.ts similarity index 82% rename from src/data/referencePayloadBuilder.ts rename to packages/core/src/v2/data/referencePayloadBuilder.ts index 6822d7c0..9c91152c 100644 --- a/src/data/referencePayloadBuilder.ts +++ b/packages/core/src/v2/data/referencePayloadBuilder.ts @@ -1,7 +1,7 @@ -import Connection from '../connection/index.js'; -import { Reference } from '../openapi/types.js'; -import { CommandBase } from '../validation/commandBase.js'; -import { isValidStringProperty } from '../validation/string.js'; +import Connection from '../../connection/index.js'; +import { Reference } from '../../openapi/types.js'; +import { CommandBase } from '../../validation/commandBase.js'; +import { isValidStringProperty } from '../../validation/string.js'; export default class ReferencePayloadBuilder extends CommandBase { private className?: string; diff --git a/src/data/referenceReplacer.ts b/packages/core/src/v2/data/referenceReplacer.ts similarity index 91% rename from src/data/referenceReplacer.ts rename to packages/core/src/v2/data/referenceReplacer.ts index 98b2e29d..f694e309 100644 --- a/src/data/referenceReplacer.ts +++ b/packages/core/src/v2/data/referenceReplacer.ts @@ -1,7 +1,7 @@ -import Connection from '../connection/index.js'; -import { Reference } from '../openapi/types.js'; -import { BeaconPath } from '../utils/beaconPath.js'; -import { CommandBase } from '../validation/commandBase.js'; +import Connection from '../../connection/index.js'; +import { Reference } from '../../openapi/types.js'; +import { BeaconPath } from '../../utils/beaconPath.js'; +import { CommandBase } from '../../validation/commandBase.js'; import { ReferencesPath } from './path.js'; import { ConsistencyLevel } from './replication.js'; diff --git a/packages/core/src/v2/data/replication.ts b/packages/core/src/v2/data/replication.ts new file mode 100644 index 00000000..67600eb6 --- /dev/null +++ b/packages/core/src/v2/data/replication.ts @@ -0,0 +1 @@ +export type ConsistencyLevel = 'ALL' | 'ONE' | 'QUORUM'; diff --git a/src/data/updater.ts b/packages/core/src/v2/data/updater.ts similarity index 90% rename from src/data/updater.ts rename to packages/core/src/v2/data/updater.ts index 39cf0365..9fb27377 100644 --- a/src/data/updater.ts +++ b/packages/core/src/v2/data/updater.ts @@ -1,7 +1,7 @@ -import Connection from '../connection/index.js'; -import { Properties, WeaviateObject } from '../openapi/types.js'; -import { CommandBase } from '../validation/commandBase.js'; -import { isValidStringProperty } from '../validation/string.js'; +import Connection from '../../connection/index.js'; +import { Properties, WeaviateObject } from '../../openapi/types.js'; +import { CommandBase } from '../../validation/commandBase.js'; +import { isValidStringProperty } from '../../validation/string.js'; import { ObjectsPath } from './path.js'; import { ConsistencyLevel } from './replication.js'; diff --git a/src/data/validator.ts b/packages/core/src/v2/data/validator.ts similarity index 82% rename from src/data/validator.ts rename to packages/core/src/v2/data/validator.ts index ff6e6d34..e18ea674 100644 --- a/src/data/validator.ts +++ b/packages/core/src/v2/data/validator.ts @@ -1,7 +1,7 @@ -import Connection from '../connection/index.js'; -import { Properties } from '../openapi/types.js'; -import { CommandBase } from '../validation/commandBase.js'; -import { isValidStringProperty } from '../validation/string.js'; +import Connection from '../../connection/index.js'; +import { Properties } from '../../openapi/types.js'; +import { CommandBase } from '../../validation/commandBase.js'; +import { isValidStringProperty } from '../../validation/string.js'; export default class Validator extends CommandBase { private className?: string; diff --git a/src/graphql/aggregator.ts b/packages/core/src/v2/graphql/aggregator.ts similarity index 96% rename from src/graphql/aggregator.ts rename to packages/core/src/v2/graphql/aggregator.ts index 1ec2b838..f46a705a 100644 --- a/src/graphql/aggregator.ts +++ b/packages/core/src/v2/graphql/aggregator.ts @@ -1,7 +1,7 @@ -import Connection from '../connection/index.js'; -import { WhereFilter } from '../openapi/types.js'; -import { CommandBase } from '../validation/commandBase.js'; -import { isValidPositiveIntProperty } from '../validation/number.js'; +import Connection from '../../connection/index.js'; +import { WhereFilter } from '../../openapi/types.js'; +import { CommandBase } from '../../validation/commandBase.js'; +import { isValidPositiveIntProperty } from '../../validation/number.js'; import Hybrid, { HybridArgs } from './hybrid.js'; import NearMedia, { NearAudioArgs, diff --git a/src/graphql/ask.ts b/packages/core/src/v2/graphql/ask.ts similarity index 100% rename from src/graphql/ask.ts rename to packages/core/src/v2/graphql/ask.ts diff --git a/src/graphql/bm25.ts b/packages/core/src/v2/graphql/bm25.ts similarity index 100% rename from src/graphql/bm25.ts rename to packages/core/src/v2/graphql/bm25.ts diff --git a/src/graphql/explorer.ts b/packages/core/src/v2/graphql/explorer.ts similarity index 97% rename from src/graphql/explorer.ts rename to packages/core/src/v2/graphql/explorer.ts index 6854b1d6..683c787c 100644 --- a/src/graphql/explorer.ts +++ b/packages/core/src/v2/graphql/explorer.ts @@ -1,5 +1,5 @@ -import Connection from '../connection/index.js'; -import { CommandBase } from '../validation/commandBase.js'; +import Connection from '../../connection/index.js'; +import { CommandBase } from '../../validation/commandBase.js'; import Ask, { AskArgs } from './ask.js'; import NearImage, { NearImageArgs } from './nearImage.js'; import NearMedia, { diff --git a/src/graphql/generate.ts b/packages/core/src/v2/graphql/generate.ts similarity index 100% rename from src/graphql/generate.ts rename to packages/core/src/v2/graphql/generate.ts diff --git a/test/graphql/mock.test.ts b/packages/core/src/v2/graphql/getter.test.ts similarity index 99% rename from test/graphql/mock.test.ts rename to packages/core/src/v2/graphql/getter.test.ts index d047fe29..3a74bf63 100644 --- a/test/graphql/mock.test.ts +++ b/packages/core/src/v2/graphql/getter.test.ts @@ -1,12 +1,12 @@ import { describe, expect, test, vi } from 'vitest'; -import Getter, { FusionType } from '../../src/graphql//getter.js'; -import { NearImageArgs } from '../../src/graphql//nearImage.js'; -import { NearObjectArgs } from '../../src/graphql//nearObject.js'; -import { NearTextArgs } from '../../src/graphql//nearText.js'; -import { SortArgs } from '../../src/graphql//sort.js'; -import { AskArgs } from '../../src/graphql/ask.js'; -import Raw from '../../src/graphql/raw.js'; -import { WhereFilter } from '../../src/openapi/types.js'; +import { WhereFilter } from '../../openapi/types.js'; +import { NearImageArgs } from '..//graphql//nearImage.js'; +import { NearObjectArgs } from '..//graphql//nearObject.js'; +import { NearTextArgs } from '..//graphql//nearText.js'; +import { SortArgs } from '..//graphql//sort.js'; +import { AskArgs } from '..//graphql/ask.js'; +import Raw from '..//graphql/raw.js'; +import Getter, { FusionType } from '../graphql//getter.js'; test('a simple query without params', () => { const mockClient: any = { diff --git a/src/graphql/getter.ts b/packages/core/src/v2/graphql/getter.ts similarity index 97% rename from src/graphql/getter.ts rename to packages/core/src/v2/graphql/getter.ts index 1f57d209..690b22b5 100644 --- a/src/graphql/getter.ts +++ b/packages/core/src/v2/graphql/getter.ts @@ -1,7 +1,7 @@ -import Connection from '../connection/index.js'; -import { ConsistencyLevel } from '../data/index.js'; -import { WhereFilter } from '../openapi/types.js'; -import { CommandBase } from '../validation/commandBase.js'; +import Connection from '../../connection/index.js'; +import { WhereFilter } from '../../openapi/types.js'; +import { CommandBase } from '../../validation/commandBase.js'; +import { ConsistencyLevel } from '../data/replication.js'; import Ask, { AskArgs } from './ask.js'; import Bm25, { Bm25Args } from './bm25.js'; import { GenerateArgs, GraphQLGenerate } from './generate.js'; diff --git a/src/graphql/group.ts b/packages/core/src/v2/graphql/group.ts similarity index 100% rename from src/graphql/group.ts rename to packages/core/src/v2/graphql/group.ts diff --git a/src/graphql/groupBy.ts b/packages/core/src/v2/graphql/groupBy.ts similarity index 100% rename from src/graphql/groupBy.ts rename to packages/core/src/v2/graphql/groupBy.ts diff --git a/src/graphql/hybrid.ts b/packages/core/src/v2/graphql/hybrid.ts similarity index 100% rename from src/graphql/hybrid.ts rename to packages/core/src/v2/graphql/hybrid.ts diff --git a/src/graphql/index.ts b/packages/core/src/v2/graphql/index.ts similarity index 93% rename from src/graphql/index.ts rename to packages/core/src/v2/graphql/index.ts index 298ef296..ce0e6aa8 100644 --- a/src/graphql/index.ts +++ b/packages/core/src/v2/graphql/index.ts @@ -1,4 +1,4 @@ -import Connection from '../connection/index.js'; +import Connection from '../../connection/index.js'; import Aggregator from './aggregator.js'; import Explorer from './explorer.js'; import GraphQLGetter from './getter.js'; diff --git a/test/graphql/journey.test.ts b/packages/core/src/v2/graphql/journey.test.ts similarity index 99% rename from test/graphql/journey.test.ts rename to packages/core/src/v2/graphql/journey.test.ts index 791a4020..22947456 100644 --- a/test/graphql/journey.test.ts +++ b/packages/core/src/v2/graphql/journey.test.ts @@ -1,6 +1,5 @@ /* eslint-disable @typescript-eslint/no-non-null-assertion */ import { beforeEach, describe, expect, it, test } from 'vitest'; -import { FusionType } from '../../src/graphql/hybrid.js'; import weaviate, { Meta, Reference, @@ -11,7 +10,8 @@ import weaviate, { WeaviateError, WeaviateObject, WhereFilter, -} from '../../src/v2/index.js'; +} from '../../v2/index.js'; +import { FusionType } from '../graphql/hybrid.js'; describe('the graphql journey', () => { let client: WeaviateClient; diff --git a/src/graphql/nearImage.ts b/packages/core/src/v2/graphql/nearImage.ts similarity index 100% rename from src/graphql/nearImage.ts rename to packages/core/src/v2/graphql/nearImage.ts diff --git a/src/graphql/nearMedia.ts b/packages/core/src/v2/graphql/nearMedia.ts similarity index 100% rename from src/graphql/nearMedia.ts rename to packages/core/src/v2/graphql/nearMedia.ts diff --git a/src/graphql/nearObject.ts b/packages/core/src/v2/graphql/nearObject.ts similarity index 100% rename from src/graphql/nearObject.ts rename to packages/core/src/v2/graphql/nearObject.ts diff --git a/src/graphql/nearText.ts b/packages/core/src/v2/graphql/nearText.ts similarity index 100% rename from src/graphql/nearText.ts rename to packages/core/src/v2/graphql/nearText.ts diff --git a/src/graphql/nearVector.ts b/packages/core/src/v2/graphql/nearVector.ts similarity index 100% rename from src/graphql/nearVector.ts rename to packages/core/src/v2/graphql/nearVector.ts diff --git a/src/graphql/raw.ts b/packages/core/src/v2/graphql/raw.ts similarity index 88% rename from src/graphql/raw.ts rename to packages/core/src/v2/graphql/raw.ts index 689328c7..b68619cc 100644 --- a/src/graphql/raw.ts +++ b/packages/core/src/v2/graphql/raw.ts @@ -1,5 +1,5 @@ -import Connection from '../connection/index.js'; -import { CommandBase } from '../validation/commandBase.js'; +import Connection from '../../connection/index.js'; +import { CommandBase } from '../../validation/commandBase.js'; export default class RawGraphQL extends CommandBase { private query?: string; diff --git a/src/graphql/sort.ts b/packages/core/src/v2/graphql/sort.ts similarity index 100% rename from src/graphql/sort.ts rename to packages/core/src/v2/graphql/sort.ts diff --git a/src/graphql/where.ts b/packages/core/src/v2/graphql/where.ts similarity index 98% rename from src/graphql/where.ts rename to packages/core/src/v2/graphql/where.ts index 17531098..cdbc9235 100644 --- a/src/graphql/where.ts +++ b/packages/core/src/v2/graphql/where.ts @@ -1,4 +1,4 @@ -import { WhereFilter } from '../openapi/types.js'; +import { WhereFilter } from '../../openapi/types.js'; export default class GraphQLWhere { private operands?: string; diff --git a/src/v2/index.ts b/packages/core/src/v2/index.ts similarity index 70% rename from src/v2/index.ts rename to packages/core/src/v2/index.ts index 57c0e51b..79561ccc 100644 --- a/src/v2/index.ts +++ b/packages/core/src/v2/index.ts @@ -1,8 +1,3 @@ -import backup, { Backup } from '../backup/index.js'; -import batch, { Batch } from '../batch/index.js'; -import c11y, { C11y } from '../c11y/index.js'; -import classifications, { Classifications } from '../classifications/index.js'; -import cluster, { Cluster } from '../cluster/index.js'; import { ApiKey, AuthAccessTokenCredentials, @@ -11,12 +6,17 @@ import { OidcAuthenticator, } from '../connection/auth.js'; import { ConnectionGQL, InternalConnectionParams as ConnectionParams } from '../connection/index.js'; -import data, { Data } from '../data/index.js'; -import graphql, { GraphQL } from '../graphql/index.js'; -import misc, { Misc } from '../misc/index.js'; -import MetaGetter from '../misc/metaGetter.js'; -import schema, { Schema } from '../schema/index.js'; import { DbVersionProvider, DbVersionSupport } from '../utils/dbVersion.js'; +import backup, { Backup } from './backup/index.js'; +import batch, { Batch } from './batch/index.js'; +import c11y, { C11y } from './c11y/index.js'; +import classifications, { Classifications } from './classifications/index.js'; +import cluster, { Cluster } from './cluster/index.js'; +import data, { Data } from './data/index.js'; +import graphql, { GraphQL } from './graphql/index.js'; +import misc, { Misc } from './misc/index.js'; +import MetaGetter from './misc/metaGetter.js'; +import schema, { Schema } from './schema/index.js'; export interface WeaviateClient { graphql: GraphQL; @@ -82,16 +82,16 @@ function initDbVersionProvider(conn: ConnectionGQL) { } export default app; -export * from '../backup/index.js'; -export * from '../batch/index.js'; -export * from '../c11y/index.js'; -export * from '../classifications/index.js'; -export * from '../cluster/index.js'; export * from '../connection/index.js'; -export * from '../data/index.js'; -export * from '../graphql/index.js'; -export * from '../misc/index.js'; export * from '../openapi/types.js'; -export * from '../schema/index.js'; export * from '../utils/base64.js'; export * from '../utils/uuid.js'; +export * from './backup/index.js'; +export * from './batch/index.js'; +export * from './c11y/index.js'; +export * from './classifications/index.js'; +export * from './cluster/index.js'; +export * from './data/index.js'; +export * from './graphql/index.js'; +export * from './misc/index.js'; +export * from './schema/index.js'; diff --git a/src/misc/index.ts b/packages/core/src/v2/misc/index.ts similarity index 90% rename from src/misc/index.ts rename to packages/core/src/v2/misc/index.ts index ffe68035..c97fff75 100644 --- a/src/misc/index.ts +++ b/packages/core/src/v2/misc/index.ts @@ -1,5 +1,5 @@ -import Connection from '../connection/index.js'; -import { DbVersionProvider } from '../utils/dbVersion.js'; +import Connection from '../../connection/index.js'; +import { DbVersionProvider } from '../../utils/dbVersion.js'; import LiveChecker from './liveChecker.js'; import MetaGetter from './metaGetter.js'; import OpenidConfigurationGetter from './openidConfigurationGetter.js'; diff --git a/test/misc/journey.test.ts b/packages/core/src/v2/misc/journey.test.ts similarity index 98% rename from test/misc/journey.test.ts rename to packages/core/src/v2/misc/journey.test.ts index a377d527..6800dc02 100644 --- a/test/misc/journey.test.ts +++ b/packages/core/src/v2/misc/journey.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest'; -import weaviate from '../../src/v2/index.js'; +import weaviate from '../../v2/index.js'; describe('misc endpoints', () => { const client = weaviate.client({ diff --git a/src/misc/liveChecker.ts b/packages/core/src/v2/misc/liveChecker.ts similarity index 75% rename from src/misc/liveChecker.ts rename to packages/core/src/v2/misc/liveChecker.ts index efc172f8..ea88f939 100644 --- a/src/misc/liveChecker.ts +++ b/packages/core/src/v2/misc/liveChecker.ts @@ -1,6 +1,6 @@ -import Connection from '../connection/index.js'; -import { DbVersionProvider } from '../utils/dbVersion.js'; -import { CommandBase } from '../validation/commandBase.js'; +import Connection from '../../connection/index.js'; +import { DbVersionProvider } from '../../utils/dbVersion.js'; +import { CommandBase } from '../../validation/commandBase.js'; export default class LiveChecker extends CommandBase { private dbVersionProvider: DbVersionProvider; diff --git a/src/misc/metaGetter.ts b/packages/core/src/v2/misc/metaGetter.ts similarity index 59% rename from src/misc/metaGetter.ts rename to packages/core/src/v2/misc/metaGetter.ts index 9c020da4..f483beb0 100644 --- a/src/misc/metaGetter.ts +++ b/packages/core/src/v2/misc/metaGetter.ts @@ -1,6 +1,6 @@ -import Connection from '../connection/index.js'; -import { Meta } from '../openapi/types.js'; -import { CommandBase } from '../validation/commandBase.js'; +import Connection from '../../connection/index.js'; +import { Meta } from '../../openapi/types.js'; +import { CommandBase } from '../../validation/commandBase.js'; export default class MetaGetter extends CommandBase { constructor(client: Connection) { diff --git a/src/misc/openidConfigurationGetter.ts b/packages/core/src/v2/misc/openidConfigurationGetter.ts similarity index 91% rename from src/misc/openidConfigurationGetter.ts rename to packages/core/src/v2/misc/openidConfigurationGetter.ts index 8239243d..d3dfe2ae 100644 --- a/src/misc/openidConfigurationGetter.ts +++ b/packages/core/src/v2/misc/openidConfigurationGetter.ts @@ -1,4 +1,4 @@ -import { HttpClient } from '../connection/http.js'; +import { HttpClient } from '../../connection/http.js'; export default class OpenidConfigurationGetterGetter { private client: HttpClient; diff --git a/src/misc/readyChecker.ts b/packages/core/src/v2/misc/readyChecker.ts similarity index 75% rename from src/misc/readyChecker.ts rename to packages/core/src/v2/misc/readyChecker.ts index 8831f6c5..74f5b774 100644 --- a/src/misc/readyChecker.ts +++ b/packages/core/src/v2/misc/readyChecker.ts @@ -1,6 +1,6 @@ -import Connection from '../connection/index.js'; -import { DbVersionProvider } from '../utils/dbVersion.js'; -import { CommandBase } from '../validation/commandBase.js'; +import Connection from '../../connection/index.js'; +import { DbVersionProvider } from '../../utils/dbVersion.js'; +import { CommandBase } from '../../validation/commandBase.js'; export default class ReadyChecker extends CommandBase { private dbVersionProvider: DbVersionProvider; diff --git a/src/schema/classCreator.ts b/packages/core/src/v2/schema/classCreator.ts similarity index 81% rename from src/schema/classCreator.ts rename to packages/core/src/v2/schema/classCreator.ts index 7a74cb09..5148c967 100644 --- a/src/schema/classCreator.ts +++ b/packages/core/src/v2/schema/classCreator.ts @@ -1,6 +1,6 @@ -import Connection from '../connection/index.js'; -import { WeaviateClass } from '../openapi/types.js'; -import { CommandBase } from '../validation/commandBase.js'; +import Connection from '../../connection/index.js'; +import { WeaviateClass } from '../../openapi/types.js'; +import { CommandBase } from '../../validation/commandBase.js'; export default class ClassCreator extends CommandBase { private class!: WeaviateClass; diff --git a/src/schema/classDeleter.ts b/packages/core/src/v2/schema/classDeleter.ts similarity index 80% rename from src/schema/classDeleter.ts rename to packages/core/src/v2/schema/classDeleter.ts index 149c076b..5cff742e 100644 --- a/src/schema/classDeleter.ts +++ b/packages/core/src/v2/schema/classDeleter.ts @@ -1,6 +1,6 @@ -import Connection from '../connection/index.js'; -import { CommandBase } from '../validation/commandBase.js'; -import { isValidStringProperty } from '../validation/string.js'; +import Connection from '../../connection/index.js'; +import { CommandBase } from '../../validation/commandBase.js'; +import { isValidStringProperty } from '../../validation/string.js'; export default class ClassDeleter extends CommandBase { private className?: string; diff --git a/src/schema/classExists.ts b/packages/core/src/v2/schema/classExists.ts similarity index 77% rename from src/schema/classExists.ts rename to packages/core/src/v2/schema/classExists.ts index 114e440d..7e0ce50e 100644 --- a/src/schema/classExists.ts +++ b/packages/core/src/v2/schema/classExists.ts @@ -1,7 +1,7 @@ -import Connection from '../connection/index.js'; -import { WeaviateSchema } from '../openapi/types.js'; -import { CommandBase } from '../validation/commandBase.js'; -import { isValidStringProperty } from '../validation/string.js'; +import Connection from '../../connection/index.js'; +import { WeaviateSchema } from '../../openapi/types.js'; +import { CommandBase } from '../../validation/commandBase.js'; +import { isValidStringProperty } from '../../validation/string.js'; export default class ClassExists extends CommandBase { private className?: string; diff --git a/src/schema/classGetter.ts b/packages/core/src/v2/schema/classGetter.ts similarity index 75% rename from src/schema/classGetter.ts rename to packages/core/src/v2/schema/classGetter.ts index 80e329e9..a4e90e2f 100644 --- a/src/schema/classGetter.ts +++ b/packages/core/src/v2/schema/classGetter.ts @@ -1,7 +1,7 @@ -import Connection from '../connection/index.js'; -import { WeaviateClass } from '../openapi/types.js'; -import { CommandBase } from '../validation/commandBase.js'; -import { isValidStringProperty } from '../validation/string.js'; +import Connection from '../../connection/index.js'; +import { WeaviateClass } from '../../openapi/types.js'; +import { CommandBase } from '../../validation/commandBase.js'; +import { isValidStringProperty } from '../../validation/string.js'; export default class ClassGetter extends CommandBase { private className?: string; diff --git a/src/schema/classUpdater.ts b/packages/core/src/v2/schema/classUpdater.ts similarity index 81% rename from src/schema/classUpdater.ts rename to packages/core/src/v2/schema/classUpdater.ts index 2c0ebb4d..70b2a2ad 100644 --- a/src/schema/classUpdater.ts +++ b/packages/core/src/v2/schema/classUpdater.ts @@ -1,6 +1,6 @@ -import Connection from '../connection/index.js'; -import { WeaviateClass } from '../openapi/types.js'; -import { CommandBase } from '../validation/commandBase.js'; +import Connection from '../../connection/index.js'; +import { WeaviateClass } from '../../openapi/types.js'; +import { CommandBase } from '../../validation/commandBase.js'; export default class ClassUpdater extends CommandBase { private class!: WeaviateClass; diff --git a/src/schema/deleteAll.ts b/packages/core/src/v2/schema/deleteAll.ts similarity index 89% rename from src/schema/deleteAll.ts rename to packages/core/src/v2/schema/deleteAll.ts index 24f4ed90..b5445393 100644 --- a/src/schema/deleteAll.ts +++ b/packages/core/src/v2/schema/deleteAll.ts @@ -1,4 +1,4 @@ -import Connection from '../connection/index.js'; +import Connection from '../../connection/index.js'; import ClassDeleter from './classDeleter.js'; import SchemaGetter from './getter.js'; diff --git a/src/schema/getter.ts b/packages/core/src/v2/schema/getter.ts similarity index 69% rename from src/schema/getter.ts rename to packages/core/src/v2/schema/getter.ts index 3a43eccc..63cee0ed 100644 --- a/src/schema/getter.ts +++ b/packages/core/src/v2/schema/getter.ts @@ -1,6 +1,6 @@ -import Connection from '../connection/index.js'; -import { WeaviateSchema } from '../openapi/types.js'; -import { CommandBase } from '../validation/commandBase.js'; +import Connection from '../../connection/index.js'; +import { WeaviateSchema } from '../../openapi/types.js'; +import { CommandBase } from '../../validation/commandBase.js'; export default class SchemaGetter extends CommandBase { constructor(client: Connection) { diff --git a/src/schema/index.ts b/packages/core/src/v2/schema/index.ts similarity index 97% rename from src/schema/index.ts rename to packages/core/src/v2/schema/index.ts index 94e1db63..c7b463ab 100644 --- a/src/schema/index.ts +++ b/packages/core/src/v2/schema/index.ts @@ -1,5 +1,5 @@ -import Connection from '../connection/index.js'; -import { Tenant } from '../openapi/types.js'; +import Connection from '../../connection/index.js'; +import { Tenant } from '../../openapi/types.js'; import ClassCreator from './classCreator.js'; import ClassDeleter from './classDeleter.js'; import ClassExists from './classExists.js'; diff --git a/test/schema/journey.test.ts b/packages/core/src/v2/schema/journey.test.ts similarity index 99% rename from test/schema/journey.test.ts rename to packages/core/src/v2/schema/journey.test.ts index 8a977ae8..ea4155b0 100644 --- a/test/schema/journey.test.ts +++ b/packages/core/src/v2/schema/journey.test.ts @@ -1,14 +1,7 @@ /* eslint-disable @typescript-eslint/no-non-null-assertion */ import { describe, expect, it, test } from 'vitest'; -import { - Meta, - Property, - ShardStatus, - ShardStatusList, - Tenant, - WeaviateClass, -} from '../../src/openapi/types.js'; -import weaviate, { WeaviateClient } from '../../src/v2/index.js'; +import { Meta, Property, ShardStatus, ShardStatusList, Tenant, WeaviateClass } from '../../openapi/types.js'; +import weaviate, { WeaviateClient } from '../../v2/index.js'; const isVer = (client: WeaviateClient, minor: number, patch: number) => client.misc diff --git a/src/schema/propertyCreator.ts b/packages/core/src/v2/schema/propertyCreator.ts similarity index 82% rename from src/schema/propertyCreator.ts rename to packages/core/src/v2/schema/propertyCreator.ts index 4c1f2d82..a06eb9fc 100644 --- a/src/schema/propertyCreator.ts +++ b/packages/core/src/v2/schema/propertyCreator.ts @@ -1,7 +1,7 @@ -import Connection from '../connection/index.js'; -import { Property } from '../openapi/types.js'; -import { CommandBase } from '../validation/commandBase.js'; -import { isValidStringProperty } from '../validation/string.js'; +import Connection from '../../connection/index.js'; +import { Property } from '../../openapi/types.js'; +import { CommandBase } from '../../validation/commandBase.js'; +import { isValidStringProperty } from '../../validation/string.js'; export default class PropertyCreator extends CommandBase { private className!: string; diff --git a/src/schema/shardUpdater.ts b/packages/core/src/v2/schema/shardUpdater.ts similarity index 89% rename from src/schema/shardUpdater.ts rename to packages/core/src/v2/schema/shardUpdater.ts index dbebbdd9..87d12309 100644 --- a/src/schema/shardUpdater.ts +++ b/packages/core/src/v2/schema/shardUpdater.ts @@ -1,6 +1,6 @@ -import Connection from '../connection/index.js'; -import { CommandBase } from '../validation/commandBase.js'; -import { isValidStringProperty } from '../validation/string.js'; +import Connection from '../../connection/index.js'; +import { CommandBase } from '../../validation/commandBase.js'; +import { isValidStringProperty } from '../../validation/string.js'; export default class ShardUpdater extends CommandBase { private className!: string; diff --git a/src/schema/shardsGetter.ts b/packages/core/src/v2/schema/shardsGetter.ts similarity index 81% rename from src/schema/shardsGetter.ts rename to packages/core/src/v2/schema/shardsGetter.ts index bce06794..cb4e349d 100644 --- a/src/schema/shardsGetter.ts +++ b/packages/core/src/v2/schema/shardsGetter.ts @@ -1,7 +1,7 @@ -import Connection from '../connection/index.js'; -import { ShardStatusList } from '../openapi/types.js'; -import { CommandBase } from '../validation/commandBase.js'; -import { isValidStringProperty } from '../validation/string.js'; +import Connection from '../../connection/index.js'; +import { ShardStatusList } from '../../openapi/types.js'; +import { CommandBase } from '../../validation/commandBase.js'; +import { isValidStringProperty } from '../../validation/string.js'; export default class ShardsGetter extends CommandBase { private className?: string; diff --git a/src/schema/shardsUpdater.ts b/packages/core/src/v2/schema/shardsUpdater.ts similarity index 89% rename from src/schema/shardsUpdater.ts rename to packages/core/src/v2/schema/shardsUpdater.ts index 83b5ec5c..a55b7f14 100644 --- a/src/schema/shardsUpdater.ts +++ b/packages/core/src/v2/schema/shardsUpdater.ts @@ -1,7 +1,7 @@ -import Connection from '../connection/index.js'; -import { ShardStatusList } from '../openapi/types.js'; -import { CommandBase } from '../validation/commandBase.js'; -import { isValidStringProperty } from '../validation/string.js'; +import Connection from '../../connection/index.js'; +import { ShardStatusList } from '../../openapi/types.js'; +import { CommandBase } from '../../validation/commandBase.js'; +import { isValidStringProperty } from '../../validation/string.js'; import { updateShard } from './shardUpdater.js'; import { getShards } from './shardsGetter.js'; diff --git a/src/schema/tenantsCreator.ts b/packages/core/src/v2/schema/tenantsCreator.ts similarity index 74% rename from src/schema/tenantsCreator.ts rename to packages/core/src/v2/schema/tenantsCreator.ts index a2514738..115f13ff 100644 --- a/src/schema/tenantsCreator.ts +++ b/packages/core/src/v2/schema/tenantsCreator.ts @@ -1,6 +1,6 @@ -import Connection from '../connection/index.js'; -import { Tenant } from '../openapi/types.js'; -import { CommandBase } from '../validation/commandBase.js'; +import Connection from '../../connection/index.js'; +import { Tenant } from '../../openapi/types.js'; +import { CommandBase } from '../../validation/commandBase.js'; export default class TenantsCreator extends CommandBase { private className: string; diff --git a/src/schema/tenantsDeleter.ts b/packages/core/src/v2/schema/tenantsDeleter.ts similarity index 80% rename from src/schema/tenantsDeleter.ts rename to packages/core/src/v2/schema/tenantsDeleter.ts index c929265e..ccc312d3 100644 --- a/src/schema/tenantsDeleter.ts +++ b/packages/core/src/v2/schema/tenantsDeleter.ts @@ -1,5 +1,5 @@ -import Connection from '../connection/index.js'; -import { CommandBase } from '../validation/commandBase.js'; +import Connection from '../../connection/index.js'; +import { CommandBase } from '../../validation/commandBase.js'; export default class TenantsDeleter extends CommandBase { private className: string; diff --git a/src/schema/tenantsExists.ts b/packages/core/src/v2/schema/tenantsExists.ts similarity index 79% rename from src/schema/tenantsExists.ts rename to packages/core/src/v2/schema/tenantsExists.ts index 752d578a..2aae2312 100644 --- a/src/schema/tenantsExists.ts +++ b/packages/core/src/v2/schema/tenantsExists.ts @@ -1,5 +1,5 @@ -import Connection from '../connection/index.js'; -import { CommandBase } from '../validation/commandBase.js'; +import Connection from '../../connection/index.js'; +import { CommandBase } from '../../validation/commandBase.js'; export default class TenantsExists extends CommandBase { private className: string; diff --git a/src/schema/tenantsGetter.ts b/packages/core/src/v2/schema/tenantsGetter.ts similarity index 68% rename from src/schema/tenantsGetter.ts rename to packages/core/src/v2/schema/tenantsGetter.ts index 1733a4fa..ad9acd18 100644 --- a/src/schema/tenantsGetter.ts +++ b/packages/core/src/v2/schema/tenantsGetter.ts @@ -1,6 +1,6 @@ -import Connection from '../connection/index.js'; -import { Tenant } from '../openapi/types.js'; -import { CommandBase } from '../validation/commandBase.js'; +import Connection from '../../connection/index.js'; +import { Tenant } from '../../openapi/types.js'; +import { CommandBase } from '../../validation/commandBase.js'; export default class TenantsGetter extends CommandBase { private className: string; diff --git a/src/schema/tenantsUpdater.ts b/packages/core/src/v2/schema/tenantsUpdater.ts similarity index 73% rename from src/schema/tenantsUpdater.ts rename to packages/core/src/v2/schema/tenantsUpdater.ts index db38ad4f..59a8ce47 100644 --- a/src/schema/tenantsUpdater.ts +++ b/packages/core/src/v2/schema/tenantsUpdater.ts @@ -1,6 +1,6 @@ -import Connection from '../connection/index.js'; -import { Tenant } from '../openapi/types.js'; -import { CommandBase } from '../validation/commandBase.js'; +import Connection from '../../connection/index.js'; +import { Tenant } from '../../openapi/types.js'; +import { CommandBase } from '../../validation/commandBase.js'; export default class TenantsUpdater extends CommandBase { private className: string; diff --git a/src/schema/vectorAdder.ts b/packages/core/src/v2/schema/vectorAdder.ts similarity index 85% rename from src/schema/vectorAdder.ts rename to packages/core/src/v2/schema/vectorAdder.ts index ccdd494e..83e6d691 100644 --- a/src/schema/vectorAdder.ts +++ b/packages/core/src/v2/schema/vectorAdder.ts @@ -1,7 +1,7 @@ -import Connection from '../connection/index.js'; -import { VectorConfig } from '../index.js'; -import { CommandBase } from '../validation/commandBase.js'; -import { isValidStringProperty } from '../validation/string.js'; +import { VectorConfig } from '../../collections.js'; +import Connection from '../../connection/index.js'; +import { CommandBase } from '../../validation/commandBase.js'; +import { isValidStringProperty } from '../../validation/string.js'; import ClassGetter from './classGetter.js'; export default class VectorAdder extends CommandBase { diff --git a/src/validation/commandBase.ts b/packages/core/src/validation/commandBase.ts similarity index 100% rename from src/validation/commandBase.ts rename to packages/core/src/validation/commandBase.ts diff --git a/src/validation/number.ts b/packages/core/src/validation/number.ts similarity index 100% rename from src/validation/number.ts rename to packages/core/src/validation/number.ts diff --git a/src/validation/string.ts b/packages/core/src/validation/string.ts similarity index 100% rename from src/validation/string.ts rename to packages/core/src/validation/string.ts diff --git a/src/validation/version.ts b/packages/core/src/validation/version.ts similarity index 100% rename from src/validation/version.ts rename to packages/core/src/validation/version.ts diff --git a/src/collections/vectors/multiTargetVector.ts b/packages/core/src/vectors/multiTargetVector.ts similarity index 100% rename from src/collections/vectors/multiTargetVector.ts rename to packages/core/src/vectors/multiTargetVector.ts diff --git a/src/version.ts b/packages/core/src/version.ts similarity index 100% rename from src/version.ts rename to packages/core/src/version.ts diff --git a/packages/core/tsconfig.json b/packages/core/tsconfig.json new file mode 100644 index 00000000..4ce0bdca --- /dev/null +++ b/packages/core/tsconfig.json @@ -0,0 +1,47 @@ +// { +// "compilerOptions": { +// "target": "ES6", +// "strict": true, +// "preserveConstEnums": true, +// "alwaysStrict": true, +// "noImplicitAny": true, +// "noImplicitThis": true, +// "strictFunctionTypes": true, +// "module": "NodeNext", +// "moduleResolution": "NodeNext", +// "skipLibCheck": true, +// "forceConsistentCasingInFileNames": true, +// "esModuleInterop": true, +// "outDir": "./dist/core", +// "declaration": true, +// "rootDir": ".", +// "types": ["node", "uuid", "jest"] +// }, +// "include": ["./**/*"], +// "exclude": ["./**/*.test.ts", "./dist/**/*"] +// } +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "target": "es2022", + "lib": ["esnext"], + "strict": true, + "preserveConstEnums": true, + "alwaysStrict": true, + "noImplicitAny": true, + "noImplicitThis": true, + "strictFunctionTypes": true, + "module": "node16", + "moduleResolution": "node16", + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "esModuleInterop": true, + "outDir": "./dist", + "declaration": true, + "rootDir": ".", + "types": ["node", "uuid"] + }, + "include": ["src"], + "exclude": ["src/**/*.test.ts", "dist/**/*"], +} \ No newline at end of file diff --git a/packages/node/package.json b/packages/node/package.json new file mode 100644 index 00000000..f0989668 --- /dev/null +++ b/packages/node/package.json @@ -0,0 +1,55 @@ +{ + "name": "@weaviate/node", + "version": "1.0.0", + "description": "JS/TS node client for Weaviate", + "main": "dist/cjs/src/index.js", + "type": "module", + "exports": { + ".": { + "types": { + "require": "./dist/cjs/src/index.d.ts", + "default": "./dist/esm/src/index.d.ts" + }, + "default": { + "require": "./dist/cjs/src/index.js", + "default": "./dist/esm/src/index.js" + } + } + }, + "files": [ + "dist/cjs", + "dist/esm" + ], + "engines": { + "node": ">=22.0.0" + }, + "scripts": { + "build:cjs": "tsc --module commonjs --moduleResolution node10 --outDir dist/cjs && touch dist/cjs/package.json && echo '{\"type\": \"commonjs\"}' > dist/cjs/package.json", + "build:esm": "tsc --outDir dist/esm && touch dist/esm/package.json && echo '{\"type\": \"module\"}' > dist/esm/package.json", + "build": "npm run build:cjs && npm run build:esm" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/weaviate/typescript-client.git" + }, + "keywords": [ + "weaviate" + ], + "author": "Weaviate", + "license": "BSD 3-Clause", + "bugs": { + "url": "https://github.com/weaviate/typescript-client/issues" + }, + "homepage": "https://github.com/weaviate/typescript-client#readme", + "dependencies": { + "@weaviate/core": "workspace:^1.0.0", + "nice-grpc": "^2.1.16", + "nice-grpc-client-middleware-retry": "^3.1.15" + }, + "devDependencies": { + "@types/node": "^18.14.0", + "@types/uuid": "^9.0.1", + "vitest": "^4.0.16", + "typescript": "^5.9.3" + } +} diff --git a/src/utils/unit.test.ts b/packages/node/src/base64.test.ts similarity index 51% rename from src/utils/unit.test.ts rename to packages/node/src/base64.test.ts index 1f1b4682..dab4bd95 100644 --- a/src/utils/unit.test.ts +++ b/packages/node/src/base64.test.ts @@ -1,39 +1,27 @@ -import { beforeEach, describe, expect, it, vi } from 'vitest'; -import { httpClient } from '../connection/http.js'; +import { beforeEach, describe, expect, it, Mock, vitest } from 'vitest'; import { downloadImageFromURLAsBase64 } from './base64.js'; -vi.mock('../../src/connection/http.js'); +vitest.mock('../connection/http.js'); describe('downloadImageFromURLAsBase64()', () => { - const mockHttpClient = { - externalGet: vi.fn(), - close: vi.fn(), - post: vi.fn(), - head: vi.fn(), - get: vi.fn(), - patch: vi.fn(), - externalPost: vi.fn(), - put: vi.fn(), - delete: vi.fn(), - getRaw: vi.fn(), - }; + const mockFetch = vitest.fn(); beforeEach(() => { - vi.clearAllMocks(); - vi.mocked(httpClient).mockReturnValue(mockHttpClient); + vitest.clearAllMocks(); + (fetch as Mock).mockReturnValue(mockFetch); }); it('should convert a downloaded image to base64', async () => { const mockUrl = 'https://example.com/image.jpg'; const mockImageData = Buffer.from('image binary data'); - mockHttpClient.externalGet.mockResolvedValue(mockImageData); + mockFetch.mockResolvedValue(mockImageData); const result = await downloadImageFromURLAsBase64(mockUrl); expect(result).toBe(mockImageData.toString('base64')); - expect(httpClient).toHaveBeenCalledWith({ headers: { 'Content-Type': 'image/*' }, host: '' }); - expect(mockHttpClient.externalGet).toHaveBeenCalledWith(mockUrl); + expect(fetch).toHaveBeenCalledWith({ headers: { 'Content-Type': 'image/*' }, host: '' }); + expect(mockFetch).toHaveBeenCalledWith(mockUrl); }); it('should throw an error if the URL is invalid', async () => { @@ -45,29 +33,29 @@ describe('downloadImageFromURLAsBase64()', () => { it('should throw an error if the image download fails', async () => { const mockUrl = 'https://example.com/image.jpg'; - mockHttpClient.externalGet.mockRejectedValue(new Error('Network error')); + mockFetch.mockRejectedValue(new Error('Network error')); await expect(downloadImageFromURLAsBase64(mockUrl)).rejects.toThrow('Failed to download image from URL'); - expect(httpClient).toHaveBeenCalledWith({ headers: { 'Content-Type': 'image/*' }, host: '' }); - expect(mockHttpClient.externalGet).toHaveBeenCalledWith(mockUrl); + expect(fetch).toHaveBeenCalledWith({ headers: { 'Content-Type': 'image/*' }, host: '' }); + expect(mockFetch).toHaveBeenCalledWith(mockUrl); }); it('should handle empty response data gracefully', async () => { const mockUrl = 'https://example.com/image.jpg'; - mockHttpClient.externalGet.mockResolvedValue(Buffer.alloc(0)); + mockFetch.mockResolvedValue(Buffer.alloc(0)); const result = await downloadImageFromURLAsBase64(mockUrl); expect(result).toBe(''); - expect(httpClient).toHaveBeenCalledWith({ headers: { 'Content-Type': 'image/*' }, host: '' }); - expect(mockHttpClient.externalGet).toHaveBeenCalledWith(mockUrl); + expect(fetch).toHaveBeenCalledWith({ headers: { 'Content-Type': 'image/*' }, host: '' }); + expect(mockFetch).toHaveBeenCalledWith(mockUrl); }); it('should throw an error if the response is not a buffer', async () => { const mockUrl = 'wrong-url.com'; - mockHttpClient.externalGet.mockResolvedValue('not a buffer'); + mockFetch.mockResolvedValue('not a buffer'); await expect(downloadImageFromURLAsBase64(mockUrl)).rejects.toThrow('Invalid URL'); }); diff --git a/src/utils/base64.ts b/packages/node/src/base64.ts similarity index 93% rename from src/utils/base64.ts rename to packages/node/src/base64.ts index 57a09ef8..be6e0cb9 100644 --- a/src/utils/base64.ts +++ b/packages/node/src/base64.ts @@ -1,5 +1,4 @@ import fs from 'fs'; -import { httpClient } from '../connection/http.js'; const isFilePromise = (file: string | Buffer): Promise => new Promise((resolve, reject) => { @@ -39,13 +38,10 @@ export const downloadImageFromURLAsBase64 = async (url: string): Promise } try { - const client = httpClient({ + const response = await fetch(url, { headers: { 'Content-Type': 'image/*' }, - host: '', }); - const response = await client.externalGet(url); - if (!Buffer.isBuffer(response)) { throw new Error('Response is not a buffer'); } diff --git a/packages/node/src/index.ts b/packages/node/src/index.ts new file mode 100644 index 00000000..2de6b77f --- /dev/null +++ b/packages/node/src/index.ts @@ -0,0 +1,126 @@ +import weaviate, { + ApiKey, + AuthAccessTokenCredentials, + AuthClientCredentials, + AuthUserPasswordCredentials, + ClientParams, + configGuards, + configure, + ConnectToCustomOptions, + ConnectToLocalOptions, + ConnectToWCDOptions, + ConnectToWCSOptions, + ConnectToWeaviateCloudOptions, + Context, + filter, + helpers, + ICollection, + ICollections, + IWeaviateClient, + permissions, + reconfigure, +} from '@weaviate/core'; +import { Agent as HttpAgent } from 'http'; +import { Agent as HttpsAgent } from 'https'; +import { toBase64FromMedia } from './base64.js'; +import { transportsMaker } from './transports.js'; + +const context: Context = { + transportsMaker, + toBase64FromMedia, + agentMaker: (secure) => (secure ? new HttpsAgent({ keepAlive: true }) : new HttpAgent({ keepAlive: true })), +}; + +/** + * Connect to a custom Weaviate deployment, e.g. your own self-hosted Kubernetes cluster. + * + * @param {ConnectToCustomOptions} options Options for the connection. + * @returns {Promise} A Promise that resolves to a client connected to your custom Weaviate deployment. + */ +export function connectToCustom(options: ConnectToCustomOptions): Promise { + return helpers.connectToCustom(weaviate, context, options); +} + +/** + * Connect to a locally-deployed Weaviate instance, e.g. as a Docker compose stack. + * + * @param {ConnectToLocalOptions} [options] Options for the connection. + * @returns {Promise} A Promise that resolves to a client connected to your local Weaviate instance. + */ +export function connectToLocal(options?: ConnectToLocalOptions): Promise { + return helpers.connectToLocal(weaviate, context, options); +} + +/** + * Connect to your own Weaviate Cloud (WCD) instance. + * + * @deprecated Use `connectToWeaviateCloud` instead. + * + * @param {string} clusterURL The URL of your WCD instance. E.g., `https://example.weaviate.network`. + * @param {ConnectToWCDOptions} [options] Additional options for the connection. + * @returns {Promise} A Promise that resolves to a client connected to your WCD instance. + */ +export function connectToWCD(clusterURL: string, options?: ConnectToWCDOptions): Promise { + console.warn( + 'The `connectToWCD` method is deprecated. Please use `connectToWeaviateCloud` instead. This method will be removed in a future release.' + ); + return helpers.connectToWeaviateCloud(clusterURL, weaviate, context, options); +} + +/** + * Connect to your own Weaviate Cloud Service (WCS) instance. + * + * @deprecated Use `connectToWeaviateCloud` instead. + * + * @param {string} clusterURL The URL of your WCD instance. E.g., `https://example.weaviate.network`. + * @param {ConnectToWCSOptions} [options] Additional options for the connection. + * @returns {Promise} A Promise that resolves to a client connected to your WCS instance. + */ +export function connectToWCS(clusterURL: string, options?: ConnectToWCSOptions): Promise { + console.warn( + 'The `connectToWCS` method is deprecated. Please use `connectToWeaviateCloud` instead. This method will be removed in a future release.' + ); + return helpers.connectToWeaviateCloud(clusterURL, weaviate, context, options); +} + +/** + * Connect to your own Weaviate Cloud (WCD) instance. + * + * @param {string} clusterURL The URL of your WCD instance. E.g., `https://example.weaviate.network`. + * @param {ConnectToWeaviateCloudOptions} [options] Additional options for the connection. + * @returns {Promise} A Promise that resolves to a client connected to your WCD instance. + */ +export function connectToWeaviateCloud( + clusterURL: string, + options?: ConnectToWeaviateCloudOptions +): Promise { + return helpers.connectToWeaviateCloud(clusterURL, weaviate, context, options); +} + +const app = { + connectToCustom, + connectToLocal, + connectToWCD, + connectToWCS, + connectToWeaviateCloud, + client: (params: ClientParams) => weaviate(context, params), + ApiKey, + AuthUserPasswordCredentials, + AuthAccessTokenCredentials, + AuthClientCredentials, + configure, + configGuards, + filter: filter(), + reconfigure, + permissions, +}; + +export interface WeaviateClient extends IWeaviateClient {} +export interface Collections extends ICollections {} +export interface Collection + extends ICollection {} + +export default app; + +export * from '@weaviate/core'; +export * from './base64.js'; diff --git a/packages/node/src/transports.ts b/packages/node/src/transports.ts new file mode 100644 index 00000000..98c465e8 --- /dev/null +++ b/packages/node/src/transports.ts @@ -0,0 +1,21 @@ +import { ChannelCredentials, ChannelOptions, createChannel, createClientFactory } from 'nice-grpc'; + +import { HealthDefinition, WeaviateDefinition } from '@weaviate/core/proto'; + +import { Transports, TransportsParams } from '@weaviate/core'; + +const clientFactory = createClientFactory(); + +export const transportsMaker = (params: TransportsParams): Transports => { + const channel = createChannel( + params.grpcAddress, + params.grpcSecure ? ChannelCredentials.createSsl() : ChannelCredentials.createInsecure(), + { + 'grpc.max_receive_message_length': params.grpcMaxMessageLength, + } as ChannelOptions + ); + return { + weaviate: clientFactory.create(WeaviateDefinition, channel), + health: clientFactory.create(HealthDefinition, channel), + }; +}; diff --git a/packages/node/tsconfig.json b/packages/node/tsconfig.json new file mode 100644 index 00000000..37675826 --- /dev/null +++ b/packages/node/tsconfig.json @@ -0,0 +1,28 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "target": "ES6", + "strict": true, + "preserveConstEnums": true, + "alwaysStrict": true, + "noImplicitAny": true, + "noImplicitThis": true, + "strictFunctionTypes": true, + "module": "NodeNext", + "moduleResolution": "NodeNext", + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "esModuleInterop": true, + "outDir": "./dist", + "declaration": true, + "rootDir": ".", + "types": ["node", "uuid"], + "paths": { + "@weaviate/core": ["../core/src"], + "@weaviate/core/proto": ["../core/src/proto"] + } + }, + "include": ["src"], + "references": [{ "path": "../core" }] +} diff --git a/test/collections/aggregate/integration.test.ts b/packages/test/node/aggregate/integration.test.ts similarity index 96% rename from test/collections/aggregate/integration.test.ts rename to packages/test/node/aggregate/integration.test.ts index a8b81a3b..b50695e2 100644 --- a/test/collections/aggregate/integration.test.ts +++ b/packages/test/node/aggregate/integration.test.ts @@ -1,16 +1,11 @@ /* eslint-disable @typescript-eslint/no-non-null-assertion */ /* eslint-disable @typescript-eslint/no-non-null-asserted-optional-chain */ +import { WeaviateQueryError, WeaviateUnsupportedFeatureError } from '@weaviate/core'; +import { CrossReference } from '@weaviate/core/references'; +import { DataObject } from '@weaviate/core/types'; +import weaviate, { AggregateText, Bm25Operator, Collection, WeaviateClient } from '@weaviate/node'; import { afterAll, beforeAll, describe, expect, it } from 'vitest'; -import { WeaviateQueryError, WeaviateUnsupportedFeatureError } from '../../../src/errors.js'; -import weaviate, { - AggregateText, - Bm25Operator, - Collection, - CrossReference, - DataObject, - WeaviateClient, -} from '../../../src/index.js'; -import { requireAtLeast } from '../../../test/version.js'; +import { requireAtLeast } from '../../version'; describe('Testing of the collection.aggregate methods', () => { type TestCollectionAggregate = { @@ -36,8 +31,8 @@ describe('Testing of the collection.aggregate methods', () => { const date2 = '2023-01-02T00:00:00Z'; const dateMid = '2023-01-01T12:00:00Z'; - afterAll(async () => { - return (await client).collections.delete(collectionName).catch((err) => { + afterAll(() => { + return client.collections.delete(collectionName).catch((err) => { console.error(err); throw err; }); @@ -99,7 +94,7 @@ describe('Testing of the collection.aggregate methods', () => { vectorIndexConfig: weaviate.configure.vectorIndex.hnsw({ maxConnections: 64 }), }), }) - .then(async () => { + .then(() => { const data: DataObject[] = []; for (let i = 0; i < 100; i++) { data.push({ @@ -117,8 +112,11 @@ describe('Testing of the collection.aggregate methods', () => { }, }); } - const res = (await collection).data.insertMany(data); - return res; + return collection.data.insertMany(data); + }) + .then((res) => { + Object.values(res.errors).map((e) => console.error(e.message)); + expect(res.hasErrors).toBe(false); }); // .then(async (res) => { // const uuid1 = res.uuids[0]; diff --git a/test/alias/journey.test.ts b/packages/test/node/alias/journey.test.ts similarity index 91% rename from test/alias/journey.test.ts rename to packages/test/node/alias/journey.test.ts index fee668ba..80f039f7 100644 --- a/test/alias/journey.test.ts +++ b/packages/test/node/alias/journey.test.ts @@ -1,7 +1,7 @@ +import { Alias } from '@weaviate/core/alias'; +import weaviate, { WeaviateClient } from '@weaviate/node'; import { beforeAll, expect, it } from 'vitest'; -import { Alias } from '../../src/alias/types'; -import weaviate, { WeaviateClient } from '../../src/index.js'; -import { requireAtLeast } from '../../test/version'; +import { requireAtLeast } from '../../version'; requireAtLeast(1, 32, 0).describe('manages collection aliases', () => { let client: WeaviateClient; diff --git a/test/collections/backup/integration.test.ts b/packages/test/node/backup/integration.test.ts similarity index 94% rename from test/collections/backup/integration.test.ts rename to packages/test/node/backup/integration.test.ts index db90067d..66f55764 100644 --- a/test/collections/backup/integration.test.ts +++ b/packages/test/node/backup/integration.test.ts @@ -1,10 +1,11 @@ /* eslint-disable @typescript-eslint/no-non-null-assertion */ /* eslint-disable @typescript-eslint/no-non-null-asserted-optional-chain */ /* eslint-disable no-await-in-loop */ +import { WeaviateBackupFailed } from '@weaviate/core/errors'; +import { Backend } from '@weaviate/core/v2/backup'; +import weaviate, { Collection, WeaviateClient } from '@weaviate/node'; import { afterAll, beforeAll, describe, expect, it, test } from 'vitest'; -import { WeaviateBackupFailed } from '../../../src/errors.js'; -import weaviate, { Backend, Collection, WeaviateClient } from '../../../src/index.js'; -import { requireAtLeast } from '../../../test/version.js'; +import { requireAtLeast } from '../../version'; // These must run sequentially because Weaviate is not capable of running multiple backups at the same time describe('Integration testing of backups', () => { @@ -24,7 +25,14 @@ describe('Integration testing of backups', () => { ) ); - afterAll(() => clientPromise.then((client) => client.collections.deleteAll())); + afterAll(() => + clientPromise.then((client) => + Promise.all([ + client.collections.delete('TestBackupClient'), + client.collections.delete('TestBackupCollection'), + ]) + ) + ); const testClientWaitForCompletion = async (client: WeaviateClient) => { const res = await client.backup.create({ @@ -194,8 +202,8 @@ describe('Integration testing of backups', () => { c.collections.delete(name).catch((e) => {}) ) ); - await c.alias.delete('ThingsFalseAlias').catch((e) => {}); - await c.alias.delete('ThingsTrueAlias').catch((e) => {}); + await c.alias.delete('ThingsFalseAlias').catch((e: any) => {}); + await c.alias.delete('ThingsTrueAlias').catch((e: any) => {}); }); }); }); diff --git a/test/collections/backup/mock.test.ts b/packages/test/node/backup/unit.test.ts similarity index 93% rename from test/collections/backup/mock.test.ts rename to packages/test/node/backup/unit.test.ts index ab4ca53a..67549ad4 100644 --- a/test/collections/backup/mock.test.ts +++ b/packages/test/node/backup/unit.test.ts @@ -1,22 +1,18 @@ -import express, { Response } from 'express'; -import { Server as HttpServer } from 'http'; -import { Server as GrpcServer, createServer } from 'nice-grpc'; -import { afterAll, beforeAll, describe, expect, it, vi } from 'vitest'; -import { BackupStatus } from '../../../src/collections/backup/types.js'; -import { WeaviateBackupCanceled } from '../../../src/errors.js'; -import weaviate, { WeaviateClient } from '../../../src/index.js'; +import { BackupStatus } from '@weaviate/core/backup/types'; +import { WeaviateBackupCanceled } from '@weaviate/core/errors'; import { HealthCheckRequest, HealthCheckResponse, HealthCheckResponse_ServingStatus, HealthDefinition, HealthServiceImplementation, -} from '../../../src/proto/google/health/v1/health.js'; -import { - BackupCreateResponse, - BackupCreateStatusResponse, - BackupRestoreResponse, -} from '../../../src/v2/index.js'; +} from '@weaviate/core/proto/google/health/v1/health'; +import { BackupCreateResponse, BackupCreateStatusResponse, BackupRestoreResponse } from '@weaviate/core/v2'; +import weaviate, { WeaviateClient } from '@weaviate/node'; +import express, { Response } from 'express'; +import { Server as HttpServer } from 'http'; +import { Server as GrpcServer, createServer } from 'nice-grpc'; +import { afterAll, beforeAll, describe, expect, it, vi } from 'vitest'; const BACKUP_ID = 'test-backup-123'; const BACKEND = 'filesystem'; diff --git a/test/integration.test.ts b/packages/test/node/client/integration.test.ts similarity index 79% rename from test/integration.test.ts rename to packages/test/node/client/integration.test.ts index 97a37b1c..0bc6cb5e 100644 --- a/test/integration.test.ts +++ b/packages/test/node/client/integration.test.ts @@ -1,5 +1,5 @@ -import { describe, expect, it, vi } from 'vitest'; -import weaviate from '../src/index.js'; +import weaviate from '@weaviate/node'; +import { describe, expect, it, vitest } from 'vitest'; describe('Integration testing of the client methods', () => { it('should connect using connectToLocal defaults', () => { @@ -7,7 +7,7 @@ describe('Integration testing of the client methods', () => { }); it('should connect using connectToLocal with schema-ed host', () => { - const logSpy = vi.spyOn(console, 'warn'); + const logSpy = vitest.spyOn(console, 'warn'); return weaviate .connectToLocal({ host: 'http://localhost', diff --git a/test/collections/cluster/integration.test.ts b/packages/test/node/cluster/integration.test.ts similarity index 97% rename from test/collections/cluster/integration.test.ts rename to packages/test/node/cluster/integration.test.ts index 0e37f108..27429623 100644 --- a/test/collections/cluster/integration.test.ts +++ b/packages/test/node/cluster/integration.test.ts @@ -1,5 +1,5 @@ +import weaviate, { WeaviateClient } from '@weaviate/node'; import { afterAll, beforeAll, describe, expect, it } from 'vitest'; -import weaviate, { WeaviateClient } from '../../../src/index.js'; describe('Integration testing of the client.cluster methods', () => { let client: WeaviateClient; diff --git a/test/collections/cluster/mock.test.ts b/packages/test/node/cluster/mock.test.ts similarity index 97% rename from test/collections/cluster/mock.test.ts rename to packages/test/node/cluster/mock.test.ts index 56e87eff..757d0bbe 100644 --- a/test/collections/cluster/mock.test.ts +++ b/packages/test/node/cluster/mock.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest'; -import cluster from '../../../src/collections/cluster/index.js'; -import { IConnection } from '../../../src/connection/index.js'; +import { IConnection } from '@weaviate/core'; +import cluster from '@weaviate/core/cluster'; // These tests do not validate the response from Weaviate. This is because the server responses are not mapped at all by the client so are assumed to be correct. // Instead, these tests validate that the client sends the correct requests to the server and that the responses are handled correctly. diff --git a/test/collections/integration.test.ts b/packages/test/node/collections/integration.test.ts similarity index 95% rename from test/collections/integration.test.ts rename to packages/test/node/collections/integration.test.ts index 4f3bf0fc..9679fbfa 100644 --- a/test/collections/integration.test.ts +++ b/packages/test/node/collections/integration.test.ts @@ -1,6 +1,5 @@ /* eslint-disable @typescript-eslint/no-non-null-assertion */ -import { afterAll, beforeAll, describe, expect, it } from 'vitest'; -import weaviate, { +import { CollectionConfigCreate, GeoCoordinate, PQConfig, @@ -10,8 +9,9 @@ import weaviate, { Text2VecOpenAIConfig, VectorIndexConfigHFresh, VectorIndexConfigHNSW, - WeaviateClient, -} from '../../src/index'; +} from '@weaviate/core'; +import weaviate, { WeaviateClient } from '@weaviate/node'; +import { afterAll, beforeAll, describe, expect, it } from 'vitest'; describe('Testing of the collections.create method', () => { let cluster: WeaviateClient; @@ -37,16 +37,13 @@ describe('Testing of the collections.create method', () => { : 'hnsw'; }); - afterAll(() => - Promise.all([ - cluster.collections.deleteAll(), - contextionary.collections.deleteAll(), - openai.collections.deleteAll(), - ]) - ); + const afters: (() => Promise)[] = []; + + afterAll(() => Promise.all(afters)); it('should be able to create a simple collection with a generic', async () => { const collectionName = 'TestCollectionSimpleGeneric'; + afters.push(() => contextionary.collections.delete(collectionName)); type TestCollectionSimple = { testProp: string; }; @@ -72,6 +69,7 @@ describe('Testing of the collections.create method', () => { it('should be able to create a simple collection without a generic', async () => { const collectionName = 'TestCollectionSimpleNonGeneric'; + afters.push(() => contextionary.collections.delete(collectionName)); const response = await contextionary.collections .create({ name: collectionName, @@ -130,9 +128,11 @@ describe('Testing of the collections.create method', () => { }); it('should be able to create a collection with one fully customised int property', () => { + const collectionName = 'TestCollectionIntProperty'; + afters.push(() => contextionary.collections.delete(collectionName)); return contextionary.collections .create({ - name: 'TestCollectionIntProperty', + name: collectionName, properties: [ { name: 'int', @@ -167,6 +167,7 @@ describe('Testing of the collections.create method', () => { it('should be able to create a simple collection without a generic and no properties', async () => { const collectionName = 'TestCollectionSimpleNonGenericNoProperties'; + afters.push(() => contextionary.collections.delete(collectionName)); const response = await contextionary.collections .create({ name: collectionName, @@ -195,6 +196,7 @@ describe('Testing of the collections.create method', () => { it('should be able to create a simple collection without a generic using a schema var', async () => { const collectionName = 'TestCollectionSimpleNonGenericVar'; + afters.push(() => contextionary.collections.delete(collectionName)); const schema = { name: collectionName, properties: [ @@ -219,6 +221,7 @@ describe('Testing of the collections.create method', () => { it('should be able to create a simple collection with a generic using a schema var with const', async () => { const collectionName = 'TestCollectionSimpleGenericVarConst'; + afters.push(() => contextionary.collections.delete(collectionName)); type TestCollectionSimple = { testProp: string; }; @@ -246,6 +249,7 @@ describe('Testing of the collections.create method', () => { it('should be able to create a simple collection with a generic using a schema var with type', async () => { const collectionName = 'TestCollectionSimpleGenericVarType'; + afters.push(() => contextionary.collections.delete(collectionName)); type TestCollectionSimple = { testProp: string; }; @@ -273,6 +277,7 @@ describe('Testing of the collections.create method', () => { it('should be able to create a nested collection', async () => { const collectionName = 'TestCollectionNested'; + afters.push(() => contextionary.collections.delete(collectionName)); type TestCollectionNested = { testProp: { nestedProp: string; @@ -309,7 +314,7 @@ describe('Testing of the collections.create method', () => { it('should be able to create a collection with generic properties', () => { const collectionName = 'TestCollectionGenericProperties'; - + afters.push(() => cluster.collections.delete(collectionName)); type TestCollectionGenericProperties = { text: string; texts: string[]; @@ -413,6 +418,7 @@ describe('Testing of the collections.create method', () => { it('should be able to create a complex collection', async () => { const collectionName = 'TestCollectionSimple'; + afters.push(() => cluster.collections.delete(collectionName)); const response = await cluster.collections .create({ name: collectionName, @@ -599,7 +605,9 @@ describe('Testing of the collections.create method', () => { expect(response.multiTenancy.enabled).toEqual(true); - expect(response.replication.asyncEnabled).toEqual(false); + expect(response.replication.asyncEnabled).toEqual( + await cluster.getWeaviateVersion().then((ver) => ver.isAtLeast(1, 38, 0)) + ); expect(response.replication.deletionStrategy).toBeDefined(); expect(response.replication.factor).toEqual(2); @@ -633,6 +641,7 @@ describe('Testing of the collections.create method', () => { it('should be able to create a collection with the contextionary vectorizer using configure.vectors', async () => { const collectionName = 'ThisOneIsATest'; // must include words in contextionary's vocabulary to pass since vectorizeCollectionName will be true + afters.push(() => contextionary.collections.delete(collectionName)); const response = await contextionary.collections .create({ name: collectionName, @@ -667,6 +676,7 @@ describe('Testing of the collections.create method', () => { it('should be able to create a collection with an openai vectorizer with configure.vectors', async () => { const collectionName = 'TestCollectionOpenAIVectorizerWithConfigureVectorizer'; + afters.push(() => openai.collections.delete(collectionName)); const response = await openai.collections .create({ name: collectionName, @@ -701,6 +711,7 @@ describe('Testing of the collections.create method', () => { it('should be able to create a collection with the openai generative with configure.Generative', async () => { const collectionName = 'TestCollectionOpenAIGenerativeWithConfigureGenerative'; + afters.push(() => openai.collections.delete(collectionName)); const response = await openai.collections .create({ name: collectionName, diff --git a/test/collections/mock.test.ts b/packages/test/node/collections/mock.test.ts similarity index 98% rename from test/collections/mock.test.ts rename to packages/test/node/collections/mock.test.ts index 9e57ab79..4144b1b2 100644 --- a/test/collections/mock.test.ts +++ b/packages/test/node/collections/mock.test.ts @@ -3,15 +3,14 @@ import { Server as HttpServer } from 'http'; import { createServer, Server as GrpcServer } from 'nice-grpc'; import { afterAll, beforeAll, describe, expect, it, vi } from 'vitest'; -import weaviate, { WeaviateClient } from '../../src/index.js'; import { HealthCheckRequest, HealthCheckResponse, HealthCheckResponse_ServingStatus, HealthDefinition, HealthServiceImplementation, -} from '../../src/proto/google/health/v1/health.js'; -import { WeaviateClass } from '../../src/v2/index.js'; +} from '@weaviate/core/proto/google/health/v1/health.js'; +import weaviate, { WeaviateClass, WeaviateClient } from '@weaviate/node'; // Mock schema data const mockExportedSchema: WeaviateClass = { diff --git a/test/collections/config/integration.test.ts b/packages/test/node/config/integration.test.ts similarity index 87% rename from test/collections/config/integration.test.ts rename to packages/test/node/config/integration.test.ts index 50441539..9ffd9806 100644 --- a/test/collections/config/integration.test.ts +++ b/packages/test/node/config/integration.test.ts @@ -1,7 +1,5 @@ /* eslint-disable @typescript-eslint/no-non-null-assertion */ -import { afterAll, beforeAll, describe, expect, it } from 'vitest'; -import { WeaviateUnsupportedFeatureError } from '../../../src/errors.js'; -import weaviate, { +import { GenerativeCohereConfig, ModuleConfig, MultiTenancyConfig, @@ -11,26 +9,26 @@ import weaviate, { VectorIndexConfigDynamic, VectorIndexConfigHFresh, VectorIndexConfigHNSW, - WeaviateClient, - weaviateV2, -} from '../../../src/index.js'; -import { WeaviateClass } from '../../../src/openapi/types.js'; -import { DbVersion } from '../../../src/utils/dbVersion.js'; -import { requireAtLeast } from '../../../test/version.js'; +} from '@weaviate/core/config/types'; +import { WeaviateUnsupportedFeatureError } from '@weaviate/core/errors'; +import weaviate, { WeaviateClass, WeaviateClient, weaviateV2 } from '@weaviate/node'; +import { afterAll, beforeAll, describe, expect, it } from 'vitest'; +import { requireAtLeast } from '../../version'; describe('Testing of the collection.config namespace', () => { let client: WeaviateClient; - let serverVersion: DbVersion; beforeAll(async () => { client = await weaviate.connectToLocal(); - serverVersion = await client.getWeaviateVersion(); }); - afterAll(() => client.collections.deleteAll()); + const afters: (() => Promise)[] = []; + + afterAll(() => Promise.all(afters)); it('should be able to get the config of a collection without generics', async () => { const collectionName = 'TestCollectionConfigGetWithGenerics'; + afters.push(() => client.collections.delete(collectionName)); type TestCollectionConfigGet = { testProp: string; }; @@ -65,13 +63,14 @@ describe('Testing of the collection.config namespace', () => { expect(config.generative).toBeUndefined(); expect(config.reranker).toBeUndefined(); expect(config.vectorizers.default.indexType).toEqual( - serverVersion.isAtLeast(1, 37, 5) ? 'hfresh' : 'hnsw' + await client.getWeaviateVersion().then((ver) => (ver.isAtLeast(1, 37, 5) ? 'hfresh' : 'hnsw')) ); expect(config.vectorizers.default.vectorizer.name).toEqual('none'); }); it('should be able get the config of a collection with generics', async () => { const collectionName = 'TestCollectionConfigGetWithoutGenerics'; + afters.push(() => client.collections.delete(collectionName)); type TestCollectionConfigGet = { testProp: string; }; @@ -106,13 +105,14 @@ describe('Testing of the collection.config namespace', () => { expect(config.generative).toBeUndefined(); expect(config.reranker).toBeUndefined(); expect(config.vectorizers.default.indexType).toEqual( - serverVersion.isAtLeast(1, 37, 5) ? 'hfresh' : 'hnsw' + await client.getWeaviateVersion().then((ver) => (ver.isAtLeast(1, 37, 5) ? 'hfresh' : 'hnsw')) ); expect(config.vectorizers.default.vectorizer.name).toEqual('none'); }); it('should be able to get a collection with named vectors', async () => { const collectionName = 'TestCollectionConfigGetVectors'; + afters.push(() => client.collections.delete(collectionName)); const query = () => client.collections.create({ name: collectionName, @@ -157,13 +157,16 @@ describe('Testing of the collection.config namespace', () => { ); expect(config.properties[1].vectorizerConfig?.['text2vec-contextionary'].skip).toEqual(false); expect(config.vectorizers.title.indexConfig).toBeDefined(); - expect(config.vectorizers.title.indexType).toEqual(serverVersion.isAtLeast(1, 37, 5) ? 'hfresh' : 'hnsw'); + expect(config.vectorizers.title.indexType).toEqual( + await client.getWeaviateVersion().then((ver) => (ver.isAtLeast(1, 37, 5) ? 'hfresh' : 'hnsw')) + ); expect(config.vectorizers.title.properties).toEqual(['title']); expect(config.vectorizers.title.vectorizer.name).toEqual('text2vec-contextionary'); }); it('should be able to get the config of a collection with hnsw-pq', async () => { const collectionName = 'TestCollectionConfigGetHNSWPlusPQ'; + afters.push(() => client.collections.delete(collectionName)); const collection = await client.collections.create({ name: collectionName, vectorizers: weaviate.configure.vectors.none({ @@ -188,6 +191,7 @@ describe('Testing of the collection.config namespace', () => { requireAtLeast(1, 32, 0).it('should be able to get the config of a collection with hnsw-rq', async () => { const collectionName = 'TestCollectionConfigGetHNSWPlusRQ'; + afters.push(() => client.collections.delete(collectionName)); const collection = await client.collections.create({ name: collectionName, vectorizers: weaviate.configure.vectorizer.none({ @@ -270,6 +274,7 @@ describe('Testing of the collection.config namespace', () => { requireAtLeast(1, 36, 0).it('should create a collection with hfresh index', async () => { const collectionName = 'TestCollectionConfigGetHFresh'; await client.collections.delete(collectionName); + afters.push(() => client.collections.delete(collectionName)); const collection = await client.collections.create({ name: collectionName, vectorizers: weaviate.configure.vectorizer.none({ @@ -321,6 +326,7 @@ describe('Testing of the collection.config namespace', () => { requireAtLeast(1, 26, 0).it('should be able to get the config of a collection with hnsw-sq', async () => { const collectionName = 'TestCollectionConfigGetHNSWPlusSQ'; + afters.push(() => client.collections.delete(collectionName)); const collection = await client.collections.create({ name: collectionName, vectorizers: weaviate.configure.vectors.none({ @@ -345,6 +351,7 @@ describe('Testing of the collection.config namespace', () => { it('should be able to get the config of a collection with flat-bq', async () => { const collectionName = 'TestCollectionConfigGetFlatPlusBQ'; + afters.push(() => client.collections.delete(collectionName)); const collection = await client.collections.create({ name: collectionName, vectorizers: weaviate.configure.vectors.none({ @@ -491,6 +498,7 @@ describe('Testing of the collection.config namespace', () => { it('should be able to add a property to a collection', async () => { const collectionName = 'TestCollectionConfigAddProperty'; + afters.push(() => client.collections.delete(collectionName)); const collection = await client.collections.create({ name: collectionName, vectorizers: weaviate.configure.vectors.none(), @@ -519,6 +527,7 @@ describe('Testing of the collection.config namespace', () => { it('should be able to add a reference to a collection', async () => { const collectionName = 'TestCollectionConfigAddReference' as const; + afters.push(() => client.collections.delete(collectionName)); const collection = await client.collections.create({ name: collectionName, vectorizers: weaviate.configure.vectors.none(), @@ -541,6 +550,7 @@ describe('Testing of the collection.config namespace', () => { requireAtLeast(1, 31, 0).describe('Mutable named vectors', () => { it('should be able to add named vectors to a collection', async () => { const collectionName = 'TestCollectionConfigAddVector' as const; + afters.push(() => client.collections.delete(collectionName)); const collection = await client.collections.create({ name: collectionName, vectorizers: weaviate.configure.vectors.none(), @@ -569,7 +579,7 @@ describe('Testing of the collection.config namespace', () => { expect(config.vectorizers.default).toHaveProperty( 'indexType', - serverVersion.isAtLeast(1, 37, 5) ? 'hfresh' : 'hnsw' + await client.getWeaviateVersion().then((ver) => (ver.isAtLeast(1, 37, 5) ? 'hfresh' : 'hnsw')) ); }); }); @@ -636,6 +646,7 @@ describe('Testing of the collection.config namespace', () => { it('should be able update the config of a collection', async () => { const collectionName = 'TestCollectionConfigUpdate'; + afters.push(() => client.collections.delete(collectionName)); const collection = await client.collections.create({ name: collectionName, properties: [ @@ -736,6 +747,7 @@ describe('Testing of the collection.config namespace', () => { it('should be able to create and get a collection with multi-tenancy enabled', async () => { const collectionName = 'TestCollectionConfigCreateGetMultiTenancy'; + afters.push(() => client.collections.delete(collectionName)); const collection = await client.collections.create({ name: collectionName, multiTenancy: weaviate.configure.multiTenancy({ @@ -757,6 +769,7 @@ describe('Testing of the collection.config namespace', () => { it('should be able to create and update a collection with multi-tenancy enabled', async () => { const collectionName = 'TestCollectionConfigCreateUpdateMultiTenancy'; + afters.push(() => client.collections.delete(collectionName)); const collection = await client.collections.create({ name: collectionName, multiTenancy: weaviate.configure.multiTenancy(), @@ -901,6 +914,7 @@ describe('Testing of the collection.config namespace', () => { 'should be able to create and get a multi-vector collection with encoding', async () => { const collectionName = 'TestCollectionConfigCreateWithMuveraEncoding'; + afters.push(() => client.collections.delete(collectionName)); const collection = await client.collections.create({ name: collectionName, vectorizers: weaviate.configure.vectorizer.none({ @@ -926,6 +940,7 @@ describe('Testing of the collection.config namespace', () => { 'should be able to create and get a multi-vector collection without encoding', async () => { const collectionName = 'TestCollectionConfigCreateWithoutMuveraEncoding'; + afters.push(() => client.collections.delete(collectionName)); const collection = await client.collections.create({ name: collectionName, vectorizers: weaviate.configure.vectorizer.none({ @@ -947,6 +962,7 @@ describe('Testing of the collection.config namespace', () => { requireAtLeast(1, 32, 4).describe('uncompressed quantizer', () => { it('should be able to create a collection with an uncompressed quantizer', async () => { const collectionName = 'TestCollectionUncompressedVector'; + afters.push(() => client.collections.delete(collectionName)); const collection = await client.collections.create({ name: collectionName, vectorizers: weaviate.configure.vectors.selfProvided({ @@ -967,6 +983,7 @@ describe('Testing of the collection.config namespace', () => { it('should be able to create a collection with uncompressed named vector', async () => { const collectionName = 'TestCollectionUncompressedVectorNamed'; + afters.push(() => client.collections.delete(collectionName)); const collection = await client.collections.create({ name: collectionName, vectorizers: weaviate.configure.vectors.selfProvided({ @@ -991,6 +1008,7 @@ describe('Testing of the collection.config namespace', () => { 'should be able to create a collection with RQ quantizer bits=8 option', async () => { const collectionName = 'TestCollectionRQQuantizer8Bits'; + afters.push(() => client.collections.delete(collectionName)); const collection = await client.collections.create({ name: collectionName, vectorizers: weaviate.configure.vectors.selfProvided({ @@ -1011,6 +1029,7 @@ describe('Testing of the collection.config namespace', () => { 'should be able to create a collection with RQ quantizer bits=1 option', async () => { const collectionName = 'TestCollectionRQQuantizer1Bits'; + afters.push(() => client.collections.delete(collectionName)); const collection = await client.collections.create({ name: collectionName, vectorizers: weaviate.configure.vectors.selfProvided({ @@ -1030,6 +1049,7 @@ describe('Testing of the collection.config namespace', () => { requireAtLeast(1, 36, 0).describe('dropInvertedIndex', () => { it('should drop indices from a property', async () => { const collectionName = 'TestDropInvertedIndices'; + afters.push(() => client.collections.delete(collectionName)); const collection = await client.collections.create({ name: collectionName, properties: [ @@ -1064,6 +1084,7 @@ describe('Testing of the collection.config namespace', () => { requireAtLeast(1, 35, 0).it('should create and update Object TTL configuration', async () => { const collectionName = 'TestObjectTTL'; + afters.push(() => client.collections.delete(collectionName)); const collection = await client.collections.create({ name: collectionName, objectTTL: weaviate.configure.objectTTL.deleteByCreationTime({ defaultTTLSeconds: 120 }), @@ -1094,3 +1115,86 @@ describe('Testing of the collection.config namespace', () => { expect(disabled.objectTTL.enabled).toEqual(false); }); }); + +// ───────────────────────────────────────────────────────────────────────────── +// Suite +// ───────────────────────────────────────────────────────────────────────────── +describe('defaultVectorIndexType', () => { + let client: WeaviateClient; + let expectedDefaultIndexType: 'hnsw' | 'hfresh'; + + beforeAll(async () => { + client = await weaviate.connectToLocal(); + expectedDefaultIndexType = (await client.getWeaviateVersion()).isAtLeast(1, 37, 5) ? 'hfresh' : 'hnsw'; + }, 60_000); + + afterAll(async () => { + await client?.close(); + }); + + // ── Scenario A: no explicit vectorIndexConfig ────────────────────────────── + + it('Scenario A — selfProvided (default vector), no explicit index config', async () => { + const name = `DefaultVectorIndexType_A_Self_${Date.now()}`; + try { + await client.collections.create({ + name, + vectorizers: weaviate.configure.vectors.selfProvided(), + }); + const config = await client.collections.use(name).config.get(); + expect(config.vectorizers.default.indexType).toEqual(expectedDefaultIndexType); + } finally { + await client.collections.delete(name).catch(() => undefined); + } + }); + + it('Scenario A — selfProvided (named vector "main"), no explicit index config', async () => { + const name = `DefaultVectorIndexType_A_Named_${Date.now()}`; + try { + await client.collections.create({ + name, + vectorizers: weaviate.configure.vectors.selfProvided({ name: 'main' }), + }); + const config = await client.collections.use(name).config.get(); + expect(config.vectorizers.main.indexType).toEqual(expectedDefaultIndexType); + } finally { + await client.collections.delete(name).catch(() => undefined); + } + }); + + // ── Scenario B: explicit flat vectorIndexConfig ──────────────────────────── + // Explicit choice must be preserved on every version. + + it('Scenario B — selfProvided (default vector), explicit flat index config', async () => { + const name = `DefaultVectorIndexType_B_Self_${Date.now()}`; + try { + await client.collections.create({ + name, + vectorizers: weaviate.configure.vectors.selfProvided({ + vectorIndexConfig: weaviate.configure.vectorIndex.flat(), + }), + }); + const config = await client.collections.use(name).config.get(); + expect(config.vectorizers.default.indexType).toEqual('flat'); + } finally { + await client.collections.delete(name).catch(() => undefined); + } + }); + + it('Scenario B — selfProvided (named vector "main"), explicit flat index config', async () => { + const name = `DefaultVectorIndexType_B_Named_${Date.now()}`; + try { + await client.collections.create({ + name, + vectorizers: weaviate.configure.vectors.selfProvided({ + name: 'main', + vectorIndexConfig: weaviate.configure.vectorIndex.flat(), + }), + }); + const config = await client.collections.use(name).config.get(); + expect(config.vectorizers.main.indexType).toEqual('flat'); + } finally { + await client.collections.delete(name).catch(() => undefined); + } + }); +}, 120_000); diff --git a/src/collections/config/unit.test.ts b/packages/test/node/config/unit.test.ts similarity index 97% rename from src/collections/config/unit.test.ts rename to packages/test/node/config/unit.test.ts index b975d666..fa756daf 100644 --- a/src/collections/config/unit.test.ts +++ b/packages/test/node/config/unit.test.ts @@ -1,14 +1,14 @@ import { describe, expect, it } from 'vitest'; +import { configure } from '@weaviate/core/configure'; import { WeaviateInvertedIndexConfig, WeaviateModuleConfig, WeaviateMultiTenancyConfig, WeaviateVectorsConfig, -} from '../../openapi/types'; -import { configure } from '../configure/index.js'; -import { MergeWithExisting } from './classes'; -import { GenerativeCohereConfig, RerankerCohereConfig } from './types'; -import { makeVectorsConfig } from './utils.js'; +} from '@weaviate/core/openapi/types.js'; +import { MergeWithExisting } from '@weaviate/core/config/classes.js'; +import { GenerativeCohereConfig, RerankerCohereConfig } from '@weaviate/core/config/types'; +import { makeVectorsConfig } from '@weaviate/core/config/utils.js'; describe('Unit testing of the MergeWithExisting class', () => { const deepCopy = (config: any) => JSON.parse(JSON.stringify(config)); diff --git a/src/collections/configure/unit.test.ts b/packages/test/node/configure/unit.test.ts similarity index 99% rename from src/collections/configure/unit.test.ts rename to packages/test/node/configure/unit.test.ts index 637821f3..95b3cf4d 100644 --- a/src/collections/configure/unit.test.ts +++ b/packages/test/node/configure/unit.test.ts @@ -1,5 +1,4 @@ -import { describe, expect, it } from 'vitest'; -import { requireAtLeast } from '../../../test/version.js'; +import { configure, reconfigure } from '@weaviate/core/configure'; import { GenerativeAWSConfig, GenerativeAnthropicConfig, @@ -14,26 +13,25 @@ import { GenerativeOllamaConfig, GenerativeOpenAIConfig, GenerativeXAIConfig, + InvertedIndexConfigCreate, ModuleConfig, + MultiTenancyConfigCreate, + ReplicationConfigCreate, RerankerCohereConfig, RerankerContextualAIConfig, RerankerJinaAIConfig, RerankerNvidiaConfig, RerankerTransformersConfig, RerankerVoyageAIConfig, -} from '../config/types/index.js'; -import { configure, reconfigure } from './index.js'; -import { - InvertedIndexConfigCreate, - MultiTenancyConfigCreate, - ReplicationConfigCreate, ShardingConfigCreate, VectorConfigCreate, VectorIndexConfigDynamicCreate, VectorIndexConfigFlatCreate, VectorIndexConfigHFreshCreate, VectorIndexConfigHNSWCreate, -} from './types/index.js'; +} from '@weaviate/core/types'; +import { describe, expect, it } from 'vitest'; +import { requireAtLeast } from '../../version'; describe('Unit testing of the configure & reconfigure factory classes', () => { it('should create the correct InvertedIndexConfig type with defaults', () => { diff --git a/test/connection/helpers.test.ts b/packages/test/node/connection/helpers.test.ts similarity index 95% rename from test/connection/helpers.test.ts rename to packages/test/node/connection/helpers.test.ts index 51acf42e..0b542b04 100644 --- a/test/connection/helpers.test.ts +++ b/packages/test/node/connection/helpers.test.ts @@ -1,5 +1,5 @@ +import weaviate from '@weaviate/node'; import { describe, expect, it } from 'vitest'; -import weaviate from '../../src/index.js'; const WCD_URL = 'https://piblpmmdsiknacjnm1ltla.c1.europe-west3.gcp.weaviate.cloud'; const WCD_KEY = 'cy4ua772mBlMdfw3YnclqAWzFhQt0RLIN0sl'; diff --git a/test/connection/integration.test.ts b/packages/test/node/connection/integration.test.ts similarity index 80% rename from test/connection/integration.test.ts rename to packages/test/node/connection/integration.test.ts index 2753af35..a0c9a2b9 100644 --- a/test/connection/integration.test.ts +++ b/packages/test/node/connection/integration.test.ts @@ -1,10 +1,10 @@ import { StartedWeaviateContainer, WeaviateContainer } from '@testcontainers/weaviate'; +import { WeaviateStartUpError } from '@weaviate/core/errors'; +import { Meta } from '@weaviate/core/openapi/types'; +import { DbVersion } from '@weaviate/core/utils/dbVersion'; +import weaviate from '@weaviate/node'; import { Wait } from 'testcontainers'; import { afterAll, beforeAll, describe, expect, it } from 'vitest'; -import { WeaviateStartUpError } from '../../src/errors.js'; -import weaviate from '../../src/index.js'; -import { Meta } from '../../src/openapi/types.js'; -import { DbVersion } from '../../src/utils/dbVersion.js'; describe('Integration testing of the ConnectionGRPC class', () => { let container: StartedWeaviateContainer; @@ -38,9 +38,7 @@ describe('Integration testing of the ConnectionGRPC class', () => { expect(dbVersion.isLowerThan(1, 27, 1)).toBe(true); } catch (err) { expect(err).toBeInstanceOf(WeaviateStartUpError); - expect((err as WeaviateStartUpError).message).toContain( - 'RESOURCE_EXHAUSTED: Attempted to send message with a size larger than 1' - ); + expect((err as WeaviateStartUpError).message).toContain('RESOURCE_EXHAUSTED'); expect(dbVersion.isAtLeast(1, 27, 1)).toBe(true); } }); diff --git a/test/connection/journey.test.ts b/packages/test/node/connection/journey.test.ts similarity index 96% rename from test/connection/journey.test.ts rename to packages/test/node/connection/journey.test.ts index a3c7aa99..cdc08bf3 100644 --- a/test/connection/journey.test.ts +++ b/packages/test/node/connection/journey.test.ts @@ -1,14 +1,14 @@ -import { describe, expect, it, vi } from 'vitest'; import { ApiKey, AuthAccessTokenCredentials, AuthClientCredentials, AuthUserPasswordCredentials, -} from '../../src/connection/auth.js'; -import Connection from '../../src/connection/index.js'; +} from '@weaviate/core/connection/auth.js'; +import Connection from '@weaviate/core/connection/index.js'; +import { describe, expect, it, vitest } from 'vitest'; -import { WeaviateStartUpError } from '../../src/errors.js'; -import weaviate from '../../src/index.js'; +import { WeaviateStartUpError } from '@weaviate/core/errors.js'; +import weaviate from '@weaviate/node'; const check = (cred?: string) => { if (cred == undefined || cred == '') { @@ -252,7 +252,7 @@ describe('connection', () => { }); it('warns when client auth is configured, but server auth is not', async () => { - const logSpy = vi.spyOn(console, 'warn'); + const logSpy = vitest.spyOn(console, 'warn'); const client = await weaviate.connectToLocal({ authCredentials: new AuthUserPasswordCredentials({ @@ -274,7 +274,7 @@ describe('connection', () => { }); it('warns when client access token expires, no refresh token provided', async () => { - const logSpy = vi.spyOn(console, 'warn'); + const logSpy = vitest.spyOn(console, 'warn'); const conn = new Connection({ scheme: 'http', diff --git a/test/connection/mock.test.ts b/packages/test/node/connection/mock.test.ts similarity index 91% rename from test/connection/mock.test.ts rename to packages/test/node/connection/mock.test.ts index 74c4378f..09c94e2b 100644 --- a/test/connection/mock.test.ts +++ b/packages/test/node/connection/mock.test.ts @@ -1,37 +1,40 @@ import express from 'express'; import { Server as HttpServer } from 'http'; -import { afterAll, beforeAll, describe, expect, it, vi } from 'vitest'; +import { afterAll, beforeAll, describe, expect, it, vitest } from 'vitest'; +import Connection from '@weaviate/core/connection'; import { ApiKey, AuthAccessTokenCredentials, AuthClientCredentials, AuthUserPasswordCredentials, -} from '../../src/connection/auth.js'; -import Connection from '../../src/connection/index.js'; -import { testServer } from '../server.js'; +} from '@weaviate/core/connection/auth'; +import { testServer } from '../server'; -import { createServer, Server as GrpcServer } from 'nice-grpc'; import { HealthCheckRequest, HealthCheckResponse, HealthCheckResponse_ServingStatus, HealthDefinition, HealthServiceImplementation, -} from '../../src/proto/google/health/v1/health.js'; -import { TenantsGetReply } from '../../src/proto/v1/tenants.js'; -import { WeaviateDefinition, WeaviateServiceImplementation } from '../../src/proto/v1/weaviate.js'; - -import { WeaviateRequestTimeoutError } from '../../src/errors.js'; -import weaviate, { Collection, WeaviateClient } from '../../src/index.js'; -import { AggregateReply } from '../../src/proto/v1/aggregate.js'; -import { BatchObjectsReply } from '../../src/proto/v1/batch.js'; -import { BatchDeleteReply } from '../../src/proto/v1/batch_delete.js'; -import { SearchReply } from '../../src/proto/v1/search_get.js'; -import { WEAVIATE_CLIENT_VERSION } from '../../src/version.js'; +} from '@weaviate/core/proto/google/health/v1/health'; +import { TenantsGetReply } from '@weaviate/core/proto/v1/tenants'; +import { WeaviateDefinition, WeaviateServiceImplementation } from '@weaviate/core/proto/v1/weaviate'; +import { createServer, Server as GrpcServer } from 'nice-grpc'; + +import { WeaviateRequestTimeoutError } from '@weaviate/core/errors'; +import { AggregateReply } from '@weaviate/core/proto/v1/aggregate'; +import { BatchObjectsReply } from '@weaviate/core/proto/v1/batch'; +import { BatchDeleteReply } from '@weaviate/core/proto/v1/batch_delete'; +import { SearchReply } from '@weaviate/core/proto/v1/search_get'; +import { WEAVIATE_CLIENT_VERSION } from '@weaviate/core/version'; +import weaviate, { Collection, WeaviateClient } from '@weaviate/node'; describe('mock server auth tests', () => { const server = testServer(); + + afterAll(() => server.close()); + describe('OIDC auth flows', () => { it('should login with client_credentials grant', async () => { const conn = new Connection({ @@ -283,13 +286,13 @@ const makeGrpcApp = () => { errors: [], }; }), - batchReferences: vi.fn(), - batchStream: vi.fn(), + batchReferences: vitest.fn(), + batchStream: vitest.fn(), }; const healthMockImpl: HealthServiceImplementation = { check: (request: HealthCheckRequest): Promise => Promise.resolve(HealthCheckResponse.create({ status: HealthCheckResponse_ServingStatus.SERVING })), - watch: vi.fn(), + watch: vitest.fn(), }; const grpcApp = createServer(); diff --git a/test/connection/proxy.test.ts b/packages/test/node/connection/proxy.test.ts similarity index 96% rename from test/connection/proxy.test.ts rename to packages/test/node/connection/proxy.test.ts index f181425f..fe9740d9 100644 --- a/test/connection/proxy.test.ts +++ b/packages/test/node/connection/proxy.test.ts @@ -1,5 +1,5 @@ +import weaviate from '@weaviate/node'; import { describe, expect, it } from 'vitest'; -import weaviate from '../../src/index.js'; describe('Testing of the client connecting to a proxied Weaviate instance', () => { // Skip because Envoy Proxy in CI is too flaky with strange error: diff --git a/test/collections/data/integration.test.ts b/packages/test/node/data/integration.test.ts similarity index 95% rename from test/collections/data/integration.test.ts rename to packages/test/node/data/integration.test.ts index 9ce88f02..9bc1d1f8 100644 --- a/test/collections/data/integration.test.ts +++ b/packages/test/node/data/integration.test.ts @@ -3,21 +3,13 @@ /* eslint-disable no-await-in-loop */ import { afterAll, afterEach, beforeAll, beforeEach, describe, expect, it } from 'vitest'; +import { WeaviateUnsupportedFeatureError } from '@weaviate/core/errors'; +import { GeoCoordinate, PhoneNumber } from '@weaviate/core/proto/v1/properties'; +import { CrossReference, CrossReferences, Reference } from '@weaviate/core/references'; +import { DataObject, WeaviateObject } from '@weaviate/core/types'; +import weaviate, { Collection, WeaviateClient, weaviateV2 } from '@weaviate/node'; import { v4 } from 'uuid'; -import { WeaviateUnsupportedFeatureError } from '../../../src/errors.js'; -import weaviate, { - Collection, - CrossReference, - CrossReferences, - DataObject, - GeoCoordinate, - PhoneNumber, - Reference, - WeaviateClient, - WeaviateObject, - weaviateV2, -} from '../../../src/index.js'; -import { requireAtLeast } from '../../version.js'; +import { requireAtLeast } from '../../version'; type TestCollectionData = { testProp: string; @@ -33,8 +25,8 @@ type TestCollectionData = { describe('Testing of the collection.data methods with a single target reference', () => { let client: WeaviateClient; - let collection: Collection; - const collectionName = 'TestCollectionData'; + let collection: Collection; + const collectionName = 'TestCollectionDataSTRef'; const existingID = v4(); const toBeReplacedID = v4(); @@ -586,7 +578,9 @@ describe('Testing of the collection.data methods with a multi target reference', .then(() => collectionTwo.data.insert({ two: 'two' })); }); - afterAll(() => client.collections.deleteAll()); + afterAll(() => + Promise.all([client.collections.delete(classNameOne), client.collections.delete(classNameTwo)]) + ); it('should be able to insert an object with a multi target reference', async () => { const id = await collectionTwo.data.insert({ @@ -620,8 +614,8 @@ describe('Testing of the collection.data methods with a multi target reference', describe('Testing of the collection.data.insertMany method with all possible types', () => { let client: WeaviateClient; - let collection: Collection; - const collectionName = 'TestCollectionData'; + let collection: Collection; + const collectionName = 'TestCollectionDataAll'; let id: string; type Primitives = { @@ -1142,31 +1136,31 @@ requireAtLeast(1, 36, 0).describe('Testing of the collection.data.{import, inges expect(await collection.length()).toEqual(2000); }); - it('should be able to ingest 2000 self-referencing objects with vectors from the client object', async () => { - const batching = await client.batch.stream(); - - for (let i = 0; i < 2000; i++) { - const obj = { - collection: collectionName, - properties: { - text: `object ${i}`, - }, - vectors: Array.from({ length: 128 }, () => Math.random()), - }; - const id = await batching.addObject(obj); - await batching.addReference({ - fromObjectCollection: collectionName, - fromObjectUuid: id, - fromPropertyName: 'self', - toObjectUuid: id, - }); - } - - await batching.stop(); - - expect(batching.hasErrors()).toBeFalsy(); - expect(Object.values(batching.objErrors()).length).toEqual(0); - expect(Object.values(batching.uuids()).length).toEqual(2000); - expect(await collection.length()).toEqual(2000); - }); + // it('should be able to ingest 2000 self-referencing objects with vectors from the client object', async () => { + // const batching = await client.batch.stream(); + + // for (let i = 0; i < 2000; i++) { + // const obj = { + // collection: collectionName, + // properties: { + // text: `object ${i}`, + // }, + // vectors: Array.from({ length: 128 }, () => Math.random()), + // }; + // const id = await batching.addObject(obj); + // await batching.addReference({ + // fromObjectCollection: collectionName, + // fromObjectUuid: id, + // fromPropertyName: 'self', + // toObjectUuid: id, + // }); + // } + + // await batching.stop(); + + // expect(batching.hasErrors()).toBeFalsy(); + // expect(Object.values(batching.objErrors()).length).toEqual(0); + // expect(Object.values(batching.uuids()).length).toEqual(2000); + // expect(await collection.length()).toEqual(2000); + // }); }); diff --git a/packages/test/node/data/mock.test.ts b/packages/test/node/data/mock.test.ts new file mode 100644 index 00000000..d8350706 --- /dev/null +++ b/packages/test/node/data/mock.test.ts @@ -0,0 +1,44 @@ +import { WeaviateBatchStreamError } from '@weaviate/core/errors.js'; +import weaviate from '@weaviate/node'; +import { ServerError, Status } from 'nice-grpc-common'; +import { afterAll, beforeAll, describe, expect, it } from 'vitest'; +import { listen, makeGrpcApp, makeRestApp } from '../mocks.js'; + +describe('Mock testing of batch streaming when the server errors', () => { + let closeFn: () => Promise; + + const serverErr = new ServerError(Status.INTERNAL, 'Simulated server error'); + const clientErr = new WeaviateBatchStreamError( + '/weaviate.v1.Weaviate/BatchStream INTERNAL: Simulated server error' + ); + + beforeAll(async () => { + const restApp = makeRestApp('1.36.0'); + const grpcApp = makeGrpcApp({ + async *batchStream(request: any, context: any) { + yield { started: {} }; + throw serverErr; + }, + }); + const { close } = await listen(restApp, grpcApp, 8976, 'localhost:8977'); + closeFn = close; + }); + + afterAll(() => closeFn()); + + it.skip('should handle server errors in batch streaming', async () => { + // const client = await weaviate.connectToLocal({ port: 8976, grpcPort: 8977 }); + // const batching = await client.batch.stream(); + // // give time for the server to throw the expected error + // await new Promise((resolve) => setTimeout(resolve, 1000)); + // // errors are thrown at the creation of the promise and not as part of the promise rejection + // expect(() => batching.addObject({ collection: 'Test Object' })).toThrowError(clientErr); + // // verify that error is still thrown if the promise is awaited instead + // // eslint-disable-next-line no-return-await + // await expect(async () => await batching.addObject({ collection: 'Test Object' })).rejects.toThrow( + // clientErr + // ); + // // ensure that error is thrown when stopping the batch too in case users aren't calling .addObject + // expect(() => batching.stop()).toThrowError(clientErr); + }); +}); diff --git a/src/collections/data/unit.test.ts b/packages/test/node/data/unit.test.ts similarity index 97% rename from src/collections/data/unit.test.ts rename to packages/test/node/data/unit.test.ts index d25fae1d..e8d79241 100644 --- a/src/collections/data/unit.test.ts +++ b/packages/test/node/data/unit.test.ts @@ -1,6 +1,6 @@ /* eslint-disable no-await-in-loop */ import { describe, expect, it } from 'vitest'; -import { Queue } from './batch'; +import { Queue } from '@weaviate/core/data/batch.js'; describe('Unit testing of the Queue class', () => { it('should push and pull items in FIFO order', async () => { diff --git a/test/dbVersionProvider.ts b/packages/test/node/dbVersionProvider.ts similarity index 82% rename from test/dbVersionProvider.ts rename to packages/test/node/dbVersionProvider.ts index 54a18c25..c98f4b05 100644 --- a/test/dbVersionProvider.ts +++ b/packages/test/node/dbVersionProvider.ts @@ -1,4 +1,4 @@ -import { DbVersion, VersionProvider } from '../src/utils/dbVersion.js'; +import { DbVersion, VersionProvider } from '@weaviate/core/utils/dbVersion'; export class TestDbVersionProvider implements VersionProvider { private version: string; diff --git a/test/collections/filters/integration.test.ts b/packages/test/node/filters/integration.test.ts similarity index 97% rename from test/collections/filters/integration.test.ts rename to packages/test/node/filters/integration.test.ts index 6f5f0360..e378f7e8 100644 --- a/test/collections/filters/integration.test.ts +++ b/packages/test/node/filters/integration.test.ts @@ -1,15 +1,11 @@ /* eslint-disable @typescript-eslint/no-non-null-assertion */ /* eslint-disable @typescript-eslint/no-non-null-asserted-optional-chain */ +import { Filters } from '@weaviate/core/filters'; +import { CrossReference, Reference } from '@weaviate/core/references'; +import { GeoCoordinate } from '@weaviate/core/types'; +import weaviate, { Collection, WeaviateClient } from '@weaviate/node'; import { afterAll, beforeAll, describe, expect, it } from 'vitest'; -import weaviate, { - Collection, - CrossReference, - Filters, - GeoCoordinate, - Reference, - WeaviateClient, -} from '../../../src/index.js'; -import { requireAtLeast } from '../../../test/version.js'; +import { requireAtLeast } from '../../version'; describe('Testing of the filter class with a simple collection', () => { let client: WeaviateClient; diff --git a/src/collections/filters/unit.test.ts b/packages/test/node/filters/unit.test.ts similarity index 98% rename from src/collections/filters/unit.test.ts rename to packages/test/node/filters/unit.test.ts index 528877f2..f3e1ad57 100644 --- a/src/collections/filters/unit.test.ts +++ b/packages/test/node/filters/unit.test.ts @@ -1,9 +1,9 @@ import { describe, expect, it } from 'vitest'; -import { WhereFilter } from '../../openapi/types.js'; -import { CrossReference } from '../references/index.js'; -import { Serialize } from '../serialize/index.js'; -import maker, { FilterValue, Filters } from './index.js'; -import { GeoRangeFilter } from './types.js'; +import { WhereFilter } from '@weaviate/core/openapi/types.js'; +import { CrossReference } from '@weaviate/core/references'; +import { Serialize } from '@weaviate/core/serialize'; +import maker, { FilterValue, Filters } from '@weaviate/core/filters'; +import { GeoRangeFilter } from '@weaviate/core/filters/types.js'; describe('Unit testing of filters', () => { type Person = { diff --git a/test/collections/generate/integration.test.ts b/packages/test/node/generate/integration.test.ts similarity index 98% rename from test/collections/generate/integration.test.ts rename to packages/test/node/generate/integration.test.ts index dc7981f6..6a9eb2ad 100644 --- a/test/collections/generate/integration.test.ts +++ b/packages/test/node/generate/integration.test.ts @@ -1,14 +1,10 @@ /* eslint-disable @typescript-eslint/no-non-null-assertion */ /* eslint-disable @typescript-eslint/no-non-null-asserted-optional-chain */ +import { WeaviateUnsupportedFeatureError } from '@weaviate/core/errors'; +import { generativeParameters } from '@weaviate/core/generate/config'; +import { GenerateOptions, GroupByOptions } from '@weaviate/core/types'; +import weaviate, { Collection, WeaviateClient } from '@weaviate/node'; import { afterAll, beforeAll, describe, expect, it } from 'vitest'; -import { WeaviateUnsupportedFeatureError } from '../../../src/errors.js'; -import weaviate, { - Collection, - GenerateOptions, - GroupByOptions, - WeaviateClient, - generativeParameters, -} from '../../../src/index.js'; const maybe = process.env.OPENAI_APIKEY ? describe : describe.skip; diff --git a/test/collections/generate/mock.test.ts b/packages/test/node/generate/mock.test.ts similarity index 88% rename from test/collections/generate/mock.test.ts rename to packages/test/node/generate/mock.test.ts index c74c841b..bd20f875 100644 --- a/test/collections/generate/mock.test.ts +++ b/packages/test/node/generate/mock.test.ts @@ -1,23 +1,19 @@ -import express from 'express'; -import { Server as HttpServer } from 'http'; -import { Server as GrpcServer, createServer } from 'nice-grpc'; -import { afterAll, beforeAll, describe, expect, it, vi } from 'vitest'; -import weaviate, { - Collection, - GenerativeConfigRuntime, - WeaviateClient, - generativeParameters, -} from '../../../src/index.js'; +import { generativeParameters } from '@weaviate/core/generate/config'; import { HealthCheckRequest, HealthCheckResponse, HealthCheckResponse_ServingStatus, HealthDefinition, HealthServiceImplementation, -} from '../../../src/proto/google/health/v1/health'; -import { GenerativeResult } from '../../../src/proto/v1/generative'; -import { SearchReply, SearchRequest, SearchResult } from '../../../src/proto/v1/search_get'; -import { WeaviateDefinition, WeaviateServiceImplementation } from '../../../src/proto/v1/weaviate'; +} from '@weaviate/core/proto/google/health/v1/health'; +import { GenerativeResult } from '@weaviate/core/proto/v1/generative'; +import { SearchReply, SearchRequest, SearchResult } from '@weaviate/core/proto/v1/search_get'; +import { WeaviateDefinition, WeaviateServiceImplementation } from '@weaviate/core/proto/v1/weaviate'; +import weaviate, { Collection, GenerativeConfigRuntime, WeaviateClient } from '@weaviate/node'; +import express from 'express'; +import { Server as HttpServer } from 'http'; +import { Server as GrpcServer, createServer } from 'nice-grpc'; +import { afterAll, beforeAll, describe, expect, it, vitest } from 'vitest'; const mockedSingleGenerative = 'Mocked single response'; const mockedGroupedGenerative = 'Mocked group response'; @@ -40,7 +36,7 @@ class GenerateMock { const healthMockImpl: HealthServiceImplementation = { check: (request: HealthCheckRequest): Promise => Promise.resolve(HealthCheckResponse.create({ status: HealthCheckResponse_ServingStatus.SERVING })), - watch: vi.fn(), + watch: vitest.fn(), }; const grpc = createServer(); @@ -48,8 +44,8 @@ class GenerateMock { // Search endpoint returning generative mock data const weaviateMockImpl: WeaviateServiceImplementation = { - aggregate: vi.fn(), - tenantsGet: vi.fn(), + aggregate: vitest.fn(), + tenantsGet: vitest.fn(), search: (req: SearchRequest): Promise => { expect(req.generative?.grouped?.queries.length).toBeGreaterThan(0); expect(req.generative?.single?.queries.length).toBeGreaterThan(0); @@ -82,10 +78,10 @@ class GenerateMock { }) ); }, - batchDelete: vi.fn(), - batchObjects: vi.fn(), - batchReferences: vi.fn(), - batchStream: vi.fn(), + batchDelete: vitest.fn(), + batchObjects: vitest.fn(), + batchReferences: vitest.fn(), + batchStream: vitest.fn(), }; grpc.add(WeaviateDefinition, weaviateMockImpl); diff --git a/src/collections/generate/unit.test.ts b/packages/test/node/generate/unit.test.ts similarity index 98% rename from src/collections/generate/unit.test.ts rename to packages/test/node/generate/unit.test.ts index fd31f9dc..6e99d414 100644 --- a/src/collections/generate/unit.test.ts +++ b/packages/test/node/generate/unit.test.ts @@ -1,6 +1,6 @@ +import { generativeParameters } from '@weaviate/core/generate/config'; +import { GenerativeConfigRuntimeType, ModuleConfig } from '@weaviate/core/types'; import { describe, expect, it } from 'vitest'; -import { GenerativeConfigRuntimeType, ModuleConfig } from '../types'; -import { generativeParameters } from './config'; // only tests fields that must be mapped from some public name to a gRPC name, e.g. baseURL -> baseUrl and stop: string[] -> stop: TextArray describe('Unit testing of the generativeParameters factory methods', () => { diff --git a/test/groups/integration.test.ts b/packages/test/node/groups/integration.test.ts similarity index 85% rename from test/groups/integration.test.ts rename to packages/test/node/groups/integration.test.ts index b9d79e4c..bc7ddb80 100644 --- a/test/groups/integration.test.ts +++ b/packages/test/node/groups/integration.test.ts @@ -1,6 +1,6 @@ +import weaviate, { ApiKey, GroupAssignment } from '@weaviate/node'; import { expect, it } from 'vitest'; -import weaviate, { ApiKey, GroupAssignment } from '../../src/index.js'; -import { requireAtLeast } from '../../test/version.js'; +import { requireAtLeast } from '../../version'; requireAtLeast(1, 32, 5).describe('Integration testing of the OIDC groups', () => { const makeClient = (key: string = 'admin-key') => @@ -47,8 +47,8 @@ requireAtLeast(1, 32, 5).describe('Integration testing of the OIDC groups', () = it('should get group assignments', async () => { const client = await makeClient(); const roleName = 'test_group_assignements_role'; - await client.roles.delete(roleName).catch((e) => {}); - await client.roles.create(roleName, []).catch((e) => {}); + await client.roles.delete(roleName).catch((e: any) => {}); + await client.roles.create(roleName, []).catch((e: any) => {}); await expect(client.roles.getGroupAssignments(roleName)).resolves.toHaveLength(0); @@ -68,9 +68,9 @@ requireAtLeast(1, 32, 5).describe('Integration testing of the OIDC groups', () = it('cleanup', async () => { await makeClient().then((c) => { - c.groups.oidc.revokeRoles('./assign-group', ['viewer', 'admin']).catch((e) => {}); - c.groups.oidc.revokeRoles('./group-1', 'viewer').catch((e) => {}); - c.groups.oidc.revokeRoles('./group-2', 'viewer').catch((e) => {}); + c.groups.oidc.revokeRoles('./assign-group', ['viewer', 'admin']).catch((e: any) => {}); + c.groups.oidc.revokeRoles('./group-1', 'viewer').catch((e: any) => {}); + c.groups.oidc.revokeRoles('./group-2', 'viewer').catch((e: any) => {}); }); }); }); diff --git a/packages/test/node/integration.test.ts b/packages/test/node/integration.test.ts new file mode 100644 index 00000000..0bc6cb5e --- /dev/null +++ b/packages/test/node/integration.test.ts @@ -0,0 +1,23 @@ +import weaviate from '@weaviate/node'; +import { describe, expect, it, vitest } from 'vitest'; + +describe('Integration testing of the client methods', () => { + it('should connect using connectToLocal defaults', () => { + return weaviate.connectToLocal(); + }); + + it('should connect using connectToLocal with schema-ed host', () => { + const logSpy = vitest.spyOn(console, 'warn'); + return weaviate + .connectToLocal({ + host: 'http://localhost', + }) + .then(() => expect(logSpy).toHaveBeenCalledTimes(2)); + }); + + it('should connect using connectToLocal with non-schema-ed host', () => { + return weaviate.connectToLocal({ + host: 'localhost', + }); + }); +}); diff --git a/test/collections/iterator/integration.test.ts b/packages/test/node/iterator/integration.test.ts similarity index 97% rename from test/collections/iterator/integration.test.ts rename to packages/test/node/iterator/integration.test.ts index fe576800..7f584b89 100644 --- a/test/collections/iterator/integration.test.ts +++ b/packages/test/node/iterator/integration.test.ts @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/no-non-null-assertion */ /* eslint-disable @typescript-eslint/no-non-null-asserted-optional-chain */ +import weaviate, { Collection, WeaviateClient } from '@weaviate/node'; import { afterAll, beforeAll, describe, expect, it } from 'vitest'; -import weaviate, { Collection, WeaviateClient } from '../../../src/index.js'; describe('Testing of the collection.iterator method with a simple collection', () => { let client: WeaviateClient; diff --git a/test/collections/journey.test.ts b/packages/test/node/journey.test.ts similarity index 97% rename from test/collections/journey.test.ts rename to packages/test/node/journey.test.ts index 673baeb7..72fae31f 100644 --- a/test/collections/journey.test.ts +++ b/packages/test/node/journey.test.ts @@ -1,6 +1,6 @@ +import { GeoCoordinate } from '@weaviate/core/proto/v1/properties'; +import weaviate, { CollectionConfig, WeaviateClient } from '@weaviate/node'; import { afterAll, beforeAll, describe, expect, it } from 'vitest'; -import weaviate, { CollectionConfig, WeaviateClient } from '../../src/index.js'; -import { GeoCoordinate } from '../../src/proto/v1/properties.js'; describe('Journey testing of the client using a WCD cluster', () => { let client: WeaviateClient; diff --git a/test/mocks.ts b/packages/test/node/mocks.ts similarity index 91% rename from test/mocks.ts rename to packages/test/node/mocks.ts index 5dff3268..70c9314b 100644 --- a/test/mocks.ts +++ b/packages/test/node/mocks.ts @@ -1,14 +1,14 @@ -import express, { Express } from 'express'; -import { createServer, Server as GrpcServer } from 'nice-grpc'; -import { vi } from 'vitest'; import { HealthCheckResponse, HealthCheckResponse_ServingStatus, HealthDefinition, HealthServiceImplementation, -} from '../src/proto/google/health/v1/health'; -import { DeepPartial } from '../src/proto/v1/batch'; -import { WeaviateDefinition, WeaviateServiceImplementation } from '../src/proto/v1/weaviate'; +} from '@weaviate/core/proto/google/health/v1/health'; +import { DeepPartial } from '@weaviate/core/proto/v1/batch'; +import { WeaviateDefinition, WeaviateServiceImplementation } from '@weaviate/core/proto/v1/weaviate'; +import express, { Express } from 'express'; +import { createServer, Server as GrpcServer } from 'nice-grpc'; +import { vi } from 'vitest'; export const makeRestApp = (version: string, endpoints?: (app: Express) => void) => { const app = express(); diff --git a/test/collections/query/integration.test.ts b/packages/test/node/query/integration.test.ts similarity index 99% rename from test/collections/query/integration.test.ts rename to packages/test/node/query/integration.test.ts index e2cb3520..f40e69f9 100644 --- a/test/collections/query/integration.test.ts +++ b/packages/test/node/query/integration.test.ts @@ -1,17 +1,13 @@ /* eslint-disable @typescript-eslint/no-non-null-assertion */ /* eslint-disable @typescript-eslint/no-non-null-asserted-optional-chain */ +import { WeaviateUnsupportedFeatureError } from '@weaviate/core/errors'; +import { Bm25Operator } from '@weaviate/core/query/utils'; +import { CrossReference, Reference } from '@weaviate/core/references'; +import { GroupByOptions } from '@weaviate/core/types'; +import weaviate, { Collection, WeaviateClient } from '@weaviate/node'; import { AbortError } from 'abort-controller-x'; import { afterAll, beforeAll, describe, expect, it } from 'vitest'; -import { WeaviateUnsupportedFeatureError } from '../../../src/errors.js'; -import weaviate, { - Bm25Operator, - Collection, - CrossReference, - GroupByOptions, - Reference, - WeaviateClient, -} from '../../../src/index.js'; -import { requireAtLeast } from '../../../test/version.js'; +import { requireAtLeast } from '../../version'; describe('Testing of the collection.query methods with a simple collection', () => { let client: WeaviateClient; diff --git a/test/roles/integration.test.ts b/packages/test/node/roles/integration.test.ts similarity index 99% rename from test/roles/integration.test.ts rename to packages/test/node/roles/integration.test.ts index d8082a8f..7563ce4c 100644 --- a/test/roles/integration.test.ts +++ b/packages/test/node/roles/integration.test.ts @@ -1,5 +1,4 @@ -import { afterAll, beforeAll, describe, expect, it } from 'vitest'; -import { WeaviateStartUpError, WeaviateUnexpectedStatusCodeError } from '../../src/errors'; +import { WeaviateStartUpError, WeaviateUnexpectedStatusCodeError } from '@weaviate/core/errors'; import weaviate, { ApiKey, CollectionsAction, @@ -10,8 +9,9 @@ import weaviate, { TenantsAction, UserAssignment, WeaviateClient, -} from '../../src/index.js'; -import { requireAtLeast } from '../../test/version'; +} from '@weaviate/node'; +import { afterAll, beforeAll, describe, expect, it } from 'vitest'; +import { requireAtLeast } from '../../version'; type TestCase = { roleName: string; diff --git a/src/collections/serialize/unit.test.ts b/packages/test/node/serialize/unit.test.ts similarity index 97% rename from src/collections/serialize/unit.test.ts rename to packages/test/node/serialize/unit.test.ts index 6d780f27..b7f9490b 100644 --- a/src/collections/serialize/unit.test.ts +++ b/packages/test/node/serialize/unit.test.ts @@ -1,4 +1,5 @@ -import { describe, expect, it } from 'vitest'; +import filter from '@weaviate/core/filters'; +import { Filters as FiltersFactory } from '@weaviate/core/filters/classes'; import { SearchBm25Args, SearchFetchArgs, @@ -12,8 +13,8 @@ import { SearchNearThermalArgs, SearchNearVectorArgs, SearchNearVideoArgs, -} from '../../grpc/searcher.js'; -import { Filters, Filters_Operator, Vectors, Vectors_VectorType } from '../../proto/v1/base.js'; +} from '@weaviate/core/grpc/searcher'; +import { Filters, Filters_Operator, Vectors, Vectors_VectorType } from '@weaviate/core/proto/v1/base'; import { BM25, CombinationMethod, @@ -30,17 +31,16 @@ import { NearVector, NearVideoSearch, Targets, -} from '../../proto/v1/base_search.js'; -import { GenerativeSearch } from '../../proto/v1/generative.js'; -import { GroupBy, MetadataRequest, PropertiesRequest } from '../../proto/v1/search_get.js'; -import { Filters as FiltersFactory } from '../filters/classes.js'; -import filter from '../filters/index.js'; -import { TargetVectorInputType } from '../query/types.js'; -import { Reference } from '../references/index.js'; -import sort from '../sort/index.js'; -import { WeaviateField } from '../types/index.js'; -import multiTargetVector from '../vectors/multiTargetVector.js'; -import { DataGuards, Serialize } from './index.js'; +} from '@weaviate/core/proto/v1/base_search'; +import { GenerativeSearch } from '@weaviate/core/proto/v1/generative'; +import { GroupBy, MetadataRequest, PropertiesRequest } from '@weaviate/core/proto/v1/search_get'; +import { TargetVectorInputType } from '@weaviate/core/query/types'; +import { Reference } from '@weaviate/core/references'; +import { DataGuards, Serialize } from '@weaviate/core/serialize'; +import sort from '@weaviate/core/sort'; +import { WeaviateField } from '@weaviate/core/types'; +import multiTargetVector from '@weaviate/core/vectors/multiTargetVector'; +import { describe, expect, it } from 'vitest'; describe('Unit testing of Serialize', () => { it('should parse args for fetchObjects', () => { @@ -474,14 +474,11 @@ describe('Unit testing of Serialize', () => { }); it('should parse args for generative', async () => { - const args = await Serialize.generative( - { supportsSingleGrouped: false }, - { - singlePrompt: 'test', - groupedProperties: ['name'], - groupedTask: 'testing', - } - ); + const args = await Serialize.generative({ supportsSingleGrouped: false }, (any) => Promise.resolve(''), { + singlePrompt: 'test', + groupedProperties: ['name'], + groupedTask: 'testing', + }); expect(args).toEqual({ singleResponsePrompt: 'test', groupedProperties: ['name'], diff --git a/test/server.ts b/packages/test/node/server.ts similarity index 100% rename from test/server.ts rename to packages/test/node/server.ts diff --git a/test/collections/sort/integration.test.ts b/packages/test/node/sort/integration.test.ts similarity index 99% rename from test/collections/sort/integration.test.ts rename to packages/test/node/sort/integration.test.ts index a4b89a2b..ef40f52a 100644 --- a/test/collections/sort/integration.test.ts +++ b/packages/test/node/sort/integration.test.ts @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/no-non-null-assertion */ /* eslint-disable @typescript-eslint/no-non-null-asserted-optional-chain */ +import weaviate, { Collection, WeaviateClient } from '@weaviate/node'; import { afterAll, beforeAll, describe, expect, it } from 'vitest'; -import weaviate, { Collection, WeaviateClient } from '../../../src/index.js'; describe('Testing of the Sort class with a simple collection', () => { let client: WeaviateClient; diff --git a/test/collections/tenants/integration.test.ts b/packages/test/node/tenants/integration.test.ts similarity index 96% rename from test/collections/tenants/integration.test.ts rename to packages/test/node/tenants/integration.test.ts index daf57d64..f4eb7f05 100644 --- a/test/collections/tenants/integration.test.ts +++ b/packages/test/node/tenants/integration.test.ts @@ -1,19 +1,19 @@ /* eslint-disable @typescript-eslint/no-non-null-assertion */ +import { WeaviateUnsupportedFeatureError } from '@weaviate/core/errors'; +import weaviate, { Collection, WeaviateClient } from '@weaviate/node'; import { afterAll, beforeAll, describe, expect, it } from 'vitest'; -import { WeaviateUnsupportedFeatureError } from '../../../src/errors.js'; -import weaviate, { Collection, WeaviateClient } from '../../../src/index.js'; describe('Testing of the collection.tenants methods', () => { let client: WeaviateClient; let collection: Collection; const collectionName = 'TestCollectionTenants'; - afterAll(() => { - return client.collections.delete(collectionName).catch((err) => { + afterAll(() => + client.collections.delete(collectionName).catch((err) => { console.error(err); throw err; - }); - }); + }) + ); beforeAll(async () => { client = await weaviate.connectToLocal(); diff --git a/src/collections/tenants/unit.test.ts b/packages/test/node/tenants/mock.test.ts similarity index 90% rename from src/collections/tenants/unit.test.ts rename to packages/test/node/tenants/mock.test.ts index 75574c83..18d79a94 100644 --- a/src/collections/tenants/unit.test.ts +++ b/packages/test/node/tenants/mock.test.ts @@ -1,19 +1,20 @@ import express from 'express'; import { Server as HttpServer } from 'http'; -import { afterAll, beforeAll, describe, expect, it, vi } from 'vitest'; -import { createServer, Server as GrpcServer } from 'nice-grpc'; import { HealthCheckRequest, HealthCheckResponse, HealthCheckResponse_ServingStatus, HealthDefinition, HealthServiceImplementation, -} from '../../proto/google/health/v1/health'; -import { TenantActivityStatus, TenantsGetReply, TenantsGetRequest } from '../../proto/v1/tenants'; -import { WeaviateDefinition, WeaviateServiceImplementation } from '../../proto/v1/weaviate'; +} from '@weaviate/core/proto/google/health/v1/health'; +import { TenantActivityStatus, TenantsGetReply, TenantsGetRequest } from '@weaviate/core/proto/v1/tenants'; +import { WeaviateDefinition, WeaviateServiceImplementation } from '@weaviate/core/proto/v1/weaviate'; +import { createServer, Server as GrpcServer } from 'nice-grpc'; + +import weaviate, { Tenant } from '@weaviate/node'; -import weaviate, { Tenant } from '../../index'; +import { afterAll, beforeAll, describe, expect, it, vitest } from 'vitest'; const TENANTS_COLLECTION_NAME = 'TestCollectionTenants'; @@ -34,7 +35,7 @@ const makeRestApp = (version: string) => { const makeGrpcApp = () => { const weaviateMockImpl: WeaviateServiceImplementation = { - aggregate: vi.fn(), + aggregate: vitest.fn(), tenantsGet: (request: TenantsGetRequest): Promise => Promise.resolve({ took: 0.1, @@ -46,16 +47,16 @@ const makeGrpcApp = () => { { name: 'unfreezing', activityStatus: TenantActivityStatus.TENANT_ACTIVITY_STATUS_UNFREEZING }, ], }), - search: vi.fn(), - batchDelete: vi.fn(), - batchObjects: vi.fn(), - batchReferences: vi.fn(), - batchStream: vi.fn(), + search: vitest.fn(), + batchDelete: vitest.fn(), + batchObjects: vitest.fn(), + batchReferences: vitest.fn(), + batchStream: vitest.fn(), }; const healthMockImpl: HealthServiceImplementation = { check: (request: HealthCheckRequest): Promise => Promise.resolve(HealthCheckResponse.create({ status: HealthCheckResponse_ServingStatus.SERVING })), - watch: vi.fn(), + watch: vitest.fn(), }; const grpcApp = createServer(); diff --git a/test/tokenize/integration.test.ts b/packages/test/node/tokenize/integration.test.ts similarity index 51% rename from test/tokenize/integration.test.ts rename to packages/test/node/tokenize/integration.test.ts index f9bc1821..7d07744b 100644 --- a/test/tokenize/integration.test.ts +++ b/packages/test/node/tokenize/integration.test.ts @@ -1,10 +1,10 @@ -import { beforeAll, expect, it } from 'vitest'; -import { WeaviateInvalidInputError } from '../../src/errors.js'; -import weaviate, { WeaviateClient } from '../../src/index.js'; -import { TokenizeResult } from '../../src/tokenize/types.js'; -import { requireAtLeast } from '../version.js'; +import { WeaviateInvalidInputError } from '@weaviate/core/errors.js'; +import { TokenizeResult } from '@weaviate/core/tokenize/types.js'; +import weaviate, { WeaviateClient } from '@weaviate/node'; +import { afterAll, beforeAll, describe, expect, it } from 'vitest'; +import { requireAtLeast } from '../../version'; -requireAtLeast(1, 37, 0).describe('tokenize integration test', () => { +requireAtLeast(1, 37, 0).describe('client tokenize integration test', () => { let client: WeaviateClient; beforeAll(async () => { @@ -154,3 +154,115 @@ requireAtLeast(1, 37, 2).describe('tokenize stopwords / stopwordPresets', () => ).rejects.toThrow(WeaviateInvalidInputError); }); }); + +requireAtLeast(1, 37, 0).describe('collection tokenization: schema config round-trip', () => { + let client: WeaviateClient; + + beforeAll(async () => { + client = await weaviate.connectToLocal(); + }); + + afterAll(async () => { + // Only clean up collections this suite owns; deleteAll() races with + // sibling integration tests that share the same Weaviate instance. + await client.collections.delete('TestTokenizationRoundTrip').catch(() => {}); + await client.collections.delete('TestTokenizationRoundTripErgonomic').catch(() => {}); + await client.close(); + }); + + it('round-trips invertedIndex.stopwordPresets and per-property textAnalyzer through collection.config.get()', async () => { + const collectionName = 'TestTokenizationRoundTrip'; + await client.collections.delete(collectionName).catch(() => {}); + + await client.collections.create({ + name: collectionName, + invertedIndex: { + stopwordPresets: { + fr: ['le', 'la', 'les', 'un', 'une', 'des', 'du', 'de', 'et'], + }, + }, + properties: [ + { + name: 'name_en', + dataType: 'text' as const, + tokenization: 'word' as const, + textAnalyzer: { stopwordPreset: 'en' }, + }, + { + name: 'name_fr', + dataType: 'text' as const, + tokenization: 'word' as const, + textAnalyzer: { stopwordPreset: 'fr' }, + }, + { + name: 'description', + dataType: 'text' as const, + tokenization: 'word' as const, + // Same union shape the tokenize endpoint accepts. + textAnalyzer: { asciiFold: { ignore: ['é'] } }, + }, + ], + vectorizers: weaviate.configure.vectors.selfProvided(), + }); + + // Insert + query end-to-end so the user-facing surface is exercised + // beyond just the schema serializer. + const collection = client.collections.use(collectionName); + await collection.data.insertMany([ + { + name_en: 'The Blue Cup and the Bowl', + name_fr: 'La Tasse Bleue et le Bol', + description: 'Café au lait', + }, + { + name_en: 'A Red Plate with the Saucer', + name_fr: 'Une Assiette Rouge avec la Soucoupe', + description: 'Crème brûlée', + }, + ]); + + const config = await collection.config.get(); + + // Collection-level preset library is round-tripped verbatim + expect(config.invertedIndex.stopwordPresets).toEqual({ + fr: ['le', 'la', 'les', 'un', 'une', 'des', 'du', 'de', 'et'], + }); + + // Per-property textAnalyzer is also round-tripped through PropertyConfig. + // The deserializer translates the wire flat shape (asciiFold + asciiFoldIgnore) + // back into the user-facing union shape (asciiFold: { ignore: [...] }). + const enProp = config.properties.find((p) => p.name === 'name_en')!; + const frProp = config.properties.find((p) => p.name === 'name_fr')!; + const descProp = config.properties.find((p) => p.name === 'description')!; + + expect(enProp.textAnalyzer?.stopwordPreset).toBe('en'); + expect(frProp.textAnalyzer?.stopwordPreset).toBe('fr'); + expect(descProp.textAnalyzer?.asciiFold).toEqual({ ignore: ['é'] }); + }); + + it('round-trips textAnalyzer when configured via the ergonomic asciiFold object form', async () => { + const collectionName = 'TestTokenizationRoundTripErgonomic'; + await client.collections.delete(collectionName).catch(() => {}); + + await client.collections.create({ + name: collectionName, + properties: [ + { + name: 'description', + dataType: 'text' as const, + tokenization: 'word' as const, + // Same shorthand the tokenize endpoint accepts — should produce the + // same wire payload and the same read-back value as the example above. + textAnalyzer: { asciiFold: { ignore: ['é'] } }, + }, + ], + vectorizers: weaviate.configure.vectors.selfProvided(), + }); + + const config = await client.collections.use(collectionName).config.get(); + const descProp = config.properties.find((p) => p.name === 'description')!; + expect(descProp.textAnalyzer?.asciiFold).toEqual({ ignore: ['é'] }); + + await client.collections.delete(collectionName); + }); +}); diff --git a/test/users/integration.test.ts b/packages/test/node/users/integration.test.ts similarity index 97% rename from test/users/integration.test.ts rename to packages/test/node/users/integration.test.ts index 48b80b97..c0746ae7 100644 --- a/test/users/integration.test.ts +++ b/packages/test/node/users/integration.test.ts @@ -1,8 +1,8 @@ +import { WeaviateUserTypeDB } from '@weaviate/core/openapi/types'; +import { GetUserOptions, UserDB } from '@weaviate/core/users/types'; +import weaviate, { ApiKey, WeaviateClient } from '@weaviate/node'; import { afterAll, beforeAll, expect, it } from 'vitest'; -import weaviate, { ApiKey, WeaviateClient } from '../../src/index.js'; -import { WeaviateUserTypeDB } from '../../src/openapi/types.js'; -import { GetUserOptions, UserDB } from '../../src/users/types.js'; -import { requireAtLeast } from '../../test/version.js'; +import { requireAtLeast } from '../../version'; requireAtLeast(1, 29, 0).describe('Integration testing of the users namespace', () => { const makeClient = (key: string) => diff --git a/test/utils/journey.test.ts b/packages/test/node/utils/journey.test.ts similarity index 93% rename from test/utils/journey.test.ts rename to packages/test/node/utils/journey.test.ts index 0dc82d57..80e54f5f 100644 --- a/test/utils/journey.test.ts +++ b/packages/test/node/utils/journey.test.ts @@ -1,5 +1,5 @@ +import { DbVersionProvider, DbVersionSupport } from '@weaviate/core/utils/dbVersion'; import { describe, expect, it } from 'vitest'; -import { DbVersionProvider, DbVersionSupport } from '../../src/utils/dbVersion.js'; const EMPTY_VERSION = ''; const VERSION_1 = '1.2.3'; @@ -30,7 +30,7 @@ describe('db version provider', () => { case 2: return Promise.resolve(VERSION_2); default: - expect.unreachable('should not be called more then 2 times'); + throw new Error('should not be called more then 2 times'); } }; const dbVersionProvider = new DbVersionProvider(versionGetter); @@ -48,7 +48,7 @@ describe('db version provider', () => { case 1: return Promise.resolve(VERSION_1); default: - expect.unreachable('should not be called more then 1 time'); + throw new Error('should not be called more then 1 time'); } }; const dbVersionProvider = new DbVersionProvider(versionGetter); @@ -71,7 +71,7 @@ describe('db version provider', () => { case 3: return Promise.resolve(VERSION_1); default: - expect.unreachable('should not be called more then 3 times'); + throw new Error('should not be called more then 3 times'); } }; const dbVersionProvider = new DbVersionProvider(versionGetter); diff --git a/test/collections/vectors/journey.test.ts b/packages/test/node/vectors/integration.test.ts similarity index 98% rename from test/collections/vectors/journey.test.ts rename to packages/test/node/vectors/integration.test.ts index 30dec6a3..5c4e5019 100644 --- a/test/collections/vectors/journey.test.ts +++ b/packages/test/node/vectors/integration.test.ts @@ -1,14 +1,14 @@ /* eslint-disable @typescript-eslint/no-non-null-assertion */ /* eslint-disable @typescript-eslint/no-non-null-asserted-optional-chain */ -import { afterAll, beforeAll, expect, it } from 'vitest'; import weaviate, { Collection, MultiVectorType, SingleVectorType, VectorIndexConfigHNSW, WeaviateClient, -} from '../../../src/index.js'; -import { requireAtLeast } from '../../../test/version.js'; +} from '@weaviate/node'; +import { afterAll, beforeAll, expect, it } from 'vitest'; +import { requireAtLeast } from '../../version'; requireAtLeast(1, 29, 0).describe( 'Testing of the collection.query methods with a collection with multvectors', diff --git a/packages/test/package.json b/packages/test/package.json new file mode 100644 index 00000000..5fb958f7 --- /dev/null +++ b/packages/test/package.json @@ -0,0 +1,26 @@ +{ + "name": "@weaviate/test", + "private": true, + "scripts": { + "test": "vitest run", + "test:watch": "vitest" + }, + "devDependencies": { + "@curveball/bodyparser": "0.5.0", + "@curveball/core": "^1.0.2", + "@curveball/kernel": "^1.0.0", + "@testcontainers/weaviate": "11.14.0", + "testcontainers": "11.14.0", + "@types/express": "^4.17.23", + "@types/uuid": "^9.0.8", + "@weaviate/core": "workspace:^1.0.0", + "@weaviate/node": "workspace:^1.0.0", + "@weaviate/web": "workspace:^1.0.0", + "abort-controller-x": "^0.5.0", + "express": "^4.21.2", + "nice-grpc": "^2.1.12", + "nice-grpc-common": "^2.0.3", + "uuid": "^9.0.1", + "vitest": "^3.2.4" + } +} diff --git a/packages/test/tsconfig.json b/packages/test/tsconfig.json new file mode 100644 index 00000000..a7a83bf2 --- /dev/null +++ b/packages/test/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "types": ["express", "uuid", "vitest"], + "strict": true, + "esModuleInterop": true, + "paths": { + "@weaviate/core/*": ["../core/src/*"], + "@weaviate/node": ["../node/src"] + } + }, + "include": ["node", "web", "version.ts"], + "references": [{ "path": "../core" }, { "path": "../node" }] + +} diff --git a/test/version.ts b/packages/test/version.ts similarity index 50% rename from test/version.ts rename to packages/test/version.ts index dcfbc879..3d25a3f1 100644 --- a/test/version.ts +++ b/packages/test/version.ts @@ -1,16 +1,18 @@ -import { describe, it } from 'vitest'; -import { DbVersion } from '../src/utils/dbVersion'; +import { DbVersion } from '@weaviate/core/utils/dbVersion'; +import { describe, it, SuiteAPI, TestAPI } from 'vitest'; const version = DbVersion.fromString(`v${process.env.WEAVIATE_VERSION!}`); /** Run the suite / test only for Weaviate version above this. */ -export const requireAtLeast = (...semver: [...Parameters]) => +export const requireAtLeast = ( + ...semver: [...Parameters] +): { describe: SuiteAPI; it: TestAPI } => version.isAtLeast(...semver) ? { describe, it, } - : { + : ({ describe: describe.skip, it: it.skip, - }; + } as any); diff --git a/packages/test/vitest.config.ts b/packages/test/vitest.config.ts new file mode 100644 index 00000000..d5ebfdf9 --- /dev/null +++ b/packages/test/vitest.config.ts @@ -0,0 +1,22 @@ +import path from 'path'; +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { + environment: 'node', + clearMocks: false, + coverage: { + provider: 'v8', + include: ['src/**/*.ts'], + exclude: ['node_modules', 'dist', 'src/proto'], + reporter: ['text', 'json', 'html'], + }, + testTimeout: 100000, + }, + resolve: { + alias: { + '@weaviate/core': path.resolve(__dirname, '../core/src'), + '@weaviate/core/*': path.resolve(__dirname, '../core/src/*'), + }, + }, +}); diff --git a/packages/test/web/connect.test.ts b/packages/test/web/connect.test.ts new file mode 100644 index 00000000..f5b1be7c --- /dev/null +++ b/packages/test/web/connect.test.ts @@ -0,0 +1,11 @@ +import { describe, it, expect } from 'vitest'; +import weaviate from '@weaviate/web'; +import { requireAtLeast } from '../version'; + +requireAtLeast(1, 39, 0).describe('connectToLocal', () => { + it('should connect to a local Weaviate instance using grpc-web', async () => { + const client = await weaviate.connectToLocal(); + const response = await client.getMeta(); + expect(response).toHaveProperty('version'); + }); +}); diff --git a/packages/web/package.json b/packages/web/package.json new file mode 100644 index 00000000..85439b8d --- /dev/null +++ b/packages/web/package.json @@ -0,0 +1,54 @@ +{ + "name": "@weaviate/web", + "version": "1.0.0", + "description": "JS/TS web client for Weaviate", + "main": "dist/cjs/src/index.js", + "type": "module", + "exports": { + ".": { + "types": { + "require": "./dist/cjs/src/index.d.ts", + "default": "./dist/esm/src/index.d.ts" + }, + "default": { + "require": "./dist/cjs/src/index.js", + "default": "./dist/esm/src/index.js" + } + } + }, + "engines": { + "node": ">=22.0.0" + }, + "files": [ + "dist/cjs", + "dist/esm" + ], + "scripts": { + "build:cjs": "tsc --module commonjs --moduleResolution node10 --outDir dist/cjs && touch dist/cjs/package.json && echo '{\"type\": \"commonjs\"}' > dist/cjs/package.json", + "build:esm": "tsc --outDir dist/esm && touch dist/esm/package.json && echo '{\"type\": \"module\"}' > dist/esm/package.json", + "build": "npm run build:cjs && npm run build:esm" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/weaviate/typescript-client.git" + }, + "keywords": [ + "weaviate" + ], + "author": "Weaviate", + "license": "BSD 3-Clause", + "bugs": { + "url": "https://github.com/weaviate/typescript-client/issues" + }, + "homepage": "https://github.com/weaviate/typescript-client#readme", + "dependencies": { + "@weaviate/core": "workspace:^1.0.0", + "nice-grpc-web": "^3.3.10" + }, + "devDependencies": { + "@types/node": "^18.14.0", + "@types/uuid": "^9.0.1", + "vitest": "^4.0.16", + "typescript": "^5.9.3" + } +} diff --git a/packages/web/src/base64.test.ts b/packages/web/src/base64.test.ts new file mode 100644 index 00000000..dab4bd95 --- /dev/null +++ b/packages/web/src/base64.test.ts @@ -0,0 +1,62 @@ +import { beforeEach, describe, expect, it, Mock, vitest } from 'vitest'; +import { downloadImageFromURLAsBase64 } from './base64.js'; + +vitest.mock('../connection/http.js'); + +describe('downloadImageFromURLAsBase64()', () => { + const mockFetch = vitest.fn(); + + beforeEach(() => { + vitest.clearAllMocks(); + (fetch as Mock).mockReturnValue(mockFetch); + }); + + it('should convert a downloaded image to base64', async () => { + const mockUrl = 'https://example.com/image.jpg'; + const mockImageData = Buffer.from('image binary data'); + + mockFetch.mockResolvedValue(mockImageData); + + const result = await downloadImageFromURLAsBase64(mockUrl); + + expect(result).toBe(mockImageData.toString('base64')); + expect(fetch).toHaveBeenCalledWith({ headers: { 'Content-Type': 'image/*' }, host: '' }); + expect(mockFetch).toHaveBeenCalledWith(mockUrl); + }); + + it('should throw an error if the URL is invalid', async () => { + const invalidUrl = 'invalid-url'; + + await expect(downloadImageFromURLAsBase64(invalidUrl)).rejects.toThrow('Invalid URL'); + }); + + it('should throw an error if the image download fails', async () => { + const mockUrl = 'https://example.com/image.jpg'; + + mockFetch.mockRejectedValue(new Error('Network error')); + + await expect(downloadImageFromURLAsBase64(mockUrl)).rejects.toThrow('Failed to download image from URL'); + expect(fetch).toHaveBeenCalledWith({ headers: { 'Content-Type': 'image/*' }, host: '' }); + expect(mockFetch).toHaveBeenCalledWith(mockUrl); + }); + + it('should handle empty response data gracefully', async () => { + const mockUrl = 'https://example.com/image.jpg'; + + mockFetch.mockResolvedValue(Buffer.alloc(0)); + + const result = await downloadImageFromURLAsBase64(mockUrl); + + expect(result).toBe(''); + expect(fetch).toHaveBeenCalledWith({ headers: { 'Content-Type': 'image/*' }, host: '' }); + expect(mockFetch).toHaveBeenCalledWith(mockUrl); + }); + + it('should throw an error if the response is not a buffer', async () => { + const mockUrl = 'wrong-url.com'; + + mockFetch.mockResolvedValue('not a buffer'); + + await expect(downloadImageFromURLAsBase64(mockUrl)).rejects.toThrow('Invalid URL'); + }); +}); diff --git a/packages/web/src/base64.ts b/packages/web/src/base64.ts new file mode 100644 index 00000000..f4715d92 --- /dev/null +++ b/packages/web/src/base64.ts @@ -0,0 +1,62 @@ +const isUrl = (input: string): boolean => { + try { + new URL(input); // eslint-disable-line no-new + return true; + } catch { + return false; + } +}; + +const blobToBase64 = (blob: Blob): Promise => + new Promise((resolve, reject) => { + const reader = new FileReader(); + reader.onloadend = () => { + const result = reader.result; + if (typeof result === 'string') { + const base64 = result.split(',')[1]; // remove data:mime/type;base64, + resolve(base64); + } else { + reject(new Error('Could not convert blob to base64')); + } + }; + reader.onerror = reject; + reader.readAsDataURL(blob); + }); + +export const downloadImageFromURLAsBase64 = async (url: string): Promise => { + if (!isUrl(url)) { + throw new Error('Invalid URL'); + } + + const response = await fetch(url); + if (!response.ok) { + throw new Error(`Failed to fetch image: ${response.statusText}`); + } + + const blob = await response.blob(); + return blobToBase64(blob); +}; + +/** + * Converts media input into a base64 string. + * Accepts: + * - A base64 string (returns it unchanged) + * - A URL (fetches the image and converts to base64) + * - A `Blob` or `File` (uses FileReader) + */ +export const toBase64FromMedia = (media: string | Blob): Promise => { + if (typeof media === 'string') { + if (media.startsWith('data:') || /^[A-Za-z0-9+/=]+$/.test(media)) { + // Already base64 string + return Promise.resolve(media); + } else if (isUrl(media)) { + return downloadImageFromURLAsBase64(media); + } else { + throw new Error('Unsupported string format. Must be base64 or a valid URL.'); + } + } else if (media instanceof Blob) { + return blobToBase64(media); + } else { + throw new Error('Unsupported media type'); + } +}; diff --git a/packages/web/src/index.ts b/packages/web/src/index.ts new file mode 100644 index 00000000..29b6cb6b --- /dev/null +++ b/packages/web/src/index.ts @@ -0,0 +1,103 @@ +import weaviate, { + ApiKey, + AuthAccessTokenCredentials, + AuthClientCredentials, + AuthUserPasswordCredentials, + ClientParams, + configGuards, + configure, + ConnectToCustomOptions as ConnectToCustomOptionsCore, + ConnectToLocalOptions as ConnectToLocalOptionsCore, + ConnectToWeaviateCloudOptions, + Context, + filter, + helpers, + ICollection, + ICollections, + IWeaviateClient, + permissions, + reconfigure, +} from '@weaviate/core'; +import { toBase64FromMedia } from './base64.js'; +import { transportsMaker } from './transports.js'; + +const context: Context = { + transportsMaker, + toBase64FromMedia, + // No `agentMaker` on purpose: the browser uses fetch-based gRPC-Web (and fetch for REST), so no Node + // `http`/`https` Agent is needed. Omitting it keeps those Node builtins out of the browser bundle. +}; + +export type ConnectToLocalOptions = Omit; +export type ConnectToCustomOptions = Omit; + +const webify = ( + context: Context, + params: ClientParams +): Promise> => { + params.connectionParams.grpc = { + host: params.connectionParams.http.host, + port: params.connectionParams.http.port, + secure: params.connectionParams.http.secure, + path: '/grpc-web', + }; + return weaviate(context, params, true); +}; + +/** + * Connect to a custom Weaviate deployment, e.g. your own self-hosted Kubernetes cluster. + * + * @param {ConnectToCustomOptions} options Options for the connection. + * @returns {Promise} A Promise that resolves to a client connected to your custom Weaviate deployment. + */ +export function connectToCustom(options: ConnectToCustomOptions): Promise { + return helpers.connectToCustom(webify, context, options); +} + +/** + * Connect to a locally-deployed Weaviate instance, e.g. as a Docker compose stack. + * + * @param {ConnectToLocalOptions} [options] Options for the connection. + * @returns {Promise} A Promise that resolves to a client connected to your local Weaviate instance. + */ +export function connectToLocal(options?: ConnectToLocalOptions): Promise { + return helpers.connectToLocal(webify, context, options); +} + +/** + * Connect to your own Weaviate Cloud (WCD) instance. + * + * @param {string} clusterURL The URL of your WCD instance. E.g., `https://example.weaviate.network`. + * @param {ConnectToWeaviateCloudOptions} [options] Additional options for the connection. + * @returns {Promise} A Promise that resolves to a client connected to your WCD instance. + */ +export function connectToWeaviateCloud( + clusterURL: string, + options?: ConnectToWeaviateCloudOptions +): Promise { + return helpers.connectToWeaviateCloud(clusterURL, webify, context, options); +} + +const app = { + connectToCustom, + connectToLocal, + connectToWeaviateCloud, + client: (params: ClientParams) => weaviate(context, params), + ApiKey, + AuthUserPasswordCredentials, + AuthAccessTokenCredentials, + AuthClientCredentials, + configure, + configGuards, + filter: filter(), + reconfigure, + permissions, +}; + +export interface WeaviateClient extends IWeaviateClient {} +export interface Collections extends ICollections {} +export interface Collection extends ICollection {} + +export default app; + +export * from '@weaviate/core'; diff --git a/packages/web/src/transports.ts b/packages/web/src/transports.ts new file mode 100644 index 00000000..25aade5d --- /dev/null +++ b/packages/web/src/transports.ts @@ -0,0 +1,15 @@ +import { Transports, TransportsParams } from '@weaviate/core'; + +import { createChannel, createClientFactory } from 'nice-grpc-web'; + +import { HealthDefinition, WeaviateDefinition } from '@weaviate/core/proto'; + +const clientFactory = createClientFactory(); + +export const transportsMaker = (params: TransportsParams): Transports => { + const channel = createChannel(params.grpcAddress); + return { + weaviate: clientFactory.create(WeaviateDefinition, channel), + health: clientFactory.create(HealthDefinition, channel), + }; +}; diff --git a/packages/web/tsconfig.json b/packages/web/tsconfig.json new file mode 100644 index 00000000..be968e24 --- /dev/null +++ b/packages/web/tsconfig.json @@ -0,0 +1,30 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "target": "es2017", + "strict": true, + "preserveConstEnums": true, + "alwaysStrict": true, + "noImplicitAny": true, + "noImplicitThis": true, + "strictFunctionTypes": true, + "module": "esnext", + "moduleResolution": "bundler", + "lib": ["es2017", "dom"], + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "esModuleInterop": true, + "outDir": "./dist", + "declaration": true, + "rootDir": ".", + "types": ["node", "uuid"], + "moduleDetection": "force", + "paths": { + "@weaviate/core": ["../core/src"], + "@weaviate/core/proto": ["../core/src/proto"] + } + }, + "include": ["src"], + "references": [{ "path": "../core" }] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 00000000..7882fed8 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,5151 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + devDependencies: + '@typescript-eslint/eslint-plugin': + specifier: ^6.21.0 + version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3) + '@typescript-eslint/parser': + specifier: ^6.21.0 + version: 6.21.0(eslint@8.57.1)(typescript@5.9.3) + eslint: + specifier: ^8.57.1 + version: 8.57.1 + eslint-config-prettier: + specifier: ^8.10.0 + version: 8.10.0(eslint@8.57.1) + eslint-plugin-prettier: + specifier: ^4.2.1 + version: 4.2.1(eslint-config-prettier@8.10.0(eslint@8.57.1))(eslint@8.57.1)(prettier@2.8.8) + husky: + specifier: ^8.0.3 + version: 8.0.3 + lint-staged: + specifier: ^13.3.0 + version: 13.3.0 + openapi-typescript: + specifier: ^5.4.2 + version: 5.4.2 + prettier: + specifier: ^2.8.8 + version: 2.8.8 + prettier-plugin-organize-imports: + specifier: ^3.2.4 + version: 3.2.4(prettier@2.8.8)(typescript@5.9.3) + ts-proto: + specifier: ^1.181.2 + version: 1.181.2 + typedoc: + specifier: ^0.28.15 + version: 0.28.19(typescript@5.9.3) + typedoc-plugin-extras: + specifier: ^4.0.1 + version: 4.0.1(typedoc@0.28.19(typescript@5.9.3)) + typescript: + specifier: ^5.9.3 + version: 5.9.3 + + packages/core: + dependencies: + '@datastructures-js/deque': + specifier: ^1.0.8 + version: 1.0.8 + abort-controller-x: + specifier: ^0.5.0 + version: 0.5.0 + graphql: + specifier: ^16.12.0 + version: 16.14.2 + graphql-request: + specifier: ^6.1.0 + version: 6.1.0(graphql@16.14.2) + long: + specifier: ^5.3.2 + version: 5.3.2 + nice-grpc-common: + specifier: ^2.0.3 + version: 2.0.3 + uuid: + specifier: ^14.0.0 + version: 14.0.1 + devDependencies: + '@types/node': + specifier: ^25.0.3 + version: 25.9.4 + '@types/uuid': + specifier: ^9.0.1 + version: 9.0.8 + grpc-tools: + specifier: ^1.12.4 + version: 1.13.0 + openapi-typescript: + specifier: ^5.4.1 + version: 5.4.2 + protobufjs: + specifier: ^7.5.5 + version: 7.6.4 + typescript: + specifier: ^5.9.3 + version: 5.9.3 + + packages/node: + dependencies: + '@weaviate/core': + specifier: workspace:^1.0.0 + version: link:../core + nice-grpc: + specifier: ^2.1.16 + version: 2.1.16 + nice-grpc-client-middleware-retry: + specifier: ^3.1.15 + version: 3.1.15 + devDependencies: + '@types/node': + specifier: ^18.14.0 + version: 18.19.112 + '@types/uuid': + specifier: ^9.0.1 + version: 9.0.8 + typescript: + specifier: ^5.9.3 + version: 5.9.3 + vitest: + specifier: ^4.0.16 + version: 4.1.9(@types/node@18.19.112)(vite@5.4.19(@types/node@18.19.112)) + + packages/test: + devDependencies: + '@curveball/bodyparser': + specifier: 0.5.0 + version: 0.5.0(@curveball/kernel@1.0.0) + '@curveball/core': + specifier: ^1.0.2 + version: 1.0.2(@curveball/kernel@1.0.0) + '@curveball/kernel': + specifier: ^1.0.0 + version: 1.0.0 + '@testcontainers/weaviate': + specifier: 11.14.0 + version: 11.14.0 + '@types/express': + specifier: ^4.17.23 + version: 4.17.23 + '@types/uuid': + specifier: ^9.0.8 + version: 9.0.8 + '@weaviate/core': + specifier: workspace:^1.0.0 + version: link:../core + '@weaviate/node': + specifier: workspace:^1.0.0 + version: link:../node + '@weaviate/web': + specifier: workspace:^1.0.0 + version: link:../web + abort-controller-x: + specifier: ^0.5.0 + version: 0.5.0 + express: + specifier: ^4.21.2 + version: 4.21.2 + nice-grpc: + specifier: ^2.1.12 + version: 2.1.12 + nice-grpc-common: + specifier: ^2.0.3 + version: 2.0.3 + testcontainers: + specifier: 11.14.0 + version: 11.14.0 + uuid: + specifier: ^9.0.1 + version: 9.0.1 + vitest: + specifier: ^3.2.4 + version: 3.2.4(@types/node@25.9.4) + + packages/web: + dependencies: + '@weaviate/core': + specifier: workspace:^1.0.0 + version: link:../core + nice-grpc-web: + specifier: ^3.3.10 + version: 3.3.10(ws@8.18.2) + devDependencies: + '@types/node': + specifier: ^18.14.0 + version: 18.19.112 + '@types/uuid': + specifier: ^9.0.1 + version: 9.0.8 + typescript: + specifier: ^5.9.3 + version: 5.9.3 + vitest: + specifier: ^4.0.16 + version: 4.1.9(@types/node@18.19.112)(vite@5.4.19(@types/node@18.19.112)) + +packages: + + '@balena/dockerignore@1.0.2': + resolution: {integrity: sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==} + + '@curveball/bodyparser@0.5.0': + resolution: {integrity: sha512-xuD5X4YgCSPG0dq2E6xjEQsVM2+rJDhKyz0gpEflOJX/Nm8tS9ROiy22nLWBEskbrfBKx8XhuUqM+Bt/ojsVxA==} + peerDependencies: + '@curveball/kernel': '>=0.20.0 <1' + + '@curveball/core@1.0.2': + resolution: {integrity: sha512-vgHUJoZKbZbqPSt2cpMTZAclzNuXwtgDTnXDYLtzkt7w+e4+BLlxlFwJFvLKxMCFhEdLKA/0IM8ryXO3P+8TCA==} + engines: {node: '>= 16'} + peerDependencies: + '@curveball/kernel': ^1 + + '@curveball/http-errors@0.5.0': + resolution: {integrity: sha512-aZ+l+BME9+BQwq3Mc+j9nal9D9lThubCRdirZYSjEuCn1Gc+lpsx1ETlvZ508Ac7ZleK7Zhg18TewOioRCk0Ew==} + engines: {node: '>= 14.4'} + + '@curveball/kernel@1.0.0': + resolution: {integrity: sha512-zNi/4LvYLRua/wsjR9WwMNUsuIWZXoe0/5RjnjNra74WZR19tTewlOqMIkOermf6b2pYJ3pJt73P0YGhvZ8oaQ==} + engines: {node: '>=18'} + + '@datastructures-js/deque@1.0.8': + resolution: {integrity: sha512-PSBhJ2/SmeRPRHuBv7i/fHWIdSC3JTyq56qb+Rq0wjOagi0/fdV5/B/3Md5zFZus/W6OkSPMaxMKKMNMrSmubg==} + + '@esbuild/aix-ppc64@0.21.5': + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.21.5': + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.21.5': + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.21.5': + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.21.5': + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.21.5': + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.21.5': + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.21.5': + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.21.5': + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.21.5': + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.21.5': + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.21.5': + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.21.5': + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.21.5': + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.21.5': + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.21.5': + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.21.5': + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-x64@0.21.5': + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-x64@0.21.5': + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.21.5': + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.21.5': + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.21.5': + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.21.5': + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.7.0': + resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.1': + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/eslintrc@2.1.4': + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@eslint/js@8.57.1': + resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@fastify/busboy@2.1.1': + resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} + engines: {node: '>=14'} + + '@gerrit0/mini-shiki@3.23.0': + resolution: {integrity: sha512-bEMORlG0cqdjVyCEuU0cDQbORWX+kYCeo0kV1lbxF5bt4r7SID2l9bqsxJEM0zndaxpOUT7riCyIVEuqq/Ynxg==} + + '@graphql-typed-document-node/core@3.2.0': + resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@grpc/grpc-js@1.13.4': + resolution: {integrity: sha512-GsFaMXCkMqkKIvwCQjCrwH+GHbPKBjhwo/8ZuUkWHqbI73Kky9I+pQltrlT0+MWpedCoosda53lgjYfyEPgxBg==} + engines: {node: '>=12.10.0'} + + '@grpc/grpc-js@1.14.4': + resolution: {integrity: sha512-k9Dj3DV/itK9D06Y8f190Qgop7/Ui+D0njFV3LHMPwPT75DpXLQohE9Wmz0QElrJnzsjB7KPWiKJbOl7IPDArQ==} + engines: {node: '>=12.10.0'} + + '@grpc/proto-loader@0.7.15': + resolution: {integrity: sha512-tMXdRCfYVixjuFK+Hk0Q1s38gV9zDiDJfWL3h1rv4Qc39oILCu1TRTDt7+fGUI8K4G1Fj125Hx/ru3azECWTyQ==} + engines: {node: '>=6'} + hasBin: true + + '@grpc/proto-loader@0.8.1': + resolution: {integrity: sha512-wtF6h+DY6M3YaDBPAmvuuA6jV8Sif9MjtOI5euKFWRgCDl5PeDpPsHR9u2l6St5ceY8AZgoNDww5+HvEsXFsGg==} + engines: {node: '>=6'} + hasBin: true + + '@humanwhocodes/config-array@0.13.0': + resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} + engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/object-schema@2.0.3': + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + deprecated: Use @eslint/object-schema instead + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@js-sdsl/ordered-map@4.4.2': + resolution: {integrity: sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==} + + '@kwsites/file-exists@1.1.1': + resolution: {integrity: sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==} + + '@mapbox/node-pre-gyp@1.0.11': + resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} + hasBin: true + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@protobufjs/aspromise@1.1.2': + resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} + + '@protobufjs/base64@1.1.2': + resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} + + '@protobufjs/codegen@2.0.4': + resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} + + '@protobufjs/codegen@2.0.5': + resolution: {integrity: sha512-zgXFLzW3Ap33e6d0Wlj4MGIm6Ce8O89n/apUaGNB/jx+hw+ruWEp7EwGUshdLKVRCxZW12fp9r40E1mQrf/34g==} + + '@protobufjs/eventemitter@1.1.0': + resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} + + '@protobufjs/eventemitter@1.1.1': + resolution: {integrity: sha512-vW1GmwMZNnL+gMRaovlh9yZX74kc+TTU3FObkkurpMaRtBfLP3ldjS9KQWlwZgraRE0+dheEEoAxdzcJQ8eXZg==} + + '@protobufjs/fetch@1.1.0': + resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} + + '@protobufjs/fetch@1.1.1': + resolution: {integrity: sha512-GpptLrs57adMSuHi3VNj0mAF8dwh36LMaYF6XyJ6JMWlVsc+t42tm1HSEDmOs3A8fC9yyeisgLhsTVQokOZ0zw==} + + '@protobufjs/float@1.0.2': + resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} + + '@protobufjs/inquire@1.1.0': + resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} + + '@protobufjs/path@1.1.2': + resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} + + '@protobufjs/pool@1.1.0': + resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} + + '@protobufjs/utf8@1.1.0': + resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} + + '@protobufjs/utf8@1.1.1': + resolution: {integrity: sha512-oOAWABowe8EAbMyWKM0tYDKi8Yaox52D+HWZhAIJqQXbqe0xI/GV7FhLWqlEKreMkfDjshR5FKgi3mnle0h6Eg==} + + '@rollup/rollup-android-arm-eabi@4.44.0': + resolution: {integrity: sha512-xEiEE5oDW6tK4jXCAyliuntGR+amEMO7HLtdSshVuhFnKTYoeYMyXQK7pLouAJJj5KHdwdn87bfHAR2nSdNAUA==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.44.0': + resolution: {integrity: sha512-uNSk/TgvMbskcHxXYHzqwiyBlJ/lGcv8DaUfcnNwict8ba9GTTNxfn3/FAoFZYgkaXXAdrAA+SLyKplyi349Jw==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.44.0': + resolution: {integrity: sha512-VGF3wy0Eq1gcEIkSCr8Ke03CWT+Pm2yveKLaDvq51pPpZza3JX/ClxXOCmTYYq3us5MvEuNRTaeyFThCKRQhOA==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.44.0': + resolution: {integrity: sha512-fBkyrDhwquRvrTxSGH/qqt3/T0w5Rg0L7ZIDypvBPc1/gzjJle6acCpZ36blwuwcKD/u6oCE/sRWlUAcxLWQbQ==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.44.0': + resolution: {integrity: sha512-u5AZzdQJYJXByB8giQ+r4VyfZP+walV+xHWdaFx/1VxsOn6eWJhK2Vl2eElvDJFKQBo/hcYIBg/jaKS8ZmKeNQ==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.44.0': + resolution: {integrity: sha512-qC0kS48c/s3EtdArkimctY7h3nHicQeEUdjJzYVJYR3ct3kWSafmn6jkNCA8InbUdge6PVx6keqjk5lVGJf99g==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.44.0': + resolution: {integrity: sha512-x+e/Z9H0RAWckn4V2OZZl6EmV0L2diuX3QB0uM1r6BvhUIv6xBPL5mrAX2E3e8N8rEHVPwFfz/ETUbV4oW9+lQ==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.44.0': + resolution: {integrity: sha512-1exwiBFf4PU/8HvI8s80icyCcnAIB86MCBdst51fwFmH5dyeoWVPVgmQPcKrMtBQ0W5pAs7jBCWuRXgEpRzSCg==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.44.0': + resolution: {integrity: sha512-ZTR2mxBHb4tK4wGf9b8SYg0Y6KQPjGpR4UWwTFdnmjB4qRtoATZ5dWn3KsDwGa5Z2ZBOE7K52L36J9LueKBdOQ==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.44.0': + resolution: {integrity: sha512-GFWfAhVhWGd4r6UxmnKRTBwP1qmModHtd5gkraeW2G490BpFOZkFtem8yuX2NyafIP/mGpRJgTJ2PwohQkUY/Q==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-loongarch64-gnu@4.44.0': + resolution: {integrity: sha512-xw+FTGcov/ejdusVOqKgMGW3c4+AgqrfvzWEVXcNP6zq2ue+lsYUgJ+5Rtn/OTJf7e2CbgTFvzLW2j0YAtj0Gg==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-powerpc64le-gnu@4.44.0': + resolution: {integrity: sha512-bKGibTr9IdF0zr21kMvkZT4K6NV+jjRnBoVMt2uNMG0BYWm3qOVmYnXKzx7UhwrviKnmK46IKMByMgvpdQlyJQ==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.44.0': + resolution: {integrity: sha512-vV3cL48U5kDaKZtXrti12YRa7TyxgKAIDoYdqSIOMOFBXqFj2XbChHAtXquEn2+n78ciFgr4KIqEbydEGPxXgA==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-riscv64-musl@4.44.0': + resolution: {integrity: sha512-TDKO8KlHJuvTEdfw5YYFBjhFts2TR0VpZsnLLSYmB7AaohJhM8ctDSdDnUGq77hUh4m/djRafw+9zQpkOanE2Q==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.44.0': + resolution: {integrity: sha512-8541GEyktXaw4lvnGp9m84KENcxInhAt6vPWJ9RodsB/iGjHoMB2Pp5MVBCiKIRxrxzJhGCxmNzdu+oDQ7kwRA==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.44.0': + resolution: {integrity: sha512-iUVJc3c0o8l9Sa/qlDL2Z9UP92UZZW1+EmQ4xfjTc1akr0iUFZNfxrXJ/R1T90h/ILm9iXEY6+iPrmYB3pXKjw==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.44.0': + resolution: {integrity: sha512-PQUobbhLTQT5yz/SPg116VJBgz+XOtXt8D1ck+sfJJhuEsMj2jSej5yTdp8CvWBSceu+WW+ibVL6dm0ptG5fcA==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-win32-arm64-msvc@4.44.0': + resolution: {integrity: sha512-M0CpcHf8TWn+4oTxJfh7LQuTuaYeXGbk0eageVjQCKzYLsajWS/lFC94qlRqOlyC2KvRT90ZrfXULYmukeIy7w==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.44.0': + resolution: {integrity: sha512-3XJ0NQtMAXTWFW8FqZKcw3gOQwBtVWP/u8TpHP3CRPXD7Pd6s8lLdH3sHWh8vqKCyyiI8xW5ltJScQmBU9j7WA==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.44.0': + resolution: {integrity: sha512-Q2Mgwt+D8hd5FIPUuPDsvPR7Bguza6yTkJxspDGkZj7tBRn2y4KSWYuIXpftFSjBra76TbKerCV7rgFPQrn+wQ==} + cpu: [x64] + os: [win32] + + '@shikijs/engine-oniguruma@3.23.0': + resolution: {integrity: sha512-1nWINwKXxKKLqPibT5f4pAFLej9oZzQTsby8942OTlsJzOBZ0MWKiwzMsd+jhzu8YPCHAswGnnN1YtQfirL35g==} + + '@shikijs/langs@3.23.0': + resolution: {integrity: sha512-2Ep4W3Re5aB1/62RSYQInK9mM3HsLeB91cHqznAJMuylqjzNVAVCMnNWRHFtcNHXsoNRayP9z1qj4Sq3nMqYXg==} + + '@shikijs/themes@3.23.0': + resolution: {integrity: sha512-5qySYa1ZgAT18HR/ypENL9cUSGOeI2x+4IvYJu4JgVJdizn6kG4ia5Q1jDEOi7gTbN4RbuYtmHh0W3eccOrjMA==} + + '@shikijs/types@3.23.0': + resolution: {integrity: sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ==} + + '@shikijs/vscode-textmate@10.0.2': + resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} + + '@standard-schema/spec@1.1.0': + resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} + + '@testcontainers/weaviate@11.14.0': + resolution: {integrity: sha512-Nt4cqZaq7FB1f1P3QKHrhbP2NkOFrN33p7ZwZxdaBPzCVHHhe2Rffsm3+sU+vgJuRiPcWxr87QS22cPVsDZ28w==} + + '@types/body-parser@1.19.6': + resolution: {integrity: sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==} + + '@types/chai@5.2.2': + resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==} + + '@types/connect@3.4.38': + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + + '@types/deep-eql@4.0.2': + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + + '@types/docker-modem@3.0.6': + resolution: {integrity: sha512-yKpAGEuKRSS8wwx0joknWxsmLha78wNMe9R2S3UNsVOkZded8UqOrV8KoeDXoXsjndxwyF3eIhyClGbO1SEhEg==} + + '@types/dockerode@4.0.1': + resolution: {integrity: sha512-cmUpB+dPN955PxBEuXE3f6lKO1hHiIGYJA46IVF3BJpNsZGvtBDcRnlrHYHtOH/B6vtDOyl2kZ2ShAu3mgc27Q==} + + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + + '@types/express-serve-static-core@4.19.6': + resolution: {integrity: sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==} + + '@types/express@4.17.23': + resolution: {integrity: sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ==} + + '@types/hast@3.0.4': + resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + + '@types/http-errors@2.0.5': + resolution: {integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/mime@1.3.5': + resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} + + '@types/node@18.19.112': + resolution: {integrity: sha512-i+Vukt9POdS/MBI7YrrkkI5fMfwFtOjphSmt4WXYLfwqsfr6z/HdCx7LqT9M7JktGob8WNgj8nFB4TbGNE4Cog==} + + '@types/node@25.9.4': + resolution: {integrity: sha512-dszCsrKb5U7ZsVZBWiHFklTloVl0mSEnWH/iZXfZUlI4rzCUnsvGmgqfuVRHL54ugE7/wRuxEIXRa2iMZ+BG6g==} + + '@types/qs@6.14.0': + resolution: {integrity: sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==} + + '@types/range-parser@1.2.7': + resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} + + '@types/semver@7.7.0': + resolution: {integrity: sha512-k107IF4+Xr7UHjwDc7Cfd6PRQfbdkiRabXGRjo07b4WyPahFBZCZ1sE+BNxYIJPPg73UkfOsVOLwqVc/6ETrIA==} + + '@types/send@0.17.5': + resolution: {integrity: sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==} + + '@types/serve-static@1.15.8': + resolution: {integrity: sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg==} + + '@types/ssh2-streams@0.1.12': + resolution: {integrity: sha512-Sy8tpEmCce4Tq0oSOYdfqaBpA3hDM8SoxoFh5vzFsu2oL+znzGz8oVWW7xb4K920yYMUY+PIG31qZnFMfPWNCg==} + + '@types/ssh2@0.5.52': + resolution: {integrity: sha512-lbLLlXxdCZOSJMCInKH2+9V/77ET2J6NPQHpFI0kda61Dd1KglJs+fPQBchizmzYSOJBgdTajhPqBO1xxLywvg==} + + '@types/ssh2@1.15.5': + resolution: {integrity: sha512-N1ASjp/nXH3ovBHddRJpli4ozpk6UdDYIX4RJWFa9L1YKnzdhTlVmiGHm4DZnj/jLbqZpes4aeR30EFGQtvhQQ==} + + '@types/unist@3.0.3': + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + + '@types/uuid@9.0.8': + resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==} + + '@types/ws@8.18.1': + resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} + + '@typescript-eslint/eslint-plugin@6.21.0': + resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/parser@6.21.0': + resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/scope-manager@6.21.0': + resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@typescript-eslint/type-utils@6.21.0': + resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/types@6.21.0': + resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@typescript-eslint/typescript-estree@6.21.0': + resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/utils@6.21.0': + resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + + '@typescript-eslint/visitor-keys@6.21.0': + resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@ungap/structured-clone@1.3.0': + resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + + '@vitest/expect@3.2.4': + resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} + + '@vitest/expect@4.1.9': + resolution: {integrity: sha512-vl/rYsUKcBr3SnQn166+XR5ZQcgMx3DQhFWdfli/cWpLnLUmbxZvyrJZotLFUryib+LtArYMSTJ5RbQ57ZqrlA==} + + '@vitest/mocker@3.2.4': + resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==} + peerDependencies: + msw: ^2.4.9 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + + '@vitest/mocker@4.1.9': + resolution: {integrity: sha512-EVkXzBjrPGM+cK8/ANWgBrkUCfJfb38/EfTSO8h7pWvKkyPkpWxvR7BkD2MyItMF62C97zAEoqdpUixwR/e+Rw==} + peerDependencies: + msw: ^2.4.9 + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + + '@vitest/pretty-format@3.2.4': + resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} + + '@vitest/pretty-format@4.1.9': + resolution: {integrity: sha512-s0iufns3iIFitdgm+YR7g1whCAaGtXz459VS9/PqyKDEEFgYIhsHOQmXgIgDuYCt7DeQmiZT0Qe2OA2p4ZPu5A==} + + '@vitest/runner@3.2.4': + resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==} + + '@vitest/runner@4.1.9': + resolution: {integrity: sha512-KXLMDtc7oe70+3mJfGrPUWPesswH+3sTxAMAMl8DG7I8IUQT4XW718dY5ID3vPUcmlu27CcKfY4P3h3I29SLJg==} + + '@vitest/snapshot@3.2.4': + resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==} + + '@vitest/snapshot@4.1.9': + resolution: {integrity: sha512-Jc7RKGNBo8Z28WYIm0Niej4xdSPByRf6mU58VpHQkd6Zh05rlnA+twjbK5HyeIGHxrzsc3mJgS43uM0CZKzaIA==} + + '@vitest/spy@3.2.4': + resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} + + '@vitest/spy@4.1.9': + resolution: {integrity: sha512-fHpsS6mIi+PiEW+vcRVOMkX1oSaPKne3VOclSFICPcGOmfKgXPU5iAah+wcNcj2xPrCCmfq99IDGf+EojhhvhA==} + + '@vitest/utils@3.2.4': + resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} + + '@vitest/utils@4.1.9': + resolution: {integrity: sha512-A51o8ymO5PpqlWNnBP9ZHPXDIpuMtTLlGSjN7la4US+LJzoUMyhwjA5QXlm39JexgwHKW4Xjs8Z2d3dLCXOeuA==} + + abbrev@1.1.1: + resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} + + abort-controller-x@0.4.3: + resolution: {integrity: sha512-VtUwTNU8fpMwvWGn4xE93ywbogTYsuT+AUxAXOeelbXuQVIwNmC5YLeho9sH4vZ4ITW8414TTAOG1nW6uIVHCA==} + + abort-controller-x@0.5.0: + resolution: {integrity: sha512-yTt9CI0x+nRfX6BFMenEGP8ooPvErGH6AbFz20C2IeOLIlDsrw/VHpgne3GsCEuTA410IiFiaLVFKmgM4bKEPQ==} + + abort-controller@3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + + accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.15.0: + resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} + engines: {node: '>=0.4.0'} + hasBin: true + + agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ansi-escapes@5.0.0: + resolution: {integrity: sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==} + engines: {node: '>=12'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + engines: {node: '>=12'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + aproba@2.0.0: + resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} + + archiver-utils@5.0.2: + resolution: {integrity: sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==} + engines: {node: '>= 14'} + + archiver@7.0.1: + resolution: {integrity: sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==} + engines: {node: '>= 14'} + + are-we-there-yet@2.0.0: + resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} + engines: {node: '>=10'} + deprecated: This package is no longer supported. + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + array-flatten@1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + + asn1@0.2.6: + resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} + + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + + async-lock@1.4.1: + resolution: {integrity: sha512-Az2ZTpuytrtqENulXwO3GGv1Bztugx6TT37NIo7imr/Qo0gsYiGtSdBa2B6fsXhTpVZDNfu1Qn3pk531e3q+nQ==} + + async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + + b4a@1.6.7: + resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + balanced-match@4.0.4: + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} + + bare-events@2.5.4: + resolution: {integrity: sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==} + + bare-fs@4.1.5: + resolution: {integrity: sha512-1zccWBMypln0jEE05LzZt+V/8y8AQsQQqxtklqaIyg5nu6OAYFhZxPXinJTSG+kU5qyNmeLgcn9AW7eHiCHVLA==} + engines: {bare: '>=1.16.0'} + peerDependencies: + bare-buffer: '*' + peerDependenciesMeta: + bare-buffer: + optional: true + + bare-os@3.6.1: + resolution: {integrity: sha512-uaIjxokhFidJP+bmmvKSgiMzj2sV5GPHaZVAIktcxcpCyBFFWO+YlikVAdhmUo2vYFvFhOXIAlldqV29L8126g==} + engines: {bare: '>=1.14.0'} + + bare-path@3.0.0: + resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==} + + bare-stream@2.6.5: + resolution: {integrity: sha512-jSmxKJNJmHySi6hC42zlZnq00rga4jjxcgNZjY9N5WlOe/iOoGRtdwGsHzQv2RlH2KOYMwGUXhf2zXd32BA9RA==} + peerDependencies: + bare-buffer: '*' + bare-events: '*' + peerDependenciesMeta: + bare-buffer: + optional: true + bare-events: + optional: true + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + bcrypt-pbkdf@1.0.2: + resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} + + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + + body-parser@1.20.3: + resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + brace-expansion@1.1.12: + resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} + + brace-expansion@2.0.2: + resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + + brace-expansion@5.0.6: + resolution: {integrity: sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==} + engines: {node: 18 || 20 || >=22} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + buffer-crc32@1.0.0: + resolution: {integrity: sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==} + engines: {node: '>=8.0.0'} + + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + + buildcheck@0.0.6: + resolution: {integrity: sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A==} + engines: {node: '>=10.0.0'} + + byline@5.0.0: + resolution: {integrity: sha512-s6webAy+R4SR8XVuJWt2V2rGvhnrhxN+9S15GNuTK3wKPOXFF6RNc+8ug2XhH+2s4f+uudG4kUVYmYOQWL2g0Q==} + engines: {node: '>=0.10.0'} + + bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + + cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + case-anything@2.1.13: + resolution: {integrity: sha512-zlOQ80VrQ2Ue+ymH5OuM/DlDq64mEm+B9UTdHULv5osUMD6HalNTblf2b1u/m6QecjsnOkBpqVZ+XPwIVsy7Ng==} + engines: {node: '>=12.13'} + + chai@5.2.0: + resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==} + engines: {node: '>=12'} + + chai@6.2.2: + resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} + engines: {node: '>=18'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + check-error@2.1.1: + resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} + engines: {node: '>= 16'} + + chownr@1.1.4: + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + + chownr@2.0.0: + resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} + engines: {node: '>=10'} + + cli-cursor@4.0.0: + resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + cli-truncate@3.1.0: + resolution: {integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + color-support@1.1.3: + resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} + hasBin: true + + colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + + commander@11.0.0: + resolution: {integrity: sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==} + engines: {node: '>=16'} + + compress-commons@6.0.2: + resolution: {integrity: sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==} + engines: {node: '>= 14'} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + console-control-strings@1.1.0: + resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} + + content-disposition@0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + + content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + cookie-signature@1.0.6: + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + + cookie@0.7.1: + resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} + engines: {node: '>= 0.6'} + + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + + cpu-features@0.0.10: + resolution: {integrity: sha512-9IkYqtX3YHPCzoVg1Py+o9057a3i0fp7S530UWokCSaFVTc7CwXPRiOjRjBQQ18ZCNafx78YfnG+HALxtVmOGA==} + engines: {node: '>=10.0.0'} + + crc-32@1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + + crc32-stream@6.0.0: + resolution: {integrity: sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==} + engines: {node: '>= 14'} + + cross-fetch@3.2.0: + resolution: {integrity: sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.4.1: + resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + deep-eql@5.0.2: + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} + engines: {node: '>=6'} + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + delegates@1.0.0: + resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} + + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + + destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + detect-libc@1.0.3: + resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} + engines: {node: '>=0.10'} + hasBin: true + + detect-libc@2.0.4: + resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} + engines: {node: '>=8'} + + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + + docker-compose@1.4.2: + resolution: {integrity: sha512-rPHigTKGaEHpkUmfd69QgaOp+Os5vGJwG/Ry8lcr8W/382AmI+z/D7qoa9BybKIkqNppaIbs8RYeHSevdQjWww==} + engines: {node: '>= 6.0.0'} + + docker-modem@5.0.7: + resolution: {integrity: sha512-XJgGhoR/CLpqshm4d3L7rzH6t8NgDFUIIpztYlLHIApeJjMZKYJMz2zxPsYxnejq5h3ELYSw/RBsi3t5h7gNTA==} + engines: {node: '>= 8.0'} + + dockerode@4.0.12: + resolution: {integrity: sha512-/bCZd6KlGcjZO8Buqmi/vXuqEGVEZ0PNjx/biBNqJD3MhK9DmdiAuKxqfNhflgDESDIiBz3qF+0e55+CpnrUcw==} + engines: {node: '>= 8.0'} + + doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + + dprint-node@1.0.8: + resolution: {integrity: sha512-iVKnUtYfGrYcW1ZAlfR/F59cUVL8QIhWoBJoSjkkdua/dkWIgjZfiLMeTjiB06X0ZLkQ0M2C1VbUj/CxkIf1zg==} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + encodeurl@1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + + encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} + + end-of-stream@1.4.5: + resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-module-lexer@1.7.0: + resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + + es-module-lexer@2.1.0: + resolution: {integrity: sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + + esbuild@0.21.5: + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} + engines: {node: '>=12'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-config-prettier@8.10.0: + resolution: {integrity: sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + + eslint-plugin-prettier@4.2.1: + resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==} + engines: {node: '>=12.0.0'} + peerDependencies: + eslint: '>=7.28.0' + eslint-config-prettier: '*' + prettier: '>=2.0.0' + peerDependenciesMeta: + eslint-config-prettier: + optional: true + + eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint@8.57.1: + resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. + hasBin: true + + espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + + event-target-shim@5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} + + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + + execa@7.2.0: + resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} + engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} + + expect-type@1.2.1: + resolution: {integrity: sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==} + engines: {node: '>=12.0.0'} + + expect-type@1.3.0: + resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} + engines: {node: '>=12.0.0'} + + express@4.21.2: + resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} + engines: {node: '>= 0.10.0'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-diff@1.3.0: + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + + fast-fifo@1.3.2: + resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fastq@1.19.1: + resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + + fdir@6.4.6: + resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + finalhandler@1.3.1: + resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} + engines: {node: '>= 0.8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + + flatted@3.3.3: + resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + + foreground-child@3.3.1: + resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} + engines: {node: '>=14'} + + forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + + fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + + fs-constants@1.0.0: + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + + fs-minipass@2.1.0: + resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} + engines: {node: '>= 8'} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + gauge@3.0.2: + resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==} + engines: {node: '>=10'} + deprecated: This package is no longer supported. + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-port@7.2.0: + resolution: {integrity: sha512-afP4W205ONCuMoPBqcR6PSXnzX35KTcJygfJfcp+QY+uwm3p20p1YczWXhlICIzGMCxYBQcySEcOgsJcrkyobg==} + engines: {node: '>=16'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me + hasBin: true + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me + + globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + + globalyzer@0.1.0: + resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} + + globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + + globrex@0.1.2: + resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + graphql-request@6.1.0: + resolution: {integrity: sha512-p+XPfS4q7aIpKVcgmnZKhMNqhltk20hfXtkaIkTfjjmiKMJ5xrt5c743cL03y/K7y1rg3WrIC49xGiEQ4mxdNw==} + peerDependencies: + graphql: 14 - 16 + + graphql@16.14.2: + resolution: {integrity: sha512-Chq1s4CY7jmh8gO2qvLIJyfCDIN+EHLFW/9iShnp1z8FjBQMoodWP1kDC36VAMXXIvAjj4ARa7ntfAV2BrjsbA==} + engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + + grpc-tools@1.13.0: + resolution: {integrity: sha512-7CbkJ1yWPfX0nHjbYG58BQThNhbICXBZynzCUxCb3LzX5X9B3hQbRY2STiRgIEiLILlK9fgl0z0QVGwPCdXf5g==} + hasBin: true + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-unicode@2.0.1: + resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + + https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + + human-signals@4.3.1: + resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} + engines: {node: '>=14.18.0'} + + husky@8.0.3: + resolution: {integrity: sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==} + engines: {node: '>=14'} + hasBin: true + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-fullwidth-code-point@4.0.0: + resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} + engines: {node: '>=12'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + isomorphic-ws@5.0.0: + resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} + peerDependencies: + ws: '*' + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + js-base64@3.7.7: + resolution: {integrity: sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==} + + js-tokens@9.0.1: + resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + lazystream@1.0.1: + resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} + engines: {node: '>= 0.6.3'} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + + linkify-it@5.0.1: + resolution: {integrity: sha512-wVoTjP4Q6R0NW5hiZkVJaFZPWgtXfoGF+6LucL3/FtiNjmcHhYjEr5f1Kqjirc1nBW07J/ZuRFumqr2oqccEWg==} + + lint-staged@13.3.0: + resolution: {integrity: sha512-mPRtrYnipYYv1FEE134ufbWpeggNTo+O/UPzngoaKzbzHAthvR55am+8GfHTnqNRQVRRrYQLGW9ZyUoD7DsBHQ==} + engines: {node: ^16.14.0 || >=18.0.0} + hasBin: true + + listr2@6.6.1: + resolution: {integrity: sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg==} + engines: {node: '>=16.0.0'} + peerDependencies: + enquirer: '>= 2.3.0 < 3' + peerDependenciesMeta: + enquirer: + optional: true + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + log-update@5.0.1: + resolution: {integrity: sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + long@5.3.2: + resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} + + loupe@3.1.4: + resolution: {integrity: sha512-wJzkKwJrheKtknCOKNEtDK4iqg/MxmZheEMtSTYvnzRdEYaZzmgH976nenp8WdJRdx5Vc1X/9MO0Oszl6ezeXg==} + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + lunr@2.3.9: + resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==} + + magic-string@0.30.17: + resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + + make-dir@3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} + + markdown-it@14.2.0: + resolution: {integrity: sha512-1TGiQiJVRQ3NPmZH6sx5Cfnmg6GQm9jvC1ch4TK511NjSJvjzKLzn5pPfZRNZkRPZP0HqCioSndqH8v2nRaWVQ==} + hasBin: true + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + mdurl@2.0.0: + resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} + + media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + + merge-descriptors@1.0.3: + resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + methods@1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + + micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + + mime@3.0.0: + resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} + engines: {node: '>=10.0.0'} + hasBin: true + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + + minimatch@10.2.5: + resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} + engines: {node: 18 || 20 || >=22} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + + minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minipass@3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} + engines: {node: '>=8'} + + minipass@5.0.0: + resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} + engines: {node: '>=8'} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + minizlib@2.1.2: + resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} + engines: {node: '>= 8'} + + mkdirp-classic@0.5.3: + resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} + + mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + + mkdirp@3.0.1: + resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} + engines: {node: '>=10'} + hasBin: true + + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nan@2.22.2: + resolution: {integrity: sha512-DANghxFkS1plDdRsX0X9pm0Z6SJNN6gBdtXfanwoZ8hooC5gosGFSBGRYHUVPz1asKA/kMRqDRdHrluZ61SpBQ==} + + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + + nice-grpc-client-middleware-retry@3.1.15: + resolution: {integrity: sha512-fXfNNdtjCQzc3O/w3WsK1AOU+xdE1V7FCm4FEQWS/UUVsV1616S2oryvWqsZAF8aOvuMir8lFtNmgH3DeP+PBg==} + + nice-grpc-common@2.0.3: + resolution: {integrity: sha512-MEhnD3JMah0mgyivpb9hpRDbOBuXBxI/TVO+OK1h6rC97WM42HsPMR+zzRNQ0C5BqYJTw1nyWiQRD0DucO+pjQ==} + + nice-grpc-web@3.3.10: + resolution: {integrity: sha512-8XyCtbs7uL0mWQEjpkjZy57bnLbtheRbIWgj8p98XPbjFqXOBkTLu+ebj5H4fUu/yxqt+6ULPPDHT/icUsyieA==} + + nice-grpc@2.1.12: + resolution: {integrity: sha512-J1n4Wg+D3IhRhGQb+iqh2OpiM0GzTve/kf2lnlW4S+xczmIEd0aHUDV1OsJ5a3q8GSTqJf+s4Rgg1M8uJltarw==} + + nice-grpc@2.1.16: + resolution: {integrity: sha512-Cl3Pn00212Hl8/U6bpgMxmhZj5lyv3nWoJov4cd3FjWarktrMHP4DNvSjCnDwkMWYx4W1tyscEia4JX6Y4GVCQ==} + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + nopt@5.0.0: + resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} + engines: {node: '>=6'} + hasBin: true + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + npm-run-path@5.3.0: + resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + npmlog@5.0.1: + resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} + deprecated: This package is no longer supported. + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} + + obug@2.1.3: + resolution: {integrity: sha512-9miFgM2OFba7hB+pRgvtV84pYTBaoTHohvmIgiRt6dRIzbwEOIaNaP+dIlGs2fNFoB0SeISs0Jz5WFVRid6Xyg==} + engines: {node: '>=12.20.0'} + + on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + + openapi-typescript@5.4.2: + resolution: {integrity: sha512-tHeRv39Yh7brqJpbUntdjtUaXrTHmC4saoyTLU/0J2I8LEFQYDXRLgnmWTMiMOB2GXugJiqHa5n9sAyd6BRqiA==} + engines: {node: '>= 14.0.0'} + hasBin: true + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + path-to-regexp@0.1.12: + resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + + pathval@2.0.0: + resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} + engines: {node: '>= 14.16'} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + picomatch@4.0.2: + resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + engines: {node: '>=12'} + + picomatch@4.0.4: + resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} + engines: {node: '>=12'} + + pidtree@0.6.0: + resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} + engines: {node: '>=0.10'} + hasBin: true + + postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} + engines: {node: ^10 || ^12 || >=14} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prettier-linter-helpers@1.0.0: + resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} + engines: {node: '>=6.0.0'} + + prettier-plugin-organize-imports@3.2.4: + resolution: {integrity: sha512-6m8WBhIp0dfwu0SkgfOxJqh+HpdyfqSSLfKKRZSFbDuEQXDDndb8fTpRWkUrX/uBenkex3MgnVk0J3b3Y5byog==} + peerDependencies: + '@volar/vue-language-plugin-pug': ^1.0.4 + '@volar/vue-typescript': ^1.0.4 + prettier: '>=2.0' + typescript: '>=2.9' + peerDependenciesMeta: + '@volar/vue-language-plugin-pug': + optional: true + '@volar/vue-typescript': + optional: true + + prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + + process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + + proper-lockfile@4.1.2: + resolution: {integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==} + + properties-reader@3.0.1: + resolution: {integrity: sha512-WPn+h9RGEExOKdu4bsF4HksG/uzd3cFq3MFtq8PsFeExPse5Ha/VOjQNyHhjboBFwGXGev6muJYTSPAOkROq2g==} + engines: {node: '>=18'} + + protobufjs@7.5.3: + resolution: {integrity: sha512-sildjKwVqOI2kmFDiXQ6aEB0fjYTafpEvIBs8tOR8qI4spuL9OPROLVu2qZqi/xgCfsHIwVqlaF8JBjWFHnKbw==} + engines: {node: '>=12.0.0'} + + protobufjs@7.6.4: + resolution: {integrity: sha512-RJJPTTpvFfHcWLkIa2JFWK4XvtSzS0yEWDmunqHXli1h3JlkbcQZXDZdcWxv+JK3Xsl5/UFDPZ0iGm7DAengYw==} + engines: {node: '>=12.0.0'} + + proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + + pump@3.0.3: + resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==} + + punycode.js@2.3.1: + resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} + engines: {node: '>=6'} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + qs@6.13.0: + resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} + engines: {node: '>=0.6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + + raw-body@2.5.2: + resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} + engines: {node: '>= 0.8'} + + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + readable-stream@4.7.0: + resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + readdir-glob@1.1.3: + resolution: {integrity: sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + restore-cursor@4.0.0: + resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + retry@0.12.0: + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} + + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + + rollup@4.44.0: + resolution: {integrity: sha512-qHcdEzLCiktQIfwBq420pn2dP+30uzqYxv9ETm91wdt2R9AFcWfjNAmje4NWlnCIQ5RMTzVf0ZyisOKqHR6RwA==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.7.2: + resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} + engines: {node: '>=10'} + hasBin: true + + send@0.19.0: + resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} + engines: {node: '>= 0.8.0'} + + serve-static@1.16.2: + resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} + engines: {node: '>= 0.8.0'} + + set-blocking@2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + side-channel-list@1.0.0: + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel@1.1.0: + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} + engines: {node: '>= 0.4'} + + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + slice-ansi@5.0.0: + resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} + engines: {node: '>=12'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + split-ca@1.0.1: + resolution: {integrity: sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ==} + + ssh-remote-port-forward@1.0.4: + resolution: {integrity: sha512-x0LV1eVDwjf1gmG7TTnfqIzf+3VPRz7vrNIjX6oYLbeCrf/PeVY6hkT68Mg+q02qXxQhrLjB0jfgvhevoCRmLQ==} + + ssh2@1.16.0: + resolution: {integrity: sha512-r1X4KsBGedJqo7h8F5c4Ybpcr5RjyP+aWIG007uBPRjmdQWfEiVLzSK71Zji1B9sKxwaCvD8y8cwSkYrlLiRRg==} + engines: {node: '>=10.16.0'} + + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + + statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + + std-env@3.9.0: + resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==} + + std-env@4.1.0: + resolution: {integrity: sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==} + + streamx@2.22.1: + resolution: {integrity: sha512-znKXEBxfatz2GBNK02kRnCXjV+AA4kjZIUxeWSr3UGirZMJfTE9uiwKHobnbgxWyL/JWro8tTq+vOqAK1/qbSA==} + + string-argv@0.3.2: + resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} + engines: {node: '>=0.6.19'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + strip-literal@3.0.0: + resolution: {integrity: sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + tar-fs@2.1.4: + resolution: {integrity: sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==} + + tar-fs@3.1.2: + resolution: {integrity: sha512-QGxxTxxyleAdyM3kpFs14ymbYmNFrfY+pHj7Z8FgtbZ7w2//VAgLMac7sT6nRpIHjppXO2AwwEOg0bPFVRcmXw==} + + tar-stream@2.2.0: + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} + engines: {node: '>=6'} + + tar-stream@3.1.7: + resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} + + tar@6.2.1: + resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} + engines: {node: '>=10'} + + testcontainers@11.14.0: + resolution: {integrity: sha512-r9pniwv/iwzyHaI7gwAvAm4Y+IvjJg3vBWdjrUCaDMc2AXIr4jKbq7jJO18Mw2ybs73pZy1Aj7p/4RVBGMRWjg==} + + text-decoder@1.2.3: + resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==} + + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + + tiny-glob@0.2.9: + resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} + + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + + tinyexec@0.3.2: + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + + tinyexec@1.2.4: + resolution: {integrity: sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==} + engines: {node: '>=18'} + + tinyglobby@0.2.14: + resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} + engines: {node: '>=12.0.0'} + + tinyglobby@0.2.17: + resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} + engines: {node: '>=12.0.0'} + + tinypool@1.1.1: + resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} + engines: {node: ^18.0.0 || >=20.0.0} + + tinyrainbow@2.0.0: + resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} + engines: {node: '>=14.0.0'} + + tinyrainbow@3.1.0: + resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==} + engines: {node: '>=14.0.0'} + + tinyspy@4.0.3: + resolution: {integrity: sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==} + engines: {node: '>=14.0.0'} + + tmp@0.2.7: + resolution: {integrity: sha512-e0votIpp4Uo2AJYSzVHV6xCcawuiez3DzqDAbrTc3YxBkplN6e+dM13ZeIcZnDg/QpSuU2zfZ3rzwY8ukEnaXw==} + engines: {node: '>=14.14'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + ts-api-utils@1.4.3: + resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==} + engines: {node: '>=16'} + peerDependencies: + typescript: '>=4.2.0' + + ts-error@1.0.6: + resolution: {integrity: sha512-tLJxacIQUM82IR7JO1UUkKlYuUTmoY9HBJAmNWFzheSlDS5SPMcNIepejHJa4BpPQLAcbRhRf3GDJzyj6rbKvA==} + + ts-poet@6.12.0: + resolution: {integrity: sha512-xo+iRNMWqyvXpFTaOAvLPA5QAWO6TZrSUs5s4Odaya3epqofBu/fMLHEWl8jPmjhA0s9sgj9sNvF1BmaQlmQkA==} + + ts-proto-descriptors@1.16.0: + resolution: {integrity: sha512-3yKuzMLpltdpcyQji1PJZRfoo4OJjNieKTYkQY8pF7xGKsYz/RHe3aEe4KiRxcinoBmnEhmuI+yJTxLb922ULA==} + + ts-proto@1.181.2: + resolution: {integrity: sha512-knJ8dtjn2Pd0c5ZGZG8z9DMiD4PUY8iGI9T9tb8DvGdWRMkLpf0WcPO7G+7cmbZyxvNTAG6ci3fybEaFgMZIvg==} + hasBin: true + + tweetnacl@0.14.5: + resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + + type-fest@1.4.0: + resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} + engines: {node: '>=10'} + + type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + + typedoc-plugin-extras@4.0.1: + resolution: {integrity: sha512-ab3T37ukHCwBjwBJpAcWdxy/XAaLdUyy5pwbgF9WDqCRN0DTJmJPLew9Kv6qrx5qnxiyfe6F4Og+PUp15kJWLw==} + peerDependencies: + typedoc: 0.27.x || 0.28.x + + typedoc@0.28.19: + resolution: {integrity: sha512-wKh+lhdmMFivMlc6vRRcMGXeGEHGU2g8a2CkPTJjJlwRf1iXbimWIPcFolCqe4E0d/FRtGszpIrsp3WLpDB8Pw==} + engines: {node: '>= 18', pnpm: '>= 10'} + hasBin: true + peerDependencies: + typescript: 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x || 5.8.x || 5.9.x || 6.0.x + + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true + + uc.micro@2.1.0: + resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} + + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + undici-types@7.24.6: + resolution: {integrity: sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==} + + undici@5.29.0: + resolution: {integrity: sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==} + engines: {node: '>=14.0'} + + undici@7.28.0: + resolution: {integrity: sha512-cRZYrTDwWznlnRiPjggAGxZXanty6M8RV1ff8Wm4LWXBp7/IG8v5DnOm74DtUBp9OONpK75YlPnIjQqX0dBDtA==} + engines: {node: '>=20.18.1'} + + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + + uuid@10.0.0: + resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} + deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). + hasBin: true + + uuid@14.0.1: + resolution: {integrity: sha512-6ZxzVpzDXDa3bJWaHilVayA+BH/1zmxCJoVgvmqJnid/gPoKHxUrS/aC/T6LGQtNHT+XHG9fXPJB4d+IrU30Ew==} + hasBin: true + + uuid@9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). + hasBin: true + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + vite-node@3.2.4: + resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + + vite@5.4.19: + resolution: {integrity: sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + + vitest@3.2.4: + resolution: {integrity: sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/debug': ^4.1.12 + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + '@vitest/browser': 3.2.4 + '@vitest/ui': 3.2.4 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@types/debug': + optional: true + '@types/node': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + + vitest@4.1.9: + resolution: {integrity: sha512-nE3/LEyc0z87uHYLZebqCUOaJr2hdtuPp7BQ4BosVFnfltxgAvMG08NyrSGlPpOUWvR27c5flSmYFTNr78L9GQ==} + engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@opentelemetry/api': ^1.9.0 + '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 + '@vitest/browser-playwright': 4.1.9 + '@vitest/browser-preview': 4.1.9 + '@vitest/browser-webdriverio': 4.1.9 + '@vitest/coverage-istanbul': 4.1.9 + '@vitest/coverage-v8': 4.1.9 + '@vitest/ui': 4.1.9 + happy-dom: '*' + jsdom: '*' + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@opentelemetry/api': + optional: true + '@types/node': + optional: true + '@vitest/browser-playwright': + optional: true + '@vitest/browser-preview': + optional: true + '@vitest/browser-webdriverio': + optional: true + '@vitest/coverage-istanbul': + optional: true + '@vitest/coverage-v8': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true + + wide-align@1.1.5: + resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + ws@8.18.2: + resolution: {integrity: sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + yaml@2.3.1: + resolution: {integrity: sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==} + engines: {node: '>= 14'} + + yaml@2.9.0: + resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==} + engines: {node: '>= 14.6'} + hasBin: true + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + zip-stream@6.0.1: + resolution: {integrity: sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==} + engines: {node: '>= 14'} + +snapshots: + + '@balena/dockerignore@1.0.2': {} + + '@curveball/bodyparser@0.5.0(@curveball/kernel@1.0.0)': + dependencies: + '@curveball/kernel': 1.0.0 + + '@curveball/core@1.0.2(@curveball/kernel@1.0.0)': + dependencies: + '@curveball/kernel': 1.0.0 + '@types/ws': 8.18.1 + raw-body: 2.5.2 + ws: 8.18.2 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@curveball/http-errors@0.5.0': {} + + '@curveball/kernel@1.0.0': + dependencies: + '@curveball/http-errors': 0.5.0 + '@types/ws': 8.18.1 + accepts: 1.3.8 + raw-body: 2.5.2 + ws: 8.18.2 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@datastructures-js/deque@1.0.8': {} + + '@esbuild/aix-ppc64@0.21.5': + optional: true + + '@esbuild/android-arm64@0.21.5': + optional: true + + '@esbuild/android-arm@0.21.5': + optional: true + + '@esbuild/android-x64@0.21.5': + optional: true + + '@esbuild/darwin-arm64@0.21.5': + optional: true + + '@esbuild/darwin-x64@0.21.5': + optional: true + + '@esbuild/freebsd-arm64@0.21.5': + optional: true + + '@esbuild/freebsd-x64@0.21.5': + optional: true + + '@esbuild/linux-arm64@0.21.5': + optional: true + + '@esbuild/linux-arm@0.21.5': + optional: true + + '@esbuild/linux-ia32@0.21.5': + optional: true + + '@esbuild/linux-loong64@0.21.5': + optional: true + + '@esbuild/linux-mips64el@0.21.5': + optional: true + + '@esbuild/linux-ppc64@0.21.5': + optional: true + + '@esbuild/linux-riscv64@0.21.5': + optional: true + + '@esbuild/linux-s390x@0.21.5': + optional: true + + '@esbuild/linux-x64@0.21.5': + optional: true + + '@esbuild/netbsd-x64@0.21.5': + optional: true + + '@esbuild/openbsd-x64@0.21.5': + optional: true + + '@esbuild/sunos-x64@0.21.5': + optional: true + + '@esbuild/win32-arm64@0.21.5': + optional: true + + '@esbuild/win32-ia32@0.21.5': + optional: true + + '@esbuild/win32-x64@0.21.5': + optional: true + + '@eslint-community/eslint-utils@4.7.0(eslint@8.57.1)': + dependencies: + eslint: 8.57.1 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.1': {} + + '@eslint/eslintrc@2.1.4': + dependencies: + ajv: 6.12.6 + debug: 4.4.1 + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.2 + import-fresh: 3.3.1 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@8.57.1': {} + + '@fastify/busboy@2.1.1': {} + + '@gerrit0/mini-shiki@3.23.0': + dependencies: + '@shikijs/engine-oniguruma': 3.23.0 + '@shikijs/langs': 3.23.0 + '@shikijs/themes': 3.23.0 + '@shikijs/types': 3.23.0 + '@shikijs/vscode-textmate': 10.0.2 + + '@graphql-typed-document-node/core@3.2.0(graphql@16.14.2)': + dependencies: + graphql: 16.14.2 + + '@grpc/grpc-js@1.13.4': + dependencies: + '@grpc/proto-loader': 0.7.15 + '@js-sdsl/ordered-map': 4.4.2 + + '@grpc/grpc-js@1.14.4': + dependencies: + '@grpc/proto-loader': 0.8.1 + '@js-sdsl/ordered-map': 4.4.2 + + '@grpc/proto-loader@0.7.15': + dependencies: + lodash.camelcase: 4.3.0 + long: 5.3.2 + protobufjs: 7.6.4 + yargs: 17.7.2 + + '@grpc/proto-loader@0.8.1': + dependencies: + lodash.camelcase: 4.3.0 + long: 5.3.2 + protobufjs: 7.6.4 + yargs: 17.7.2 + + '@humanwhocodes/config-array@0.13.0': + dependencies: + '@humanwhocodes/object-schema': 2.0.3 + debug: 4.4.1 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/object-schema@2.0.3': {} + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@js-sdsl/ordered-map@4.4.2': {} + + '@kwsites/file-exists@1.1.1': + dependencies: + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + '@mapbox/node-pre-gyp@1.0.11': + dependencies: + detect-libc: 2.0.4 + https-proxy-agent: 5.0.1 + make-dir: 3.1.0 + node-fetch: 2.7.0 + nopt: 5.0.0 + npmlog: 5.0.1 + rimraf: 3.0.2 + semver: 7.7.2 + tar: 6.2.1 + transitivePeerDependencies: + - encoding + - supports-color + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.19.1 + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@protobufjs/aspromise@1.1.2': {} + + '@protobufjs/base64@1.1.2': {} + + '@protobufjs/codegen@2.0.4': {} + + '@protobufjs/codegen@2.0.5': {} + + '@protobufjs/eventemitter@1.1.0': {} + + '@protobufjs/eventemitter@1.1.1': {} + + '@protobufjs/fetch@1.1.0': + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/inquire': 1.1.0 + + '@protobufjs/fetch@1.1.1': + dependencies: + '@protobufjs/aspromise': 1.1.2 + + '@protobufjs/float@1.0.2': {} + + '@protobufjs/inquire@1.1.0': {} + + '@protobufjs/path@1.1.2': {} + + '@protobufjs/pool@1.1.0': {} + + '@protobufjs/utf8@1.1.0': {} + + '@protobufjs/utf8@1.1.1': {} + + '@rollup/rollup-android-arm-eabi@4.44.0': + optional: true + + '@rollup/rollup-android-arm64@4.44.0': + optional: true + + '@rollup/rollup-darwin-arm64@4.44.0': + optional: true + + '@rollup/rollup-darwin-x64@4.44.0': + optional: true + + '@rollup/rollup-freebsd-arm64@4.44.0': + optional: true + + '@rollup/rollup-freebsd-x64@4.44.0': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.44.0': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.44.0': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.44.0': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.44.0': + optional: true + + '@rollup/rollup-linux-loongarch64-gnu@4.44.0': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.44.0': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.44.0': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.44.0': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.44.0': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.44.0': + optional: true + + '@rollup/rollup-linux-x64-musl@4.44.0': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.44.0': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.44.0': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.44.0': + optional: true + + '@shikijs/engine-oniguruma@3.23.0': + dependencies: + '@shikijs/types': 3.23.0 + '@shikijs/vscode-textmate': 10.0.2 + + '@shikijs/langs@3.23.0': + dependencies: + '@shikijs/types': 3.23.0 + + '@shikijs/themes@3.23.0': + dependencies: + '@shikijs/types': 3.23.0 + + '@shikijs/types@3.23.0': + dependencies: + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + + '@shikijs/vscode-textmate@10.0.2': {} + + '@standard-schema/spec@1.1.0': {} + + '@testcontainers/weaviate@11.14.0': + dependencies: + testcontainers: 11.14.0 + transitivePeerDependencies: + - bare-buffer + - supports-color + + '@types/body-parser@1.19.6': + dependencies: + '@types/connect': 3.4.38 + '@types/node': 18.19.112 + + '@types/chai@5.2.2': + dependencies: + '@types/deep-eql': 4.0.2 + + '@types/connect@3.4.38': + dependencies: + '@types/node': 18.19.112 + + '@types/deep-eql@4.0.2': {} + + '@types/docker-modem@3.0.6': + dependencies: + '@types/node': 25.9.4 + '@types/ssh2': 1.15.5 + + '@types/dockerode@4.0.1': + dependencies: + '@types/docker-modem': 3.0.6 + '@types/node': 25.9.4 + '@types/ssh2': 1.15.5 + + '@types/estree@1.0.8': {} + + '@types/express-serve-static-core@4.19.6': + dependencies: + '@types/node': 18.19.112 + '@types/qs': 6.14.0 + '@types/range-parser': 1.2.7 + '@types/send': 0.17.5 + + '@types/express@4.17.23': + dependencies: + '@types/body-parser': 1.19.6 + '@types/express-serve-static-core': 4.19.6 + '@types/qs': 6.14.0 + '@types/serve-static': 1.15.8 + + '@types/hast@3.0.4': + dependencies: + '@types/unist': 3.0.3 + + '@types/http-errors@2.0.5': {} + + '@types/json-schema@7.0.15': {} + + '@types/mime@1.3.5': {} + + '@types/node@18.19.112': + dependencies: + undici-types: 5.26.5 + + '@types/node@25.9.4': + dependencies: + undici-types: 7.24.6 + + '@types/qs@6.14.0': {} + + '@types/range-parser@1.2.7': {} + + '@types/semver@7.7.0': {} + + '@types/send@0.17.5': + dependencies: + '@types/mime': 1.3.5 + '@types/node': 18.19.112 + + '@types/serve-static@1.15.8': + dependencies: + '@types/http-errors': 2.0.5 + '@types/node': 18.19.112 + '@types/send': 0.17.5 + + '@types/ssh2-streams@0.1.12': + dependencies: + '@types/node': 25.9.4 + + '@types/ssh2@0.5.52': + dependencies: + '@types/node': 25.9.4 + '@types/ssh2-streams': 0.1.12 + + '@types/ssh2@1.15.5': + dependencies: + '@types/node': 18.19.112 + + '@types/unist@3.0.3': {} + + '@types/uuid@9.0.8': {} + + '@types/ws@8.18.1': + dependencies: + '@types/node': 18.19.112 + + '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3)': + dependencies: + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.9.3) + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.1)(typescript@5.9.3) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 6.21.0 + debug: 4.4.1 + eslint: 8.57.1 + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare: 1.4.0 + semver: 7.7.2 + ts-api-utils: 1.4.3(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3)': + dependencies: + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 6.21.0 + debug: 4.4.1 + eslint: 8.57.1 + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@6.21.0': + dependencies: + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/visitor-keys': 6.21.0 + + '@typescript-eslint/type-utils@6.21.0(eslint@8.57.1)(typescript@5.9.3)': + dependencies: + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.9.3) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.9.3) + debug: 4.4.1 + eslint: 8.57.1 + ts-api-utils: 1.4.3(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@6.21.0': {} + + '@typescript-eslint/typescript-estree@6.21.0(typescript@5.9.3)': + dependencies: + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/visitor-keys': 6.21.0 + debug: 4.4.1 + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.3 + semver: 7.7.2 + ts-api-utils: 1.4.3(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@6.21.0(eslint@8.57.1)(typescript@5.9.3)': + dependencies: + '@eslint-community/eslint-utils': 4.7.0(eslint@8.57.1) + '@types/json-schema': 7.0.15 + '@types/semver': 7.7.0 + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.9.3) + eslint: 8.57.1 + semver: 7.7.2 + transitivePeerDependencies: + - supports-color + - typescript + + '@typescript-eslint/visitor-keys@6.21.0': + dependencies: + '@typescript-eslint/types': 6.21.0 + eslint-visitor-keys: 3.4.3 + + '@ungap/structured-clone@1.3.0': {} + + '@vitest/expect@3.2.4': + dependencies: + '@types/chai': 5.2.2 + '@vitest/spy': 3.2.4 + '@vitest/utils': 3.2.4 + chai: 5.2.0 + tinyrainbow: 2.0.0 + + '@vitest/expect@4.1.9': + dependencies: + '@standard-schema/spec': 1.1.0 + '@types/chai': 5.2.2 + '@vitest/spy': 4.1.9 + '@vitest/utils': 4.1.9 + chai: 6.2.2 + tinyrainbow: 3.1.0 + + '@vitest/mocker@3.2.4(vite@5.4.19(@types/node@25.9.4))': + dependencies: + '@vitest/spy': 3.2.4 + estree-walker: 3.0.3 + magic-string: 0.30.17 + optionalDependencies: + vite: 5.4.19(@types/node@25.9.4) + + '@vitest/mocker@4.1.9(vite@5.4.19(@types/node@18.19.112))': + dependencies: + '@vitest/spy': 4.1.9 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + vite: 5.4.19(@types/node@18.19.112) + + '@vitest/pretty-format@3.2.4': + dependencies: + tinyrainbow: 2.0.0 + + '@vitest/pretty-format@4.1.9': + dependencies: + tinyrainbow: 3.1.0 + + '@vitest/runner@3.2.4': + dependencies: + '@vitest/utils': 3.2.4 + pathe: 2.0.3 + strip-literal: 3.0.0 + + '@vitest/runner@4.1.9': + dependencies: + '@vitest/utils': 4.1.9 + pathe: 2.0.3 + + '@vitest/snapshot@3.2.4': + dependencies: + '@vitest/pretty-format': 3.2.4 + magic-string: 0.30.17 + pathe: 2.0.3 + + '@vitest/snapshot@4.1.9': + dependencies: + '@vitest/pretty-format': 4.1.9 + '@vitest/utils': 4.1.9 + magic-string: 0.30.21 + pathe: 2.0.3 + + '@vitest/spy@3.2.4': + dependencies: + tinyspy: 4.0.3 + + '@vitest/spy@4.1.9': {} + + '@vitest/utils@3.2.4': + dependencies: + '@vitest/pretty-format': 3.2.4 + loupe: 3.1.4 + tinyrainbow: 2.0.0 + + '@vitest/utils@4.1.9': + dependencies: + '@vitest/pretty-format': 4.1.9 + convert-source-map: 2.0.0 + tinyrainbow: 3.1.0 + + abbrev@1.1.1: {} + + abort-controller-x@0.4.3: {} + + abort-controller-x@0.5.0: {} + + abort-controller@3.0.0: + dependencies: + event-target-shim: 5.0.1 + + accepts@1.3.8: + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + + acorn-jsx@5.3.2(acorn@8.15.0): + dependencies: + acorn: 8.15.0 + + acorn@8.15.0: {} + + agent-base@6.0.2: + dependencies: + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ansi-escapes@5.0.0: + dependencies: + type-fest: 1.4.0 + + ansi-regex@5.0.1: {} + + ansi-regex@6.1.0: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@6.2.1: {} + + aproba@2.0.0: {} + + archiver-utils@5.0.2: + dependencies: + glob: 10.4.5 + graceful-fs: 4.2.11 + is-stream: 2.0.1 + lazystream: 1.0.1 + lodash: 4.17.21 + normalize-path: 3.0.0 + readable-stream: 4.7.0 + + archiver@7.0.1: + dependencies: + archiver-utils: 5.0.2 + async: 3.2.6 + buffer-crc32: 1.0.0 + readable-stream: 4.7.0 + readdir-glob: 1.1.3 + tar-stream: 3.1.7 + zip-stream: 6.0.1 + + are-we-there-yet@2.0.0: + dependencies: + delegates: 1.0.0 + readable-stream: 3.6.2 + + argparse@2.0.1: {} + + array-flatten@1.1.1: {} + + array-union@2.1.0: {} + + asn1@0.2.6: + dependencies: + safer-buffer: 2.1.2 + + assertion-error@2.0.1: {} + + async-lock@1.4.1: {} + + async@3.2.6: {} + + b4a@1.6.7: {} + + balanced-match@1.0.2: {} + + balanced-match@4.0.4: {} + + bare-events@2.5.4: + optional: true + + bare-fs@4.1.5: + dependencies: + bare-events: 2.5.4 + bare-path: 3.0.0 + bare-stream: 2.6.5(bare-events@2.5.4) + optional: true + + bare-os@3.6.1: + optional: true + + bare-path@3.0.0: + dependencies: + bare-os: 3.6.1 + optional: true + + bare-stream@2.6.5(bare-events@2.5.4): + dependencies: + streamx: 2.22.1 + optionalDependencies: + bare-events: 2.5.4 + optional: true + + base64-js@1.5.1: {} + + bcrypt-pbkdf@1.0.2: + dependencies: + tweetnacl: 0.14.5 + + bl@4.1.0: + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + + body-parser@1.20.3: + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.13.0 + raw-body: 2.5.2 + type-is: 1.6.18 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + + brace-expansion@1.1.12: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.2: + dependencies: + balanced-match: 1.0.2 + + brace-expansion@5.0.6: + dependencies: + balanced-match: 4.0.4 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + buffer-crc32@1.0.0: {} + + buffer@5.7.1: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + buildcheck@0.0.6: + optional: true + + byline@5.0.0: {} + + bytes@3.1.2: {} + + cac@6.7.14: {} + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + call-bound@1.0.4: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 + + callsites@3.1.0: {} + + case-anything@2.1.13: {} + + chai@5.2.0: + dependencies: + assertion-error: 2.0.1 + check-error: 2.1.1 + deep-eql: 5.0.2 + loupe: 3.1.4 + pathval: 2.0.0 + + chai@6.2.2: {} + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@5.3.0: {} + + check-error@2.1.1: {} + + chownr@1.1.4: {} + + chownr@2.0.0: {} + + cli-cursor@4.0.0: + dependencies: + restore-cursor: 4.0.0 + + cli-truncate@3.1.0: + dependencies: + slice-ansi: 5.0.0 + string-width: 5.1.2 + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + color-support@1.1.3: {} + + colorette@2.0.20: {} + + commander@11.0.0: {} + + compress-commons@6.0.2: + dependencies: + crc-32: 1.2.2 + crc32-stream: 6.0.0 + is-stream: 2.0.1 + normalize-path: 3.0.0 + readable-stream: 4.7.0 + + concat-map@0.0.1: {} + + console-control-strings@1.1.0: {} + + content-disposition@0.5.4: + dependencies: + safe-buffer: 5.2.1 + + content-type@1.0.5: {} + + convert-source-map@2.0.0: {} + + cookie-signature@1.0.6: {} + + cookie@0.7.1: {} + + core-util-is@1.0.3: {} + + cpu-features@0.0.10: + dependencies: + buildcheck: 0.0.6 + nan: 2.22.2 + optional: true + + crc-32@1.2.2: {} + + crc32-stream@6.0.0: + dependencies: + crc-32: 1.2.2 + readable-stream: 4.7.0 + + cross-fetch@3.2.0: + dependencies: + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + debug@2.6.9: + dependencies: + ms: 2.0.0 + + debug@4.3.4: + dependencies: + ms: 2.1.2 + + debug@4.4.1: + dependencies: + ms: 2.1.3 + + debug@4.4.3: + dependencies: + ms: 2.1.3 + + deep-eql@5.0.2: {} + + deep-is@0.1.4: {} + + delegates@1.0.0: {} + + depd@2.0.0: {} + + destroy@1.2.0: {} + + detect-libc@1.0.3: {} + + detect-libc@2.0.4: {} + + dir-glob@3.0.1: + dependencies: + path-type: 4.0.0 + + docker-compose@1.4.2: + dependencies: + yaml: 2.9.0 + + docker-modem@5.0.7: + dependencies: + debug: 4.4.3 + readable-stream: 3.6.2 + split-ca: 1.0.1 + ssh2: 1.16.0 + transitivePeerDependencies: + - supports-color + + dockerode@4.0.12: + dependencies: + '@balena/dockerignore': 1.0.2 + '@grpc/grpc-js': 1.14.4 + '@grpc/proto-loader': 0.7.15 + docker-modem: 5.0.7 + protobufjs: 7.6.4 + tar-fs: 2.1.4 + uuid: 10.0.0 + transitivePeerDependencies: + - supports-color + + doctrine@3.0.0: + dependencies: + esutils: 2.0.3 + + dprint-node@1.0.8: + dependencies: + detect-libc: 1.0.3 + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + eastasianwidth@0.2.0: {} + + ee-first@1.1.1: {} + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + encodeurl@1.0.2: {} + + encodeurl@2.0.0: {} + + end-of-stream@1.4.5: + dependencies: + once: 1.4.0 + + entities@4.5.0: {} + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-module-lexer@1.7.0: {} + + es-module-lexer@2.1.0: {} + + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + + esbuild@0.21.5: + optionalDependencies: + '@esbuild/aix-ppc64': 0.21.5 + '@esbuild/android-arm': 0.21.5 + '@esbuild/android-arm64': 0.21.5 + '@esbuild/android-x64': 0.21.5 + '@esbuild/darwin-arm64': 0.21.5 + '@esbuild/darwin-x64': 0.21.5 + '@esbuild/freebsd-arm64': 0.21.5 + '@esbuild/freebsd-x64': 0.21.5 + '@esbuild/linux-arm': 0.21.5 + '@esbuild/linux-arm64': 0.21.5 + '@esbuild/linux-ia32': 0.21.5 + '@esbuild/linux-loong64': 0.21.5 + '@esbuild/linux-mips64el': 0.21.5 + '@esbuild/linux-ppc64': 0.21.5 + '@esbuild/linux-riscv64': 0.21.5 + '@esbuild/linux-s390x': 0.21.5 + '@esbuild/linux-x64': 0.21.5 + '@esbuild/netbsd-x64': 0.21.5 + '@esbuild/openbsd-x64': 0.21.5 + '@esbuild/sunos-x64': 0.21.5 + '@esbuild/win32-arm64': 0.21.5 + '@esbuild/win32-ia32': 0.21.5 + '@esbuild/win32-x64': 0.21.5 + + escalade@3.2.0: {} + + escape-html@1.0.3: {} + + escape-string-regexp@4.0.0: {} + + eslint-config-prettier@8.10.0(eslint@8.57.1): + dependencies: + eslint: 8.57.1 + + eslint-plugin-prettier@4.2.1(eslint-config-prettier@8.10.0(eslint@8.57.1))(eslint@8.57.1)(prettier@2.8.8): + dependencies: + eslint: 8.57.1 + prettier: 2.8.8 + prettier-linter-helpers: 1.0.0 + optionalDependencies: + eslint-config-prettier: 8.10.0(eslint@8.57.1) + + eslint-scope@7.2.2: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint@8.57.1: + dependencies: + '@eslint-community/eslint-utils': 4.7.0(eslint@8.57.1) + '@eslint-community/regexpp': 4.12.1 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.57.1 + '@humanwhocodes/config-array': 0.13.0 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.3.0 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.1 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.24.0 + graphemer: 1.4.0 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + + espree@9.6.1: + dependencies: + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) + eslint-visitor-keys: 3.4.3 + + esquery@1.6.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.8 + + esutils@2.0.3: {} + + etag@1.8.1: {} + + event-target-shim@5.0.1: {} + + eventemitter3@5.0.1: {} + + events@3.3.0: {} + + execa@7.2.0: + dependencies: + cross-spawn: 7.0.6 + get-stream: 6.0.1 + human-signals: 4.3.1 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.3.0 + onetime: 6.0.0 + signal-exit: 3.0.7 + strip-final-newline: 3.0.0 + + expect-type@1.2.1: {} + + expect-type@1.3.0: {} + + express@4.21.2: + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.3 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookie: 0.7.1 + cookie-signature: 1.0.6 + debug: 2.6.9 + depd: 2.0.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.3.1 + fresh: 0.5.2 + http-errors: 2.0.0 + merge-descriptors: 1.0.3 + methods: 1.1.2 + on-finished: 2.4.1 + parseurl: 1.3.3 + path-to-regexp: 0.1.12 + proxy-addr: 2.0.7 + qs: 6.13.0 + range-parser: 1.2.1 + safe-buffer: 5.2.1 + send: 0.19.0 + serve-static: 1.16.2 + setprototypeof: 1.2.0 + statuses: 2.0.1 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + + fast-deep-equal@3.1.3: {} + + fast-diff@1.3.0: {} + + fast-fifo@1.3.2: {} + + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fastq@1.19.1: + dependencies: + reusify: 1.1.0 + + fdir@6.4.6(picomatch@4.0.2): + optionalDependencies: + picomatch: 4.0.2 + + fdir@6.5.0(picomatch@4.0.4): + optionalDependencies: + picomatch: 4.0.4 + + file-entry-cache@6.0.1: + dependencies: + flat-cache: 3.2.0 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + finalhandler@1.3.1: + dependencies: + debug: 2.6.9 + encodeurl: 2.0.0 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.1 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@3.2.0: + dependencies: + flatted: 3.3.3 + keyv: 4.5.4 + rimraf: 3.0.2 + + flatted@3.3.3: {} + + foreground-child@3.3.1: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + + forwarded@0.2.0: {} + + fresh@0.5.2: {} + + fs-constants@1.0.0: {} + + fs-minipass@2.1.0: + dependencies: + minipass: 3.3.6 + + fs.realpath@1.0.0: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + gauge@3.0.2: + dependencies: + aproba: 2.0.0 + color-support: 1.1.3 + console-control-strings: 1.1.0 + has-unicode: 2.0.1 + object-assign: 4.1.1 + signal-exit: 3.0.7 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wide-align: 1.1.5 + + get-caller-file@2.0.5: {} + + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + + get-port@7.2.0: {} + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + + get-stream@6.0.1: {} + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + glob@10.4.5: + dependencies: + foreground-child: 3.3.1 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + globals@13.24.0: + dependencies: + type-fest: 0.20.2 + + globalyzer@0.1.0: {} + + globby@11.1.0: + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.3 + ignore: 5.3.2 + merge2: 1.4.1 + slash: 3.0.0 + + globrex@0.1.2: {} + + gopd@1.2.0: {} + + graceful-fs@4.2.11: {} + + graphemer@1.4.0: {} + + graphql-request@6.1.0(graphql@16.14.2): + dependencies: + '@graphql-typed-document-node/core': 3.2.0(graphql@16.14.2) + cross-fetch: 3.2.0 + graphql: 16.14.2 + transitivePeerDependencies: + - encoding + + graphql@16.14.2: {} + + grpc-tools@1.13.0: + dependencies: + '@mapbox/node-pre-gyp': 1.0.11 + transitivePeerDependencies: + - encoding + - supports-color + + has-flag@4.0.0: {} + + has-symbols@1.1.0: {} + + has-unicode@2.0.1: {} + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + http-errors@2.0.0: + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + + https-proxy-agent@5.0.1: + dependencies: + agent-base: 6.0.2 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + human-signals@4.3.1: {} + + husky@8.0.3: {} + + iconv-lite@0.4.24: + dependencies: + safer-buffer: 2.1.2 + + ieee754@1.2.1: {} + + ignore@5.3.2: {} + + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + imurmurhash@0.1.4: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + ipaddr.js@1.9.1: {} + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-fullwidth-code-point@4.0.0: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-number@7.0.0: {} + + is-path-inside@3.0.3: {} + + is-stream@2.0.1: {} + + is-stream@3.0.0: {} + + isarray@1.0.0: {} + + isexe@2.0.0: {} + + isomorphic-ws@5.0.0(ws@8.18.2): + dependencies: + ws: 8.18.2 + + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + js-base64@3.7.7: {} + + js-tokens@9.0.1: {} + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + json-buffer@3.0.1: {} + + json-schema-traverse@0.4.1: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + lazystream@1.0.1: + dependencies: + readable-stream: 2.3.8 + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + lilconfig@2.1.0: {} + + linkify-it@5.0.1: + dependencies: + uc.micro: 2.1.0 + + lint-staged@13.3.0: + dependencies: + chalk: 5.3.0 + commander: 11.0.0 + debug: 4.3.4 + execa: 7.2.0 + lilconfig: 2.1.0 + listr2: 6.6.1 + micromatch: 4.0.5 + pidtree: 0.6.0 + string-argv: 0.3.2 + yaml: 2.3.1 + transitivePeerDependencies: + - enquirer + - supports-color + + listr2@6.6.1: + dependencies: + cli-truncate: 3.1.0 + colorette: 2.0.20 + eventemitter3: 5.0.1 + log-update: 5.0.1 + rfdc: 1.4.1 + wrap-ansi: 8.1.0 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash.camelcase@4.3.0: {} + + lodash.merge@4.6.2: {} + + lodash@4.17.21: {} + + log-update@5.0.1: + dependencies: + ansi-escapes: 5.0.0 + cli-cursor: 4.0.0 + slice-ansi: 5.0.0 + strip-ansi: 7.1.0 + wrap-ansi: 8.1.0 + + long@5.3.2: {} + + loupe@3.1.4: {} + + lru-cache@10.4.3: {} + + lunr@2.3.9: {} + + magic-string@0.30.17: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + make-dir@3.1.0: + dependencies: + semver: 6.3.1 + + markdown-it@14.2.0: + dependencies: + argparse: 2.0.1 + entities: 4.5.0 + linkify-it: 5.0.1 + mdurl: 2.0.0 + punycode.js: 2.3.1 + uc.micro: 2.1.0 + + math-intrinsics@1.1.0: {} + + mdurl@2.0.0: {} + + media-typer@0.3.0: {} + + merge-descriptors@1.0.3: {} + + merge-stream@2.0.0: {} + + merge2@1.4.1: {} + + methods@1.1.2: {} + + micromatch@4.0.5: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mime@1.6.0: {} + + mime@3.0.0: {} + + mimic-fn@2.1.0: {} + + mimic-fn@4.0.0: {} + + minimatch@10.2.5: + dependencies: + brace-expansion: 5.0.6 + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.12 + + minimatch@5.1.6: + dependencies: + brace-expansion: 2.0.2 + + minimatch@9.0.3: + dependencies: + brace-expansion: 2.0.2 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.2 + + minipass@3.3.6: + dependencies: + yallist: 4.0.0 + + minipass@5.0.0: {} + + minipass@7.1.2: {} + + minizlib@2.1.2: + dependencies: + minipass: 3.3.6 + yallist: 4.0.0 + + mkdirp-classic@0.5.3: {} + + mkdirp@1.0.4: {} + + mkdirp@3.0.1: {} + + ms@2.0.0: {} + + ms@2.1.2: {} + + ms@2.1.3: {} + + nan@2.22.2: + optional: true + + nanoid@3.3.11: {} + + natural-compare@1.4.0: {} + + negotiator@0.6.3: {} + + nice-grpc-client-middleware-retry@3.1.15: + dependencies: + abort-controller-x: 0.5.0 + nice-grpc-common: 2.0.3 + + nice-grpc-common@2.0.3: + dependencies: + ts-error: 1.0.6 + + nice-grpc-web@3.3.10(ws@8.18.2): + dependencies: + abort-controller-x: 0.5.0 + isomorphic-ws: 5.0.0(ws@8.18.2) + js-base64: 3.7.7 + nice-grpc-common: 2.0.3 + transitivePeerDependencies: + - ws + + nice-grpc@2.1.12: + dependencies: + '@grpc/grpc-js': 1.13.4 + abort-controller-x: 0.4.3 + nice-grpc-common: 2.0.3 + + nice-grpc@2.1.16: + dependencies: + '@grpc/grpc-js': 1.14.4 + abort-controller-x: 0.5.0 + nice-grpc-common: 2.0.3 + + node-fetch@2.7.0: + dependencies: + whatwg-url: 5.0.0 + + nopt@5.0.0: + dependencies: + abbrev: 1.1.1 + + normalize-path@3.0.0: {} + + npm-run-path@5.3.0: + dependencies: + path-key: 4.0.0 + + npmlog@5.0.1: + dependencies: + are-we-there-yet: 2.0.0 + console-control-strings: 1.1.0 + gauge: 3.0.2 + set-blocking: 2.0.0 + + object-assign@4.1.1: {} + + object-inspect@1.13.4: {} + + obug@2.1.3: {} + + on-finished@2.4.1: + dependencies: + ee-first: 1.1.1 + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + + onetime@6.0.0: + dependencies: + mimic-fn: 4.0.0 + + openapi-typescript@5.4.2: + dependencies: + js-yaml: 4.1.0 + mime: 3.0.0 + prettier: 2.8.8 + tiny-glob: 0.2.9 + undici: 5.29.0 + yargs-parser: 21.1.1 + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + package-json-from-dist@1.0.1: {} + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parseurl@1.3.3: {} + + path-exists@4.0.0: {} + + path-is-absolute@1.0.1: {} + + path-key@3.1.1: {} + + path-key@4.0.0: {} + + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + + path-to-regexp@0.1.12: {} + + path-type@4.0.0: {} + + pathe@2.0.3: {} + + pathval@2.0.0: {} + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + picomatch@4.0.2: {} + + picomatch@4.0.4: {} + + pidtree@0.6.0: {} + + postcss@8.5.6: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + prelude-ls@1.2.1: {} + + prettier-linter-helpers@1.0.0: + dependencies: + fast-diff: 1.3.0 + + prettier-plugin-organize-imports@3.2.4(prettier@2.8.8)(typescript@5.9.3): + dependencies: + prettier: 2.8.8 + typescript: 5.9.3 + + prettier@2.8.8: {} + + process-nextick-args@2.0.1: {} + + process@0.11.10: {} + + proper-lockfile@4.1.2: + dependencies: + graceful-fs: 4.2.11 + retry: 0.12.0 + signal-exit: 3.0.7 + + properties-reader@3.0.1: + dependencies: + '@kwsites/file-exists': 1.1.1 + mkdirp: 3.0.1 + transitivePeerDependencies: + - supports-color + + protobufjs@7.5.3: + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/base64': 1.1.2 + '@protobufjs/codegen': 2.0.4 + '@protobufjs/eventemitter': 1.1.0 + '@protobufjs/fetch': 1.1.0 + '@protobufjs/float': 1.0.2 + '@protobufjs/inquire': 1.1.0 + '@protobufjs/path': 1.1.2 + '@protobufjs/pool': 1.1.0 + '@protobufjs/utf8': 1.1.0 + '@types/node': 18.19.112 + long: 5.3.2 + + protobufjs@7.6.4: + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/base64': 1.1.2 + '@protobufjs/codegen': 2.0.5 + '@protobufjs/eventemitter': 1.1.1 + '@protobufjs/fetch': 1.1.1 + '@protobufjs/float': 1.0.2 + '@protobufjs/path': 1.1.2 + '@protobufjs/pool': 1.1.0 + '@protobufjs/utf8': 1.1.1 + '@types/node': 25.9.4 + long: 5.3.2 + + proxy-addr@2.0.7: + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + + pump@3.0.3: + dependencies: + end-of-stream: 1.4.5 + once: 1.4.0 + + punycode.js@2.3.1: {} + + punycode@2.3.1: {} + + qs@6.13.0: + dependencies: + side-channel: 1.1.0 + + queue-microtask@1.2.3: {} + + range-parser@1.2.1: {} + + raw-body@2.5.2: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + + readable-stream@2.3.8: + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + + readable-stream@4.7.0: + dependencies: + abort-controller: 3.0.0 + buffer: 6.0.3 + events: 3.3.0 + process: 0.11.10 + string_decoder: 1.3.0 + + readdir-glob@1.1.3: + dependencies: + minimatch: 5.1.6 + + require-directory@2.1.1: {} + + resolve-from@4.0.0: {} + + restore-cursor@4.0.0: + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + + retry@0.12.0: {} + + reusify@1.1.0: {} + + rfdc@1.4.1: {} + + rimraf@3.0.2: + dependencies: + glob: 7.2.3 + + rollup@4.44.0: + dependencies: + '@types/estree': 1.0.8 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.44.0 + '@rollup/rollup-android-arm64': 4.44.0 + '@rollup/rollup-darwin-arm64': 4.44.0 + '@rollup/rollup-darwin-x64': 4.44.0 + '@rollup/rollup-freebsd-arm64': 4.44.0 + '@rollup/rollup-freebsd-x64': 4.44.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.44.0 + '@rollup/rollup-linux-arm-musleabihf': 4.44.0 + '@rollup/rollup-linux-arm64-gnu': 4.44.0 + '@rollup/rollup-linux-arm64-musl': 4.44.0 + '@rollup/rollup-linux-loongarch64-gnu': 4.44.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.44.0 + '@rollup/rollup-linux-riscv64-gnu': 4.44.0 + '@rollup/rollup-linux-riscv64-musl': 4.44.0 + '@rollup/rollup-linux-s390x-gnu': 4.44.0 + '@rollup/rollup-linux-x64-gnu': 4.44.0 + '@rollup/rollup-linux-x64-musl': 4.44.0 + '@rollup/rollup-win32-arm64-msvc': 4.44.0 + '@rollup/rollup-win32-ia32-msvc': 4.44.0 + '@rollup/rollup-win32-x64-msvc': 4.44.0 + fsevents: 2.3.3 + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + safe-buffer@5.1.2: {} + + safe-buffer@5.2.1: {} + + safer-buffer@2.1.2: {} + + semver@6.3.1: {} + + semver@7.7.2: {} + + send@0.19.0: + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + + serve-static@1.16.2: + dependencies: + encodeurl: 2.0.0 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.19.0 + transitivePeerDependencies: + - supports-color + + set-blocking@2.0.0: {} + + setprototypeof@1.2.0: {} + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + side-channel-list@1.0.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 + + side-channel@1.1.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.0 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + + siginfo@2.0.0: {} + + signal-exit@3.0.7: {} + + signal-exit@4.1.0: {} + + slash@3.0.0: {} + + slice-ansi@5.0.0: + dependencies: + ansi-styles: 6.2.1 + is-fullwidth-code-point: 4.0.0 + + source-map-js@1.2.1: {} + + split-ca@1.0.1: {} + + ssh-remote-port-forward@1.0.4: + dependencies: + '@types/ssh2': 0.5.52 + ssh2: 1.16.0 + + ssh2@1.16.0: + dependencies: + asn1: 0.2.6 + bcrypt-pbkdf: 1.0.2 + optionalDependencies: + cpu-features: 0.0.10 + nan: 2.22.2 + + stackback@0.0.2: {} + + statuses@2.0.1: {} + + std-env@3.9.0: {} + + std-env@4.1.0: {} + + streamx@2.22.1: + dependencies: + fast-fifo: 1.3.2 + text-decoder: 1.2.3 + optionalDependencies: + bare-events: 2.5.4 + + string-argv@0.3.2: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + + string_decoder@1.1.1: + dependencies: + safe-buffer: 5.1.2 + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.1.0 + + strip-final-newline@3.0.0: {} + + strip-json-comments@3.1.1: {} + + strip-literal@3.0.0: + dependencies: + js-tokens: 9.0.1 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + tar-fs@2.1.4: + dependencies: + chownr: 1.1.4 + mkdirp-classic: 0.5.3 + pump: 3.0.3 + tar-stream: 2.2.0 + + tar-fs@3.1.2: + dependencies: + pump: 3.0.3 + tar-stream: 3.1.7 + optionalDependencies: + bare-fs: 4.1.5 + bare-path: 3.0.0 + transitivePeerDependencies: + - bare-buffer + + tar-stream@2.2.0: + dependencies: + bl: 4.1.0 + end-of-stream: 1.4.5 + fs-constants: 1.0.0 + inherits: 2.0.4 + readable-stream: 3.6.2 + + tar-stream@3.1.7: + dependencies: + b4a: 1.6.7 + fast-fifo: 1.3.2 + streamx: 2.22.1 + + tar@6.2.1: + dependencies: + chownr: 2.0.0 + fs-minipass: 2.1.0 + minipass: 5.0.0 + minizlib: 2.1.2 + mkdirp: 1.0.4 + yallist: 4.0.0 + + testcontainers@11.14.0: + dependencies: + '@balena/dockerignore': 1.0.2 + '@types/dockerode': 4.0.1 + archiver: 7.0.1 + async-lock: 1.4.1 + byline: 5.0.0 + debug: 4.4.3 + docker-compose: 1.4.2 + dockerode: 4.0.12 + get-port: 7.2.0 + proper-lockfile: 4.1.2 + properties-reader: 3.0.1 + ssh-remote-port-forward: 1.0.4 + tar-fs: 3.1.2 + tmp: 0.2.7 + undici: 7.28.0 + transitivePeerDependencies: + - bare-buffer + - supports-color + + text-decoder@1.2.3: + dependencies: + b4a: 1.6.7 + + text-table@0.2.0: {} + + tiny-glob@0.2.9: + dependencies: + globalyzer: 0.1.0 + globrex: 0.1.2 + + tinybench@2.9.0: {} + + tinyexec@0.3.2: {} + + tinyexec@1.2.4: {} + + tinyglobby@0.2.14: + dependencies: + fdir: 6.4.6(picomatch@4.0.2) + picomatch: 4.0.2 + + tinyglobby@0.2.17: + dependencies: + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 + + tinypool@1.1.1: {} + + tinyrainbow@2.0.0: {} + + tinyrainbow@3.1.0: {} + + tinyspy@4.0.3: {} + + tmp@0.2.7: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + toidentifier@1.0.1: {} + + tr46@0.0.3: {} + + ts-api-utils@1.4.3(typescript@5.9.3): + dependencies: + typescript: 5.9.3 + + ts-error@1.0.6: {} + + ts-poet@6.12.0: + dependencies: + dprint-node: 1.0.8 + + ts-proto-descriptors@1.16.0: + dependencies: + long: 5.3.2 + protobufjs: 7.6.4 + + ts-proto@1.181.2: + dependencies: + case-anything: 2.1.13 + protobufjs: 7.5.3 + ts-poet: 6.12.0 + ts-proto-descriptors: 1.16.0 + + tweetnacl@0.14.5: {} + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + type-fest@0.20.2: {} + + type-fest@1.4.0: {} + + type-is@1.6.18: + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.35 + + typedoc-plugin-extras@4.0.1(typedoc@0.28.19(typescript@5.9.3)): + dependencies: + typedoc: 0.28.19(typescript@5.9.3) + + typedoc@0.28.19(typescript@5.9.3): + dependencies: + '@gerrit0/mini-shiki': 3.23.0 + lunr: 2.3.9 + markdown-it: 14.2.0 + minimatch: 10.2.5 + typescript: 5.9.3 + yaml: 2.9.0 + + typescript@5.9.3: {} + + uc.micro@2.1.0: {} + + undici-types@5.26.5: {} + + undici-types@7.24.6: {} + + undici@5.29.0: + dependencies: + '@fastify/busboy': 2.1.1 + + undici@7.28.0: {} + + unpipe@1.0.0: {} + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + util-deprecate@1.0.2: {} + + utils-merge@1.0.1: {} + + uuid@10.0.0: {} + + uuid@14.0.1: {} + + uuid@9.0.1: {} + + vary@1.1.2: {} + + vite-node@3.2.4(@types/node@25.9.4): + dependencies: + cac: 6.7.14 + debug: 4.4.1 + es-module-lexer: 1.7.0 + pathe: 2.0.3 + vite: 5.4.19(@types/node@25.9.4) + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + + vite@5.4.19(@types/node@18.19.112): + dependencies: + esbuild: 0.21.5 + postcss: 8.5.6 + rollup: 4.44.0 + optionalDependencies: + '@types/node': 18.19.112 + fsevents: 2.3.3 + + vite@5.4.19(@types/node@25.9.4): + dependencies: + esbuild: 0.21.5 + postcss: 8.5.6 + rollup: 4.44.0 + optionalDependencies: + '@types/node': 25.9.4 + fsevents: 2.3.3 + + vitest@3.2.4(@types/node@25.9.4): + dependencies: + '@types/chai': 5.2.2 + '@vitest/expect': 3.2.4 + '@vitest/mocker': 3.2.4(vite@5.4.19(@types/node@25.9.4)) + '@vitest/pretty-format': 3.2.4 + '@vitest/runner': 3.2.4 + '@vitest/snapshot': 3.2.4 + '@vitest/spy': 3.2.4 + '@vitest/utils': 3.2.4 + chai: 5.2.0 + debug: 4.4.1 + expect-type: 1.2.1 + magic-string: 0.30.17 + pathe: 2.0.3 + picomatch: 4.0.2 + std-env: 3.9.0 + tinybench: 2.9.0 + tinyexec: 0.3.2 + tinyglobby: 0.2.14 + tinypool: 1.1.1 + tinyrainbow: 2.0.0 + vite: 5.4.19(@types/node@25.9.4) + vite-node: 3.2.4(@types/node@25.9.4) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 25.9.4 + transitivePeerDependencies: + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + + vitest@4.1.9(@types/node@18.19.112)(vite@5.4.19(@types/node@18.19.112)): + dependencies: + '@vitest/expect': 4.1.9 + '@vitest/mocker': 4.1.9(vite@5.4.19(@types/node@18.19.112)) + '@vitest/pretty-format': 4.1.9 + '@vitest/runner': 4.1.9 + '@vitest/snapshot': 4.1.9 + '@vitest/spy': 4.1.9 + '@vitest/utils': 4.1.9 + es-module-lexer: 2.1.0 + expect-type: 1.3.0 + magic-string: 0.30.21 + obug: 2.1.3 + pathe: 2.0.3 + picomatch: 4.0.4 + std-env: 4.1.0 + tinybench: 2.9.0 + tinyexec: 1.2.4 + tinyglobby: 0.2.17 + tinyrainbow: 3.1.0 + vite: 5.4.19(@types/node@18.19.112) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 18.19.112 + transitivePeerDependencies: + - msw + + webidl-conversions@3.0.1: {} + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + why-is-node-running@2.3.0: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + + wide-align@1.1.5: + dependencies: + string-width: 4.2.3 + + word-wrap@1.2.5: {} + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + + wrappy@1.0.2: {} + + ws@8.18.2: {} + + y18n@5.0.8: {} + + yallist@4.0.0: {} + + yaml@2.3.1: {} + + yaml@2.9.0: {} + + yargs-parser@21.1.1: {} + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + yocto-queue@0.1.0: {} + + zip-stream@6.0.1: + dependencies: + archiver-utils: 5.0.2 + compress-commons: 6.0.2 + readable-stream: 4.7.0 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 00000000..ccdc80cd --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,2 @@ +packages: + - "packages/*" \ No newline at end of file diff --git a/src/collections/iterator/integration.test.ts b/src/collections/iterator/integration.test.ts deleted file mode 100644 index 189721b3..00000000 --- a/src/collections/iterator/integration.test.ts +++ /dev/null @@ -1,94 +0,0 @@ -/* eslint-disable @typescript-eslint/no-non-null-assertion */ -/* eslint-disable @typescript-eslint/no-non-null-asserted-optional-chain */ -import { afterAll, beforeAll, describe, expect, it } from 'vitest'; -import weaviate, { WeaviateClient } from '../../index.js'; -import { Collection } from '../collection/index.js'; - -describe('Testing of the collection.iterator method with a simple collection', () => { - let client: WeaviateClient; - let collection: Collection; - const collectionName = 'TestCollectionIterator'; - let id: string; - let vector: number[]; - - type TestCollectionIterator = { - testProp: string; - }; - - afterAll(() => { - return client.collections.delete(collectionName).catch((err) => { - console.error(err); - throw err; - }); - }); - - beforeAll(async () => { - client = await weaviate.connectToLocal({ port: 8080, grpcPort: 50051 }); - collection = client.collections.use(collectionName); - id = await client.collections - .create({ - name: collectionName, - properties: [ - { - name: 'testProp', - dataType: 'text', - }, - ], - vectorizers: weaviate.configure.vectors.text2VecContextionary({}), - }) - .then(() => { - return collection.data.insert({ - properties: { - testProp: 'test', - }, - }); - }); - const res = await collection.query.fetchObjectById(id, { includeVector: true }); - vector = res?.vectors.default as number[]; - }); - - it('should iterate through the collection with no options returning the objects', async () => { - let count = 0; - for await (const obj of collection.iterator()) { - expect(obj.properties.testProp).toBe('test'); - expect(obj.uuid).toBe(id); - expect(obj.vectors.default).toBeUndefined(); - count++; // eslint-disable-line no-plusplus - } - expect(count).toBe(1); - }); - - it('should iterate through the collection specifying return properties', async () => { - let count = 0; - for await (const obj of collection.iterator({ returnProperties: ['testProp'] })) { - expect(obj.properties.testProp).toBe('test'); - expect(obj.uuid).toBe(id); - expect(obj.vectors.default).toBeUndefined(); - count++; // eslint-disable-line no-plusplus - } - expect(count).toBe(1); - }); - - it('should iterate through the collection specifying return metadata', async () => { - let count = 0; - for await (const obj of collection.iterator({ returnMetadata: ['creationTime'] })) { - expect(obj.properties.testProp).toBe('test'); - expect(obj.uuid).toBe(id); - expect(obj.vectors.default).toBeUndefined(); - expect(obj.metadata?.creationTime).toBeDefined(); - count++; // eslint-disable-line no-plusplus - } - expect(count).toBe(1); - }); - - it('should iterate through the collection specifying include vector', async () => { - let count = 0; - for await (const obj of collection.iterator({ includeVector: true })) { - expect(obj.properties.testProp).toBe('test'); - expect(obj.uuid).toBe(id); - expect(obj.vectors.default).toEqual(vector); - count++; // eslint-disable-line no-plusplus - } - expect(count).toBe(1); - }); -}); diff --git a/src/data/unit.test.ts b/src/data/unit.test.ts deleted file mode 100644 index 0f239283..00000000 --- a/src/data/unit.test.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { describe, expect, it } from 'vitest'; -import { TestDbVersionProvider } from '../../test/dbVersionProvider.js'; -import { DbVersionSupport } from '../utils/dbVersion.js'; -import { ObjectsPath, ReferencesPath } from './path.js'; - -// This can be anything > 1.14.2, to support class-namespaced urls. -// The actual value is not used for anything else -const version = '1.18.0'; - -const objectsPathBuilder = new ObjectsPath(new DbVersionSupport(new TestDbVersionProvider(version))); - -const refsPathBuilder = new ReferencesPath(new DbVersionSupport(new TestDbVersionProvider(version))); - -describe('paths', () => { - it('builds object create', () => { - return objectsPathBuilder - .buildCreate('ONE') - .then((path) => expect(path).toEqual('/objects?consistency_level=ONE')) - .catch((e) => expect.unreachable(`unexpected error: ${e}`)); - }); - - it('builds object delete', () => { - return objectsPathBuilder - .buildDelete('123456', 'SomeClass', 'ALL') - .then((path) => expect(path).toEqual('/objects/SomeClass/123456?consistency_level=ALL')) - .catch((e) => expect.unreachable(`unexpected error: ${e}`)); - }); - - it('builds object merge', () => { - return objectsPathBuilder - .buildMerge('123456', 'SomeClass', 'QUORUM') - .then((path) => expect(path).toEqual('/objects/SomeClass/123456?consistency_level=QUORUM')) - .catch((e) => expect.unreachable(`unexpected error: ${e}`)); - }); - - it('builds object update', () => { - return objectsPathBuilder - .buildUpdate('123456', 'SomeClass', 'ONE') - .then((path) => expect(path).toEqual('/objects/SomeClass/123456?consistency_level=ONE')) - .catch((e) => expect.unreachable(`unexpected error: ${e}`)); - }); - - it('builds references', () => { - return refsPathBuilder - .build('123456', 'SomeClass', 'SomeProp', 'ALL') - .then((path) => - expect(path).toEqual('/objects/SomeClass/123456/references/SomeProp?consistency_level=ALL') - ) - .catch((e) => expect.unreachable(`unexpected error: ${e}`)); - }); -}); - -describe('paths with tenantKey', () => { - it('builds object delete', () => { - return objectsPathBuilder - .buildDelete('123456', 'SomeClass', 'ALL', 'tenantA') - .then((path) => expect(path).toEqual('/objects/SomeClass/123456?consistency_level=ALL&tenant=tenantA')) - .catch((e) => expect.unreachable(`unexpected error: ${e}`)); - }); - - it('builds references', () => { - return refsPathBuilder - .build('123456', 'SomeClass', 'SomeProp', 'ALL', 'tenantA') - .then((path) => - expect(path).toEqual( - '/objects/SomeClass/123456/references/SomeProp?consistency_level=ALL&tenant=tenantA' - ) - ) - .catch((e) => expect.unreachable(`unexpected error: ${e}`)); - }); -}); diff --git a/test/backup/journey.test.ts b/test/backup/journey.test.ts deleted file mode 100644 index 0526712f..00000000 --- a/test/backup/journey.test.ts +++ /dev/null @@ -1,936 +0,0 @@ -import { describe, expect, it } from 'vitest'; -import { Backend } from '../../src/backup/index.js'; -import { - cleanupTestFood, - createTestFoodSchemaAndData, - PIZZA_CLASS_NAME, - SOUP_CLASS_NAME, -} from '../../src/utils/testData'; -import weaviate, { WeaviateClient } from '../../src/v2/index.js'; -import { - BackupCreateResponse, - BackupCreateStatusResponse, - BackupRestoreResponse, - BackupRestoreStatusResponse, -} from '../openapi/types.js'; - -const DOCKER_COMPOSE_BACKUPS_DIR = '/tmp/backups'; - -describe('create and restore backup with waiting', () => { - const BACKEND: Backend = 'filesystem'; - const BACKUP_ID = randomBackupId(); - - const client = weaviate.client({ - scheme: 'http', - host: 'localhost:8080', - }); - - it('sets up', () => createTestFoodSchemaAndData(client)); - - it('asserts data exist', () => assertThatAllPizzasExist(client)); - - it('creates backup', () => { - return client.backup - .creator() - .withIncludeClassNames(PIZZA_CLASS_NAME) - .withBackend(BACKEND) - .withBackupId(BACKUP_ID) - .withWaitForCompletion(true) - .do() - .then((createResponse: BackupCreateResponse) => { - expect(createResponse.id).toBe(BACKUP_ID); - expect(createResponse.classes).toHaveLength(1); - expect(createResponse.classes).toContain(PIZZA_CLASS_NAME); - expect(createResponse.path).toBe(`${DOCKER_COMPOSE_BACKUPS_DIR}/${BACKUP_ID}`); - expect(createResponse.backend).toBe(BACKEND); - expect(createResponse.status).toBe('SUCCESS'); - expect(createResponse.error).toBeUndefined(); - }) - .catch((err: any) => { - throw new Error('should not fail on create backup: ' + err); - }); - }); - - it('asserts data still exist', () => assertThatAllPizzasExist(client)); - - it('checks create status', () => { - return client.backup - .createStatusGetter() - .withBackend(BACKEND) - .withBackupId(BACKUP_ID) - .do() - .then((createStatusResponse: BackupCreateStatusResponse) => { - expect(createStatusResponse.id).toBe(BACKUP_ID); - expect(createStatusResponse.path).toBe(`${DOCKER_COMPOSE_BACKUPS_DIR}/${BACKUP_ID}`); - expect(createStatusResponse.backend).toBe(BACKEND); - expect(createStatusResponse.status).toBe('SUCCESS'); - expect(createStatusResponse.error).toBeUndefined(); - }) - .catch((err: Error) => { - throw new Error('should not fail on create status: ' + err); - }); - }); - - it('removes existing class', () => { - return client.schema - .classDeleter() - .withClassName(PIZZA_CLASS_NAME) - .do() - .catch((err: any) => { - throw new Error('should not fail on class delete: ' + err); - }); - }); - - it('restores backup', () => { - return client.backup - .restorer() - .withIncludeClassNames(PIZZA_CLASS_NAME) - .withBackend(BACKEND) - .withBackupId(BACKUP_ID) - .withWaitForCompletion(true) - .do() - .then((restoreResponse: BackupRestoreResponse) => { - expect(restoreResponse.id).toBe(BACKUP_ID); - expect(restoreResponse.classes).toHaveLength(1); - expect(restoreResponse.classes).toContain(PIZZA_CLASS_NAME); - expect(restoreResponse.path).toBe(`${DOCKER_COMPOSE_BACKUPS_DIR}/${BACKUP_ID}`); - expect(restoreResponse.backend).toBe(BACKEND); - expect(restoreResponse.status).toBe('SUCCESS'); - expect(restoreResponse.error).toBeUndefined(); - }) - .catch((err: Error) => { - throw new Error('should not fail on restore backup: ' + err); - }); - }); - - it('asserts data again exist', () => assertThatAllPizzasExist(client)); - - it('checks restore status', () => { - return client.backup - .restoreStatusGetter() - .withBackend(BACKEND) - .withBackupId(BACKUP_ID) - .do() - .then((restoreStatusResponse: BackupRestoreStatusResponse) => { - expect(restoreStatusResponse.id).toBe(BACKUP_ID); - expect(restoreStatusResponse.path).toBe(`${DOCKER_COMPOSE_BACKUPS_DIR}/${BACKUP_ID}`); - expect(restoreStatusResponse.backend).toBe(BACKEND); - expect(restoreStatusResponse.status).toBe('SUCCESS'); - expect(restoreStatusResponse.error).toBeUndefined(); - }) - .catch((err: Error) => { - throw new Error('should not fail on restore status: ' + err); - }); - }); - - it('cleans up', () => cleanupTestFood(client)); -}); - -describe('create and restore backup without waiting', () => { - const BACKEND: Backend = 'filesystem'; - const BACKUP_ID = randomBackupId(); - - const client = weaviate.client({ - scheme: 'http', - host: 'localhost:8080', - }); - - it('sets up', () => createTestFoodSchemaAndData(client)); - - it('asserts data exist', () => assertThatAllPizzasExist(client)); - - it('creates backup', () => { - return client.backup - .creator() - .withIncludeClassNames(PIZZA_CLASS_NAME) - .withBackend(BACKEND) - .withBackupId(BACKUP_ID) - .do() - .then((createResponse: BackupCreateResponse) => { - expect(createResponse.id).toBe(BACKUP_ID); - expect(createResponse.classes).toHaveLength(1); - expect(createResponse.classes).toContain(PIZZA_CLASS_NAME); - expect(createResponse.path).toBe(`${DOCKER_COMPOSE_BACKUPS_DIR}/${BACKUP_ID}`); - expect(createResponse.backend).toBe(BACKEND); - expect(createResponse.status).toBe('STARTED'); - expect(createResponse.error).toBeUndefined(); - }) - .catch((err: Error) => { - throw new Error('should not fail on create backup: ' + err); - }); - }); - - it('waits until created', () => { - return new Promise((resolve, reject) => { - const statusGetter = client.backup.createStatusGetter().withBackend(BACKEND).withBackupId(BACKUP_ID); - const loop = () => { - statusGetter - .do() - .then((createStatusResponse: BackupCreateStatusResponse) => { - if (createStatusResponse.status == 'SUCCESS' || createStatusResponse.status == 'FAILED') { - resolve(createStatusResponse); - } else { - setTimeout(loop, 100); - } - }) - .catch(reject); - }; - loop(); - }) - .then((createStatusResponse: any) => { - expect(createStatusResponse.id).toBe(BACKUP_ID); - expect(createStatusResponse.path).toBe(`${DOCKER_COMPOSE_BACKUPS_DIR}/${BACKUP_ID}`); - expect(createStatusResponse.backend).toBe(BACKEND); - expect(createStatusResponse.status).toBe('SUCCESS'); - expect(createStatusResponse.error).toBeUndefined(); - }) - .catch((err: any) => { - throw new Error('should not fail on create status: ' + err); - }); - }); - - it('asserts data still exist', () => assertThatAllPizzasExist(client)); - - it('removes existing class', () => { - return client.schema - .classDeleter() - .withClassName(PIZZA_CLASS_NAME) - .do() - .catch((err: any) => { - throw new Error('should not fail on class delete: ' + err); - }); - }); - - it('restores backup', () => { - return client.backup - .restorer() - .withIncludeClassNames(PIZZA_CLASS_NAME) - .withBackend(BACKEND) - .withBackupId(BACKUP_ID) - .do() - .then((restoreResponse: BackupRestoreResponse) => { - expect(restoreResponse.id).toBe(BACKUP_ID); - expect(restoreResponse.classes).toHaveLength(1); - expect(restoreResponse.classes).toContain(PIZZA_CLASS_NAME); - expect(restoreResponse.path).toBe(`${DOCKER_COMPOSE_BACKUPS_DIR}/${BACKUP_ID}`); - expect(restoreResponse.backend).toBe(BACKEND); - expect(restoreResponse.status).toBe('STARTED'); - expect(restoreResponse.error).toBeUndefined(); - }) - .catch((err: Error) => { - throw new Error('should not fail on restore backup: ' + err); - }); - }); - - it('waits until restored', () => { - return new Promise((resolve, reject) => { - const statusGetter = client.backup.restoreStatusGetter().withBackend(BACKEND).withBackupId(BACKUP_ID); - const loop = () => { - statusGetter - .do() - .then((restoreStatusResponse: BackupRestoreStatusResponse) => { - if (restoreStatusResponse.status == 'SUCCESS' || restoreStatusResponse.status == 'FAILED') { - resolve(restoreStatusResponse); - } else { - setTimeout(loop, 100); - } - }) - .catch(reject); - }; - loop(); - }) - .then((restoreStatusResponse: any) => { - expect(restoreStatusResponse.id).toBe(BACKUP_ID); - expect(restoreStatusResponse.path).toBe(`${DOCKER_COMPOSE_BACKUPS_DIR}/${BACKUP_ID}`); - expect(restoreStatusResponse.backend).toBe(BACKEND); - expect(restoreStatusResponse.status).toBe('SUCCESS'); - expect(restoreStatusResponse.error).toBeUndefined(); - }) - .catch((err: any) => { - throw new Error('should not fail on restore backup: ' + err); - }); - }); - - it('asserts data again exist', () => assertThatAllPizzasExist(client)); - - it('cleans up', () => cleanupTestFood(client)); -}); - -describe('create and restore 1 of 2 classes', () => { - const BACKEND: Backend = 'filesystem'; - const BACKUP_ID = randomBackupId(); - - const client = weaviate.client({ - scheme: 'http', - host: 'localhost:8080', - }); - - it('sets up', () => createTestFoodSchemaAndData(client)); - - it('asserts data exist', () => - Promise.all([assertThatAllPizzasExist(client), assertThatAllSoupsExist(client)])); - - it('creates backup', () => { - return client.backup - .creator() - .withBackend(BACKEND) - .withBackupId(BACKUP_ID) - .withWaitForCompletion(true) - .do() - .then((createResponse: BackupCreateResponse) => { - expect(createResponse.id).toBe(BACKUP_ID); - expect(createResponse.classes).toContain(PIZZA_CLASS_NAME); - expect(createResponse.classes).toContain(SOUP_CLASS_NAME); - expect(createResponse.path).toBe(`${DOCKER_COMPOSE_BACKUPS_DIR}/${BACKUP_ID}`); - expect(createResponse.backend).toBe(BACKEND); - expect(createResponse.status).toBe('SUCCESS'); - expect(createResponse.error).toBeUndefined(); - }) - .catch((err: Error) => { - throw new Error('should not fail on create backup: ' + err); - }); - }); - - it('asserts data still exist', () => - Promise.all([assertThatAllPizzasExist(client), assertThatAllSoupsExist(client)])); - - it('checks create status', () => { - return client.backup - .createStatusGetter() - .withBackend(BACKEND) - .withBackupId(BACKUP_ID) - .do() - .then((createStatusResponse: BackupCreateStatusResponse) => { - expect(createStatusResponse.id).toBe(BACKUP_ID); - expect(createStatusResponse.path).toBe(`${DOCKER_COMPOSE_BACKUPS_DIR}/${BACKUP_ID}`); - expect(createStatusResponse.backend).toBe(BACKEND); - expect(createStatusResponse.status).toBe('SUCCESS'); - expect(createStatusResponse.error).toBeUndefined(); - }) - .catch((err: Error) => { - throw new Error('should not fail on create status: ' + err); - }); - }); - - it('removes existing class', () => { - return client.schema - .classDeleter() - .withClassName(PIZZA_CLASS_NAME) - .do() - .catch((err: any) => { - throw new Error('should not fail on class delete: ' + err); - }); - }); - - it('restores backup', () => { - return client.backup - .restorer() - .withIncludeClassNames(PIZZA_CLASS_NAME) - .withBackend(BACKEND) - .withBackupId(BACKUP_ID) - .withWaitForCompletion(true) - .do() - .then((restoreResponse: BackupRestoreResponse) => { - expect(restoreResponse.id).toBe(BACKUP_ID); - expect(restoreResponse.classes).toHaveLength(1); - expect(restoreResponse.classes).toContain(PIZZA_CLASS_NAME); - expect(restoreResponse.path).toBe(`${DOCKER_COMPOSE_BACKUPS_DIR}/${BACKUP_ID}`); - expect(restoreResponse.backend).toBe(BACKEND); - expect(restoreResponse.status).toBe('SUCCESS'); - expect(restoreResponse.error).toBeUndefined(); - }) - .catch((err: any) => { - throw new Error('should not fail on restore backup: ' + err); - }); - }); - - it('asserts data again exist', () => - Promise.all([assertThatAllPizzasExist(client), assertThatAllSoupsExist(client)])); - - it('checks restore status', () => { - return client.backup - .restoreStatusGetter() - .withBackend(BACKEND) - .withBackupId(BACKUP_ID) - .do() - .then((restoreStatusResponse: BackupRestoreStatusResponse) => { - expect(restoreStatusResponse.id).toBe(BACKUP_ID); - expect(restoreStatusResponse.path).toBe(`${DOCKER_COMPOSE_BACKUPS_DIR}/${BACKUP_ID}`); - expect(restoreStatusResponse.backend).toBe(BACKEND); - expect(restoreStatusResponse.status).toBe('SUCCESS'); - expect(restoreStatusResponse.error).toBeUndefined(); - }) - .catch((err: Error) => { - throw new Error('should not fail on restore status: ' + err); - }); - }); - - it('cleans up', () => cleanupTestFood(client)); -}); - -describe('fail creating backup for not existing class', () => { - const CLASS_NAME = 'not-existing-class'; - const BACKEND: Backend = 'filesystem'; - const BACKUP_ID = randomBackupId(); - - const client = weaviate.client({ - scheme: 'http', - host: 'localhost:8080', - }); - - it('sets up', () => createTestFoodSchemaAndData(client)); - - it('fails creating', () => { - return client.backup - .creator() - .withIncludeClassNames(CLASS_NAME) - .withBackend(BACKEND) - .withBackupId(BACKUP_ID) - .do() - .then(() => { - throw new Error('should fail on create backup'); - }) - .catch((err: Error) => { - expect(err.message).toContain('422'); - expect(err.message).toContain(CLASS_NAME); - }); - }); - - it('cleans up', () => cleanupTestFood(client)); -}); - -describe('fail restoring backup for existing class', () => { - const BACKEND: Backend = 'filesystem'; - const BACKUP_ID = randomBackupId(); - - const client = weaviate.client({ - scheme: 'http', - host: 'localhost:8080', - }); - - it('sets up', () => createTestFoodSchemaAndData(client)); - - it('creates backup', () => { - return client.backup - .creator() - .withIncludeClassNames(PIZZA_CLASS_NAME) - .withBackend(BACKEND) - .withBackupId(BACKUP_ID) - .withWaitForCompletion(true) - .do() - .catch((err: Error) => { - throw new Error('should not fail on create backup: ' + err); - }); - }); - - it('fails restoring', () => { - return client.backup - .restorer() - .withIncludeClassNames(PIZZA_CLASS_NAME) - .withBackend(BACKEND) - .withBackupId(BACKUP_ID) - .withWaitForCompletion(true) - .do() - .then((resp: BackupRestoreResponse) => { - expect(resp.error).toContain('already exists'); - expect(resp.error).toContain(PIZZA_CLASS_NAME); - expect(resp.status).toBe('FAILED'); - }); - }); - - it('cleans up', () => cleanupTestFood(client)); -}); - -describe('fail creating existing backup', () => { - const BACKEND: Backend = 'filesystem'; - const BACKUP_ID = randomBackupId(); - - const client = weaviate.client({ - scheme: 'http', - host: 'localhost:8080', - }); - - it('sets up', () => createTestFoodSchemaAndData(client)); - - it('creates backup', () => { - return client.backup - .creator() - .withIncludeClassNames(PIZZA_CLASS_NAME) - .withBackend(BACKEND) - .withBackupId(BACKUP_ID) - .withWaitForCompletion(true) - .do() - .catch((err: Error) => { - throw new Error('should not fail on create backup: ' + err); - }); - }); - - it('fails creating', () => { - return client.backup - .creator() - .withIncludeClassNames(PIZZA_CLASS_NAME) - .withBackend(BACKEND) - .withBackupId(BACKUP_ID) - .do() - .then(() => { - throw new Error('should fail on create backup'); - }) - .catch((err: Error) => { - expect(err.message).toContain('422'); - expect(err.message).toContain(BACKUP_ID); - }); - }); - - it('cleans up', () => cleanupTestFood(client)); -}); - -describe('fail checking create status for not existing backup', () => { - const BACKEND: Backend = 'filesystem'; - const BACKUP_ID = randomBackupId(); - - const client = weaviate.client({ - scheme: 'http', - host: 'localhost:8080', - }); - - it('sets up', () => createTestFoodSchemaAndData(client)); - - it('fails checking create status', () => { - return client.backup - .createStatusGetter() - .withBackend(BACKEND) - .withBackupId(BACKUP_ID) - .do() - .then(() => { - throw new Error('should fail on create status'); - }) - .catch((err: Error) => { - expect(err.message).toContain('404'); - expect(err.message).toContain(BACKUP_ID); - }); - }); - - it('cleans up', () => cleanupTestFood(client)); -}); - -describe('fail restoring not existing backup', () => { - const BACKEND: Backend = 'filesystem'; - const BACKUP_ID = randomBackupId(); - - const client = weaviate.client({ - scheme: 'http', - host: 'localhost:8080', - }); - - it('sets up', () => createTestFoodSchemaAndData(client)); - - it('fails restoring', () => { - return client.backup - .restorer() - .withIncludeClassNames(PIZZA_CLASS_NAME) - .withBackend(BACKEND) - .withBackupId(BACKUP_ID) - .do() - .then(() => { - throw new Error('should fail on restore backup'); - }) - .catch((err: Error) => { - expect(err.message).toContain('404'); - expect(err.message).toContain(BACKUP_ID); - }); - }); - - it('cleans up', () => cleanupTestFood(client)); -}); - -describe('fail checking restore status for not started restore', () => { - const BACKEND: Backend = 'filesystem'; - const BACKUP_ID = randomBackupId(); - - const client = weaviate.client({ - scheme: 'http', - host: 'localhost:8080', - }); - - it('sets up', () => createTestFoodSchemaAndData(client)); - - it('creates backup', () => { - return client.backup - .creator() - .withIncludeClassNames(PIZZA_CLASS_NAME) - .withBackend(BACKEND) - .withBackupId(BACKUP_ID) - .withWaitForCompletion(true) - .do() - .catch((err: Error) => { - throw new Error('should not fail on create backup: ' + err); - }); - }); - - it('fails checking restore status', () => { - return client.backup - .restoreStatusGetter() - .withBackend(BACKEND) - .withBackupId(BACKUP_ID) - .do() - .then(() => { - throw new Error('should fail on restore status'); - }) - .catch((err: Error) => { - expect(err.message).toContain('404'); - expect(err.message).toContain(BACKUP_ID); - }); - }); - - it('cleans up', () => cleanupTestFood(client)); -}); - -describe('fail creating backup for both include and exclude classes', () => { - const BACKEND: Backend = 'filesystem'; - const BACKUP_ID = randomBackupId(); - - const client = weaviate.client({ - scheme: 'http', - host: 'localhost:8080', - }); - - it('sets up', () => createTestFoodSchemaAndData(client)); - - it('fails creating backup', () => { - return client.backup - .creator() - .withIncludeClassNames(PIZZA_CLASS_NAME) - .withExcludeClassNames(SOUP_CLASS_NAME) - .withBackend(BACKEND) - .withBackupId(BACKUP_ID) - .withWaitForCompletion(true) - .do() - .then(() => { - throw new Error('should fail on create'); - }) - .catch((err: Error) => { - expect(err.message).toContain('422'); - expect(err.message).toContain('include'); - expect(err.message).toContain('exclude'); - }); - }); - - it('cleans up', () => cleanupTestFood(client)); -}); - -describe('fail restoring backup for both include and exclude classes', () => { - const BACKEND: Backend = 'filesystem'; - const BACKUP_ID = randomBackupId(); - - const client = weaviate.client({ - scheme: 'http', - host: 'localhost:8080', - }); - - it('sets up', () => createTestFoodSchemaAndData(client)); - - it('creates backup', () => { - return client.backup - .creator() - .withIncludeClassNames(PIZZA_CLASS_NAME, SOUP_CLASS_NAME) - .withBackend(BACKEND) - .withBackupId(BACKUP_ID) - .withWaitForCompletion(true) - .do() - .catch((err: Error) => { - throw new Error('should not fail on create backup: ' + err); - }); - }); - - it('removes existing class', () => { - return client.schema - .classDeleter() - .withClassName(PIZZA_CLASS_NAME) - .do() - .catch((err: Error) => { - throw new Error('should not fail on class delete: ' + err); - }); - }); - - it('fails restoring backup', () => { - return client.backup - .restorer() - .withIncludeClassNames(PIZZA_CLASS_NAME) - .withExcludeClassNames(SOUP_CLASS_NAME) - .withBackend(BACKEND) - .withBackupId(BACKUP_ID) - .do() - .then(() => { - throw new Error('should fail on restore'); - }) - .catch((err: Error) => { - expect(err.message).toContain('422'); - expect(err.message).toContain('include'); - expect(err.message).toContain('exclude'); - }); - }); - - it('cleans up', () => cleanupTestFood(client).catch(() => Promise.resolve('ignore not exising Pizza'))); -}); - -describe('creates backup with valid compression config values', () => { - const BACKEND: Backend = 'filesystem'; - const BACKUP_ID = randomBackupId(); - - const client = weaviate.client({ - scheme: 'http', - host: 'localhost:8080', - }); - - it('sets up', () => createTestFoodSchemaAndData(client)); - - it('creates backup', () => { - return client.backup - .creator() - .withIncludeClassNames(PIZZA_CLASS_NAME, SOUP_CLASS_NAME) - .withBackend(BACKEND) - .withBackupId(BACKUP_ID) - .withWaitForCompletion(true) - .withConfig({ - CPUPercentage: 80, - CompressionLevel: 'BestSpeed', - }) - .do() - .catch((err: Error) => { - throw new Error('should not fail on create backup: ' + err); - }); - }); - - it('cleans up', () => cleanupTestFood(client)); -}); - -describe('fails creating backup with invalid compression config', () => { - const BACKEND: Backend = 'filesystem'; - const BACKUP_ID = randomBackupId(); - - const client = weaviate.client({ - scheme: 'http', - host: 'localhost:8080', - }); - - it('sets up', () => createTestFoodSchemaAndData(client)); - - it('fails creating backup with CPUPercentage too high', () => { - return client.backup - .creator() - .withIncludeClassNames(PIZZA_CLASS_NAME) - .withBackend(BACKEND) - .withBackupId(BACKUP_ID) - .withConfig({ - CPUPercentage: 81, // Max is 80 - }) - .do() - .then(() => { - throw new Error('should fail on create backup'); - }) - .catch((err: Error) => { - expect(err.message).toContain('422'); - expect(err.message).toContain('CPUPercentage'); - }); - }); - - it('fails creating backup with CPUPercentage too low', () => { - return client.backup - .creator() - .withIncludeClassNames(PIZZA_CLASS_NAME) - .withBackend(BACKEND) - .withBackupId(BACKUP_ID) - .withConfig({ - CPUPercentage: -1, - }) - .do() - .then(() => { - throw new Error('should fail on create backup'); - }) - .catch((err: Error) => { - expect(err.message).toContain('422'); - expect(err.message).toContain('CPUPercentage'); - }); - }); - - it('cleans up', () => cleanupTestFood(client)); -}); - -describe('restores backup with valid compression config values', () => { - const BACKEND: Backend = 'filesystem'; - const BACKUP_ID = randomBackupId(); - - const client = weaviate.client({ - scheme: 'http', - host: 'localhost:8080', - }); - - it('sets up', () => createTestFoodSchemaAndData(client)); - - it('asserts data exist', () => assertThatAllPizzasExist(client)); - - it('creates backup', () => { - return client.backup - .creator() - .withIncludeClassNames(PIZZA_CLASS_NAME) - .withBackend(BACKEND) - .withBackupId(BACKUP_ID) - .withWaitForCompletion(true) - .do() - .catch((err: any) => { - throw new Error('should not fail on create backup: ' + err); - }); - }); - - it('removes existing class', () => { - return client.schema - .classDeleter() - .withClassName(PIZZA_CLASS_NAME) - .do() - .catch((err: any) => { - throw new Error('should not fail on class delete: ' + err); - }); - }); - - it('restores backup', () => { - return client.backup - .restorer() - .withIncludeClassNames(PIZZA_CLASS_NAME) - .withBackend(BACKEND) - .withBackupId(BACKUP_ID) - .withWaitForCompletion(true) - .withConfig({ - CPUPercentage: 80, - }) - .do() - .then((restoreResponse: BackupRestoreResponse) => { - expect(restoreResponse.status).toBe('SUCCESS'); - expect(restoreResponse.error).toBeUndefined(); - }) - .catch((err: Error) => { - throw new Error('should not fail on restore backup: ' + err); - }); - }); - - it('asserts data again exist', () => assertThatAllPizzasExist(client)); - - it('checks restore status', () => { - return client.backup - .restoreStatusGetter() - .withBackend(BACKEND) - .withBackupId(BACKUP_ID) - .do() - .then((restoreStatusResponse: BackupRestoreStatusResponse) => { - expect(restoreStatusResponse.status).toBe('SUCCESS'); - expect(restoreStatusResponse.error).toBeUndefined(); - }) - .catch((err: Error) => { - throw new Error('should not fail on restore status: ' + err); - }); - }); - - it('cleans up', () => cleanupTestFood(client)); -}); - -describe('fails restoring backup with invalid compression config', () => { - const BACKEND: Backend = 'filesystem'; - const BACKUP_ID = randomBackupId(); - - const client = weaviate.client({ - scheme: 'http', - host: 'localhost:8080', - }); - - it('sets up', () => createTestFoodSchemaAndData(client)); - - it('asserts data exist', () => assertThatAllPizzasExist(client)); - - it('creates backup', () => { - return client.backup - .creator() - .withIncludeClassNames(PIZZA_CLASS_NAME) - .withBackend(BACKEND) - .withBackupId(BACKUP_ID) - .withWaitForCompletion(true) - .do() - .catch((err: any) => { - throw new Error('should not fail on create backup: ' + err); - }); - }); - - it('removes existing class', () => { - return client.schema - .classDeleter() - .withClassName(PIZZA_CLASS_NAME) - .do() - .catch((err: any) => { - throw new Error('should not fail on class delete: ' + err); - }); - }); - - it('fails restoring backup with too high CPUPercentage', () => { - return client.backup - .restorer() - .withIncludeClassNames(PIZZA_CLASS_NAME) - .withExcludeClassNames(SOUP_CLASS_NAME) - .withBackend(BACKEND) - .withBackupId(BACKUP_ID) - .withConfig({ - CPUPercentage: 81, // Max is 80 - }) - .do() - .then(() => { - throw new Error('should fail on restore'); - }) - .catch((err: Error) => { - expect(err.message).toContain('422'); - expect(err.message).toContain('CPUPercentage'); - }); - }); - - it('fails restoring backup with too low CPUPercentage', () => { - return client.backup - .restorer() - .withIncludeClassNames(PIZZA_CLASS_NAME) - .withExcludeClassNames(SOUP_CLASS_NAME) - .withBackend(BACKEND) - .withBackupId(BACKUP_ID) - .withConfig({ - CPUPercentage: -1, - }) - .do() - .then(() => { - throw new Error('should fail on restore'); - }) - .catch((err: Error) => { - expect(err.message).toContain('422'); - expect(err.message).toContain('CPUPercentage'); - }); - }); - - it('cleans up', () => cleanupTestFood(client)); -}); - -function assertThatAllPizzasExist(client: WeaviateClient) { - return assertThatAllFoodObjectsExist(client, 'Pizza', 4); -} - -function assertThatAllSoupsExist(client: WeaviateClient) { - return assertThatAllFoodObjectsExist(client, 'Soup', 2); -} - -function assertThatAllFoodObjectsExist(client: WeaviateClient, className: string, number: number) { - return client.graphql - .get() - .withClassName(className) - .withFields('name') - .do() - .then((data) => expect(data.data.Get[className].length).toBe(number)) - .catch((err: any) => { - throw new Error(number + ' objects should exist: ' + err); - }); -} - -function randomBackupId() { - return 'backup-id-' + Math.floor(Math.random() * Number.MAX_SAFE_INTEGER); -} diff --git a/test/collections/data/mock.test.ts b/test/collections/data/mock.test.ts deleted file mode 100644 index 11a11aa7..00000000 --- a/test/collections/data/mock.test.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { ServerError, Status } from 'nice-grpc-common'; -import { afterAll, beforeAll, describe, expect, it } from 'vitest'; -import { WeaviateBatchStreamError } from '../../../src/errors.js'; -import weaviate from '../../../src/index.js'; -import { listen, makeGrpcApp, makeRestApp } from '../../mocks'; - -describe('Mock testing of batch streaming when the server errors', () => { - let closeFn: () => Promise; - - const serverErr = new ServerError(Status.INTERNAL, 'Simulated server error'); - const clientErr = new WeaviateBatchStreamError( - '/weaviate.v1.Weaviate/BatchStream INTERNAL: Simulated server error' - ); - - beforeAll(async () => { - const restApp = makeRestApp('1.36.0'); - const grpcApp = makeGrpcApp({ - async *batchStream(request, context) { - yield { started: {} }; - throw serverErr; - }, - }); - const { close } = await listen(restApp, grpcApp, 8976, 'localhost:8977'); - closeFn = close; - }); - - afterAll(() => closeFn()); - - it('should handle server errors in batch streaming', async () => { - const client = await weaviate.connectToLocal({ port: 8976, grpcPort: 8977 }); - const batching = await client.batch.stream(); - - // give time for the server to throw the expected error - await new Promise((resolve) => setTimeout(resolve, 1000)); - - // errors are thrown at the creation of the promise and not as part of the promise rejection - expect(() => batching.addObject({ collection: 'Test Object' })).toThrowError(clientErr); - - // verify that error is still thrown if the promise is awaited instead - // eslint-disable-next-line no-return-await - await expect(async () => await batching.addObject({ collection: 'Test Object' })).rejects.toThrow( - clientErr - ); - - // ensure that error is thrown when stopping the batch too in case users aren't calling .addObject - expect(() => batching.stop()).toThrowError(clientErr); - }); -}); diff --git a/test/collections/defaultVectorIndexType/integration.test.ts b/test/collections/defaultVectorIndexType/integration.test.ts deleted file mode 100644 index 1e7a73ae..00000000 --- a/test/collections/defaultVectorIndexType/integration.test.ts +++ /dev/null @@ -1,92 +0,0 @@ -import { afterAll, beforeAll, describe, expect, it } from 'vitest'; -import weaviate, { WeaviateClient } from '../../../src/index.js'; -import { DbVersion } from '../../../src/utils/dbVersion.js'; - -// ───────────────────────────────────────────────────────────────────────────── -// Suite -// ───────────────────────────────────────────────────────────────────────────── -describe('defaultVectorIndexType', () => { - let client: WeaviateClient; - let serverVersion: DbVersion; - let expectedDefaultIndexType: 'hnsw' | 'hfresh'; - - beforeAll(async () => { - client = await weaviate.connectToLocal(); - const meta = await client.getMeta(); - if (!meta.version) { - throw new Error('Weaviate meta endpoint did not return a version'); - } - serverVersion = DbVersion.fromString(meta.version); - expectedDefaultIndexType = serverVersion.isAtLeast(1, 37, 5) ? 'hfresh' : 'hnsw'; - }, 60_000); - - afterAll(async () => { - await client?.close(); - }); - - // ── Scenario A: no explicit vectorIndexConfig ────────────────────────────── - - it('Scenario A — selfProvided (default vector), no explicit index config', async () => { - const name = `DefaultVectorIndexType_A_Self_${Date.now()}`; - try { - await client.collections.create({ - name, - vectorizers: weaviate.configure.vectors.selfProvided(), - }); - const config = await client.collections.use(name).config.get(); - expect(config.vectorizers.default.indexType).toEqual(expectedDefaultIndexType); - } finally { - await client.collections.delete(name).catch(() => undefined); - } - }); - - it('Scenario A — selfProvided (named vector "main"), no explicit index config', async () => { - const name = `DefaultVectorIndexType_A_Named_${Date.now()}`; - try { - await client.collections.create({ - name, - vectorizers: weaviate.configure.vectors.selfProvided({ name: 'main' }), - }); - const config = await client.collections.use(name).config.get(); - expect(config.vectorizers.main.indexType).toEqual(expectedDefaultIndexType); - } finally { - await client.collections.delete(name).catch(() => undefined); - } - }); - - // ── Scenario B: explicit flat vectorIndexConfig ──────────────────────────── - // Explicit choice must be preserved on every version. - - it('Scenario B — selfProvided (default vector), explicit flat index config', async () => { - const name = `DefaultVectorIndexType_B_Self_${Date.now()}`; - try { - await client.collections.create({ - name, - vectorizers: weaviate.configure.vectors.selfProvided({ - vectorIndexConfig: weaviate.configure.vectorIndex.flat(), - }), - }); - const config = await client.collections.use(name).config.get(); - expect(config.vectorizers.default.indexType).toEqual('flat'); - } finally { - await client.collections.delete(name).catch(() => undefined); - } - }); - - it('Scenario B — selfProvided (named vector "main"), explicit flat index config', async () => { - const name = `DefaultVectorIndexType_B_Named_${Date.now()}`; - try { - await client.collections.create({ - name, - vectorizers: weaviate.configure.vectors.selfProvided({ - name: 'main', - vectorIndexConfig: weaviate.configure.vectorIndex.flat(), - }), - }); - const config = await client.collections.use(name).config.get(); - expect(config.vectorizers.main.indexType).toEqual('flat'); - } finally { - await client.collections.delete(name).catch(() => undefined); - } - }); -}, 120_000); diff --git a/test/collections/tokenization/integration.test.ts b/test/collections/tokenization/integration.test.ts deleted file mode 100644 index 414c9b93..00000000 --- a/test/collections/tokenization/integration.test.ts +++ /dev/null @@ -1,118 +0,0 @@ -/* eslint-disable @typescript-eslint/no-non-null-assertion */ -import { afterAll, beforeAll, expect } from 'vitest'; -import weaviate, { WeaviateClient } from '../../../src/index.js'; -import { requireAtLeast } from '../../version.js'; - -const { describe, it } = requireAtLeast(1, 37, 2); - -describe('Tokenization v1.37: schema config round-trip', () => { - let client: WeaviateClient; - - beforeAll(async () => { - client = await weaviate.connectToLocal(); - }); - - afterAll(async () => { - // Only clean up collections this suite owns; deleteAll() races with - // sibling integration tests that share the same Weaviate instance. - await client.collections.delete('TestTokenizationRoundTrip').catch(() => {}); - await client.collections.delete('TestTokenizationRoundTripErgonomic').catch(() => {}); - await client.close(); - }); - - it('round-trips invertedIndex.stopwordPresets and per-property textAnalyzer through collection.config.get()', async () => { - const collectionName = 'TestTokenizationRoundTrip'; - await client.collections.delete(collectionName).catch(() => {}); - - await client.collections.create({ - name: collectionName, - invertedIndex: { - stopwordPresets: { - fr: ['le', 'la', 'les', 'un', 'une', 'des', 'du', 'de', 'et'], - }, - }, - properties: [ - { - name: 'name_en', - dataType: 'text' as const, - tokenization: 'word' as const, - textAnalyzer: { stopwordPreset: 'en' }, - }, - { - name: 'name_fr', - dataType: 'text' as const, - tokenization: 'word' as const, - textAnalyzer: { stopwordPreset: 'fr' }, - }, - { - name: 'description', - dataType: 'text' as const, - tokenization: 'word' as const, - // Same union shape the tokenize endpoint accepts. - textAnalyzer: { asciiFold: { ignore: ['é'] } }, - }, - ], - vectorizers: weaviate.configure.vectors.selfProvided(), - }); - - // Insert + query end-to-end so the user-facing surface is exercised - // beyond just the schema serializer. - const collection = client.collections.use(collectionName); - await collection.data.insertMany([ - { - name_en: 'The Blue Cup and the Bowl', - name_fr: 'La Tasse Bleue et le Bol', - description: 'Café au lait', - }, - { - name_en: 'A Red Plate with the Saucer', - name_fr: 'Une Assiette Rouge avec la Soucoupe', - description: 'Crème brûlée', - }, - ]); - - const config = await collection.config.get(); - - // Collection-level preset library is round-tripped verbatim - expect(config.invertedIndex.stopwordPresets).toEqual({ - fr: ['le', 'la', 'les', 'un', 'une', 'des', 'du', 'de', 'et'], - }); - - // Per-property textAnalyzer is also round-tripped through PropertyConfig. - // The deserializer translates the wire flat shape (asciiFold + asciiFoldIgnore) - // back into the user-facing union shape (asciiFold: { ignore: [...] }). - const enProp = config.properties.find((p) => p.name === 'name_en')!; - const frProp = config.properties.find((p) => p.name === 'name_fr')!; - const descProp = config.properties.find((p) => p.name === 'description')!; - - expect(enProp.textAnalyzer?.stopwordPreset).toBe('en'); - expect(frProp.textAnalyzer?.stopwordPreset).toBe('fr'); - expect(descProp.textAnalyzer?.asciiFold).toEqual({ ignore: ['é'] }); - }); - - it('round-trips textAnalyzer when configured via the ergonomic asciiFold object form', async () => { - const collectionName = 'TestTokenizationRoundTripErgonomic'; - await client.collections.delete(collectionName).catch(() => {}); - - await client.collections.create({ - name: collectionName, - properties: [ - { - name: 'description', - dataType: 'text' as const, - tokenization: 'word' as const, - // Same shorthand the tokenize endpoint accepts — should produce the - // same wire payload and the same read-back value as the example above. - textAnalyzer: { asciiFold: { ignore: ['é'] } }, - }, - ], - vectorizers: weaviate.configure.vectors.selfProvided(), - }); - - const config = await client.collections.use(collectionName).config.get(); - const descProp = config.properties.find((p) => p.name === 'description')!; - expect(descProp.textAnalyzer?.asciiFold).toEqual({ ignore: ['é'] }); - - await client.collections.delete(collectionName); - }); -}); diff --git a/tools/refresh_protos.sh b/tools/refresh_protos.sh index 4bfb0bbf..d6711fba 100755 --- a/tools/refresh_protos.sh +++ b/tools/refresh_protos.sh @@ -2,19 +2,20 @@ branchOrTag="${1:-main}" dir="tools" +srcDir="./packages/core/src" mkdir -p ${dir} curl -LkSs https://api.github.com/repos/weaviate/weaviate/tarball/${branchOrTag} -o ${dir}/weaviate.tar.gz tar --strip-components=3 -C ${dir} -xvf ${dir}/weaviate.tar.gz $(tar -tf ${dir}/weaviate.tar.gz | grep '^weaviate-weaviate-[^/]\+/grpc/proto/v1') ./node_modules/.bin/grpc_tools_node_protoc -I ${dir} \ - --ts_proto_out=./src/proto \ + --ts_proto_out=${srcDir}/proto \ --ts_proto_opt=forceLong==bigint \ --ts_proto_opt=esModuleInterop=true \ --ts_proto_opt=outputServices=nice-grpc,outputServices=generic-definitions,useExactTypes=false \ ${dir}/v1/*.proto ./node_modules/.bin/grpc_tools_node_protoc -I ${dir} \ - --ts_proto_out=./src/proto/google/health/v1 \ + --ts_proto_out=${srcDir}/proto/google/health/v1 \ --ts_proto_opt=forceLong==bigint \ --ts_proto_opt=esModuleInterop=true \ --ts_proto_opt=outputServices=nice-grpc,outputServices=generic-definitions,useExactTypes=false \ diff --git a/tools/refresh_schema.sh b/tools/refresh_schema.sh index d4f9389b..6c6bca60 100755 --- a/tools/refresh_schema.sh +++ b/tools/refresh_schema.sh @@ -3,5 +3,6 @@ set -euo pipefail branchOrTag="${1:-main}" -npx openapi-typescript https://raw.githubusercontent.com/weaviate/weaviate/${branchOrTag}/openapi-specs/schema.json -o ./src/openapi/schema.ts -npx prettier --write --no-error-on-unmatched-pattern './src/openapi/schema.ts' +srcDir="./packages/core/src" +npx openapi-typescript https://raw.githubusercontent.com/weaviate/weaviate/${branchOrTag}/openapi-specs/schema.json -o ${srcDir}/openapi/schema.ts +npx prettier --write --no-error-on-unmatched-pattern '${srcDir}/openapi/schema.ts' diff --git a/tsconfig.json b/tsconfig.json index cf1078ce..6eb4128d 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,23 +1,30 @@ +// { +// "compilerOptions": { +// "target": "ES6", +// "strict": true, +// "preserveConstEnums": true, +// "alwaysStrict": true, +// "noImplicitAny": true, +// "noImplicitThis": true, +// "strictFunctionTypes": true, +// "module": "NodeNext", +// "moduleResolution": "NodeNext", +// "skipLibCheck": true, +// "forceConsistentCasingInFileNames": true, +// "esModuleInterop": true, +// "declaration": true, +// "rootDir": ".", +// "types": ["node", "jest", "uuid"], +// }, +// "include": ["./**/*"], +// "exclude": ["./**/*.test.ts", "./dist/**/*"] +// } { - "compilerOptions": { - "target": "es2022", - "lib": ["esnext"], - "strict": true, - "preserveConstEnums": true, - "alwaysStrict": true, - "noImplicitAny": true, - "noImplicitThis": true, - "strictFunctionTypes": true, - "module": "node16", - "moduleResolution": "node16", - "skipLibCheck": true, - "forceConsistentCasingInFileNames": true, - "esModuleInterop": true, - "outDir": "./dist/node", - "declaration": true, - "rootDir": "./src", - "types": ["node", "uuid"] - }, - "include": ["./src/**/*"], - "exclude": ["**/*.test.ts"] + "files": [], + "references": [ + { "path": "packages/core" }, + { "path": "packages/node" }, + { "path": "packages/web" }, + { "path": "packages/test" } + ] } \ No newline at end of file