diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index d08a3216b..6e3ec2d83 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -14,7 +14,7 @@ }, "customizations": { "vscode": { - "extensions": ["Orta.vscode-jest", "esbenp.prettier-vscode"], + "extensions": ["esbenp.prettier-vscode"], "settings": { "editor.formatOnSave": true, "editor.defaultFormatter": "esbenp.prettier-vscode" diff --git a/.github/workflows/test-template.yml b/.github/workflows/test-template.yml index 04d14ee1c..9e077ea0c 100644 --- a/.github/workflows/test-template.yml +++ b/.github/workflows/test-template.yml @@ -70,13 +70,13 @@ jobs: run: | brew install docker docker-compose brew install --cask rancher - + TIMEOUT_SECS_CLI_TOOLS=60 TIMEOUT_SECS_USER_SOCKET=300 - + echo "Open Rancher Desktop app" open "/Applications/Rancher Desktop.app" - + echo "Wait max of ${TIMEOUT_SECS_CLI_TOOLS}s for Rancher Desktop to create CLI tools" for i in $(seq 1 ${TIMEOUT_SECS_CLI_TOOLS}); do if [ -e "$HOME/.rd/bin/rdctl" ]; then @@ -85,12 +85,12 @@ jobs: fi sleep 1 done - + if [ ! -e "$HOME/.rd/bin/rdctl" ]; then echo "Rancher Desktop CLI tools not found" exit 1 fi - + echo "Rancher Desktop initialised successfully, now configure the container runtime" $HOME/.rd/bin/rdctl set \ --container-engine.name=moby \ @@ -101,13 +101,13 @@ jobs: --virtual-machine.number-cpus=3 \ --virtual-machine.memory-in-gb=14 \ || true - + echo "Restart Rancher Desktop" $HOME/.rd/bin/rdctl shutdown $HOME/.rd/bin/rdctl start - + echo "Wait max of ${TIMEOUT_SECS_USER_SOCKET}s for Rancher socket" - + for i in $(seq 1 ${TIMEOUT_SECS_USER_SOCKET}); do if [ -e "$HOME/.rd/docker.sock" ]; then echo "Rancher Desktop socket created after ${i}s" @@ -115,14 +115,14 @@ jobs: fi sleep 1 done - + if [ ! -e "$HOME/.rd/docker.sock" ]; then echo "Rancher Desktop socket not found" exit 1 fi - + echo "{}" > $HOME/.docker/config.json - + echo "DOCKER_HOST=unix://${HOME}/.rd/docker.sock" >> $GITHUB_ENV echo "TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE=/var/run/docker.sock" >> $GITHUB_ENV echo "NODE_OPTIONS=--dns-result-order=ipv4first" >> $GITHUB_ENV @@ -139,4 +139,4 @@ jobs: workspace: "${{ inputs.workspace }}" - name: Run tests - run: npm run test:ci -- ${{ steps.npm-install.outputs.workspace_path }} + run: npm run test:ci -- --coverage.include=${{ steps.npm-install.outputs.workspace_path }} ${{ steps.npm-install.outputs.workspace_path }} diff --git a/.prettierrc b/.prettierrc index be3ac7100..29431aa1e 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,3 +1,6 @@ { - "printWidth": 120 + "printWidth": 120, + "plugins": [ + "prettier-plugin-organize-imports" + ] } \ No newline at end of file diff --git a/docs/modules/hivemq.md b/docs/modules/hivemq.md index 644769618..62ce6503e 100644 --- a/docs/modules/hivemq.md +++ b/docs/modules/hivemq.md @@ -1,7 +1,7 @@ # HiveMQ MQTT Module This module allows automatic start up of [HiveMQ's](https://www.hivemq.com/) docker container within -Jest suites, to enable programmatic testing of JavaScript based MQTT client applications. +test suites, to enable programmatic testing of JavaScript based MQTT client applications. ## Install @@ -11,18 +11,20 @@ npm install @testcontainers/hivemq --save-dev ## Resources -* [Community forum](https://community.hivemq.com/) -* [HiveMQ website](https://www.hivemq.com/) -* [MQTT Essentials](https://www.hivemq.com/mqtt-essentials/) -* [MQTT 5 Essentials](https://www.hivemq.com/mqtt-5/) +- [Community forum](https://community.hivemq.com/) +- [HiveMQ website](https://www.hivemq.com/) +- [MQTT Essentials](https://www.hivemq.com/mqtt-essentials/) +- [MQTT 5 Essentials](https://www.hivemq.com/mqtt-5/) Please make sure to check out the hivemq-docs for the [Community Edition](https://github.com/hivemq/hivemq-community-edition/wiki/). !!! Info - We are working to support the HiveMQ Enterprise Edition as outlined in the [Java Test Containers Module](https://java.testcontainers.org/modules/hivemq/). +We are working to support the HiveMQ Enterprise Edition as outlined in the [Java Test Containers Module](https://java.testcontainers.org/modules/hivemq/). ## Examples + [Connect with a mqtt.js client to HiveMQ](../../packages/modules/hivemq/src/hivemq-container.test.ts) inside_block:connect + diff --git a/jest.config.ts b/jest.config.ts deleted file mode 100644 index 3ff1d749e..000000000 --- a/jest.config.ts +++ /dev/null @@ -1,7 +0,0 @@ -import type { Config } from "jest"; - -const config: Config = { - projects: ["/packages/testcontainers/jest.config.ts", "/packages/modules/*/jest.config.ts"], -}; - -export default config; diff --git a/package-lock.json b/package-lock.json index 5f06c2dfb..17eff2db7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,23 +11,23 @@ "packages/modules/*" ], "devDependencies": { - "@types/jest": "^29.5.12", "@typescript-eslint/eslint-plugin": "^5.62.0", "@typescript-eslint/parser": "^5.62.0", + "@vitest/coverage-v8": "^3.0.8", "cross-env": "^7.0.3", "eslint": "^8.57.0", "eslint-config-prettier": "^8.10.0", "eslint-plugin-prettier": "^4.2.1", "husky": "^8.0.3", - "jest": "^29.7.0", "lint-staged": "^13.3.0", "ls-engines": "^0.9.2", "npm-check-updates": "^16.14.20", "prettier": "^2.8.8", + "prettier-plugin-organize-imports": "^4.1.0", "shx": "^0.3.4", - "ts-jest": "^29.2.2", "ts-node": "^10.9.2", - "typescript": "^4.9.5" + "typescript": "^4.9.5", + "vitest": "^3.0.8" }, "engines": { "node": ">= 10.16" @@ -63,13 +63,14 @@ "dev": true }, "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" @@ -1671,839 +1672,675 @@ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true }, - "node_modules/@babel/code-frame": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", - "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", "dev": true, - "dependencies": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" - }, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/code-frame/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, + "license": "MIT", "engines": { - "node": ">=4" + "node": ">=6.9.0" } }, - "node_modules/@babel/code-frame/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/@babel/parser": { + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.9.tgz", + "integrity": "sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "@babel/types": "^7.26.9" + }, + "bin": { + "parser": "bin/babel-parser.js" }, "engines": { - "node": ">=4" + "node": ">=6.0.0" } }, - "node_modules/@babel/code-frame/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/@babel/types": { + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.9.tgz", + "integrity": "sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==", "dev": true, + "license": "MIT", "dependencies": { - "color-name": "1.1.3" + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@babel/code-frame/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "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==" }, - "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "node_modules/@bcoe/v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-1.0.2.tgz", + "integrity": "sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==", "dev": true, + "license": "MIT", "engines": { - "node": ">=0.8.0" + "node": ">=18" } }, - "node_modules/@babel/code-frame/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "node_modules/@bundled-es-modules/cookie": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@bundled-es-modules/cookie/-/cookie-2.0.1.tgz", + "integrity": "sha512-8o+5fRPLNbjbdGRRmJj3h6Hh1AQJf2dk3qQ/5ZFb+PXkRNiSoMGGUKlsgLfrxneb72axVJyIYji64E2+nNfYyw==", "dev": true, - "engines": { - "node": ">=4" + "dependencies": { + "cookie": "^0.7.2" } }, - "node_modules/@babel/code-frame/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/@bundled-es-modules/statuses": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@bundled-es-modules/statuses/-/statuses-1.0.1.tgz", + "integrity": "sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg==", "dev": true, + "license": "ISC", "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" + "statuses": "^2.0.1" } }, - "node_modules/@babel/compat-data": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", - "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", + "node_modules/@bundled-es-modules/tough-cookie": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@bundled-es-modules/tough-cookie/-/tough-cookie-0.1.6.tgz", + "integrity": "sha512-dvMHbL464C0zI+Yqxbz6kZ5TOEp7GLW+pry/RWndAR8MJQAXZ2rPmIs8tziTZjeIyhSNZgZbCePtfSbdWqStJw==", "dev": true, - "engines": { - "node": ">=6.9.0" + "license": "ISC", + "dependencies": { + "@types/tough-cookie": "^4.0.5", + "tough-cookie": "^4.1.4" } }, - "node_modules/@babel/core": { - "version": "7.23.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.7.tgz", - "integrity": "sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==", + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.23.7", - "@babel/parser": "^7.23.6", - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.7", - "@babel/types": "^7.23.6", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, + "optional": true, "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" + "node": ">=0.1.90" } }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "node_modules/@couchbase/couchbase-darwin-arm64-napi": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@couchbase/couchbase-darwin-arm64-napi/-/couchbase-darwin-arm64-napi-4.4.0.tgz", + "integrity": "sha512-TMxmOrNDGdD35wzDfBdAqwy3pawstNpHc/3j8ThjIs6LJTtm6np9HIYQ+ZD3iGjJ41cUZbQ00KjgMaSAftnT5g==", + "cpu": [ + "arm64" + ], "dev": true, - "bin": { - "semver": "bin/semver.js" + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=16" } }, - "node_modules/@babel/generator": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", - "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "node_modules/@couchbase/couchbase-darwin-x64-napi": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@couchbase/couchbase-darwin-x64-napi/-/couchbase-darwin-x64-napi-4.4.0.tgz", + "integrity": "sha512-31PlLJsM9Igzm/cQSsjQcYxqHW97LUgJmn+BGm0y8xhGGdTEwTWRML3CX9ng9DqhzPRtC3O+y9sYiQuPo191vg==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@babel/types": "^7.23.6", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=6.9.0" + "node": ">=16" } }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", - "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "node_modules/@couchbase/couchbase-linux-arm64-napi": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@couchbase/couchbase-linux-arm64-napi/-/couchbase-linux-arm64-napi-4.4.0.tgz", + "integrity": "sha512-9Znsm99pzYpceff/GoDk6USLmI+1XAka99SIkPlGfYRNucMUy10At6lw8kUDsaMbmRDoaLIxKkKEaB6m9Q9e8g==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@babel/compat-data": "^7.23.5", - "@babel/helper-validator-option": "^7.23.5", - "browserslist": "^4.22.2", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.9.0" + "node": ">=16" } }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "node_modules/@couchbase/couchbase-linux-x64-napi": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@couchbase/couchbase-linux-x64-napi/-/couchbase-linux-x64-napi-4.4.0.tgz", + "integrity": "sha512-18Re7fD32hbp09pjd0Yy5x5COwJ853j8HED+MRX3Tu+bWGjtTjFUNK3seVAxwNNYsRm8CTq/XsnV/+vy6BQWnA==", + "cpu": [ + "x64" + ], "dev": true, - "bin": { - "semver": "bin/semver.js" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16" } }, - "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==", + "node_modules/@couchbase/couchbase-linuxmusl-x64-napi": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@couchbase/couchbase-linuxmusl-x64-napi/-/couchbase-linuxmusl-x64-napi-4.4.0.tgz", + "integrity": "sha512-Z5NeSz47opPaHr956vGdqpQd+tjcOp3HZR5WhKxpuI3JfA8KldlHA4KjcHaaX/qGFPhdCDAvJSjy4R1oCypYvQ==", + "cpu": [ + "x64" + ], "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.9.0" + "node": ">=16" } }, - "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==", + "node_modules/@couchbase/couchbase-win32-x64-napi": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@couchbase/couchbase-win32-x64-napi/-/couchbase-win32-x64-napi-4.4.0.tgz", + "integrity": "sha512-eYioamHfAKOP3WiManIud2Hc32XW0nSq9CLa0TpkmsbxgNZYsv8G5TWza0xxtAz1VnQ4l7qW+7xE2jLhnzkbaw==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=6.9.0" + "node": ">=16" } }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "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": { - "@babel/types": "^7.22.5" + "@jridgewell/trace-mapping": "0.3.9" }, "engines": { - "node": ">=6.9.0" + "node": ">=12" } }, - "node_modules/@babel/helper-module-imports": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", - "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "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": { - "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", - "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "node_modules/@elastic/elasticsearch": { + "version": "7.17.14", + "resolved": "https://registry.npmjs.org/@elastic/elasticsearch/-/elasticsearch-7.17.14.tgz", + "integrity": "sha512-6uQ1pVXutwz1Krwooo67W+3K8BwH1ASMh1WoHTpomUzw8EXecXN5lHIJ9EPqTHuv1WqR2LKkSJyagcq0HYUJpg==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.20" + "debug": "^4.3.1", + "hpagent": "^0.1.1", + "ms": "^2.1.3", + "secure-json-parse": "^2.4.0" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "node": ">=12" } }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } + "node_modules/@elastic/elasticsearch/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 }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.1.tgz", + "integrity": "sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==", + "cpu": [ + "ppc64" + ], "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], "engines": { - "node": ">=6.9.0" + "node": ">=18" } }, - "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==", + "node_modules/@esbuild/android-arm": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.1.tgz", + "integrity": "sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==", + "cpu": [ + "arm" + ], "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=6.9.0" + "node": ">=18" } }, - "node_modules/@babel/helper-string-parser": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", - "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "node_modules/@esbuild/android-arm64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.1.tgz", + "integrity": "sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==", + "cpu": [ + "arm64" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=6.9.0" + "node": ">=18" } }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "node_modules/@esbuild/android-x64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.1.tgz", + "integrity": "sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==", + "cpu": [ + "x64" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=6.9.0" + "node": ">=18" } }, - "node_modules/@babel/helper-validator-option": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", - "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.1.tgz", + "integrity": "sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==", + "cpu": [ + "arm64" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=6.9.0" + "node": ">=18" } }, - "node_modules/@babel/helpers": { - "version": "7.23.8", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.8.tgz", - "integrity": "sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.7", - "@babel/types": "^7.23.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", - "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.1.tgz", + "integrity": "sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==", + "cpu": [ + "x64" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=0.8.0" + "node": ">=18" } }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.1.tgz", + "integrity": "sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==", + "cpu": [ + "arm64" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=4" + "node": ">=18" } }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.1.tgz", + "integrity": "sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=4" + "node": ">=18" } }, - "node_modules/@babel/parser": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", - "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", + "node_modules/@esbuild/linux-arm": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.1.tgz", + "integrity": "sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==", + "cpu": [ + "arm" + ], "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=18" } }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", - "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.1.tgz", + "integrity": "sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=18" } }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.1.tgz", + "integrity": "sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==", + "cpu": [ + "ia32" + ], "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=18" } }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz", - "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==", + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.1.tgz", + "integrity": "sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==", + "cpu": [ + "loong64" + ], "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=18" } }, - "node_modules/@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.1.tgz", + "integrity": "sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==", + "cpu": [ + "mips64el" + ], "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" - }, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.9.0" + "node": ">=18" } }, - "node_modules/@babel/traverse": { - "version": "7.23.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.7.tgz", - "integrity": "sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==", + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.1.tgz", + "integrity": "sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==", + "cpu": [ + "ppc64" + ], "dev": true, - "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.6", - "@babel/types": "^7.23.6", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.9.0" + "node": ">=18" } }, - "node_modules/@babel/traverse/node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.1.tgz", + "integrity": "sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==", + "cpu": [ + "riscv64" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=4" + "node": ">=18" } }, - "node_modules/@babel/types": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", - "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.1.tgz", + "integrity": "sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==", + "cpu": [ + "s390x" + ], "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.23.4", - "@babel/helper-validator-identifier": "^7.22.20", - "to-fast-properties": "^2.0.0" - }, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "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==" - }, - "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 - }, - "node_modules/@bundled-es-modules/cookie": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@bundled-es-modules/cookie/-/cookie-2.0.1.tgz", - "integrity": "sha512-8o+5fRPLNbjbdGRRmJj3h6Hh1AQJf2dk3qQ/5ZFb+PXkRNiSoMGGUKlsgLfrxneb72axVJyIYji64E2+nNfYyw==", - "dev": true, - "dependencies": { - "cookie": "^0.7.2" - } - }, - "node_modules/@bundled-es-modules/statuses": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@bundled-es-modules/statuses/-/statuses-1.0.1.tgz", - "integrity": "sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg==", - "dev": true, - "license": "ISC", - "dependencies": { - "statuses": "^2.0.1" - } - }, - "node_modules/@bundled-es-modules/tough-cookie": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@bundled-es-modules/tough-cookie/-/tough-cookie-0.1.6.tgz", - "integrity": "sha512-dvMHbL464C0zI+Yqxbz6kZ5TOEp7GLW+pry/RWndAR8MJQAXZ2rPmIs8tziTZjeIyhSNZgZbCePtfSbdWqStJw==", - "dev": true, - "license": "ISC", - "dependencies": { - "@types/tough-cookie": "^4.0.5", - "tough-cookie": "^4.1.4" + "node": ">=18" } }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "node_modules/@esbuild/linux-x64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.1.tgz", + "integrity": "sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==", + "cpu": [ + "x64" + ], "dev": true, + "license": "MIT", "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=0.1.90" + "node": ">=18" } }, - "node_modules/@couchbase/couchbase-darwin-arm64-napi": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@couchbase/couchbase-darwin-arm64-napi/-/couchbase-darwin-arm64-napi-4.4.0.tgz", - "integrity": "sha512-TMxmOrNDGdD35wzDfBdAqwy3pawstNpHc/3j8ThjIs6LJTtm6np9HIYQ+ZD3iGjJ41cUZbQ00KjgMaSAftnT5g==", + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.1.tgz", + "integrity": "sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ - "darwin" + "netbsd" ], "engines": { - "node": ">=16" + "node": ">=18" } }, - "node_modules/@couchbase/couchbase-darwin-x64-napi": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@couchbase/couchbase-darwin-x64-napi/-/couchbase-darwin-x64-napi-4.4.0.tgz", - "integrity": "sha512-31PlLJsM9Igzm/cQSsjQcYxqHW97LUgJmn+BGm0y8xhGGdTEwTWRML3CX9ng9DqhzPRtC3O+y9sYiQuPo191vg==", + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.1.tgz", + "integrity": "sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ - "darwin" + "netbsd" ], "engines": { - "node": ">=16" + "node": ">=18" } }, - "node_modules/@couchbase/couchbase-linux-arm64-napi": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@couchbase/couchbase-linux-arm64-napi/-/couchbase-linux-arm64-napi-4.4.0.tgz", - "integrity": "sha512-9Znsm99pzYpceff/GoDk6USLmI+1XAka99SIkPlGfYRNucMUy10At6lw8kUDsaMbmRDoaLIxKkKEaB6m9Q9e8g==", + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.1.tgz", + "integrity": "sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ - "linux" + "openbsd" ], "engines": { - "node": ">=16" + "node": ">=18" } }, - "node_modules/@couchbase/couchbase-linux-x64-napi": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@couchbase/couchbase-linux-x64-napi/-/couchbase-linux-x64-napi-4.4.0.tgz", - "integrity": "sha512-18Re7fD32hbp09pjd0Yy5x5COwJ853j8HED+MRX3Tu+bWGjtTjFUNK3seVAxwNNYsRm8CTq/XsnV/+vy6BQWnA==", + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.1.tgz", + "integrity": "sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ - "linux" + "openbsd" ], "engines": { - "node": ">=16" + "node": ">=18" } }, - "node_modules/@couchbase/couchbase-linuxmusl-x64-napi": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@couchbase/couchbase-linuxmusl-x64-napi/-/couchbase-linuxmusl-x64-napi-4.4.0.tgz", - "integrity": "sha512-Z5NeSz47opPaHr956vGdqpQd+tjcOp3HZR5WhKxpuI3JfA8KldlHA4KjcHaaX/qGFPhdCDAvJSjy4R1oCypYvQ==", + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.1.tgz", + "integrity": "sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ - "linux" + "sunos" ], "engines": { - "node": ">=16" + "node": ">=18" } }, - "node_modules/@couchbase/couchbase-win32-x64-napi": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@couchbase/couchbase-win32-x64-napi/-/couchbase-win32-x64-napi-4.4.0.tgz", - "integrity": "sha512-eYioamHfAKOP3WiManIud2Hc32XW0nSq9CLa0TpkmsbxgNZYsv8G5TWza0xxtAz1VnQ4l7qW+7xE2jLhnzkbaw==", + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.1.tgz", + "integrity": "sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==", "cpu": [ - "x64" + "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ], "engines": { - "node": ">=16" + "node": ">=18" } }, - "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==", + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.1.tgz", + "integrity": "sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==", + "cpu": [ + "ia32" + ], "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "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": ">=18" } }, - "node_modules/@elastic/elasticsearch": { - "version": "7.17.14", - "resolved": "https://registry.npmjs.org/@elastic/elasticsearch/-/elasticsearch-7.17.14.tgz", - "integrity": "sha512-6uQ1pVXutwz1Krwooo67W+3K8BwH1ASMh1WoHTpomUzw8EXecXN5lHIJ9EPqTHuv1WqR2LKkSJyagcq0HYUJpg==", + "node_modules/@esbuild/win32-x64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.1.tgz", + "integrity": "sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "debug": "^4.3.1", - "hpagent": "^0.1.1", - "ms": "^2.1.3", - "secure-json-parse": "^2.4.0" - }, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=12" + "node": ">=18" } }, - "node_modules/@elastic/elasticsearch/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 - }, "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", @@ -2977,52 +2814,53 @@ "dev": true }, "node_modules/@inquirer/confirm": { - "version": "3.1.22", - "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-3.1.22.tgz", - "integrity": "sha512-gsAKIOWBm2Q87CDfs9fEo7wJT3fwWIJfnDGMn9Qy74gBnNFOACDNfhUzovubbJjWnKLGBln7/NcSmZwj5DuEXg==", + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.7.tgz", + "integrity": "sha512-Xrfbrw9eSiHb+GsesO8TQIeHSMTP0xyvTCeeYevgZ4sKW+iz9w/47bgfG9b0niQm+xaLY2EWPBINUPldLwvYiw==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^9.0.10", - "@inquirer/type": "^1.5.2" + "@inquirer/core": "^10.1.8", + "@inquirer/type": "^3.0.5" }, "engines": { "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, "node_modules/@inquirer/core": { - "version": "9.0.10", - "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-9.0.10.tgz", - "integrity": "sha512-TdESOKSVwf6+YWDz8GhS6nKscwzkIyakEzCLJ5Vh6O3Co2ClhCJ0A4MG909MUWfaWdpJm7DE45ii51/2Kat9tA==", + "version": "10.1.8", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.1.8.tgz", + "integrity": "sha512-HpAqR8y715zPpM9e/9Q+N88bnGwqqL8ePgZ0SMv/s3673JLMv3bIkoivGmjPqXlEgisUksSXibweQccUwEx4qQ==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/figures": "^1.0.5", - "@inquirer/type": "^1.5.2", - "@types/mute-stream": "^0.0.4", - "@types/node": "^22.1.0", - "@types/wrap-ansi": "^3.0.0", + "@inquirer/figures": "^1.0.11", + "@inquirer/type": "^3.0.5", "ansi-escapes": "^4.3.2", - "cli-spinners": "^2.9.2", "cli-width": "^4.1.0", - "mute-stream": "^1.0.0", + "mute-stream": "^2.0.0", "signal-exit": "^4.1.0", - "strip-ansi": "^6.0.1", "wrap-ansi": "^6.2.0", "yoctocolors-cjs": "^2.1.2" }, "engines": { "node": ">=18" - } - }, - "node_modules/@inquirer/core/node_modules/@types/node": { - "version": "22.3.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.3.0.tgz", - "integrity": "sha512-nrWpWVaDZuaVc5X84xJ0vNrLvomM205oQyLsRt7OHNZbSHslcWsvgFR7O7hire2ZonjLrWBbedmotmIlJDVd6g==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.18.2" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, "node_modules/@inquirer/core/node_modules/emoji-regex": { @@ -3070,13 +2908,6 @@ "node": ">=8" } }, - "node_modules/@inquirer/core/node_modules/undici-types": { - "version": "6.18.2", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.18.2.tgz", - "integrity": "sha512-5ruQbENj95yDYJNS3TvcaxPMshV7aizdv/hWYjGIKoANWKjhWNBsr2YEuYZKodQulB1b8l7ILOuDQep3afowQQ==", - "dev": true, - "license": "MIT" - }, "node_modules/@inquirer/core/node_modules/wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", @@ -3093,9 +2924,9 @@ } }, "node_modules/@inquirer/figures": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.5.tgz", - "integrity": "sha512-79hP/VWdZ2UVc9bFGJnoQ/lQMpL74mGgzSYX1xUqCVk7/v73vJCMw1VuyWN1jGkZ9B3z7THAbySqGbCNefcjfA==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.11.tgz", + "integrity": "sha512-eOg92lvrn/aRUqbxRyvpEWnrvRuTYRifixHkYVpJiygTgVSBIHDqLh0SrMQXkafvULg3ck11V7xvR+zcgvpHFw==", "dev": true, "license": "MIT", "engines": { @@ -3103,16 +2934,21 @@ } }, "node_modules/@inquirer/type": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-1.5.2.tgz", - "integrity": "sha512-w9qFkumYDCNyDZmNQjf/n6qQuvQ4dMC3BJesY4oF+yr0CxR5vxujflAVeIcS6U336uzi9GM0kAfZlLrZ9UTkpA==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.5.tgz", + "integrity": "sha512-ZJpeIYYueOz/i/ONzrfof8g89kNdO2hjGuvULROo3O8rlB2CRtSseE5KeirnyE4t/thAn/EwvS/vuQeJCn+NZg==", "dev": true, "license": "MIT", - "dependencies": { - "mute-stream": "^1.0.0" - }, "engines": { "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, "node_modules/@isaacs/cliui": { @@ -3138,437 +2974,62 @@ "engines": { "node": ">=12" }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@isaacs/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, - "dependencies": { - "minipass": "^7.0.4" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@isaacs/string-locale-compare": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz", - "integrity": "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==", - "dev": true - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "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/load-nyc-config/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "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, - "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, - "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, - "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, - "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, - "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, - "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, - "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, - "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/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, - "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, - "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, - "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" + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "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, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dependencies": { - "@jest/test-result": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "slash": "^3.0.0" + "ansi-regex": "^6.0.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/@jest/transform": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", - "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "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, "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" + "minipass": "^7.0.4" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=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==", + "node_modules/@isaacs/string-locale-compare": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz", + "integrity": "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==", + "dev": true + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, - "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" - }, + "license": "MIT", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" @@ -3584,25 +3045,28 @@ } }, "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true, + "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", - "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -3629,6 +3093,7 @@ "resolved": "https://registry.npmjs.org/@jsep-plugin/assignment/-/assignment-1.3.0.tgz", "integrity": "sha512-VVgV+CXrhbMI3aSusQyclHkenWSAm95WaiKrMxRFam3JSUiIaQjoMIw2sEs/OX4XifnqeQUN4DYbJjlA8EfktQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10.16.0" }, @@ -3641,6 +3106,7 @@ "resolved": "https://registry.npmjs.org/@jsep-plugin/regex/-/regex-1.0.4.tgz", "integrity": "sha512-q7qL4Mgjs1vByCaTnDFcBnV9HS7GVPJX5vyVoCgZHNSC9rjwIlmbXG5sUuorR5ndfHAIlJ8pVStxvjXHbNvtUg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10.16.0" }, @@ -3649,10 +3115,11 @@ } }, "node_modules/@kubernetes/client-node": { - "version": "1.0.0-rc7", - "resolved": "https://registry.npmjs.org/@kubernetes/client-node/-/client-node-1.0.0-rc7.tgz", - "integrity": "sha512-s0U74yQ/nTq13xk3YI8P2y02pUm9TritjhsCIbtPYbOrG/5ti2bY2WhxxQWGx1LhiTZPEdoULtsyXI2XrIESJw==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@kubernetes/client-node/-/client-node-1.0.0.tgz", + "integrity": "sha512-a8NSvFDSHKFZ0sR1hbPSf8IDFNJwctEU5RodSCNiq/moRXWmrdmqhb1RRQzF+l+TSBaDgHw3YsYNxxE92STBzw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@types/js-yaml": "^4.0.1", "@types/node": "^22.0.0", @@ -3663,15 +3130,14 @@ "form-data": "^4.0.0", "isomorphic-ws": "^5.0.0", "js-yaml": "^4.1.0", - "jsonpath-plus": "^10.0.0", + "jsonpath-plus": "^10.2.0", "node-fetch": "^2.6.9", - "openid-client": "^5.6.5", + "openid-client": "^6.1.3", "rfc4648": "^1.3.0", "stream-buffers": "^3.0.2", "tar": "^7.0.0", "tmp-promise": "^3.0.2", "tslib": "^2.5.0", - "url-parse": "^1.4.3", "ws": "^8.18.0" } }, @@ -3864,6 +3330,24 @@ "sparse-bitfield": "^3.0.3" } }, + "node_modules/@mswjs/interceptors": { + "version": "0.37.5", + "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.37.5.tgz", + "integrity": "sha512-AAwRb5vXFcY4L+FvZ7LZusDuZ0vEe0Zm8ohn1FM6/X7A3bj4mqmkAcGRWuvC2JwSygNwHAAmMnAI73vPHeqsHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@open-draft/deferred-promise": "^2.2.0", + "@open-draft/logger": "^0.3.0", + "@open-draft/until": "^2.0.0", + "is-node-process": "^1.2.0", + "outvariant": "^1.4.3", + "strict-event-emitter": "^0.5.1" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -4565,6 +4049,272 @@ "@redis/client": "^1.0.0" } }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.35.0.tgz", + "integrity": "sha512-uYQ2WfPaqz5QtVgMxfN6NpLD+no0MYHDBywl7itPYd3K5TjjSghNKmX8ic9S8NU8w81NVhJv/XojcHptRly7qQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.35.0.tgz", + "integrity": "sha512-FtKddj9XZudurLhdJnBl9fl6BwCJ3ky8riCXjEw3/UIbjmIY58ppWwPEvU3fNu+W7FUsAsB1CdH+7EQE6CXAPA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.35.0.tgz", + "integrity": "sha512-Uk+GjOJR6CY844/q6r5DR/6lkPFOw0hjfOIzVx22THJXMxktXG6CbejseJFznU8vHcEBLpiXKY3/6xc+cBm65Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.35.0.tgz", + "integrity": "sha512-3IrHjfAS6Vkp+5bISNQnPogRAW5GAV1n+bNCrDwXmfMHbPl5EhTmWtfmwlJxFRUCBZ+tZ/OxDyU08aF6NI/N5Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.35.0.tgz", + "integrity": "sha512-sxjoD/6F9cDLSELuLNnY0fOrM9WA0KrM0vWm57XhrIMf5FGiN8D0l7fn+bpUeBSU7dCgPV2oX4zHAsAXyHFGcQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.35.0.tgz", + "integrity": "sha512-2mpHCeRuD1u/2kruUiHSsnjWtHjqVbzhBkNVQ1aVD63CcexKVcQGwJ2g5VphOd84GvxfSvnnlEyBtQCE5hxVVw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.35.0.tgz", + "integrity": "sha512-mrA0v3QMy6ZSvEuLs0dMxcO2LnaCONs1Z73GUDBHWbY8tFFocM6yl7YyMu7rz4zS81NDSqhrUuolyZXGi8TEqg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.35.0.tgz", + "integrity": "sha512-DnYhhzcvTAKNexIql8pFajr0PiDGrIsBYPRvCKlA5ixSS3uwo/CWNZxB09jhIapEIg945KOzcYEAGGSmTSpk7A==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.35.0.tgz", + "integrity": "sha512-uagpnH2M2g2b5iLsCTZ35CL1FgyuzzJQ8L9VtlJ+FckBXroTwNOaD0z0/UF+k5K3aNQjbm8LIVpxykUOQt1m/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.35.0.tgz", + "integrity": "sha512-XQxVOCd6VJeHQA/7YcqyV0/88N6ysSVzRjJ9I9UA/xXpEsjvAgDTgH3wQYz5bmr7SPtVK2TsP2fQ2N9L4ukoUg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.35.0.tgz", + "integrity": "sha512-5pMT5PzfgwcXEwOaSrqVsz/LvjDZt+vQ8RT/70yhPU06PTuq8WaHhfT1LW+cdD7mW6i/J5/XIkX/1tCAkh1W6g==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.35.0.tgz", + "integrity": "sha512-c+zkcvbhbXF98f4CtEIP1EBA/lCic5xB0lToneZYvMeKu5Kamq3O8gqrxiYYLzlZH6E3Aq+TSW86E4ay8iD8EA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.35.0.tgz", + "integrity": "sha512-s91fuAHdOwH/Tad2tzTtPX7UZyytHIRR6V4+2IGlV0Cej5rkG0R61SX4l4y9sh0JBibMiploZx3oHKPnQBKe4g==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.35.0.tgz", + "integrity": "sha512-hQRkPQPLYJZYGP+Hj4fR9dDBMIM7zrzJDWFEMPdTnTy95Ljnv0/4w/ixFw3pTBMEuuEuoqtBINYND4M7ujcuQw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.35.0.tgz", + "integrity": "sha512-Pim1T8rXOri+0HmV4CdKSGrqcBWX0d1HoPnQ0uw0bdp1aP5SdQVNBy8LjYncvnLgu3fnnCt17xjWGd4cqh8/hA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.35.0.tgz", + "integrity": "sha512-QysqXzYiDvQWfUiTm8XmJNO2zm9yC9P/2Gkrwg2dH9cxotQzunBHYr6jk4SujCTqnfGxduOmQcI7c2ryuW8XVg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.35.0.tgz", + "integrity": "sha512-OUOlGqPkVJCdJETKOCEf1mw848ZyJ5w50/rZ/3IBQVdLfR5jk/6Sr5m3iO2tdPgwo0x7VcncYuOvMhBWZq8ayg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.35.0.tgz", + "integrity": "sha512-2/lsgejMrtwQe44glq7AFFHLfJBPafpsTa6JvP2NGef/ifOa4KBoglVf7AKN7EV9o32evBPRqfg96fEHzWo5kw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.35.0.tgz", + "integrity": "sha512-PIQeY5XDkrOysbQblSW7v3l1MDZzkTEzAfTPkj5VAu3FW8fS4ynyLg2sINp0fp3SjZ8xkRYpLqoKcYqAkhU1dw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@sevinf/maybe": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/@sevinf/maybe/-/maybe-0.5.0.tgz", @@ -4689,40 +4439,16 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "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 - }, "node_modules/@sindresorhus/is": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==", "dev": true, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/@sinonjs/commons": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", - "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", - "dev": true, - "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, - "dependencies": { - "@sinonjs/commons": "^3.0.0" + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" } }, "node_modules/@smithy/abort-controller": { @@ -5975,47 +5701,6 @@ "integrity": "sha512-HlZ6Dcr205BmNhwkdXqrg2vkFMN2PluI7Lgr8In3B3wE5PiQHhjRqtW/lGdVU9gw+sM0JcIDx2AN+cW8oSWIcw==", "dev": true }, - "node_modules/@types/babel__core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", - "dev": true, - "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.8", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", - "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz", - "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.20.7" - } - }, "node_modules/@types/body-parser": { "version": "1.19.5", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", @@ -6101,6 +5786,13 @@ "@types/ssh2": "*" } }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/express": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", @@ -6138,15 +5830,6 @@ "dev": true, "license": "MIT" }, - "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, - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/http-cache-semantics": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", @@ -6159,40 +5842,6 @@ "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", "dev": true }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "dev": true - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/jest": { - "version": "29.5.12", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.12.tgz", - "integrity": "sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==", - "dev": true, - "dependencies": { - "expect": "^29.0.0", - "pretty-format": "^29.0.0" - } - }, "node_modules/@types/js-yaml": { "version": "4.0.9", "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.9.tgz", @@ -6250,16 +5899,6 @@ "tarn": "^3.0.1" } }, - "node_modules/@types/mute-stream": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@types/mute-stream/-/mute-stream-0.0.4.tgz", - "integrity": "sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/node": { "version": "20.10.8", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.8.tgz", @@ -6434,12 +6073,6 @@ "undici-types": "~5.26.4" } }, - "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 - }, "node_modules/@types/statuses": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/@types/statuses/-/statuses-2.0.5.tgz", @@ -6544,13 +6177,6 @@ "@types/webidl-conversions": "*" } }, - "node_modules/@types/wrap-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz", - "integrity": "sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/ws": { "version": "8.5.10", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", @@ -6560,21 +6186,6 @@ "@types/node": "*" } }, - "node_modules/@types/yargs": { - "version": "17.0.32", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", - "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "dev": true - }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "5.62.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", @@ -6769,6 +6380,150 @@ "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", "dev": true }, + "node_modules/@vitest/coverage-v8": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-3.0.8.tgz", + "integrity": "sha512-y7SAKsQirsEJ2F8bulBck4DoluhI2EEgTimHd6EEUgJBGKy9tC25cpywh1MH4FvDGoG2Unt7+asVd1kj4qOSAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.3.0", + "@bcoe/v8-coverage": "^1.0.2", + "debug": "^4.4.0", + "istanbul-lib-coverage": "^3.2.2", + "istanbul-lib-report": "^3.0.1", + "istanbul-lib-source-maps": "^5.0.6", + "istanbul-reports": "^3.1.7", + "magic-string": "^0.30.17", + "magicast": "^0.3.5", + "std-env": "^3.8.0", + "test-exclude": "^7.0.1", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@vitest/browser": "3.0.8", + "vitest": "3.0.8" + }, + "peerDependenciesMeta": { + "@vitest/browser": { + "optional": true + } + } + }, + "node_modules/@vitest/coverage-v8/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@vitest/coverage-v8/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/@vitest/expect": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.0.8.tgz", + "integrity": "sha512-Xu6TTIavTvSSS6LZaA3EebWFr6tsoXPetOWNMOlc7LO88QVVBwq2oQWBoDiLCN6YTvNYsGSjqOO8CAdjom5DCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "3.0.8", + "@vitest/utils": "3.0.8", + "chai": "^5.2.0", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/pretty-format": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.0.8.tgz", + "integrity": "sha512-BNqwbEyitFhzYMYHUVbIvepOyeQOSFA/NeJMIP9enMntkkxLgOcgABH6fjyXG85ipTgvero6noreavGIqfJcIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.0.8.tgz", + "integrity": "sha512-c7UUw6gEcOzI8fih+uaAXS5DwjlBaCJUo7KJ4VvJcjL95+DSR1kova2hFuRt3w41KZEFcOEiq098KkyrjXeM5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "3.0.8", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.0.8.tgz", + "integrity": "sha512-x8IlMGSEMugakInj44nUrLSILh/zy1f2/BgH0UeHpNyOocG18M9CWVIFBaXPt8TrqVZWmcPjwfG/ht5tnpba8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "3.0.8", + "magic-string": "^0.30.17", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.0.8.tgz", + "integrity": "sha512-MR+PzJa+22vFKYb934CejhR4BeRpMSoxkvNoDit68GQxRLSf11aT6CTj3XaqUU9rxgWJFnqicN/wxw6yBRkI1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyspy": "^3.0.2" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.0.8.tgz", + "integrity": "sha512-nkBC3aEhfX2PdtQI/QwAWp8qZWwzASsU4Npbcd5RdMPBSSLCpkZp52P3xku3s3uA0HIEhGvEcF8rNkBsz9dQ4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "3.0.8", + "loupe": "^3.1.3", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, "node_modules/@zxing/text-encoding": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/@zxing/text-encoding/-/text-encoding-0.9.0.tgz", @@ -6970,6 +6725,7 @@ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.21.3" }, @@ -6985,6 +6741,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -7014,19 +6771,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "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, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/aproba": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", @@ -7378,6 +7122,16 @@ "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", @@ -7451,9 +7205,10 @@ } }, "node_modules/axios": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.4.tgz", - "integrity": "sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.2.tgz", + "integrity": "sha512-ls4GYBm5aig9vWx8AWDSGLpnpDQRtWAfrjU+EuytuODrFBkqesN2RkOQCBzrA1RQNHw1SmRMSDDDSwzNAYQ6Rg==", + "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", @@ -7465,122 +7220,6 @@ "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz", "integrity": "sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==" }, - "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, - "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", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "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-istanbul/node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dev": true, - "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/babel-plugin-istanbul/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/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, - "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", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "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, - "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", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -7816,68 +7455,15 @@ "fill-range": "^7.1.1" }, "engines": { - "node": ">=8" - } - }, - "node_modules/browser-or-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/browser-or-node/-/browser-or-node-2.1.1.tgz", - "integrity": "sha512-8CVjaLJGuSKMVTxJ2DpBl5XnlNDiT4cQFeuCJJrvJmts9YrTZDizTX7PjC2s6W4x+MBGZeEY6dGMrF04/6Hgqg==", - "dev": true, - "license": "MIT" - }, - "node_modules/browserslist": { - "version": "4.22.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", - "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", - "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" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001565", - "electron-to-chromium": "^1.4.601", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bs-logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", - "dev": true, - "dependencies": { - "fast-json-stable-stringify": "2.x" - }, - "engines": { - "node": ">= 6" + "node": ">=8" } }, - "node_modules/bser": { + "node_modules/browser-or-node": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "resolved": "https://registry.npmjs.org/browser-or-node/-/browser-or-node-2.1.1.tgz", + "integrity": "sha512-8CVjaLJGuSKMVTxJ2DpBl5XnlNDiT4cQFeuCJJrvJmts9YrTZDizTX7PjC2s6W4x+MBGZeEY6dGMrF04/6Hgqg==", "dev": true, - "dependencies": { - "node-int64": "^0.4.0" - } + "license": "MIT" }, "node_modules/bson": { "version": "5.5.1", @@ -7977,6 +7563,16 @@ "node": ">=0.10.0" } }, + "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, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/cacache": { "version": "17.1.4", "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", @@ -8141,35 +7737,6 @@ "node": ">=6" } }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001576", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001576.tgz", - "integrity": "sha512-ff5BdakGe2P3SQsMsiqmt1Lc8221NR1VzHj5jXN5vBny9A6fpze94HiVV/n7XRosOlsShJcvMv5mdnpjOGCEgg==", - "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" - } - ] - }, "node_modules/cassandra-driver": { "version": "4.7.2", "resolved": "https://registry.npmjs.org/cassandra-driver/-/cassandra-driver-4.7.2.tgz", @@ -8195,6 +7762,23 @@ "long": "*" } }, + "node_modules/chai": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.2.0.tgz", + "integrity": "sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==", + "dev": true, + "license": "MIT", + "dependencies": { + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -8211,13 +7795,14 @@ "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==", + "node_modules/check-error": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", + "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", "dev": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">= 16" } }, "node_modules/chownr": { @@ -8244,12 +7829,6 @@ "node": ">=8" } }, - "node_modules/cjs-module-lexer": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", - "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", - "dev": true - }, "node_modules/clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -8286,19 +7865,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cli-spinners": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", - "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/cli-table3": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", @@ -8550,22 +8116,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "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, - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", - "dev": true - }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -8788,12 +8338,6 @@ "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", "dev": true }, - "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 - }, "node_modules/cookie": { "version": "0.7.2", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", @@ -8912,27 +8456,6 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "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, - "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", @@ -9145,18 +8668,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/dedent": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", - "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", + "node_modules/deep-eql": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", "dev": true, - "peerDependencies": { - "babel-plugin-macros": "^3.1.0" - }, - "peerDependenciesMeta": { - "babel-plugin-macros": { - "optional": true - } + "license": "MIT", + "engines": { + "node": ">=6" } }, "node_modules/deep-extend": { @@ -9174,15 +8693,6 @@ "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, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/defer-to-connect": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", @@ -9258,15 +8768,6 @@ "node": ">=0.10" } }, - "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, - "engines": { - "node": ">=8" - } - }, "node_modules/dezalgo": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", @@ -9286,15 +8787,6 @@ "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, - "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", @@ -9450,39 +8942,6 @@ "safe-buffer": "^5.0.1" } }, - "node_modules/ejs": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", - "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", - "dev": true, - "dependencies": { - "jake": "^10.8.5" - }, - "bin": { - "ejs": "bin/cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.4.627", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.627.tgz", - "integrity": "sha512-BPFdHKPzyGxYQpgiCoIGnkzlMlps3bRdnjeh3qd/Q2pSacL0YW81i4llqsTY/wNbN/Ztw++7HNfp8v4Rm8VDuA==", - "dev": true - }, - "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, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, "node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", @@ -9521,15 +8980,6 @@ "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", "dev": true }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, "node_modules/es-abstract": { "version": "1.23.3", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", @@ -9657,6 +9107,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-module-lexer": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz", + "integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==", + "dev": true, + "license": "MIT" + }, "node_modules/es-object-atoms": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", @@ -9752,6 +9209,47 @@ "node": ">=0.12" } }, + "node_modules/esbuild": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.1.tgz", + "integrity": "sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.1", + "@esbuild/android-arm": "0.25.1", + "@esbuild/android-arm64": "0.25.1", + "@esbuild/android-x64": "0.25.1", + "@esbuild/darwin-arm64": "0.25.1", + "@esbuild/darwin-x64": "0.25.1", + "@esbuild/freebsd-arm64": "0.25.1", + "@esbuild/freebsd-x64": "0.25.1", + "@esbuild/linux-arm": "0.25.1", + "@esbuild/linux-arm64": "0.25.1", + "@esbuild/linux-ia32": "0.25.1", + "@esbuild/linux-loong64": "0.25.1", + "@esbuild/linux-mips64el": "0.25.1", + "@esbuild/linux-ppc64": "0.25.1", + "@esbuild/linux-riscv64": "0.25.1", + "@esbuild/linux-s390x": "0.25.1", + "@esbuild/linux-x64": "0.25.1", + "@esbuild/netbsd-arm64": "0.25.1", + "@esbuild/netbsd-x64": "0.25.1", + "@esbuild/openbsd-arm64": "0.25.1", + "@esbuild/openbsd-x64": "0.25.1", + "@esbuild/sunos-x64": "0.25.1", + "@esbuild/win32-arm64": "0.25.1", + "@esbuild/win32-ia32": "0.25.1", + "@esbuild/win32-x64": "0.25.1" + } + }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -9956,19 +9454,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "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", @@ -10020,6 +9505,16 @@ "node": ">=4.0" } }, + "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/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -10062,52 +9557,14 @@ "node": ">=0.8.x" } }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "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==", + "node_modules/expect-type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.2.0.tgz", + "integrity": "sha512-80F22aiJ3GLyVnS/B3HzgR6RelZVumzj9jkL0Rhz4h0xYbNW9PjlQz5h3J/SShErbXBc295vseR4/MIbVmUbeA==", "dev": true, - "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" - }, + "license": "Apache-2.0", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=12.0.0" } }, "node_modules/exponential-backoff": { @@ -10272,15 +9729,6 @@ "node": ">=0.8.0" } }, - "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, - "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", @@ -10310,36 +9758,6 @@ "url": "https://github.com/sindresorhus/file-type?sponsor=1" } }, - "node_modules/filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", - "dev": true, - "dependencies": { - "minimatch": "^5.0.1" - } - }, - "node_modules/filelist/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -10578,6 +9996,7 @@ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -10760,15 +10179,6 @@ "node": ">= 4" } }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -11619,15 +11029,6 @@ "node": ">= 0.4" } }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, "node_modules/get-port": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", @@ -12199,7 +11600,8 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/http-cache-semantics": { "version": "4.1.1", @@ -12253,15 +11655,6 @@ "node": ">= 6" } }, - "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, - "engines": { - "node": ">=10.17.0" - } - }, "node_modules/humanize-ms": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", @@ -12393,25 +11786,6 @@ "node": ">=8" } }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "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", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -12552,12 +11926,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "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 - }, "node_modules/is-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", @@ -12689,19 +12057,10 @@ } }, "node_modules/is-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", - "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==", - "dev": true - }, - "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, - "engines": { - "node": ">=6" - } + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", + "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==", + "dev": true }, "node_modules/is-generator-function": { "version": "1.1.0", @@ -13021,31 +12380,17 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=8" } }, - "node_modules/istanbul-lib-instrument": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz", - "integrity": "sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==", - "dev": true, - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=10" - } - }, "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", @@ -13056,24 +12401,26 @@ } }, "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==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", + "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { + "@jridgewell/trace-mapping": "^0.3.23", "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" + "istanbul-lib-coverage": "^3.0.0" }, "engines": { "node": ">=10" } }, "node_modules/istanbul-reports": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", - "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" @@ -13097,602 +12444,29 @@ "integrity": "sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ==", "dev": true, "dependencies": { - "es-get-iterator": "^1.0.2", - "iterate-iterator": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/jackspeak": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", - "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", - "dev": true, - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/jake": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.1.tgz", - "integrity": "sha512-61btcOHNnLnsOdtLgA5efqQWjnSi/vow5HbI7HMdKKWqvrKR1bLK3BPlJn9gcSaP2ewuamUSMB5XEy76KUIS2w==", - "dev": true, - "dependencies": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.4", - "minimatch": "^3.1.2" - }, - "bin": { - "jake": "bin/cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "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, - "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, - "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, - "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, - "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, - "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, - "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, - "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, - "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, - "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, - "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, - "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, - "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, - "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, - "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, - "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, - "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, - "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, - "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, - "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, - "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, - "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, - "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-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, - "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, - "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, - "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, - "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, - "dependencies": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" + "es-get-iterator": "^1.0.2", + "iterate-iterator": "^1.0.1" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "@isaacs/cliui": "^8.0.2" }, "engines": { - "node": ">=10" + "node": ">=14" }, "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, "node_modules/jju": { @@ -13726,12 +12500,6 @@ "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 - }, "node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -13761,22 +12529,11 @@ "resolved": "https://registry.npmjs.org/jsep/-/jsep-1.4.0.tgz", "integrity": "sha512-B7qPcEVE3NVkmSJbaYxvv4cHkVW7DQsZz13pUMrfS8z8Q/BuShN+gcTXrUlPiGqM2/t/EEaI030bpxMqY8gMlw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10.16.0" } }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/json-bigint": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", @@ -13911,14 +12668,15 @@ ] }, "node_modules/jsonpath-plus": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-10.1.0.tgz", - "integrity": "sha512-gHfV1IYqH8uJHYVTs8BJX1XKy2/rR93+f8QQi0xhx95aCiXn1ettYAd5T+7FU6wfqyDoX/wy0pm/fL3jOKJ9Lg==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-10.3.0.tgz", + "integrity": "sha512-8TNmfeTCk2Le33A3vRRwtuworG/L5RrgMvdjhKZxvyShO+mBu2fP50OWUjRLNtvw344DdDarFh9buFAZs5ujeA==", "dev": true, + "license": "MIT", "dependencies": { - "@jsep-plugin/assignment": "^1.2.1", - "@jsep-plugin/regex": "^1.0.3", - "jsep": "^1.3.9" + "@jsep-plugin/assignment": "^1.3.0", + "@jsep-plugin/regex": "^1.0.4", + "jsep": "^1.4.0" }, "bin": { "jsonpath": "bin/jsonpath-cli.js", @@ -14096,15 +12854,6 @@ "json-buffer": "3.0.1" } }, - "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, - "engines": { - "node": ">=6" - } - }, "node_modules/latest-version": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-7.0.0.tgz", @@ -14163,15 +12912,6 @@ "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, - "engines": { - "node": ">=6" - } - }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -14209,12 +12949,6 @@ "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==", "dev": true }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, "node_modules/lint-staged": { "version": "13.3.0", "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-13.3.0.tgz", @@ -14364,6 +13098,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/lint-staged/node_modules/yaml": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", + "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 14" + } + }, "node_modules/listr2": { "version": "6.6.1", "resolved": "https://registry.npmjs.org/listr2/-/listr2-6.6.1.tgz", @@ -14469,12 +13213,6 @@ "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", "dev": true }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true - }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -14579,6 +13317,13 @@ "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==", "dev": true }, + "node_modules/loupe": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.3.tgz", + "integrity": "sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==", + "dev": true, + "license": "MIT" + }, "node_modules/lowercase-keys": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", @@ -14591,15 +13336,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "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, - "dependencies": { - "yallist": "^3.0.2" - } - }, "node_modules/lru-memoizer": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/lru-memoizer/-/lru-memoizer-2.2.0.tgz", @@ -14658,11 +13394,34 @@ "npm": ">=8" } }, + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/magicast": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz", + "integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.25.4", + "@babel/types": "^7.25.4", + "source-map-js": "^1.2.0" + } + }, "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" }, @@ -14863,15 +13622,6 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "dependencies": { - "tmpl": "1.0.5" - } - }, "node_modules/mariadb": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/mariadb/-/mariadb-3.4.0.tgz", @@ -15370,10 +14120,11 @@ } }, "node_modules/mongoose": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-7.8.3.tgz", - "integrity": "sha512-eFnbkKgyVrICoHB6tVJ4uLanS7d5AIo/xHkEbQeOv6g2sD7gh/1biRwvFifsmbtkIddQVNr3ROqHik6gkknN3g==", + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-7.8.6.tgz", + "integrity": "sha512-1oVPRHvcmPVwk/zeSTEzayzQEVeYQM1D5zrkLsttfNNB7pPRUmkKeFu6gpbvyEswOuZLrWJjqB8kSTY+k2AZOA==", "dev": true, + "license": "MIT", "dependencies": { "bson": "^5.5.0", "kareem": "2.5.1", @@ -15547,29 +14298,30 @@ } }, "node_modules/msw": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/msw/-/msw-2.3.5.tgz", - "integrity": "sha512-+GUI4gX5YC5Bv33epBrD+BGdmDvBg2XGruiWnI3GbIbRmMMBeZ5gs3mJ51OWSGHgJKztZ8AtZeYMMNMVrje2/Q==", + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/msw/-/msw-2.7.3.tgz", + "integrity": "sha512-+mycXv8l2fEAjFZ5sjrtjJDmm2ceKGjrNbBr1durRg6VkU9fNUE/gsmQ51hWbHqs+l35W1iM+ZsmOD9Fd6lspw==", "dev": true, "hasInstallScript": true, "license": "MIT", "dependencies": { - "@bundled-es-modules/cookie": "^2.0.0", + "@bundled-es-modules/cookie": "^2.0.1", "@bundled-es-modules/statuses": "^1.0.1", "@bundled-es-modules/tough-cookie": "^0.1.6", - "@inquirer/confirm": "^3.0.0", - "@mswjs/interceptors": "^0.29.0", + "@inquirer/confirm": "^5.0.0", + "@mswjs/interceptors": "^0.37.0", + "@open-draft/deferred-promise": "^2.2.0", "@open-draft/until": "^2.1.0", "@types/cookie": "^0.6.0", "@types/statuses": "^2.0.4", - "chalk": "^4.1.2", "graphql": "^16.8.1", "headers-polyfill": "^4.0.2", "is-node-process": "^1.2.0", - "outvariant": "^1.4.2", - "path-to-regexp": "^6.2.0", + "outvariant": "^1.4.3", + "path-to-regexp": "^6.3.0", + "picocolors": "^1.1.1", "strict-event-emitter": "^0.5.1", - "type-fest": "^4.9.0", + "type-fest": "^4.26.1", "yargs": "^17.7.2" }, "bin": { @@ -15582,7 +14334,7 @@ "url": "https://github.com/sponsors/mswjs" }, "peerDependencies": { - "typescript": ">= 4.7.x" + "typescript": ">= 4.8.x" }, "peerDependenciesMeta": { "typescript": { @@ -15590,28 +14342,10 @@ } } }, - "node_modules/msw/node_modules/@mswjs/interceptors": { - "version": "0.29.1", - "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.29.1.tgz", - "integrity": "sha512-3rDakgJZ77+RiQUuSK69t1F0m8BQKA8Vh5DCS5V0DWvNY67zob2JhhQrhCO0AKLGINTRSFd1tBaHcJTkhefoSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@open-draft/deferred-promise": "^2.2.0", - "@open-draft/logger": "^0.3.0", - "@open-draft/until": "^2.0.0", - "is-node-process": "^1.2.0", - "outvariant": "^1.2.1", - "strict-event-emitter": "^0.5.1" - }, - "engines": { - "node": ">=18" - } - }, "node_modules/msw/node_modules/type-fest": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.24.0.tgz", - "integrity": "sha512-spAaHzc6qre0TlZQQ2aA/nGMe+2Z/wyGk5Z+Ru2VUfdNwT6kWO6TjevOlpebsATEG1EIQ2sOiDszud3lO5mt/Q==", + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.37.0.tgz", + "integrity": "sha512-S/5/0kFftkq27FPNye0XM1e2NsnoD/3FS+pBmbjmmtLT6I+i344KoOf7pvXreaFsDamWeaJX55nczA1m5PsBDg==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -15644,13 +14378,13 @@ } }, "node_modules/mute-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", - "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", + "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", "dev": true, "license": "ISC", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/mysql2": { @@ -15708,6 +14442,25 @@ "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==", "optional": true }, + "node_modules/nanoid": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.9.tgz", + "integrity": "sha512-SppoicMGpZvbF1l3z4x7No3OlIjP7QJvC9XR7AhZr1kL133KHnKPztkKDc+Ir4aJ/1VhTySrtKhrsycmrMQfvg==", + "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/native-duplexpair": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/native-duplexpair/-/native-duplexpair-1.0.0.tgz", @@ -16029,18 +14782,6 @@ "node": ">=8" } }, - "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 - }, - "node_modules/node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", - "dev": true - }, "node_modules/node.extend": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/node.extend/-/node.extend-2.0.3.tgz", @@ -16531,18 +15272,6 @@ "node": ">=16 || 14 >=14.17" } }, - "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, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/npmlog": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-7.0.1.tgz", @@ -16569,6 +15298,16 @@ "js-sdsl": "4.3.0" } }, + "node_modules/oauth4webapi": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/oauth4webapi/-/oauth4webapi-3.3.1.tgz", + "integrity": "sha512-ZwX7UqYrP3Lr+Glhca3a1/nF2jqf7VVyJfhGuW5JtrfDUxt0u+IoBPzFjZ2dd7PJGkdM6CFPVVYzuDYKHv101A==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, "node_modules/object-hash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", @@ -16673,15 +15412,6 @@ "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", "dev": true }, - "node_modules/oidc-token-hash": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/oidc-token-hash/-/oidc-token-hash-5.0.3.tgz", - "integrity": "sha512-IF4PcGgzAr6XXSff26Sk/+P4KZFJVuHAJZj3wgO3vX2bMdNVp/QXTP3P7CEm9V1IdG8lDLY3HhiqpsE/nOwpPw==", - "dev": true, - "engines": { - "node": "^10.13.0 || >=12.0.0" - } - }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -16723,47 +15453,29 @@ } }, "node_modules/openid-client": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-5.7.0.tgz", - "integrity": "sha512-4GCCGZt1i2kTHpwvaC/sCpTpQqDnBzDzuJcJMbH+y1Q5qI8U8RBvoSh28svarXszZHR5BAMXbJPX1PGPRE3VOA==", + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-6.3.3.tgz", + "integrity": "sha512-lTK8AV8SjqCM4qznLX0asVESAwzV39XTVdfMAM185ekuaZCnkWdPzcxMTXNlsm9tsUAMa1Q30MBmKAykdT1LWw==", "dev": true, + "license": "MIT", "dependencies": { - "jose": "^4.15.9", - "lru-cache": "^6.0.0", - "object-hash": "^2.2.0", - "oidc-token-hash": "^5.0.3" + "jose": "^6.0.6", + "oauth4webapi": "^3.3.0" }, "funding": { "url": "https://github.com/sponsors/panva" } }, - "node_modules/openid-client/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/openid-client/node_modules/object-hash": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", - "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", + "node_modules/openid-client/node_modules/jose": { + "version": "6.0.9", + "resolved": "https://registry.npmjs.org/jose/-/jose-6.0.9.tgz", + "integrity": "sha512-6HEy/G3IBiGwOeT0phvu19yt/zagFKSpQPpQ6YUIiCxBUPfThVkOv9wlwHGkatUqbHvkWHYPtJJil4U5jHwllw==", "dev": true, - "engines": { - "node": ">= 6" + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" } }, - "node_modules/openid-client/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/optionator": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", @@ -16852,15 +15564,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/package-json": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/package-json/-/package-json-8.1.1.tgz", @@ -16975,30 +15678,6 @@ "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==", "dev": true }, - "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, - "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/parse-json/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 - }, "node_modules/path-browserify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", @@ -17072,6 +15751,23 @@ "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/pathval": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", + "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.16" + } + }, "node_modules/peek-readable": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-4.1.0.tgz", @@ -17250,106 +15946,34 @@ } }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "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.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "dev": true, - "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, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } + "license": "ISC" }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, "engines": { - "node": ">=6" + "node": ">=8.6" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "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, - "dependencies": { - "p-limit": "^2.2.0" + "bin": { + "pidtree": "bin/pidtree.js" }, "engines": { - "node": ">=8" + "node": ">=0.10" } }, "node_modules/pop-iterate": { @@ -17368,6 +15992,35 @@ "node": ">= 0.4" } }, + "node_modules/postcss": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", + "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "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.8", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, "node_modules/postcss-selector-parser": { "version": "6.0.15", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz", @@ -17462,30 +16115,21 @@ "node": ">=6.0.0" } }, - "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, - "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==", + "node_modules/prettier-plugin-organize-imports": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/prettier-plugin-organize-imports/-/prettier-plugin-organize-imports-4.1.0.tgz", + "integrity": "sha512-5aWRdCgv645xaa58X8lOxzZoiHAldAPChljr/MT0crXVOWTZ+Svl4hIWlz+niYSlO6ikE5UXkN1JrRvIP2ut0A==", "dev": true, - "engines": { - "node": ">=10" + "license": "MIT", + "peerDependencies": { + "prettier": ">=2.0", + "typescript": ">=2.9", + "vue-tsc": "^2.1.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "peerDependenciesMeta": { + "vue-tsc": { + "optional": true + } } }, "node_modules/proc-log": { @@ -17616,19 +16260,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "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, - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/prompts-ncu": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/prompts-ncu/-/prompts-ncu-3.0.0.tgz", @@ -17769,22 +16400,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pure-rand": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", - "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ] - }, "node_modules/q": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/q/-/q-2.0.3.tgz", @@ -17917,12 +16532,6 @@ "node": ">=0.10.0" } }, - "node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, "node_modules/read-cmd-shim": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz", @@ -18212,27 +16821,6 @@ "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", "dev": true }, - "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, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-cwd/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -18242,15 +16830,6 @@ "node": ">=4" } }, - "node_modules/resolve.exports": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/responselike": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", @@ -18341,6 +16920,45 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/rollup": { + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.35.0.tgz", + "integrity": "sha512-kg6oI4g+vc41vePJyO6dHt/yl0Rz3Thv0kJeVQ3D1kS3E5XSuKbPc29G4IpT/Kv1KQwgHVcN+HtyS+HYLNSvQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.6" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.35.0", + "@rollup/rollup-android-arm64": "4.35.0", + "@rollup/rollup-darwin-arm64": "4.35.0", + "@rollup/rollup-darwin-x64": "4.35.0", + "@rollup/rollup-freebsd-arm64": "4.35.0", + "@rollup/rollup-freebsd-x64": "4.35.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.35.0", + "@rollup/rollup-linux-arm-musleabihf": "4.35.0", + "@rollup/rollup-linux-arm64-gnu": "4.35.0", + "@rollup/rollup-linux-arm64-musl": "4.35.0", + "@rollup/rollup-linux-loongarch64-gnu": "4.35.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.35.0", + "@rollup/rollup-linux-riscv64-gnu": "4.35.0", + "@rollup/rollup-linux-s390x-gnu": "4.35.0", + "@rollup/rollup-linux-x64-gnu": "4.35.0", + "@rollup/rollup-linux-x64-musl": "4.35.0", + "@rollup/rollup-win32-arm64-msvc": "4.35.0", + "@rollup/rollup-win32-ia32-msvc": "4.35.0", + "@rollup/rollup-win32-x64-msvc": "4.35.0", + "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", @@ -18701,6 +17319,13 @@ "integrity": "sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ==", "dev": true }, + "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", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", @@ -18884,14 +17509,14 @@ "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==", + "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, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" } }, "node_modules/sparse-bitfield": { @@ -18980,12 +17605,6 @@ "readable-stream": "^3.0.0" } }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, "node_modules/sqlstring": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz", @@ -19042,26 +17661,12 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.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, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/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==", + "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, - "engines": { - "node": ">=8" - } + "license": "MIT" }, "node_modules/statuses": { "version": "2.0.1", @@ -19073,6 +17678,13 @@ "node": ">= 0.8" } }, + "node_modules/std-env": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.8.1.tgz", + "integrity": "sha512-vj5lIj3Mwf9D79hBkltk5qmkFI+biIKWS2IBxEyEU3AX1tUf7AoL8nSazCOiiqQsGKIq01SClsKEzweu34uwvA==", + "dev": true, + "license": "MIT" + }, "node_modules/stop-iteration-iterator": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", @@ -19176,19 +17788,6 @@ "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, - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", @@ -19329,24 +17928,6 @@ "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, - "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, - "engines": { - "node": ">=6" - } - }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -19727,36 +18308,144 @@ } }, "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.1.tgz", + "integrity": "sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==", "dev": true, + "license": "ISC", "dependencies": { "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" + "glob": "^10.4.1", + "minimatch": "^9.0.4" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/test-exclude/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/test-exclude/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "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/test-exclude/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/test-exclude/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/testcontainers": { + "resolved": "packages/testcontainers", + "link": true + }, + "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/through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "dependencies": { + "readable-stream": "3" + } + }, + "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/tinypool": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.2.tgz", + "integrity": "sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": "^18.0.0 || >=20.0.0" } }, - "node_modules/testcontainers": { - "resolved": "packages/testcontainers", - "link": true - }, - "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/tinyrainbow": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", + "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } }, - "node_modules/through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "node_modules/tinyspy": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz", + "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==", "dev": true, - "dependencies": { - "readable-stream": "3" + "license": "MIT", + "engines": { + "node": ">=14.0.0" } }, "node_modules/tmp": { @@ -19776,21 +18465,6 @@ "tmp": "^0.2.0" } }, - "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 - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -19876,54 +18550,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/ts-jest": { - "version": "29.2.4", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.4.tgz", - "integrity": "sha512-3d6tgDyhCI29HlpwIq87sNuI+3Q6GLTTCeYRHCs7vDz+/3GCMwEtV9jezLyl4ZtnBgx00I7hm8PCP8cTksMGrw==", - "dev": true, - "dependencies": { - "bs-logger": "0.x", - "ejs": "^3.1.10", - "fast-json-stable-stringify": "2.x", - "jest-util": "^29.0.0", - "json5": "^2.2.3", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "^7.5.3", - "yargs-parser": "^21.0.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", - "@jest/types": "^29.0.0", - "babel-jest": "^29.0.0", - "jest": "^29.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 - } - } - }, "node_modules/ts-node": { "version": "10.9.2", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", @@ -20097,15 +18723,6 @@ "node": ">= 0.8.0" } }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -20320,36 +18937,6 @@ "node": ">=8" } }, - "node_modules/update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", - "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" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, "node_modules/update-notifier": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-6.0.2.tgz", @@ -20462,20 +19049,6 @@ "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", "dev": true }, - "node_modules/v8-to-istanbul": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", - "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", - "dev": true, - "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/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -20498,21 +19071,254 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/vite": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.1.tgz", + "integrity": "sha512-n2GnqDb6XPhlt9B8olZPrgMD/es/Nd1RdChF6CBD/fHW6pUyUTt2sQW2fPRX5GiD9XEa6+8A6A4f2vT6pSsE7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "postcss": "^8.5.3", + "rollup": "^4.30.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "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": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.0.8.tgz", + "integrity": "sha512-6PhR4H9VGlcwXZ+KWCdMqbtG649xCPZqfI9j2PsK1FcXgEzro5bGHcVKFCTqPLaNKZES8Evqv4LwvZARsq5qlg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.4.0", + "es-module-lexer": "^1.6.0", + "pathe": "^2.0.3", + "vite": "^5.0.0 || ^6.0.0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vite-node/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/vite-node/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/vitest": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.0.8.tgz", + "integrity": "sha512-dfqAsNqRGUc8hB9OVR2P0w8PZPEckti2+5rdZip0WIz9WW0MnImJ8XiR61QhqLa92EQzKP2uPkzenKOAHyEIbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/expect": "3.0.8", + "@vitest/mocker": "3.0.8", + "@vitest/pretty-format": "^3.0.8", + "@vitest/runner": "3.0.8", + "@vitest/snapshot": "3.0.8", + "@vitest/spy": "3.0.8", + "@vitest/utils": "3.0.8", + "chai": "^5.2.0", + "debug": "^4.4.0", + "expect-type": "^1.1.0", + "magic-string": "^0.30.17", + "pathe": "^2.0.3", + "std-env": "^3.8.0", + "tinybench": "^2.9.0", + "tinyexec": "^0.3.2", + "tinypool": "^1.0.2", + "tinyrainbow": "^2.0.0", + "vite": "^5.0.0 || ^6.0.0", + "vite-node": "3.0.8", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@types/debug": "^4.1.12", + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "@vitest/browser": "3.0.8", + "@vitest/ui": "3.0.8", + "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 + } + } + }, + "node_modules/vitest/node_modules/@vitest/mocker": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.0.8.tgz", + "integrity": "sha512-n3LjS7fcW1BCoF+zWZxG7/5XvuYH+lsFg+BDwwAz0arIwHQJFUEsKBQ0BLU49fCxuM/2HSeBPHQD8WjgrxMfow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "3.0.8", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.17" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^5.0.0 || ^6.0.0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/vitest/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/vitest/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/walk-up-path": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-3.0.1.tgz", "integrity": "sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA==", "dev": true }, - "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, - "dependencies": { - "makeerror": "1.0.12" - } - }, "node_modules/weak-map": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/weak-map/-/weak-map-1.0.8.tgz", @@ -20693,6 +19499,23 @@ "url": "https://github.com/sponsors/ljharb" } }, + "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/wide-align": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", @@ -20968,16 +19791,14 @@ "node": ">=0.10.32" } }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, "node_modules/yaml": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", - "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz", + "integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==", + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, "engines": { "node": ">= 14" } diff --git a/package.json b/package.json index c30082b7f..a81c8683b 100755 --- a/package.json +++ b/package.json @@ -8,8 +8,8 @@ "scripts": { "pre-commit": "lint-staged", "docs:serve": "docker-compose up", - "test": "cross-env DEBUG=testcontainers* jest", - "test:ci": "npm run test -- --runInBand --coverage", + "test": "cross-env NODE_ENV=test DEBUG=testcontainers* vitest run", + "test:ci": "npm run test -- --coverage", "format": "prettier --write package.json \"packages/**/*.ts\"", "lint": "eslint --fix package.json \"packages/**/*.ts\"", "lint:ci": "eslint package.json \"${WORKSPACE_PATH}/**/*.ts\" --max-warnings=0", @@ -17,23 +17,23 @@ "validate-engine": "ls-engines" }, "devDependencies": { - "@types/jest": "^29.5.12", "@typescript-eslint/eslint-plugin": "^5.62.0", "@typescript-eslint/parser": "^5.62.0", + "@vitest/coverage-v8": "^3.0.8", "cross-env": "^7.0.3", "eslint": "^8.57.0", "eslint-config-prettier": "^8.10.0", "eslint-plugin-prettier": "^4.2.1", "husky": "^8.0.3", - "jest": "^29.7.0", "lint-staged": "^13.3.0", "ls-engines": "^0.9.2", "npm-check-updates": "^16.14.20", "prettier": "^2.8.8", + "prettier-plugin-organize-imports": "^4.1.0", "shx": "^0.3.4", - "ts-jest": "^29.2.2", "ts-node": "^10.9.2", - "typescript": "^4.9.5" + "typescript": "^4.9.5", + "vitest": "^3.0.8" }, "lint-staged": { "packages/**/*.ts": [ diff --git a/packages/modules/arangodb/jest.config.ts b/packages/modules/arangodb/jest.config.ts deleted file mode 100644 index 1f677baaf..000000000 --- a/packages/modules/arangodb/jest.config.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { Config } from "jest"; -import * as path from "path"; - -const config: Config = { - preset: "ts-jest", - moduleNameMapper: { - "^testcontainers$": path.resolve(__dirname, "../../testcontainers/src"), - }, -}; - -export default config; diff --git a/packages/modules/arangodb/src/arangodb-container.test.ts b/packages/modules/arangodb/src/arangodb-container.test.ts index 5548bd57d..0fa0319ed 100755 --- a/packages/modules/arangodb/src/arangodb-container.test.ts +++ b/packages/modules/arangodb/src/arangodb-container.test.ts @@ -1,9 +1,7 @@ import { Database } from "arangojs"; import { ArangoDBContainer } from "./arangodb-container"; -describe("ArangoDB", () => { - jest.setTimeout(180_000); - +describe("ArangoDB", { timeout: 180_000 }, () => { // connect { it("should connect and return a query result", async () => { const container = await new ArangoDBContainer().start(); diff --git a/packages/modules/arangodb/tsconfig.build.json b/packages/modules/arangodb/tsconfig.build.json index 0222f6ff1..ff7390b10 100644 --- a/packages/modules/arangodb/tsconfig.build.json +++ b/packages/modules/arangodb/tsconfig.build.json @@ -2,7 +2,6 @@ "extends": "./tsconfig.json", "exclude": [ "build", - "jest.config.ts", "src/**/*.test.ts" ], "references": [ diff --git a/packages/modules/arangodb/tsconfig.json b/packages/modules/arangodb/tsconfig.json index 39b165817..4d74c3e41 100644 --- a/packages/modules/arangodb/tsconfig.json +++ b/packages/modules/arangodb/tsconfig.json @@ -10,8 +10,7 @@ } }, "exclude": [ - "build", - "jest.config.ts" + "build" ], "references": [ { diff --git a/packages/modules/azurite/jest.config.ts b/packages/modules/azurite/jest.config.ts deleted file mode 100644 index 1f677baaf..000000000 --- a/packages/modules/azurite/jest.config.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { Config } from "jest"; -import * as path from "path"; - -const config: Config = { - preset: "ts-jest", - moduleNameMapper: { - "^testcontainers$": path.resolve(__dirname, "../../testcontainers/src"), - }, -}; - -export default config; diff --git a/packages/modules/azurite/src/azurite-container.test.ts b/packages/modules/azurite/src/azurite-container.test.ts index 1d118a536..4e2771e8d 100644 --- a/packages/modules/azurite/src/azurite-container.test.ts +++ b/packages/modules/azurite/src/azurite-container.test.ts @@ -1,11 +1,9 @@ +import { TableClient, TableEntity } from "@azure/data-tables"; import { BlobServiceClient, StorageSharedKeyCredential } from "@azure/storage-blob"; import { QueueServiceClient } from "@azure/storage-queue"; -import { TableClient, TableEntity } from "@azure/data-tables"; import { AzuriteContainer } from "./azurite-container"; -describe("Azurite", () => { - jest.setTimeout(240_000); - +describe("Azurite", { timeout: 240_000 }, () => { // uploadAndDownloadBlob { it("should upload and download blob with default credentials", async () => { const container = await new AzuriteContainer().start(); diff --git a/packages/modules/azurite/tsconfig.build.json b/packages/modules/azurite/tsconfig.build.json index 0222f6ff1..ff7390b10 100644 --- a/packages/modules/azurite/tsconfig.build.json +++ b/packages/modules/azurite/tsconfig.build.json @@ -2,7 +2,6 @@ "extends": "./tsconfig.json", "exclude": [ "build", - "jest.config.ts", "src/**/*.test.ts" ], "references": [ diff --git a/packages/modules/azurite/tsconfig.json b/packages/modules/azurite/tsconfig.json index 39b165817..4d74c3e41 100644 --- a/packages/modules/azurite/tsconfig.json +++ b/packages/modules/azurite/tsconfig.json @@ -10,8 +10,7 @@ } }, "exclude": [ - "build", - "jest.config.ts" + "build" ], "references": [ { diff --git a/packages/modules/cassandra/jest.config.ts b/packages/modules/cassandra/jest.config.ts deleted file mode 100644 index 1f677baaf..000000000 --- a/packages/modules/cassandra/jest.config.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { Config } from "jest"; -import * as path from "path"; - -const config: Config = { - preset: "ts-jest", - moduleNameMapper: { - "^testcontainers$": path.resolve(__dirname, "../../testcontainers/src"), - }, -}; - -export default config; diff --git a/packages/modules/cassandra/src/cassandra-container.test.ts b/packages/modules/cassandra/src/cassandra-container.test.ts index 93fe0da2b..d58f79ae4 100644 --- a/packages/modules/cassandra/src/cassandra-container.test.ts +++ b/packages/modules/cassandra/src/cassandra-container.test.ts @@ -1,9 +1,7 @@ import { Client } from "cassandra-driver"; import { CassandraContainer } from "./cassandra-container"; -describe("Cassandra", () => { - jest.setTimeout(240_000); - +describe("Cassandra", { timeout: 240_000 }, () => { // connectWithDefaultCredentials { it("should connect and execute a query with default credentials", async () => { const container = await new CassandraContainer("cassandra:5.0.2").start(); diff --git a/packages/modules/cassandra/tsconfig.build.json b/packages/modules/cassandra/tsconfig.build.json index 0222f6ff1..ff7390b10 100644 --- a/packages/modules/cassandra/tsconfig.build.json +++ b/packages/modules/cassandra/tsconfig.build.json @@ -2,7 +2,6 @@ "extends": "./tsconfig.json", "exclude": [ "build", - "jest.config.ts", "src/**/*.test.ts" ], "references": [ diff --git a/packages/modules/cassandra/tsconfig.json b/packages/modules/cassandra/tsconfig.json index 39b165817..4d74c3e41 100644 --- a/packages/modules/cassandra/tsconfig.json +++ b/packages/modules/cassandra/tsconfig.json @@ -10,8 +10,7 @@ } }, "exclude": [ - "build", - "jest.config.ts" + "build" ], "references": [ { diff --git a/packages/modules/chromadb/jest.config.ts b/packages/modules/chromadb/jest.config.ts deleted file mode 100644 index 1f677baaf..000000000 --- a/packages/modules/chromadb/jest.config.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { Config } from "jest"; -import * as path from "path"; - -const config: Config = { - preset: "ts-jest", - moduleNameMapper: { - "^testcontainers$": path.resolve(__dirname, "../../testcontainers/src"), - }, -}; - -export default config; diff --git a/packages/modules/chromadb/src/chromadb-container.test.ts b/packages/modules/chromadb/src/chromadb-container.test.ts index 7368ded4b..a23f1200d 100755 --- a/packages/modules/chromadb/src/chromadb-container.test.ts +++ b/packages/modules/chromadb/src/chromadb-container.test.ts @@ -1,9 +1,7 @@ -import { ChromaClient, AdminClient } from "chromadb"; +import { AdminClient, ChromaClient } from "chromadb"; import { ChromaDBContainer } from "./chromadb-container"; -describe("ChromaDB", () => { - jest.setTimeout(360_000); - +describe("ChromaDB", { timeout: 360_000 }, () => { // docs { it("should connect and return a query result", async () => { const container = await new ChromaDBContainer().start(); diff --git a/packages/modules/chromadb/tsconfig.build.json b/packages/modules/chromadb/tsconfig.build.json index b8f2e60e6..e9236a57d 100644 --- a/packages/modules/chromadb/tsconfig.build.json +++ b/packages/modules/chromadb/tsconfig.build.json @@ -2,7 +2,6 @@ "extends": "./tsconfig.json", "exclude": [ "build", - "jest.config.ts", "src/**/*.test.ts" ], "references": [ diff --git a/packages/modules/chromadb/tsconfig.json b/packages/modules/chromadb/tsconfig.json index 5b04a1a44..0e863cb02 100644 --- a/packages/modules/chromadb/tsconfig.json +++ b/packages/modules/chromadb/tsconfig.json @@ -10,8 +10,7 @@ } }, "exclude": [ - "build", - "jest.config.ts" + "build" ], "references": [ { diff --git a/packages/modules/cockroachdb/jest.config.ts b/packages/modules/cockroachdb/jest.config.ts deleted file mode 100644 index 1f677baaf..000000000 --- a/packages/modules/cockroachdb/jest.config.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { Config } from "jest"; -import * as path from "path"; - -const config: Config = { - preset: "ts-jest", - moduleNameMapper: { - "^testcontainers$": path.resolve(__dirname, "../../testcontainers/src"), - }, -}; - -export default config; diff --git a/packages/modules/cockroachdb/src/cockroachdb-container.test.ts b/packages/modules/cockroachdb/src/cockroachdb-container.test.ts index 1b0d7fff2..1573dbf07 100644 --- a/packages/modules/cockroachdb/src/cockroachdb-container.test.ts +++ b/packages/modules/cockroachdb/src/cockroachdb-container.test.ts @@ -1,9 +1,7 @@ import { Client } from "pg"; import { CockroachDbContainer } from "./cockroachdb-container"; -describe("CockroachDbContainer", () => { - jest.setTimeout(180_000); - +describe("CockroachDbContainer", { timeout: 180_000 }, () => { // connect { it("should connect and return a query result", async () => { const container = await new CockroachDbContainer().start(); diff --git a/packages/modules/cockroachdb/tsconfig.build.json b/packages/modules/cockroachdb/tsconfig.build.json index 0222f6ff1..ff7390b10 100644 --- a/packages/modules/cockroachdb/tsconfig.build.json +++ b/packages/modules/cockroachdb/tsconfig.build.json @@ -2,7 +2,6 @@ "extends": "./tsconfig.json", "exclude": [ "build", - "jest.config.ts", "src/**/*.test.ts" ], "references": [ diff --git a/packages/modules/cockroachdb/tsconfig.json b/packages/modules/cockroachdb/tsconfig.json index 39b165817..4d74c3e41 100644 --- a/packages/modules/cockroachdb/tsconfig.json +++ b/packages/modules/cockroachdb/tsconfig.json @@ -10,8 +10,7 @@ } }, "exclude": [ - "build", - "jest.config.ts" + "build" ], "references": [ { diff --git a/packages/modules/couchbase/jest.config.ts b/packages/modules/couchbase/jest.config.ts deleted file mode 100644 index 1f677baaf..000000000 --- a/packages/modules/couchbase/jest.config.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { Config } from "jest"; -import * as path from "path"; - -const config: Config = { - preset: "ts-jest", - moduleNameMapper: { - "^testcontainers$": path.resolve(__dirname, "../../testcontainers/src"), - }, -}; - -export default config; diff --git a/packages/modules/couchbase/src/couchbase-container.test.ts b/packages/modules/couchbase/src/couchbase-container.test.ts index d375a2cf8..c2ccaed8d 100644 --- a/packages/modules/couchbase/src/couchbase-container.test.ts +++ b/packages/modules/couchbase/src/couchbase-container.test.ts @@ -4,9 +4,7 @@ import { BucketDefinition } from "./bucket-definition"; import { CouchbaseContainer, StartedCouchbaseContainer } from "./couchbase-container"; import { CouchbaseService } from "./couchbase-service"; -describe("CouchbaseContainer", () => { - jest.setTimeout(180_000); - +describe("CouchbaseContainer", { timeout: 180_000 }, () => { // upsertAndGet { const upsertAndGet = async ( bucket: Bucket, diff --git a/packages/modules/couchbase/src/couchbase-container.ts b/packages/modules/couchbase/src/couchbase-container.ts index 8f6e049ab..76ae5c877 100644 --- a/packages/modules/couchbase/src/couchbase-container.ts +++ b/packages/modules/couchbase/src/couchbase-container.ts @@ -1,18 +1,19 @@ import { AbstractStartedContainer, + BoundPorts, + ContainerRuntimeClient, GenericContainer, + getContainerRuntimeClient, InspectResult, + IntervalRetry, log, StartedTestContainer, Wait, + WaitStrategy, } from "testcontainers"; -import { WaitStrategy } from "testcontainers/src/wait-strategies/wait-strategy"; -import { BoundPorts } from "testcontainers/src/utils/bound-ports"; -import { ContainerRuntimeClient, getContainerRuntimeClient } from "testcontainers/src/container-runtime"; -import { CouchbaseService } from "./couchbase-service"; import { BucketDefinition } from "./bucket-definition"; +import { CouchbaseService } from "./couchbase-service"; import PORTS from "./ports"; -import { IntervalRetry } from "testcontainers/src/common"; export class CouchbaseContainer extends GenericContainer { private static readonly DEFAULT_IMAGE_NAME = "couchbase/server"; diff --git a/packages/modules/couchbase/tsconfig.build.json b/packages/modules/couchbase/tsconfig.build.json index b8f2e60e6..e9236a57d 100644 --- a/packages/modules/couchbase/tsconfig.build.json +++ b/packages/modules/couchbase/tsconfig.build.json @@ -2,7 +2,6 @@ "extends": "./tsconfig.json", "exclude": [ "build", - "jest.config.ts", "src/**/*.test.ts" ], "references": [ diff --git a/packages/modules/couchbase/tsconfig.json b/packages/modules/couchbase/tsconfig.json index 5b04a1a44..0e863cb02 100644 --- a/packages/modules/couchbase/tsconfig.json +++ b/packages/modules/couchbase/tsconfig.json @@ -10,8 +10,7 @@ } }, "exclude": [ - "build", - "jest.config.ts" + "build" ], "references": [ { diff --git a/packages/modules/elasticsearch/jest.config.ts b/packages/modules/elasticsearch/jest.config.ts deleted file mode 100644 index 1f677baaf..000000000 --- a/packages/modules/elasticsearch/jest.config.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { Config } from "jest"; -import * as path from "path"; - -const config: Config = { - preset: "ts-jest", - moduleNameMapper: { - "^testcontainers$": path.resolve(__dirname, "../../testcontainers/src"), - }, -}; - -export default config; diff --git a/packages/modules/elasticsearch/src/elasticsearch-container.test.ts b/packages/modules/elasticsearch/src/elasticsearch-container.test.ts index 8f13491d9..281959727 100644 --- a/packages/modules/elasticsearch/src/elasticsearch-container.test.ts +++ b/packages/modules/elasticsearch/src/elasticsearch-container.test.ts @@ -1,9 +1,7 @@ -import { ElasticsearchContainer } from "./elasticsearch-container"; import { Client } from "@elastic/elasticsearch"; +import { ElasticsearchContainer } from "./elasticsearch-container"; -describe("ElasticsearchContainer", () => { - jest.setTimeout(180_000); - +describe("ElasticsearchContainer", { timeout: 180_000 }, () => { // createIndex { it("should create an index", async () => { const container = await new ElasticsearchContainer().start(); diff --git a/packages/modules/elasticsearch/tsconfig.build.json b/packages/modules/elasticsearch/tsconfig.build.json index 0222f6ff1..ff7390b10 100644 --- a/packages/modules/elasticsearch/tsconfig.build.json +++ b/packages/modules/elasticsearch/tsconfig.build.json @@ -2,7 +2,6 @@ "extends": "./tsconfig.json", "exclude": [ "build", - "jest.config.ts", "src/**/*.test.ts" ], "references": [ diff --git a/packages/modules/elasticsearch/tsconfig.json b/packages/modules/elasticsearch/tsconfig.json index 39b165817..4d74c3e41 100644 --- a/packages/modules/elasticsearch/tsconfig.json +++ b/packages/modules/elasticsearch/tsconfig.json @@ -10,8 +10,7 @@ } }, "exclude": [ - "build", - "jest.config.ts" + "build" ], "references": [ { diff --git a/packages/modules/eventstoredb/jest.config.ts b/packages/modules/eventstoredb/jest.config.ts deleted file mode 100644 index 1f677baaf..000000000 --- a/packages/modules/eventstoredb/jest.config.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { Config } from "jest"; -import * as path from "path"; - -const config: Config = { - preset: "ts-jest", - moduleNameMapper: { - "^testcontainers$": path.resolve(__dirname, "../../testcontainers/src"), - }, -}; - -export default config; diff --git a/packages/modules/eventstoredb/src/eventstoredb-container.test.ts b/packages/modules/eventstoredb/src/eventstoredb-container.test.ts index b5a7c6242..bcbf4c221 100644 --- a/packages/modules/eventstoredb/src/eventstoredb-container.test.ts +++ b/packages/modules/eventstoredb/src/eventstoredb-container.test.ts @@ -1,9 +1,7 @@ import { EventStoreDBClient, StreamingRead, StreamSubscription } from "@eventstore/db-client"; import { EventStoreDBContainer } from "./eventstoredb-container"; -describe("EventStoreDBContainer", () => { - jest.setTimeout(240_000); - +describe("EventStoreDBContainer", { timeout: 240_000 }, () => { // startContainer { it("should execute write and read", async () => { const container = await new EventStoreDBContainer().start(); diff --git a/packages/modules/eventstoredb/src/index.ts b/packages/modules/eventstoredb/src/index.ts index a47095f16..99a672b14 100644 --- a/packages/modules/eventstoredb/src/index.ts +++ b/packages/modules/eventstoredb/src/index.ts @@ -1 +1 @@ -export { StartedEventStoreDBContainer, EventStoreDBContainer } from "./eventstoredb-container"; +export { EventStoreDBContainer, StartedEventStoreDBContainer } from "./eventstoredb-container"; diff --git a/packages/modules/eventstoredb/tsconfig.build.json b/packages/modules/eventstoredb/tsconfig.build.json index 0222f6ff1..ff7390b10 100644 --- a/packages/modules/eventstoredb/tsconfig.build.json +++ b/packages/modules/eventstoredb/tsconfig.build.json @@ -2,7 +2,6 @@ "extends": "./tsconfig.json", "exclude": [ "build", - "jest.config.ts", "src/**/*.test.ts" ], "references": [ diff --git a/packages/modules/eventstoredb/tsconfig.json b/packages/modules/eventstoredb/tsconfig.json index 39b165817..4d74c3e41 100644 --- a/packages/modules/eventstoredb/tsconfig.json +++ b/packages/modules/eventstoredb/tsconfig.json @@ -10,8 +10,7 @@ } }, "exclude": [ - "build", - "jest.config.ts" + "build" ], "references": [ { diff --git a/packages/modules/gcloud/jest.config.ts b/packages/modules/gcloud/jest.config.ts deleted file mode 100644 index 1f677baaf..000000000 --- a/packages/modules/gcloud/jest.config.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { Config } from "jest"; -import * as path from "path"; - -const config: Config = { - preset: "ts-jest", - moduleNameMapper: { - "^testcontainers$": path.resolve(__dirname, "../../testcontainers/src"), - }, -}; - -export default config; diff --git a/packages/modules/gcloud/src/bigquery-emulator-container.test.ts b/packages/modules/gcloud/src/bigquery-emulator-container.test.ts index bca588809..1b327985c 100644 --- a/packages/modules/gcloud/src/bigquery-emulator-container.test.ts +++ b/packages/modules/gcloud/src/bigquery-emulator-container.test.ts @@ -1,9 +1,7 @@ import { BigQuery, TableSchema } from "@google-cloud/bigquery"; import { BigQueryEmulatorContainer, StartedBigQueryEmulatorContainer } from "./bigquery-emulator-container"; -describe("BigQueryEmulatorContainer", () => { - jest.setTimeout(240_000); - +describe("BigQueryEmulatorContainer", { timeout: 240_000 }, () => { it("should work using default version", async () => { const bigQueryEmulatorContainer = await new BigQueryEmulatorContainer().start(); diff --git a/packages/modules/gcloud/src/cloudstorage-emulator-container.test.ts b/packages/modules/gcloud/src/cloudstorage-emulator-container.test.ts index 05fbdff79..4f9c22beb 100644 --- a/packages/modules/gcloud/src/cloudstorage-emulator-container.test.ts +++ b/packages/modules/gcloud/src/cloudstorage-emulator-container.test.ts @@ -1,7 +1,7 @@ -import { CloudStorageEmulatorContainer, StartedCloudStorageEmulatorContainer } from "./cloudstorage-emulator-container"; import { Storage } from "@google-cloud/storage"; -import { ReadableStream } from "node:stream/web"; import { setupServer } from "msw/node"; +import { ReadableStream } from "node:stream/web"; +import { CloudStorageEmulatorContainer, StartedCloudStorageEmulatorContainer } from "./cloudstorage-emulator-container"; async function getRequestBodyFromReadableStream(stream: ReadableStream): Promise { const decoder = new TextDecoder(); @@ -28,9 +28,7 @@ async function getRequestBodyFromReadableStream(stream: ReadableStream { - jest.setTimeout(240_000); - +describe("CloudStorageEmulatorContainer", { timeout: 240_000 }, () => { const server = setupServer(); beforeAll(() => { diff --git a/packages/modules/gcloud/src/cloudstorage-emulator-container.ts b/packages/modules/gcloud/src/cloudstorage-emulator-container.ts index 7650b6f98..207206e92 100644 --- a/packages/modules/gcloud/src/cloudstorage-emulator-container.ts +++ b/packages/modules/gcloud/src/cloudstorage-emulator-container.ts @@ -1,5 +1,5 @@ -import { AbstractStartedContainer, GenericContainer, Wait } from "testcontainers"; import type { StartedTestContainer } from "testcontainers"; +import { AbstractStartedContainer, GenericContainer, Wait } from "testcontainers"; const PORT = 4443; const DEFAULT_IMAGE = "fsouza/fake-gcs-server"; diff --git a/packages/modules/gcloud/src/datastore-emulator-container.test.ts b/packages/modules/gcloud/src/datastore-emulator-container.test.ts index b05d4a0f6..36384c6e5 100644 --- a/packages/modules/gcloud/src/datastore-emulator-container.test.ts +++ b/packages/modules/gcloud/src/datastore-emulator-container.test.ts @@ -1,9 +1,7 @@ -import { DatastoreEmulatorContainer, StartedDatastoreEmulatorContainer } from "./datastore-emulator-container"; import { Datastore } from "@google-cloud/datastore"; +import { DatastoreEmulatorContainer, StartedDatastoreEmulatorContainer } from "./datastore-emulator-container"; -describe("DatastoreEmulatorContainer", () => { - jest.setTimeout(240_000); - +describe("DatastoreEmulatorContainer", { timeout: 240_000 }, () => { // datastore4 { it("should work using default version", async () => { const datastoreEmulatorContainer = await new DatastoreEmulatorContainer().start(); diff --git a/packages/modules/gcloud/src/firestore-emulator-container.test.ts b/packages/modules/gcloud/src/firestore-emulator-container.test.ts index 823528c24..2b1829ec8 100644 --- a/packages/modules/gcloud/src/firestore-emulator-container.test.ts +++ b/packages/modules/gcloud/src/firestore-emulator-container.test.ts @@ -1,9 +1,7 @@ -import { FirestoreEmulatorContainer, StartedFirestoreEmulatorContainer } from "./firestore-emulator-container"; import * as admin from "firebase-admin"; +import { FirestoreEmulatorContainer, StartedFirestoreEmulatorContainer } from "./firestore-emulator-container"; -describe("FirestoreEmulatorContainer", () => { - jest.setTimeout(240_000); - +describe("FirestoreEmulatorContainer", { timeout: 240_000 }, () => { afterEach(async () => { await admin.app().delete(); }); diff --git a/packages/modules/gcloud/src/index.ts b/packages/modules/gcloud/src/index.ts index 0d2ba9038..92f30cd49 100644 --- a/packages/modules/gcloud/src/index.ts +++ b/packages/modules/gcloud/src/index.ts @@ -1,5 +1,5 @@ -export { FirestoreEmulatorContainer, StartedFirestoreEmulatorContainer } from "./firestore-emulator-container"; +export { BigQueryEmulatorContainer, StartedBigQueryEmulatorContainer } from "./bigquery-emulator-container"; +export { CloudStorageEmulatorContainer, StartedCloudStorageEmulatorContainer } from "./cloudstorage-emulator-container"; export { DatastoreEmulatorContainer, StartedDatastoreEmulatorContainer } from "./datastore-emulator-container"; +export { FirestoreEmulatorContainer, StartedFirestoreEmulatorContainer } from "./firestore-emulator-container"; export { PubSubEmulatorContainer, StartedPubSubEmulatorContainer } from "./pubsub-emulator-container"; -export { CloudStorageEmulatorContainer, StartedCloudStorageEmulatorContainer } from "./cloudstorage-emulator-container"; -export { BigQueryEmulatorContainer, StartedBigQueryEmulatorContainer } from "./bigquery-emulator-container"; diff --git a/packages/modules/gcloud/src/pubsub-emulator-container.test.ts b/packages/modules/gcloud/src/pubsub-emulator-container.test.ts index 437e25bec..a56c3f5f6 100644 --- a/packages/modules/gcloud/src/pubsub-emulator-container.test.ts +++ b/packages/modules/gcloud/src/pubsub-emulator-container.test.ts @@ -1,9 +1,7 @@ -import { PubSubEmulatorContainer, StartedPubSubEmulatorContainer } from "./pubsub-emulator-container"; import { PubSub } from "@google-cloud/pubsub"; +import { PubSubEmulatorContainer, StartedPubSubEmulatorContainer } from "./pubsub-emulator-container"; -describe("PubSubEmulatorContainer", () => { - jest.setTimeout(240_000); - +describe("PubSubEmulatorContainer", { timeout: 240_000 }, () => { it("should work using default version", async () => { const pubsubEmulatorContainer = await new PubSubEmulatorContainer().start(); diff --git a/packages/modules/gcloud/src/pubsub-emulator-container.ts b/packages/modules/gcloud/src/pubsub-emulator-container.ts index 711387fdd..4f99165a8 100644 --- a/packages/modules/gcloud/src/pubsub-emulator-container.ts +++ b/packages/modules/gcloud/src/pubsub-emulator-container.ts @@ -1,5 +1,5 @@ -import { AbstractStartedContainer, GenericContainer, Wait } from "testcontainers"; import type { StartedTestContainer } from "testcontainers"; +import { AbstractStartedContainer, GenericContainer, Wait } from "testcontainers"; const EMULATOR_PORT = 8085; const CMD = "gcloud beta emulators pubsub start --host-port 0.0.0.0:8085"; diff --git a/packages/modules/gcloud/tsconfig.build.json b/packages/modules/gcloud/tsconfig.build.json index b8f2e60e6..e9236a57d 100644 --- a/packages/modules/gcloud/tsconfig.build.json +++ b/packages/modules/gcloud/tsconfig.build.json @@ -2,7 +2,6 @@ "extends": "./tsconfig.json", "exclude": [ "build", - "jest.config.ts", "src/**/*.test.ts" ], "references": [ diff --git a/packages/modules/gcloud/tsconfig.json b/packages/modules/gcloud/tsconfig.json index 5b04a1a44..0e863cb02 100644 --- a/packages/modules/gcloud/tsconfig.json +++ b/packages/modules/gcloud/tsconfig.json @@ -10,8 +10,7 @@ } }, "exclude": [ - "build", - "jest.config.ts" + "build" ], "references": [ { diff --git a/packages/modules/hivemq/jest.config.ts b/packages/modules/hivemq/jest.config.ts deleted file mode 100644 index 1f677baaf..000000000 --- a/packages/modules/hivemq/jest.config.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { Config } from "jest"; -import * as path from "path"; - -const config: Config = { - preset: "ts-jest", - moduleNameMapper: { - "^testcontainers$": path.resolve(__dirname, "../../testcontainers/src"), - }, -}; - -export default config; diff --git a/packages/modules/hivemq/src/hivemq-container.test.ts b/packages/modules/hivemq/src/hivemq-container.test.ts index 5e7ec8bfa..fd3029e58 100644 --- a/packages/modules/hivemq/src/hivemq-container.test.ts +++ b/packages/modules/hivemq/src/hivemq-container.test.ts @@ -1,9 +1,7 @@ -import { HiveMQContainer } from "./hivemq-container"; import mqtt from "mqtt"; +import { HiveMQContainer } from "./hivemq-container"; -describe("HiveMQContainer", () => { - jest.setTimeout(240_000); - +describe("HiveMQContainer", { timeout: 240_000 }, () => { // connect { it("should connect to HiveMQ Community Edition via MQTT.js", (done) => { new HiveMQContainer().start().then((hiveMQContainer) => { diff --git a/packages/modules/hivemq/tsconfig.build.json b/packages/modules/hivemq/tsconfig.build.json index 0222f6ff1..ff7390b10 100644 --- a/packages/modules/hivemq/tsconfig.build.json +++ b/packages/modules/hivemq/tsconfig.build.json @@ -2,7 +2,6 @@ "extends": "./tsconfig.json", "exclude": [ "build", - "jest.config.ts", "src/**/*.test.ts" ], "references": [ diff --git a/packages/modules/hivemq/tsconfig.json b/packages/modules/hivemq/tsconfig.json index 39b165817..4d74c3e41 100644 --- a/packages/modules/hivemq/tsconfig.json +++ b/packages/modules/hivemq/tsconfig.json @@ -10,8 +10,7 @@ } }, "exclude": [ - "build", - "jest.config.ts" + "build" ], "references": [ { diff --git a/packages/modules/k3s/jest.config.ts b/packages/modules/k3s/jest.config.ts deleted file mode 100644 index 1f677baaf..000000000 --- a/packages/modules/k3s/jest.config.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { Config } from "jest"; -import * as path from "path"; - -const config: Config = { - preset: "ts-jest", - moduleNameMapper: { - "^testcontainers$": path.resolve(__dirname, "../../testcontainers/src"), - }, -}; - -export default config; diff --git a/packages/modules/k3s/src/k3s-container.test.ts b/packages/modules/k3s/src/k3s-container.test.ts index ecf01d2bc..2d380f9da 100644 --- a/packages/modules/k3s/src/k3s-container.test.ts +++ b/packages/modules/k3s/src/k3s-container.test.ts @@ -1,11 +1,9 @@ -import { K3sContainer } from "./k3s-container"; import * as k8s from "@kubernetes/client-node"; import { setTimeout } from "node:timers/promises"; import { GenericContainer, Network, Wait } from "testcontainers"; +import { K3sContainer } from "./k3s-container"; -describe("K3s", () => { - jest.setTimeout(120_000); - +describe("K3s", { timeout: 120_000 }, () => { it("should construct", () => { new K3sContainer("rancher/k3s:v1.31.2-k3s1"); }); diff --git a/packages/modules/k3s/src/k3s-container.ts b/packages/modules/k3s/src/k3s-container.ts index 41d178ed6..bb1cb298b 100644 --- a/packages/modules/k3s/src/k3s-container.ts +++ b/packages/modules/k3s/src/k3s-container.ts @@ -1,6 +1,6 @@ -import { AbstractStartedContainer, GenericContainer, StartedTestContainer, Wait } from "testcontainers"; -import tar from "tar-stream"; import { basename } from "node:path"; +import tar from "tar-stream"; +import { AbstractStartedContainer, GenericContainer, StartedTestContainer, Wait } from "testcontainers"; // TODO: Implement GenericContainer.withCgroupnsMode // https://github.com/DefinitelyTyped/DefinitelyTyped/discussions/71160 diff --git a/packages/modules/k3s/tsconfig.build.json b/packages/modules/k3s/tsconfig.build.json index 0222f6ff1..ff7390b10 100644 --- a/packages/modules/k3s/tsconfig.build.json +++ b/packages/modules/k3s/tsconfig.build.json @@ -2,7 +2,6 @@ "extends": "./tsconfig.json", "exclude": [ "build", - "jest.config.ts", "src/**/*.test.ts" ], "references": [ diff --git a/packages/modules/k3s/tsconfig.json b/packages/modules/k3s/tsconfig.json index 39b165817..4d74c3e41 100644 --- a/packages/modules/k3s/tsconfig.json +++ b/packages/modules/k3s/tsconfig.json @@ -10,8 +10,7 @@ } }, "exclude": [ - "build", - "jest.config.ts" + "build" ], "references": [ { diff --git a/packages/modules/kafka/jest.config.ts b/packages/modules/kafka/jest.config.ts deleted file mode 100644 index 1f677baaf..000000000 --- a/packages/modules/kafka/jest.config.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { Config } from "jest"; -import * as path from "path"; - -const config: Config = { - preset: "ts-jest", - moduleNameMapper: { - "^testcontainers$": path.resolve(__dirname, "../../testcontainers/src"), - }, -}; - -export default config; diff --git a/packages/modules/kafka/src/kafka-container.test.ts b/packages/modules/kafka/src/kafka-container.test.ts index 91469af4b..f71c654ec 100644 --- a/packages/modules/kafka/src/kafka-container.test.ts +++ b/packages/modules/kafka/src/kafka-container.test.ts @@ -1,12 +1,10 @@ -import { Kafka, KafkaConfig, logLevel } from "kafkajs"; -import { KAFKA_IMAGE, KafkaContainer } from "./kafka-container"; import * as fs from "fs"; +import { Kafka, KafkaConfig, logLevel } from "kafkajs"; import * as path from "path"; import { GenericContainer, Network, StartedTestContainer } from "testcontainers"; +import { KafkaContainer, KAFKA_IMAGE } from "./kafka-container"; -describe("KafkaContainer", () => { - jest.setTimeout(240_000); - +describe("KafkaContainer", { timeout: 240_000 }, () => { // connectBuiltInZK { it("should connect using in-built zoo-keeper", async () => { const kafkaContainer = await new KafkaContainer().withExposedPorts(9093).start(); diff --git a/packages/modules/kafka/src/kafka-container.ts b/packages/modules/kafka/src/kafka-container.ts index 5d506d040..589ebcc09 100644 --- a/packages/modules/kafka/src/kafka-container.ts +++ b/packages/modules/kafka/src/kafka-container.ts @@ -3,14 +3,14 @@ import { BoundPorts, Content, GenericContainer, + getContainerRuntimeClient, InspectResult, RandomUuid, StartedTestContainer, Uuid, Wait, - WaitStrategy, - getContainerRuntimeClient, waitForContainer, + WaitStrategy, } from "testcontainers"; const KAFKA_PORT = 9093; diff --git a/packages/modules/kafka/tsconfig.build.json b/packages/modules/kafka/tsconfig.build.json index 0222f6ff1..ff7390b10 100644 --- a/packages/modules/kafka/tsconfig.build.json +++ b/packages/modules/kafka/tsconfig.build.json @@ -2,7 +2,6 @@ "extends": "./tsconfig.json", "exclude": [ "build", - "jest.config.ts", "src/**/*.test.ts" ], "references": [ diff --git a/packages/modules/kafka/tsconfig.json b/packages/modules/kafka/tsconfig.json index 39b165817..4d74c3e41 100644 --- a/packages/modules/kafka/tsconfig.json +++ b/packages/modules/kafka/tsconfig.json @@ -10,8 +10,7 @@ } }, "exclude": [ - "build", - "jest.config.ts" + "build" ], "references": [ { diff --git a/packages/modules/localstack/jest.config.ts b/packages/modules/localstack/jest.config.ts deleted file mode 100644 index 1f677baaf..000000000 --- a/packages/modules/localstack/jest.config.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { Config } from "jest"; -import * as path from "path"; - -const config: Config = { - preset: "ts-jest", - moduleNameMapper: { - "^testcontainers$": path.resolve(__dirname, "../../testcontainers/src"), - }, -}; - -export default config; diff --git a/packages/modules/localstack/src/localstack-container.test.ts b/packages/modules/localstack/src/localstack-container.test.ts index 18d3d26ea..bfb39676d 100644 --- a/packages/modules/localstack/src/localstack-container.test.ts +++ b/packages/modules/localstack/src/localstack-container.test.ts @@ -1,6 +1,5 @@ import { CreateBucketCommand, HeadBucketCommand, S3Client } from "@aws-sdk/client-s3"; -import { GenericContainer, log, Network, StartedTestContainer } from "testcontainers"; -import { LABEL_TESTCONTAINERS_SESSION_ID } from "testcontainers/src/utils/labels"; +import { GenericContainer, LABEL_TESTCONTAINERS_SESSION_ID, log, Network, StartedTestContainer } from "testcontainers"; import { LocalstackContainer, LOCALSTACK_PORT } from "./localstack-container"; const runAwsCliAgainstDockerNetworkContainer = async ( @@ -14,9 +13,7 @@ const runAwsCliAgainstDockerNetworkContainer = async ( return execResult.output; }; -describe("LocalStackContainer", () => { - jest.setTimeout(180_000); - +describe("LocalStackContainer", { timeout: 180_000 }, () => { // createS3Bucket { it("should create a S3 bucket", async () => { const container = await new LocalstackContainer().start(); diff --git a/packages/modules/localstack/src/localstack-container.ts b/packages/modules/localstack/src/localstack-container.ts index 6f73a7a7f..c0ed1f394 100644 --- a/packages/modules/localstack/src/localstack-container.ts +++ b/packages/modules/localstack/src/localstack-container.ts @@ -2,12 +2,12 @@ import { AbstractStartedContainer, GenericContainer, getContainerRuntimeClient, + getReaper, + LABEL_TESTCONTAINERS_SESSION_ID, log, StartedTestContainer, Wait, } from "testcontainers"; -import { getReaper } from "testcontainers/src/reaper/reaper"; -import { LABEL_TESTCONTAINERS_SESSION_ID } from "testcontainers/src/utils/labels"; export const LOCALSTACK_PORT = 4566; diff --git a/packages/modules/localstack/tsconfig.build.json b/packages/modules/localstack/tsconfig.build.json index 0222f6ff1..ff7390b10 100644 --- a/packages/modules/localstack/tsconfig.build.json +++ b/packages/modules/localstack/tsconfig.build.json @@ -2,7 +2,6 @@ "extends": "./tsconfig.json", "exclude": [ "build", - "jest.config.ts", "src/**/*.test.ts" ], "references": [ diff --git a/packages/modules/localstack/tsconfig.json b/packages/modules/localstack/tsconfig.json index 39b165817..4d74c3e41 100644 --- a/packages/modules/localstack/tsconfig.json +++ b/packages/modules/localstack/tsconfig.json @@ -10,8 +10,7 @@ } }, "exclude": [ - "build", - "jest.config.ts" + "build" ], "references": [ { diff --git a/packages/modules/mariadb/jest.config.ts b/packages/modules/mariadb/jest.config.ts deleted file mode 100644 index 1f677baaf..000000000 --- a/packages/modules/mariadb/jest.config.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { Config } from "jest"; -import * as path from "path"; - -const config: Config = { - preset: "ts-jest", - moduleNameMapper: { - "^testcontainers$": path.resolve(__dirname, "../../testcontainers/src"), - }, -}; - -export default config; diff --git a/packages/modules/mariadb/src/mariadb-container.test.ts b/packages/modules/mariadb/src/mariadb-container.test.ts index 82d0fbbf9..fa1287b86 100644 --- a/packages/modules/mariadb/src/mariadb-container.test.ts +++ b/packages/modules/mariadb/src/mariadb-container.test.ts @@ -1,9 +1,7 @@ import mariadb from "mariadb"; import { MariaDbContainer } from "./mariadb-container"; -describe("MariaDb", () => { - jest.setTimeout(240_000); - +describe("MariaDb", { timeout: 240_000 }, () => { // connect { it("should connect and execute query", async () => { const container = await new MariaDbContainer().start(); diff --git a/packages/modules/mariadb/tsconfig.build.json b/packages/modules/mariadb/tsconfig.build.json index 0222f6ff1..ff7390b10 100644 --- a/packages/modules/mariadb/tsconfig.build.json +++ b/packages/modules/mariadb/tsconfig.build.json @@ -2,7 +2,6 @@ "extends": "./tsconfig.json", "exclude": [ "build", - "jest.config.ts", "src/**/*.test.ts" ], "references": [ diff --git a/packages/modules/mariadb/tsconfig.json b/packages/modules/mariadb/tsconfig.json index 39b165817..4d74c3e41 100644 --- a/packages/modules/mariadb/tsconfig.json +++ b/packages/modules/mariadb/tsconfig.json @@ -10,8 +10,7 @@ } }, "exclude": [ - "build", - "jest.config.ts" + "build" ], "references": [ { diff --git a/packages/modules/minio/jest.config.ts b/packages/modules/minio/jest.config.ts deleted file mode 100644 index 1f677baaf..000000000 --- a/packages/modules/minio/jest.config.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { Config } from "jest"; -import * as path from "path"; - -const config: Config = { - preset: "ts-jest", - moduleNameMapper: { - "^testcontainers$": path.resolve(__dirname, "../../testcontainers/src"), - }, -}; - -export default config; diff --git a/packages/modules/minio/src/minio-container.test.ts b/packages/modules/minio/src/minio-container.test.ts index 8dde3e0d4..f7013bdb8 100644 --- a/packages/modules/minio/src/minio-container.test.ts +++ b/packages/modules/minio/src/minio-container.test.ts @@ -1,9 +1,7 @@ import * as Minio from "minio"; import { MinioContainer } from "./minio-container"; -describe("MinIO", () => { - jest.setTimeout(240_000); - +describe("MinIO", { timeout: 240_000 }, () => { // connectWithDefaultCredentials { it("should connect and upload a file", async () => { const container = await new MinioContainer().start(); diff --git a/packages/modules/minio/tsconfig.build.json b/packages/modules/minio/tsconfig.build.json index 6b7778712..dec94c582 100644 --- a/packages/modules/minio/tsconfig.build.json +++ b/packages/modules/minio/tsconfig.build.json @@ -2,7 +2,6 @@ "extends": "./tsconfig.json", "exclude": [ "build", - "jest.config.ts", "src/**/*.test.ts", "src/dummy-file.txt" ], diff --git a/packages/modules/minio/tsconfig.json b/packages/modules/minio/tsconfig.json index 39b165817..4d74c3e41 100644 --- a/packages/modules/minio/tsconfig.json +++ b/packages/modules/minio/tsconfig.json @@ -10,8 +10,7 @@ } }, "exclude": [ - "build", - "jest.config.ts" + "build" ], "references": [ { diff --git a/packages/modules/mockserver/jest.config.ts b/packages/modules/mockserver/jest.config.ts deleted file mode 100644 index 1f677baaf..000000000 --- a/packages/modules/mockserver/jest.config.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { Config } from "jest"; -import * as path from "path"; - -const config: Config = { - preset: "ts-jest", - moduleNameMapper: { - "^testcontainers$": path.resolve(__dirname, "../../testcontainers/src"), - }, -}; - -export default config; diff --git a/packages/modules/mockserver/src/mockserver-container.test.ts b/packages/modules/mockserver/src/mockserver-container.test.ts index 4ca22ff1c..a1111bcd2 100644 --- a/packages/modules/mockserver/src/mockserver-container.test.ts +++ b/packages/modules/mockserver/src/mockserver-container.test.ts @@ -2,9 +2,7 @@ import { mockServerClient } from "mockserver-client"; import superagent from "superagent"; import { MockserverContainer } from "./mockserver-container"; -describe.only("MockserverContainer", () => { - jest.setTimeout(240_000); - +describe("MockserverContainer", { timeout: 240_000 }, () => { // startContainer { it("should start and accept mocks", async () => { const container = await new MockserverContainer().start(); diff --git a/packages/modules/mockserver/tsconfig.build.json b/packages/modules/mockserver/tsconfig.build.json index 0222f6ff1..ff7390b10 100644 --- a/packages/modules/mockserver/tsconfig.build.json +++ b/packages/modules/mockserver/tsconfig.build.json @@ -2,7 +2,6 @@ "extends": "./tsconfig.json", "exclude": [ "build", - "jest.config.ts", "src/**/*.test.ts" ], "references": [ diff --git a/packages/modules/mockserver/tsconfig.json b/packages/modules/mockserver/tsconfig.json index 39b165817..4d74c3e41 100644 --- a/packages/modules/mockserver/tsconfig.json +++ b/packages/modules/mockserver/tsconfig.json @@ -10,8 +10,7 @@ } }, "exclude": [ - "build", - "jest.config.ts" + "build" ], "references": [ { diff --git a/packages/modules/mongodb/jest.config.ts b/packages/modules/mongodb/jest.config.ts deleted file mode 100644 index 1f677baaf..000000000 --- a/packages/modules/mongodb/jest.config.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { Config } from "jest"; -import * as path from "path"; - -const config: Config = { - preset: "ts-jest", - moduleNameMapper: { - "^testcontainers$": path.resolve(__dirname, "../../testcontainers/src"), - }, -}; - -export default config; diff --git a/packages/modules/mongodb/src/mongodb-container.test.ts b/packages/modules/mongodb/src/mongodb-container.test.ts index 1e7fcefd6..1c3a57743 100644 --- a/packages/modules/mongodb/src/mongodb-container.test.ts +++ b/packages/modules/mongodb/src/mongodb-container.test.ts @@ -1,9 +1,7 @@ -import { MongoDBContainer } from "./mongodb-container"; import mongoose from "mongoose"; +import { MongoDBContainer } from "./mongodb-container"; -describe("MongodbContainer", () => { - jest.setTimeout(240_000); - +describe("MongodbContainer", { timeout: 240_000 }, () => { // connect4 { it("should work using default version 4.0.1", async () => { const mongodbContainer = await new MongoDBContainer().start(); diff --git a/packages/modules/mongodb/tsconfig.build.json b/packages/modules/mongodb/tsconfig.build.json index 0222f6ff1..ff7390b10 100644 --- a/packages/modules/mongodb/tsconfig.build.json +++ b/packages/modules/mongodb/tsconfig.build.json @@ -2,7 +2,6 @@ "extends": "./tsconfig.json", "exclude": [ "build", - "jest.config.ts", "src/**/*.test.ts" ], "references": [ diff --git a/packages/modules/mongodb/tsconfig.json b/packages/modules/mongodb/tsconfig.json index 39b165817..4d74c3e41 100644 --- a/packages/modules/mongodb/tsconfig.json +++ b/packages/modules/mongodb/tsconfig.json @@ -10,8 +10,7 @@ } }, "exclude": [ - "build", - "jest.config.ts" + "build" ], "references": [ { diff --git a/packages/modules/mssqlserver/jest.config.ts b/packages/modules/mssqlserver/jest.config.ts deleted file mode 100644 index 1f677baaf..000000000 --- a/packages/modules/mssqlserver/jest.config.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { Config } from "jest"; -import * as path from "path"; - -const config: Config = { - preset: "ts-jest", - moduleNameMapper: { - "^testcontainers$": path.resolve(__dirname, "../../testcontainers/src"), - }, -}; - -export default config; diff --git a/packages/modules/mssqlserver/src/mssqlserver-container.test.ts b/packages/modules/mssqlserver/src/mssqlserver-container.test.ts index 0dbe4f7e6..b0282c7d7 100644 --- a/packages/modules/mssqlserver/src/mssqlserver-container.test.ts +++ b/packages/modules/mssqlserver/src/mssqlserver-container.test.ts @@ -1,9 +1,7 @@ import sql, { config } from "mssql"; import { MSSQLServerContainer } from "./mssqlserver-container"; -describe("MSSqlServerContainer", () => { - jest.setTimeout(180_000); - +describe("MSSqlServerContainer", { timeout: 180_000 }, () => { // connect { it("should connect and return a query result", async () => { const container = await new MSSQLServerContainer().acceptLicense().start(); diff --git a/packages/modules/mssqlserver/tsconfig.build.json b/packages/modules/mssqlserver/tsconfig.build.json index 82b71d92e..86e04c357 100644 --- a/packages/modules/mssqlserver/tsconfig.build.json +++ b/packages/modules/mssqlserver/tsconfig.build.json @@ -1,6 +1,9 @@ { "extends": "./tsconfig.json", - "exclude": ["build", "jest.config.ts", "src/**/*.test.ts"], + "exclude": [ + "build", + "src/**/*.test.ts" + ], "references": [ { "path": "../../testcontainers" diff --git a/packages/modules/mssqlserver/tsconfig.json b/packages/modules/mssqlserver/tsconfig.json index 9ac528252..0fa16b6de 100644 --- a/packages/modules/mssqlserver/tsconfig.json +++ b/packages/modules/mssqlserver/tsconfig.json @@ -7,7 +7,9 @@ "testcontainers": ["../../testcontainers/src"] } }, - "exclude": ["build", "jest.config.ts"], + "exclude": [ + "build" + ], "references": [ { "path": "../../testcontainers" diff --git a/packages/modules/mysql/jest.config.ts b/packages/modules/mysql/jest.config.ts deleted file mode 100644 index 1f677baaf..000000000 --- a/packages/modules/mysql/jest.config.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { Config } from "jest"; -import * as path from "path"; - -const config: Config = { - preset: "ts-jest", - moduleNameMapper: { - "^testcontainers$": path.resolve(__dirname, "../../testcontainers/src"), - }, -}; - -export default config; diff --git a/packages/modules/mysql/src/mysql-container.test.ts b/packages/modules/mysql/src/mysql-container.test.ts index 0034d999a..26c40fb05 100644 --- a/packages/modules/mysql/src/mysql-container.test.ts +++ b/packages/modules/mysql/src/mysql-container.test.ts @@ -1,9 +1,7 @@ import { createConnection } from "mysql2/promise"; import { MySqlContainer } from "./mysql-container"; -describe("MySqlContainer", () => { - jest.setTimeout(240_000); - +describe("MySqlContainer", { timeout: 240_000 }, () => { // connect { it("should connect and execute query", async () => { const container = await new MySqlContainer().start(); diff --git a/packages/modules/mysql/tsconfig.build.json b/packages/modules/mysql/tsconfig.build.json index 0222f6ff1..ff7390b10 100644 --- a/packages/modules/mysql/tsconfig.build.json +++ b/packages/modules/mysql/tsconfig.build.json @@ -2,7 +2,6 @@ "extends": "./tsconfig.json", "exclude": [ "build", - "jest.config.ts", "src/**/*.test.ts" ], "references": [ diff --git a/packages/modules/mysql/tsconfig.json b/packages/modules/mysql/tsconfig.json index 39b165817..4d74c3e41 100644 --- a/packages/modules/mysql/tsconfig.json +++ b/packages/modules/mysql/tsconfig.json @@ -10,8 +10,7 @@ } }, "exclude": [ - "build", - "jest.config.ts" + "build" ], "references": [ { diff --git a/packages/modules/nats/jest.config.ts b/packages/modules/nats/jest.config.ts deleted file mode 100644 index 1f677baaf..000000000 --- a/packages/modules/nats/jest.config.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { Config } from "jest"; -import * as path from "path"; - -const config: Config = { - preset: "ts-jest", - moduleNameMapper: { - "^testcontainers$": path.resolve(__dirname, "../../testcontainers/src"), - }, -}; - -export default config; diff --git a/packages/modules/nats/src/index.ts b/packages/modules/nats/src/index.ts index 477ea11f0..1e7708841 100644 --- a/packages/modules/nats/src/index.ts +++ b/packages/modules/nats/src/index.ts @@ -1 +1 @@ -export { NatsContainer, StartedNatsContainer, NatsConnectionOptions, NatsTlsOptions } from "./nats-container"; +export { NatsConnectionOptions, NatsContainer, NatsTlsOptions, StartedNatsContainer } from "./nats-container"; diff --git a/packages/modules/nats/src/nats-container.test.ts b/packages/modules/nats/src/nats-container.test.ts index 2218b4448..a438c0acd 100644 --- a/packages/modules/nats/src/nats-container.test.ts +++ b/packages/modules/nats/src/nats-container.test.ts @@ -1,9 +1,7 @@ import { connect, StringCodec } from "nats"; import { NatsContainer } from "./nats-container"; -describe("NatsContainer", () => { - jest.setTimeout(180_000); - +describe("NatsContainer", { timeout: 180_000 }, () => { // connect { it("should start, connect and close", async () => { const container = await new NatsContainer().start(); diff --git a/packages/modules/nats/tsconfig.build.json b/packages/modules/nats/tsconfig.build.json index 0222f6ff1..ff7390b10 100644 --- a/packages/modules/nats/tsconfig.build.json +++ b/packages/modules/nats/tsconfig.build.json @@ -2,7 +2,6 @@ "extends": "./tsconfig.json", "exclude": [ "build", - "jest.config.ts", "src/**/*.test.ts" ], "references": [ diff --git a/packages/modules/nats/tsconfig.json b/packages/modules/nats/tsconfig.json index 39b165817..4d74c3e41 100644 --- a/packages/modules/nats/tsconfig.json +++ b/packages/modules/nats/tsconfig.json @@ -10,8 +10,7 @@ } }, "exclude": [ - "build", - "jest.config.ts" + "build" ], "references": [ { diff --git a/packages/modules/neo4j/jest.config.ts b/packages/modules/neo4j/jest.config.ts deleted file mode 100644 index 1f677baaf..000000000 --- a/packages/modules/neo4j/jest.config.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { Config } from "jest"; -import * as path from "path"; - -const config: Config = { - preset: "ts-jest", - moduleNameMapper: { - "^testcontainers$": path.resolve(__dirname, "../../testcontainers/src"), - }, -}; - -export default config; diff --git a/packages/modules/neo4j/src/neo4j-container.test.ts b/packages/modules/neo4j/src/neo4j-container.test.ts index e2d7f639c..fea0a0e2f 100755 --- a/packages/modules/neo4j/src/neo4j-container.test.ts +++ b/packages/modules/neo4j/src/neo4j-container.test.ts @@ -1,9 +1,7 @@ import neo4j from "neo4j-driver"; import { Neo4jContainer } from "./neo4j-container"; -describe("Neo4jContainer", () => { - jest.setTimeout(180_000); - +describe("Neo4jContainer", { timeout: 180_000 }, () => { // createNode { it("should create a person node", async () => { const container = await new Neo4jContainer().start(); diff --git a/packages/modules/neo4j/tsconfig.build.json b/packages/modules/neo4j/tsconfig.build.json index 0222f6ff1..ff7390b10 100644 --- a/packages/modules/neo4j/tsconfig.build.json +++ b/packages/modules/neo4j/tsconfig.build.json @@ -2,7 +2,6 @@ "extends": "./tsconfig.json", "exclude": [ "build", - "jest.config.ts", "src/**/*.test.ts" ], "references": [ diff --git a/packages/modules/neo4j/tsconfig.json b/packages/modules/neo4j/tsconfig.json index 39b165817..4d74c3e41 100644 --- a/packages/modules/neo4j/tsconfig.json +++ b/packages/modules/neo4j/tsconfig.json @@ -10,8 +10,7 @@ } }, "exclude": [ - "build", - "jest.config.ts" + "build" ], "references": [ { diff --git a/packages/modules/ollama/jest.config.ts b/packages/modules/ollama/jest.config.ts deleted file mode 100644 index 1f677baaf..000000000 --- a/packages/modules/ollama/jest.config.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { Config } from "jest"; -import * as path from "path"; - -const config: Config = { - preset: "ts-jest", - moduleNameMapper: { - "^testcontainers$": path.resolve(__dirname, "../../testcontainers/src"), - }, -}; - -export default config; diff --git a/packages/modules/ollama/src/ollama-container.test.ts b/packages/modules/ollama/src/ollama-container.test.ts index 40f49f697..a97e5a60a 100644 --- a/packages/modules/ollama/src/ollama-container.test.ts +++ b/packages/modules/ollama/src/ollama-container.test.ts @@ -1,8 +1,6 @@ import { OllamaContainer } from "./ollama-container"; -describe("OllamaContainer", () => { - jest.setTimeout(180_000); - +describe("OllamaContainer", { timeout: 180_000 }, () => { it("should run ollama with default config", async () => { // container { const container = await new OllamaContainer("ollama/ollama:0.1.44").start(); diff --git a/packages/modules/ollama/tsconfig.build.json b/packages/modules/ollama/tsconfig.build.json index 0222f6ff1..ff7390b10 100644 --- a/packages/modules/ollama/tsconfig.build.json +++ b/packages/modules/ollama/tsconfig.build.json @@ -2,7 +2,6 @@ "extends": "./tsconfig.json", "exclude": [ "build", - "jest.config.ts", "src/**/*.test.ts" ], "references": [ diff --git a/packages/modules/ollama/tsconfig.json b/packages/modules/ollama/tsconfig.json index 39b165817..4d74c3e41 100644 --- a/packages/modules/ollama/tsconfig.json +++ b/packages/modules/ollama/tsconfig.json @@ -10,8 +10,7 @@ } }, "exclude": [ - "build", - "jest.config.ts" + "build" ], "references": [ { diff --git a/packages/modules/postgresql/jest.config.ts b/packages/modules/postgresql/jest.config.ts deleted file mode 100644 index 1f677baaf..000000000 --- a/packages/modules/postgresql/jest.config.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { Config } from "jest"; -import * as path from "path"; - -const config: Config = { - preset: "ts-jest", - moduleNameMapper: { - "^testcontainers$": path.resolve(__dirname, "../../testcontainers/src"), - }, -}; - -export default config; diff --git a/packages/modules/postgresql/src/postgresql-container.test.ts b/packages/modules/postgresql/src/postgresql-container.test.ts index db102eb56..9dbffaf02 100644 --- a/packages/modules/postgresql/src/postgresql-container.test.ts +++ b/packages/modules/postgresql/src/postgresql-container.test.ts @@ -1,9 +1,7 @@ import { Client } from "pg"; import { PostgreSqlContainer } from "./postgresql-container"; -describe("PostgreSqlContainer", () => { - jest.setTimeout(180_000); - +describe("PostgreSqlContainer", { timeout: 180_000 }, () => { // connect { it("should connect and return a query result", async () => { const container = await new PostgreSqlContainer().start(); diff --git a/packages/modules/postgresql/tsconfig.build.json b/packages/modules/postgresql/tsconfig.build.json index 0222f6ff1..ff7390b10 100644 --- a/packages/modules/postgresql/tsconfig.build.json +++ b/packages/modules/postgresql/tsconfig.build.json @@ -2,7 +2,6 @@ "extends": "./tsconfig.json", "exclude": [ "build", - "jest.config.ts", "src/**/*.test.ts" ], "references": [ diff --git a/packages/modules/postgresql/tsconfig.json b/packages/modules/postgresql/tsconfig.json index 39b165817..4d74c3e41 100644 --- a/packages/modules/postgresql/tsconfig.json +++ b/packages/modules/postgresql/tsconfig.json @@ -10,8 +10,7 @@ } }, "exclude": [ - "build", - "jest.config.ts" + "build" ], "references": [ { diff --git a/packages/modules/qdrant/jest.config.ts b/packages/modules/qdrant/jest.config.ts deleted file mode 100644 index 1f677baaf..000000000 --- a/packages/modules/qdrant/jest.config.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { Config } from "jest"; -import * as path from "path"; - -const config: Config = { - preset: "ts-jest", - moduleNameMapper: { - "^testcontainers$": path.resolve(__dirname, "../../testcontainers/src"), - }, -}; - -export default config; diff --git a/packages/modules/qdrant/src/qdrant-container.test.ts b/packages/modules/qdrant/src/qdrant-container.test.ts index 4f6257653..1b67f7cc9 100644 --- a/packages/modules/qdrant/src/qdrant-container.test.ts +++ b/packages/modules/qdrant/src/qdrant-container.test.ts @@ -1,11 +1,9 @@ -import { QdrantContainer } from "./qdrant-container"; import { QdrantClient } from "@qdrant/js-client-rest"; import crypto from "crypto"; import path from "path"; +import { QdrantContainer } from "./qdrant-container"; -describe("QdrantContainer", () => { - jest.setTimeout(100_000); - +describe("QdrantContainer", { timeout: 100_000 }, () => { // connectQdrantSimple { it("should connect to the client", async () => { const container = await new QdrantContainer("qdrant/qdrant:v1.13.4").start(); diff --git a/packages/modules/qdrant/tsconfig.build.json b/packages/modules/qdrant/tsconfig.build.json index 69c2341be..dc8ed9d6b 100644 --- a/packages/modules/qdrant/tsconfig.build.json +++ b/packages/modules/qdrant/tsconfig.build.json @@ -2,7 +2,6 @@ "extends": "./tsconfig.json", "exclude": [ "build", - "jest.config.ts", "src/**/*.test.ts", "src/test_config.yaml" ], diff --git a/packages/modules/qdrant/tsconfig.json b/packages/modules/qdrant/tsconfig.json index 39b165817..4d74c3e41 100644 --- a/packages/modules/qdrant/tsconfig.json +++ b/packages/modules/qdrant/tsconfig.json @@ -10,8 +10,7 @@ } }, "exclude": [ - "build", - "jest.config.ts" + "build" ], "references": [ { diff --git a/packages/modules/rabbitmq/jest.config.ts b/packages/modules/rabbitmq/jest.config.ts deleted file mode 100644 index 1f677baaf..000000000 --- a/packages/modules/rabbitmq/jest.config.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { Config } from "jest"; -import * as path from "path"; - -const config: Config = { - preset: "ts-jest", - moduleNameMapper: { - "^testcontainers$": path.resolve(__dirname, "../../testcontainers/src"), - }, -}; - -export default config; diff --git a/packages/modules/rabbitmq/src/rabbitmq-container.test.ts b/packages/modules/rabbitmq/src/rabbitmq-container.test.ts index 0b01ea600..4cabd66d2 100644 --- a/packages/modules/rabbitmq/src/rabbitmq-container.test.ts +++ b/packages/modules/rabbitmq/src/rabbitmq-container.test.ts @@ -1,9 +1,7 @@ import amqp from "amqplib"; import { RabbitMQContainer } from "./rabbitmq-container"; -describe("RabbitMQContainer", () => { - jest.setTimeout(240_000); - +describe("RabbitMQContainer", { timeout: 240_000 }, () => { // start { it("should start, connect and close", async () => { const rabbitMQContainer = await new RabbitMQContainer().start(); diff --git a/packages/modules/rabbitmq/tsconfig.build.json b/packages/modules/rabbitmq/tsconfig.build.json index 0222f6ff1..ff7390b10 100644 --- a/packages/modules/rabbitmq/tsconfig.build.json +++ b/packages/modules/rabbitmq/tsconfig.build.json @@ -2,7 +2,6 @@ "extends": "./tsconfig.json", "exclude": [ "build", - "jest.config.ts", "src/**/*.test.ts" ], "references": [ diff --git a/packages/modules/rabbitmq/tsconfig.json b/packages/modules/rabbitmq/tsconfig.json index 39b165817..4d74c3e41 100644 --- a/packages/modules/rabbitmq/tsconfig.json +++ b/packages/modules/rabbitmq/tsconfig.json @@ -10,8 +10,7 @@ } }, "exclude": [ - "build", - "jest.config.ts" + "build" ], "references": [ { diff --git a/packages/modules/redis/jest.config.ts b/packages/modules/redis/jest.config.ts deleted file mode 100644 index 1f677baaf..000000000 --- a/packages/modules/redis/jest.config.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { Config } from "jest"; -import * as path from "path"; - -const config: Config = { - preset: "ts-jest", - moduleNameMapper: { - "^testcontainers$": path.resolve(__dirname, "../../testcontainers/src"), - }, -}; - -export default config; diff --git a/packages/modules/redis/src/redis-container.test.ts b/packages/modules/redis/src/redis-container.test.ts index 0665cfbb8..3c61c5dee 100644 --- a/packages/modules/redis/src/redis-container.test.ts +++ b/packages/modules/redis/src/redis-container.test.ts @@ -1,12 +1,10 @@ -import { createClient } from "redis"; -import { RedisContainer, StartedRedisContainer } from "./redis-container"; +import * as fs from "fs"; import * as os from "os"; import * as path from "path"; -import * as fs from "fs"; - -describe("RedisContainer", () => { - jest.setTimeout(240_000); +import { createClient } from "redis"; +import { RedisContainer, StartedRedisContainer } from "./redis-container"; +describe("RedisContainer", { timeout: 240_000 }, () => { // startContainer { it("should connect and execute set-get", async () => { const container = await new RedisContainer().start(); diff --git a/packages/modules/redis/src/redis-container.ts b/packages/modules/redis/src/redis-container.ts index a45fe4b62..982c6f919 100644 --- a/packages/modules/redis/src/redis-container.ts +++ b/packages/modules/redis/src/redis-container.ts @@ -1,5 +1,5 @@ -import { AbstractStartedContainer, GenericContainer, StartedTestContainer, Wait } from "testcontainers"; import path from "path"; +import { AbstractStartedContainer, GenericContainer, StartedTestContainer, Wait } from "testcontainers"; const REDIS_PORT = 6379; diff --git a/packages/modules/redis/tsconfig.build.json b/packages/modules/redis/tsconfig.build.json index 0222f6ff1..ff7390b10 100644 --- a/packages/modules/redis/tsconfig.build.json +++ b/packages/modules/redis/tsconfig.build.json @@ -2,7 +2,6 @@ "extends": "./tsconfig.json", "exclude": [ "build", - "jest.config.ts", "src/**/*.test.ts" ], "references": [ diff --git a/packages/modules/redis/tsconfig.json b/packages/modules/redis/tsconfig.json index 39b165817..4d74c3e41 100644 --- a/packages/modules/redis/tsconfig.json +++ b/packages/modules/redis/tsconfig.json @@ -10,8 +10,7 @@ } }, "exclude": [ - "build", - "jest.config.ts" + "build" ], "references": [ { diff --git a/packages/modules/redpanda/jest.config.ts b/packages/modules/redpanda/jest.config.ts deleted file mode 100644 index 1f677baaf..000000000 --- a/packages/modules/redpanda/jest.config.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { Config } from "jest"; -import * as path from "path"; - -const config: Config = { - preset: "ts-jest", - moduleNameMapper: { - "^testcontainers$": path.resolve(__dirname, "../../testcontainers/src"), - }, -}; - -export default config; diff --git a/packages/modules/redpanda/src/redpanda-container.test.ts b/packages/modules/redpanda/src/redpanda-container.test.ts index c11106053..41c34909e 100644 --- a/packages/modules/redpanda/src/redpanda-container.test.ts +++ b/packages/modules/redpanda/src/redpanda-container.test.ts @@ -1,9 +1,7 @@ import { Kafka, KafkaConfig, logLevel } from "kafkajs"; import { RedpandaContainer, StartedRedpandaContainer } from "./redpanda-container"; -describe("RedpandaContainer", () => { - jest.setTimeout(240_000); - +describe("RedpandaContainer", { timeout: 240_000 }, () => { // connectToKafka { it("should connect", async () => { const redpandaContainer = await new RedpandaContainer().start(); diff --git a/packages/modules/redpanda/src/redpanda-container.ts b/packages/modules/redpanda/src/redpanda-container.ts index 63d87157d..19c73adc8 100644 --- a/packages/modules/redpanda/src/redpanda-container.ts +++ b/packages/modules/redpanda/src/redpanda-container.ts @@ -1,16 +1,16 @@ import fs from "fs"; -import path from "path"; import { compile } from "handlebars"; +import path from "path"; import { AbstractStartedContainer, BoundPorts, GenericContainer, + getContainerRuntimeClient, InspectResult, StartedTestContainer, Wait, - WaitStrategy, - getContainerRuntimeClient, waitForContainer, + WaitStrategy, } from "testcontainers"; const REDPANDA_PORT = 9092; diff --git a/packages/modules/redpanda/tsconfig.build.json b/packages/modules/redpanda/tsconfig.build.json index 0222f6ff1..ff7390b10 100644 --- a/packages/modules/redpanda/tsconfig.build.json +++ b/packages/modules/redpanda/tsconfig.build.json @@ -2,7 +2,6 @@ "extends": "./tsconfig.json", "exclude": [ "build", - "jest.config.ts", "src/**/*.test.ts" ], "references": [ diff --git a/packages/modules/redpanda/tsconfig.json b/packages/modules/redpanda/tsconfig.json index 39b165817..4d74c3e41 100644 --- a/packages/modules/redpanda/tsconfig.json +++ b/packages/modules/redpanda/tsconfig.json @@ -10,8 +10,7 @@ } }, "exclude": [ - "build", - "jest.config.ts" + "build" ], "references": [ { diff --git a/packages/modules/scylladb/jest.config.ts b/packages/modules/scylladb/jest.config.ts deleted file mode 100644 index 1f677baaf..000000000 --- a/packages/modules/scylladb/jest.config.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { Config } from "jest"; -import * as path from "path"; - -const config: Config = { - preset: "ts-jest", - moduleNameMapper: { - "^testcontainers$": path.resolve(__dirname, "../../testcontainers/src"), - }, -}; - -export default config; diff --git a/packages/modules/scylladb/src/scylladb-container.test.ts b/packages/modules/scylladb/src/scylladb-container.test.ts index da0e22f61..100765741 100644 --- a/packages/modules/scylladb/src/scylladb-container.test.ts +++ b/packages/modules/scylladb/src/scylladb-container.test.ts @@ -1,9 +1,7 @@ import { Client } from "cassandra-driver"; // Scylla uses Cassandra's driver in Node.js import { ScyllaContainer } from "./scylladb-container"; -describe("ScyllaDB", () => { - jest.setTimeout(240_000); - +describe("ScyllaDB", { timeout: 240_000 }, () => { // connectWithDefaultCredentials { it("should connect and execute a query", async () => { const container = await new ScyllaContainer("scylladb/scylla:6.2.0").start(); diff --git a/packages/modules/scylladb/tsconfig.build.json b/packages/modules/scylladb/tsconfig.build.json index 0222f6ff1..ff7390b10 100644 --- a/packages/modules/scylladb/tsconfig.build.json +++ b/packages/modules/scylladb/tsconfig.build.json @@ -2,7 +2,6 @@ "extends": "./tsconfig.json", "exclude": [ "build", - "jest.config.ts", "src/**/*.test.ts" ], "references": [ diff --git a/packages/modules/scylladb/tsconfig.json b/packages/modules/scylladb/tsconfig.json index 39b165817..4d74c3e41 100644 --- a/packages/modules/scylladb/tsconfig.json +++ b/packages/modules/scylladb/tsconfig.json @@ -10,8 +10,7 @@ } }, "exclude": [ - "build", - "jest.config.ts" + "build" ], "references": [ { diff --git a/packages/modules/selenium/jest.config.ts b/packages/modules/selenium/jest.config.ts deleted file mode 100644 index 1f677baaf..000000000 --- a/packages/modules/selenium/jest.config.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { Config } from "jest"; -import * as path from "path"; - -const config: Config = { - preset: "ts-jest", - moduleNameMapper: { - "^testcontainers$": path.resolve(__dirname, "../../testcontainers/src"), - }, -}; - -export default config; diff --git a/packages/modules/selenium/src/selenium-container.test.ts b/packages/modules/selenium/src/selenium-container.test.ts index a69bb371d..82d2215c9 100644 --- a/packages/modules/selenium/src/selenium-container.test.ts +++ b/packages/modules/selenium/src/selenium-container.test.ts @@ -1,12 +1,10 @@ -import { SELENIUM_VIDEO_IMAGE, SeleniumContainer } from "./selenium-container"; -import { Browser, Builder } from "selenium-webdriver"; -import tmp from "tmp"; import path from "path"; +import { Browser, Builder } from "selenium-webdriver"; import { GenericContainer, StartedTestContainer } from "testcontainers"; +import tmp from "tmp"; +import { SeleniumContainer, SELENIUM_VIDEO_IMAGE } from "./selenium-container"; -describe("SeleniumContainer", () => { - jest.setTimeout(180_000); - +describe("SeleniumContainer", { timeout: 180_000 }, () => { let ffmpegContainer: StartedTestContainer; beforeAll(async () => { diff --git a/packages/modules/selenium/src/selenium-container.ts b/packages/modules/selenium/src/selenium-container.ts index f8a0e4e52..f5616b3f9 100644 --- a/packages/modules/selenium/src/selenium-container.ts +++ b/packages/modules/selenium/src/selenium-container.ts @@ -1,7 +1,6 @@ import { copyFile } from "fs/promises"; -import tmp from "tmp"; -import tar from "tar-fs"; import path from "path"; +import tar from "tar-fs"; import { AbstractStartedContainer, AbstractStoppedContainer, @@ -14,6 +13,7 @@ import { StoppedTestContainer, Wait, } from "testcontainers"; +import tmp from "tmp"; const SELENIUM_PORT = 4444; const VNC_PORT = 5900; diff --git a/packages/modules/selenium/tsconfig.build.json b/packages/modules/selenium/tsconfig.build.json index 0222f6ff1..ff7390b10 100644 --- a/packages/modules/selenium/tsconfig.build.json +++ b/packages/modules/selenium/tsconfig.build.json @@ -2,7 +2,6 @@ "extends": "./tsconfig.json", "exclude": [ "build", - "jest.config.ts", "src/**/*.test.ts" ], "references": [ diff --git a/packages/modules/selenium/tsconfig.json b/packages/modules/selenium/tsconfig.json index 39b165817..4d74c3e41 100644 --- a/packages/modules/selenium/tsconfig.json +++ b/packages/modules/selenium/tsconfig.json @@ -10,8 +10,7 @@ } }, "exclude": [ - "build", - "jest.config.ts" + "build" ], "references": [ { diff --git a/packages/modules/toxiproxy/jest.config.ts b/packages/modules/toxiproxy/jest.config.ts deleted file mode 100644 index 1f677baaf..000000000 --- a/packages/modules/toxiproxy/jest.config.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { Config } from "jest"; -import * as path from "path"; - -const config: Config = { - preset: "ts-jest", - moduleNameMapper: { - "^testcontainers$": path.resolve(__dirname, "../../testcontainers/src"), - }, -}; - -export default config; diff --git a/packages/modules/toxiproxy/src/index.ts b/packages/modules/toxiproxy/src/index.ts index aa92c227b..c956948f5 100644 --- a/packages/modules/toxiproxy/src/index.ts +++ b/packages/modules/toxiproxy/src/index.ts @@ -1 +1 @@ -export { ToxiProxyContainer, StartedToxiProxyContainer, CreatedProxy } from "./toxiproxy-container"; +export { CreatedProxy, StartedToxiProxyContainer, ToxiProxyContainer } from "./toxiproxy-container"; diff --git a/packages/modules/toxiproxy/src/toxiproxy-container.test.ts b/packages/modules/toxiproxy/src/toxiproxy-container.test.ts index 72f2ca351..c521e085a 100644 --- a/packages/modules/toxiproxy/src/toxiproxy-container.test.ts +++ b/packages/modules/toxiproxy/src/toxiproxy-container.test.ts @@ -1,10 +1,8 @@ -import { ToxiProxyContainer, TPClient } from "./toxiproxy-container"; -import { GenericContainer, Network } from "testcontainers"; import { createClient } from "redis"; +import { GenericContainer, Network } from "testcontainers"; +import { ToxiProxyContainer, TPClient } from "./toxiproxy-container"; -describe("ToxiProxyContainer", () => { - jest.setTimeout(240_000); - +describe("ToxiProxyContainer", { timeout: 240_000 }, () => { // Helper to connect to redis async function connectTo(url: string) { const client = createClient({ diff --git a/packages/modules/toxiproxy/tsconfig.build.json b/packages/modules/toxiproxy/tsconfig.build.json index 0222f6ff1..ff7390b10 100644 --- a/packages/modules/toxiproxy/tsconfig.build.json +++ b/packages/modules/toxiproxy/tsconfig.build.json @@ -2,7 +2,6 @@ "extends": "./tsconfig.json", "exclude": [ "build", - "jest.config.ts", "src/**/*.test.ts" ], "references": [ diff --git a/packages/modules/toxiproxy/tsconfig.json b/packages/modules/toxiproxy/tsconfig.json index 39b165817..4d74c3e41 100644 --- a/packages/modules/toxiproxy/tsconfig.json +++ b/packages/modules/toxiproxy/tsconfig.json @@ -10,8 +10,7 @@ } }, "exclude": [ - "build", - "jest.config.ts" + "build" ], "references": [ { diff --git a/packages/modules/valkey/jest.config.ts b/packages/modules/valkey/jest.config.ts deleted file mode 100644 index 1f677baaf..000000000 --- a/packages/modules/valkey/jest.config.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { Config } from "jest"; -import * as path from "path"; - -const config: Config = { - preset: "ts-jest", - moduleNameMapper: { - "^testcontainers$": path.resolve(__dirname, "../../testcontainers/src"), - }, -}; - -export default config; diff --git a/packages/modules/valkey/src/index.ts b/packages/modules/valkey/src/index.ts index e9cb9c23e..32a029b19 100644 --- a/packages/modules/valkey/src/index.ts +++ b/packages/modules/valkey/src/index.ts @@ -1 +1 @@ -export { ValkeyContainer, StartedValkeyContainer } from "./valkey-container"; +export { StartedValkeyContainer, ValkeyContainer } from "./valkey-container"; diff --git a/packages/modules/valkey/src/valkey-container.test.ts b/packages/modules/valkey/src/valkey-container.test.ts index 3f8702e25..b29218446 100644 --- a/packages/modules/valkey/src/valkey-container.test.ts +++ b/packages/modules/valkey/src/valkey-container.test.ts @@ -1,12 +1,10 @@ -import { createClient } from "redis"; -import { ValkeyContainer, StartedValkeyContainer } from "./valkey-container"; +import * as fs from "fs"; import * as os from "os"; import * as path from "path"; -import * as fs from "fs"; - -describe("ValkeyContainer", () => { - jest.setTimeout(240_000); +import { createClient } from "redis"; +import { StartedValkeyContainer, ValkeyContainer } from "./valkey-container"; +describe("ValkeyContainer", { timeout: 240_000 }, () => { it("should connect and execute set-get", async () => { const container = await new ValkeyContainer().start(); diff --git a/packages/modules/valkey/src/valkey-container.ts b/packages/modules/valkey/src/valkey-container.ts index fdb14318d..acf13b655 100644 --- a/packages/modules/valkey/src/valkey-container.ts +++ b/packages/modules/valkey/src/valkey-container.ts @@ -1,5 +1,5 @@ -import { AbstractStartedContainer, GenericContainer, StartedTestContainer, Wait } from "testcontainers"; import path from "path"; +import { AbstractStartedContainer, GenericContainer, StartedTestContainer, Wait } from "testcontainers"; const VALKEY_PORT = 6379; diff --git a/packages/modules/valkey/tsconfig.build.json b/packages/modules/valkey/tsconfig.build.json index 82b71d92e..86e04c357 100644 --- a/packages/modules/valkey/tsconfig.build.json +++ b/packages/modules/valkey/tsconfig.build.json @@ -1,6 +1,9 @@ { "extends": "./tsconfig.json", - "exclude": ["build", "jest.config.ts", "src/**/*.test.ts"], + "exclude": [ + "build", + "src/**/*.test.ts" + ], "references": [ { "path": "../../testcontainers" diff --git a/packages/modules/valkey/tsconfig.json b/packages/modules/valkey/tsconfig.json index 9ac528252..0fa16b6de 100644 --- a/packages/modules/valkey/tsconfig.json +++ b/packages/modules/valkey/tsconfig.json @@ -7,7 +7,9 @@ "testcontainers": ["../../testcontainers/src"] } }, - "exclude": ["build", "jest.config.ts"], + "exclude": [ + "build" + ], "references": [ { "path": "../../testcontainers" diff --git a/packages/modules/weaviate/jest.config.ts b/packages/modules/weaviate/jest.config.ts deleted file mode 100644 index 1f677baaf..000000000 --- a/packages/modules/weaviate/jest.config.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { Config } from "jest"; -import * as path from "path"; - -const config: Config = { - preset: "ts-jest", - moduleNameMapper: { - "^testcontainers$": path.resolve(__dirname, "../../testcontainers/src"), - }, -}; - -export default config; diff --git a/packages/modules/weaviate/src/index.ts b/packages/modules/weaviate/src/index.ts index cb9945e80..5c9e7c4c1 100644 --- a/packages/modules/weaviate/src/index.ts +++ b/packages/modules/weaviate/src/index.ts @@ -1 +1 @@ -export { WeaviateContainer, StartedWeaviateContainer } from "./weaviate-container"; +export { StartedWeaviateContainer, WeaviateContainer } from "./weaviate-container"; diff --git a/packages/modules/weaviate/src/weaviate-container.test.ts b/packages/modules/weaviate/src/weaviate-container.test.ts index 6c33cf70b..ba8d8f507 100644 --- a/packages/modules/weaviate/src/weaviate-container.test.ts +++ b/packages/modules/weaviate/src/weaviate-container.test.ts @@ -1,10 +1,8 @@ import { Environment } from "testcontainers/src/types"; -import { WeaviateContainer } from "./weaviate-container"; import weaviate from "weaviate-ts-client"; +import { WeaviateContainer } from "./weaviate-container"; -describe("WeaviateContainer", () => { - jest.setTimeout(100_000); - +describe("WeaviateContainer", { timeout: 100_000 }, () => { // connectWeaviate { it("should expose ports", async () => { const container = await new WeaviateContainer().start(); @@ -25,16 +23,8 @@ describe("WeaviateContainer", () => { host: container.getHttpHostAddress(), }); - client.misc - .metaGetter() - .do() - // eslint-disable-next-line @typescript-eslint/no-explicit-any - .then((res: any) => { - expect(res.version).toBeDefined(); - }) - .catch((e: string) => { - throw new Error(e); - }); + const res = await client.misc.metaGetter().do(); + expect(res.version).toBeDefined(); await container.stop(); }); @@ -60,20 +50,12 @@ describe("WeaviateContainer", () => { host: container.getHttpHostAddress(), }); - client.misc - .metaGetter() - .do() - // eslint-disable-next-line @typescript-eslint/no-explicit-any - .then((res: any) => { - expect(res.version).toBeDefined(); - expect(res.modules).toBeDefined(); - enableModules.forEach((module) => { - expect(res.modules[module]).toBeDefined(); - }); - }) - .catch((e: string) => { - throw new Error(e); - }); + const res = await client.misc.metaGetter().do(); + expect(res.version).toBeDefined(); + expect(res.modules).toBeDefined(); + enableModules.forEach((module) => { + expect(res.modules[module]).toBeDefined(); + }); await container.stop(); }); diff --git a/packages/modules/weaviate/tsconfig.build.json b/packages/modules/weaviate/tsconfig.build.json index 8aa91624b..b69e8cef6 100644 --- a/packages/modules/weaviate/tsconfig.build.json +++ b/packages/modules/weaviate/tsconfig.build.json @@ -2,7 +2,6 @@ "extends": "./tsconfig.json", "exclude": [ "build", - "jest.config.ts", "src/**/*.test.ts", "src/test_config.yaml" ], diff --git a/packages/modules/weaviate/tsconfig.json b/packages/modules/weaviate/tsconfig.json index 5b04a1a44..0e863cb02 100644 --- a/packages/modules/weaviate/tsconfig.json +++ b/packages/modules/weaviate/tsconfig.json @@ -10,8 +10,7 @@ } }, "exclude": [ - "build", - "jest.config.ts" + "build" ], "references": [ { diff --git a/packages/testcontainers/fixtures/docker-compose/docker-compose-with-name.yml b/packages/testcontainers/fixtures/docker-compose/docker-compose-with-name.yml index eb764986c..c0388aabe 100644 --- a/packages/testcontainers/fixtures/docker-compose/docker-compose-with-name.yml +++ b/packages/testcontainers/fixtures/docker-compose/docker-compose-with-name.yml @@ -2,7 +2,7 @@ version: "3.5" services: db: - container_name: custom_container_name + container_name: ${CONTAINER_NAME:-custom_container_name} image: cristianrgreco/testcontainer:1.1.14 ports: - 8080 diff --git a/packages/testcontainers/jest.config.ts b/packages/testcontainers/jest.config.ts deleted file mode 100644 index e5846d5af..000000000 --- a/packages/testcontainers/jest.config.ts +++ /dev/null @@ -1,9 +0,0 @@ -import type { Config } from "jest"; - -const config: Config = { - preset: "ts-jest", - resetMocks: true, - restoreMocks: true, -}; - -export default config; diff --git a/packages/testcontainers/src/common/file-lock.ts b/packages/testcontainers/src/common/file-lock.ts index 2904ab2c0..77f3452dd 100644 --- a/packages/testcontainers/src/common/file-lock.ts +++ b/packages/testcontainers/src/common/file-lock.ts @@ -1,5 +1,5 @@ -import path from "path"; import { writeFile } from "fs/promises"; +import path from "path"; import lockFile from "proper-lockfile"; import { log } from "./logger"; diff --git a/packages/testcontainers/src/common/index.ts b/packages/testcontainers/src/common/index.ts index fccab29fb..e3c453f75 100644 --- a/packages/testcontainers/src/common/index.ts +++ b/packages/testcontainers/src/common/index.ts @@ -1,7 +1,7 @@ -export { Logger, log, buildLog, composeLog, pullLog, execLog, containerLog } from "./logger"; -export * from "./type-guards"; +export { withFileLock } from "./file-lock"; export { hash } from "./hash"; -export { Uuid, RandomUuid } from "./uuid"; +export { buildLog, composeLog, containerLog, execLog, log, Logger, pullLog } from "./logger"; +export { IntervalRetry, Retry } from "./retry"; export { streamToString } from "./streams"; -export { withFileLock } from "./file-lock"; -export { Retry, IntervalRetry } from "./retry"; +export * from "./type-guards"; +export { RandomUuid, Uuid } from "./uuid"; diff --git a/packages/testcontainers/src/common/logger.ts b/packages/testcontainers/src/common/logger.ts index 14b479136..776524c88 100644 --- a/packages/testcontainers/src/common/logger.ts +++ b/packages/testcontainers/src/common/logger.ts @@ -10,6 +10,9 @@ export class Logger { constructor(namespace: string, private readonly showLevel = true) { this.logger = debug(namespace); + if (process.env.NODE_ENV === "test") { + this.logger.log = console.log.bind(console); + } } public enabled(): boolean { diff --git a/packages/testcontainers/src/common/retry.test.ts b/packages/testcontainers/src/common/retry.test.ts index dcf1962de..6674e7228 100644 --- a/packages/testcontainers/src/common/retry.test.ts +++ b/packages/testcontainers/src/common/retry.test.ts @@ -3,7 +3,7 @@ import { IntervalRetry } from "./retry"; describe("Retry", () => { describe("IntervalRetry", () => { it("should not retry when predicate succeeds", async () => { - const fnMock = jest.fn().mockResolvedValue(true); + const fnMock = vi.fn().mockResolvedValue(true); const result = await new IntervalRetry(1).retryUntil( () => fnMock(), @@ -17,7 +17,7 @@ describe("Retry", () => { }); it("should retry when predicate fails", async () => { - const fnMock = jest.fn().mockResolvedValueOnce(false).mockResolvedValueOnce(true); + const fnMock = vi.fn().mockResolvedValueOnce(false).mockResolvedValueOnce(true); const result = await new IntervalRetry(1).retryUntil( () => fnMock(), @@ -31,8 +31,8 @@ describe("Retry", () => { }); it("should invoke timeout handler on timeout", async () => { - const fnMock = jest.fn().mockResolvedValue(false); - const timeoutMock = jest.fn().mockReturnValue(new Error()); + const fnMock = vi.fn().mockResolvedValue(false); + const timeoutMock = vi.fn().mockReturnValue(new Error()); const result = await new IntervalRetry(1).retryUntil( () => fnMock(), diff --git a/packages/testcontainers/src/common/uuid.ts b/packages/testcontainers/src/common/uuid.ts index 7608907d0..fdb9ad16b 100644 --- a/packages/testcontainers/src/common/uuid.ts +++ b/packages/testcontainers/src/common/uuid.ts @@ -10,3 +10,6 @@ export class RandomUuid implements Uuid { return hash(crypto.randomUUID()).substring(0, 12); } } + +const randomUuidGen = new RandomUuid(); +export const randomUuid = () => randomUuidGen.nextUuid(); diff --git a/packages/testcontainers/src/container-runtime/auth/auths.test.ts b/packages/testcontainers/src/container-runtime/auth/auths.test.ts index 8dd366d25..71d531f45 100644 --- a/packages/testcontainers/src/container-runtime/auth/auths.test.ts +++ b/packages/testcontainers/src/container-runtime/auth/auths.test.ts @@ -1,5 +1,5 @@ -import { AuthConfig, ContainerRuntimeConfig } from "./types"; import { Auths } from "./auths"; +import { AuthConfig, ContainerRuntimeConfig } from "./types"; describe("Auths", () => { const locator = new Auths(); diff --git a/packages/testcontainers/src/container-runtime/auth/auths.ts b/packages/testcontainers/src/container-runtime/auth/auths.ts index fb295cb28..079dc6bfd 100644 --- a/packages/testcontainers/src/container-runtime/auth/auths.ts +++ b/packages/testcontainers/src/container-runtime/auth/auths.ts @@ -1,6 +1,6 @@ -import { Auth, AuthConfig, ContainerRuntimeConfig } from "./types"; import { RegistryAuthLocator } from "./registry-auth-locator"; import { registryMatches } from "./registry-matches"; +import { Auth, AuthConfig, ContainerRuntimeConfig } from "./types"; export class Auths implements RegistryAuthLocator { public getName(): string { diff --git a/packages/testcontainers/src/container-runtime/auth/cred-helpers.test.ts b/packages/testcontainers/src/container-runtime/auth/cred-helpers.test.ts index 8ac5713d3..0d7c21c51 100644 --- a/packages/testcontainers/src/container-runtime/auth/cred-helpers.test.ts +++ b/packages/testcontainers/src/container-runtime/auth/cred-helpers.test.ts @@ -10,7 +10,7 @@ describe("CredHelpers", () => { expect(await locator.getAuthConfig("registry-name", containerRuntimeConfig)).toBe(undefined); }); - xit("should work", async () => { + it.skip("should work", async () => { const containerRuntimeConfig: ContainerRuntimeConfig = { credHelpers: { "index.docker.io": "desktop" } }; const authConfig: AuthConfig = { username: expect.stringMatching(/.+/), diff --git a/packages/testcontainers/src/container-runtime/auth/credential-provider.test.ts b/packages/testcontainers/src/container-runtime/auth/credential-provider.test.ts index 35654dce7..51f5cd06e 100644 --- a/packages/testcontainers/src/container-runtime/auth/credential-provider.test.ts +++ b/packages/testcontainers/src/container-runtime/auth/credential-provider.test.ts @@ -1,12 +1,12 @@ -import { CredentialProvider } from "./credential-provider"; import { ChildProcess } from "child_process"; -import { Readable, Writable } from "stream"; import EventEmitter from "events"; +import { Readable, Writable } from "stream"; +import { CredentialProvider } from "./credential-provider"; import { ContainerRuntimeConfig } from "./types"; -const mockExec = jest.fn(); -const mockSpawn = jest.fn(); -jest.mock("child_process", () => ({ +const mockExec = vi.fn(); +const mockSpawn = vi.fn(); +vi.mock("child_process", () => ({ exec: (...args: unknown[]) => mockExec(...args), spawn: (...args: unknown[]) => mockSpawn(...args), })); diff --git a/packages/testcontainers/src/container-runtime/auth/credential-provider.ts b/packages/testcontainers/src/container-runtime/auth/credential-provider.ts index dbd190fdd..fa3d95435 100644 --- a/packages/testcontainers/src/container-runtime/auth/credential-provider.ts +++ b/packages/testcontainers/src/container-runtime/auth/credential-provider.ts @@ -1,13 +1,13 @@ +import { exec, spawn } from "child_process"; +import { log } from "../../common"; +import { RegistryAuthLocator } from "./registry-auth-locator"; +import { registryMatches } from "./registry-matches"; import { + AuthConfig, + ContainerRuntimeConfig, CredentialProviderGetResponse, CredentialProviderListResponse, - ContainerRuntimeConfig, - AuthConfig, } from "./types"; -import { exec, spawn } from "child_process"; -import { RegistryAuthLocator } from "./registry-auth-locator"; -import { registryMatches } from "./registry-matches"; -import { log } from "../../common"; export abstract class CredentialProvider implements RegistryAuthLocator { abstract getName(): string; diff --git a/packages/testcontainers/src/container-runtime/auth/creds-store.test.ts b/packages/testcontainers/src/container-runtime/auth/creds-store.test.ts index 3ab8de31f..75ce0c638 100644 --- a/packages/testcontainers/src/container-runtime/auth/creds-store.test.ts +++ b/packages/testcontainers/src/container-runtime/auth/creds-store.test.ts @@ -15,7 +15,7 @@ describe("CredsStore", () => { expect(await locator.getAuthConfig("registry-name", containerRuntimeConfig)).toBe(undefined); }); - xit("should work", async () => { + it.skip("should work", async () => { const containerRuntimeConfig: ContainerRuntimeConfig = { credsStore: "desktop" }; const authConfig: AuthConfig = { username: expect.stringMatching(/.+/), diff --git a/packages/testcontainers/src/container-runtime/auth/get-auth-config.test.ts b/packages/testcontainers/src/container-runtime/auth/get-auth-config.test.ts index 06f13f6ba..3ea88ffe1 100644 --- a/packages/testcontainers/src/container-runtime/auth/get-auth-config.test.ts +++ b/packages/testcontainers/src/container-runtime/auth/get-auth-config.test.ts @@ -1,19 +1,21 @@ +import { Mock } from "vitest"; + describe("get auth config", () => { - let mockExistsSync: jest.Mock; - let mockReadFile: jest.Mock; + let mockExistsSync: Mock; + let mockReadFile: Mock; beforeEach(async () => { - jest.mock("fs"); + vi.mock("fs"); const { existsSync } = await import("fs"); - mockExistsSync = existsSync as jest.Mock; - jest.mock("fs/promises"); + mockExistsSync = existsSync as Mock; + vi.mock("fs/promises"); const { readFile } = await import("fs/promises"); - mockReadFile = readFile as jest.Mock; + mockReadFile = readFile as Mock; }); afterEach(() => { delete process.env.DOCKER_AUTH_CONFIG; - jest.resetModules(); + vi.resetModules(); }); it("should use DOCKER_AUTH_CONFIG environment variable as Docker config", async () => { diff --git a/packages/testcontainers/src/container-runtime/auth/get-auth-config.ts b/packages/testcontainers/src/container-runtime/auth/get-auth-config.ts index a6639ddd7..b89ca56b6 100644 --- a/packages/testcontainers/src/container-runtime/auth/get-auth-config.ts +++ b/packages/testcontainers/src/container-runtime/auth/get-auth-config.ts @@ -1,13 +1,13 @@ -import path from "path"; -import os from "os"; -import { AuthConfig, ContainerRuntimeConfig } from "./types"; import { existsSync } from "fs"; import { readFile } from "fs/promises"; +import os from "os"; +import path from "path"; +import { log } from "../../common"; +import { Auths } from "./auths"; import { CredHelpers } from "./cred-helpers"; import { CredsStore } from "./creds-store"; -import { Auths } from "./auths"; import { RegistryAuthLocator } from "./registry-auth-locator"; -import { log } from "../../common"; +import { AuthConfig, ContainerRuntimeConfig } from "./types"; const dockerConfigLocation = process.env.DOCKER_CONFIG || `${os.homedir()}/.docker`; diff --git a/packages/testcontainers/src/container-runtime/clients/client.ts b/packages/testcontainers/src/container-runtime/clients/client.ts index 70af6f61c..7a048d24a 100644 --- a/packages/testcontainers/src/container-runtime/clients/client.ts +++ b/packages/testcontainers/src/container-runtime/clients/client.ts @@ -1,23 +1,23 @@ -import { ComposeClient, getComposeClient } from "./compose/compose-client"; -import { ContainerClient } from "./container/container-client"; -import { ImageClient } from "./image/image-client"; -import { NetworkClient } from "./network/network-client"; -import { ContainerRuntimeClientStrategy } from "../strategies/strategy"; +import Dockerode, { DockerOptions } from "dockerode"; +import { isDefined, isEmptyString, log } from "../../common"; +import { LIB_VERSION } from "../../version"; import { ConfigurationStrategy } from "../strategies/configuration-strategy"; +import { NpipeSocketStrategy } from "../strategies/npipe-socket-strategy"; +import { RootlessUnixSocketStrategy } from "../strategies/rootless-unix-socket-strategy"; +import { ContainerRuntimeClientStrategy } from "../strategies/strategy"; import { TestcontainersHostStrategy } from "../strategies/testcontainers-host-strategy"; import { UnixSocketStrategy } from "../strategies/unix-socket-strategy"; -import { RootlessUnixSocketStrategy } from "../strategies/rootless-unix-socket-strategy"; -import { NpipeSocketStrategy } from "../strategies/npipe-socket-strategy"; -import { ComposeInfo, ContainerRuntimeInfo, Info, NodeInfo } from "./types"; -import Dockerode, { DockerOptions } from "dockerode"; +import { lookupHostIps } from "../utils/lookup-host-ips"; import { getRemoteContainerRuntimeSocketPath } from "../utils/remote-container-runtime-socket-path"; import { resolveHost } from "../utils/resolve-host"; +import { ComposeClient, getComposeClient } from "./compose/compose-client"; +import { ContainerClient } from "./container/container-client"; import { DockerContainerClient } from "./container/docker-container-client"; import { DockerImageClient } from "./image/docker-image-client"; +import { ImageClient } from "./image/image-client"; import { DockerNetworkClient } from "./network/docker-network-client"; -import { lookupHostIps } from "../utils/lookup-host-ips"; -import { isDefined, isEmptyString, log } from "../../common"; -import { LIB_VERSION } from "../../version"; +import { NetworkClient } from "./network/network-client"; +import { ComposeInfo, ContainerRuntimeInfo, Info, NodeInfo } from "./types"; export class ContainerRuntimeClient { constructor( diff --git a/packages/testcontainers/src/container-runtime/clients/compose/compose-client.ts b/packages/testcontainers/src/container-runtime/clients/compose/compose-client.ts index 0007daa55..e4446184c 100644 --- a/packages/testcontainers/src/container-runtime/clients/compose/compose-client.ts +++ b/packages/testcontainers/src/container-runtime/clients/compose/compose-client.ts @@ -1,9 +1,8 @@ -import { ComposeDownOptions, ComposeOptions } from "./types"; -import v1 from "docker-compose"; -import dockerComposeV1, { v2 as dockerComposeV2, v2 } from "docker-compose"; -import { defaultComposeOptions } from "./default-compose-options"; -import { ComposeInfo } from "../types"; +import { default as dockerComposeV1, default as v1, v2 as dockerComposeV2, v2 } from "docker-compose"; import { log, pullLog } from "../../../common"; +import { ComposeInfo } from "../types"; +import { defaultComposeOptions } from "./default-compose-options"; +import { ComposeDownOptions, ComposeOptions } from "./types"; export interface ComposeClient { info: ComposeInfo; diff --git a/packages/testcontainers/src/container-runtime/clients/compose/default-compose-options.ts b/packages/testcontainers/src/container-runtime/clients/compose/default-compose-options.ts index 9dda30f94..fafa25cb4 100644 --- a/packages/testcontainers/src/container-runtime/clients/compose/default-compose-options.ts +++ b/packages/testcontainers/src/container-runtime/clients/compose/default-compose-options.ts @@ -1,7 +1,7 @@ import { IDockerComposeOptions } from "docker-compose"; import { EOL } from "os"; +import { composeLog, isNotEmptyString } from "../../../common"; import { ComposeOptions } from "./types"; -import { isNotEmptyString, composeLog } from "../../../common"; export function defaultComposeOptions( environment: NodeJS.ProcessEnv, diff --git a/packages/testcontainers/src/container-runtime/clients/container/docker-container-client.ts b/packages/testcontainers/src/container-runtime/clients/container/docker-container-client.ts index 16d449824..e5087daf5 100644 --- a/packages/testcontainers/src/container-runtime/clients/container/docker-container-client.ts +++ b/packages/testcontainers/src/container-runtime/clients/container/docker-container-client.ts @@ -7,11 +7,11 @@ import Dockerode, { ExecCreateOptions, Network, } from "dockerode"; -import { PassThrough, Readable } from "stream"; import { IncomingMessage } from "http"; -import { ContainerStatus, ExecOptions, ExecResult } from "./types"; -import { ContainerClient } from "./container-client"; +import { PassThrough, Readable } from "stream"; import { execLog, log, streamToString } from "../../../common"; +import { ContainerClient } from "./container-client"; +import { ContainerStatus, ExecOptions, ExecResult } from "./types"; export class DockerContainerClient implements ContainerClient { constructor(public readonly dockerode: Dockerode) {} diff --git a/packages/testcontainers/src/container-runtime/clients/image/docker-image-client.ts b/packages/testcontainers/src/container-runtime/clients/image/docker-image-client.ts index 47f2fb799..9dd630934 100644 --- a/packages/testcontainers/src/container-runtime/clients/image/docker-image-client.ts +++ b/packages/testcontainers/src/container-runtime/clients/image/docker-image-client.ts @@ -1,14 +1,14 @@ -import Dockerode, { ImageBuildOptions } from "dockerode"; +import dockerIgnore from "@balena/dockerignore"; +import AsyncLock from "async-lock"; import byline from "byline"; -import tar from "tar-fs"; -import path from "path"; +import Dockerode, { ImageBuildOptions } from "dockerode"; import { existsSync, promises as fs } from "fs"; -import dockerIgnore from "@balena/dockerignore"; +import path from "path"; +import tar from "tar-fs"; +import { buildLog, log, pullLog } from "../../../common"; import { getAuthConfig } from "../../auth/get-auth-config"; import { ImageName } from "../../image-name"; import { ImageClient } from "./image-client"; -import AsyncLock from "async-lock"; -import { log, buildLog, pullLog } from "../../../common"; export class DockerImageClient implements ImageClient { private readonly existingImages = new Set(); diff --git a/packages/testcontainers/src/container-runtime/clients/network/docker-network-client.ts b/packages/testcontainers/src/container-runtime/clients/network/docker-network-client.ts index fde9d3981..edc3f4058 100644 --- a/packages/testcontainers/src/container-runtime/clients/network/docker-network-client.ts +++ b/packages/testcontainers/src/container-runtime/clients/network/docker-network-client.ts @@ -1,6 +1,6 @@ import Dockerode, { Network, NetworkCreateOptions } from "dockerode"; -import { NetworkClient } from "./network-client"; import { log } from "../../../common"; +import { NetworkClient } from "./network-client"; export class DockerNetworkClient implements NetworkClient { constructor(protected readonly dockerode: Dockerode) {} diff --git a/packages/testcontainers/src/container-runtime/index.ts b/packages/testcontainers/src/container-runtime/index.ts index 111ab6515..6717aaec5 100644 --- a/packages/testcontainers/src/container-runtime/index.ts +++ b/packages/testcontainers/src/container-runtime/index.ts @@ -1,6 +1,6 @@ -export { ContainerRuntimeClient, getContainerRuntimeClient } from "./clients/client"; -export { ImageName } from "./image-name"; -export { ComposeOptions, ComposeDownOptions } from "./clients/compose/types"; -export { HostIp } from "./clients/types"; export { getAuthConfig } from "./auth/get-auth-config"; +export { ContainerRuntimeClient, getContainerRuntimeClient } from "./clients/client"; export { parseComposeContainerName } from "./clients/compose/parse-compose-container-name"; +export { ComposeDownOptions, ComposeOptions } from "./clients/compose/types"; +export { HostIp } from "./clients/types"; +export { ImageName } from "./image-name"; diff --git a/packages/testcontainers/src/container-runtime/strategies/configuration-strategy.test.ts b/packages/testcontainers/src/container-runtime/strategies/configuration-strategy.test.ts index a561fc5ed..c7f027c9b 100644 --- a/packages/testcontainers/src/container-runtime/strategies/configuration-strategy.test.ts +++ b/packages/testcontainers/src/container-runtime/strategies/configuration-strategy.test.ts @@ -1,12 +1,12 @@ +import { readFile } from "fs/promises"; import { ConfigurationStrategy } from "./configuration-strategy"; import { getContainerRuntimeConfig } from "./utils/config"; -import { readFile } from "fs/promises"; -jest.mock("./utils/config"); -jest.mock("fs/promises"); +vi.mock("./utils/config"); +vi.mock("fs/promises"); -const mockGetContainerRuntimeConfig = jest.mocked(getContainerRuntimeConfig); -const mockReadFile = jest.mocked(readFile); +const mockGetContainerRuntimeConfig = vi.mocked(getContainerRuntimeConfig); +const mockReadFile = vi.mocked(readFile); describe("ConfigurationStrategy", () => { it("should return undefined if no docker host is set", async () => { diff --git a/packages/testcontainers/src/container-runtime/strategies/configuration-strategy.ts b/packages/testcontainers/src/container-runtime/strategies/configuration-strategy.ts index 43c255a64..874a313ba 100644 --- a/packages/testcontainers/src/container-runtime/strategies/configuration-strategy.ts +++ b/packages/testcontainers/src/container-runtime/strategies/configuration-strategy.ts @@ -1,10 +1,10 @@ -import { getContainerRuntimeConfig } from "./utils/config"; import { DockerOptions } from "dockerode"; -import { URL } from "url"; import fs from "fs/promises"; import path from "path"; -import { ContainerRuntimeClientStrategyResult } from "./types"; +import { URL } from "url"; import { ContainerRuntimeClientStrategy } from "./strategy"; +import { ContainerRuntimeClientStrategyResult } from "./types"; +import { getContainerRuntimeConfig } from "./utils/config"; export class ConfigurationStrategy implements ContainerRuntimeClientStrategy { private dockerHost!: string; diff --git a/packages/testcontainers/src/container-runtime/strategies/rootless-unix-socket-strategy.test.ts b/packages/testcontainers/src/container-runtime/strategies/rootless-unix-socket-strategy.test.ts index 6f6deea1d..6f84e5225 100644 --- a/packages/testcontainers/src/container-runtime/strategies/rootless-unix-socket-strategy.test.ts +++ b/packages/testcontainers/src/container-runtime/strategies/rootless-unix-socket-strategy.test.ts @@ -1,12 +1,12 @@ import { existsSync } from "fs"; -import { RootlessUnixSocketStrategy } from "./rootless-unix-socket-strategy"; import os from "os"; import path from "path"; +import { RootlessUnixSocketStrategy } from "./rootless-unix-socket-strategy"; -jest.mock("fs", () => ({ existsSync: jest.fn() })); +vi.mock("fs", () => ({ existsSync: vi.fn() })); describe("RootlessUnixSocketStrategy", () => { - const mockExistsSync = jest.mocked(existsSync); + const mockExistsSync = vi.mocked(existsSync); it("should return undefined for non-linux and non-darwin platforms", async () => { mockExistsSync.mockReturnValue(true); diff --git a/packages/testcontainers/src/container-runtime/strategies/rootless-unix-socket-strategy.ts b/packages/testcontainers/src/container-runtime/strategies/rootless-unix-socket-strategy.ts index 7a2ad5f53..7d08d6558 100644 --- a/packages/testcontainers/src/container-runtime/strategies/rootless-unix-socket-strategy.ts +++ b/packages/testcontainers/src/container-runtime/strategies/rootless-unix-socket-strategy.ts @@ -1,9 +1,9 @@ import { existsSync } from "fs"; -import path from "path"; import os from "os"; +import path from "path"; +import { isDefined } from "../../common"; import { ContainerRuntimeClientStrategy } from "./strategy"; import { ContainerRuntimeClientStrategyResult } from "./types"; -import { isDefined } from "../../common"; export class RootlessUnixSocketStrategy implements ContainerRuntimeClientStrategy { constructor( diff --git a/packages/testcontainers/src/container-runtime/strategies/testcontainers-host-strategy.test.ts b/packages/testcontainers/src/container-runtime/strategies/testcontainers-host-strategy.test.ts index 3363d527d..4c499320c 100644 --- a/packages/testcontainers/src/container-runtime/strategies/testcontainers-host-strategy.test.ts +++ b/packages/testcontainers/src/container-runtime/strategies/testcontainers-host-strategy.test.ts @@ -1,7 +1,7 @@ import { TestcontainersHostStrategy } from "./testcontainers-host-strategy"; -const mockGetContainerRuntimeConfig = jest.fn(); -jest.mock("./utils/config", () => ({ +const mockGetContainerRuntimeConfig = vi.fn(); +vi.mock("./utils/config", () => ({ getContainerRuntimeConfig: () => mockGetContainerRuntimeConfig(), })); diff --git a/packages/testcontainers/src/container-runtime/strategies/testcontainers-host-strategy.ts b/packages/testcontainers/src/container-runtime/strategies/testcontainers-host-strategy.ts index 9a44802d3..10e92333d 100644 --- a/packages/testcontainers/src/container-runtime/strategies/testcontainers-host-strategy.ts +++ b/packages/testcontainers/src/container-runtime/strategies/testcontainers-host-strategy.ts @@ -1,8 +1,8 @@ -import { getContainerRuntimeConfig } from "./utils/config"; import { DockerOptions } from "dockerode"; import { URL } from "url"; import { ContainerRuntimeClientStrategy } from "./strategy"; import { ContainerRuntimeClientStrategyResult } from "./types"; +import { getContainerRuntimeConfig } from "./utils/config"; export class TestcontainersHostStrategy implements ContainerRuntimeClientStrategy { getName(): string { diff --git a/packages/testcontainers/src/container-runtime/strategies/unix-socket-strategy.test.ts b/packages/testcontainers/src/container-runtime/strategies/unix-socket-strategy.test.ts index af3fd8162..d18c5faca 100644 --- a/packages/testcontainers/src/container-runtime/strategies/unix-socket-strategy.test.ts +++ b/packages/testcontainers/src/container-runtime/strategies/unix-socket-strategy.test.ts @@ -1,8 +1,8 @@ import { existsSync } from "fs"; import { UnixSocketStrategy } from "./unix-socket-strategy"; -jest.mock("fs"); -const mockExistsSync = jest.mocked(existsSync); +vi.mock("fs"); +const mockExistsSync = vi.mocked(existsSync); describe("UnixSocketStrategy", () => { beforeEach(() => { diff --git a/packages/testcontainers/src/container-runtime/strategies/utils/config.test.ts b/packages/testcontainers/src/container-runtime/strategies/utils/config.test.ts index 41cd4dd31..07d0eb33f 100644 --- a/packages/testcontainers/src/container-runtime/strategies/utils/config.test.ts +++ b/packages/testcontainers/src/container-runtime/strategies/utils/config.test.ts @@ -1,9 +1,9 @@ import { GetContainerRuntimeConfig } from "./config"; -const mockExistsSync = jest.fn(); -jest.mock("fs", () => ({ existsSync: mockExistsSync })); -const mockReadFile = jest.fn(); -jest.mock("fs/promises", () => ({ readFile: mockReadFile })); +const mockExistsSync = vi.fn(); +vi.mock("fs", () => ({ existsSync: mockExistsSync })); +const mockReadFile = vi.fn(); +vi.mock("fs/promises", () => ({ readFile: mockReadFile })); let getContainerRuntimeConfig: GetContainerRuntimeConfig; @@ -12,7 +12,7 @@ beforeEach(async () => { }); afterEach(() => { - jest.resetModules(); + vi.resetModules(); }); test("should not set anything", async () => { diff --git a/packages/testcontainers/src/container-runtime/strategies/utils/config.ts b/packages/testcontainers/src/container-runtime/strategies/utils/config.ts index 6960588a1..74ccaa3c9 100644 --- a/packages/testcontainers/src/container-runtime/strategies/utils/config.ts +++ b/packages/testcontainers/src/container-runtime/strategies/utils/config.ts @@ -1,7 +1,7 @@ -import path from "path"; -import { homedir } from "os"; import { existsSync } from "fs"; import { readFile } from "fs/promises"; +import { homedir } from "os"; +import path from "path"; import propertiesReader from "properties-reader"; import { log } from "../../../common"; diff --git a/packages/testcontainers/src/container-runtime/utils/attach-container.ts b/packages/testcontainers/src/container-runtime/utils/attach-container.ts index aae61d62a..4e12c2cce 100644 --- a/packages/testcontainers/src/container-runtime/utils/attach-container.ts +++ b/packages/testcontainers/src/container-runtime/utils/attach-container.ts @@ -1,7 +1,7 @@ -import { Readable } from "stream"; import Dockerode from "dockerode"; -import { demuxStream } from "./demux-stream"; +import { Readable } from "stream"; import { log } from "../../common"; +import { demuxStream } from "./demux-stream"; export const attachContainer = async (dockerode: Dockerode, container: Dockerode.Container): Promise => { try { diff --git a/packages/testcontainers/src/container-runtime/utils/demux-stream.ts b/packages/testcontainers/src/container-runtime/utils/demux-stream.ts index 2fa0c1ba2..59a145f41 100644 --- a/packages/testcontainers/src/container-runtime/utils/demux-stream.ts +++ b/packages/testcontainers/src/container-runtime/utils/demux-stream.ts @@ -1,5 +1,5 @@ -import { PassThrough, Readable } from "stream"; import Dockerode from "dockerode"; +import { PassThrough, Readable } from "stream"; import { log } from "../../common"; export async function demuxStream(dockerode: Dockerode, stream: Readable): Promise { diff --git a/packages/testcontainers/src/container-runtime/utils/image-exists.test.ts b/packages/testcontainers/src/container-runtime/utils/image-exists.test.ts index 1a829bfd7..f6b21b95d 100644 --- a/packages/testcontainers/src/container-runtime/utils/image-exists.test.ts +++ b/packages/testcontainers/src/container-runtime/utils/image-exists.test.ts @@ -1,21 +1,20 @@ import Dockerode from "dockerode"; +import { afterEach } from "vitest"; import { ImageName } from "../image-name"; -const mockImageInspect = jest.fn(); -jest.mock( - "dockerode", - () => - function () { - return { - getImage: () => ({ - inspect: mockImageInspect, - }), - }; - } -); +const mockImageInspect = vi.fn(); +vi.mock("dockerode", () => { + return { + default: vi.fn(() => ({ + getImage: () => ({ + inspect: mockImageInspect, + }), + })), + }; +}); afterEach(() => { - jest.resetModules(); + vi.resetModules(); }); test("returns true when image exists", async () => { diff --git a/packages/testcontainers/src/container-runtime/utils/image-exists.ts b/packages/testcontainers/src/container-runtime/utils/image-exists.ts index 0040ac542..b8f385aa6 100644 --- a/packages/testcontainers/src/container-runtime/utils/image-exists.ts +++ b/packages/testcontainers/src/container-runtime/utils/image-exists.ts @@ -1,5 +1,5 @@ -import Dockerode from "dockerode"; import AsyncLock from "async-lock"; +import Dockerode from "dockerode"; import { ImageName } from "../image-name"; const existingImages = new Set(); diff --git a/packages/testcontainers/src/container-runtime/utils/lookup-host-ips.test.ts b/packages/testcontainers/src/container-runtime/utils/lookup-host-ips.test.ts index 741dfcb45..ef56a59b1 100644 --- a/packages/testcontainers/src/container-runtime/utils/lookup-host-ips.test.ts +++ b/packages/testcontainers/src/container-runtime/utils/lookup-host-ips.test.ts @@ -1,12 +1,10 @@ -import { lookupHostIps } from "./lookup-host-ips"; import { HostIp } from "../clients/types"; +import { lookupHostIps } from "./lookup-host-ips"; -const mockDnsLookup = jest.fn(); -jest.mock("dns", () => { +const mockDnsLookup = vi.fn(); +vi.mock("dns/promises", () => { return { - promises: { - lookup: () => mockDnsLookup(), - }, + lookup: () => mockDnsLookup(), }; }); diff --git a/packages/testcontainers/src/container-runtime/utils/lookup-host-ips.ts b/packages/testcontainers/src/container-runtime/utils/lookup-host-ips.ts index 49f6c9ab3..07e31b3dc 100644 --- a/packages/testcontainers/src/container-runtime/utils/lookup-host-ips.ts +++ b/packages/testcontainers/src/container-runtime/utils/lookup-host-ips.ts @@ -1,10 +1,10 @@ +import { lookup as dnsLookup } from "dns/promises"; import net from "net"; -import dns from "dns"; import { HostIp } from "../clients/types"; export const lookupHostIps = async (host: string): Promise => { if (net.isIP(host) === 0) { - return await dns.promises.lookup(host, { all: true }); + return await dnsLookup(host, { all: true }); } else { return [{ address: host, family: net.isIP(host) }]; } diff --git a/packages/testcontainers/src/container-runtime/utils/pull-image.ts b/packages/testcontainers/src/container-runtime/utils/pull-image.ts index 3b7cac01d..99cc5d780 100644 --- a/packages/testcontainers/src/container-runtime/utils/pull-image.ts +++ b/packages/testcontainers/src/container-runtime/utils/pull-image.ts @@ -1,9 +1,9 @@ -import { imageExists } from "./image-exists"; -import Dockerode from "dockerode"; import byline from "byline"; +import Dockerode from "dockerode"; +import { log, pullLog } from "../../common"; import { getAuthConfig } from "../auth/get-auth-config"; import { ImageName } from "../image-name"; -import { log, pullLog } from "../../common"; +import { imageExists } from "./image-exists"; export type PullImageOptions = { imageName: ImageName; diff --git a/packages/testcontainers/src/container-runtime/utils/remote-container-runtime-socket-path.test.ts b/packages/testcontainers/src/container-runtime/utils/remote-container-runtime-socket-path.test.ts index 6e34866a6..e482219c2 100644 --- a/packages/testcontainers/src/container-runtime/utils/remote-container-runtime-socket-path.test.ts +++ b/packages/testcontainers/src/container-runtime/utils/remote-container-runtime-socket-path.test.ts @@ -1,5 +1,5 @@ -import { getRemoteContainerRuntimeSocketPath } from "./remote-container-runtime-socket-path"; import { ContainerRuntimeClientStrategyResult } from "../strategies/types"; +import { getRemoteContainerRuntimeSocketPath } from "./remote-container-runtime-socket-path"; test("should return TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE when provided", () => { const strategyResult = { diff --git a/packages/testcontainers/src/container-runtime/utils/resolve-host.test.ts b/packages/testcontainers/src/container-runtime/utils/resolve-host.test.ts index c7fe02ea8..b2c029363 100644 --- a/packages/testcontainers/src/container-runtime/utils/resolve-host.test.ts +++ b/packages/testcontainers/src/container-runtime/utils/resolve-host.test.ts @@ -1,31 +1,29 @@ -import { resolveHost } from "./resolve-host"; import Dockerode from "dockerode"; import { ContainerRuntimeClientStrategyResult } from "../strategies/types"; +import { resolveHost } from "./resolve-host"; -const mockExistsSync = jest.fn(); -jest.mock("fs", () => ({ +const mockExistsSync = vi.fn(); +vi.mock("fs", () => ({ existsSync: () => mockExistsSync(), })); -const mockInspectNetwork = jest.fn(); -const mockGetNetwork = jest.fn(); -jest.mock( - "dockerode", - () => - function () { - return { - getNetwork: (...args: unknown[]) => { - mockGetNetwork.mockImplementation(() => ({ - inspect: mockInspectNetwork, - })); - return mockGetNetwork(...args); - }, - }; - } -); - -const runInContainerMock = jest.fn(); -jest.mock("./run-in-container", () => ({ +const mockInspectNetwork = vi.fn(); +const mockGetNetwork = vi.fn(); +vi.mock("dockerode", () => { + return { + default: vi.fn(() => ({ + getNetwork: (...args: unknown[]) => { + mockGetNetwork.mockImplementation(() => ({ + inspect: mockInspectNetwork, + })); + return mockGetNetwork(...args); + }, + })), + }; +}); + +const runInContainerMock = vi.fn(); +vi.mock("./run-in-container", () => ({ runInContainer: () => runInContainerMock(), })); diff --git a/packages/testcontainers/src/container-runtime/utils/resolve-host.ts b/packages/testcontainers/src/container-runtime/utils/resolve-host.ts index 7fa531999..2dc18e6d5 100644 --- a/packages/testcontainers/src/container-runtime/utils/resolve-host.ts +++ b/packages/testcontainers/src/container-runtime/utils/resolve-host.ts @@ -1,9 +1,9 @@ import Dockerode, { NetworkInspectInfo } from "dockerode"; -import { URL } from "url"; import { existsSync } from "fs"; +import { URL } from "url"; +import { log } from "../../common"; import { ContainerRuntimeClientStrategyResult } from "../strategies/types"; import { runInContainer } from "./run-in-container"; -import { log } from "../../common"; export const resolveHost = async ( dockerode: Dockerode, diff --git a/packages/testcontainers/src/container-runtime/utils/run-in-container.test.ts b/packages/testcontainers/src/container-runtime/utils/run-in-container.test.ts index e16c9fd09..3f7c15cd3 100644 --- a/packages/testcontainers/src/container-runtime/utils/run-in-container.test.ts +++ b/packages/testcontainers/src/container-runtime/utils/run-in-container.test.ts @@ -1,10 +1,8 @@ -import { runInContainer } from "./run-in-container"; import Dockerode from "dockerode"; import { getContainerRuntimeClient } from "../clients/client"; +import { runInContainer } from "./run-in-container"; -describe("runInContainer", () => { - jest.setTimeout(180_000); - +describe("runInContainer", { timeout: 180_000 }, () => { let dockerode: Dockerode; beforeAll(async () => { diff --git a/packages/testcontainers/src/container-runtime/utils/run-in-container.ts b/packages/testcontainers/src/container-runtime/utils/run-in-container.ts index b3a14fe5a..2c1c50d6a 100644 --- a/packages/testcontainers/src/container-runtime/utils/run-in-container.ts +++ b/packages/testcontainers/src/container-runtime/utils/run-in-container.ts @@ -1,9 +1,9 @@ import Dockerode from "dockerode"; -import { pullImage } from "./pull-image"; +import { log, streamToString } from "../../common"; import { ImageName } from "../image-name"; import { attachContainer } from "./attach-container"; +import { pullImage } from "./pull-image"; import { startContainer } from "./start-container"; -import { log, streamToString } from "../../common"; export const runInContainer = async ( dockerode: Dockerode, diff --git a/packages/testcontainers/src/docker-compose-environment/docker-compose-environment.test.ts b/packages/testcontainers/src/docker-compose-environment/docker-compose-environment.test.ts index f2c099d61..f2673fb07 100644 --- a/packages/testcontainers/src/docker-compose-environment/docker-compose-environment.test.ts +++ b/packages/testcontainers/src/docker-compose-environment/docker-compose-environment.test.ts @@ -1,7 +1,6 @@ import path from "path"; -import { DockerComposeEnvironment } from "./docker-compose-environment"; import { RandomUuid } from "../common"; -import { Wait } from "../wait-strategies/wait"; +import { randomUuid } from "../common/uuid"; import { PullPolicy } from "../utils/pull-policy"; import { checkEnvironmentContainerIsHealthy, @@ -11,10 +10,10 @@ import { getVolumeNames, waitForDockerEvent, } from "../utils/test-helper"; +import { Wait } from "../wait-strategies/wait"; +import { DockerComposeEnvironment } from "./docker-compose-environment"; -describe("DockerComposeEnvironment", () => { - jest.setTimeout(180_000); - +describe("DockerComposeEnvironment", { timeout: 180_000 }, () => { const fixtures = path.resolve(__dirname, "..", "..", "fixtures", "docker-compose"); it("should throw error when compose file is malformed", async () => { @@ -34,9 +33,12 @@ describe("DockerComposeEnvironment", () => { }); it("should start container with a given name", async () => { - const startedEnvironment = await new DockerComposeEnvironment(fixtures, "docker-compose-with-name.yml").up(); + const name = `custom_container_name_${randomUuid()}`; + const startedEnvironment = await new DockerComposeEnvironment(fixtures, "docker-compose-with-name.yml") + .withEnvironment({ CONTAINER_NAME: name }) + .up(); - await checkEnvironmentContainerIsHealthy(startedEnvironment, "custom_container_name"); + await checkEnvironmentContainerIsHealthy(startedEnvironment, name); await startedEnvironment.down(); }); @@ -103,14 +105,16 @@ describe("DockerComposeEnvironment", () => { }); it("should stop the container when the log message wait strategy times out", async () => { + const name = `custom_container_name_${randomUuid()}`; await expect( new DockerComposeEnvironment(fixtures, "docker-compose-with-name.yml") - .withWaitStrategy("custom_container_name", Wait.forLogMessage("unexpected")) + .withEnvironment({ CONTAINER_NAME: name }) + .withWaitStrategy(name, Wait.forLogMessage("unexpected")) .withStartupTimeout(0) .up() ).rejects.toThrow(`Log message "unexpected" not received after 0ms`); - expect(await getRunningContainerNames()).not.toContain("custom_container_name"); + expect(await getRunningContainerNames()).not.toContain(name); }); it("should support health check wait strategy", async () => { @@ -212,9 +216,11 @@ describe("DockerComposeEnvironment", () => { it("should not recreate the containers when no recreate option is set", async () => { const startedEnvironment1 = await new DockerComposeEnvironment(fixtures, "docker-compose-with-name.yml") + .withEnvironment({ CONTAINER_NAME: `custom_container_name_${randomUuid()}` }) .withNoRecreate() .up(); const startedEnvironment2 = await new DockerComposeEnvironment(fixtures, "docker-compose-with-name.yml") + .withEnvironment({ CONTAINER_NAME: `custom_container_name_${randomUuid()}` }) .withNoRecreate() .up(); diff --git a/packages/testcontainers/src/docker-compose-environment/docker-compose-environment.ts b/packages/testcontainers/src/docker-compose-environment/docker-compose-environment.ts index 48043fc7a..e7664a957 100644 --- a/packages/testcontainers/src/docker-compose-environment/docker-compose-environment.ts +++ b/packages/testcontainers/src/docker-compose-environment/docker-compose-environment.ts @@ -1,16 +1,16 @@ import { ContainerInfo } from "dockerode"; -import { StartedGenericContainer } from "../generic-container/started-generic-container"; -import { WaitStrategy } from "../wait-strategies/wait-strategy"; -import { Environment } from "../types"; -import { StartedDockerComposeEnvironment } from "./started-docker-compose-environment"; -import { Wait } from "../wait-strategies/wait"; -import { waitForContainer } from "../wait-strategies/wait-for-container"; -import { ImagePullPolicy, PullPolicy } from "../utils/pull-policy"; -import { log, RandomUuid, Uuid, containerLog } from "../common"; +import { containerLog, log, RandomUuid, Uuid } from "../common"; import { getContainerRuntimeClient, parseComposeContainerName } from "../container-runtime"; +import { StartedGenericContainer } from "../generic-container/started-generic-container"; import { getReaper } from "../reaper/reaper"; +import { Environment } from "../types"; import { BoundPorts } from "../utils/bound-ports"; import { mapInspectResult } from "../utils/map-inspect-result"; +import { ImagePullPolicy, PullPolicy } from "../utils/pull-policy"; +import { Wait } from "../wait-strategies/wait"; +import { waitForContainer } from "../wait-strategies/wait-for-container"; +import { WaitStrategy } from "../wait-strategies/wait-strategy"; +import { StartedDockerComposeEnvironment } from "./started-docker-compose-environment"; export class DockerComposeEnvironment { private readonly composeFilePath: string; diff --git a/packages/testcontainers/src/docker-compose-environment/started-docker-compose-environment.ts b/packages/testcontainers/src/docker-compose-environment/started-docker-compose-environment.ts index 162398648..4a645458c 100644 --- a/packages/testcontainers/src/docker-compose-environment/started-docker-compose-environment.ts +++ b/packages/testcontainers/src/docker-compose-environment/started-docker-compose-environment.ts @@ -1,8 +1,8 @@ +import { log } from "../common"; +import { ComposeDownOptions, ComposeOptions, getContainerRuntimeClient } from "../container-runtime"; import { StartedGenericContainer } from "../generic-container/started-generic-container"; -import { StoppedDockerComposeEnvironment } from "./stopped-docker-compose-environment"; import { DownedDockerComposeEnvironment } from "./downed-docker-compose-environment"; -import { ComposeDownOptions, ComposeOptions, getContainerRuntimeClient } from "../container-runtime"; -import { log } from "../common"; +import { StoppedDockerComposeEnvironment } from "./stopped-docker-compose-environment"; export class StartedDockerComposeEnvironment { constructor( diff --git a/packages/testcontainers/src/docker-compose-environment/stopped-docker-compose-environment.ts b/packages/testcontainers/src/docker-compose-environment/stopped-docker-compose-environment.ts index f8a2726e8..8fd492710 100644 --- a/packages/testcontainers/src/docker-compose-environment/stopped-docker-compose-environment.ts +++ b/packages/testcontainers/src/docker-compose-environment/stopped-docker-compose-environment.ts @@ -1,5 +1,5 @@ -import { DownedDockerComposeEnvironment } from "./downed-docker-compose-environment"; import { ComposeDownOptions, ComposeOptions, getContainerRuntimeClient } from "../container-runtime"; +import { DownedDockerComposeEnvironment } from "./downed-docker-compose-environment"; export class StoppedDockerComposeEnvironment { constructor(private readonly options: ComposeOptions) {} diff --git a/packages/testcontainers/src/generic-container/abstract-started-container.ts b/packages/testcontainers/src/generic-container/abstract-started-container.ts index d5cd65278..d4b7f40f1 100644 --- a/packages/testcontainers/src/generic-container/abstract-started-container.ts +++ b/packages/testcontainers/src/generic-container/abstract-started-container.ts @@ -1,6 +1,6 @@ +import { Readable } from "stream"; import { RestartOptions, StartedTestContainer, StopOptions, StoppedTestContainer } from "../test-container"; import { ContentToCopy, DirectoryToCopy, ExecOptions, ExecResult, FileToCopy, Labels } from "../types"; -import { Readable } from "stream"; export class AbstractStartedContainer implements StartedTestContainer { constructor(protected readonly startedTestContainer: StartedTestContainer) {} diff --git a/packages/testcontainers/src/generic-container/generic-container-builder.ts b/packages/testcontainers/src/generic-container/generic-container-builder.ts index 25ee2c329..18bfb8879 100644 --- a/packages/testcontainers/src/generic-container/generic-container-builder.ts +++ b/packages/testcontainers/src/generic-container/generic-container-builder.ts @@ -1,13 +1,13 @@ -import { AuthConfig, BuildArgs, RegistryConfig } from "../types"; import type { ImageBuildOptions } from "dockerode"; import path from "path"; -import { GenericContainer } from "./generic-container"; -import { ImagePullPolicy, PullPolicy } from "../utils/pull-policy"; import { log, RandomUuid, Uuid } from "../common"; import { getAuthConfig, getContainerRuntimeClient, ImageName } from "../container-runtime"; import { getReaper } from "../reaper/reaper"; +import { AuthConfig, BuildArgs, RegistryConfig } from "../types"; import { getDockerfileImages } from "../utils/dockerfile-parser"; import { createLabels, LABEL_TESTCONTAINERS_SESSION_ID } from "../utils/labels"; +import { ImagePullPolicy, PullPolicy } from "../utils/pull-policy"; +import { GenericContainer } from "./generic-container"; export type BuildOptions = { deleteOnExit: boolean; diff --git a/packages/testcontainers/src/generic-container/generic-container-dockerfile.test.ts b/packages/testcontainers/src/generic-container/generic-container-dockerfile.test.ts index dcdc2e294..e25e1a819 100644 --- a/packages/testcontainers/src/generic-container/generic-container-dockerfile.test.ts +++ b/packages/testcontainers/src/generic-container/generic-container-dockerfile.test.ts @@ -1,11 +1,9 @@ import path from "path"; -import { GenericContainer } from "./generic-container"; -import { Wait } from "../wait-strategies/wait"; -import { PullPolicy } from "../utils/pull-policy"; import { RandomUuid } from "../common"; -import { ImageName, getContainerRuntimeClient } from "../container-runtime"; +import { getContainerRuntimeClient, ImageName } from "../container-runtime"; import { getReaper } from "../reaper/reaper"; import { LABEL_TESTCONTAINERS_SESSION_ID } from "../utils/labels"; +import { PullPolicy } from "../utils/pull-policy"; import { checkContainerIsHealthy, deleteImageByName, @@ -13,10 +11,10 @@ import { getImageLabelsByName, waitForDockerEvent, } from "../utils/test-helper"; +import { Wait } from "../wait-strategies/wait"; +import { GenericContainer } from "./generic-container"; -describe("GenericContainer Dockerfile", () => { - jest.setTimeout(180_000); - +describe("GenericContainer Dockerfile", { timeout: 180_000 }, () => { const uuidGen = new RandomUuid(); const fixtures = path.resolve(__dirname, "..", "..", "fixtures", "docker"); diff --git a/packages/testcontainers/src/generic-container/generic-container-lifecycle.test.ts b/packages/testcontainers/src/generic-container/generic-container-lifecycle.test.ts index 99b7daf9b..db5c9c9f3 100644 --- a/packages/testcontainers/src/generic-container/generic-container-lifecycle.test.ts +++ b/packages/testcontainers/src/generic-container/generic-container-lifecycle.test.ts @@ -1,22 +1,21 @@ +import { Mock } from "vitest"; import { AbstractStartedContainer, GenericContainer, InspectResult, StartedTestContainer } from "../index"; -describe("GenericContainer lifecycle", () => { - jest.setTimeout(180_000); - - let beforeContainerCreated: jest.Func; - let containerCreated: jest.Func; - let containerStarting: jest.Func; - let containerStarted: jest.Func; - let containerStopping: jest.Func; - let containerStopped: jest.Func; +describe("GenericContainer lifecycle", { timeout: 180_000 }, () => { + let beforeContainerCreated: Mock; + let containerCreated: Mock; + let containerStarting: Mock; + let containerStarted: Mock; + let containerStopping: Mock; + let containerStopped: Mock; beforeEach(() => { - beforeContainerCreated = jest.fn(); - containerCreated = jest.fn(); - containerStarting = jest.fn(); - containerStarted = jest.fn(); - containerStopping = jest.fn(); - containerStopped = jest.fn(); + beforeContainerCreated = vi.fn(); + containerCreated = vi.fn(); + containerStarting = vi.fn(); + containerStarted = vi.fn(); + containerStopping = vi.fn(); + containerStopped = vi.fn(); }); it("should call lifecycle callbacks for a non-reused, generic container", async () => { diff --git a/packages/testcontainers/src/generic-container/generic-container-logs.test.ts b/packages/testcontainers/src/generic-container/generic-container-logs.test.ts index b712fe2d4..85a1c565b 100644 --- a/packages/testcontainers/src/generic-container/generic-container-logs.test.ts +++ b/packages/testcontainers/src/generic-container/generic-container-logs.test.ts @@ -1,10 +1,8 @@ -import { GenericContainer } from "./generic-container"; import { containerLog } from "../common"; import { Wait } from "../wait-strategies/wait"; +import { GenericContainer } from "./generic-container"; -describe("GenericContainer logs", () => { - jest.setTimeout(180_000); - +describe("GenericContainer logs", { timeout: 180_000 }, () => { it("should stream logs from a container before start", async () => { const line = await new Promise((resolve) => { return new GenericContainer("cristianrgreco/testcontainer:1.1.14") @@ -54,7 +52,7 @@ describe("GenericContainer logs", () => { }); it("should stream logs from a running container after restart", async () => { - const containerLogTraceSpy = jest.spyOn(containerLog, "trace"); + const containerLogTraceSpy = vi.spyOn(containerLog, "trace"); const container = await new GenericContainer("cristianrgreco/testcontainer:1.1.14").withExposedPorts(8080).start(); await container.restart(); diff --git a/packages/testcontainers/src/generic-container/generic-container-network.test.ts b/packages/testcontainers/src/generic-container/generic-container-network.test.ts index 49a43371c..03e3af41e 100644 --- a/packages/testcontainers/src/generic-container/generic-container-network.test.ts +++ b/packages/testcontainers/src/generic-container/generic-container-network.test.ts @@ -1,10 +1,8 @@ -import { GenericContainer } from "./generic-container"; import { getContainerRuntimeClient } from "../container-runtime"; import { Network } from "../network/network"; +import { GenericContainer } from "./generic-container"; -describe("GenericContainer network", () => { - jest.setTimeout(180_000); - +describe("GenericContainer network", { timeout: 180_000 }, () => { it("should set network mode", async () => { const client = await getContainerRuntimeClient(); const container = await new GenericContainer("cristianrgreco/testcontainer:1.1.14").withNetworkMode("host").start(); diff --git a/packages/testcontainers/src/generic-container/generic-container-resources-quota.test.ts b/packages/testcontainers/src/generic-container/generic-container-resources-quota.test.ts index 30f2e4a95..a99376a7e 100644 --- a/packages/testcontainers/src/generic-container/generic-container-resources-quota.test.ts +++ b/packages/testcontainers/src/generic-container/generic-container-resources-quota.test.ts @@ -1,9 +1,7 @@ -import { GenericContainer } from "./generic-container"; import { ContainerRuntimeClient, getContainerRuntimeClient } from "../container-runtime"; +import { GenericContainer } from "./generic-container"; -describe("GenericContainer resources quota", () => { - jest.setTimeout(180_000); - +describe("GenericContainer resources quota", { timeout: 180_000 }, () => { let client: ContainerRuntimeClient; beforeAll(async () => { diff --git a/packages/testcontainers/src/generic-container/generic-container-restart.test.ts b/packages/testcontainers/src/generic-container/generic-container-restart.test.ts index 24469f4aa..68e721ed0 100644 --- a/packages/testcontainers/src/generic-container/generic-container-restart.test.ts +++ b/packages/testcontainers/src/generic-container/generic-container-restart.test.ts @@ -1,10 +1,8 @@ -import { GenericContainer } from "./generic-container"; import { RandomUuid } from "../common"; import { checkContainerIsHealthy } from "../utils/test-helper"; +import { GenericContainer } from "./generic-container"; -describe("GenericContainer restart", () => { - jest.setTimeout(180_000); - +describe("GenericContainer restart", { timeout: 180_000 }, () => { it("should restart", async () => { const container = await new GenericContainer("cristianrgreco/testcontainer:1.1.14") .withName(`container-${new RandomUuid().nextUuid()}`) diff --git a/packages/testcontainers/src/generic-container/generic-container-reuse.test.ts b/packages/testcontainers/src/generic-container/generic-container-reuse.test.ts index 10fedf336..6d53b7cbc 100644 --- a/packages/testcontainers/src/generic-container/generic-container-reuse.test.ts +++ b/packages/testcontainers/src/generic-container/generic-container-reuse.test.ts @@ -1,26 +1,23 @@ -import { GenericContainer } from "./generic-container"; +import { randomUuid } from "../common/uuid"; import { checkContainerIsHealthy } from "../utils/test-helper"; +import { GenericContainer } from "./generic-container"; -describe("GenericContainer reuse", () => { - jest.setTimeout(180_000); - +describe("GenericContainer reuse", { timeout: 180_000 }, () => { afterEach(() => { process.env.TESTCONTAINERS_REUSE_ENABLE = undefined; }); it("should not reuse the container by default", async () => { + const name = `there_can_only_be_one_${randomUuid()}`; const container = await new GenericContainer("cristianrgreco/testcontainer:1.1.14") - .withName("there_can_only_be_one") + .withName(name) .withExposedPorts(8080) .start(); await checkContainerIsHealthy(container); try { await expect(() => - new GenericContainer("cristianrgreco/testcontainer:1.1.14") - .withName("there_can_only_be_one") - .withExposedPorts(8080) - .start() + new GenericContainer("cristianrgreco/testcontainer:1.1.14").withName(name).withExposedPorts(8080).start() ).rejects.toThrowError(); } finally { await container.stop(); @@ -28,8 +25,9 @@ describe("GenericContainer reuse", () => { }); it("should not reuse the container even when there is a candidate 1", async () => { + const name = `there_can_only_be_one_${randomUuid()}`; const container = await new GenericContainer("cristianrgreco/testcontainer:1.1.14") - .withName("there_can_only_be_one") + .withName(name) .withExposedPorts(8080) .withReuse() .start(); @@ -37,10 +35,7 @@ describe("GenericContainer reuse", () => { try { await expect(() => - new GenericContainer("cristianrgreco/testcontainer:1.1.14") - .withName("there_can_only_be_one") - .withExposedPorts(8080) - .start() + new GenericContainer("cristianrgreco/testcontainer:1.1.14").withName(name).withExposedPorts(8080).start() ).rejects.toThrowError(); } finally { await container.stop(); @@ -48,8 +43,9 @@ describe("GenericContainer reuse", () => { }); it("should not reuse the container even when there is a candidate 2", async () => { + const name = `there_can_only_be_one_${randomUuid()}`; const container = await new GenericContainer("cristianrgreco/testcontainer:1.1.14") - .withName("there_can_only_be_one") + .withName(name) .withExposedPorts(8080) .start(); await checkContainerIsHealthy(container); @@ -57,7 +53,7 @@ describe("GenericContainer reuse", () => { try { await expect(() => new GenericContainer("cristianrgreco/testcontainer:1.1.14") - .withName("there_can_only_be_one") + .withName(name) .withExposedPorts(8080) .withReuse() .start() @@ -70,8 +66,9 @@ describe("GenericContainer reuse", () => { it("should not reuse the container when TESTCONTAINERS_REUSE_ENABLE is set to false", async () => { process.env.TESTCONTAINERS_REUSE_ENABLE = "false"; + const name = `there_can_only_be_one_${randomUuid()}`; const container = await new GenericContainer("cristianrgreco/testcontainer:1.1.14") - .withName("there_can_only_be_one") + .withName(name) .withExposedPorts(8080) .withReuse() .start(); @@ -80,7 +77,7 @@ describe("GenericContainer reuse", () => { try { await expect(() => new GenericContainer("cristianrgreco/testcontainer:1.1.14") - .withName("there_can_only_be_one") + .withName(name) .withExposedPorts(8080) .withReuse() .start() @@ -95,15 +92,16 @@ describe("GenericContainer reuse", () => { async (reuseEnable: string | undefined) => { process.env.TESTCONTAINERS_REUSE_ENABLE = reuseEnable; + const name = `there_can_only_be_one_${randomUuid()}`; const container1 = await new GenericContainer("cristianrgreco/testcontainer:1.1.14") - .withName("there_can_only_be_one") + .withName(name) .withExposedPorts(8080) .withReuse() .start(); await checkContainerIsHealthy(container1); const container2 = await new GenericContainer("cristianrgreco/testcontainer:1.1.14") - .withName("there_can_only_be_one") + .withName(name) .withExposedPorts(8080) .withReuse() .start(); @@ -116,15 +114,16 @@ describe("GenericContainer reuse", () => { ); it("should create a new container when an existing reusable container has stopped and is removed", async () => { + const name = `there_can_only_be_one_${randomUuid()}`; const container1 = await new GenericContainer("cristianrgreco/testcontainer:1.1.14") - .withName("there_can_only_be_one") + .withName(name) .withExposedPorts(8080) .withReuse() .start(); await container1.stop(); const container2 = await new GenericContainer("cristianrgreco/testcontainer:1.1.14") - .withName("there_can_only_be_one") + .withName(name) .withExposedPorts(8080) .withReuse() .start(); @@ -135,15 +134,16 @@ describe("GenericContainer reuse", () => { }); it("should reuse container when an existing reusable container has stopped but not removed", async () => { + const name = `there_can_only_be_one_${randomUuid()}`; const container1 = await new GenericContainer("cristianrgreco/testcontainer:1.1.14") - .withName("there_can_only_be_one") + .withName(name) .withExposedPorts(8080) .withReuse() .start(); await container1.stop({ remove: false, timeout: 10000 }); const container2 = await new GenericContainer("cristianrgreco/testcontainer:1.1.14") - .withName("there_can_only_be_one") + .withName(name) .withExposedPorts(8080) .withReuse() .start(); @@ -155,7 +155,7 @@ describe("GenericContainer reuse", () => { it("should keep the labels passed in when a new reusable container is created", async () => { const container = await new GenericContainer("cristianrgreco/testcontainer:1.1.14") - .withName("there_can_only_be_one") + .withName(`there_can_only_be_one_${randomUuid()}`) .withExposedPorts(8080) .withLabels({ test: "foo", bar: "baz" }) .withReuse() diff --git a/packages/testcontainers/src/generic-container/generic-container.test.ts b/packages/testcontainers/src/generic-container/generic-container.test.ts index 29f7b7983..2618cafed 100644 --- a/packages/testcontainers/src/generic-container/generic-container.test.ts +++ b/packages/testcontainers/src/generic-container/generic-container.test.ts @@ -1,6 +1,7 @@ -import path from "path"; import getPort from "get-port"; -import { GenericContainer } from "./generic-container"; +import path from "path"; +import { RandomUuid } from "../common"; +import { getContainerRuntimeClient } from "../container-runtime"; import { PullPolicy } from "../utils/pull-policy"; import { checkContainerIsHealthy, @@ -8,12 +9,9 @@ import { getRunningContainerNames, waitForDockerEvent, } from "../utils/test-helper"; -import { getContainerRuntimeClient } from "../container-runtime"; -import { RandomUuid } from "../common"; - -describe("GenericContainer", () => { - jest.setTimeout(180_000); +import { GenericContainer } from "./generic-container"; +describe("GenericContainer", { timeout: 180_000 }, () => { const fixtures = path.resolve(__dirname, "..", "..", "fixtures", "docker"); it("should return first mapped port", async () => { @@ -118,7 +116,8 @@ describe("GenericContainer", () => { expect(exitCode).not.toBe(0); // The command should fail due to the ls error expect(stdout).toEqual(expect.stringContaining("This is stdout")); expect(stderr).toEqual(expect.stringContaining("No such file or directory")); - expect(output).toMatch(/This is stdout[\s\S]*No such file or directory/); + expect(output).toEqual(expect.stringContaining("This is stdout")); + expect(output).toEqual(expect.stringContaining("No such file or directory")); await container.stop(); }); diff --git a/packages/testcontainers/src/generic-container/generic-container.ts b/packages/testcontainers/src/generic-container/generic-container.ts index bf630bf22..870840eb7 100644 --- a/packages/testcontainers/src/generic-container/generic-container.ts +++ b/packages/testcontainers/src/generic-container/generic-container.ts @@ -1,7 +1,14 @@ import archiver from "archiver"; import AsyncLock from "async-lock"; +import { Container, ContainerCreateOptions, HostConfig } from "dockerode"; +import { Readable } from "stream"; +import { containerLog, hash, log } from "../common"; +import { ContainerRuntimeClient, getContainerRuntimeClient, ImageName } from "../container-runtime"; +import { CONTAINER_STATUSES } from "../container-runtime/clients/container/types"; +import { StartedNetwork } from "../network/network"; +import { PortForwarderInstance, SSHD_IMAGE } from "../port-forwarder/port-forwarder"; +import { getReaper, REAPER_IMAGE } from "../reaper/reaper"; import { StartedTestContainer, TestContainer } from "../test-container"; -import { WaitStrategy } from "../wait-strategies/wait-strategy"; import { BindMount, ContentToCopy, @@ -16,23 +23,16 @@ import { TmpFs, Ulimits, } from "../types"; -import { GenericContainerBuilder } from "./generic-container-builder"; -import { StartedGenericContainer } from "./started-generic-container"; -import { Wait } from "../wait-strategies/wait"; -import { Readable } from "stream"; -import { Container, ContainerCreateOptions, HostConfig } from "dockerode"; -import { waitForContainer } from "../wait-strategies/wait-for-container"; -import { ContainerRuntimeClient, getContainerRuntimeClient, ImageName } from "../container-runtime"; -import { getContainerPort, hasHostBinding, PortWithOptionalBinding } from "../utils/port"; -import { ImagePullPolicy, PullPolicy } from "../utils/pull-policy"; -import { getReaper, REAPER_IMAGE } from "../reaper/reaper"; -import { PortForwarderInstance, SSHD_IMAGE } from "../port-forwarder/port-forwarder"; -import { createLabels, LABEL_TESTCONTAINERS_CONTAINER_HASH, LABEL_TESTCONTAINERS_SESSION_ID } from "../utils/labels"; -import { containerLog, hash, log } from "../common"; import { BoundPorts } from "../utils/bound-ports"; -import { StartedNetwork } from "../network/network"; +import { createLabels, LABEL_TESTCONTAINERS_CONTAINER_HASH, LABEL_TESTCONTAINERS_SESSION_ID } from "../utils/labels"; import { mapInspectResult } from "../utils/map-inspect-result"; -import { CONTAINER_STATUSES } from "../container-runtime/clients/container/types"; +import { getContainerPort, hasHostBinding, PortWithOptionalBinding } from "../utils/port"; +import { ImagePullPolicy, PullPolicy } from "../utils/pull-policy"; +import { Wait } from "../wait-strategies/wait"; +import { waitForContainer } from "../wait-strategies/wait-for-container"; +import { WaitStrategy } from "../wait-strategies/wait-strategy"; +import { GenericContainerBuilder } from "./generic-container-builder"; +import { StartedGenericContainer } from "./started-generic-container"; const reusableContainerCreationLock = new AsyncLock(); diff --git a/packages/testcontainers/src/generic-container/started-generic-container.ts b/packages/testcontainers/src/generic-container/started-generic-container.ts index 9039d3664..b412f6cfd 100644 --- a/packages/testcontainers/src/generic-container/started-generic-container.ts +++ b/packages/testcontainers/src/generic-container/started-generic-container.ts @@ -1,16 +1,16 @@ -import { RestartOptions, StartedTestContainer, StopOptions, StoppedTestContainer } from "../test-container"; +import archiver from "archiver"; +import AsyncLock from "async-lock"; import Dockerode, { ContainerInspectInfo } from "dockerode"; -import { ContentToCopy, DirectoryToCopy, ExecOptions, ExecResult, FileToCopy, Labels } from "../types"; import { Readable } from "stream"; -import { StoppedGenericContainer } from "./stopped-generic-container"; -import { WaitStrategy } from "../wait-strategies/wait-strategy"; -import AsyncLock from "async-lock"; -import archiver from "archiver"; -import { waitForContainer } from "../wait-strategies/wait-for-container"; -import { BoundPorts } from "../utils/bound-ports"; import { containerLog, log } from "../common"; import { getContainerRuntimeClient } from "../container-runtime"; +import { RestartOptions, StartedTestContainer, StopOptions, StoppedTestContainer } from "../test-container"; +import { ContentToCopy, DirectoryToCopy, ExecOptions, ExecResult, FileToCopy, Labels } from "../types"; +import { BoundPorts } from "../utils/bound-ports"; import { mapInspectResult } from "../utils/map-inspect-result"; +import { waitForContainer } from "../wait-strategies/wait-for-container"; +import { WaitStrategy } from "../wait-strategies/wait-strategy"; +import { StoppedGenericContainer } from "./stopped-generic-container"; export class StartedGenericContainer implements StartedTestContainer { private stoppedContainer?: StoppedTestContainer; diff --git a/packages/testcontainers/src/generic-container/stopped-generic-container.ts b/packages/testcontainers/src/generic-container/stopped-generic-container.ts index 866ed3a02..05e17efac 100644 --- a/packages/testcontainers/src/generic-container/stopped-generic-container.ts +++ b/packages/testcontainers/src/generic-container/stopped-generic-container.ts @@ -1,7 +1,7 @@ -import { StoppedTestContainer } from "../test-container"; import Dockerode from "dockerode"; import { log } from "../common"; import { getContainerRuntimeClient } from "../container-runtime"; +import { StoppedTestContainer } from "../test-container"; export class StoppedGenericContainer implements StoppedTestContainer { constructor(private readonly container: Dockerode.Container) {} diff --git a/packages/testcontainers/src/index.ts b/packages/testcontainers/src/index.ts index 62cc44963..47c9be0e2 100644 --- a/packages/testcontainers/src/index.ts +++ b/packages/testcontainers/src/index.ts @@ -1,32 +1,30 @@ +export { IntervalRetry, log, RandomUuid, Retry, Uuid } from "./common"; +export { ContainerRuntimeClient, getContainerRuntimeClient, ImageName } from "./container-runtime"; +export { DockerComposeEnvironment } from "./docker-compose-environment/docker-compose-environment"; +export { DownedDockerComposeEnvironment } from "./docker-compose-environment/downed-docker-compose-environment"; +export { StartedDockerComposeEnvironment } from "./docker-compose-environment/started-docker-compose-environment"; +export { StoppedDockerComposeEnvironment } from "./docker-compose-environment/stopped-docker-compose-environment"; +export { AbstractStartedContainer } from "./generic-container/abstract-started-container"; +export { AbstractStoppedContainer } from "./generic-container/abstract-stopped-container"; +export { GenericContainer } from "./generic-container/generic-container"; +export { BuildOptions, GenericContainerBuilder } from "./generic-container/generic-container-builder"; +export { Network, StartedNetwork, StoppedNetwork } from "./network/network"; +export { getReaper } from "./reaper/reaper"; export { - TestContainer, + RestartOptions, StartedTestContainer, - StoppedTestContainer, StopOptions, - RestartOptions, + StoppedTestContainer, + TestContainer, } from "./test-container"; -export { GenericContainer } from "./generic-container/generic-container"; -export { GenericContainerBuilder, BuildOptions } from "./generic-container/generic-container-builder"; export { TestContainers } from "./test-containers"; -export { ContainerRuntimeClient, getContainerRuntimeClient, ImageName } from "./container-runtime"; -export { Uuid, RandomUuid, log } from "./common"; -export { getContainerPort, PortWithOptionalBinding, PortWithBinding, hasHostBinding } from "./utils/port"; +export { Content, ExecOptions, ExecResult, InspectResult } from "./types"; export { BoundPorts } from "./utils/bound-ports"; - -export { DockerComposeEnvironment } from "./docker-compose-environment/docker-compose-environment"; -export { StartedDockerComposeEnvironment } from "./docker-compose-environment/started-docker-compose-environment"; -export { StoppedDockerComposeEnvironment } from "./docker-compose-environment/stopped-docker-compose-environment"; -export { DownedDockerComposeEnvironment } from "./docker-compose-environment/downed-docker-compose-environment"; - -export { Network, StartedNetwork, StoppedNetwork } from "./network/network"; - +export { LABEL_TESTCONTAINERS_SESSION_ID } from "./utils/labels"; +export { getContainerPort, hasHostBinding, PortWithBinding, PortWithOptionalBinding } from "./utils/port"; +export { ImagePullPolicy, PullPolicy } from "./utils/pull-policy"; +export { HttpWaitStrategyOptions } from "./wait-strategies/http-wait-strategy"; +export { StartupCheckStrategy, StartupStatus } from "./wait-strategies/startup-check-strategy"; export { Wait } from "./wait-strategies/wait"; export { waitForContainer } from "./wait-strategies/wait-for-container"; export { WaitStrategy } from "./wait-strategies/wait-strategy"; -export { HttpWaitStrategyOptions } from "./wait-strategies/http-wait-strategy"; -export { StartupCheckStrategy, StartupStatus } from "./wait-strategies/startup-check-strategy"; -export { PullPolicy, ImagePullPolicy } from "./utils/pull-policy"; -export { InspectResult, Content, ExecOptions, ExecResult } from "./types"; - -export { AbstractStartedContainer } from "./generic-container/abstract-started-container"; -export { AbstractStoppedContainer } from "./generic-container/abstract-stopped-container"; diff --git a/packages/testcontainers/src/network/network.test.ts b/packages/testcontainers/src/network/network.test.ts index 58de33e51..e7ccb2488 100644 --- a/packages/testcontainers/src/network/network.test.ts +++ b/packages/testcontainers/src/network/network.test.ts @@ -1,10 +1,8 @@ +import { ContainerRuntimeClient, getContainerRuntimeClient } from "../container-runtime"; import { GenericContainer } from "../generic-container/generic-container"; import { Network } from "./network"; -import { ContainerRuntimeClient, getContainerRuntimeClient } from "../container-runtime"; - -describe("Network", () => { - jest.setTimeout(180_000); +describe("Network", { timeout: 180_000 }, () => { let client: ContainerRuntimeClient; beforeAll(async () => { diff --git a/packages/testcontainers/src/port-forwarder/port-forwarder.test.ts b/packages/testcontainers/src/port-forwarder/port-forwarder.test.ts index efec06b98..96fe11b42 100644 --- a/packages/testcontainers/src/port-forwarder/port-forwarder.test.ts +++ b/packages/testcontainers/src/port-forwarder/port-forwarder.test.ts @@ -1,12 +1,10 @@ import { createServer, Server } from "http"; -import { RandomUniquePortGenerator } from "../utils/port-generator"; -import { TestContainers } from "../test-containers"; import { GenericContainer } from "../generic-container/generic-container"; import { Network } from "../network/network"; +import { TestContainers } from "../test-containers"; +import { RandomUniquePortGenerator } from "../utils/port-generator"; -describe("PortForwarder", () => { - jest.setTimeout(180_000); - +describe("PortForwarder", { timeout: 180_000 }, () => { let randomPort: number; let server: Server; @@ -63,7 +61,7 @@ describe("PortForwarder", () => { describe("Reuse", () => { afterEach(() => { - jest.resetModules(); + vi.resetModules(); }); describe("Different host ports", () => { diff --git a/packages/testcontainers/src/port-forwarder/port-forwarder.ts b/packages/testcontainers/src/port-forwarder/port-forwarder.ts index 05b6f0889..93d03c09c 100644 --- a/packages/testcontainers/src/port-forwarder/port-forwarder.ts +++ b/packages/testcontainers/src/port-forwarder/port-forwarder.ts @@ -1,11 +1,11 @@ +import Dockerode, { ContainerInfo } from "dockerode"; import { createSshConnection, SshConnection } from "ssh-remote-port-forward"; -import { GenericContainer } from "../generic-container/generic-container"; import { log, withFileLock } from "../common"; import { ContainerRuntimeClient, getContainerRuntimeClient, ImageName } from "../container-runtime"; +import { GenericContainer } from "../generic-container/generic-container"; import { getReaper } from "../reaper/reaper"; -import { PortWithOptionalBinding } from "../utils/port"; -import Dockerode, { ContainerInfo } from "dockerode"; import { LABEL_TESTCONTAINERS_SESSION_ID, LABEL_TESTCONTAINERS_SSHD } from "../utils/labels"; +import { PortWithOptionalBinding } from "../utils/port"; export const SSHD_IMAGE = process.env["SSHD_CONTAINER_IMAGE"] ? ImageName.fromString(process.env["SSHD_CONTAINER_IMAGE"]).string diff --git a/packages/testcontainers/src/reaper/reaper.ts b/packages/testcontainers/src/reaper/reaper.ts index fd9fdf87b..7a56958a3 100644 --- a/packages/testcontainers/src/reaper/reaper.ts +++ b/packages/testcontainers/src/reaper/reaper.ts @@ -1,10 +1,10 @@ import { ContainerInfo } from "dockerode"; -import { GenericContainer } from "../generic-container/generic-container"; -import { Wait } from "../wait-strategies/wait"; import { Socket } from "net"; -import { ContainerRuntimeClient, ImageName } from "../container-runtime"; import { IntervalRetry, log, RandomUuid, withFileLock } from "../common"; +import { ContainerRuntimeClient, ImageName } from "../container-runtime"; +import { GenericContainer } from "../generic-container/generic-container"; import { LABEL_TESTCONTAINERS_SESSION_ID } from "../utils/labels"; +import { Wait } from "../wait-strategies/wait"; export const REAPER_IMAGE = process.env["RYUK_CONTAINER_IMAGE"] ? ImageName.fromString(process.env["RYUK_CONTAINER_IMAGE"]).string diff --git a/packages/testcontainers/src/test-container.ts b/packages/testcontainers/src/test-container.ts index ff3094068..56a47e271 100644 --- a/packages/testcontainers/src/test-container.ts +++ b/packages/testcontainers/src/test-container.ts @@ -1,5 +1,5 @@ -import { WaitStrategy } from "./wait-strategies/wait-strategy"; import { Readable } from "stream"; +import { StartedNetwork } from "./network/network"; import { BindMount, ContentToCopy, @@ -14,9 +14,9 @@ import { TmpFs, Ulimits, } from "./types"; -import { StartedNetwork } from "./network/network"; import { PortWithOptionalBinding } from "./utils/port"; import { ImagePullPolicy } from "./utils/pull-policy"; +import { WaitStrategy } from "./wait-strategies/wait-strategy"; export interface TestContainer { start(): Promise; diff --git a/packages/testcontainers/src/test-containers.ts b/packages/testcontainers/src/test-containers.ts index 9c2718fea..6edc835b1 100644 --- a/packages/testcontainers/src/test-containers.ts +++ b/packages/testcontainers/src/test-containers.ts @@ -1,6 +1,6 @@ -import { PortForwarderInstance } from "./port-forwarder/port-forwarder"; -import { getContainerRuntimeClient } from "./container-runtime"; import { log } from "./common"; +import { getContainerRuntimeClient } from "./container-runtime"; +import { PortForwarderInstance } from "./port-forwarder/port-forwarder"; export class TestContainers { public static async exposeHostPorts(...ports: number[]): Promise { diff --git a/packages/testcontainers/src/utils/bound-ports.test.ts b/packages/testcontainers/src/utils/bound-ports.test.ts index 81a4dd15c..bb585793b 100644 --- a/packages/testcontainers/src/utils/bound-ports.test.ts +++ b/packages/testcontainers/src/utils/bound-ports.test.ts @@ -1,6 +1,6 @@ -import { BoundPorts, resolveHostPortBinding } from "./bound-ports"; import { HostIp } from "../container-runtime"; import { InspectResult } from "../types"; +import { BoundPorts, resolveHostPortBinding } from "./bound-ports"; describe("BoundPorts", () => { it("should return a binding", () => { diff --git a/packages/testcontainers/src/utils/bound-ports.ts b/packages/testcontainers/src/utils/bound-ports.ts index 1d2ee272b..3c062d976 100644 --- a/packages/testcontainers/src/utils/bound-ports.ts +++ b/packages/testcontainers/src/utils/bound-ports.ts @@ -1,7 +1,7 @@ -import { getContainerPort, PortWithOptionalBinding } from "./port"; +import net from "net"; import { HostIp } from "../container-runtime"; import { HostPortBindings, InspectResult } from "../types"; -import net from "net"; +import { getContainerPort, PortWithOptionalBinding } from "./port"; export class BoundPorts { private readonly ports = new Map(); diff --git a/packages/testcontainers/src/utils/dockerfile-parser.test.ts b/packages/testcontainers/src/utils/dockerfile-parser.test.ts index 7d202c35e..57c32b070 100644 --- a/packages/testcontainers/src/utils/dockerfile-parser.test.ts +++ b/packages/testcontainers/src/utils/dockerfile-parser.test.ts @@ -1,6 +1,6 @@ import path from "path"; -import { getDockerfileImages } from "./dockerfile-parser"; import { ImageName } from "../container-runtime"; +import { getDockerfileImages } from "./dockerfile-parser"; const dockerfileParserFixtures = path.resolve(__dirname, "..", "..", "fixtures", "docker", "dockerfile-parser"); diff --git a/packages/testcontainers/src/utils/dockerfile-parser.ts b/packages/testcontainers/src/utils/dockerfile-parser.ts index 295e419f4..a3890cc60 100644 --- a/packages/testcontainers/src/utils/dockerfile-parser.ts +++ b/packages/testcontainers/src/utils/dockerfile-parser.ts @@ -1,7 +1,7 @@ import { promises as fs } from "fs"; -import { BuildArgs } from "../types"; -import { ImageName } from "../container-runtime"; import { isNotEmptyString, log } from "../common"; +import { ImageName } from "../container-runtime"; +import { BuildArgs } from "../types"; const buildArgRegex = /\${([^{]+)}/g; diff --git a/packages/testcontainers/src/utils/map-inspect-result.ts b/packages/testcontainers/src/utils/map-inspect-result.ts index a27e65fb0..8270058d9 100644 --- a/packages/testcontainers/src/utils/map-inspect-result.ts +++ b/packages/testcontainers/src/utils/map-inspect-result.ts @@ -1,5 +1,5 @@ import { ContainerInspectInfo } from "dockerode"; -import { HealthCheckStatus, NetworkSettings, Ports, InspectResult } from "../types"; +import { HealthCheckStatus, InspectResult, NetworkSettings, Ports } from "../types"; export function mapInspectResult(inspectResult: ContainerInspectInfo): InspectResult { const finishedAt = new Date(inspectResult.State.FinishedAt); diff --git a/packages/testcontainers/src/utils/pull-policy.test.ts b/packages/testcontainers/src/utils/pull-policy.test.ts index bc6298346..b12b6f0ca 100644 --- a/packages/testcontainers/src/utils/pull-policy.test.ts +++ b/packages/testcontainers/src/utils/pull-policy.test.ts @@ -1,4 +1,4 @@ -import { PullPolicy, ImagePullPolicy } from "./pull-policy"; +import { ImagePullPolicy, PullPolicy } from "./pull-policy"; test("default pull policy should return false", () => { expect(PullPolicy.defaultPolicy().shouldPull()).toBe(false); diff --git a/packages/testcontainers/src/utils/test-helper.ts b/packages/testcontainers/src/utils/test-helper.ts index 47640dbe4..1a0aeb26e 100644 --- a/packages/testcontainers/src/utils/test-helper.ts +++ b/packages/testcontainers/src/utils/test-helper.ts @@ -1,11 +1,11 @@ +import { GetEventsOptions } from "dockerode"; import { Readable } from "stream"; import { Agent } from "undici"; -import { StartedDockerComposeEnvironment } from "../docker-compose-environment/started-docker-compose-environment"; -import { StartedTestContainer } from "../test-container"; -import { GetEventsOptions } from "dockerode"; +import { IntervalRetry } from "../common"; import { getContainerRuntimeClient } from "../container-runtime"; +import { StartedDockerComposeEnvironment } from "../docker-compose-environment/started-docker-compose-environment"; import { GenericContainer } from "../generic-container/generic-container"; -import { IntervalRetry } from "../common"; +import { StartedTestContainer } from "../test-container"; export const checkContainerIsHealthy = async (container: StartedTestContainer): Promise => { const url = `http://${container.getHost()}:${container.getMappedPort(8080)}`; diff --git a/packages/testcontainers/src/wait-strategies/composite-wait-strategy.test.ts b/packages/testcontainers/src/wait-strategies/composite-wait-strategy.test.ts index c13e8fc97..4c1604c6e 100644 --- a/packages/testcontainers/src/wait-strategies/composite-wait-strategy.test.ts +++ b/packages/testcontainers/src/wait-strategies/composite-wait-strategy.test.ts @@ -1,9 +1,7 @@ import { GenericContainer } from "../generic-container/generic-container"; import { Wait } from "./wait"; -describe("CompositeWaitStrategy", () => { - jest.setTimeout(180_000); - +describe("CompositeWaitStrategy", { timeout: 180_000 }, () => { it("should work with individual timeouts", async () => { const container = new GenericContainer("cristianrgreco/testcontainer:1.1.14").withWaitStrategy( Wait.forAll([ diff --git a/packages/testcontainers/src/wait-strategies/composite-wait-strategy.ts b/packages/testcontainers/src/wait-strategies/composite-wait-strategy.ts index 276d4873d..99dc3c2c5 100644 --- a/packages/testcontainers/src/wait-strategies/composite-wait-strategy.ts +++ b/packages/testcontainers/src/wait-strategies/composite-wait-strategy.ts @@ -1,7 +1,7 @@ -import { AbstractWaitStrategy, WaitStrategy } from "./wait-strategy"; import Dockerode from "dockerode"; -import { BoundPorts } from "../utils/bound-ports"; import { log } from "../common"; +import { BoundPorts } from "../utils/bound-ports"; +import { AbstractWaitStrategy, WaitStrategy } from "./wait-strategy"; export class CompositeWaitStrategy extends AbstractWaitStrategy { private deadline?: number; diff --git a/packages/testcontainers/src/wait-strategies/health-check-wait-strategy.test.ts b/packages/testcontainers/src/wait-strategies/health-check-wait-strategy.test.ts index e1662a7ec..ad7005a56 100644 --- a/packages/testcontainers/src/wait-strategies/health-check-wait-strategy.test.ts +++ b/packages/testcontainers/src/wait-strategies/health-check-wait-strategy.test.ts @@ -1,14 +1,12 @@ -import { GenericContainer } from "../generic-container/generic-container"; -import { Wait } from "./wait"; import path from "path"; -import { checkContainerIsHealthy, getRunningContainerNames } from "../utils/test-helper"; import { RandomUuid } from "../common"; - -jest.setTimeout(180_000); +import { GenericContainer } from "../generic-container/generic-container"; +import { checkContainerIsHealthy, getRunningContainerNames } from "../utils/test-helper"; +import { Wait } from "./wait"; const fixtures = path.resolve(__dirname, "..", "..", "fixtures", "docker"); -describe("HealthCheckWaitStrategy", () => { +describe("HealthCheckWaitStrategy", { timeout: 180_000 }, () => { it("should wait for health check", async () => { const context = path.resolve(fixtures, "docker-with-health-check"); const customGenericContainer = await GenericContainer.fromDockerfile(context).build(); diff --git a/packages/testcontainers/src/wait-strategies/health-check-wait-strategy.ts b/packages/testcontainers/src/wait-strategies/health-check-wait-strategy.ts index bc2bad018..47d97d8df 100644 --- a/packages/testcontainers/src/wait-strategies/health-check-wait-strategy.ts +++ b/packages/testcontainers/src/wait-strategies/health-check-wait-strategy.ts @@ -1,7 +1,7 @@ import Dockerode from "dockerode"; -import { AbstractWaitStrategy } from "./wait-strategy"; import { IntervalRetry, log } from "../common"; import { getContainerRuntimeClient } from "../container-runtime"; +import { AbstractWaitStrategy } from "./wait-strategy"; export class HealthCheckWaitStrategy extends AbstractWaitStrategy { public async waitUntilReady(container: Dockerode.Container): Promise { diff --git a/packages/testcontainers/src/wait-strategies/host-port-wait-strategy.test.ts b/packages/testcontainers/src/wait-strategies/host-port-wait-strategy.test.ts index cfa08155a..40de3bcec 100644 --- a/packages/testcontainers/src/wait-strategies/host-port-wait-strategy.test.ts +++ b/packages/testcontainers/src/wait-strategies/host-port-wait-strategy.test.ts @@ -1,10 +1,8 @@ +import { RandomUuid } from "../common"; import { GenericContainer } from "../generic-container/generic-container"; import { checkContainerIsHealthy, getRunningContainerNames } from "../utils/test-helper"; -import { RandomUuid } from "../common"; - -jest.setTimeout(180_000); -describe("HostPortWaitStrategy", () => { +describe("HostPortWaitStrategy", { timeout: 180_000 }, () => { it("should wait for port", async () => { const container = await new GenericContainer("cristianrgreco/testcontainer:1.1.14").withExposedPorts(8080).start(); diff --git a/packages/testcontainers/src/wait-strategies/host-port-wait-strategy.ts b/packages/testcontainers/src/wait-strategies/host-port-wait-strategy.ts index a3bae6d7d..be5b8639d 100644 --- a/packages/testcontainers/src/wait-strategies/host-port-wait-strategy.ts +++ b/packages/testcontainers/src/wait-strategies/host-port-wait-strategy.ts @@ -1,9 +1,9 @@ import Dockerode from "dockerode"; -import { AbstractWaitStrategy } from "./wait-strategy"; -import { HostPortCheck, InternalPortCheck, PortCheck } from "./utils/port-check"; -import { BoundPorts } from "../utils/bound-ports"; -import { getContainerRuntimeClient } from "../container-runtime"; import { IntervalRetry, log } from "../common"; +import { getContainerRuntimeClient } from "../container-runtime"; +import { BoundPorts } from "../utils/bound-ports"; +import { HostPortCheck, InternalPortCheck, PortCheck } from "./utils/port-check"; +import { AbstractWaitStrategy } from "./wait-strategy"; export class HostPortWaitStrategy extends AbstractWaitStrategy { public async waitUntilReady(container: Dockerode.Container, boundPorts: BoundPorts): Promise { diff --git a/packages/testcontainers/src/wait-strategies/http-wait-strategy.test.ts b/packages/testcontainers/src/wait-strategies/http-wait-strategy.test.ts index 7e07028c0..56c2b59f2 100644 --- a/packages/testcontainers/src/wait-strategies/http-wait-strategy.test.ts +++ b/packages/testcontainers/src/wait-strategies/http-wait-strategy.test.ts @@ -1,10 +1,9 @@ +import { RandomUuid } from "../common"; import { GenericContainer } from "../generic-container/generic-container"; -import { Wait } from "./wait"; import { checkContainerIsHealthy, checkContainerIsHealthyTls, stopStartingContainer } from "../utils/test-helper"; +import { Wait } from "./wait"; -jest.setTimeout(180_000); - -describe("HttpWaitStrategy", () => { +describe("HttpWaitStrategy", { timeout: 180_000 }, () => { it("should wait for 200", async () => { const container = await new GenericContainer("cristianrgreco/testcontainer:1.1.14") .withExposedPorts(8080) @@ -87,7 +86,7 @@ describe("HttpWaitStrategy", () => { describe("when options.abortOnContainerExit is true", () => { it("should fail if container exited before waiting pass", async () => { - const name = "container-name"; + const name = `container-name-${new RandomUuid().nextUuid()}`; const data = [1, 2, 3]; const tail = 50; const echoCmd = data.map((i) => `echo ${i}`).join(" && "); @@ -105,7 +104,7 @@ describe("HttpWaitStrategy", () => { }); it("should log only $tail logs if container exited before waiting pass", async () => { - const name = "container-name"; + const name = `container-name-${new RandomUuid().nextUuid()}`; const tail = 50; const data = [...Array(tail + 5).keys()]; const echoCmd = data.map((i) => `echo ${i}`).join(" && "); diff --git a/packages/testcontainers/src/wait-strategies/http-wait-strategy.ts b/packages/testcontainers/src/wait-strategies/http-wait-strategy.ts index 0544ff9f6..ec9ab840f 100644 --- a/packages/testcontainers/src/wait-strategies/http-wait-strategy.ts +++ b/packages/testcontainers/src/wait-strategies/http-wait-strategy.ts @@ -1,9 +1,9 @@ import Dockerode from "dockerode"; import { Agent } from "undici"; -import { AbstractWaitStrategy } from "./wait-strategy"; -import { BoundPorts } from "../utils/bound-ports"; import { IntervalRetry, log } from "../common"; import { getContainerRuntimeClient } from "../container-runtime"; +import { BoundPorts } from "../utils/bound-ports"; +import { AbstractWaitStrategy } from "./wait-strategy"; export interface HttpWaitStrategyOptions { abortOnContainerExit?: boolean; diff --git a/packages/testcontainers/src/wait-strategies/log-wait-strategy.test.ts b/packages/testcontainers/src/wait-strategies/log-wait-strategy.test.ts index 18559def3..62e537f0c 100644 --- a/packages/testcontainers/src/wait-strategies/log-wait-strategy.test.ts +++ b/packages/testcontainers/src/wait-strategies/log-wait-strategy.test.ts @@ -1,11 +1,9 @@ +import { RandomUuid } from "../common"; import { GenericContainer } from "../generic-container/generic-container"; -import { Wait } from "./wait"; import { checkContainerIsHealthy, getRunningContainerNames } from "../utils/test-helper"; -import { RandomUuid } from "../common"; - -jest.setTimeout(180_000); +import { Wait } from "./wait"; -describe("LogWaitStrategy", () => { +describe("LogWaitStrategy", { timeout: 180_000 }, () => { it("should wait for log", async () => { const container = await new GenericContainer("cristianrgreco/testcontainer:1.1.14") .withExposedPorts(8080) diff --git a/packages/testcontainers/src/wait-strategies/log-wait-strategy.ts b/packages/testcontainers/src/wait-strategies/log-wait-strategy.ts index 1a24d7299..118540527 100644 --- a/packages/testcontainers/src/wait-strategies/log-wait-strategy.ts +++ b/packages/testcontainers/src/wait-strategies/log-wait-strategy.ts @@ -1,9 +1,9 @@ -import Dockerode from "dockerode"; import byline from "byline"; -import { AbstractWaitStrategy } from "./wait-strategy"; -import { BoundPorts } from "../utils/bound-ports"; +import Dockerode from "dockerode"; import { log } from "../common"; import { getContainerRuntimeClient } from "../container-runtime"; +import { BoundPorts } from "../utils/bound-ports"; +import { AbstractWaitStrategy } from "./wait-strategy"; export type Log = string; diff --git a/packages/testcontainers/src/wait-strategies/one-shot-startup-startegy.test.ts b/packages/testcontainers/src/wait-strategies/one-shot-startup-startegy.test.ts index 2aed72392..dc5ffc347 100644 --- a/packages/testcontainers/src/wait-strategies/one-shot-startup-startegy.test.ts +++ b/packages/testcontainers/src/wait-strategies/one-shot-startup-startegy.test.ts @@ -1,9 +1,7 @@ import { GenericContainer } from "../generic-container/generic-container"; import { Wait } from "./wait"; -jest.setTimeout(180_000); - -describe("OneShotStartupCheckStrategy", () => { +describe("OneShotStartupCheckStrategy", { timeout: 180_000 }, () => { it("should wait for container to finish", async () => { const container = await new GenericContainer("cristianrgreco/testcontainer:1.1.14") .withCommand(["/bin/sh", "-c", 'sleep 2; echo "Ready"']) diff --git a/packages/testcontainers/src/wait-strategies/shell-wait-strategy.test.ts b/packages/testcontainers/src/wait-strategies/shell-wait-strategy.test.ts index f202584c4..99c87137f 100644 --- a/packages/testcontainers/src/wait-strategies/shell-wait-strategy.test.ts +++ b/packages/testcontainers/src/wait-strategies/shell-wait-strategy.test.ts @@ -1,9 +1,7 @@ import { GenericContainer } from "../generic-container/generic-container"; import { Wait } from "./wait"; -jest.setTimeout(180_000); - -describe("ShellWaitStrategy", () => { +describe("ShellWaitStrategy", { timeout: 180_000 }, () => { it("should wait for successful command", async () => { const container = await new GenericContainer("cristianrgreco/testcontainer:1.1.14") .withCommand(["/bin/sh", "-c", "sleep 0.5; touch /tmp/test.lock; node index.js"]) diff --git a/packages/testcontainers/src/wait-strategies/shell-wait-strategy.ts b/packages/testcontainers/src/wait-strategies/shell-wait-strategy.ts index 19956d472..7ae2be886 100644 --- a/packages/testcontainers/src/wait-strategies/shell-wait-strategy.ts +++ b/packages/testcontainers/src/wait-strategies/shell-wait-strategy.ts @@ -1,7 +1,7 @@ import Dockerode from "dockerode"; -import { AbstractWaitStrategy } from "./wait-strategy"; import { IntervalRetry, log } from "../common"; import { getContainerRuntimeClient } from "../container-runtime"; +import { AbstractWaitStrategy } from "./wait-strategy"; export class ShellWaitStrategy extends AbstractWaitStrategy { constructor(private readonly command: string) { diff --git a/packages/testcontainers/src/wait-strategies/startup-check-strategy.test.ts b/packages/testcontainers/src/wait-strategies/startup-check-strategy.test.ts index a6bc16f66..99f7931a9 100644 --- a/packages/testcontainers/src/wait-strategies/startup-check-strategy.test.ts +++ b/packages/testcontainers/src/wait-strategies/startup-check-strategy.test.ts @@ -1,9 +1,7 @@ import { GenericContainer } from "../generic-container/generic-container"; import { StartupCheckStrategy, StartupStatus } from "./startup-check-strategy"; -jest.setTimeout(180_000); - -describe("StartupCheckStrategy", () => { +describe("StartupCheckStrategy", { timeout: 180_000 }, () => { it("should wait until ready", async () => { const waitStrategy = new (class extends StartupCheckStrategy { private count = 0; diff --git a/packages/testcontainers/src/wait-strategies/startup-check-strategy.ts b/packages/testcontainers/src/wait-strategies/startup-check-strategy.ts index dd6fe202e..1604221fb 100644 --- a/packages/testcontainers/src/wait-strategies/startup-check-strategy.ts +++ b/packages/testcontainers/src/wait-strategies/startup-check-strategy.ts @@ -1,7 +1,7 @@ -import { AbstractWaitStrategy } from "./wait-strategy"; import Dockerode from "dockerode"; -import { getContainerRuntimeClient } from "../container-runtime"; import { IntervalRetry, log } from "../common"; +import { getContainerRuntimeClient } from "../container-runtime"; +import { AbstractWaitStrategy } from "./wait-strategy"; export type StartupStatus = "PENDING" | "SUCCESS" | "FAIL"; diff --git a/packages/testcontainers/src/wait-strategies/utils/port-check.test.ts b/packages/testcontainers/src/wait-strategies/utils/port-check.test.ts index 0d1989e56..00df3ccc0 100644 --- a/packages/testcontainers/src/wait-strategies/utils/port-check.test.ts +++ b/packages/testcontainers/src/wait-strategies/utils/port-check.test.ts @@ -1,13 +1,13 @@ import { Container } from "dockerode"; -import { InternalPortCheck } from "./port-check"; import { log } from "../../common"; import { ContainerRuntimeClient } from "../../container-runtime"; +import { InternalPortCheck } from "./port-check"; -jest.mock("../../common"); -const mockLogger = jest.mocked(log); +vi.mock("../../common"); +const mockLogger = vi.mocked(log); -const mockContainerExec = jest.fn(); -jest.mock("../../container-runtime", () => { +const mockContainerExec = vi.fn(); +vi.mock("../../container-runtime", () => { return { ContainerRuntimeClient: function () { return { diff --git a/packages/testcontainers/src/wait-strategies/utils/port-check.ts b/packages/testcontainers/src/wait-strategies/utils/port-check.ts index 9de585431..7f4bb56b4 100644 --- a/packages/testcontainers/src/wait-strategies/utils/port-check.ts +++ b/packages/testcontainers/src/wait-strategies/utils/port-check.ts @@ -1,7 +1,7 @@ -import { Socket } from "net"; import Dockerode from "dockerode"; -import { ContainerRuntimeClient } from "../../container-runtime"; +import { Socket } from "net"; import { log } from "../../common"; +import { ContainerRuntimeClient } from "../../container-runtime"; export interface PortCheck { isBound(port: number): Promise; diff --git a/packages/testcontainers/src/wait-strategies/wait-for-container.ts b/packages/testcontainers/src/wait-strategies/wait-for-container.ts index 3ce96429d..1c949253c 100644 --- a/packages/testcontainers/src/wait-strategies/wait-for-container.ts +++ b/packages/testcontainers/src/wait-strategies/wait-for-container.ts @@ -1,8 +1,8 @@ import { Container } from "dockerode"; -import { WaitStrategy } from "./wait-strategy"; +import { log } from "../common"; import { ContainerRuntimeClient } from "../container-runtime"; import { BoundPorts } from "../utils/bound-ports"; -import { log } from "../common"; +import { WaitStrategy } from "./wait-strategy"; export const waitForContainer = async ( client: ContainerRuntimeClient, diff --git a/packages/testcontainers/src/wait-strategies/wait.ts b/packages/testcontainers/src/wait-strategies/wait.ts index c209d679c..fba2214df 100644 --- a/packages/testcontainers/src/wait-strategies/wait.ts +++ b/packages/testcontainers/src/wait-strategies/wait.ts @@ -1,11 +1,11 @@ -import { WaitStrategy } from "./wait-strategy"; -import { HttpWaitStrategy, HttpWaitStrategyOptions } from "./http-wait-strategy"; +import { CompositeWaitStrategy } from "./composite-wait-strategy"; import { HealthCheckWaitStrategy } from "./health-check-wait-strategy"; -import { Log, LogWaitStrategy } from "./log-wait-strategy"; -import { ShellWaitStrategy } from "./shell-wait-strategy"; import { HostPortWaitStrategy } from "./host-port-wait-strategy"; -import { CompositeWaitStrategy } from "./composite-wait-strategy"; +import { HttpWaitStrategy, HttpWaitStrategyOptions } from "./http-wait-strategy"; +import { Log, LogWaitStrategy } from "./log-wait-strategy"; import { OneShotStartupCheckStrategy } from "./one-shot-startup-startegy"; +import { ShellWaitStrategy } from "./shell-wait-strategy"; +import { WaitStrategy } from "./wait-strategy"; export class Wait { public static forAll(waitStrategies: WaitStrategy[]): CompositeWaitStrategy { diff --git a/packages/testcontainers/tsconfig.build.json b/packages/testcontainers/tsconfig.build.json index 17e3e23bf..f5cfac96b 100644 --- a/packages/testcontainers/tsconfig.build.json +++ b/packages/testcontainers/tsconfig.build.json @@ -2,7 +2,6 @@ "extends": "./tsconfig.json", "exclude": [ "build", - "jest.config.ts", "src/**/*.test.ts", "src/utils/test-helper.ts", ] diff --git a/packages/testcontainers/tsconfig.json b/packages/testcontainers/tsconfig.json index f88a7995c..66edde408 100644 --- a/packages/testcontainers/tsconfig.json +++ b/packages/testcontainers/tsconfig.json @@ -5,7 +5,6 @@ "outDir": "build" }, "exclude": [ - "build", - "jest.config.ts" + "build" ] } \ No newline at end of file diff --git a/tsconfig.base.json b/tsconfig.base.json index 7318a5558..1ae5e2220 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -5,6 +5,9 @@ "ES2022" ], "target": "es2022", + "types": [ + "vitest/globals" + ], "module": "commonjs", "declaration": true, "sourceMap": true, diff --git a/vitest.config.ts b/vitest.config.ts new file mode 100644 index 000000000..170962de5 --- /dev/null +++ b/vitest.config.ts @@ -0,0 +1,13 @@ +import path from "path"; +import { defineConfig } from "vitest/config"; + +export default defineConfig({ + test: { + globals: true, + mockReset: true, + restoreMocks: true, + alias: { + testcontainers: path.resolve(__dirname, "packages/testcontainers/src"), + }, + }, +});