From a0a013cee96dde335e3b3f169a87ba744ec7c2f2 Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Fri, 20 Oct 2023 12:24:44 +0200 Subject: [PATCH 01/30] Increment version & upgrade dependencies --- dependencies.md | 2 +- doc/changes/changelog.md | 1 + doc/changes/changes_2.8.2.md | 26 ++++++++++++++++++++++++++ pk_generated_parent.pom | 2 +- pom.xml | 16 ++++++++-------- 5 files changed, 37 insertions(+), 10 deletions(-) create mode 100644 doc/changes/changes_2.8.2.md diff --git a/dependencies.md b/dependencies.md index 4052d471..6023f032 100644 --- a/dependencies.md +++ b/dependencies.md @@ -20,7 +20,7 @@ | [Virtual Schema for document data in files][0] | [MIT License][1] | | [JUnit Jupiter Engine][10] | [Eclipse Public License v2.0][11] | | [JUnit Jupiter Params][10] | [Eclipse Public License v2.0][11] | -| [mockito-core][12] | [The MIT License][13] | +| [mockito-core][12] | [MIT][13] | | [Testcontainers :: JUnit Jupiter Extension][14] | [MIT][15] | | [Testcontainers :: Localstack][14] | [MIT][15] | | [Test Database Builder for Java][16] | [MIT License][17] | diff --git a/doc/changes/changelog.md b/doc/changes/changelog.md index 7bbea4c3..dc8afa83 100644 --- a/doc/changes/changelog.md +++ b/doc/changes/changelog.md @@ -1,5 +1,6 @@ # Changes +* [2.8.2](changes_2.8.2.md) * [2.8.1](changes_2.8.1.md) * [2.8.0](changes_2.8.0.md) * [2.7.0](changes_2.7.0.md) diff --git a/doc/changes/changes_2.8.2.md b/doc/changes/changes_2.8.2.md new file mode 100644 index 00000000..e3ebac69 --- /dev/null +++ b/doc/changes/changes_2.8.2.md @@ -0,0 +1,26 @@ +# S3 Document Files Virtual Schema 2.8.2, released 2023-??-?? + +Code name: + +## Summary + +## Refactoring + +* #137: Extracted common extension code for virtual schemas + +## Dependency Updates + +### Virtual Schema for Document Data in Files on AWS S3 + +#### Compile Dependency Updates + +* Updated `software.amazon.awssdk:s3:2.20.156` to `2.21.4` + +#### Test Dependency Updates + +* Updated `com.amazonaws:aws-java-sdk-s3:1.12.559` to `1.12.570` +* Updated `com.exasol:extension-manager-integration-test-java:0.5.1` to `0.5.4` +* Updated `com.fasterxml.jackson.core:jackson-databind:2.15.2` to `2.15.3` +* Updated `org.mockito:mockito-core:5.5.0` to `5.6.0` +* Updated `org.testcontainers:junit-jupiter:1.19.0` to `1.19.1` +* Updated `org.testcontainers:localstack:1.19.0` to `1.19.1` diff --git a/pk_generated_parent.pom b/pk_generated_parent.pom index 33cf0c04..2f1ede70 100644 --- a/pk_generated_parent.pom +++ b/pk_generated_parent.pom @@ -3,7 +3,7 @@ 4.0.0 com.exasol s3-document-files-virtual-schema-generated-parent - 2.8.1 + 2.8.2 pom UTF-8 diff --git a/pom.xml b/pom.xml index 3c799eca..7e999bcf 100644 --- a/pom.xml +++ b/pom.xml @@ -2,13 +2,13 @@ 4.0.0 s3-document-files-virtual-schema - 2.8.1 + 2.8.2 Virtual Schema for document data in files on AWS S3 Adapter for document data access from files from AWS S3. https://github.com/exasol/s3-document-files-virtual-schema/ 5.10.0 - 1.19.0 + 1.19.1 7.3.4 src/main/,extension/src/ @@ -39,7 +39,7 @@ software.amazon.awssdk bom - 2.20.156 + 2.21.4 pom import @@ -110,7 +110,7 @@ org.mockito mockito-core - 5.5.0 + 5.6.0 test @@ -136,7 +136,7 @@ com.amazonaws aws-java-sdk-s3 - 1.12.559 + 1.12.570 test @@ -190,14 +190,14 @@ com.exasol extension-manager-integration-test-java - 0.5.1 + 0.5.4 test com.fasterxml.jackson.core jackson-databind - 2.15.2 + 2.15.3 test @@ -351,7 +351,7 @@ s3-document-files-virtual-schema-generated-parent com.exasol - 2.8.1 + 2.8.2 pk_generated_parent.pom From 285c685dac25583916b05435a10af192d26734a6 Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Fri, 20 Oct 2023 12:26:24 +0200 Subject: [PATCH 02/30] Upgrade extension dependencies --- dependencies.md | 2 +- doc/changes/changes_2.8.2.md | 16 + extension/package-lock.json | 1304 ++++++++++++++++++---------------- extension/package.json | 16 +- 4 files changed, 720 insertions(+), 618 deletions(-) diff --git a/dependencies.md b/dependencies.md index 6023f032..78dc0e2b 100644 --- a/dependencies.md +++ b/dependencies.md @@ -146,4 +146,4 @@ [65]: http://maven.apache.org/plugins/maven-install-plugin/ [66]: http://maven.apache.org/plugins/maven-deploy-plugin/ [67]: http://maven.apache.org/plugins/maven-site-plugin/ -[68]: https://registry.npmjs.org/@exasol/extension-manager-interface/-/extension-manager-interface-0.3.0.tgz +[68]: https://registry.npmjs.org/@exasol/extension-manager-interface/-/extension-manager-interface-0.3.1.tgz diff --git a/doc/changes/changes_2.8.2.md b/doc/changes/changes_2.8.2.md index e3ebac69..2a782d37 100644 --- a/doc/changes/changes_2.8.2.md +++ b/doc/changes/changes_2.8.2.md @@ -24,3 +24,19 @@ Code name: * Updated `org.mockito:mockito-core:5.5.0` to `5.6.0` * Updated `org.testcontainers:junit-jupiter:1.19.0` to `1.19.1` * Updated `org.testcontainers:localstack:1.19.0` to `1.19.1` + +### Extension + +#### Compile Dependency Updates + +* Updated `@exasol/extension-manager-interface:0.3.0` to `0.3.1` + +#### Development Dependency Updates + +* Updated `eslint:^8.46.0` to `^8.51.0` +* Updated `@typescript-eslint/parser:^6.3.0` to `^6.8.0` +* Updated `@types/jest:^29.5.3` to `^29.5.6` +* Updated `typescript:^5.1.6` to `^5.2.2` +* Updated `@typescript-eslint/eslint-plugin:^6.3.0` to `^6.8.0` +* Updated `jest:29.6.2` to `29.7.0` +* Updated `esbuild:^0.19.0` to `^0.19.5` diff --git a/extension/package-lock.json b/extension/package-lock.json index 34e7408d..1523d20a 100644 --- a/extension/package-lock.json +++ b/extension/package-lock.json @@ -9,18 +9,18 @@ "version": "0.1.0", "license": "MIT", "dependencies": { - "@exasol/extension-manager-interface": "0.3.0" + "@exasol/extension-manager-interface": "0.3.1" }, "devDependencies": { - "@types/jest": "^29.5.3", - "@typescript-eslint/eslint-plugin": "^6.3.0", - "@typescript-eslint/parser": "^6.3.0", - "esbuild": "^0.19.0", - "eslint": "^8.46.0", - "jest": "29.6.2", + "@types/jest": "^29.5.6", + "@typescript-eslint/eslint-plugin": "^6.8.0", + "@typescript-eslint/parser": "^6.8.0", + "esbuild": "^0.19.5", + "eslint": "^8.51.0", + "jest": "29.7.0", "ts-jest": "^29.1.1", "ts-node": "^10.9.1", - "typescript": "^5.1.6" + "typescript": "^5.2.2" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -46,17 +46,89 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", - "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", "dev": true, "dependencies": { - "@babel/highlight": "^7.18.6" + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" }, "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==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "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==", + "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/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==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "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/@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==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "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==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/compat-data": { "version": "7.21.4", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.4.tgz", @@ -112,12 +184,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.4.tgz", - "integrity": "sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", "dev": true, "dependencies": { - "@babel/types": "^7.21.4", + "@babel/types": "^7.23.0", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -155,34 +227,34 @@ } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", - "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dev": true, "dependencies": { - "@babel/template": "^7.20.7", - "@babel/types": "^7.21.0" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dev": true, "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -241,30 +313,30 @@ } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dev": true, "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "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==", "dev": true, "engines": { "node": ">=6.9.0" @@ -294,13 +366,13 @@ } }, "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, "engines": { @@ -379,9 +451,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.4.tgz", - "integrity": "sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", + "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -568,33 +640,33 @@ } }, "node_modules/@babel/template": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", - "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.4.tgz", - "integrity": "sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.21.4", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.21.4", - "@babel/types": "^7.21.4", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", + "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@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.0", + "@babel/types": "^7.23.0", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -612,13 +684,13 @@ } }, "node_modules/@babel/types": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.4.tgz", - "integrity": "sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", "dev": true, "dependencies": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" }, "engines": { @@ -654,9 +726,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.0.tgz", - "integrity": "sha512-GAkjUyHgWTYuex3evPd5V7uV/XS4LMKr1PWHRPW1xNyy/Jx08x3uTrDFRefBYLKT/KpaWM8/YMQcwbp5a3yIDA==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.5.tgz", + "integrity": "sha512-bhvbzWFF3CwMs5tbjf3ObfGqbl/17ict2/uwOSfr3wmxDE6VdS2GqY/FuzIPe0q0bdhj65zQsvqfArI9MY6+AA==", "cpu": [ "arm" ], @@ -670,9 +742,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.0.tgz", - "integrity": "sha512-AzsozJnB+RNaDncBCs3Ys5g3kqhPFUueItfEaCpp89JH2naFNX2mYDIvUgPYMqqjm8hiFoo+jklb3QHZyR3ubw==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.5.tgz", + "integrity": "sha512-5d1OkoJxnYQfmC+Zd8NBFjkhyCNYwM4n9ODrycTFY6Jk1IGiZ+tjVJDDSwDt77nK+tfpGP4T50iMtVi4dEGzhQ==", "cpu": [ "arm64" ], @@ -686,9 +758,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.0.tgz", - "integrity": "sha512-SUG8/qiVhljBDpdkHQ9DvOWbp7hFFIP0OzxOTptbmVsgBgzY6JWowmMd6yJuOhapfxmj/DrvwKmjRLvVSIAKZg==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.5.tgz", + "integrity": "sha512-9t+28jHGL7uBdkBjL90QFxe7DVA+KGqWlHCF8ChTKyaKO//VLuoBricQCgwhOjA1/qOczsw843Fy4cbs4H3DVA==", "cpu": [ "x64" ], @@ -702,9 +774,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.0.tgz", - "integrity": "sha512-HkxZ8k3Jvcw0FORPNTavA8BMgQjLOB6AajT+iXmil7BwY3gU1hWvJJAyWyEogCmA4LdbGvKF8vEykdmJ4xNJJQ==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.5.tgz", + "integrity": "sha512-mvXGcKqqIqyKoxq26qEDPHJuBYUA5KizJncKOAf9eJQez+L9O+KfvNFu6nl7SCZ/gFb2QPaRqqmG0doSWlgkqw==", "cpu": [ "arm64" ], @@ -718,9 +790,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.0.tgz", - "integrity": "sha512-9IRWJjqpWFHM9a5Qs3r3bK834NCFuDY5ZaLrmTjqE+10B6w65UMQzeZjh794JcxpHolsAHqwsN/33crUXNCM2Q==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.5.tgz", + "integrity": "sha512-Ly8cn6fGLNet19s0X4unjcniX24I0RqjPv+kurpXabZYSXGM4Pwpmf85WHJN3lAgB8GSth7s5A0r856S+4DyiA==", "cpu": [ "x64" ], @@ -734,9 +806,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.0.tgz", - "integrity": "sha512-s7i2WcXcK0V1PJHVBe7NsGddsL62a9Vhpz2U7zapPrwKoFuxPP9jybwX8SXnropR/AOj3ppt2ern4ItblU6UQQ==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.5.tgz", + "integrity": "sha512-GGDNnPWTmWE+DMchq1W8Sd0mUkL+APvJg3b11klSGUDvRXh70JqLAO56tubmq1s2cgpVCSKYywEiKBfju8JztQ==", "cpu": [ "arm64" ], @@ -750,9 +822,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.0.tgz", - "integrity": "sha512-NMdBSSdgwHCqCsucU5k1xflIIRU0qi1QZnM6+vdGy5fvxm1c8rKh50VzsWsIVTFUG3l91AtRxVwoz3Lcvy3I5w==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.5.tgz", + "integrity": "sha512-1CCwDHnSSoA0HNwdfoNY0jLfJpd7ygaLAp5EHFos3VWJCRX9DMwWODf96s9TSse39Br7oOTLryRVmBoFwXbuuQ==", "cpu": [ "x64" ], @@ -766,9 +838,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.0.tgz", - "integrity": "sha512-2F1+lH7ZBcCcgxiSs8EXQV0PPJJdTNiNcXxDb61vzxTRJJkXX1I/ye9mAhfHyScXzHaEibEXg1Jq9SW586zz7w==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.5.tgz", + "integrity": "sha512-lrWXLY/vJBzCPC51QN0HM71uWgIEpGSjSZZADQhq7DKhPcI6NH1IdzjfHkDQws2oNpJKpR13kv7/pFHBbDQDwQ==", "cpu": [ "arm" ], @@ -782,9 +854,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.0.tgz", - "integrity": "sha512-I4zvE2srSZxRPapFnNqj+NL3sDJ1wkvEZqt903OZUlBBgigrQMvzUowvP/TTTu2OGYe1oweg5MFilfyrElIFag==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.5.tgz", + "integrity": "sha512-o3vYippBmSrjjQUCEEiTZ2l+4yC0pVJD/Dl57WfPwwlvFkrxoSO7rmBZFii6kQB3Wrn/6GwJUPLU5t52eq2meA==", "cpu": [ "arm64" ], @@ -798,9 +870,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.0.tgz", - "integrity": "sha512-dz2Q7+P92r1Evc8kEN+cQnB3qqPjmCrOZ+EdBTn8lEc1yN8WDgaDORQQiX+mxaijbH8npXBT9GxUqE52Gt6Y+g==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.5.tgz", + "integrity": "sha512-MkjHXS03AXAkNp1KKkhSKPOCYztRtK+KXDNkBa6P78F8Bw0ynknCSClO/ztGszILZtyO/lVKpa7MolbBZ6oJtQ==", "cpu": [ "ia32" ], @@ -814,9 +886,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.0.tgz", - "integrity": "sha512-IcVJovJVflih4oFahhUw+N7YgNbuMSVFNr38awb0LNzfaiIfdqIh518nOfYaNQU3aVfiJnOIRVJDSAP4k35WxA==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.5.tgz", + "integrity": "sha512-42GwZMm5oYOD/JHqHska3Jg0r+XFb/fdZRX+WjADm3nLWLcIsN27YKtqxzQmGNJgu0AyXg4HtcSK9HuOk3v1Dw==", "cpu": [ "loong64" ], @@ -830,9 +902,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.0.tgz", - "integrity": "sha512-bZGRAGySMquWsKw0gIdsClwfvgbsSq/7oq5KVu1H1r9Il+WzOcfkV1hguntIuBjRVL8agI95i4AukjdAV2YpUw==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.5.tgz", + "integrity": "sha512-kcjndCSMitUuPJobWCnwQ9lLjiLZUR3QLQmlgaBfMX23UEa7ZOrtufnRds+6WZtIS9HdTXqND4yH8NLoVVIkcg==", "cpu": [ "mips64el" ], @@ -846,9 +918,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.0.tgz", - "integrity": "sha512-3LC6H5/gCDorxoRBUdpLV/m7UthYSdar0XcCu+ypycQxMS08MabZ06y1D1yZlDzL/BvOYliRNRWVG/YJJvQdbg==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.5.tgz", + "integrity": "sha512-yJAxJfHVm0ZbsiljbtFFP1BQKLc8kUF6+17tjQ78QjqjAQDnhULWiTA6u0FCDmYT1oOKS9PzZ2z0aBI+Mcyj7Q==", "cpu": [ "ppc64" ], @@ -862,9 +934,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.0.tgz", - "integrity": "sha512-jfvdKjWk+Cp2sgLtEEdSHXO7qckrw2B2eFBaoRdmfhThqZs29GMMg7q/LsQpybA7BxCLLEs4di5ucsWzZC5XPA==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.5.tgz", + "integrity": "sha512-5u8cIR/t3gaD6ad3wNt1MNRstAZO+aNyBxu2We8X31bA8XUNyamTVQwLDA1SLoPCUehNCymhBhK3Qim1433Zag==", "cpu": [ "riscv64" ], @@ -878,9 +950,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.0.tgz", - "integrity": "sha512-ofcucfNLkoXmcnJaw9ugdEOf40AWKGt09WBFCkpor+vFJVvmk/8OPjl/qRtks2Z7BuZbG3ztJuK1zS9z5Cgx9A==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.5.tgz", + "integrity": "sha512-Z6JrMyEw/EmZBD/OFEFpb+gao9xJ59ATsoTNlj39jVBbXqoZm4Xntu6wVmGPB/OATi1uk/DB+yeDPv2E8PqZGw==", "cpu": [ "s390x" ], @@ -894,9 +966,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.0.tgz", - "integrity": "sha512-Fpf7zNDBti3xrQKQKLdXT0hTyOxgFdRJIMtNy8x1az9ATR9/GJ1brYbB/GLWoXhKiHsoWs+2DLkFVNNMTCLEwA==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.5.tgz", + "integrity": "sha512-psagl+2RlK1z8zWZOmVdImisMtrUxvwereIdyJTmtmHahJTKb64pAcqoPlx6CewPdvGvUKe2Jw+0Z/0qhSbG1A==", "cpu": [ "x64" ], @@ -910,9 +982,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.0.tgz", - "integrity": "sha512-AMQAp/5oENgDOvVhvOlbhVe1pWii7oFAMRHlmTjSEMcpjTpIHtFXhv9uAFgUERHm3eYtNvS9Vf+gT55cwuI6Aw==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.5.tgz", + "integrity": "sha512-kL2l+xScnAy/E/3119OggX8SrWyBEcqAh8aOY1gr4gPvw76la2GlD4Ymf832UCVbmuWeTf2adkZDK+h0Z/fB4g==", "cpu": [ "x64" ], @@ -926,9 +998,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.0.tgz", - "integrity": "sha512-fDztEve1QUs3h/Dw2AUmBlWGkNQbhDoD05ppm5jKvzQv+HVuV13so7m5RYeiSMIC2XQy7PAjZh+afkxAnCRZxA==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.5.tgz", + "integrity": "sha512-sPOfhtzFufQfTBgRnE1DIJjzsXukKSvZxloZbkJDG383q0awVAq600pc1nfqBcl0ice/WN9p4qLc39WhBShRTA==", "cpu": [ "x64" ], @@ -942,9 +1014,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.0.tgz", - "integrity": "sha512-bKZzJ2/rvUjDzA5Ddyva2tMk89WzNJEibZEaq+wY6SiqPlwgFbqyQLimouxLHiHh1itb5P3SNCIF1bc2bw5H9w==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.5.tgz", + "integrity": "sha512-dGZkBXaafuKLpDSjKcB0ax0FL36YXCvJNnztjKV+6CO82tTYVDSH2lifitJ29jxRMoUhgkg9a+VA/B03WK5lcg==", "cpu": [ "x64" ], @@ -958,9 +1030,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.0.tgz", - "integrity": "sha512-NQJ+4jmnA79saI+sE+QzcEls19uZkoEmdxo7r//PDOjIpX8pmoWtTnWg6XcbnO7o4fieyAwb5U2LvgWynF4diA==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.5.tgz", + "integrity": "sha512-dWVjD9y03ilhdRQ6Xig1NWNgfLtf2o/STKTS+eZuF90fI2BhbwD6WlaiCGKptlqXlURVB5AUOxUj09LuwKGDTg==", "cpu": [ "arm64" ], @@ -974,9 +1046,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.0.tgz", - "integrity": "sha512-uyxiZAnsfu9diHm9/rIH2soecF/HWLXYUhJKW4q1+/LLmNQ+55lRjvSUDhUmsgJtSUscRJB/3S4RNiTb9o9mCg==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.5.tgz", + "integrity": "sha512-4liggWIA4oDgUxqpZwrDhmEfAH4d0iljanDOK7AnVU89T6CzHon/ony8C5LeOdfgx60x5cnQJFZwEydVlYx4iw==", "cpu": [ "ia32" ], @@ -990,9 +1062,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.0.tgz", - "integrity": "sha512-jl+NXUjK2StMgqnZnqgNjZuerFG8zQqWXMBZdMMv4W/aO1ZKQaYWZBxTrtWKphkCBVEMh0wMVfGgOd2BjOZqUQ==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.5.tgz", + "integrity": "sha512-czTrygUsB/jlM8qEW5MD8bgYU2Xg14lo6kBDXW6HdxKjh8M5PzETGiSHaz9MtbXBYDloHNUAUW2tMiKW4KM9Mw==", "cpu": [ "x64" ], @@ -1030,9 +1102,9 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.1.tgz", - "integrity": "sha512-9t7ZA7NGGK8ckelF0PQCfcxIUzs1Md5rrO6U/c+FIQNanea5UZC0wqKXH4vHBccmu4ZJgZ2idtPeW7+Q2npOEA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", + "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", "dev": true, "dependencies": { "ajv": "^6.12.4", @@ -1053,26 +1125,26 @@ } }, "node_modules/@eslint/js": { - "version": "8.46.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.46.0.tgz", - "integrity": "sha512-a8TLtmPi8xzPkCbp/OGFUo5yhRkHM2Ko9kOWP4znJr0WAhWyThaw3PnwX4vOTWOAMsV2uRt32PPDcEz63esSaA==", + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.51.0.tgz", + "integrity": "sha512-HxjQ8Qn+4SI3/AFv6sOrDB+g6PpUTDwSJiQqOrnneEk8L71161srI9gjzzZvYVbzHiVg/BvcH95+cK/zfIt4pg==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@exasol/extension-manager-interface": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@exasol/extension-manager-interface/-/extension-manager-interface-0.3.0.tgz", - "integrity": "sha512-RQ88IEy2Twm0WHofO74/LQkfP0n5vHxKeMGzBieCiuVxCl3hRNfpWgfy/dpMKdf57QJHxeokYjfIcANMiNjABA==" + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@exasol/extension-manager-interface/-/extension-manager-interface-0.3.1.tgz", + "integrity": "sha512-eiemC19v6wp9VCrL7w8SL6gBFAhkdwt2MoS19fcaQoHPOzH08jG9q4RuY43JQGa4PckCW3KO5lmn3P5XsIpbXg==" }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", - "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", + "version": "0.11.12", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.12.tgz", + "integrity": "sha512-NlGesA1usRNn6ctHCZ21M4/dKPgW9Nn1FypRdIKKgZOKzkVV4T1FlK5mBiLhHBCDmEbdQG0idrcXlbZfksJ+RA==", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", + "@humanwhocodes/object-schema": "^2.0.0", "debug": "^4.1.1", "minimatch": "^3.0.5" }, @@ -1094,9 +1166,9 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.0.tgz", + "integrity": "sha512-9S9QrXY2K0L4AGDcSgTi9vgiCcG8VcBv4Mp7/1hDPYoswIy6Z6KO5blYto82BT8M0MZNRWmCFLpCs3HlpYGGdw==", "dev": true }, "node_modules/@istanbuljs/load-nyc-config": { @@ -1208,16 +1280,16 @@ } }, "node_modules/@jest/console": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.6.2.tgz", - "integrity": "sha512-0N0yZof5hi44HAR2pPS+ikJ3nzKNoZdVu8FffRf3wy47I7Dm7etk/3KetMdRUqzVd16V4O2m2ISpNTbnIuqy1w==", + "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.1", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^29.6.2", - "jest-util": "^29.6.2", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", "slash": "^3.0.0" }, "engines": { @@ -1225,37 +1297,37 @@ } }, "node_modules/@jest/core": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.6.2.tgz", - "integrity": "sha512-Oj+5B+sDMiMWLhPFF+4/DvHOf+U10rgvCLGPHP8Xlsy/7QxS51aU/eBngudHlJXnaWD5EohAgJ4js+T6pa+zOg==", + "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.6.2", - "@jest/reporters": "^29.6.2", - "@jest/test-result": "^29.6.2", - "@jest/transform": "^29.6.2", - "@jest/types": "^29.6.1", + "@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.5.0", - "jest-config": "^29.6.2", - "jest-haste-map": "^29.6.2", - "jest-message-util": "^29.6.2", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.6.2", - "jest-resolve-dependencies": "^29.6.2", - "jest-runner": "^29.6.2", - "jest-runtime": "^29.6.2", - "jest-snapshot": "^29.6.2", - "jest-util": "^29.6.2", - "jest-validate": "^29.6.2", - "jest-watcher": "^29.6.2", + "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.6.2", + "pretty-format": "^29.7.0", "slash": "^3.0.0", "strip-ansi": "^6.0.0" }, @@ -1272,88 +1344,88 @@ } }, "node_modules/@jest/environment": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.6.2.tgz", - "integrity": "sha512-AEcW43C7huGd/vogTddNNTDRpO6vQ2zaQNrttvWV18ArBx9Z56h7BIsXkNFJVOO4/kblWEQz30ckw0+L3izc+Q==", + "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.6.2", - "@jest/types": "^29.6.1", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", - "jest-mock": "^29.6.2" + "jest-mock": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/expect": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.6.2.tgz", - "integrity": "sha512-m6DrEJxVKjkELTVAztTLyS/7C92Y2b0VYqmDROYKLLALHn8T/04yPs70NADUYPrV3ruI+H3J0iUIuhkjp7vkfg==", + "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.6.2", - "jest-snapshot": "^29.6.2" + "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.6.2", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.6.2.tgz", - "integrity": "sha512-6zIhM8go3RV2IG4aIZaZbxwpOzz3ZiM23oxAlkquOIole+G6TrbeXnykxWYlqF7kz2HlBjdKtca20x9atkEQYg==", + "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.4.3" + "jest-get-type": "^29.6.3" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/fake-timers": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.6.2.tgz", - "integrity": "sha512-euZDmIlWjm1Z0lJ1D0f7a0/y5Kh/koLFMUBE5SUYWrmy8oNhJpbTBDAP6CxKnadcMLDoDf4waRYCe35cH6G6PA==", + "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.1", + "@jest/types": "^29.6.3", "@sinonjs/fake-timers": "^10.0.2", "@types/node": "*", - "jest-message-util": "^29.6.2", - "jest-mock": "^29.6.2", - "jest-util": "^29.6.2" + "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.6.2", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.6.2.tgz", - "integrity": "sha512-cjuJmNDjs6aMijCmSa1g2TNG4Lby/AeU7/02VtpW+SLcZXzOLK2GpN2nLqcFjmhy3B3AoPeQVx7BnyOf681bAw==", + "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.6.2", - "@jest/expect": "^29.6.2", - "@jest/types": "^29.6.1", - "jest-mock": "^29.6.2" + "@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.6.2", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.6.2.tgz", - "integrity": "sha512-sWtijrvIav8LgfJZlrGCdN0nP2EWbakglJY49J1Y5QihcQLfy7ovyxxjJBRXMNltgt4uPtEcFmIMbVshEDfFWw==", + "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.6.2", - "@jest/test-result": "^29.6.2", - "@jest/transform": "^29.6.2", - "@jest/types": "^29.6.1", + "@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", @@ -1362,13 +1434,13 @@ "glob": "^7.1.3", "graceful-fs": "^4.2.9", "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.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.6.2", - "jest-util": "^29.6.2", - "jest-worker": "^29.6.2", + "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", @@ -1386,10 +1458,26 @@ } } }, + "node_modules/@jest/reporters/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/@jest/schemas": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.0.tgz", - "integrity": "sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ==", + "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" @@ -1399,9 +1487,9 @@ } }, "node_modules/@jest/source-map": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.0.tgz", - "integrity": "sha512-oA+I2SHHQGxDCZpbrsCQSoMLb3Bz547JnM+jUr9qEbuw0vQlWZfpPS7CO9J7XiwKicEz9OFn/IYoLkkiUD7bzA==", + "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", @@ -1413,13 +1501,13 @@ } }, "node_modules/@jest/test-result": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.6.2.tgz", - "integrity": "sha512-3VKFXzcV42EYhMCsJQURptSqnyjqCGbtLuX5Xxb6Pm6gUf1wIRIl+mandIRGJyWKgNKYF9cnstti6Ls5ekduqw==", + "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.6.2", - "@jest/types": "^29.6.1", + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" }, @@ -1428,14 +1516,14 @@ } }, "node_modules/@jest/test-sequencer": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.6.2.tgz", - "integrity": "sha512-GVYi6PfPwVejO7slw6IDO0qKVum5jtrJ3KoLGbgBWyr2qr4GaxFV6su+ZAjdTX75Sr1DkMFRk09r2ZVa+wtCGw==", + "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, "dependencies": { - "@jest/test-result": "^29.6.2", + "@jest/test-result": "^29.7.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.2", + "jest-haste-map": "^29.7.0", "slash": "^3.0.0" }, "engines": { @@ -1443,22 +1531,22 @@ } }, "node_modules/@jest/transform": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.6.2.tgz", - "integrity": "sha512-ZqCqEISr58Ce3U+buNFJYUktLJZOggfyvR+bZMaiV1e8B1SIvJbwZMrYz3gx/KAPn9EXmOmN+uB08yLCjWkQQg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", "dev": true, "dependencies": { "@babel/core": "^7.11.6", - "@jest/types": "^29.6.1", + "@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.6.2", - "jest-regex-util": "^29.4.3", - "jest-util": "^29.6.2", + "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", @@ -1469,12 +1557,12 @@ } }, "node_modules/@jest/types": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.1.tgz", - "integrity": "sha512-tPKQNMPuXgvdOn2/Lg9HNfUvjYVGolt04Hp03f5hAk878uwOLikN+JzeLY0HcVgKgFl9Hs3EIqpu3WX27XNhnw==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dev": true, "dependencies": { - "@jest/schemas": "^29.6.0", + "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", @@ -1623,9 +1711,9 @@ "dev": true }, "node_modules/@types/babel__core": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.0.tgz", - "integrity": "sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==", + "version": "7.20.3", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.3.tgz", + "integrity": "sha512-54fjTSeSHwfan8AyHWrKbfBWiEUrNTZsUwPTDSNaaP1QDQIZbeNUg3a59E9D+375MzUw/x1vx2/0F5LBz+AeYA==", "dev": true, "dependencies": { "@babel/parser": "^7.20.7", @@ -1636,18 +1724,18 @@ } }, "node_modules/@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "version": "7.6.6", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.6.tgz", + "integrity": "sha512-66BXMKb/sUWbMdBNdMvajU7i/44RkrA3z/Yt1c7R5xejt8qh84iU54yUWCtm0QwGJlDcf/gg4zd/x4mpLAlb/w==", "dev": true, "dependencies": { "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.3.tgz", + "integrity": "sha512-ciwyCLeuRfxboZ4isgdNZi/tkt06m8Tw6uGbBSBgWrnnZGNXiEyM27xc/PjXGQLqlZ6ylbgHMnm7ccF9tCkOeQ==", "dev": true, "dependencies": { "@babel/parser": "^7.1.0", @@ -1655,18 +1743,18 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.3.tgz", - "integrity": "sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==", + "version": "7.20.3", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.3.tgz", + "integrity": "sha512-Lsh766rGEFbaxMIDH7Qa+Yha8cMVI3qAK6CHt3OR0YfxOIn5Z54iHiyDRycHrBqeIiqGa20Kpsv1cavfBKkRSw==", "dev": true, "dependencies": { - "@babel/types": "^7.3.0" + "@babel/types": "^7.20.7" } }, "node_modules/@types/graceful-fs": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", - "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.8.tgz", + "integrity": "sha512-NhRH7YzWq8WiNKVavKPBmtLYZHxNY19Hh+az28O/phfp68CF45pMFud+ZzJ8ewnxnC5smIdF3dqFeiSUQ5I+pw==", "dev": true, "dependencies": { "@types/node": "*" @@ -1697,9 +1785,9 @@ } }, "node_modules/@types/jest": { - "version": "29.5.3", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.3.tgz", - "integrity": "sha512-1Nq7YrO/vJE/FYnqYyw0FS8LdrjExSgIiHyKg7xPpn+yi8Q4huZryKnkJatN1ZRH89Kw2v33/8ZMB7DuZeSLlA==", + "version": "29.5.6", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.6.tgz", + "integrity": "sha512-/t9NnzkOpXb4Nfvg17ieHE6EeSjDS2SGSpNYfoLbUAeL/EOueU/RSdOWFpfQTXBEM7BguYW1XQ0EbM+6RlIh6w==", "dev": true, "dependencies": { "expect": "^29.0.0", @@ -1707,9 +1795,9 @@ } }, "node_modules/@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.14.tgz", + "integrity": "sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==", "dev": true }, "node_modules/@types/node": { @@ -1719,9 +1807,9 @@ "dev": true }, "node_modules/@types/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ==", "dev": true }, "node_modules/@types/stack-utils": { @@ -1746,21 +1834,20 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.3.0.tgz", - "integrity": "sha512-IZYjYZ0ifGSLZbwMqIip/nOamFiWJ9AH+T/GYNZBWkVcyNQOFGtSMoWV7RvY4poYCMZ/4lHzNl796WOSNxmk8A==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.8.0.tgz", + "integrity": "sha512-GosF4238Tkes2SHPQ1i8f6rMtG6zlKwMEB0abqSJ3Npvos+doIlc/ATG+vX1G9coDF3Ex78zM3heXHLyWEwLUw==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.3.0", - "@typescript-eslint/type-utils": "6.3.0", - "@typescript-eslint/utils": "6.3.0", - "@typescript-eslint/visitor-keys": "6.3.0", + "@typescript-eslint/scope-manager": "6.8.0", + "@typescript-eslint/type-utils": "6.8.0", + "@typescript-eslint/utils": "6.8.0", + "@typescript-eslint/visitor-keys": "6.8.0", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", "natural-compare": "^1.4.0", - "natural-compare-lite": "^1.4.0", "semver": "^7.5.4", "ts-api-utils": "^1.0.1" }, @@ -1782,15 +1869,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.3.0.tgz", - "integrity": "sha512-ibP+y2Gr6p0qsUkhs7InMdXrwldjxZw66wpcQq9/PzAroM45wdwyu81T+7RibNCh8oc0AgrsyCwJByncY0Ongg==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.8.0.tgz", + "integrity": "sha512-5tNs6Bw0j6BdWuP8Fx+VH4G9fEPDxnVI7yH1IAPkQH5RUtvKwRoqdecAPdQXv4rSOADAaz1LFBZvZG7VbXivSg==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "6.3.0", - "@typescript-eslint/types": "6.3.0", - "@typescript-eslint/typescript-estree": "6.3.0", - "@typescript-eslint/visitor-keys": "6.3.0", + "@typescript-eslint/scope-manager": "6.8.0", + "@typescript-eslint/types": "6.8.0", + "@typescript-eslint/typescript-estree": "6.8.0", + "@typescript-eslint/visitor-keys": "6.8.0", "debug": "^4.3.4" }, "engines": { @@ -1810,13 +1897,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.3.0.tgz", - "integrity": "sha512-WlNFgBEuGu74ahrXzgefiz/QlVb+qg8KDTpknKwR7hMH+lQygWyx0CQFoUmMn1zDkQjTBBIn75IxtWss77iBIQ==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.8.0.tgz", + "integrity": "sha512-xe0HNBVwCph7rak+ZHcFD6A+q50SMsFwcmfdjs9Kz4qDh5hWhaPhFjRs/SODEhroBI5Ruyvyz9LfwUJ624O40g==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.3.0", - "@typescript-eslint/visitor-keys": "6.3.0" + "@typescript-eslint/types": "6.8.0", + "@typescript-eslint/visitor-keys": "6.8.0" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -1827,13 +1914,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.3.0.tgz", - "integrity": "sha512-7Oj+1ox1T2Yc8PKpBvOKWhoI/4rWFd1j7FA/rPE0lbBPXTKjdbtC+7Ev0SeBjEKkIhKWVeZSP+mR7y1Db1CdfQ==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.8.0.tgz", + "integrity": "sha512-RYOJdlkTJIXW7GSldUIHqc/Hkto8E+fZN96dMIFhuTJcQwdRoGN2rEWA8U6oXbLo0qufH7NPElUb+MceHtz54g==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "6.3.0", - "@typescript-eslint/utils": "6.3.0", + "@typescript-eslint/typescript-estree": "6.8.0", + "@typescript-eslint/utils": "6.8.0", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, @@ -1854,9 +1941,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.3.0.tgz", - "integrity": "sha512-K6TZOvfVyc7MO9j60MkRNWyFSf86IbOatTKGrpTQnzarDZPYPVy0oe3myTMq7VjhfsUAbNUW8I5s+2lZvtx1gg==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.8.0.tgz", + "integrity": "sha512-p5qOxSum7W3k+llc7owEStXlGmSl8FcGvhYt8Vjy7FqEnmkCVlM3P57XQEGj58oqaBWDQXbJDZxwUWMS/EAPNQ==", "dev": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -1867,13 +1954,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.3.0.tgz", - "integrity": "sha512-Xh4NVDaC4eYKY4O3QGPuQNp5NxBAlEvNQYOqJquR2MePNxO11E5K3t5x4M4Mx53IZvtpW+mBxIT0s274fLUocg==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.8.0.tgz", + "integrity": "sha512-ISgV0lQ8XgW+mvv5My/+iTUdRmGspducmQcDw5JxznasXNnZn3SKNrTRuMsEXv+V/O+Lw9AGcQCfVaOPCAk/Zg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.3.0", - "@typescript-eslint/visitor-keys": "6.3.0", + "@typescript-eslint/types": "6.8.0", + "@typescript-eslint/visitor-keys": "6.8.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -1894,17 +1981,17 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.3.0.tgz", - "integrity": "sha512-hLLg3BZE07XHnpzglNBG8P/IXq/ZVXraEbgY7FM0Cnc1ehM8RMdn9mat3LubJ3KBeYXXPxV1nugWbQPjGeJk6Q==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.8.0.tgz", + "integrity": "sha512-dKs1itdE2qFG4jr0dlYLQVppqTE+Itt7GmIf/vX6CSvsW+3ov8PbWauVKyyfNngokhIO9sKZeRGCUo1+N7U98Q==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.3.0", - "@typescript-eslint/types": "6.3.0", - "@typescript-eslint/typescript-estree": "6.3.0", + "@typescript-eslint/scope-manager": "6.8.0", + "@typescript-eslint/types": "6.8.0", + "@typescript-eslint/typescript-estree": "6.8.0", "semver": "^7.5.4" }, "engines": { @@ -1919,12 +2006,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.3.0.tgz", - "integrity": "sha512-kEhRRj7HnvaSjux1J9+7dBen15CdWmDnwrpyiHsFX6Qx2iW5LOBUgNefOFeh2PjWPlNwN8TOn6+4eBU3J/gupw==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.8.0.tgz", + "integrity": "sha512-oqAnbA7c+pgOhW2OhGvxm0t1BULX5peQI/rLsNDpGM78EebV3C9IGbX5HNZabuZ6UQrYveCLjKo8Iy/lLlBkkg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.3.0", + "@typescript-eslint/types": "6.8.0", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -2067,15 +2154,15 @@ } }, "node_modules/babel-jest": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.6.2.tgz", - "integrity": "sha512-BYCzImLos6J3BH/+HvUCHG1dTf2MzmAB4jaVxHV+29RZLjR29XuYTmsf2sdDwkrb+FczkGo3kOhE7ga6sI0P4A==", + "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.6.2", + "@jest/transform": "^29.7.0", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.5.0", + "babel-preset-jest": "^29.6.3", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "slash": "^3.0.0" @@ -2104,9 +2191,9 @@ } }, "node_modules/babel-plugin-jest-hoist": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz", - "integrity": "sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==", + "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", @@ -2142,12 +2229,12 @@ } }, "node_modules/babel-preset-jest": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz", - "integrity": "sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==", + "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.5.0", + "babel-plugin-jest-hoist": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0" }, "engines": { @@ -2384,6 +2471,27 @@ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true }, + "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", @@ -2469,9 +2577,9 @@ } }, "node_modules/diff-sequences": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", - "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", + "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" @@ -2535,9 +2643,9 @@ } }, "node_modules/esbuild": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.0.tgz", - "integrity": "sha512-i7i8TP4vuG55bKeLyqqk5sTPu1ZjPH3wkcLvAj/0X/222iWFo3AJUYRKjbOoY6BWFMH3teizxHEdV9Su5ESl0w==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.5.tgz", + "integrity": "sha512-bUxalY7b1g8vNhQKdB24QDmHeY4V4tw/s6Ak5z+jJX9laP5MoQseTOMemAr0gxssjNcH0MCViG8ONI2kksvfFQ==", "dev": true, "hasInstallScript": true, "bin": { @@ -2547,28 +2655,28 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/android-arm": "0.19.0", - "@esbuild/android-arm64": "0.19.0", - "@esbuild/android-x64": "0.19.0", - "@esbuild/darwin-arm64": "0.19.0", - "@esbuild/darwin-x64": "0.19.0", - "@esbuild/freebsd-arm64": "0.19.0", - "@esbuild/freebsd-x64": "0.19.0", - "@esbuild/linux-arm": "0.19.0", - "@esbuild/linux-arm64": "0.19.0", - "@esbuild/linux-ia32": "0.19.0", - "@esbuild/linux-loong64": "0.19.0", - "@esbuild/linux-mips64el": "0.19.0", - "@esbuild/linux-ppc64": "0.19.0", - "@esbuild/linux-riscv64": "0.19.0", - "@esbuild/linux-s390x": "0.19.0", - "@esbuild/linux-x64": "0.19.0", - "@esbuild/netbsd-x64": "0.19.0", - "@esbuild/openbsd-x64": "0.19.0", - "@esbuild/sunos-x64": "0.19.0", - "@esbuild/win32-arm64": "0.19.0", - "@esbuild/win32-ia32": "0.19.0", - "@esbuild/win32-x64": "0.19.0" + "@esbuild/android-arm": "0.19.5", + "@esbuild/android-arm64": "0.19.5", + "@esbuild/android-x64": "0.19.5", + "@esbuild/darwin-arm64": "0.19.5", + "@esbuild/darwin-x64": "0.19.5", + "@esbuild/freebsd-arm64": "0.19.5", + "@esbuild/freebsd-x64": "0.19.5", + "@esbuild/linux-arm": "0.19.5", + "@esbuild/linux-arm64": "0.19.5", + "@esbuild/linux-ia32": "0.19.5", + "@esbuild/linux-loong64": "0.19.5", + "@esbuild/linux-mips64el": "0.19.5", + "@esbuild/linux-ppc64": "0.19.5", + "@esbuild/linux-riscv64": "0.19.5", + "@esbuild/linux-s390x": "0.19.5", + "@esbuild/linux-x64": "0.19.5", + "@esbuild/netbsd-x64": "0.19.5", + "@esbuild/openbsd-x64": "0.19.5", + "@esbuild/sunos-x64": "0.19.5", + "@esbuild/win32-arm64": "0.19.5", + "@esbuild/win32-ia32": "0.19.5", + "@esbuild/win32-x64": "0.19.5" } }, "node_modules/escalade": { @@ -2593,16 +2701,16 @@ } }, "node_modules/eslint": { - "version": "8.46.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.46.0.tgz", - "integrity": "sha512-cIO74PvbW0qU8e0mIvk5IV3ToWdCq5FYG6gWPHHkx6gNdjlbAYvtfHmlCMXxjcoVaIdwy/IAt3+mDkZkfvb2Dg==", + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.51.0.tgz", + "integrity": "sha512-2WuxRZBrlwnXi+/vFSJyjMqrNjtJqiasMzehF0shoLaW7DzS3/9Yvrmq5JiT66+pNjiX4UBnLDiKHcWAr/OInA==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.1", - "@eslint/js": "^8.46.0", - "@humanwhocodes/config-array": "^0.11.10", + "@eslint/eslintrc": "^2.1.2", + "@eslint/js": "8.51.0", + "@humanwhocodes/config-array": "^0.11.11", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.12.4", @@ -2612,7 +2720,7 @@ "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.2", + "eslint-visitor-keys": "^3.4.3", "espree": "^9.6.1", "esquery": "^1.4.2", "esutils": "^2.0.2", @@ -2663,9 +2771,9 @@ } }, "node_modules/eslint-visitor-keys": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.2.tgz", - "integrity": "sha512-8drBzUEyZ2llkpCA67iYrgEssKDUu68V8ChqqOfFupIaG/LCVPUT+CoGJpT77zJprs4T/W7p07LP7zAIMuweVw==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2779,17 +2887,16 @@ } }, "node_modules/expect": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.6.2.tgz", - "integrity": "sha512-iAErsLxJ8C+S02QbLAwgSGSezLQK+XXRDt8IuFXFpwCNw2ECmzZSmjKcCaFVp5VRMk+WAvz6h6jokzEzBFZEuA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", "dev": true, "dependencies": { - "@jest/expect-utils": "^29.6.2", - "@types/node": "*", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.6.2", - "jest-message-util": "^29.6.2", - "jest-util": "^29.6.2" + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -2925,9 +3032,9 @@ "dev": true }, "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, "optional": true, @@ -2938,12 +3045,6 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -3016,9 +3117,9 @@ } }, "node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "version": "13.23.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", + "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -3063,13 +3164,10 @@ "dev": true }, "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", + "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, "engines": { "node": ">= 0.4.0" } @@ -3336,15 +3434,15 @@ } }, "node_modules/jest": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.6.2.tgz", - "integrity": "sha512-8eQg2mqFbaP7CwfsTpCxQ+sHzw1WuNWL5UUvjnWP4hx2riGz9fPSzYOaU5q8/GqWn1TfgZIVTqYJygbGbWAANg==", + "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.6.2", - "@jest/types": "^29.6.1", + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", "import-local": "^3.0.2", - "jest-cli": "^29.6.2" + "jest-cli": "^29.7.0" }, "bin": { "jest": "bin/jest.js" @@ -3362,12 +3460,13 @@ } }, "node_modules/jest-changed-files": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.5.0.tgz", - "integrity": "sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==", + "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": { @@ -3375,28 +3474,28 @@ } }, "node_modules/jest-circus": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.6.2.tgz", - "integrity": "sha512-G9mN+KOYIUe2sB9kpJkO9Bk18J4dTDArNFPwoZ7WKHKel55eKIS/u2bLthxgojwlf9NLCVQfgzM/WsOVvoC6Fw==", + "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.6.2", - "@jest/expect": "^29.6.2", - "@jest/test-result": "^29.6.2", - "@jest/types": "^29.6.1", + "@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.6.2", - "jest-matcher-utils": "^29.6.2", - "jest-message-util": "^29.6.2", - "jest-runtime": "^29.6.2", - "jest-snapshot": "^29.6.2", - "jest-util": "^29.6.2", + "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.6.2", + "pretty-format": "^29.7.0", "pure-rand": "^6.0.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" @@ -3406,22 +3505,21 @@ } }, "node_modules/jest-cli": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.6.2.tgz", - "integrity": "sha512-TT6O247v6dCEX2UGHGyflMpxhnrL0DNqP2fRTKYm3nJJpCTfXX3GCMQPGFjXDoj0i5/Blp3jriKXFgdfmbYB6Q==", + "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.6.2", - "@jest/test-result": "^29.6.2", - "@jest/types": "^29.6.1", + "@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", - "graceful-fs": "^4.2.9", "import-local": "^3.0.2", - "jest-config": "^29.6.2", - "jest-util": "^29.6.2", - "jest-validate": "^29.6.2", - "prompts": "^2.0.1", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", "yargs": "^17.3.1" }, "bin": { @@ -3440,31 +3538,31 @@ } }, "node_modules/jest-config": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.6.2.tgz", - "integrity": "sha512-VxwFOC8gkiJbuodG9CPtMRjBUNZEHxwfQXmIudSTzFWxaci3Qub1ddTRbFNQlD/zUeaifLndh/eDccFX4wCMQw==", + "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.6.2", - "@jest/types": "^29.6.1", - "babel-jest": "^29.6.2", + "@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.6.2", - "jest-environment-node": "^29.6.2", - "jest-get-type": "^29.4.3", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.6.2", - "jest-runner": "^29.6.2", - "jest-util": "^29.6.2", - "jest-validate": "^29.6.2", + "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.6.2", + "pretty-format": "^29.7.0", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" }, @@ -3485,24 +3583,24 @@ } }, "node_modules/jest-diff": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.6.2.tgz", - "integrity": "sha512-t+ST7CB9GX5F2xKwhwCf0TAR17uNDiaPTZnVymP9lw0lssa9vG+AFyDZoeIHStU3WowFFwT+ky+er0WVl2yGhA==", + "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.4.3", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.6.2" + "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.4.3", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz", - "integrity": "sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==", + "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" @@ -3512,62 +3610,62 @@ } }, "node_modules/jest-each": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.6.2.tgz", - "integrity": "sha512-MsrsqA0Ia99cIpABBc3izS1ZYoYfhIy0NNWqPSE0YXbQjwchyt6B1HD2khzyPe1WiJA7hbxXy77ZoUQxn8UlSw==", + "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.1", + "@jest/types": "^29.6.3", "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", - "jest-util": "^29.6.2", - "pretty-format": "^29.6.2" + "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.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.6.2.tgz", - "integrity": "sha512-YGdFeZ3T9a+/612c5mTQIllvWkddPbYcN2v95ZH24oWMbGA4GGS2XdIF92QMhUhvrjjuQWYgUGW2zawOyH63MQ==", + "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.6.2", - "@jest/fake-timers": "^29.6.2", - "@jest/types": "^29.6.1", + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", - "jest-mock": "^29.6.2", - "jest-util": "^29.6.2" + "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.4.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", - "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", + "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.6.2", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.6.2.tgz", - "integrity": "sha512-+51XleTDAAysvU8rT6AnS1ZJ+WHVNqhj1k6nTvN2PYP+HjU3kqlaKQ1Lnw3NYW3bm2r8vq82X0Z1nDDHZMzHVA==", + "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.1", + "@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.4.3", - "jest-util": "^29.6.2", - "jest-worker": "^29.6.2", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", "micromatch": "^4.0.4", "walker": "^1.0.8" }, @@ -3579,46 +3677,46 @@ } }, "node_modules/jest-leak-detector": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.6.2.tgz", - "integrity": "sha512-aNqYhfp5uYEO3tdWMb2bfWv6f0b4I0LOxVRpnRLAeque2uqOVVMLh6khnTcE2qJ5wAKop0HcreM1btoysD6bPQ==", + "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.4.3", - "pretty-format": "^29.6.2" + "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.6.2", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.6.2.tgz", - "integrity": "sha512-4LiAk3hSSobtomeIAzFTe+N8kL6z0JtF3n6I4fg29iIW7tt99R7ZcIFW34QkX+DuVrf+CUe6wuVOpm7ZKFJzZQ==", + "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.6.2", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.6.2" + "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.6.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.6.2.tgz", - "integrity": "sha512-vnIGYEjoPSuRqV8W9t+Wow95SDp6KPX2Uf7EoeG9G99J2OVh7OSwpS4B6J0NfpEIpfkBNHlBZpA2rblEuEFhZQ==", + "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.1", + "@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.6.2", + "pretty-format": "^29.7.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, @@ -3627,14 +3725,14 @@ } }, "node_modules/jest-mock": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.2.tgz", - "integrity": "sha512-hoSv3lb3byzdKfwqCuT6uTscan471GUECqgNYykg6ob0yiAw3zYc7OrPnI9Qv8Wwoa4lC7AZ9hyS4AiIx5U2zg==", + "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.1", + "@jest/types": "^29.6.3", "@types/node": "*", - "jest-util": "^29.6.2" + "jest-util": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -3658,26 +3756,26 @@ } }, "node_modules/jest-regex-util": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.4.3.tgz", - "integrity": "sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==", + "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.6.2", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.6.2.tgz", - "integrity": "sha512-G/iQUvZWI5e3SMFssc4ug4dH0aZiZpsDq9o1PtXTV1210Ztyb2+w+ZgQkB3iOiC5SmAEzJBOHWz6Hvrd+QnNPw==", + "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.6.2", + "jest-haste-map": "^29.7.0", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.6.2", - "jest-validate": "^29.6.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", "resolve": "^1.20.0", "resolve.exports": "^2.0.0", "slash": "^3.0.0" @@ -3687,43 +3785,43 @@ } }, "node_modules/jest-resolve-dependencies": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.2.tgz", - "integrity": "sha512-LGqjDWxg2fuQQm7ypDxduLu/m4+4Lb4gczc13v51VMZbVP5tSBILqVx8qfWcsdP8f0G7aIqByIALDB0R93yL+w==", + "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.4.3", - "jest-snapshot": "^29.6.2" + "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.6.2", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.6.2.tgz", - "integrity": "sha512-wXOT/a0EspYgfMiYHxwGLPCZfC0c38MivAlb2lMEAlwHINKemrttu1uSbcGbfDV31sFaPWnWJPmb2qXM8pqZ4w==", + "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.6.2", - "@jest/environment": "^29.6.2", - "@jest/test-result": "^29.6.2", - "@jest/transform": "^29.6.2", - "@jest/types": "^29.6.1", + "@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.4.3", - "jest-environment-node": "^29.6.2", - "jest-haste-map": "^29.6.2", - "jest-leak-detector": "^29.6.2", - "jest-message-util": "^29.6.2", - "jest-resolve": "^29.6.2", - "jest-runtime": "^29.6.2", - "jest-util": "^29.6.2", - "jest-watcher": "^29.6.2", - "jest-worker": "^29.6.2", + "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" }, @@ -3732,31 +3830,31 @@ } }, "node_modules/jest-runtime": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.6.2.tgz", - "integrity": "sha512-2X9dqK768KufGJyIeLmIzToDmsN0m7Iek8QNxRSI/2+iPFYHF0jTwlO3ftn7gdKd98G/VQw9XJCk77rbTGZnJg==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.6.2", - "@jest/fake-timers": "^29.6.2", - "@jest/globals": "^29.6.2", - "@jest/source-map": "^29.6.0", - "@jest/test-result": "^29.6.2", - "@jest/transform": "^29.6.2", - "@jest/types": "^29.6.1", + "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.6.2", - "jest-message-util": "^29.6.2", - "jest-mock": "^29.6.2", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.6.2", - "jest-snapshot": "^29.6.2", - "jest-util": "^29.6.2", + "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" }, @@ -3765,9 +3863,9 @@ } }, "node_modules/jest-snapshot": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.6.2.tgz", - "integrity": "sha512-1OdjqvqmRdGNvWXr/YZHuyhh5DeaLp1p/F8Tht/MrMw4Kr1Uu/j4lRG+iKl1DAqUJDWxtQBMk41Lnf/JETYBRA==", + "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", @@ -3775,20 +3873,20 @@ "@babel/plugin-syntax-jsx": "^7.7.2", "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.6.2", - "@jest/transform": "^29.6.2", - "@jest/types": "^29.6.1", + "@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.6.2", + "expect": "^29.7.0", "graceful-fs": "^4.2.9", - "jest-diff": "^29.6.2", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.6.2", - "jest-message-util": "^29.6.2", - "jest-util": "^29.6.2", + "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.6.2", + "pretty-format": "^29.7.0", "semver": "^7.5.3" }, "engines": { @@ -3796,12 +3894,12 @@ } }, "node_modules/jest-util": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.6.2.tgz", - "integrity": "sha512-3eX1qb6L88lJNCFlEADKOkjpXJQyZRiavX1INZ4tRnrBVr2COd3RgcTLyUiEXMNBlDU/cgYq6taUS0fExrWW4w==", + "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.1", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -3813,17 +3911,17 @@ } }, "node_modules/jest-validate": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.6.2.tgz", - "integrity": "sha512-vGz0yMN5fUFRRbpJDPwxMpgSXW1LDKROHfBopAvDcmD6s+B/s8WJrwi+4bfH4SdInBA5C3P3BI19dBtKzx1Arg==", + "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.1", + "@jest/types": "^29.6.3", "camelcase": "^6.2.0", "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", + "jest-get-type": "^29.6.3", "leven": "^3.1.0", - "pretty-format": "^29.6.2" + "pretty-format": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -3842,18 +3940,18 @@ } }, "node_modules/jest-watcher": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.6.2.tgz", - "integrity": "sha512-GZitlqkMkhkefjfN/p3SJjrDaxPflqxEAv3/ik10OirZqJGYH5rPiIsgVcfof0Tdqg3shQGdEIxDBx+B4tuLzA==", + "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.6.2", - "@jest/types": "^29.6.1", + "@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.6.2", + "jest-util": "^29.7.0", "string-length": "^4.0.1" }, "engines": { @@ -3861,13 +3959,13 @@ } }, "node_modules/jest-worker": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.2.tgz", - "integrity": "sha512-l3ccBOabTdkng8I/ORCkADz4eSMKejTYv1vB/Z83UiubqhC1oQ5Li6dWCyqOIvSifGjUBxuvxvlm6KGK2DtuAQ==", + "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.6.2", + "jest-util": "^29.7.0", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, @@ -4114,12 +4212,6 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -4406,12 +4498,12 @@ } }, "node_modules/pretty-format": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.2.tgz", - "integrity": "sha512-1q0oC8eRveTg5nnBEWMXAU2qpv65Gnuf2eCQzSjxpWFkPaPARwqZZDGuNE0zPAZfTCHzIk3A8dIjwlQKKLphyg==", + "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.0", + "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" }, @@ -4454,9 +4546,9 @@ } }, "node_modules/pure-rand": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.2.tgz", - "integrity": "sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==", + "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": [ { @@ -4505,9 +4597,9 @@ } }, "node_modules/resolve": { - "version": "1.22.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", - "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, "dependencies": { "is-core-module": "^2.13.0", @@ -5001,9 +5093,9 @@ } }, "node_modules/typescript": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", - "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -5055,25 +5147,19 @@ "dev": true }, "node_modules/v8-to-istanbul": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", - "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.3.tgz", + "integrity": "sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg==", "dev": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" + "convert-source-map": "^2.0.0" }, "engines": { "node": ">=10.12.0" } }, - "node_modules/v8-to-istanbul/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, "node_modules/walker": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", diff --git a/extension/package.json b/extension/package.json index 4b3b2484..03f1db89 100644 --- a/extension/package.json +++ b/extension/package.json @@ -14,17 +14,17 @@ "test-watch": "jest --watch" }, "dependencies": { - "@exasol/extension-manager-interface": "0.3.0" + "@exasol/extension-manager-interface": "0.3.1" }, "devDependencies": { - "@types/jest": "^29.5.3", - "@typescript-eslint/eslint-plugin": "^6.3.0", - "@typescript-eslint/parser": "^6.3.0", - "esbuild": "^0.19.0", - "eslint": "^8.46.0", - "jest": "29.6.2", + "@types/jest": "^29.5.6", + "@typescript-eslint/eslint-plugin": "^6.8.0", + "@typescript-eslint/parser": "^6.8.0", + "esbuild": "^0.19.5", + "eslint": "^8.51.0", + "jest": "29.7.0", "ts-jest": "^29.1.1", "ts-node": "^10.9.1", - "typescript": "^5.1.6" + "typescript": "^5.2.2" } } \ No newline at end of file From fa07b530eff7130c4be7c62e08ec868d0a8c2430 Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Mon, 30 Oct 2023 11:01:25 +0100 Subject: [PATCH 03/30] Increment version --- dependencies.md | 2 +- doc/changes/changelog.md | 1 + doc/changes/changes_2.8.3.md | 27 +++++++++++++++++++++++++++ pk_generated_parent.pom | 2 +- pom.xml | 4 ++-- 5 files changed, 32 insertions(+), 4 deletions(-) create mode 100644 doc/changes/changes_2.8.3.md diff --git a/dependencies.md b/dependencies.md index 56081f79..3e536269 100644 --- a/dependencies.md +++ b/dependencies.md @@ -138,4 +138,4 @@ [61]: http://zlika.github.io/reproducible-build-maven-plugin [62]: https://maven.apache.org/plugins/maven-clean-plugin/ [63]: https://www.mojohaus.org/exec-maven-plugin -[64]: https://registry.npmjs.org/@exasol/extension-manager-interface/-/extension-manager-interface-0.3.0.tgz +[64]: https://registry.npmjs.org/@exasol/extension-manager-interface/-/extension-manager-interface-0.3.1.tgz diff --git a/doc/changes/changelog.md b/doc/changes/changelog.md index dc8afa83..4aa33a9d 100644 --- a/doc/changes/changelog.md +++ b/doc/changes/changelog.md @@ -1,5 +1,6 @@ # Changes +* [2.8.3](changes_2.8.3.md) * [2.8.2](changes_2.8.2.md) * [2.8.1](changes_2.8.1.md) * [2.8.0](changes_2.8.0.md) diff --git a/doc/changes/changes_2.8.3.md b/doc/changes/changes_2.8.3.md new file mode 100644 index 00000000..be191218 --- /dev/null +++ b/doc/changes/changes_2.8.3.md @@ -0,0 +1,27 @@ +# S3 Document Files Virtual Schema 2.8.3, released 2023-??-?? + +Code name: + +## Summary + +## Refactoring + +* #137: Extracted common code for virtual schema based extensions + +## Dependency Updates + +### Extension + +#### Compile Dependency Updates + +* Updated `@exasol/extension-manager-interface:0.3.0` to `0.3.1` + +#### Development Dependency Updates + +* Updated `eslint:^8.46.0` to `^8.51.0` +* Updated `@typescript-eslint/parser:^6.3.0` to `^6.8.0` +* Updated `@types/jest:^29.5.3` to `^29.5.6` +* Updated `typescript:^5.1.6` to `^5.2.2` +* Updated `@typescript-eslint/eslint-plugin:^6.3.0` to `^6.8.0` +* Updated `jest:29.6.2` to `29.7.0` +* Updated `esbuild:^0.19.0` to `^0.19.5` diff --git a/pk_generated_parent.pom b/pk_generated_parent.pom index f81ee64e..13731d42 100644 --- a/pk_generated_parent.pom +++ b/pk_generated_parent.pom @@ -3,7 +3,7 @@ 4.0.0 com.exasol s3-document-files-virtual-schema-generated-parent - 2.8.2 + 2.8.3 pom UTF-8 diff --git a/pom.xml b/pom.xml index 9729ecf2..a871b3bc 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 s3-document-files-virtual-schema - 2.8.2 + 2.8.3 Virtual Schema for document data in files on AWS S3 Adapter for document data access from files from AWS S3. https://github.com/exasol/s3-document-files-virtual-schema/ @@ -351,7 +351,7 @@ s3-document-files-virtual-schema-generated-parent com.exasol - 2.8.2 + 2.8.3 pk_generated_parent.pom From 5121daf44e5bd289d7aff6744826b43a5298a35c Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Mon, 30 Oct 2023 11:03:22 +0100 Subject: [PATCH 04/30] Revert changes to previous changelog --- doc/changes/changes_2.8.2.md | 28 ---------------------------- 1 file changed, 28 deletions(-) diff --git a/doc/changes/changes_2.8.2.md b/doc/changes/changes_2.8.2.md index e8f950e4..2c2da895 100644 --- a/doc/changes/changes_2.8.2.md +++ b/doc/changes/changes_2.8.2.md @@ -16,15 +16,6 @@ This release upgrades to [virtual-schema-common-document-files 7.3.6](https://gi #### Compile Dependency Updates -<<<<<<< HEAD -* Updated `software.amazon.awssdk:s3:2.20.156` to `2.21.4` - -#### Test Dependency Updates - -* Updated `com.amazonaws:aws-java-sdk-s3:1.12.559` to `1.12.570` -* Updated `com.exasol:extension-manager-integration-test-java:0.5.1` to `0.5.4` -* Updated `com.fasterxml.jackson.core:jackson-databind:2.15.2` to `2.15.3` -======= * Updated `com.exasol:virtual-schema-common-document-files:7.3.4` to `7.3.6` * Updated `software.amazon.awssdk:s3:2.20.156` to `2.21.6` @@ -35,28 +26,10 @@ This release upgrades to [virtual-schema-common-document-files 7.3.6](https://gi * Updated `com.exasol:virtual-schema-common-document-files:7.3.4` to `7.3.6` * Updated `com.fasterxml.jackson.core:jackson-databind:2.15.2` to `2.15.3` * Updated `org.jacoco:org.jacoco.agent:0.8.10` to `0.8.11` ->>>>>>> origin/main * Updated `org.mockito:mockito-core:5.5.0` to `5.6.0` * Updated `org.testcontainers:junit-jupiter:1.19.0` to `1.19.1` * Updated `org.testcontainers:localstack:1.19.0` to `1.19.1` -<<<<<<< HEAD -### Extension - -#### Compile Dependency Updates - -* Updated `@exasol/extension-manager-interface:0.3.0` to `0.3.1` - -#### Development Dependency Updates - -* Updated `eslint:^8.46.0` to `^8.51.0` -* Updated `@typescript-eslint/parser:^6.3.0` to `^6.8.0` -* Updated `@types/jest:^29.5.3` to `^29.5.6` -* Updated `typescript:^5.1.6` to `^5.2.2` -* Updated `@typescript-eslint/eslint-plugin:^6.3.0` to `^6.8.0` -* Updated `jest:29.6.2` to `29.7.0` -* Updated `esbuild:^0.19.0` to `^0.19.5` -======= #### Plugin Dependency Updates * Updated `com.exasol:error-code-crawler-maven-plugin:1.3.0` to `1.3.1` @@ -65,4 +38,3 @@ This release upgrades to [virtual-schema-common-document-files 7.3.6](https://gi * Updated `org.codehaus.mojo:versions-maven-plugin:2.16.0` to `2.16.1` * Updated `org.jacoco:jacoco-maven-plugin:0.8.10` to `0.8.11` * Updated `org.sonarsource.scanner.maven:sonar-maven-plugin:3.9.1.2184` to `3.10.0.2594` ->>>>>>> origin/main From 5ddd62ee9a47e64e127d0f32aea3dde6c5f5e2ba Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Tue, 31 Oct 2023 07:34:28 +0100 Subject: [PATCH 05/30] Update references --- doc/hands_on/hands_on.md | 6 +++--- doc/hands_on/hands_on_parquet.md | 6 +++--- doc/user_guide/user_guide.md | 8 ++++---- .../adapter/document/files/IntegrationTestSetup.java | 2 +- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/doc/hands_on/hands_on.md b/doc/hands_on/hands_on.md index 7abbd525..370554e6 100644 --- a/doc/hands_on/hands_on.md +++ b/doc/hands_on/hands_on.md @@ -62,7 +62,7 @@ For the document Virtual Schemas, and by that also the S3 Virtual Schema, this i To install the Virtual Schema adapter, download its latest jar from the [releases](https://github.com/exasol/s3-document-files-virtual-schema/releases) and upload to BucketFS: ``` shell script -curl -I -X PUT -T document-files-virtual-schema-dist-7.3.6-s3-2.8.2.jar http://w:writepw@:2580/default/ +curl -I -X PUT -T document-files-virtual-schema-dist-7.3.6-s3-2.8.3.jar http://w:writepw@:2580/default/ ``` (If you have never used BucketFS, you can check out [its documentation](https://docs.exasol.com/database_concepts/bucketfs/bucketfs.htm)) @@ -75,7 +75,7 @@ CREATE SCHEMA ADAPTER; --/ CREATE OR REPLACE JAVA ADAPTER SCRIPT ADAPTER.S3_FILES_ADAPTER AS %scriptclass com.exasol.adapter.RequestDispatcher; - %jar /buckets/bfsdefault/default/document-files-virtual-schema-dist-7.3.6-s3-2.8.2.jar; + %jar /buckets/bfsdefault/default/document-files-virtual-schema-dist-7.3.6-s3-2.8.3.jar; / --/ @@ -85,7 +85,7 @@ CREATE OR REPLACE JAVA SET SCRIPT ADAPTER.IMPORT_FROM_S3_DOCUMENT_FILES( CONNECTION_NAME VARCHAR(500)) EMITS(...) AS %scriptclass com.exasol.adapter.document.UdfEntryPoint; - %jar /buckets/bfsdefault/default/document-files-virtual-schema-dist-7.3.6-s3-2.8.2.jar; + %jar /buckets/bfsdefault/default/document-files-virtual-schema-dist-7.3.6-s3-2.8.3.jar; / ``` diff --git a/doc/hands_on/hands_on_parquet.md b/doc/hands_on/hands_on_parquet.md index 4552e66a..abe22de4 100644 --- a/doc/hands_on/hands_on_parquet.md +++ b/doc/hands_on/hands_on_parquet.md @@ -47,7 +47,7 @@ For the document Virtual Schemas, and by that also the S3 Virtual Schema, this i To install the Virtual Schema adapter, download its latest jar from the [releases](https://github.com/exasol/s3-document-files-virtual-schema/releases) and upload to BucketFS: ``` shell script -curl -I -X PUT -T document-files-virtual-schema-dist-7.3.6-s3-2.8.2.jar http://w:writepw@:2580/default/ +curl -I -X PUT -T document-files-virtual-schema-dist-7.3.6-s3-2.8.3.jar http://w:writepw@:2580/default/ ``` (If you have never used BucketFS, you can check out [its documentation](https://docs.exasol.com/database_concepts/bucketfs/bucketfs.htm)) @@ -59,7 +59,7 @@ CREATE SCHEMA ADAPTER; CREATE OR REPLACE JAVA ADAPTER SCRIPT ADAPTER.S3_FILES_ADAPTER AS %scriptclass com.exasol.adapter.RequestDispatcher; - %jar /buckets/bfsdefault/default/document-files-virtual-schema-dist-7.3.6-s3-2.8.2.jar; + %jar /buckets/bfsdefault/default/document-files-virtual-schema-dist-7.3.6-s3-2.8.3.jar; / CREATE OR REPLACE JAVA SET SCRIPT ADAPTER.IMPORT_FROM_S3_DOCUMENT_FILES( @@ -68,7 +68,7 @@ CREATE OR REPLACE JAVA SET SCRIPT ADAPTER.IMPORT_FROM_S3_DOCUMENT_FILES( CONNECTION_NAME VARCHAR(500)) EMITS(...) AS %scriptclass com.exasol.adapter.document.UdfEntryPoint; - %jar /buckets/bfsdefault/default/document-files-virtual-schema-dist-7.3.6-s3-2.8.2.jar; + %jar /buckets/bfsdefault/default/document-files-virtual-schema-dist-7.3.6-s3-2.8.3.jar; / ``` diff --git a/doc/user_guide/user_guide.md b/doc/user_guide/user_guide.md index cae92261..d1617d85 100644 --- a/doc/user_guide/user_guide.md +++ b/doc/user_guide/user_guide.md @@ -17,7 +17,7 @@ Next create the Adapter Script: ```sql CREATE OR REPLACE JAVA ADAPTER SCRIPT ADAPTER.S3_FILES_ADAPTER AS %scriptclass com.exasol.adapter.RequestDispatcher; - %jar /buckets/bfsdefault/default/document-files-virtual-schema-dist-7.3.6-s3-2.8.2.jar; + %jar /buckets/bfsdefault/default/document-files-virtual-schema-dist-7.3.6-s3-2.8.3.jar; / ``` @@ -30,7 +30,7 @@ CREATE OR REPLACE JAVA SET SCRIPT ADAPTER.IMPORT_FROM_S3_DOCUMENT_FILES( CONNECTION_NAME VARCHAR(500)) EMITS(...) AS %scriptclass com.exasol.adapter.document.UdfEntryPoint; - %jar /buckets/bfsdefault/default/document-files-virtual-schema-dist-7.3.6-s3-2.8.2.jar; + %jar /buckets/bfsdefault/default/document-files-virtual-schema-dist-7.3.6-s3-2.8.3.jar; / ``` @@ -77,7 +77,7 @@ In the definitions you have to define the `source` property. For S3, you define This Virtual Schema adapter automatically detects the type of the document file by the file extension. You can find a list of supported file types and their extensions in the [user guide of the common repository for all file Virtual Schemas](https://github.com/exasol/virtual-schema-common-document-files/blob/main/doc/user_guide/user_guide.md). -### Mapping multiple files +### Mapping Multiple Files For some file type (for example JSON) each source file contains only a single document. That means, that you have one file for each row in the mapped table. To define mappings for such types, you can use the GLOB syntax. That means, you can use `*` and `?` as wildcards, where `*` matches multiple characters and `?` a single one. @@ -126,7 +126,7 @@ In DbVisualizer use exactly this command: --/ CREATE OR REPLACE JAVA ADAPTER SCRIPT ADAPTER.S3_FILES_ADAPTER AS %scriptclass com.exasol.adapter.RequestDispatcher; - %jar /buckets/bfsdefault/default/vs/document-files-virtual-schema-dist-7.3.6-s3-2.8.2.jar; + %jar /buckets/bfsdefault/default/vs/document-files-virtual-schema-dist-7.3.6-s3-2.8.3.jar; / ``` diff --git a/src/test/java/com/exasol/adapter/document/files/IntegrationTestSetup.java b/src/test/java/com/exasol/adapter/document/files/IntegrationTestSetup.java index ac0765fe..af70e187 100644 --- a/src/test/java/com/exasol/adapter/document/files/IntegrationTestSetup.java +++ b/src/test/java/com/exasol/adapter/document/files/IntegrationTestSetup.java @@ -28,7 +28,7 @@ public class IntegrationTestSetup implements AutoCloseable { public static final Path CLOUD_SETUP_CONFIG = Path.of("cloudSetup/generated/testConfig.json"); - public static final String ADAPTER_JAR = "document-files-virtual-schema-dist-7.3.6-s3-2.8.2.jar"; + public static final String ADAPTER_JAR = "document-files-virtual-schema-dist-7.3.6-s3-2.8.3.jar"; public static final Path ADAPTER_JAR_LOCAL_PATH = Path.of("target", ADAPTER_JAR); public final String s3BucketName; private final ExasolTestSetup exasolTestSetup = new ExasolTestSetupFactory(CLOUD_SETUP_CONFIG).getTestSetup(); From da61a1d309eacd1cd519fe81302dc62cf17ab32c Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Tue, 31 Oct 2023 07:37:10 +0100 Subject: [PATCH 06/30] Upgrade dependencies --- .github/workflows/dependencies_check.yml | 23 +++++++++++++++++++---- dependencies.md | 2 +- doc/changes/changes_2.8.3.md | 24 ++++++++++++++++++++---- pom.xml | 10 +++++----- 4 files changed, 45 insertions(+), 14 deletions(-) diff --git a/.github/workflows/dependencies_check.yml b/.github/workflows/dependencies_check.yml index 3059964b..4b6eadf6 100644 --- a/.github/workflows/dependencies_check.yml +++ b/.github/workflows/dependencies_check.yml @@ -1,12 +1,15 @@ -name: Dependencies Check +name: Report Security Issues for Repository on: + workflow_dispatch: schedule: - cron: "0 2 * * *" jobs: - build: + report_security_issues: runs-on: ubuntu-latest + permissions: + issues: write steps: - uses: actions/checkout@v4 @@ -16,5 +19,17 @@ jobs: distribution: "temurin" java-version: 11 cache: "maven" - - name: Checking dependencies for vulnerabilities - run: mvn --batch-mode org.sonatype.ossindex.maven:ossindex-maven-plugin:audit -f pom.xml + + - name: Generate ossindex report + run: | + mvn org.sonatype.ossindex.maven:ossindex-maven-plugin:audit \ + org.sonatype.ossindex.maven:ossindex-maven-plugin:audit-aggregate \ + -Dossindex.reportFile=$(pwd)/ossindex-report.json \ + -Dossindex.fail=false + + - name: Report Security Issues + uses: exasol/python-toolbox/.github/actions/security-issues@main + with: + format: "maven" + command: "cat ossindex-report.json" + github-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/dependencies.md b/dependencies.md index 3e536269..cfbc34b7 100644 --- a/dependencies.md +++ b/dependencies.md @@ -138,4 +138,4 @@ [61]: http://zlika.github.io/reproducible-build-maven-plugin [62]: https://maven.apache.org/plugins/maven-clean-plugin/ [63]: https://www.mojohaus.org/exec-maven-plugin -[64]: https://registry.npmjs.org/@exasol/extension-manager-interface/-/extension-manager-interface-0.3.1.tgz +[64]: file:../../../../extension-manager-interface diff --git a/doc/changes/changes_2.8.3.md b/doc/changes/changes_2.8.3.md index be191218..7c5850fe 100644 --- a/doc/changes/changes_2.8.3.md +++ b/doc/changes/changes_2.8.3.md @@ -10,18 +10,34 @@ Code name: ## Dependency Updates +### Virtual Schema for Document Data in Files on AWS S3 + +#### Compile Dependency Updates + +* Updated `software.amazon.awssdk:s3:2.21.6` to `2.21.11` + +#### Test Dependency Updates + +* Updated `com.amazonaws:aws-java-sdk-s3:1.12.572` to `1.12.577` +* Updated `com.exasol:extension-manager-integration-test-java:0.5.3` to `0.5.4` +* Updated `com.exasol:hamcrest-resultset-matcher:1.6.1` to `1.6.2` + +#### Plugin Dependency Updates + +* Updated `com.exasol:project-keeper-maven-plugin:2.9.14` to `2.9.15` + ### Extension #### Compile Dependency Updates -* Updated `@exasol/extension-manager-interface:0.3.0` to `0.3.1` +* Updated `@exasol/extension-manager-interface:0.3.0` to `/Users/chp/git/extension-manager-interface` #### Development Dependency Updates -* Updated `eslint:^8.46.0` to `^8.51.0` -* Updated `@typescript-eslint/parser:^6.3.0` to `^6.8.0` +* Updated `eslint:^8.46.0` to `^8.52.0` +* Updated `@typescript-eslint/parser:^6.3.0` to `^6.9.0` * Updated `@types/jest:^29.5.3` to `^29.5.6` * Updated `typescript:^5.1.6` to `^5.2.2` -* Updated `@typescript-eslint/eslint-plugin:^6.3.0` to `^6.8.0` +* Updated `@typescript-eslint/eslint-plugin:^6.3.0` to `^6.9.0` * Updated `jest:29.6.2` to `29.7.0` * Updated `esbuild:^0.19.0` to `^0.19.5` diff --git a/pom.xml b/pom.xml index a871b3bc..d446f0a8 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ software.amazon.awssdk bom - 2.21.6 + 2.21.11 pom import @@ -136,7 +136,7 @@ com.amazonaws aws-java-sdk-s3 - 1.12.572 + 1.12.577 test @@ -154,7 +154,7 @@ com.exasol hamcrest-resultset-matcher - 1.6.1 + 1.6.2 test @@ -190,7 +190,7 @@ com.exasol extension-manager-integration-test-java - 0.5.3 + 0.5.4 test @@ -232,7 +232,7 @@ com.exasol project-keeper-maven-plugin - 2.9.14 + 2.9.15 From 432ea65b5009e29dee92ce29bcc1d57fb883f492 Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Tue, 31 Oct 2023 11:28:48 +0100 Subject: [PATCH 07/30] #137: Migrate to base extension --- extension/src/extension.ts | 131 +++++++++++------- .../document/files/extension/ExtensionIT.java | 126 ++++++++++------- 2 files changed, 154 insertions(+), 103 deletions(-) diff --git a/extension/src/extension.ts b/extension/src/extension.ts index b1f5700d..2b15a40e 100644 --- a/extension/src/extension.ts +++ b/extension/src/extension.ts @@ -1,70 +1,95 @@ /* eslint-disable @typescript-eslint/no-unused-vars */ import { - Context, ExaMetadata, ExasolExtension, - Installation, - Instance, NotFoundError, Parameter, ParameterValues, + Parameter, + SelectOption, registerExtension } from "@exasol/extension-manager-interface"; -import { addInstance } from "./addInstance"; -import { EXTENSION_NAME, ExtensionInfo } from "./common"; -import { deleteInstance } from "./deleteInstance"; +import { ScriptDefinition, jarFileVersionExtractor } from "@exasol/extension-manager-interface/dist/base"; +import { convertVirtualSchemaBaseExtension, createJsonConnectionDefinition, createVirtualSchemaBuilder } from "@exasol/extension-manager-interface/dist/base-vs"; +import { ADAPTER_SCRIPT_NAME, EXTENSION_NAME, IMPORT_SCRIPT_NAME } from "./common"; import { CONFIG } from "./extension-config"; -import { findInstallations } from "./findInstallations"; -import { findInstances } from "./findInstances"; -import { installExtension } from "./installExtension"; -import { createInstanceParameters } from "./parameterDefinitions"; -import { uninstall } from "./uninstallExtension"; -import { upgrade } from "./upgrade"; -function createExtensionInfo(): ExtensionInfo { - const version = CONFIG.version; - const fileName = CONFIG.fileName; - return { version, fileName }; -} export function createExtension(): ExasolExtension { - const extensionInfo = createExtensionInfo() - const repoBaseUrl = "https://github.com/exasol/s3-document-files-virtual-schema" - const downloadUrl = `${repoBaseUrl}/releases/download/${extensionInfo.version}/${extensionInfo.fileName}`; - const licenseUrl = `${repoBaseUrl}/blob/main/LICENSE`; - return { + const virtualSchemaAdapterScript = ADAPTER_SCRIPT_NAME + return convertVirtualSchemaBaseExtension({ name: EXTENSION_NAME, description: "Virtual Schema for document files on AWS S3", category: "document-virtual-schema", - installableVersions: [{ name: extensionInfo.version, latest: true, deprecated: false }], - bucketFsUploads: [{ bucketFsFilename: extensionInfo.fileName, downloadUrl, fileSize: CONFIG.fileSizeBytes, name: "S3 VS Jar file", licenseUrl, licenseAgreementRequired: false }], - install(context: Context, version: string) { - installExtension(context, extensionInfo, version) - }, - addInstance(context: Context, version: string, params: ParameterValues): Instance { - return addInstance(context, extensionInfo, version, params); - }, - findInstallations(_context: Context, metadata: ExaMetadata): Installation[] { - return findInstallations(metadata.allScripts.rows); - }, - findInstances(context: Context, version: string): Instance[] { - return findInstances(context); - }, - uninstall(context: Context, version: string): void { - uninstall(context, extensionInfo, version) - }, - upgrade(context) { - return upgrade(context, extensionInfo) - }, - deleteInstance(context: Context, version: string, instanceId: string): void { - deleteInstance(context, extensionInfo, version, instanceId); - }, - getInstanceParameters(context: Context, version: string): Parameter[] { - if (extensionInfo.version !== version) { - throw new NotFoundError(`Version '${version}' not supported, can only use '${extensionInfo.version}'.`) - } - return createInstanceParameters() + version: CONFIG.version, + file: { name: CONFIG.fileName, size: CONFIG.fileSizeBytes }, + scripts: getUdfScriptDefinitions(), + virtualSchemaAdapterScript, + scriptVersionExtractor: jarFileVersionExtractor(/document-files-virtual-schema-dist-[\d.]+-s3-(\d+\.\d+\.\d+).jar/), + builder: createVirtualSchemaBuilder({ + adapterName: virtualSchemaAdapterScript, + connectionNameProperty: "CONNECTION_NAME", + virtualSchemaParameters: getVirtualSchemaParameterDefinitions(), + connectionDefinition: createJsonConnectionDefinition(getConnectionParameterDefinitions()) + }) + }) +} + +function getUdfScriptDefinitions(): ScriptDefinition[] { + return [ + { + name: ADAPTER_SCRIPT_NAME, + type: "ADAPTER", + scriptClass: "com.exasol.adapter.RequestDispatcher" }, - readInstanceParameterValues(_context: Context, _version: string, _instanceId: string): ParameterValues { - throw new NotFoundError("Reading instance parameter values not supported") + { + name: IMPORT_SCRIPT_NAME, + type: "SET", + parameters: "DATA_LOADER VARCHAR(2000000), SCHEMA_MAPPING_REQUEST VARCHAR(2000000), CONNECTION_NAME VARCHAR(500)", + emitParameters: "...", + scriptClass: "com.exasol.adapter.document.UdfEntryPoint" } - } + ] +} + +function getConnectionParameterDefinitions(): Parameter[] { + return [ + { id: "awsAccessKeyId", name: "AWS Access Key Id", type: "string", required: true }, + { id: "awsSecretAccessKey", name: "AWS Secret AccessKey", type: "string", required: true, secret: true }, + { id: "awsSessionToken", name: "AWS Session Token", type: "string", required: false, secret: true }, + { id: "awsRegion", name: "AWS Region", type: "string", required: true, placeholder: "eu-central-1" }, + { id: "s3Bucket", name: "S3 Bucket", type: "string", required: true }, + { id: "awsEndpointOverride", name: "AWS Endpoint Override", type: "string", required: false, placeholder: "s3.example.com:9000" }, + { id: "s3PathStyleAccess", name: "S3 Path Style Access", type: "boolean", required: false }, + { id: "useSsl", name: "Use SSL", type: "boolean", required: false, default: "true" }, + ]; +} + +function getVirtualSchemaParameterDefinitions(): Parameter[] { + return [ + { + id: "MAPPING", name: "EDML Mapping", type: "string", + description: "See documentation at https://github.com/exasol/virtual-schema-common-document/blob/main/doc/user_guide/edml_user_guide.md", + placeholder: `{ + "$schema": "https://schemas.exasol.com/edml-1.5.0.json", + "source": "path/to/books.csv", + "destinationTable": "BOOKS", + "description": "Example mapping", + "mapping": { + "fields": { } + }`, required: true, multiline: true + }, { + id: "MAX_PARALLEL_UDFS", name: "Max. number of parallel UDFs", type: "string", description: "Maximum number of UDFs that are executed in parallel. -1 represents unlimited.", + required: false, placeholder: "-1", default: "-1" + }, { + id: "DEBUG_ADDRESS", name: "Debug address", description: "Network address and port to which to send debug output", + type: "string", required: false, placeholder: "192.168.179.38:3000", default: "" + }, { + id: "LOG_LEVEL", name: "Log level", description: "Log level for debug output. Debug address must be defined for this to work.", + type: "select", required: false, options: getJavaLogLevelOptions(), default: "" + }, + ]; +} + +function getJavaLogLevelOptions(): SelectOption[] { + const javaLogLevels: string[] = ["OFF", "SEVERE", "WARNING", "INFO", "CONFIG", "FINE", "FINER", "FINEST"]; + return javaLogLevels.map(level => { return { id: level, name: level } }) } registerExtension(createExtension()) diff --git a/src/test/java/com/exasol/adapter/document/files/extension/ExtensionIT.java b/src/test/java/com/exasol/adapter/document/files/extension/ExtensionIT.java index 3acaa9ab..a635d6d9 100644 --- a/src/test/java/com/exasol/adapter/document/files/extension/ExtensionIT.java +++ b/src/test/java/com/exasol/adapter/document/files/extension/ExtensionIT.java @@ -41,12 +41,12 @@ import software.amazon.awssdk.core.sync.RequestBody; class ExtensionIT { - private static final String PREVIOUS_VERSION = "2.8.1"; - private static final String PREVIOUS_VERSION_JAR_FILE = "document-files-virtual-schema-dist-7.3.4-s3-" + private static final String PREVIOUS_VERSION = "2.8.2"; + private static final String PREVIOUS_VERSION_JAR_FILE = "document-files-virtual-schema-dist-7.3.6-s3-" + PREVIOUS_VERSION + ".jar"; private static final Path EXTENSION_SOURCE_DIR = Paths.get("extension").toAbsolutePath(); private static final String EXTENSION_ID = "s3-vs-extension.js"; - private static final int EXPECTED_PARAMETER_COUNT = 10; + private static final int EXPECTED_PARAMETER_COUNT = 13; private static final String PROJECT_VERSION = MavenProjectVersionGetter.getCurrentProjectVersion(); private static ExasolTestSetup exasolTestSetup; private static ExtensionManagerSetup setup; @@ -55,7 +55,9 @@ class ExtensionIT { @BeforeAll static void setup() throws FileNotFoundException, BucketAccessException, TimeoutException { + System.setProperty("com.exasol.dockerdb.image", "8.23.0"); exasolTestSetup = new ExasolTestSetupFactory(IntegrationTestSetup.CLOUD_SETUP_CONFIG).getTestSetup(); + ExasolVersionCheck.assumeExasolVersion8(exasolTestSetup); setup = ExtensionManagerSetup.create(exasolTestSetup, ExtensionBuilder.createDefaultNpmBuilder( EXTENSION_SOURCE_DIR, EXTENSION_SOURCE_DIR.resolve("dist").resolve(EXTENSION_ID))); s3TestSetup = new AwsS3TestSetup(); @@ -114,8 +116,7 @@ void listInstallations_findsMatchingScripts() { createAdapter("S3_FILES_ADAPTER", "IMPORT_FROM_S3_DOCUMENT_FILES"); final List installations = setup.client().getInstallations(); assertAll(() -> assertThat(installations, hasSize(1)), // - () -> assertThat(installations.get(0).getName(), - equalTo(ExtensionManagerSetup.EXTENSION_SCHEMA_NAME + ".S3_FILES_ADAPTER")), + () -> assertThat(installations.get(0).getName(), equalTo("S3 Virtual Schema")), () -> assertThat(installations.get(0).getVersion(), equalTo(PROJECT_VERSION))); } @@ -124,8 +125,7 @@ void listInstallations_findsOwnInstallation() { setup.client().install(); final List installations = setup.client().getInstallations(); assertAll(() -> assertThat(installations, hasSize(1)), // - () -> assertThat(installations.get(0).getName(), - equalTo(ExtensionManagerSetup.EXTENSION_SCHEMA_NAME + ".S3_FILES_ADAPTER")), + () -> assertThat(installations.get(0).getName(), equalTo("S3 Virtual Schema")), () -> assertThat(installations.get(0).getVersion(), equalTo(PROJECT_VERSION))); } @@ -140,9 +140,15 @@ void getExtensionDetailsFailsForUnknownVersion() { void getExtensionDetailsSuccess() { final ExtensionDetailsResponse extensionDetails = setup.client().getExtensionDetails(PROJECT_VERSION); final List parameters = extensionDetails.getParameterDefinitions(); - final ParamDefinition param1 = new ParamDefinition().id("virtualSchemaName") - .name("Name of the new virtual schema").definition(Map.of("id", "virtualSchemaName", "name", - "Name of the new virtual schema", "required", true, "scope", "general", "type", "string")); + final ParamDefinition param1 = new ParamDefinition().id("base-vs.virtual-schema-name") + .name("Virtual Schema name").definition(Map.of( // + "id", "base-vs.virtual-schema-name", // + "name", "Virtual Schema name", // + "description", "Name for the new virtual schema", // + "placeholder", "MY_VIRTUAL_SCHEMA", // + "regex", "[a-zA-Z_]+", // + "required", true, // + "type", "string")); assertAll(() -> assertThat(extensionDetails.getId(), equalTo("s3-vs-extension.js")), () -> assertThat(extensionDetails.getVersion(), equalTo(PROJECT_VERSION)), () -> assertThat(parameters, hasSize(EXPECTED_PARAMETER_COUNT)), @@ -176,7 +182,7 @@ void createInstanceFailsWithoutRequiredParameters() { final ExtensionManagerClient client = setup.client(); client.install(); client.assertRequestFails(() -> client.createInstance(List.of()), startsWith( - "invalid parameters: Failed to validate parameter 'Name of the new virtual schema': This is a required parameter."), + "invalid parameters: Failed to validate parameter 'Virtual Schema name' (base-vs.virtual-schema-name): This is a required parameter."), equalTo(400)); } @@ -184,7 +190,7 @@ void createInstanceFailsWithoutRequiredParameters() { void uninstall_failsForUnknownVersion() { setup.client().assertRequestFails(() -> setup.client().uninstall("unknownVersion"), equalTo("Uninstalling version 'unknownVersion' not supported, try '" + PROJECT_VERSION + "'."), - equalTo(400)); + equalTo(404)); } @Test @@ -205,8 +211,8 @@ void uninstall_removesAdapters() { @Test void upgradeFailsWhenNotInstalled() { setup.client().assertRequestFails(() -> setup.client().upgrade(), - "extension is not installed, the following scripts are missing: S3_FILES_ADAPTER, IMPORT_FROM_S3_DOCUMENT_FILES", - 404); + "Not all required scripts are installed: Validation failed: Script 'S3_FILES_ADAPTER' is missing, Script 'IMPORT_FROM_S3_DOCUMENT_FILES' is missing", + 412); } @Test @@ -224,9 +230,9 @@ void upgradeFromPreviousVersion() throws InterruptedException, BucketAccessExcep previousVersion.install(); final String virtualTable = createVirtualSchema(previousVersion.getExtensionId(), PREVIOUS_VERSION); verifyVirtualTableContainsData(virtualTable); - assertInstalledVersion("EXA_EXTENSIONS.S3_FILES_ADAPTER", PREVIOUS_VERSION, previousVersion); + assertInstalledVersion(PREVIOUS_VERSION, previousVersion); previousVersion.upgrade(); - assertInstalledVersion("EXA_EXTENSIONS.S3_FILES_ADAPTER", PROJECT_VERSION, previousVersion); + assertInstalledVersion(PROJECT_VERSION, previousVersion); verifyVirtualTableContainsData(virtualTable); } @@ -239,15 +245,14 @@ private PreviousExtensionVersion createPreviousVersion() { .build(); } - private void assertInstalledVersion(final String expectedName, final String expectedVersion, - final PreviousExtensionVersion previousVersion) { + private void assertInstalledVersion(final String expectedVersion, final PreviousExtensionVersion previousVersion) { // The extension is installed twice (previous and current version), so each one returns one installation. assertThat(setup.client().getInstallations(), containsInAnyOrder( - new InstallationsResponseInstallation().name(expectedName).version(expectedVersion) + new InstallationsResponseInstallation().name("S3 Virtual Schema").version(expectedVersion) .id(EXTENSION_ID), // - new InstallationsResponseInstallation().name(expectedName).version(expectedVersion) - .id(previousVersion.getExtensionId()))); + new InstallationsResponseInstallation().name("EXA_EXTENSIONS.S3_FILES_ADAPTER") + .version(expectedVersion).id(previousVersion.getExtensionId()))); } @Test @@ -304,11 +309,13 @@ void createInstanceCreatesDbObjects() { final String name = "my_virtual_SCHEMA"; createInstance(name); - setup.exasolMetadata().assertConnection(table().row("MY_VIRTUAL_SCHEMA_CONNECTION", - "Created by Extension Manager for S3 Virtual Schema my_virtual_SCHEMA").matches()); + setup.exasolMetadata() + .assertConnection(table().row("MY_VIRTUAL_SCHEMA_CONNECTION", + "Created by Extension Manager for S3 Virtual Schema v" + PROJECT_VERSION + " my_virtual_SCHEMA") + .matches()); setup.exasolMetadata() .assertVirtualSchema(table() - .row("my_virtual_SCHEMA", "SYS", "EXA_EXTENSIONS.S3_FILES_ADAPTER", not(emptyOrNullString())) + .row("my_virtual_SCHEMA", "SYS", "EXA_EXTENSIONS", "S3_FILES_ADAPTER", not(emptyOrNullString())) .matches()); assertThat(setup.client().listInstances(), allOf(hasSize(1), equalTo(List.of(new Instance().id(name).name(name))))); @@ -320,28 +327,37 @@ void createTwoInstances() { createInstance("vs1"); createInstance("vs2"); - setup.exasolMetadata() - .assertConnection(table() - .row("VS1_CONNECTION", "Created by Extension Manager for S3 Virtual Schema vs1") - .row("VS2_CONNECTION", "Created by Extension Manager for S3 Virtual Schema vs2").matches()); - setup.exasolMetadata() - .assertVirtualSchema(table() - .row("vs1", "SYS", "EXA_EXTENSIONS.S3_FILES_ADAPTER", not(emptyOrNullString())) - .row("vs2", "SYS", "EXA_EXTENSIONS.S3_FILES_ADAPTER", not(emptyOrNullString())).matches()); + assertAll( + () -> setup.exasolMetadata() + .assertConnection(table() + .row("VS1_CONNECTION", + "Created by Extension Manager for S3 Virtual Schema v" + PROJECT_VERSION + + " vs1") + .row("VS2_CONNECTION", + "Created by Extension Manager for S3 Virtual Schema v" + PROJECT_VERSION + + " vs2") + .matches()), + () -> setup.exasolMetadata().assertVirtualSchema(table() + .row("vs1", "SYS", "EXA_EXTENSIONS", "S3_FILES_ADAPTER", not(emptyOrNullString())) + .row("vs2", "SYS", "EXA_EXTENSIONS", "S3_FILES_ADAPTER", not(emptyOrNullString())).matches()), - assertThat(setup.client().listInstances(), allOf(hasSize(2), - equalTo(List.of(new Instance().id("vs1").name("vs1"), new Instance().id("vs2").name("vs2"))))); + () -> assertThat(setup.client().listInstances(), allOf(hasSize(2), + equalTo(List.of(new Instance().id("vs1").name("vs1"), new Instance().id("vs2").name("vs2")))))); } @Test void createInstanceWithSingleQuote() { setup.client().install(); createInstance("Quoted'schema"); - setup.exasolMetadata().assertConnection(table() - .row("QUOTED'SCHEMA_CONNECTION", "Created by Extension Manager for S3 Virtual Schema Quoted'schema") - .matches()); - setup.exasolMetadata().assertVirtualSchema(table() - .row("Quoted'schema", "SYS", "EXA_EXTENSIONS.S3_FILES_ADAPTER", not(emptyOrNullString())).matches()); + assertAll( + () -> setup.exasolMetadata() + .assertConnection(table().row("QUOTED'SCHEMA_CONNECTION", + "Created by Extension Manager for S3 Virtual Schema v" + PROJECT_VERSION + + " Quoted'schema") + .matches()), + () -> setup.exasolMetadata().assertVirtualSchema(table() + .row("Quoted'schema", "SYS", "EXA_EXTENSIONS", "S3_FILES_ADAPTER", not(emptyOrNullString())) + .matches())); } @Test @@ -363,8 +379,9 @@ void deleteExistingInstance() { final List instances = setup.client().listInstances(); assertThat(instances, hasSize(1)); setup.client().deleteInstance(instances.get(0).getId()); - assertThat(setup.client().listInstances(), is(empty())); - assertAll(() -> setup.exasolMetadata().assertNoConnections(), + + assertAll(() -> assertThat(setup.client().listInstances(), is(empty())), + () -> setup.exasolMetadata().assertNoConnections(), () -> setup.exasolMetadata().assertNoVirtualSchema()); } @@ -381,17 +398,26 @@ private void createInstance(final String extensionId, final String extensionVers setup.addVirtualSchemaToCleanupQueue(virtualSchemaName); setup.addConnectionToCleanupQueue(virtualSchemaName.toUpperCase() + "_CONNECTION"); final String instanceName = setup.client().createInstance(extensionId, extensionVersion, - createValidParameters(virtualSchemaName, mapping)); + createValidParameters(virtualSchemaName, mapping, extensionVersion)); assertThat(instanceName, equalTo(virtualSchemaName)); } - private List createValidParameters(final String virtualSchemaName, final EdmlDefinition mapping) { - final List parameters = new ArrayList<>( - List.of(param("virtualSchemaName", virtualSchemaName), param("awsRegion", s3TestSetup.getRegion()), // - param("s3Bucket", s3BucketName), // - param("awsAccessKeyId", s3TestSetup.getUsername()), // - param("awsSecretAccessKey", s3TestSetup.getPassword()), // - param("mapping", new EdmlSerializer().serialize(mapping)))); + private List createValidParameters(final String virtualSchemaName, final EdmlDefinition mapping, + final String extensionVersion) { + final List parameters = new ArrayList<>(); + parameters.addAll(List.of( // + param("awsRegion", s3TestSetup.getRegion()), // + param("s3Bucket", s3BucketName), // + param("awsAccessKeyId", s3TestSetup.getUsername()), // + param("awsSecretAccessKey", s3TestSetup.getPassword()))); + if (extensionVersion.equals(PREVIOUS_VERSION)) { + parameters.add(param("virtualSchemaName", virtualSchemaName)); + parameters.add(param("mapping", new EdmlSerializer().serialize(mapping))); + } else { + parameters.add(param("base-vs.virtual-schema-name", virtualSchemaName)); + parameters.add(param("MAPPING", new EdmlSerializer().serialize(mapping))); + } + getInDatabaseS3Address().map(address -> param("awsEndpointOverride", address)) // .ifPresent(parameters::add); if (s3TestSetup.getMfaToken().isPresent()) { @@ -422,7 +448,7 @@ private ParameterValue param(final String name, final String value) { private void assertScriptsExist() { final String jarDirective = "%jar /buckets/bfsdefault/default/" + IntegrationTestSetup.ADAPTER_JAR + ";"; - final String comment = "Created by Extension Manager for S3 Virtual Schema extension " + PROJECT_VERSION; + final String comment = "Created by Extension Manager for S3 Virtual Schema " + PROJECT_VERSION; setup.exasolMetadata() .assertScript(table() .row("IMPORT_FROM_S3_DOCUMENT_FILES", "UDF", "SET", "EMITS", From 3c3d18b4e1f55f61387d05b272a82d0bfa6469ae Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Tue, 31 Oct 2023 13:39:59 +0100 Subject: [PATCH 08/30] Adapt tests, delete unused code --- extension/src/adapterScript.test.ts | 66 ----------- extension/src/adapterScript.ts | 72 ------------ extension/src/addInstance.ts | 75 ------------- extension/src/deleteInstance.ts | 19 ---- extension/src/extension.test.ts | 104 +++++++++++------- extension/src/findInstallations.ts | 30 ----- extension/src/findInstances.ts | 12 -- extension/src/installExtension.ts | 23 ---- extension/src/test-utils.ts | 10 +- extension/src/uninstallExtension.ts | 18 --- extension/src/upgrade.test.ts | 59 ---------- extension/src/upgrade.ts | 52 --------- .../document/files/extension/ExtensionIT.java | 16 --- 13 files changed, 69 insertions(+), 487 deletions(-) delete mode 100644 extension/src/adapterScript.test.ts delete mode 100644 extension/src/adapterScript.ts delete mode 100644 extension/src/addInstance.ts delete mode 100644 extension/src/deleteInstance.ts delete mode 100644 extension/src/findInstallations.ts delete mode 100644 extension/src/findInstances.ts delete mode 100644 extension/src/installExtension.ts delete mode 100644 extension/src/uninstallExtension.ts delete mode 100644 extension/src/upgrade.test.ts delete mode 100644 extension/src/upgrade.ts diff --git a/extension/src/adapterScript.test.ts b/extension/src/adapterScript.test.ts deleted file mode 100644 index 49ff0ec6..00000000 --- a/extension/src/adapterScript.test.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { describe, expect, it } from '@jest/globals'; -import { AdapterScript } from './adapterScript'; -import { script } from './test-utils'; - - -describe("AdapterScript", () => { - describe("properties", () => { - it("name", () => { - expect(new AdapterScript(script({ name: "script" })).name).toBe("script") - }) - it("schema", () => { - expect(new AdapterScript(script({ schema: "schema" })).schema).toBe("schema") - }) - it("text", () => { - expect(new AdapterScript(script({ text: "text" })).text).toBe("text") - }) - it("qualifiedName", () => { - expect(new AdapterScript(script({ schema: "schema", name: "name" })).qualifiedName).toBe("schema.name") - }) - }) - describe("methods", () => { - describe("getVersion()", () => { - const tests: { name: string; scriptText: string, expected: string | undefined }[] = [ - { name: "found", scriptText: "CREATE ... %jar /path/to/document-files-virtual-schema-dist-0.0.0-s3-1.2.3.jar; more text", expected: "1.2.3" }, - { name: "found with LF", scriptText: "CREATE ...\n %jar /path/to/document-files-virtual-schema-dist-0.0.0-s3-1.2.3.jar; more text", expected: "1.2.3" }, - { name: "found with LFCR", scriptText: "CREATE ...\n\r %jar /path/to/document-files-virtual-schema-dist-0.0.0-s3-1.2.3.jar; more text", expected: "1.2.3" }, - { name: "with CRLF", scriptText: "CREATE ...\r\n %jar /path/to/document-files-virtual-schema-dist-0.0.0-s3-1.2.3.jar; more text", expected: "1.2.3" }, - { name: "not found in root dir", scriptText: "CREATE ... %jar /document-files-virtual-schema-dist-0.0.0-s3-1.2.3.jar; more text", expected: undefined }, - { name: "not found invalid %jar", scriptText: "CREATE ... %invalid /path/to/document-files-virtual-schema-dist-0.0.0-s3-1.2.3.jar; more text", expected: undefined }, - { name: "not found missing %jar", scriptText: "CREATE ... /path/to/document-files-virtual-schema-dist-0.0.0-s3-1.2.3.jar; more text", expected: undefined }, - { name: "not found missing trailing semicolon", scriptText: "CREATE ...\r\n %jar /path/to/document-files-virtual-schema-dist-0.0.0-s3-1.2.3.jar", expected: undefined }, - { name: "not found invalid vs-common-document-files version", scriptText: "CREATE ... %jar /path/to/document-files-virtual-schema-dist-a.b.c-s3-1.2.3.jar;", expected: undefined }, - { name: "not found invalid version", scriptText: "CREATE ... %jar /path/to/document-files-virtual-schema-dist-0.0.0-s3-a.b.c.jar;", expected: undefined }, - { name: "not found invalid filename", scriptText: "CREATE ... %jar /path/to/invalid-file-name-dist-0.0.0-s3-1.2.3.jar;", expected: undefined }, - ] - tests.forEach(test => it(test.name, () => { - expect(new AdapterScript(script({ text: test.scriptText })).getVersion()).toBe(test.expected) - })) - }) - describe("isValidAdapterScript()", () => { - const tests: { name: string; type: string | undefined, expected: boolean }[] = [ - { name: "missing type", type: undefined, expected: false }, - { name: "unknown type", type: "unknown", expected: false }, - { name: "wrong case", type: "adapter", expected: false }, - { name: "correct type", type: "ADAPTER", expected: true }, - ] - tests.forEach(test => it(test.name, () => { - expect(new AdapterScript(script({ type: test.type })).isValidAdapterScript()).toBe(test.expected) - })) - }) - describe("isValidImportScript()", () => { - const tests: { name: string; type: string | undefined, inputType: string | undefined, resultType: string | undefined, expected: boolean }[] = [ - { name: "correct type", type: "UDF", inputType: "SET", resultType: "EMITS", expected: true }, - { name: "wrong result type", type: "UDF", inputType: "SET", resultType: "wrong", expected: false }, - { name: "missing result type", type: "UDF", inputType: "SET", resultType: undefined, expected: false }, - { name: "wrong input type", type: "UDF", inputType: "wrong", resultType: "EMITS", expected: false }, - { name: "missing input type", type: "UDF", inputType: undefined, resultType: "EMITS", expected: false }, - { name: "wrong type", type: "wrong", inputType: "SET", resultType: "EMITS", expected: false }, - { name: "missing type", type: undefined, inputType: "SET", resultType: "EMITS", expected: false }, - ] - tests.forEach(test => it(test.name, () => { - expect(new AdapterScript(script({ type: test.type, inputType: test.inputType, resultType: test.resultType })).isValidImportScript()).toBe(test.expected) - })) - }) - }) -}) \ No newline at end of file diff --git a/extension/src/adapterScript.ts b/extension/src/adapterScript.ts deleted file mode 100644 index 67aa6397..00000000 --- a/extension/src/adapterScript.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { ExaScriptsRow } from "@exasol/extension-manager-interface"; - -export class AdapterScript { - #script: ExaScriptsRow - constructor(script: ExaScriptsRow) { - this.#script = script - } - isValidAdapterScript() { - return isValidAdapterScript(this.#script) - } - isValidImportScript() { - return isValidImportScript(this.#script) - } - getVersion() { - return extractVersion(this.#script.text) - } - get name() { - return this.#script.name - } - get qualifiedName() { - return `${this.#script.schema}.${this.#script.name}` - } - get schema() { - return this.#script.schema - } - get text() { - return this.#script.text - } -} - - -const adapterScriptFileNamePattern = /.*%jar\s+[\w-/]+\/([^/]+.jar)\s*;.*/ -const jarNameVersionPattern = /document-files-virtual-schema-dist-[\d.]+-s3-(\d+\.\d+\.\d+).jar/ - -function extractVersion(adapterScriptText: string): string | undefined { - const jarNameMatch = adapterScriptFileNamePattern.exec(adapterScriptText) - if (!jarNameMatch) { - console.warn(`WARN: Could not find jar filename in adapter script "${adapterScriptText}"`) - return undefined - } - const jarFileName = jarNameMatch[1]; - const versionMatch = jarNameVersionPattern.exec(jarFileName) - if (!versionMatch) { - console.warn(`WARN: Could not find version in jar file name "${jarFileName}"`) - return undefined - } - return versionMatch[1] -} - -function isValidAdapterScript(script: ExaScriptsRow): script is ExaScriptsRow { - if (script.type !== "ADAPTER") { - console.warn(`Invalid type for adapter script: ${script.type}`) - return false; - } - return true; -} - -function isValidImportScript(script: ExaScriptsRow): script is ExaScriptsRow { - if (script.type !== "UDF") { - console.log(`Invalid type for importer script: ${script.type}`) - return false; - } - if (script.inputType !== "SET") { - console.log(`Invalid input type for importer script: ${script.inputType ? script.inputType : ''}`) - return false; - } - if (script.resultType !== "EMITS") { - console.log(`Invalid result type for importer script: ${script.resultType ? script.resultType : ''}`) - return false; - } - return true; -} diff --git a/extension/src/addInstance.ts b/extension/src/addInstance.ts deleted file mode 100644 index cb470468..00000000 --- a/extension/src/addInstance.ts +++ /dev/null @@ -1,75 +0,0 @@ -import { Context, Instance, ParameterValues } from "@exasol/extension-manager-interface"; -import { Parameter } from "@exasol/extension-manager-interface/dist/parameters"; -import { ADAPTER_SCRIPT_NAME, EXTENSION_NAME, ExtensionInfo, convertSchemaNameToInstanceId, getConnectionName } from "./common"; -import { ScopedParameter, getAllParameterDefinitions } from "./parameterDefinitions"; - - -export function addInstance(context: Context, extensionInfo: ExtensionInfo, versionToInstall: string, paramValues: ParameterValues): Instance { - if (extensionInfo.version !== versionToInstall) { - throw new Error(`Version '${versionToInstall}' not supported, can only use ${extensionInfo.version}.`) - } - - const allParams = getAllParameterDefinitions(); - const virtualSchemaName = getParameterValue(paramValues, allParams.virtualSchemaName); - const mapping = getParameterValue(paramValues, allParams.mapping); - const connectionName = getConnectionName(virtualSchemaName); - context.sqlClient.execute(createConnectionStatement(connectionName, paramValues)); - context.sqlClient.execute(createVirtualSchemaStatement(virtualSchemaName, context.extensionSchemaName, connectionName, mapping)); - - const comment = `Created by Extension Manager for ${EXTENSION_NAME} ${escapeSingleQuotes(virtualSchemaName)}`; - context.sqlClient.execute(`COMMENT ON CONNECTION "${connectionName}" IS '${comment}'`); - context.sqlClient.execute(`COMMENT ON SCHEMA "${virtualSchemaName}" IS '${comment}'`); - return { id: convertSchemaNameToInstanceId(virtualSchemaName), name: virtualSchemaName } -} - -function getParameterValue(paramValues: ParameterValues, definition: Parameter): string { - for (const value of paramValues.values) { - if (value.name === definition.id) { - return value.value - } - } - throw new Error(`Missing parameter "${definition.id}"`) -} - -function createConnectionStatement(connectionName: string, paramValues: ParameterValues): string { - let jsonArgs = JSON.stringify(convertConnectionParameters(paramValues)) - jsonArgs = escapeSingleQuotes(jsonArgs) - return `CREATE OR REPLACE CONNECTION "${connectionName}" TO '' USER '' IDENTIFIED BY '${jsonArgs}'`; -} - -function createVirtualSchemaStatement(name: string, adapterSchema: string, connectionName: string, mapping: string): string { - const escapedMapping = escapeSingleQuotes(mapping) - const escapedConnectionName = escapeSingleQuotes(connectionName) - return `CREATE VIRTUAL SCHEMA "${name}" USING "${adapterSchema}"."${ADAPTER_SCRIPT_NAME}" WITH CONNECTION_NAME = '${escapedConnectionName}' MAPPING = '${escapedMapping}';` -} - -function escapeSingleQuotes(value: string): string { - return value.replace(/'/g, "''") -} - -function findParam(id: string): ScopedParameter | undefined { - return getAllParameterDefinitions()[id] -} - -function convertConnectionParameters(paramValues: ParameterValues) { - const result: { [key: string]: string | boolean } = {} - for (const paramValue of paramValues.values) { - const param = findParam(paramValue.name); - if (param && param.scope == "connection") { - result[param.id] = convertParamValue(paramValue.value, param) - } - } - return result -} - -function convertParamValue(value: string, definition: Parameter): string | boolean { - switch (definition.type) { - case "string": - case "select": - return value; - case "boolean": - return value === 'true'; - default: - throw Error("Unsupported parameter type"); - } -} diff --git a/extension/src/deleteInstance.ts b/extension/src/deleteInstance.ts deleted file mode 100644 index bf9fbadc..00000000 --- a/extension/src/deleteInstance.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Context, NotFoundError } from "@exasol/extension-manager-interface"; -import { convertInstanceIdToSchemaName, ExtensionInfo, getConnectionName } from "./common"; - -export function deleteInstance(context: Context, extension: ExtensionInfo, version: string, instanceId: string): void { - if (extension.version !== version) { - throw new NotFoundError(`Version '${version}' not supported, can only use '${extension.version}'.`) - } - const schemaName = convertInstanceIdToSchemaName(instanceId); - context.sqlClient.execute(dropVirtualSchemaStatement(schemaName)); - context.sqlClient.execute(dropConnectionStatement(getConnectionName(schemaName))); -} - -function dropVirtualSchemaStatement(schemaName: string): string { - return `DROP VIRTUAL SCHEMA IF EXISTS "${schemaName}" CASCADE`; -} - -function dropConnectionStatement(connectionName: string): string { - return `DROP CONNECTION IF EXISTS "${connectionName}"`; -} \ No newline at end of file diff --git a/extension/src/extension.test.ts b/extension/src/extension.test.ts index 99c542bf..a05f7220 100644 --- a/extension/src/extension.test.ts +++ b/extension/src/extension.test.ts @@ -4,7 +4,7 @@ import { describe, expect, it } from '@jest/globals'; import { EXTENSION_NAME } from './common'; import { createExtension } from "./extension"; import { CONFIG } from './extension-config'; -import { adapterScript, createMockContext, getInstalledExtension, importScript } from './test-utils'; +import { adapterScript, createMockContext, getInstalledExtension, importScript, script } from './test-utils'; describe("S3 VS Extension", () => { @@ -54,26 +54,20 @@ describe("S3 VS Extension", () => { }) describe("returns expected installations", () => { - function installation({ name = "schema.S3_FILES_ADAPTER", version = "(unknown)" }: Partial): Installation { + function installation({ name = "S3 Virtual Schema", version = "(unknown)" }: Partial): Installation { return { name, version } } const tests: { name: string; scripts: ExaScriptsRow[], expected?: Installation }[] = [ - { name: "all values match", scripts: [adapterScript({}), importScript({})], expected: installation({}) }, - { name: "adapter has wrong type", scripts: [adapterScript({ type: "wrong" }), importScript({})], expected: undefined }, + { name: "all values match", scripts: [adapterScript({}), importScript({})], expected: installation({ version: "1.2.3" }) }, { name: "adapter has wrong name", scripts: [adapterScript({ name: "wrong" }), importScript({})], expected: undefined }, { name: "adapter missing", scripts: [importScript({})], expected: undefined }, - { name: "importer has wrong type", scripts: [adapterScript({}), importScript({ type: "wrong" })], expected: undefined }, - { name: "importer has wrong input type", scripts: [adapterScript({}), importScript({ inputType: "wrong" })], expected: undefined }, - { name: "importer has wrong result type", scripts: [adapterScript({}), importScript({ resultType: "wrong" })], expected: undefined }, { name: "importer has wrong name", scripts: [adapterScript({}), importScript({ name: "wrong" })], expected: undefined }, { name: "importer missing", scripts: [adapterScript({})], expected: undefined }, { name: "adapter and importer missing", scripts: [], expected: undefined }, { name: "version found in filename", scripts: [adapterScript({ text: "CREATE ... %jar /path/to/document-files-virtual-schema-dist-0.0.0-s3-1.2.3.jar; more text" }), importScript({})], expected: installation({ version: "1.2.3" }) }, { name: "script contains LF", scripts: [adapterScript({ text: "CREATE ...\n %jar /path/to/document-files-virtual-schema-dist-0.0.0-s3-1.2.3.jar; more text" }), importScript({})], expected: installation({ version: "1.2.3" }) }, { name: "script contains CRLF", scripts: [adapterScript({ text: "CREATE ...\r\n %jar /path/to/document-files-virtual-schema-dist-0.0.0-s3-1.2.3.jar; more text" }), importScript({})], expected: installation({ version: "1.2.3" }) }, - { name: "version not found in filename", scripts: [adapterScript({ text: "CREATE ... %jar /path/to/invalid-file-name-dist-0.0.0-s3-1.2.3.jar;" }), importScript({})], expected: installation({ version: "(unknown)" }) }, - { name: "filename not found in script", scripts: [adapterScript({ text: "CREATE ... %wrong /path/to/document-files-virtual-schema-dist-0.0.0-s3-1.2.3.jar;" }), importScript({})], expected: installation({ version: "(unknown)" }) }, ] tests.forEach(test => { it(test.name, () => { @@ -97,12 +91,11 @@ describe("S3 VS Extension", () => { }) it("returns expected parameters", () => { const actual = createExtension().getInstanceParameters(createMockContext(), CONFIG.version) - expect(actual).toHaveLength(10) + expect(actual).toHaveLength(13) expect(actual[0]).toStrictEqual({ - id: "virtualSchemaName", name: "Name of the new virtual schema", required: true, type: "string", scope: "general", - }) - expect(actual[1]).toStrictEqual({ - id: "awsAccessKeyId", name: "AWS Access Key Id", required: true, type: "string", scope: "connection", + id: "base-vs.virtual-schema-name", name: "Virtual Schema name", required: true, type: "string", + description: "Name for the new virtual schema", + placeholder: "MY_VIRTUAL_SCHEMA", regex: "[a-zA-Z_]+" }) }) }) @@ -119,13 +112,13 @@ describe("S3 VS Extension", () => { expect(adapterScript).toContain(`%jar /bucketfs/${CONFIG.fileName};`) expect(setScript).toContain(`CREATE OR REPLACE JAVA SET SCRIPT "ext-schema"."IMPORT_FROM_S3_DOCUMENT_FILES"`) expect(setScript).toContain(`%jar /bucketfs/${CONFIG.fileName};`) - const expectedComment = `Created by Extension Manager for ${EXTENSION_NAME} extension ${CONFIG.version}` - expect(executeCalls[2]).toEqual([`COMMENT ON SCRIPT "ext-schema"."IMPORT_FROM_S3_DOCUMENT_FILES" IS '${expectedComment}'`]) - expect(executeCalls[3]).toEqual([`COMMENT ON SCRIPT "ext-schema"."S3_FILES_ADAPTER" IS '${expectedComment}'`]) + const expectedComment = `Created by Extension Manager for ${EXTENSION_NAME} ${CONFIG.version}` + expect(executeCalls[2]).toEqual([`COMMENT ON SCRIPT "ext-schema"."S3_FILES_ADAPTER" IS '${expectedComment}'`]) + expect(executeCalls[3]).toEqual([`COMMENT ON SCRIPT "ext-schema"."IMPORT_FROM_S3_DOCUMENT_FILES" IS '${expectedComment}'`]) }) it("fails for wrong version", () => { expect(() => { createExtension().install(createMockContext(), "wrongVersion") }) - .toThrow(`Installing version 'wrongVersion' not supported, try '${CONFIG.version}'.`) + .toThrow(`Version 'wrongVersion' not supported, can only use '${CONFIG.version}'.`) }) }) @@ -155,16 +148,13 @@ describe("S3 VS Extension", () => { }) it("fails for wrong version", () => { expect(() => { createExtension().uninstall(createMockContext(), "wrongVersion") }) - .toThrow(`Uninstalling version 'wrongVersion' not supported, try '${CONFIG.version}'.`) + .toThrow(`Version 'wrongVersion' not supported, can only use '${CONFIG.version}'.`) }) }) describe("addInstance()", () => { describe("connection parameters converted", () => { type TestCase = { name: string, paramValues: ParameterValue[], expected: string } - function booleanMapped(value: string, expected: string): TestCase { - return { name: `boolean parameter '${value}' mapped to ${expected}`, paramValues: [{ name: "useSsl", value: value }], expected: `{"useSsl":${expected}}` }; - } const tests: TestCase[] = [ { name: "no parameters", paramValues: [], expected: '{}' }, { name: "unknown parameter", paramValues: [{ name: "unknown", value: "ignore" }], expected: '{}' }, @@ -172,58 +162,52 @@ describe("S3 VS Extension", () => { { name: "parameter with double quote", paramValues: [{ name: "awsAccessKeyId", value: 'abc"123""xyz' }], expected: `{"awsAccessKeyId":"abc\\"123\\"\\"xyz"}` }, { name: "multiple parameters", paramValues: [{ name: "awsAccessKeyId", value: 'id' }, { name: "awsSecretAccessKey", value: "key" }], expected: `{"awsAccessKeyId":"id","awsSecretAccessKey":"key"}` }, { name: "mixed parameters", paramValues: [{ name: "awsAccessKeyId", value: 'id' }, { name: "unknown", value: "ignored" }], expected: `{"awsAccessKeyId":"id"}` }, - booleanMapped("true", "true"), - booleanMapped("TRUE", "false"), - booleanMapped("false", "false"), - booleanMapped("FALSE", "false"), - booleanMapped("invalid", "false"), + { name: "boolean", paramValues: [{ name: "useSsl", value: "true" }], expected: `{"useSsl":"true"}` }, + { name: "ignores invalid boolean", paramValues: [{ name: "useSsl", value: "invalid" }], expected: `{"useSsl":"invalid"}` }, ]; for (const test of tests) { it(test.name, () => { const context = createMockContext(); - const parameters = test.paramValues.concat([{ name: "virtualSchemaName", value: "NEW_S3_VS" }, { name: "mapping", value: "my mapping" }]) + const parameters = test.paramValues.concat([{ name: "base-vs.virtual-schema-name", value: "NEW_S3_VS" }, { name: "MAPPING", value: "my mapping" }]) const instance = createExtension().addInstance(context, CONFIG.version, { values: parameters }); expect(instance.name).toEqual("NEW_S3_VS") - expect(context.mocks.sqlExecute.mock.calls[0]).toEqual([`CREATE OR REPLACE CONNECTION "NEW_S3_VS_CONNECTION" TO '' USER '' IDENTIFIED BY '${test.expected}'`]) + expect(context.mocks.sqlExecute.mock.calls[0]).toEqual([`CREATE OR REPLACE CONNECTION "NEW_S3_VS_CONNECTION" TO '' IDENTIFIED BY '${test.expected}'`]) }) } }) it("executes expected statements", () => { const context = createMockContext(); - const parameters = [{ name: "virtualSchemaName", value: "NEW_S3_VS" }, { name: "mapping", value: "my mapping" }, { name: "awsAccessKeyId", value: "id" }] + const parameters = [{ name: "base-vs.virtual-schema-name", value: "NEW_S3_VS" }, { name: "MAPPING", value: "my mapping" }, { name: "awsAccessKeyId", value: "id" }] const instance = createExtension().addInstance(context, CONFIG.version, { values: parameters }); expect(instance.name).toBe("NEW_S3_VS") const calls = context.mocks.sqlExecute.mock.calls expect(calls.length).toBe(4) - expect(calls[0]).toEqual([`CREATE OR REPLACE CONNECTION "NEW_S3_VS_CONNECTION" TO '' USER '' IDENTIFIED BY '{"awsAccessKeyId":"id"}'`]) - expect(calls[1]).toEqual([`CREATE VIRTUAL SCHEMA "NEW_S3_VS" USING "ext-schema"."S3_FILES_ADAPTER" WITH CONNECTION_NAME = 'NEW_S3_VS_CONNECTION' MAPPING = 'my mapping';`]) - const comment = `Created by Extension Manager for S3 Virtual Schema NEW_S3_VS` + expect(calls[0]).toEqual([`CREATE OR REPLACE CONNECTION "NEW_S3_VS_CONNECTION" TO '' IDENTIFIED BY '{"awsAccessKeyId":"id"}'`]) + expect(calls[1]).toEqual([`CREATE VIRTUAL SCHEMA "NEW_S3_VS" USING "ext-schema"."S3_FILES_ADAPTER" WITH CONNECTION_NAME = 'NEW_S3_VS_CONNECTION' MAPPING = 'my mapping'`]) + const comment = `Created by Extension Manager for S3 Virtual Schema v${CONFIG.version} NEW_S3_VS` expect(calls[2]).toEqual([`COMMENT ON CONNECTION "NEW_S3_VS_CONNECTION" IS '${comment}'`]) expect(calls[3]).toEqual([`COMMENT ON SCHEMA "NEW_S3_VS" IS '${comment}'`]) }) + it("returns id and name", () => { const context = createMockContext(); - const parameters = [{ name: "virtualSchemaName", value: "NEW_S3_VS" }, { name: "mapping", value: "my mapping" }, { name: "awsAccessKeyId", value: "id" }] + const parameters = [{ name: "base-vs.virtual-schema-name", value: "NEW_S3_VS" }, { name: "MAPPING", value: "my mapping" }, { name: "awsAccessKeyId", value: "id" }] const instance = createExtension().addInstance(context, CONFIG.version, { values: parameters }); expect(instance).toStrictEqual({ id: "NEW_S3_VS", name: "NEW_S3_VS" }) }) it("escapes single quotes", () => { const context = createMockContext(); - const parameters = [{ name: "virtualSchemaName", value: "vs'name" }, { name: "mapping", value: "mapping'with''quotes" }, { name: "awsAccessKeyId", value: "access'key" }] + const parameters = [{ name: "base-vs.virtual-schema-name", value: "vs'name" }, { name: "MAPPING", value: "mapping'with''quotes" }, { name: "awsAccessKeyId", value: "access'key" }] const instance = createExtension().addInstance(context, CONFIG.version, { values: parameters }); expect(instance).toStrictEqual({ id: "vs'name", name: "vs'name", }) const calls = context.mocks.sqlExecute.mock.calls - expect(calls[0]).toEqual([`CREATE OR REPLACE CONNECTION "vs'name_CONNECTION" TO '' USER '' IDENTIFIED BY '{"awsAccessKeyId":"access''key"}'`]) - expect(calls[1]).toEqual([`CREATE VIRTUAL SCHEMA "vs'name" USING "ext-schema"."S3_FILES_ADAPTER" WITH CONNECTION_NAME = 'vs''name_CONNECTION' MAPPING = 'mapping''with''''quotes';`]) - const comment = `Created by Extension Manager for ${EXTENSION_NAME} vs''name` - expect(calls[2]).toEqual([`COMMENT ON CONNECTION "vs'name_CONNECTION" IS '${comment}'`]) - expect(calls[3]).toEqual([`COMMENT ON SCHEMA "vs'name" IS '${comment}'`]) + expect(calls[1]).toEqual([`CREATE VIRTUAL SCHEMA "vs'name" USING "ext-schema"."S3_FILES_ADAPTER" WITH CONNECTION_NAME = 'vs''name_CONNECTION' MAPPING = 'mapping''with''''quotes'`]) }) it("fails for wrong version", () => { expect(() => { createExtension().addInstance(createMockContext(), "wrongVersion", { values: [] }) }) - .toThrow(`Version 'wrongVersion' not supported, can only use ${CONFIG.version}.`) + .toThrow(`Version 'wrongVersion' not supported, can only use '${CONFIG.version}'.`) }) }) @@ -250,7 +234,7 @@ describe("S3 VS Extension", () => { createExtension().findInstances(context, "version") const queryCalls = context.mocks.sqlQuery.mock.calls expect(queryCalls.length).toEqual(1) - expect(queryCalls[0]).toEqual(["SELECT SCHEMA_NAME FROM SYS.EXA_ALL_VIRTUAL_SCHEMAS WHERE ADAPTER_SCRIPT = ?||'.'||? ORDER BY SCHEMA_NAME", "ext-schema", "S3_FILES_ADAPTER"]) + expect(queryCalls[0]).toEqual(["SELECT SCHEMA_NAME FROM SYS.EXA_ALL_VIRTUAL_SCHEMAS WHERE ADAPTER_SCRIPT_SCHEMA = ? AND ADAPTER_SCRIPT_NAME = ? ORDER BY SCHEMA_NAME", "ext-schema", "S3_FILES_ADAPTER"]) }) }) @@ -269,6 +253,42 @@ describe("S3 VS Extension", () => { }) }) + describe("upgrade()", () => { + function scriptWithVersion(name: string, version: string): ExaScriptsRow { + return script({ name, text: `CREATE ... %jar /path/to/document-files-virtual-schema-dist-0.0.0-s3-${version}.jar;` }) + } + it("preconditions fail", () => { + const context = createMockContext() + context.mocks.simulateScripts(null, null) + expect(() => createExtension().upgrade(context)) + .toThrow("Not all required scripts are installed: Validation failed: Script 'S3_FILES_ADAPTER' is missing, Script 'IMPORT_FROM_S3_DOCUMENT_FILES' is missing") + }) + describe("success", () => { + it("returns versions", () => { + const context = createMockContext() + context.mocks.simulateScripts(scriptWithVersion("S3_FILES_ADAPTER", "1.2.3"), scriptWithVersion("IMPORT_FROM_S3_DOCUMENT_FILES", "1.2.3")) + expect(createExtension().upgrade(context)).toStrictEqual({ previousVersion: "1.2.3", newVersion: CONFIG.version, }) + }) + it("executes CREATE SCRIPT statements", () => { + const context = createMockContext() + context.mocks.simulateScripts(scriptWithVersion("S3_FILES_ADAPTER", "1.2.3"), scriptWithVersion("IMPORT_FROM_S3_DOCUMENT_FILES", "1.2.3")) + createExtension().upgrade(context) + + const executeCalls = context.mocks.sqlExecute.mock.calls + expect(executeCalls.length).toBe(4) + const adapterScript = executeCalls[0][0] + const importScript = executeCalls[1][0] + expect(adapterScript).toContain(`CREATE OR REPLACE JAVA ADAPTER SCRIPT "ext-schema"."S3_FILES_ADAPTER" AS`) + expect(adapterScript).toContain(`%jar /bucketfs/${CONFIG.fileName};`) + expect(importScript).toContain(`CREATE OR REPLACE JAVA SET SCRIPT "ext-schema"."IMPORT_FROM_S3_DOCUMENT_FILES"`) + expect(importScript).toContain(`%jar /bucketfs/${CONFIG.fileName};`) + const expectedComment = `Created by Extension Manager for S3 Virtual Schema ${CONFIG.version}` + expect(executeCalls[2]).toEqual([`COMMENT ON SCRIPT "ext-schema"."S3_FILES_ADAPTER" IS '${expectedComment}'`]) + expect(executeCalls[3]).toEqual([`COMMENT ON SCRIPT "ext-schema"."IMPORT_FROM_S3_DOCUMENT_FILES" IS '${expectedComment}'`]) + }) + }) + }) + describe("readInstanceParameterValues()", () => { it("is not supported", () => { expect(() => { createExtension().readInstanceParameterValues(createMockContext(), "version", "instId") }) diff --git a/extension/src/findInstallations.ts b/extension/src/findInstallations.ts deleted file mode 100644 index a9bfdc94..00000000 --- a/extension/src/findInstallations.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { ExaScriptsRow, Installation } from "@exasol/extension-manager-interface"; -import { AdapterScript } from "./adapterScript"; -import { ADAPTER_SCRIPT_NAME, IMPORT_SCRIPT_NAME } from "./common"; - - - -function findScriptByName(scripts: ExaScriptsRow[], name: string): AdapterScript | undefined { - return scripts.map(script => new AdapterScript(script)).find(script => script.name === name); -} - -export function findInstallations(scripts: ExaScriptsRow[]): Installation[] { - const importScript = findScriptByName(scripts, IMPORT_SCRIPT_NAME); - const adapterScript = findScriptByName(scripts, ADAPTER_SCRIPT_NAME); - if (!importScript && !adapterScript) { - return []; - } - if (!importScript || !adapterScript) { - console.log(`Either import script or adapter script not found`); - return []; - } - if (!importScript.isValidImportScript() || !adapterScript.isValidAdapterScript()) { - return []; - } - - return [{ - name: `${adapterScript.schema}.${adapterScript.name}`, - version: adapterScript.getVersion() ?? "(unknown)" - }]; -} - diff --git a/extension/src/findInstances.ts b/extension/src/findInstances.ts deleted file mode 100644 index d75b3969..00000000 --- a/extension/src/findInstances.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Context, Instance } from "@exasol/extension-manager-interface"; -import { ADAPTER_SCRIPT_NAME } from "./common"; - -export function findInstances(context: Context): Instance[] { - const result = context.sqlClient.query("SELECT SCHEMA_NAME FROM SYS.EXA_ALL_VIRTUAL_SCHEMAS" - + " WHERE ADAPTER_SCRIPT = ?||'.'||? " - + " ORDER BY SCHEMA_NAME", context.extensionSchemaName, ADAPTER_SCRIPT_NAME) - return result.rows.map(row => { - const schemaName = row[0]; - return { id: schemaName, name: schemaName } - }) -} \ No newline at end of file diff --git a/extension/src/installExtension.ts b/extension/src/installExtension.ts deleted file mode 100644 index e3b3d446..00000000 --- a/extension/src/installExtension.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { BadRequestError, Context } from "@exasol/extension-manager-interface"; -import { ADAPTER_SCRIPT_NAME, EXTENSION_NAME, ExtensionInfo, IMPORT_SCRIPT_NAME } from "./common"; - -export function installExtension(context: Context, extension: ExtensionInfo, versionToInstall: string): void { - if (extension.version !== versionToInstall) { - throw new BadRequestError(`Installing version '${versionToInstall}' not supported, try '${extension.version}'.`) - } - const jarPath = context.bucketFs.resolvePath(extension.fileName) - - context.sqlClient.execute(` - CREATE OR REPLACE JAVA ADAPTER SCRIPT "${context.extensionSchemaName}"."${ADAPTER_SCRIPT_NAME}" AS - %scriptclass com.exasol.adapter.RequestDispatcher; - %jar ${jarPath};`) - - context.sqlClient.execute(` - CREATE OR REPLACE JAVA SET SCRIPT "${context.extensionSchemaName}"."${IMPORT_SCRIPT_NAME}" - (DATA_LOADER VARCHAR(2000000), SCHEMA_MAPPING_REQUEST VARCHAR(2000000), CONNECTION_NAME VARCHAR(500)) - EMITS(...) AS - %scriptclass com.exasol.adapter.document.UdfEntryPoint; - %jar ${jarPath};`) - context.sqlClient.execute(`COMMENT ON SCRIPT "${context.extensionSchemaName}"."${IMPORT_SCRIPT_NAME}" IS 'Created by Extension Manager for ${EXTENSION_NAME} extension ${extension.version}'`); - context.sqlClient.execute(`COMMENT ON SCRIPT "${context.extensionSchemaName}"."${ADAPTER_SCRIPT_NAME}" IS 'Created by Extension Manager for ${EXTENSION_NAME} extension ${extension.version}'`); -} \ No newline at end of file diff --git a/extension/src/test-utils.ts b/extension/src/test-utils.ts index fc31cc44..a429f243 100644 --- a/extension/src/test-utils.ts +++ b/extension/src/test-utils.ts @@ -64,9 +64,13 @@ export function createMockContext(): ContextMock { export function script({ schema = "schema", name = "name", inputType, resultType, type = "", text = "", comment }: Partial): ExaScriptsRow { return { schema, name, inputType, resultType, type, text, comment } } -export function adapterScript({ name = "S3_FILES_ADAPTER", type = "ADAPTER", text = "adapter script" }: Partial): ExaScriptsRow { +export function adapterScript({ name = "S3_FILES_ADAPTER", type = "ADAPTER", text = undefined }: Partial): ExaScriptsRow { + const version = "1.2.3" + text = text ?? `CREATE ... %jar /path/to/document-files-virtual-schema-dist-0.0.0-s3-${version}.jar;` return script({ name, type, text }) } -export function importScript({ name = "IMPORT_FROM_S3_DOCUMENT_FILES", type = "UDF", inputType = "SET", resultType = "EMITS" }: Partial): ExaScriptsRow { - return script({ name, type, inputType, resultType }) +export function importScript({ name = "IMPORT_FROM_S3_DOCUMENT_FILES", type = "UDF", inputType = "SET", resultType = "EMITS", text = undefined }: Partial): ExaScriptsRow { + const version = "1.2.3" + text = text ?? `CREATE ... %jar /path/to/document-files-virtual-schema-dist-0.0.0-s3-${version}.jar;` + return script({ name, type, inputType, resultType, text }) } diff --git a/extension/src/uninstallExtension.ts b/extension/src/uninstallExtension.ts deleted file mode 100644 index 4224eb4b..00000000 --- a/extension/src/uninstallExtension.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { BadRequestError, Context } from "@exasol/extension-manager-interface"; -import { ADAPTER_SCRIPT_NAME, ExtensionInfo, IMPORT_SCRIPT_NAME } from "./common"; - -export function uninstall(context: Context, extension: ExtensionInfo, versionToUninstall: string): void { - if (extension.version !== versionToUninstall) { - throw new BadRequestError(`Uninstalling version '${versionToUninstall}' not supported, try '${extension.version}'.`) - } - - function extensionSchemaExists(): boolean { - const result = context.sqlClient.query("SELECT 1 FROM SYS.EXA_ALL_SCHEMAS WHERE SCHEMA_NAME=?", context.extensionSchemaName) - return result.rows.length > 0 - } - - if (extensionSchemaExists()) { // Drop commands fail when schema does not exist. - context.sqlClient.execute(`DROP ADAPTER SCRIPT "${context.extensionSchemaName}"."${ADAPTER_SCRIPT_NAME}"`) - context.sqlClient.execute(`DROP SCRIPT "${context.extensionSchemaName}"."${IMPORT_SCRIPT_NAME}"`) - } -} diff --git a/extension/src/upgrade.test.ts b/extension/src/upgrade.test.ts deleted file mode 100644 index 25840e40..00000000 --- a/extension/src/upgrade.test.ts +++ /dev/null @@ -1,59 +0,0 @@ - -import { ExaScriptsRow, NotFoundError, PreconditionFailedError } from '@exasol/extension-manager-interface'; -import { describe, expect, it } from '@jest/globals'; -import { createExtension } from "./extension"; -import { CONFIG } from './extension-config'; -import { createMockContext, script } from './test-utils'; - -function scriptWithText(text: string): ExaScriptsRow { - return script({ text }); -} - -function scriptWithVersion(version: string): ExaScriptsRow { - return scriptWithText(`CREATE ... %jar /path/to/document-files-virtual-schema-dist-0.0.0-s3-${version}.jar;`) -} - -describe("upgrade()", () => { - describe("preconditions fail", () => { - const tests: { name: string; adapterScript: ExaScriptsRow | null, importScript: ExaScriptsRow | null, expectedError: Error }[] = [ - { name: "both scripts missing", adapterScript: null, importScript: null, expectedError: new NotFoundError("extension is not installed, the following scripts are missing: S3_FILES_ADAPTER, IMPORT_FROM_S3_DOCUMENT_FILES") }, - { name: "import script missing", adapterScript: script({}), importScript: null, expectedError: new NotFoundError("extension is not installed, the following scripts are missing: IMPORT_FROM_S3_DOCUMENT_FILES") }, - { name: "adapter script missing", adapterScript: null, importScript: script({}), expectedError: new NotFoundError("extension is not installed, the following scripts are missing: S3_FILES_ADAPTER") }, - { name: "unknown adapter script version", adapterScript: scriptWithText("dummy"), importScript: script({}), expectedError: new PreconditionFailedError("Failed to extract version from adapter script schema.name, script text: 'dummy'") }, - { name: "unknown import script version", adapterScript: scriptWithVersion("1.2.3"), importScript: scriptWithText("dummy"), expectedError: new PreconditionFailedError("Failed to extract version from import script schema.name, script text: 'dummy'") }, - { name: "inconsistent script versions", adapterScript: scriptWithVersion("1.2.3"), importScript: scriptWithVersion("1.2.4"), expectedError: new PreconditionFailedError("Scripts have inconsistent versions. schema.name: 1.2.3, schema.name: 1.2.4") }, - { name: "latest version already installed", adapterScript: scriptWithVersion(CONFIG.version), importScript: scriptWithVersion(CONFIG.version), expectedError: new PreconditionFailedError("Extension is already installed in latest version " + CONFIG.version) }, - ] - - tests.forEach(test => it(test.name, () => { - const context = createMockContext() - context.mocks.simulateScripts(test.adapterScript, test.importScript) - expect(() => createExtension().upgrade(context)) - .toThrow(test.expectedError) - })) - }) - describe("success", () => { - it("returns versions", () => { - const context = createMockContext() - context.mocks.simulateScripts(scriptWithVersion("1.2.3"), scriptWithVersion("1.2.3")) - expect(createExtension().upgrade(context)).toStrictEqual({ previousVersion: "1.2.3", newVersion: CONFIG.version, }) - }) - it("executes CREATE SCRIPT statements", () => { - const context = createMockContext() - context.mocks.simulateScripts(scriptWithVersion("1.2.3"), scriptWithVersion("1.2.3")) - createExtension().upgrade(context) - - const executeCalls = context.mocks.sqlExecute.mock.calls - expect(executeCalls.length).toBe(4) - const adapterScript = executeCalls[0][0] - const importScript = executeCalls[1][0] - expect(adapterScript).toContain(`CREATE OR REPLACE JAVA ADAPTER SCRIPT "ext-schema"."S3_FILES_ADAPTER" AS`) - expect(adapterScript).toContain(`%jar /bucketfs/${CONFIG.fileName};`) - expect(importScript).toContain(`CREATE OR REPLACE JAVA SET SCRIPT "ext-schema"."IMPORT_FROM_S3_DOCUMENT_FILES"`) - expect(importScript).toContain(`%jar /bucketfs/${CONFIG.fileName};`) - const expectedComment = `Created by Extension Manager for S3 Virtual Schema extension ${CONFIG.version}` - expect(executeCalls[2]).toEqual([`COMMENT ON SCRIPT "ext-schema"."IMPORT_FROM_S3_DOCUMENT_FILES" IS '${expectedComment}'`]) - expect(executeCalls[3]).toEqual([`COMMENT ON SCRIPT "ext-schema"."S3_FILES_ADAPTER" IS '${expectedComment}'`]) - }) - }) -}) \ No newline at end of file diff --git a/extension/src/upgrade.ts b/extension/src/upgrade.ts deleted file mode 100644 index 9df39559..00000000 --- a/extension/src/upgrade.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { Context, NotFoundError, PreconditionFailedError, UpgradeResult } from "@exasol/extension-manager-interface"; -import { AdapterScript } from "./adapterScript"; -import { ADAPTER_SCRIPT_NAME, ExtensionInfo, IMPORT_SCRIPT_NAME } from "./common"; -import { installExtension } from "./installExtension"; - -interface Scripts { - adapterScript: AdapterScript - importScript: AdapterScript -} - -export function upgrade(context: Context, extensionInfo: ExtensionInfo): UpgradeResult { - const scripts = getAdapterScripts(context) - const previousVersion = getAdapterVersion(extensionInfo, scripts) - const newVersion = extensionInfo.version - installExtension(context, extensionInfo, newVersion) - return { previousVersion, newVersion }; -} - -function getAdapterScripts(context: Context): Scripts { - const adapterScript = context.metadata.getScriptByName(ADAPTER_SCRIPT_NAME) - const importScript = context.metadata.getScriptByName(IMPORT_SCRIPT_NAME) - if (!adapterScript || !importScript) { - const missingScripts: string[] = [] - if (!adapterScript) { - missingScripts.push(ADAPTER_SCRIPT_NAME) - } - if (!importScript) { - missingScripts.push(IMPORT_SCRIPT_NAME) - } - throw new NotFoundError(`extension is not installed, the following scripts are missing: ${missingScripts.join(', ')}`) - } - return { - adapterScript: new AdapterScript(adapterScript), - importScript: new AdapterScript(importScript) - } -} - -function getAdapterVersion(extensionInfo: ExtensionInfo, scripts: Scripts): string { - const { adapterScript, importScript } = scripts; - const adapterVersion = adapterScript.getVersion(); - const importScriptVersion = importScript.getVersion(); - if (!adapterVersion) { - throw new PreconditionFailedError(`Failed to extract version from adapter script ${adapterScript.qualifiedName}, script text: '${adapterScript.text}'`) - } else if (!importScriptVersion) { - throw new PreconditionFailedError(`Failed to extract version from import script ${importScript.qualifiedName}, script text: '${importScript.text}'`) - } else if (adapterVersion !== importScriptVersion) { - throw new PreconditionFailedError(`Scripts have inconsistent versions. ${adapterScript.qualifiedName}: ${adapterVersion}, ${importScript.qualifiedName}: ${importScriptVersion}`) - } else if (adapterVersion === extensionInfo.version) { - throw new PreconditionFailedError(`Extension is already installed in latest version ${extensionInfo.version}`) - } - return adapterVersion -} diff --git a/src/test/java/com/exasol/adapter/document/files/extension/ExtensionIT.java b/src/test/java/com/exasol/adapter/document/files/extension/ExtensionIT.java index a635d6d9..f9bd77a3 100644 --- a/src/test/java/com/exasol/adapter/document/files/extension/ExtensionIT.java +++ b/src/test/java/com/exasol/adapter/document/files/extension/ExtensionIT.java @@ -168,15 +168,6 @@ void install_worksIfCalledTwice() { assertScriptsExist(); } - @Test - void install_failsForUnsupportedVersion() { - final ExtensionManagerClient client = setup.client(); - client.assertRequestFails(() -> client.install("unsupported"), - equalTo("Installing version 'unsupported' not supported, try '" + PROJECT_VERSION + "'."), - equalTo(400)); - setup.exasolMetadata().assertNoScripts(); - } - @Test void createInstanceFailsWithoutRequiredParameters() { final ExtensionManagerClient client = setup.client(); @@ -186,13 +177,6 @@ void createInstanceFailsWithoutRequiredParameters() { equalTo(400)); } - @Test - void uninstall_failsForUnknownVersion() { - setup.client().assertRequestFails(() -> setup.client().uninstall("unknownVersion"), - equalTo("Uninstalling version 'unknownVersion' not supported, try '" + PROJECT_VERSION + "'."), - equalTo(404)); - } - @Test void uninstall_succeedsForNonExistingInstallation() { assertDoesNotThrow(() -> setup.client().uninstall()); From d51e9fd75eab9151aed8682941d716310c4e19dd Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Thu, 2 Nov 2023 08:36:53 +0100 Subject: [PATCH 09/30] #137: Remove unused code --- extension/src/common.ts | 16 ----------- extension/src/extension.ts | 1 - extension/src/parameterDefinitions.ts | 40 --------------------------- 3 files changed, 57 deletions(-) delete mode 100644 extension/src/parameterDefinitions.ts diff --git a/extension/src/common.ts b/extension/src/common.ts index ebfe5ccd..ceb074a7 100644 --- a/extension/src/common.ts +++ b/extension/src/common.ts @@ -2,19 +2,3 @@ export const ADAPTER_SCRIPT_NAME = "S3_FILES_ADAPTER"; export const IMPORT_SCRIPT_NAME = "IMPORT_FROM_S3_DOCUMENT_FILES"; export const EXTENSION_NAME = "S3 Virtual Schema"; - -export interface ExtensionInfo { - version: string; - fileName: string; -} - -export function getConnectionName(virtualSchemaName: string): string { - return `${virtualSchemaName}_CONNECTION`; -} - -function identity(arg: string): string { - return arg; -} - -export const convertInstanceIdToSchemaName = identity -export const convertSchemaNameToInstanceId = identity diff --git a/extension/src/extension.ts b/extension/src/extension.ts index 2b15a40e..aa5c9e34 100644 --- a/extension/src/extension.ts +++ b/extension/src/extension.ts @@ -10,7 +10,6 @@ import { convertVirtualSchemaBaseExtension, createJsonConnectionDefinition, crea import { ADAPTER_SCRIPT_NAME, EXTENSION_NAME, IMPORT_SCRIPT_NAME } from "./common"; import { CONFIG } from "./extension-config"; - export function createExtension(): ExasolExtension { const virtualSchemaAdapterScript = ADAPTER_SCRIPT_NAME return convertVirtualSchemaBaseExtension({ diff --git a/extension/src/parameterDefinitions.ts b/extension/src/parameterDefinitions.ts deleted file mode 100644 index 714b7db1..00000000 --- a/extension/src/parameterDefinitions.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { Parameter } from "@exasol/extension-manager-interface"; - -export type ScopedParameter = Parameter & { scope: "general" | "connection" | "vs" } -export type ScopedParameters = { [key: string]: ScopedParameter } - -const allParams: ScopedParameters = { - virtualSchemaName: { scope: "general", id: "virtualSchemaName", name: "Name of the new virtual schema", type: "string", required: true }, - - // Connection parameters - awsAccessKeyId: { scope: "connection", id: "awsAccessKeyId", name: "AWS Access Key Id", type: "string", required: true }, - awsSecretAccessKey: { scope: "connection", id: "awsSecretAccessKey", name: "AWS Secret AccessKey", type: "string", required: true, secret: true }, - awsRegion: { scope: "connection", id: "awsRegion", name: "AWS Region", type: "string", required: true }, - s3Bucket: { scope: "connection", id: "s3Bucket", name: "S3 Bucket", type: "string", required: true }, - awsSessionToken: { scope: "connection", id: "awsSessionToken", name: "AWS Session Token", type: "string", required: false, secret: true }, - awsEndpointOverride: { scope: "connection", id: "awsEndpointOverride", name: "AWS Endpoint Override", type: "string", required: false }, - s3PathStyleAccess: { scope: "connection", id: "s3PathStyleAccess", name: "S3 Path Style Access", type: "boolean", required: false }, - useSsl: { scope: "connection", id: "useSsl", name: "Use SSL", type: "boolean", required: false }, - - // Virtual Schema parameters - mapping: { scope: "vs", id: "mapping", name: "EDML Mapping", type: "string", required: true, multiline: true }, -}; - -export function getAllParameterDefinitions(): ScopedParameters { - return allParams; -} - -export function createInstanceParameters(): Parameter[] { - return [ - allParams.virtualSchemaName, - allParams.awsAccessKeyId, - allParams.awsSecretAccessKey, - allParams.awsRegion, - allParams.s3Bucket, - allParams.awsSessionToken, - allParams.awsEndpointOverride, - allParams.s3PathStyleAccess, - allParams.useSsl, - allParams.mapping - ]; -} \ No newline at end of file From 4a9d2b0679db33fb6656aba29abcae8961d467c4 Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Thu, 2 Nov 2023 09:36:24 +0100 Subject: [PATCH 10/30] Update changelog --- doc/changes/changes_2.8.3.md | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/doc/changes/changes_2.8.3.md b/doc/changes/changes_2.8.3.md index 7c5850fe..abc9d593 100644 --- a/doc/changes/changes_2.8.3.md +++ b/doc/changes/changes_2.8.3.md @@ -1,12 +1,18 @@ -# S3 Document Files Virtual Schema 2.8.3, released 2023-??-?? +# S3 Document Files Virtual Schema 2.8.3, released 2023-11-02 -Code name: +Code name: Refactoring of Extension ## Summary +This release moves common extension code to `extension-manager-interface` to simplify the extension. We added the following optional parameters to the extension, so you can also use them with Extension Manager: + +* `MAX_PARALLEL_UDFS`: Maximum number of UDFs that are executed in parallel +* `DEBUG_ADDRESS`: Network address and port to which to send debug output +* `LOG_LEVEL`: Log level for debug output + ## Refactoring -* #137: Extracted common code for virtual schema based extensions +* #137: Moved common extension code to `extension-manager-interface` ## Dependency Updates From a75edd59405b4a70314ebed8dc486b78b269c6e3 Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Thu, 2 Nov 2023 09:36:47 +0100 Subject: [PATCH 11/30] Remove unwanted system property --- .../com/exasol/adapter/document/files/extension/ExtensionIT.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/test/java/com/exasol/adapter/document/files/extension/ExtensionIT.java b/src/test/java/com/exasol/adapter/document/files/extension/ExtensionIT.java index f9bd77a3..98869c39 100644 --- a/src/test/java/com/exasol/adapter/document/files/extension/ExtensionIT.java +++ b/src/test/java/com/exasol/adapter/document/files/extension/ExtensionIT.java @@ -55,7 +55,6 @@ class ExtensionIT { @BeforeAll static void setup() throws FileNotFoundException, BucketAccessException, TimeoutException { - System.setProperty("com.exasol.dockerdb.image", "8.23.0"); exasolTestSetup = new ExasolTestSetupFactory(IntegrationTestSetup.CLOUD_SETUP_CONFIG).getTestSetup(); ExasolVersionCheck.assumeExasolVersion8(exasolTestSetup); setup = ExtensionManagerSetup.create(exasolTestSetup, ExtensionBuilder.createDefaultNpmBuilder( From 42e51dede9fcac02f238b25614979e4d5bd52426 Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Thu, 2 Nov 2023 09:38:18 +0100 Subject: [PATCH 12/30] Upgrade to Go 1.20 --- .github/workflows/ci-build.yml | 2 +- .github/workflows/release_droid_prepare_original_checksum.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml index 57343215..7f89a84f 100644 --- a/.github/workflows/ci-build.yml +++ b/.github/workflows/ci-build.yml @@ -34,7 +34,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v3 with: - go-version: 1.19 + go-version: "1.20" - name: Cache Go modules uses: actions/cache@v3 with: diff --git a/.github/workflows/release_droid_prepare_original_checksum.yml b/.github/workflows/release_droid_prepare_original_checksum.yml index c0acd253..e59b37b1 100644 --- a/.github/workflows/release_droid_prepare_original_checksum.yml +++ b/.github/workflows/release_droid_prepare_original_checksum.yml @@ -20,7 +20,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v3 with: - go-version: 1.19 + go-version: "1.20" - name: Enable testcontainer reuse run: echo 'testcontainers.reuse.enable=true' > "$HOME/.testcontainers.properties" - name: Create test_config.properties From 5a5821b015ea79533f6c564fc28cf6e7eec33115 Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Thu, 2 Nov 2023 16:10:25 +0100 Subject: [PATCH 13/30] Adapt to updated interface --- extension/src/extension.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/extension/src/extension.ts b/extension/src/extension.ts index aa5c9e34..d5091565 100644 --- a/extension/src/extension.ts +++ b/extension/src/extension.ts @@ -11,7 +11,6 @@ import { ADAPTER_SCRIPT_NAME, EXTENSION_NAME, IMPORT_SCRIPT_NAME } from "./commo import { CONFIG } from "./extension-config"; export function createExtension(): ExasolExtension { - const virtualSchemaAdapterScript = ADAPTER_SCRIPT_NAME return convertVirtualSchemaBaseExtension({ name: EXTENSION_NAME, description: "Virtual Schema for document files on AWS S3", @@ -19,10 +18,9 @@ export function createExtension(): ExasolExtension { version: CONFIG.version, file: { name: CONFIG.fileName, size: CONFIG.fileSizeBytes }, scripts: getUdfScriptDefinitions(), - virtualSchemaAdapterScript, + virtualSchemaAdapterScript: ADAPTER_SCRIPT_NAME, scriptVersionExtractor: jarFileVersionExtractor(/document-files-virtual-schema-dist-[\d.]+-s3-(\d+\.\d+\.\d+).jar/), builder: createVirtualSchemaBuilder({ - adapterName: virtualSchemaAdapterScript, connectionNameProperty: "CONNECTION_NAME", virtualSchemaParameters: getVirtualSchemaParameterDefinitions(), connectionDefinition: createJsonConnectionDefinition(getConnectionParameterDefinitions()) From d1a20ae2cb0d5616e55c4be2a5f9fd63a6057a57 Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Thu, 2 Nov 2023 16:21:00 +0100 Subject: [PATCH 14/30] Adapt test to base extension --- .../exasol/adapter/document/files/extension/ExtensionIT.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/com/exasol/adapter/document/files/extension/ExtensionIT.java b/src/test/java/com/exasol/adapter/document/files/extension/ExtensionIT.java index 98869c39..91904828 100644 --- a/src/test/java/com/exasol/adapter/document/files/extension/ExtensionIT.java +++ b/src/test/java/com/exasol/adapter/document/files/extension/ExtensionIT.java @@ -278,11 +278,11 @@ private void upload(final String key, final String content) { } @Test - void listingInstancesIgnoresVersion() { + void listInstances() { setup.client().install(); final String name = "my_virtual_SCHEMA"; createInstance(name); - assertThat(setup.client().listInstances("unknownVersion"), + assertThat(setup.client().listInstances(PROJECT_VERSION), allOf(hasSize(1), equalTo(List.of(new Instance().id(name).name(name))))); } From 920ac7df9cb9e5ffecb982aefeaa7ac3b8dc6cca Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Fri, 3 Nov 2023 08:47:09 +0100 Subject: [PATCH 15/30] Add CI test with Exasol 8 --- .github/workflows/ci-build.yml | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml index 7f89a84f..965099c7 100644 --- a/.github/workflows/ci-build.yml +++ b/.github/workflows/ci-build.yml @@ -8,9 +8,16 @@ on: jobs: build: + name: Build with Exasol ${{ matrix.exasol_db_version }} runs-on: ubuntu-20.04 # UDFs fail with "VM error: Internal error: VM crashed" on ubuntu-latest + strategy: + fail-fast: false + matrix: + exasol_db_version: ["7.1.23", "8.23.0"] + env: + DEFAULT_EXASOL_DB_VERSION: "7.1.23" concurrency: - group: ${{ github.workflow }}-${{ github.ref }} + group: ${{ github.workflow }}-${{ github.ref }}-${{ matrix.exasol_db_version }} cancel-in-progress: true steps: - name: Checkout the repository @@ -25,10 +32,10 @@ jobs: 17 11 cache: "maven" - - name: Set up Node 16 + - name: Set up Node 18 uses: actions/setup-node@v3 with: - node-version: 16 + node-version: 18 cache: "npm" cache-dependency-path: extension/package-lock.json - name: Set up Go @@ -60,7 +67,8 @@ jobs: run: | JAVA_HOME=$JAVA_HOME_11_X64 mvn --batch-mode clean verify \ -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn \ - -DtrimStackTrace=false + -DtrimStackTrace=false \ + -Dcom.exasol.dockerdb.image=${{ matrix.exasol_db_version }} env: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} @@ -77,7 +85,7 @@ jobs: with: github_token: ${{ secrets.GITHUB_TOKEN }} - name: Sonar analysis - if: ${{ env.SONAR_TOKEN != null }} + if: ${{ env.SONAR_TOKEN != null && matrix.exasol_db_version == env.DEFAULT_EXASOL_DB_VERSION }} run: | JAVA_HOME=$JAVA_HOME_17_X64 mvn --batch-mode org.sonarsource.scanner.maven:sonar-maven-plugin:sonar \ -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn \ From 1e7bd0c584793215973f7d599e051abb4a97dd7b Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Fri, 3 Nov 2023 09:07:23 +0100 Subject: [PATCH 16/30] Upgrade dependencies --- dependencies.md | 4 +- doc/changes/changes_2.8.3.md | 10 +- extension/package-lock.json | 549 +++++++++++++++++++---------------- extension/package.json | 8 +- pom.xml | 10 +- 5 files changed, 310 insertions(+), 271 deletions(-) diff --git a/dependencies.md b/dependencies.md index cfbc34b7..c849ddb2 100644 --- a/dependencies.md +++ b/dependencies.md @@ -87,7 +87,7 @@ [10]: https://junit.org/junit5/ [11]: https://www.eclipse.org/legal/epl-v20.html [12]: https://github.com/mockito/mockito -[13]: https://github.com/mockito/mockito/blob/main/LICENSE +[13]: https://opensource.org/licenses/MIT [14]: https://java.testcontainers.org [15]: http://opensource.org/licenses/MIT [16]: https://github.com/exasol/test-db-builder-java/ @@ -138,4 +138,4 @@ [61]: http://zlika.github.io/reproducible-build-maven-plugin [62]: https://maven.apache.org/plugins/maven-clean-plugin/ [63]: https://www.mojohaus.org/exec-maven-plugin -[64]: file:../../../../extension-manager-interface +[64]: https://registry.npmjs.org/@exasol/extension-manager-interface/-/extension-manager-interface-0.3.1.tgz diff --git a/doc/changes/changes_2.8.3.md b/doc/changes/changes_2.8.3.md index abc9d593..e35bdc0d 100644 --- a/doc/changes/changes_2.8.3.md +++ b/doc/changes/changes_2.8.3.md @@ -20,13 +20,15 @@ This release moves common extension code to `extension-manager-interface` to sim #### Compile Dependency Updates -* Updated `software.amazon.awssdk:s3:2.21.6` to `2.21.11` +* Updated `software.amazon.awssdk:s3:2.21.6` to `2.21.14` #### Test Dependency Updates -* Updated `com.amazonaws:aws-java-sdk-s3:1.12.572` to `1.12.577` -* Updated `com.exasol:extension-manager-integration-test-java:0.5.3` to `0.5.4` +* Updated `com.amazonaws:aws-java-sdk-s3:1.12.572` to `1.12.580` +* Updated `com.exasol:extension-manager-integration-test-java:0.5.3` to `0.5.5` * Updated `com.exasol:hamcrest-resultset-matcher:1.6.1` to `1.6.2` +* Updated `nl.jqno.equalsverifier:equalsverifier:3.15.2` to `3.15.3` +* Updated `org.mockito:mockito-core:5.6.0` to `5.7.0` #### Plugin Dependency Updates @@ -36,7 +38,7 @@ This release moves common extension code to `extension-manager-interface` to sim #### Compile Dependency Updates -* Updated `@exasol/extension-manager-interface:0.3.0` to `/Users/chp/git/extension-manager-interface` +* Updated `@exasol/extension-manager-interface:0.3.0` to `0.3.1` #### Development Dependency Updates diff --git a/extension/package-lock.json b/extension/package-lock.json index 1523d20a..bc94e71a 100644 --- a/extension/package-lock.json +++ b/extension/package-lock.json @@ -13,10 +13,10 @@ }, "devDependencies": { "@types/jest": "^29.5.6", - "@typescript-eslint/eslint-plugin": "^6.8.0", - "@typescript-eslint/parser": "^6.8.0", + "@typescript-eslint/eslint-plugin": "^6.9.0", + "@typescript-eslint/parser": "^6.9.0", "esbuild": "^0.19.5", - "eslint": "^8.51.0", + "eslint": "^8.52.0", "jest": "29.7.0", "ts-jest": "^29.1.1", "ts-node": "^10.9.1", @@ -130,35 +130,35 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.4.tgz", - "integrity": "sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.2.tgz", + "integrity": "sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.4.tgz", - "integrity": "sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.2.tgz", + "integrity": "sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.21.4", - "@babel/helper-compilation-targets": "^7.21.4", - "@babel/helper-module-transforms": "^7.21.2", - "@babel/helpers": "^7.21.0", - "@babel/parser": "^7.21.4", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.4", - "@babel/types": "^7.21.4", - "convert-source-map": "^1.7.0", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-module-transforms": "^7.23.0", + "@babel/helpers": "^7.23.2", + "@babel/parser": "^7.23.0", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.2", + "@babel/types": "^7.23.0", + "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" + "json5": "^2.2.3", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -168,12 +168,6 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/core/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, "node_modules/@babel/core/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -199,22 +193,19 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.4.tgz", - "integrity": "sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", + "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.21.4", - "@babel/helper-validator-option": "^7.21.0", - "browserslist": "^4.21.3", + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.15", + "browserslist": "^4.21.9", "lru-cache": "^5.1.1", - "semver": "^6.3.0" + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { @@ -261,34 +252,34 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz", - "integrity": "sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==", + "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==", "dev": true, "dependencies": { - "@babel/types": "^7.21.4" + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.21.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz", - "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz", + "integrity": "sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.2", - "@babel/types": "^7.21.2" + "@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" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-plugin-utils": { @@ -301,12 +292,12 @@ } }, "node_modules/@babel/helper-simple-access": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", + "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==", "dev": true, "dependencies": { - "@babel/types": "^7.20.2" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -343,23 +334,23 @@ } }, "node_modules/@babel/helper-validator-option": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", - "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", + "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz", - "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.2.tgz", + "integrity": "sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==", "dev": true, "dependencies": { - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.0", - "@babel/types": "^7.21.0" + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.2", + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" @@ -1093,9 +1084,9 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.2.tgz", - "integrity": "sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==", + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" @@ -1125,9 +1116,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.51.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.51.0.tgz", - "integrity": "sha512-HxjQ8Qn+4SI3/AFv6sOrDB+g6PpUTDwSJiQqOrnneEk8L71161srI9gjzzZvYVbzHiVg/BvcH95+cK/zfIt4pg==", + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.52.0.tgz", + "integrity": "sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -1139,12 +1130,12 @@ "integrity": "sha512-eiemC19v6wp9VCrL7w8SL6gBFAhkdwt2MoS19fcaQoHPOzH08jG9q4RuY43JQGa4PckCW3KO5lmn3P5XsIpbXg==" }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.12", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.12.tgz", - "integrity": "sha512-NlGesA1usRNn6ctHCZ21M4/dKPgW9Nn1FypRdIKKgZOKzkVV4T1FlK5mBiLhHBCDmEbdQG0idrcXlbZfksJ+RA==", + "version": "0.11.13", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", + "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^2.0.0", + "@humanwhocodes/object-schema": "^2.0.1", "debug": "^4.1.1", "minimatch": "^3.0.5" }, @@ -1166,9 +1157,9 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.0.tgz", - "integrity": "sha512-9S9QrXY2K0L4AGDcSgTi9vgiCcG8VcBv4Mp7/1hDPYoswIy6Z6KO5blYto82BT8M0MZNRWmCFLpCs3HlpYGGdw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", + "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", "dev": true }, "node_modules/@istanbuljs/load-nyc-config": { @@ -1458,22 +1449,6 @@ } } }, - "node_modules/@jest/reporters/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/@jest/schemas": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", @@ -1588,9 +1563,9 @@ } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", "dev": true, "engines": { "node": ">=6.0.0" @@ -1612,21 +1587,15 @@ "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", "dev": true, "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -1705,9 +1674,9 @@ "dev": true }, "node_modules/@tsconfig/node16": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", - "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", "dev": true }, "node_modules/@types/babel__core": { @@ -1761,33 +1730,33 @@ } }, "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-zONci81DZYCZjiLe0r6equvZut0b+dBRPBN5kBDjsONnutYNtJMoWQ9uR2RkL1gLG9NMTzvf+29e5RFfPbeKhQ==", "dev": true }, "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.2.tgz", + "integrity": "sha512-8toY6FgdltSdONav1XtUHl4LN1yTmLza+EuDazb/fEmRNCwjyqNVIQWs2IfC74IqjHkREs/nQ2FWq5kZU9IC0w==", "dev": true, "dependencies": { "@types/istanbul-lib-coverage": "*" } }, "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.3.tgz", + "integrity": "sha512-1nESsePMBlf0RPRffLZi5ujYh7IH1BWL4y9pr+Bn3cJBdxz+RTP8bUFljLz9HvzhhOSWKdyBZ4DIivdL6rvgZg==", "dev": true, "dependencies": { "@types/istanbul-lib-report": "*" } }, "node_modules/@types/jest": { - "version": "29.5.6", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.6.tgz", - "integrity": "sha512-/t9NnzkOpXb4Nfvg17ieHE6EeSjDS2SGSpNYfoLbUAeL/EOueU/RSdOWFpfQTXBEM7BguYW1XQ0EbM+6RlIh6w==", + "version": "29.5.7", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.7.tgz", + "integrity": "sha512-HLyetab6KVPSiF+7pFcUyMeLsx25LDNDemw9mGsJBkai/oouwrjTycocSDYopMEwFhN2Y4s9oPyOCZNofgSt2g==", "dev": true, "dependencies": { "expect": "^29.0.0", @@ -1801,10 +1770,13 @@ "dev": true }, "node_modules/@types/node": { - "version": "18.15.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz", - "integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==", - "dev": true + "version": "20.8.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.10.tgz", + "integrity": "sha512-TlgT8JntpcbmKUFzjhsyhGfP2fsiz1Mv56im6enJ905xG1DAYesxJaeSbGqQmAw8OWPdhyJGhGSQGKRNJ45u9w==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } }, "node_modules/@types/semver": { "version": "7.5.4", @@ -1813,37 +1785,37 @@ "dev": true }, "node_modules/@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.2.tgz", + "integrity": "sha512-g7CK9nHdwjK2n0ymT2CW698FuWJRIx+RP6embAzZ2Qi8/ilIrA1Imt2LVSeHUzKvpoi7BhmmQcXz95eS0f2JXw==", "dev": true }, "node_modules/@types/yargs": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", - "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", + "version": "17.0.29", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.29.tgz", + "integrity": "sha512-nacjqA3ee9zRF/++a3FUY1suHTFKZeHba2n8WeDw9cCVdmzmHpIxyzOJBcpHvvEmS8E9KqWlSnWHUkOrkhWcvA==", "dev": true, "dependencies": { "@types/yargs-parser": "*" } }, "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "version": "21.0.2", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.2.tgz", + "integrity": "sha512-5qcvofLPbfjmBfKaLfj/+f+Sbd6pN4zl7w7VSVI5uz7m9QZTuB2aZAa2uo1wHFBNN2x6g/SoTkXmd8mQnQF2Cw==", "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.8.0.tgz", - "integrity": "sha512-GosF4238Tkes2SHPQ1i8f6rMtG6zlKwMEB0abqSJ3Npvos+doIlc/ATG+vX1G9coDF3Ex78zM3heXHLyWEwLUw==", + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.9.1.tgz", + "integrity": "sha512-w0tiiRc9I4S5XSXXrMHOWgHgxbrBn1Ro+PmiYhSg2ZVdxrAJtQgzU5o2m1BfP6UOn7Vxcc6152vFjQfmZR4xEg==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.8.0", - "@typescript-eslint/type-utils": "6.8.0", - "@typescript-eslint/utils": "6.8.0", - "@typescript-eslint/visitor-keys": "6.8.0", + "@typescript-eslint/scope-manager": "6.9.1", + "@typescript-eslint/type-utils": "6.9.1", + "@typescript-eslint/utils": "6.9.1", + "@typescript-eslint/visitor-keys": "6.9.1", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", @@ -1869,15 +1841,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.8.0.tgz", - "integrity": "sha512-5tNs6Bw0j6BdWuP8Fx+VH4G9fEPDxnVI7yH1IAPkQH5RUtvKwRoqdecAPdQXv4rSOADAaz1LFBZvZG7VbXivSg==", + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.9.1.tgz", + "integrity": "sha512-C7AK2wn43GSaCUZ9do6Ksgi2g3mwFkMO3Cis96kzmgudoVaKyt62yNzJOktP0HDLb/iO2O0n2lBOzJgr6Q/cyg==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "6.8.0", - "@typescript-eslint/types": "6.8.0", - "@typescript-eslint/typescript-estree": "6.8.0", - "@typescript-eslint/visitor-keys": "6.8.0", + "@typescript-eslint/scope-manager": "6.9.1", + "@typescript-eslint/types": "6.9.1", + "@typescript-eslint/typescript-estree": "6.9.1", + "@typescript-eslint/visitor-keys": "6.9.1", "debug": "^4.3.4" }, "engines": { @@ -1897,13 +1869,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.8.0.tgz", - "integrity": "sha512-xe0HNBVwCph7rak+ZHcFD6A+q50SMsFwcmfdjs9Kz4qDh5hWhaPhFjRs/SODEhroBI5Ruyvyz9LfwUJ624O40g==", + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.9.1.tgz", + "integrity": "sha512-38IxvKB6NAne3g/+MyXMs2Cda/Sz+CEpmm+KLGEM8hx/CvnSRuw51i8ukfwB/B/sESdeTGet1NH1Wj7I0YXswg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.8.0", - "@typescript-eslint/visitor-keys": "6.8.0" + "@typescript-eslint/types": "6.9.1", + "@typescript-eslint/visitor-keys": "6.9.1" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -1914,13 +1886,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.8.0.tgz", - "integrity": "sha512-RYOJdlkTJIXW7GSldUIHqc/Hkto8E+fZN96dMIFhuTJcQwdRoGN2rEWA8U6oXbLo0qufH7NPElUb+MceHtz54g==", + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.9.1.tgz", + "integrity": "sha512-eh2oHaUKCK58qIeYp19F5V5TbpM52680sB4zNSz29VBQPTWIlE/hCj5P5B1AChxECe/fmZlspAWFuRniep1Skg==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "6.8.0", - "@typescript-eslint/utils": "6.8.0", + "@typescript-eslint/typescript-estree": "6.9.1", + "@typescript-eslint/utils": "6.9.1", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, @@ -1941,9 +1913,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.8.0.tgz", - "integrity": "sha512-p5qOxSum7W3k+llc7owEStXlGmSl8FcGvhYt8Vjy7FqEnmkCVlM3P57XQEGj58oqaBWDQXbJDZxwUWMS/EAPNQ==", + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.9.1.tgz", + "integrity": "sha512-BUGslGOb14zUHOUmDB2FfT6SI1CcZEJYfF3qFwBeUrU6srJfzANonwRYHDpLBuzbq3HaoF2XL2hcr01c8f8OaQ==", "dev": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -1954,13 +1926,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.8.0.tgz", - "integrity": "sha512-ISgV0lQ8XgW+mvv5My/+iTUdRmGspducmQcDw5JxznasXNnZn3SKNrTRuMsEXv+V/O+Lw9AGcQCfVaOPCAk/Zg==", + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.9.1.tgz", + "integrity": "sha512-U+mUylTHfcqeO7mLWVQ5W/tMLXqVpRv61wm9ZtfE5egz7gtnmqVIw9ryh0mgIlkKk9rZLY3UHygsBSdB9/ftyw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.8.0", - "@typescript-eslint/visitor-keys": "6.8.0", + "@typescript-eslint/types": "6.9.1", + "@typescript-eslint/visitor-keys": "6.9.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -1981,17 +1953,17 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.8.0.tgz", - "integrity": "sha512-dKs1itdE2qFG4jr0dlYLQVppqTE+Itt7GmIf/vX6CSvsW+3ov8PbWauVKyyfNngokhIO9sKZeRGCUo1+N7U98Q==", + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.9.1.tgz", + "integrity": "sha512-L1T0A5nFdQrMVunpZgzqPL6y2wVreSyHhKGZryS6jrEN7bD9NplVAyMryUhXsQ4TWLnZmxc2ekar/lSGIlprCA==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.8.0", - "@typescript-eslint/types": "6.8.0", - "@typescript-eslint/typescript-estree": "6.8.0", + "@typescript-eslint/scope-manager": "6.9.1", + "@typescript-eslint/types": "6.9.1", + "@typescript-eslint/typescript-estree": "6.9.1", "semver": "^7.5.4" }, "engines": { @@ -2006,12 +1978,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.8.0.tgz", - "integrity": "sha512-oqAnbA7c+pgOhW2OhGvxm0t1BULX5peQI/rLsNDpGM78EebV3C9IGbX5HNZabuZ6UQrYveCLjKo8Iy/lLlBkkg==", + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.9.1.tgz", + "integrity": "sha512-MUaPUe/QRLEffARsmNfmpghuQkW436DvESW+h+M52w0coICHRfD6Np9/K6PdACwnrq1HmuLl+cSPZaJmeVPkSw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.8.0", + "@typescript-eslint/types": "6.9.1", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -2022,10 +1994,16 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -2044,9 +2022,9 @@ } }, "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.0.tgz", + "integrity": "sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==", "dev": true, "engines": { "node": ">=0.4.0" @@ -2190,6 +2168,31 @@ "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", @@ -2273,9 +2276,9 @@ } }, "node_modules/browserslist": { - "version": "4.21.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", - "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", + "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", "dev": true, "funding": [ { @@ -2285,13 +2288,17 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { - "caniuse-lite": "^1.0.30001449", - "electron-to-chromium": "^1.4.284", - "node-releases": "^2.0.8", - "update-browserslist-db": "^1.0.10" + "caniuse-lite": "^1.0.30001541", + "electron-to-chromium": "^1.4.535", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.13" }, "bin": { "browserslist": "cli.js" @@ -2346,9 +2353,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001478", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001478.tgz", - "integrity": "sha512-gMhDyXGItTHipJj2ApIvR+iVB5hd0KP3svMWWXDvZOmjzJJassGLMfxRkQCSYgGd2gtdL/ReeiyvMSFD1Ss6Mw==", + "version": "1.0.30001559", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001559.tgz", + "integrity": "sha512-cPiMKZgqgkg5LY3/ntGeLFUpi6tzddBNS58A4tnTgQw1zON7u2sZMU7SzOeVH4tj20++9ggL+V6FDOFMTaFFYA==", "dev": true, "funding": [ { @@ -2391,9 +2398,9 @@ } }, "node_modules/ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", "dev": true, "funding": [ { @@ -2610,9 +2617,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.363", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.363.tgz", - "integrity": "sha512-ReX5qgmSU7ybhzMuMdlJAdYnRhT90UB3k9M05O5nF5WH3wR5wgdJjXw0uDeFyKNhmglmQiOxkAbzrP0hMKM59g==", + "version": "1.4.575", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.575.tgz", + "integrity": "sha512-kY2BGyvgAHiX899oF6xLXSIf99bAvvdPhDoJwG77nxCSyWYuRH6e9a9a3gpXBvCs6lj4dQZJkfnW2hdKWHEISg==", "dev": true }, "node_modules/emittery": { @@ -2701,18 +2708,19 @@ } }, "node_modules/eslint": { - "version": "8.51.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.51.0.tgz", - "integrity": "sha512-2WuxRZBrlwnXi+/vFSJyjMqrNjtJqiasMzehF0shoLaW7DzS3/9Yvrmq5JiT66+pNjiX4UBnLDiKHcWAr/OInA==", + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.52.0.tgz", + "integrity": "sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "8.51.0", - "@humanwhocodes/config-array": "^0.11.11", + "@eslint/js": "8.52.0", + "@humanwhocodes/config-array": "^0.11.13", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -3007,22 +3015,23 @@ } }, "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.1.tgz", + "integrity": "sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==", "dev": true, "dependencies": { - "flatted": "^3.1.0", + "flatted": "^3.2.9", + "keyv": "^4.5.3", "rimraf": "^3.0.2" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=12.0.0" } }, "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", "dev": true }, "node_modules/fs.realpath": { @@ -3045,6 +3054,15 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -3163,15 +3181,6 @@ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, - "node_modules/has": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", - "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", - "dev": true, - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -3181,6 +3190,18 @@ "node": ">=8" } }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", @@ -3272,12 +3293,12 @@ "dev": true }, "node_modules/is-core-module": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", - "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dev": true, "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3368,28 +3389,19 @@ } }, "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==", + "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": "^6.3.0" + "semver": "^7.5.4" }, "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument/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": ">=10" } }, "node_modules/istanbul-lib-report": { @@ -4018,6 +4030,12 @@ "node": ">=4" } }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, "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", @@ -4048,6 +4066,15 @@ "node": ">=6" } }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, "node_modules/kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", @@ -4219,9 +4246,9 @@ "dev": true }, "node_modules/node-releases": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", - "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", "dev": true }, "node_modules/normalize-path": { @@ -4416,9 +4443,9 @@ } }, "node_modules/pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "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" @@ -4537,9 +4564,9 @@ } }, "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, "engines": { "node": ">=6" @@ -4962,9 +4989,9 @@ } }, "node_modules/ts-api-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.1.tgz", - "integrity": "sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", + "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", "dev": true, "engines": { "node": ">=16.13.0" @@ -5105,10 +5132,16 @@ "node": ">=14.17" } }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, "node_modules/update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "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": [ { @@ -5118,6 +5151,10 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { @@ -5125,7 +5162,7 @@ "picocolors": "^1.0.0" }, "bin": { - "browserslist-lint": "cli.js" + "update-browserslist-db": "cli.js" }, "peerDependencies": { "browserslist": ">= 4.21.0" diff --git a/extension/package.json b/extension/package.json index 03f1db89..3af9e61d 100644 --- a/extension/package.json +++ b/extension/package.json @@ -18,13 +18,13 @@ }, "devDependencies": { "@types/jest": "^29.5.6", - "@typescript-eslint/eslint-plugin": "^6.8.0", - "@typescript-eslint/parser": "^6.8.0", + "@typescript-eslint/eslint-plugin": "^6.9.0", + "@typescript-eslint/parser": "^6.9.0", "esbuild": "^0.19.5", - "eslint": "^8.51.0", + "eslint": "^8.52.0", "jest": "29.7.0", "ts-jest": "^29.1.1", "ts-node": "^10.9.1", "typescript": "^5.2.2" } -} \ No newline at end of file +} diff --git a/pom.xml b/pom.xml index d446f0a8..28ece5c1 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ software.amazon.awssdk bom - 2.21.11 + 2.21.14 pom import @@ -85,7 +85,7 @@ nl.jqno.equalsverifier equalsverifier - 3.15.2 + 3.15.3 test @@ -110,7 +110,7 @@ org.mockito mockito-core - 5.6.0 + 5.7.0 test @@ -136,7 +136,7 @@ com.amazonaws aws-java-sdk-s3 - 1.12.577 + 1.12.580 test @@ -190,7 +190,7 @@ com.exasol extension-manager-integration-test-java - 0.5.4 + 0.5.5 test From 52ab8f8d71cb70e540f6b3c6b16ab35231cb071e Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Fri, 3 Nov 2023 09:25:33 +0100 Subject: [PATCH 17/30] Fix EM version --- doc/changes/changes_2.8.3.md | 2 +- pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/changes/changes_2.8.3.md b/doc/changes/changes_2.8.3.md index e35bdc0d..60828bab 100644 --- a/doc/changes/changes_2.8.3.md +++ b/doc/changes/changes_2.8.3.md @@ -25,7 +25,7 @@ This release moves common extension code to `extension-manager-interface` to sim #### Test Dependency Updates * Updated `com.amazonaws:aws-java-sdk-s3:1.12.572` to `1.12.580` -* Updated `com.exasol:extension-manager-integration-test-java:0.5.3` to `0.5.5` +* Updated `com.exasol:extension-manager-integration-test-java:0.5.3` to `0.5.4` * Updated `com.exasol:hamcrest-resultset-matcher:1.6.1` to `1.6.2` * Updated `nl.jqno.equalsverifier:equalsverifier:3.15.2` to `3.15.3` * Updated `org.mockito:mockito-core:5.6.0` to `5.7.0` diff --git a/pom.xml b/pom.xml index 28ece5c1..e22df14d 100644 --- a/pom.xml +++ b/pom.xml @@ -190,7 +190,7 @@ com.exasol extension-manager-integration-test-java - 0.5.5 + 0.5.4 test From 0f372d959547199d8b28fd45fb7139675eafc436 Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Mon, 6 Nov 2023 11:30:24 +0100 Subject: [PATCH 18/30] Upgrade dependencies --- dependencies.md | 2 +- doc/changes/changes_2.8.3.md | 18 +++++++++------- extension/package-lock.json | 38 ++++++++++++++++----------------- extension/package.json | 10 ++++----- extension/src/extension.test.ts | 4 ++-- pom.xml | 8 +++---- 6 files changed, 41 insertions(+), 39 deletions(-) diff --git a/dependencies.md b/dependencies.md index c849ddb2..b4212f24 100644 --- a/dependencies.md +++ b/dependencies.md @@ -138,4 +138,4 @@ [61]: http://zlika.github.io/reproducible-build-maven-plugin [62]: https://maven.apache.org/plugins/maven-clean-plugin/ [63]: https://www.mojohaus.org/exec-maven-plugin -[64]: https://registry.npmjs.org/@exasol/extension-manager-interface/-/extension-manager-interface-0.3.1.tgz +[64]: https://registry.npmjs.org/@exasol/extension-manager-interface/-/extension-manager-interface-0.4.0.tgz diff --git a/doc/changes/changes_2.8.3.md b/doc/changes/changes_2.8.3.md index 60828bab..4128b17b 100644 --- a/doc/changes/changes_2.8.3.md +++ b/doc/changes/changes_2.8.3.md @@ -20,14 +20,16 @@ This release moves common extension code to `extension-manager-interface` to sim #### Compile Dependency Updates -* Updated `software.amazon.awssdk:s3:2.21.6` to `2.21.14` +* Updated `software.amazon.awssdk:s3:2.21.6` to `2.21.15` #### Test Dependency Updates -* Updated `com.amazonaws:aws-java-sdk-s3:1.12.572` to `1.12.580` -* Updated `com.exasol:extension-manager-integration-test-java:0.5.3` to `0.5.4` +* Updated `com.amazonaws:aws-java-sdk-s3:1.12.572` to `1.12.581` +* Updated `com.exasol:extension-manager-integration-test-java:0.5.3` to `0.5.5` * Updated `com.exasol:hamcrest-resultset-matcher:1.6.1` to `1.6.2` * Updated `nl.jqno.equalsverifier:equalsverifier:3.15.2` to `3.15.3` +* Updated `org.junit.jupiter:junit-jupiter-engine:5.10.0` to `5.10.1` +* Updated `org.junit.jupiter:junit-jupiter-params:5.10.0` to `5.10.1` * Updated `org.mockito:mockito-core:5.6.0` to `5.7.0` #### Plugin Dependency Updates @@ -38,14 +40,14 @@ This release moves common extension code to `extension-manager-interface` to sim #### Compile Dependency Updates -* Updated `@exasol/extension-manager-interface:0.3.0` to `0.3.1` +* Updated `@exasol/extension-manager-interface:0.3.0` to `0.4.0` #### Development Dependency Updates -* Updated `eslint:^8.46.0` to `^8.52.0` -* Updated `@typescript-eslint/parser:^6.3.0` to `^6.9.0` -* Updated `@types/jest:^29.5.3` to `^29.5.6` +* Updated `eslint:^8.46.0` to `^8.53.0` +* Updated `@typescript-eslint/parser:^6.3.0` to `^6.9.1` +* Updated `@types/jest:^29.5.3` to `^29.5.7` * Updated `typescript:^5.1.6` to `^5.2.2` -* Updated `@typescript-eslint/eslint-plugin:^6.3.0` to `^6.9.0` +* Updated `@typescript-eslint/eslint-plugin:^6.3.0` to `^6.9.1` * Updated `jest:29.6.2` to `29.7.0` * Updated `esbuild:^0.19.0` to `^0.19.5` diff --git a/extension/package-lock.json b/extension/package-lock.json index bc94e71a..e3e7cc91 100644 --- a/extension/package-lock.json +++ b/extension/package-lock.json @@ -9,14 +9,14 @@ "version": "0.1.0", "license": "MIT", "dependencies": { - "@exasol/extension-manager-interface": "0.3.1" + "@exasol/extension-manager-interface": "0.4.0" }, "devDependencies": { - "@types/jest": "^29.5.6", - "@typescript-eslint/eslint-plugin": "^6.9.0", - "@typescript-eslint/parser": "^6.9.0", + "@types/jest": "^29.5.7", + "@typescript-eslint/eslint-plugin": "^6.9.1", + "@typescript-eslint/parser": "^6.9.1", "esbuild": "^0.19.5", - "eslint": "^8.52.0", + "eslint": "^8.53.0", "jest": "29.7.0", "ts-jest": "^29.1.1", "ts-node": "^10.9.1", @@ -1093,9 +1093,9 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", - "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.3.tgz", + "integrity": "sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==", "dev": true, "dependencies": { "ajv": "^6.12.4", @@ -1116,18 +1116,18 @@ } }, "node_modules/@eslint/js": { - "version": "8.52.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.52.0.tgz", - "integrity": "sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA==", + "version": "8.53.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.53.0.tgz", + "integrity": "sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@exasol/extension-manager-interface": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@exasol/extension-manager-interface/-/extension-manager-interface-0.3.1.tgz", - "integrity": "sha512-eiemC19v6wp9VCrL7w8SL6gBFAhkdwt2MoS19fcaQoHPOzH08jG9q4RuY43JQGa4PckCW3KO5lmn3P5XsIpbXg==" + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@exasol/extension-manager-interface/-/extension-manager-interface-0.4.0.tgz", + "integrity": "sha512-EFldVsmR93PurlWFT3zVFrkBw1c+ahnhrL4jaek1XTi+zWdLHsY0ffjkqWrwWBnQvAuH/POU3KwM7/Yf/NurGA==" }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.13", @@ -2708,15 +2708,15 @@ } }, "node_modules/eslint": { - "version": "8.52.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.52.0.tgz", - "integrity": "sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg==", + "version": "8.53.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.53.0.tgz", + "integrity": "sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "8.52.0", + "@eslint/eslintrc": "^2.1.3", + "@eslint/js": "8.53.0", "@humanwhocodes/config-array": "^0.11.13", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", diff --git a/extension/package.json b/extension/package.json index 3af9e61d..d698be69 100644 --- a/extension/package.json +++ b/extension/package.json @@ -14,14 +14,14 @@ "test-watch": "jest --watch" }, "dependencies": { - "@exasol/extension-manager-interface": "0.3.1" + "@exasol/extension-manager-interface": "0.4.0" }, "devDependencies": { - "@types/jest": "^29.5.6", - "@typescript-eslint/eslint-plugin": "^6.9.0", - "@typescript-eslint/parser": "^6.9.0", + "@types/jest": "^29.5.7", + "@typescript-eslint/eslint-plugin": "^6.9.1", + "@typescript-eslint/parser": "^6.9.1", "esbuild": "^0.19.5", - "eslint": "^8.52.0", + "eslint": "^8.53.0", "jest": "29.7.0", "ts-jest": "^29.1.1", "ts-node": "^10.9.1", diff --git a/extension/src/extension.test.ts b/extension/src/extension.test.ts index a05f7220..4ec6f6f5 100644 --- a/extension/src/extension.test.ts +++ b/extension/src/extension.test.ts @@ -215,7 +215,7 @@ describe("S3 VS Extension", () => { function findInstances(rows: Row[]): Instance[] { const context = createMockContext(); context.mocks.sqlQuery.mockReturnValue({ columns: [], rows }); - return createExtension().findInstances(context, "version") + return createExtension().findInstances(context, CONFIG.version) } it("returns empty list for empty metadata", () => { expect(findInstances([])).toEqual([]) @@ -231,7 +231,7 @@ describe("S3 VS Extension", () => { it("filters by schema and script name", () => { const context = createMockContext(); context.mocks.sqlQuery.mockReturnValue({ columns: [], rows: [] }); - createExtension().findInstances(context, "version") + createExtension().findInstances(context, CONFIG.version) const queryCalls = context.mocks.sqlQuery.mock.calls expect(queryCalls.length).toEqual(1) expect(queryCalls[0]).toEqual(["SELECT SCHEMA_NAME FROM SYS.EXA_ALL_VIRTUAL_SCHEMAS WHERE ADAPTER_SCRIPT_SCHEMA = ? AND ADAPTER_SCRIPT_NAME = ? ORDER BY SCHEMA_NAME", "ext-schema", "S3_FILES_ADAPTER"]) diff --git a/pom.xml b/pom.xml index e22df14d..738d634f 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ Adapter for document data access from files from AWS S3. https://github.com/exasol/s3-document-files-virtual-schema/ - 5.10.0 + 5.10.1 1.19.1 7.3.6 @@ -39,7 +39,7 @@ software.amazon.awssdk bom - 2.21.14 + 2.21.15 pom import @@ -136,7 +136,7 @@ com.amazonaws aws-java-sdk-s3 - 1.12.580 + 1.12.581 test @@ -190,7 +190,7 @@ com.exasol extension-manager-integration-test-java - 0.5.4 + 0.5.5 test From 559b0b3a1e0c5e200101bfdab3f49241033dada2 Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Mon, 6 Nov 2023 11:39:46 +0100 Subject: [PATCH 19/30] Add tests based on base integration tests --- .../files/extension/NewExtensionIT.java | 128 ++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 src/test/java/com/exasol/adapter/document/files/extension/NewExtensionIT.java diff --git a/src/test/java/com/exasol/adapter/document/files/extension/NewExtensionIT.java b/src/test/java/com/exasol/adapter/document/files/extension/NewExtensionIT.java new file mode 100644 index 00000000..21cce99c --- /dev/null +++ b/src/test/java/com/exasol/adapter/document/files/extension/NewExtensionIT.java @@ -0,0 +1,128 @@ +package com.exasol.adapter.document.files.extension; + +import static com.exasol.matcher.ResultSetStructureMatcher.table; +import static org.hamcrest.Matchers.allOf; +import static org.hamcrest.Matchers.containsString; + +import java.io.FileNotFoundException; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Collection; +import java.util.concurrent.TimeoutException; + +import org.junit.jupiter.api.BeforeAll; + +import com.exasol.adapter.RequestDispatcher; +import com.exasol.adapter.document.GenericUdfCallHandler; +import com.exasol.adapter.document.UdfEntryPoint; +import com.exasol.adapter.document.files.IntegrationTestSetup; +import com.exasol.adapter.document.files.s3testsetup.AwsS3TestSetup; +import com.exasol.bucketfs.BucketAccessException; +import com.exasol.dbbuilder.dialects.exasol.AdapterScript.Language; +import com.exasol.dbbuilder.dialects.exasol.ExasolSchema; +import com.exasol.dbbuilder.dialects.exasol.udf.UdfScript; +import com.exasol.dbbuilder.dialects.exasol.udf.UdfScript.InputType; +import com.exasol.exasoltestsetup.ExasolTestSetup; +import com.exasol.exasoltestsetup.ExasolTestSetupFactory; +import com.exasol.extensionmanager.client.model.ParameterValue; +import com.exasol.extensionmanager.itest.ExasolVersionCheck; +import com.exasol.extensionmanager.itest.ExtensionManagerSetup; +import com.exasol.extensionmanager.itest.base.AbstractExtensionIT; +import com.exasol.extensionmanager.itest.base.ExtensionITConfig; +import com.exasol.extensionmanager.itest.builder.ExtensionBuilder; +import com.exasol.mavenprojectversiongetter.MavenProjectVersionGetter; + +class NewExtensionIT extends AbstractExtensionIT { + private static final Path EXTENSION_SOURCE_DIR = Paths.get("extension").toAbsolutePath(); + private static final String PROJECT_VERSION = MavenProjectVersionGetter.getCurrentProjectVersion(); + + private static final String EXTENSION_ID = "s3-vs-extension.js"; + private static ExasolTestSetup exasolTestSetup; + private static ExtensionManagerSetup setup; + private static AwsS3TestSetup s3TestSetup; + private static String s3BucketName; + + @Override + protected ExtensionITConfig createConfig() { + return ExtensionITConfig.builder().projectName("s3-document-files-virtual-schema") // + .extensionId(EXTENSION_ID) // + .currentVersion(PROJECT_VERSION) // + .expectedParameterCount(13) // + .extensionName("S3 Virtual Schema") // + .extensionDescription("Virtual Schema for document files on AWS S3") // + .previousVersion("2.8.2") // + .previousVersionJarFile("document-files-virtual-schema-dist-7.3.6-s3-2.8.2.jar").build(); + } + + @BeforeAll + static void setup() throws FileNotFoundException, BucketAccessException, TimeoutException { + if (System.getProperty("com.exasol.dockerdb.image") == null) { + System.setProperty("com.exasol.dockerdb.image", "8.23.0"); + } + exasolTestSetup = new ExasolTestSetupFactory(IntegrationTestSetup.CLOUD_SETUP_CONFIG).getTestSetup(); + ExasolVersionCheck.assumeExasolVersion8(exasolTestSetup); + setup = ExtensionManagerSetup.create(exasolTestSetup, ExtensionBuilder.createDefaultNpmBuilder( + EXTENSION_SOURCE_DIR, EXTENSION_SOURCE_DIR.resolve("dist").resolve(EXTENSION_ID))); + s3TestSetup = new AwsS3TestSetup(); + s3BucketName = "extension-test.s3.virtual-schema-test-bucket-" + System.currentTimeMillis(); + s3TestSetup.createBucket(s3BucketName); + exasolTestSetup.getDefaultBucket().uploadFile(IntegrationTestSetup.ADAPTER_JAR_LOCAL_PATH, + IntegrationTestSetup.ADAPTER_JAR); + } + + @Override + protected ExtensionManagerSetup getSetup() { + return setup; + } + + @Override + protected void createScripts() { + final String adapterJarBucketFsPath = "/buckets/bfsdefault/default/" + + IntegrationTestSetup.ADAPTER_JAR_LOCAL_PATH.getFileName().toString(); + final ExasolSchema schema = setup.createExtensionSchema(); + schema.createAdapterScriptBuilder("S3_FILES_ADAPTER") + .bucketFsContent("com.exasol.adapter.RequestDispatcher", adapterJarBucketFsPath).language(Language.JAVA) + .build(); + schema.createUdfBuilder("IMPORT_FROM_S3_DOCUMENT_FILES").language(UdfScript.Language.JAVA) + .inputType(InputType.SET) + .parameter(GenericUdfCallHandler.PARAMETER_DOCUMENT_FETCHER, "VARCHAR(2000000)") + .parameter(GenericUdfCallHandler.PARAMETER_SCHEMA_MAPPING_REQUEST, "VARCHAR(2000000)") + .parameter(GenericUdfCallHandler.PARAMETER_CONNECTION_NAME, "VARCHAR(500)").emits() + .bucketFsContent(UdfEntryPoint.class.getName(), adapterJarBucketFsPath).build(); + } + + @Override + protected void assertScriptsExist() { + final String jarDirective = "%jar /buckets/bfsdefault/default/" + IntegrationTestSetup.ADAPTER_JAR + ";"; + final String comment = "Created by Extension Manager for S3 Virtual Schema " + PROJECT_VERSION; + setup.exasolMetadata() + .assertScript(table() + .row("IMPORT_FROM_S3_DOCUMENT_FILES", "UDF", "SET", "EMITS", + allOf(containsString("%scriptclass " + UdfEntryPoint.class.getName() + ";"), // + containsString(jarDirective)), + comment) // + .row("S3_FILES_ADAPTER", "ADAPTER", null, null, + allOf(containsString("%scriptclass " + RequestDispatcher.class.getName() + ";"), // + containsString(jarDirective)), + comment) // + .matches()); + } + + @Override + protected void prepareInstance() { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'prepareInstance'"); + } + + @Override + protected void verifyVirtualTableContainsData(final String virtualSchemaName) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'verifyVirtualTableContainsData'"); + } + + @Override + protected Collection createValidParameterValues() { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'createValidParameterValues'"); + } +} From d142bfa9d1abc8222c775b707d8ead246899bcfc Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Mon, 6 Nov 2023 13:55:36 +0100 Subject: [PATCH 20/30] Migrate integration tests to use new base class --- .../document/files/extension/ExtensionIT.java | 287 +----------------- .../files/extension/NewExtensionIT.java | 87 +++++- 2 files changed, 86 insertions(+), 288 deletions(-) diff --git a/src/test/java/com/exasol/adapter/document/files/extension/ExtensionIT.java b/src/test/java/com/exasol/adapter/document/files/extension/ExtensionIT.java index 91904828..cc4ed2cd 100644 --- a/src/test/java/com/exasol/adapter/document/files/extension/ExtensionIT.java +++ b/src/test/java/com/exasol/adapter/document/files/extension/ExtensionIT.java @@ -2,9 +2,8 @@ import static com.exasol.matcher.ResultSetStructureMatcher.table; import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.*; -import static org.junit.jupiter.api.Assertions.assertAll; -import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; +import static org.hamcrest.Matchers.containsInAnyOrder; +import static org.hamcrest.Matchers.equalTo; import java.io.FileNotFoundException; import java.net.InetSocketAddress; @@ -18,35 +17,31 @@ import org.junit.jupiter.api.*; -import com.exasol.adapter.RequestDispatcher; -import com.exasol.adapter.document.GenericUdfCallHandler; -import com.exasol.adapter.document.UdfEntryPoint; import com.exasol.adapter.document.edml.*; import com.exasol.adapter.document.edml.serializer.EdmlSerializer; import com.exasol.adapter.document.files.IntegrationTestSetup; import com.exasol.adapter.document.files.s3testsetup.AwsS3TestSetup; import com.exasol.adapter.document.files.s3testsetup.S3TestSetup; import com.exasol.bucketfs.BucketAccessException; -import com.exasol.dbbuilder.dialects.exasol.AdapterScript.Language; -import com.exasol.dbbuilder.dialects.exasol.ExasolSchema; -import com.exasol.dbbuilder.dialects.exasol.udf.UdfScript; -import com.exasol.dbbuilder.dialects.exasol.udf.UdfScript.InputType; import com.exasol.exasoltestsetup.ExasolTestSetup; import com.exasol.exasoltestsetup.ExasolTestSetupFactory; -import com.exasol.extensionmanager.client.model.*; +import com.exasol.extensionmanager.client.model.InstallationsResponseInstallation; +import com.exasol.extensionmanager.client.model.ParameterValue; import com.exasol.extensionmanager.itest.*; import com.exasol.extensionmanager.itest.builder.ExtensionBuilder; import com.exasol.mavenprojectversiongetter.MavenProjectVersionGetter; import software.amazon.awssdk.core.sync.RequestBody; +/** + * This test can be deleted once {@link NewExtensionIT#upgradeFromPreviousVersion()} is deleted. + */ class ExtensionIT { private static final String PREVIOUS_VERSION = "2.8.2"; private static final String PREVIOUS_VERSION_JAR_FILE = "document-files-virtual-schema-dist-7.3.6-s3-" + PREVIOUS_VERSION + ".jar"; private static final Path EXTENSION_SOURCE_DIR = Paths.get("extension").toAbsolutePath(); private static final String EXTENSION_ID = "s3-vs-extension.js"; - private static final int EXPECTED_PARAMETER_COUNT = 13; private static final String PROJECT_VERSION = MavenProjectVersionGetter.getCurrentProjectVersion(); private static ExasolTestSetup exasolTestSetup; private static ExtensionManagerSetup setup; @@ -55,6 +50,9 @@ class ExtensionIT { @BeforeAll static void setup() throws FileNotFoundException, BucketAccessException, TimeoutException { + if (System.getProperty("com.exasol.dockerdb.image") == null) { + System.setProperty("com.exasol.dockerdb.image", "8.23.0"); + } exasolTestSetup = new ExasolTestSetupFactory(IntegrationTestSetup.CLOUD_SETUP_CONFIG).getTestSetup(); ExasolVersionCheck.assumeExasolVersion8(exasolTestSetup); setup = ExtensionManagerSetup.create(exasolTestSetup, ExtensionBuilder.createDefaultNpmBuilder( @@ -85,126 +83,6 @@ void cleanup() { setup.cleanup(); } - @Test - void listExtensions() { - final List extensions = setup.client().getExtensions(); - assertAll(() -> assertThat(extensions, hasSize(1)), // - () -> assertThat(extensions.get(0).getName(), equalTo("S3 Virtual Schema")), - () -> assertThat(extensions.get(0).getInstallableVersions().get(0).getName(), equalTo(PROJECT_VERSION)), - () -> assertThat(extensions.get(0).getInstallableVersions().get(0).isLatest(), is(true)), - () -> assertThat(extensions.get(0).getInstallableVersions().get(0).isDeprecated(), is(false)), - () -> assertThat(extensions.get(0).getDescription(), - equalTo("Virtual Schema for document files on AWS S3"))); - } - - @Test - void listInstallationsEmpty() { - final List installations = setup.client().getInstallations(); - assertThat(installations, hasSize(0)); - } - - @Test - void listInstallations_ignoresWrongScriptNames() { - createAdapter("wrong_adapter_name", "wrong_import_script_name"); - final List installations = setup.client().getInstallations(); - assertThat(installations, hasSize(0)); - } - - @Test - void listInstallations_findsMatchingScripts() { - createAdapter("S3_FILES_ADAPTER", "IMPORT_FROM_S3_DOCUMENT_FILES"); - final List installations = setup.client().getInstallations(); - assertAll(() -> assertThat(installations, hasSize(1)), // - () -> assertThat(installations.get(0).getName(), equalTo("S3 Virtual Schema")), - () -> assertThat(installations.get(0).getVersion(), equalTo(PROJECT_VERSION))); - } - - @Test - void listInstallations_findsOwnInstallation() { - setup.client().install(); - final List installations = setup.client().getInstallations(); - assertAll(() -> assertThat(installations, hasSize(1)), // - () -> assertThat(installations.get(0).getName(), equalTo("S3 Virtual Schema")), - () -> assertThat(installations.get(0).getVersion(), equalTo(PROJECT_VERSION))); - } - - @Test - void getExtensionDetailsFailsForUnknownVersion() { - setup.client().assertRequestFails(() -> setup.client().getExtensionDetails("unknownVersion"), - equalTo("Version 'unknownVersion' not supported, can only use '" + PROJECT_VERSION + "'."), - equalTo(404)); - } - - @Test - void getExtensionDetailsSuccess() { - final ExtensionDetailsResponse extensionDetails = setup.client().getExtensionDetails(PROJECT_VERSION); - final List parameters = extensionDetails.getParameterDefinitions(); - final ParamDefinition param1 = new ParamDefinition().id("base-vs.virtual-schema-name") - .name("Virtual Schema name").definition(Map.of( // - "id", "base-vs.virtual-schema-name", // - "name", "Virtual Schema name", // - "description", "Name for the new virtual schema", // - "placeholder", "MY_VIRTUAL_SCHEMA", // - "regex", "[a-zA-Z_]+", // - "required", true, // - "type", "string")); - assertAll(() -> assertThat(extensionDetails.getId(), equalTo("s3-vs-extension.js")), - () -> assertThat(extensionDetails.getVersion(), equalTo(PROJECT_VERSION)), - () -> assertThat(parameters, hasSize(EXPECTED_PARAMETER_COUNT)), - () -> assertThat(parameters.get(0), equalTo(param1))); - } - - @Test - void install_createsScripts() { - setup.client().install(); - assertScriptsExist(); - } - - @Test - void install_worksIfCalledTwice() { - setup.client().install(); - setup.client().install(); - assertScriptsExist(); - } - - @Test - void createInstanceFailsWithoutRequiredParameters() { - final ExtensionManagerClient client = setup.client(); - client.install(); - client.assertRequestFails(() -> client.createInstance(List.of()), startsWith( - "invalid parameters: Failed to validate parameter 'Virtual Schema name' (base-vs.virtual-schema-name): This is a required parameter."), - equalTo(400)); - } - - @Test - void uninstall_succeedsForNonExistingInstallation() { - assertDoesNotThrow(() -> setup.client().uninstall()); - } - - @Test - void uninstall_removesAdapters() { - setup.client().install(); - assertAll(() -> assertScriptsExist(), // - () -> assertThat(setup.client().getInstallations(), hasSize(1))); - setup.client().uninstall(PROJECT_VERSION); - assertAll(() -> assertThat(setup.client().getInstallations(), is(empty())), - () -> setup.exasolMetadata().assertNoScripts()); - } - - @Test - void upgradeFailsWhenNotInstalled() { - setup.client().assertRequestFails(() -> setup.client().upgrade(), - "Not all required scripts are installed: Validation failed: Script 'S3_FILES_ADAPTER' is missing, Script 'IMPORT_FROM_S3_DOCUMENT_FILES' is missing", - 412); - } - - @Test - void upgradeFailsWhenAlreadyUpToDate() { - setup.client().install(); - setup.client().assertRequestFails(() -> setup.client().upgrade(), - "Extension is already installed in latest version " + PROJECT_VERSION, 412); - } - @Test void upgradeFromPreviousVersion() throws InterruptedException, BucketAccessException, TimeoutException, FileNotFoundException, URISyntaxException { @@ -238,17 +116,6 @@ private void assertInstalledVersion(final String expectedVersion, final Previous .version(expectedVersion).id(previousVersion.getExtensionId()))); } - @Test - void virtualSchemaWorks() throws SQLException { - setup.client().install(); - final String virtualTable = createVirtualSchema(); - verifyVirtualTableContainsData(virtualTable); - } - - private String createVirtualSchema() { - return createVirtualSchema(EXTENSION_ID, PROJECT_VERSION); - } - private String createVirtualSchema(final String extensionId, final String extensionVersion) { final String prefix = "vs-works-test-" + System.currentTimeMillis() + "/"; upload(prefix + "test-data-1.json", "{\"id\": 1, \"name\": \"abc\" }"); @@ -268,114 +135,10 @@ private void verifyVirtualTableContainsData(final String virtualTable) { } } - @Test - void listingInstancesNoVSExists() throws SQLException { - assertThat(setup.client().listInstances(), hasSize(0)); - } - private void upload(final String key, final String content) { s3TestSetup.upload(s3BucketName, key, RequestBody.fromString(content)); } - @Test - void listInstances() { - setup.client().install(); - final String name = "my_virtual_SCHEMA"; - createInstance(name); - assertThat(setup.client().listInstances(PROJECT_VERSION), - allOf(hasSize(1), equalTo(List.of(new Instance().id(name).name(name))))); - } - - @Test - void createInstanceCreatesDbObjects() { - setup.client().install(); - final String name = "my_virtual_SCHEMA"; - createInstance(name); - - setup.exasolMetadata() - .assertConnection(table().row("MY_VIRTUAL_SCHEMA_CONNECTION", - "Created by Extension Manager for S3 Virtual Schema v" + PROJECT_VERSION + " my_virtual_SCHEMA") - .matches()); - setup.exasolMetadata() - .assertVirtualSchema(table() - .row("my_virtual_SCHEMA", "SYS", "EXA_EXTENSIONS", "S3_FILES_ADAPTER", not(emptyOrNullString())) - .matches()); - assertThat(setup.client().listInstances(), - allOf(hasSize(1), equalTo(List.of(new Instance().id(name).name(name))))); - } - - @Test - void createTwoInstances() { - setup.client().install(); - createInstance("vs1"); - createInstance("vs2"); - - assertAll( - () -> setup.exasolMetadata() - .assertConnection(table() - .row("VS1_CONNECTION", - "Created by Extension Manager for S3 Virtual Schema v" + PROJECT_VERSION - + " vs1") - .row("VS2_CONNECTION", - "Created by Extension Manager for S3 Virtual Schema v" + PROJECT_VERSION - + " vs2") - .matches()), - () -> setup.exasolMetadata().assertVirtualSchema(table() - .row("vs1", "SYS", "EXA_EXTENSIONS", "S3_FILES_ADAPTER", not(emptyOrNullString())) - .row("vs2", "SYS", "EXA_EXTENSIONS", "S3_FILES_ADAPTER", not(emptyOrNullString())).matches()), - - () -> assertThat(setup.client().listInstances(), allOf(hasSize(2), - equalTo(List.of(new Instance().id("vs1").name("vs1"), new Instance().id("vs2").name("vs2")))))); - } - - @Test - void createInstanceWithSingleQuote() { - setup.client().install(); - createInstance("Quoted'schema"); - assertAll( - () -> setup.exasolMetadata() - .assertConnection(table().row("QUOTED'SCHEMA_CONNECTION", - "Created by Extension Manager for S3 Virtual Schema v" + PROJECT_VERSION - + " Quoted'schema") - .matches()), - () -> setup.exasolMetadata().assertVirtualSchema(table() - .row("Quoted'schema", "SYS", "EXA_EXTENSIONS", "S3_FILES_ADAPTER", not(emptyOrNullString())) - .matches())); - } - - @Test - void deleteNonExistingInstance() { - assertDoesNotThrow(() -> setup.client().deleteInstance("no-such-instance")); - } - - @Test - void deleteFailsForUnknownVersion() { - setup.client().assertRequestFails(() -> setup.client().deleteInstance("unknownVersion", "no-such-instance"), - equalTo("Version 'unknownVersion' not supported, can only use '" + PROJECT_VERSION + "'."), - equalTo(404)); - } - - @Test - void deleteExistingInstance() { - setup.client().install(); - createInstance("vs1"); - final List instances = setup.client().listInstances(); - assertThat(instances, hasSize(1)); - setup.client().deleteInstance(instances.get(0).getId()); - - assertAll(() -> assertThat(setup.client().listInstances(), is(empty())), - () -> setup.exasolMetadata().assertNoConnections(), - () -> setup.exasolMetadata().assertNoVirtualSchema()); - } - - private void createInstance(final String virtualSchemaName) { - createInstance(virtualSchemaName, getMappingDefinition("test-data-*.json")); - } - - private void createInstance(final String virtualSchemaName, final EdmlDefinition mapping) { - createInstance(EXTENSION_ID, PROJECT_VERSION, virtualSchemaName, mapping); - } - private void createInstance(final String extensionId, final String extensionVersion, final String virtualSchemaName, final EdmlDefinition mapping) { setup.addVirtualSchemaToCleanupQueue(virtualSchemaName); @@ -428,34 +191,4 @@ private Optional getInDatabaseS3Address() { private ParameterValue param(final String name, final String value) { return new ParameterValue().name(name).value(value); } - - private void assertScriptsExist() { - final String jarDirective = "%jar /buckets/bfsdefault/default/" + IntegrationTestSetup.ADAPTER_JAR + ";"; - final String comment = "Created by Extension Manager for S3 Virtual Schema " + PROJECT_VERSION; - setup.exasolMetadata() - .assertScript(table() - .row("IMPORT_FROM_S3_DOCUMENT_FILES", "UDF", "SET", "EMITS", - allOf(containsString("%scriptclass " + UdfEntryPoint.class.getName() + ";"), // - containsString(jarDirective)), - comment) // - .row("S3_FILES_ADAPTER", "ADAPTER", null, null, - allOf(containsString("%scriptclass " + RequestDispatcher.class.getName() + ";"), // - containsString(jarDirective)), - comment) // - .matches()); - } - - private void createAdapter(final String adapterScriptName, final String importScriptName) { - final String adapterJarBucketFsPath = "/buckets/bfsdefault/default/" - + IntegrationTestSetup.ADAPTER_JAR_LOCAL_PATH.getFileName().toString(); - final ExasolSchema schema = setup.createExtensionSchema(); - schema.createAdapterScriptBuilder(adapterScriptName) - .bucketFsContent("com.exasol.adapter.RequestDispatcher", adapterJarBucketFsPath).language(Language.JAVA) - .build(); - schema.createUdfBuilder(importScriptName).language(UdfScript.Language.JAVA).inputType(InputType.SET) - .parameter(GenericUdfCallHandler.PARAMETER_DOCUMENT_FETCHER, "VARCHAR(2000000)") - .parameter(GenericUdfCallHandler.PARAMETER_SCHEMA_MAPPING_REQUEST, "VARCHAR(2000000)") - .parameter(GenericUdfCallHandler.PARAMETER_CONNECTION_NAME, "VARCHAR(500)").emits() - .bucketFsContent(UdfEntryPoint.class.getName(), adapterJarBucketFsPath).build(); - } } diff --git a/src/test/java/com/exasol/adapter/document/files/extension/NewExtensionIT.java b/src/test/java/com/exasol/adapter/document/files/extension/NewExtensionIT.java index 21cce99c..4c6fc6bb 100644 --- a/src/test/java/com/exasol/adapter/document/files/extension/NewExtensionIT.java +++ b/src/test/java/com/exasol/adapter/document/files/extension/NewExtensionIT.java @@ -1,20 +1,25 @@ package com.exasol.adapter.document.files.extension; import static com.exasol.matcher.ResultSetStructureMatcher.table; -import static org.hamcrest.Matchers.allOf; -import static org.hamcrest.Matchers.containsString; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.*; import java.io.FileNotFoundException; +import java.net.InetSocketAddress; import java.nio.file.Path; import java.nio.file.Paths; -import java.util.Collection; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.*; import java.util.concurrent.TimeoutException; -import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.*; import com.exasol.adapter.RequestDispatcher; import com.exasol.adapter.document.GenericUdfCallHandler; import com.exasol.adapter.document.UdfEntryPoint; +import com.exasol.adapter.document.edml.*; +import com.exasol.adapter.document.edml.serializer.EdmlSerializer; import com.exasol.adapter.document.files.IntegrationTestSetup; import com.exasol.adapter.document.files.s3testsetup.AwsS3TestSetup; import com.exasol.bucketfs.BucketAccessException; @@ -32,15 +37,24 @@ import com.exasol.extensionmanager.itest.builder.ExtensionBuilder; import com.exasol.mavenprojectversiongetter.MavenProjectVersionGetter; +import software.amazon.awssdk.core.sync.RequestBody; + class NewExtensionIT extends AbstractExtensionIT { private static final Path EXTENSION_SOURCE_DIR = Paths.get("extension").toAbsolutePath(); private static final String PROJECT_VERSION = MavenProjectVersionGetter.getCurrentProjectVersion(); - private static final String EXTENSION_ID = "s3-vs-extension.js"; + private static final String MAPPING_DESTINATION_TABLE = "DESTINATION_TABLE"; + private static ExasolTestSetup exasolTestSetup; private static ExtensionManagerSetup setup; private static AwsS3TestSetup s3TestSetup; private static String s3BucketName; + private String s3ImportPrefix; + + @BeforeEach + void createS3ImportPrefix() { + s3ImportPrefix = "vs-works-test-" + System.currentTimeMillis() + "/"; + } @Override protected ExtensionITConfig createConfig() { @@ -110,19 +124,70 @@ protected void assertScriptsExist() { @Override protected void prepareInstance() { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'prepareInstance'"); + upload(s3ImportPrefix + "test-data-1.json", "{\"id\": 1, \"name\": \"abc\" }"); + upload(s3ImportPrefix + "test-data-2.json", "{\"id\": 2, \"name\": \"xyz\" }"); + + } + + private void upload(final String key, final String content) { + s3TestSetup.upload(s3BucketName, key, RequestBody.fromString(content)); } @Override protected void verifyVirtualTableContainsData(final String virtualSchemaName) { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'verifyVirtualTableContainsData'"); + final String virtualTable = "\"" + virtualSchemaName + "\".\"" + MAPPING_DESTINATION_TABLE + "\""; + try (final ResultSet result = exasolTestSetup.createConnection().createStatement() + .executeQuery("SELECT ID, NAME FROM " + virtualTable + " ORDER BY ID ASC")) { + assertThat(result, table().row(1L, "abc").row(2L, "xyz").matches()); + } catch (final SQLException exception) { + throw new AssertionError("Assertion query failed", exception); + } } @Override protected Collection createValidParameterValues() { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'createValidParameterValues'"); + final List parameters = new ArrayList<>(); + parameters.addAll(List.of( // + param("awsRegion", s3TestSetup.getRegion()), // + param("s3Bucket", s3BucketName), // + param("awsAccessKeyId", s3TestSetup.getUsername()), // + param("awsSecretAccessKey", s3TestSetup.getPassword()))); + parameters.add(param("MAPPING", new EdmlSerializer().serialize(getMappingDefinition()))); + + getInDatabaseS3Address().map(address -> param("awsEndpointOverride", address)) // + .ifPresent(parameters::add); + if (s3TestSetup.getMfaToken().isPresent()) { + parameters.add(param("awsSessionToken", s3TestSetup.getMfaToken().get())); + } + return parameters; + } + + private EdmlDefinition getMappingDefinition() { + return getMappingDefinition(s3ImportPrefix + "test-data-*.json"); + } + + private EdmlDefinition getMappingDefinition(final String source) { + return EdmlDefinition.builder().source(source).destinationTable(MAPPING_DESTINATION_TABLE) // + .mapping(Fields.builder() // + .mapField("id", ToDecimalMapping.builder().build()) // + .mapField("name", ToVarcharMapping.builder().varcharColumnSize(200).build()) // + .mapField("fieldWith'Quote", ToVarcharMapping.builder().varcharColumnSize(200).build()) // + .build()) + .build(); + } + + private Optional getInDatabaseS3Address() { + return s3TestSetup.getEntrypoint() + .map(endpoint -> exasolTestSetup.makeTcpServiceAccessibleFromDatabase(endpoint)) + .map(InetSocketAddress::toString); + } + + @Override + @Test + public void upgradeFromPreviousVersion() { + // This test can be removed once version 2.8.3 was released + setup.client().assertRequestFails(super::upgradeFromPreviousVersion, containsString( + "invalid parameters: Failed to validate parameter 'Name of the new virtual schema' (virtualSchemaName): This is a required parameter."), + equalTo(400)); } } From 1b300e91a46a7e34103db5fbbc19b5e9bf5ed779 Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Mon, 6 Nov 2023 13:56:25 +0100 Subject: [PATCH 21/30] Rename test classes --- .../document/files/extension/ExtensionIT.java | 183 ++++++++--------- .../files/extension/NewExtensionIT.java | 193 ----------------- .../files/extension/OldExtensionIT.java | 194 ++++++++++++++++++ 3 files changed, 285 insertions(+), 285 deletions(-) delete mode 100644 src/test/java/com/exasol/adapter/document/files/extension/NewExtensionIT.java create mode 100644 src/test/java/com/exasol/adapter/document/files/extension/OldExtensionIT.java diff --git a/src/test/java/com/exasol/adapter/document/files/extension/ExtensionIT.java b/src/test/java/com/exasol/adapter/document/files/extension/ExtensionIT.java index cc4ed2cd..32949440 100644 --- a/src/test/java/com/exasol/adapter/document/files/extension/ExtensionIT.java +++ b/src/test/java/com/exasol/adapter/document/files/extension/ExtensionIT.java @@ -2,12 +2,10 @@ import static com.exasol.matcher.ResultSetStructureMatcher.table; import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.containsInAnyOrder; -import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.*; import java.io.FileNotFoundException; import java.net.InetSocketAddress; -import java.net.URISyntaxException; import java.nio.file.Path; import java.nio.file.Paths; import java.sql.ResultSet; @@ -17,36 +15,58 @@ import org.junit.jupiter.api.*; +import com.exasol.adapter.RequestDispatcher; +import com.exasol.adapter.document.GenericUdfCallHandler; +import com.exasol.adapter.document.UdfEntryPoint; import com.exasol.adapter.document.edml.*; import com.exasol.adapter.document.edml.serializer.EdmlSerializer; import com.exasol.adapter.document.files.IntegrationTestSetup; import com.exasol.adapter.document.files.s3testsetup.AwsS3TestSetup; -import com.exasol.adapter.document.files.s3testsetup.S3TestSetup; import com.exasol.bucketfs.BucketAccessException; +import com.exasol.dbbuilder.dialects.exasol.AdapterScript.Language; +import com.exasol.dbbuilder.dialects.exasol.ExasolSchema; +import com.exasol.dbbuilder.dialects.exasol.udf.UdfScript; +import com.exasol.dbbuilder.dialects.exasol.udf.UdfScript.InputType; import com.exasol.exasoltestsetup.ExasolTestSetup; import com.exasol.exasoltestsetup.ExasolTestSetupFactory; -import com.exasol.extensionmanager.client.model.InstallationsResponseInstallation; import com.exasol.extensionmanager.client.model.ParameterValue; -import com.exasol.extensionmanager.itest.*; +import com.exasol.extensionmanager.itest.ExasolVersionCheck; +import com.exasol.extensionmanager.itest.ExtensionManagerSetup; +import com.exasol.extensionmanager.itest.base.AbstractExtensionIT; +import com.exasol.extensionmanager.itest.base.ExtensionITConfig; import com.exasol.extensionmanager.itest.builder.ExtensionBuilder; import com.exasol.mavenprojectversiongetter.MavenProjectVersionGetter; import software.amazon.awssdk.core.sync.RequestBody; -/** - * This test can be deleted once {@link NewExtensionIT#upgradeFromPreviousVersion()} is deleted. - */ -class ExtensionIT { - private static final String PREVIOUS_VERSION = "2.8.2"; - private static final String PREVIOUS_VERSION_JAR_FILE = "document-files-virtual-schema-dist-7.3.6-s3-" - + PREVIOUS_VERSION + ".jar"; +class ExtensionIT extends AbstractExtensionIT { private static final Path EXTENSION_SOURCE_DIR = Paths.get("extension").toAbsolutePath(); - private static final String EXTENSION_ID = "s3-vs-extension.js"; private static final String PROJECT_VERSION = MavenProjectVersionGetter.getCurrentProjectVersion(); + private static final String EXTENSION_ID = "s3-vs-extension.js"; + private static final String MAPPING_DESTINATION_TABLE = "DESTINATION_TABLE"; + private static ExasolTestSetup exasolTestSetup; private static ExtensionManagerSetup setup; - private static S3TestSetup s3TestSetup; + private static AwsS3TestSetup s3TestSetup; private static String s3BucketName; + private String s3ImportPrefix; + + @BeforeEach + void createS3ImportPrefix() { + s3ImportPrefix = "vs-works-test-" + System.currentTimeMillis() + "/"; + } + + @Override + protected ExtensionITConfig createConfig() { + return ExtensionITConfig.builder().projectName("s3-document-files-virtual-schema") // + .extensionId(EXTENSION_ID) // + .currentVersion(PROJECT_VERSION) // + .expectedParameterCount(13) // + .extensionName("S3 Virtual Schema") // + .extensionDescription("Virtual Schema for document files on AWS S3") // + .previousVersion("2.8.2") // + .previousVersionJarFile("document-files-virtual-schema-dist-7.3.6-s3-2.8.2.jar").build(); + } @BeforeAll static void setup() throws FileNotFoundException, BucketAccessException, TimeoutException { @@ -64,69 +84,58 @@ static void setup() throws FileNotFoundException, BucketAccessException, Timeout IntegrationTestSetup.ADAPTER_JAR); } - @AfterAll - static void teardown() throws Exception { - if (s3TestSetup != null) { - s3TestSetup.emptyS3Bucket(s3BucketName); - s3TestSetup.deleteBucket(s3BucketName); - } - if (setup != null) { - setup.close(); - } - // do not delete ADAPTER_JAR as it is required by other integration tests, too - // and upload immediately after delete fails. - exasolTestSetup.close(); + @Override + protected ExtensionManagerSetup getSetup() { + return setup; } - @AfterEach - void cleanup() { - setup.cleanup(); + @Override + protected void createScripts() { + final String adapterJarBucketFsPath = "/buckets/bfsdefault/default/" + + IntegrationTestSetup.ADAPTER_JAR_LOCAL_PATH.getFileName().toString(); + final ExasolSchema schema = setup.createExtensionSchema(); + schema.createAdapterScriptBuilder("S3_FILES_ADAPTER") + .bucketFsContent("com.exasol.adapter.RequestDispatcher", adapterJarBucketFsPath).language(Language.JAVA) + .build(); + schema.createUdfBuilder("IMPORT_FROM_S3_DOCUMENT_FILES").language(UdfScript.Language.JAVA) + .inputType(InputType.SET) + .parameter(GenericUdfCallHandler.PARAMETER_DOCUMENT_FETCHER, "VARCHAR(2000000)") + .parameter(GenericUdfCallHandler.PARAMETER_SCHEMA_MAPPING_REQUEST, "VARCHAR(2000000)") + .parameter(GenericUdfCallHandler.PARAMETER_CONNECTION_NAME, "VARCHAR(500)").emits() + .bucketFsContent(UdfEntryPoint.class.getName(), adapterJarBucketFsPath).build(); } - @Test - void upgradeFromPreviousVersion() throws InterruptedException, BucketAccessException, TimeoutException, - FileNotFoundException, URISyntaxException { - final PreviousExtensionVersion previousVersion = createPreviousVersion(); - previousVersion.prepare(); - previousVersion.install(); - final String virtualTable = createVirtualSchema(previousVersion.getExtensionId(), PREVIOUS_VERSION); - verifyVirtualTableContainsData(virtualTable); - assertInstalledVersion(PREVIOUS_VERSION, previousVersion); - previousVersion.upgrade(); - assertInstalledVersion(PROJECT_VERSION, previousVersion); - verifyVirtualTableContainsData(virtualTable); + @Override + protected void assertScriptsExist() { + final String jarDirective = "%jar /buckets/bfsdefault/default/" + IntegrationTestSetup.ADAPTER_JAR + ";"; + final String comment = "Created by Extension Manager for S3 Virtual Schema " + PROJECT_VERSION; + setup.exasolMetadata() + .assertScript(table() + .row("IMPORT_FROM_S3_DOCUMENT_FILES", "UDF", "SET", "EMITS", + allOf(containsString("%scriptclass " + UdfEntryPoint.class.getName() + ";"), // + containsString(jarDirective)), + comment) // + .row("S3_FILES_ADAPTER", "ADAPTER", null, null, + allOf(containsString("%scriptclass " + RequestDispatcher.class.getName() + ";"), // + containsString(jarDirective)), + comment) // + .matches()); } - private PreviousExtensionVersion createPreviousVersion() { - return setup.previousVersionManager().newVersion().currentVersion(PROJECT_VERSION) // - .previousVersion(PREVIOUS_VERSION) // - .adapterFileName(PREVIOUS_VERSION_JAR_FILE) // - .extensionFileName(EXTENSION_ID) // - .project("s3-document-files-virtual-schema") // - .build(); - } + @Override + protected void prepareInstance() { + upload(s3ImportPrefix + "test-data-1.json", "{\"id\": 1, \"name\": \"abc\" }"); + upload(s3ImportPrefix + "test-data-2.json", "{\"id\": 2, \"name\": \"xyz\" }"); - private void assertInstalledVersion(final String expectedVersion, final PreviousExtensionVersion previousVersion) { - // The extension is installed twice (previous and current version), so each one returns one installation. - assertThat(setup.client().getInstallations(), - containsInAnyOrder( - new InstallationsResponseInstallation().name("S3 Virtual Schema").version(expectedVersion) - .id(EXTENSION_ID), // - new InstallationsResponseInstallation().name("EXA_EXTENSIONS.S3_FILES_ADAPTER") - .version(expectedVersion).id(previousVersion.getExtensionId()))); } - private String createVirtualSchema(final String extensionId, final String extensionVersion) { - final String prefix = "vs-works-test-" + System.currentTimeMillis() + "/"; - upload(prefix + "test-data-1.json", "{\"id\": 1, \"name\": \"abc\" }"); - upload(prefix + "test-data-2.json", "{\"id\": 2, \"name\": \"xyz\" }"); - final String virtualSchemaName = "MY_VS"; - final EdmlDefinition mappingDefinition = getMappingDefinition(prefix + "test-data-*.json"); - createInstance(extensionId, extensionVersion, virtualSchemaName, mappingDefinition); - return virtualSchemaName + "." + mappingDefinition.getDestinationTable(); + private void upload(final String key, final String content) { + s3TestSetup.upload(s3BucketName, key, RequestBody.fromString(content)); } - private void verifyVirtualTableContainsData(final String virtualTable) { + @Override + protected void verifyVirtualTableContainsData(final String virtualSchemaName) { + final String virtualTable = "\"" + virtualSchemaName + "\".\"" + MAPPING_DESTINATION_TABLE + "\""; try (final ResultSet result = exasolTestSetup.createConnection().createStatement() .executeQuery("SELECT ID, NAME FROM " + virtualTable + " ORDER BY ID ASC")) { assertThat(result, table().row(1L, "abc").row(2L, "xyz").matches()); @@ -135,34 +144,15 @@ private void verifyVirtualTableContainsData(final String virtualTable) { } } - private void upload(final String key, final String content) { - s3TestSetup.upload(s3BucketName, key, RequestBody.fromString(content)); - } - - private void createInstance(final String extensionId, final String extensionVersion, final String virtualSchemaName, - final EdmlDefinition mapping) { - setup.addVirtualSchemaToCleanupQueue(virtualSchemaName); - setup.addConnectionToCleanupQueue(virtualSchemaName.toUpperCase() + "_CONNECTION"); - final String instanceName = setup.client().createInstance(extensionId, extensionVersion, - createValidParameters(virtualSchemaName, mapping, extensionVersion)); - assertThat(instanceName, equalTo(virtualSchemaName)); - } - - private List createValidParameters(final String virtualSchemaName, final EdmlDefinition mapping, - final String extensionVersion) { + @Override + protected Collection createValidParameterValues() { final List parameters = new ArrayList<>(); parameters.addAll(List.of( // param("awsRegion", s3TestSetup.getRegion()), // param("s3Bucket", s3BucketName), // param("awsAccessKeyId", s3TestSetup.getUsername()), // param("awsSecretAccessKey", s3TestSetup.getPassword()))); - if (extensionVersion.equals(PREVIOUS_VERSION)) { - parameters.add(param("virtualSchemaName", virtualSchemaName)); - parameters.add(param("mapping", new EdmlSerializer().serialize(mapping))); - } else { - parameters.add(param("base-vs.virtual-schema-name", virtualSchemaName)); - parameters.add(param("MAPPING", new EdmlSerializer().serialize(mapping))); - } + parameters.add(param("MAPPING", new EdmlSerializer().serialize(getMappingDefinition()))); getInDatabaseS3Address().map(address -> param("awsEndpointOverride", address)) // .ifPresent(parameters::add); @@ -172,8 +162,12 @@ private List createValidParameters(final String virtualSchemaNam return parameters; } + private EdmlDefinition getMappingDefinition() { + return getMappingDefinition(s3ImportPrefix + "test-data-*.json"); + } + private EdmlDefinition getMappingDefinition(final String source) { - return EdmlDefinition.builder().source(source).destinationTable("TEST") // + return EdmlDefinition.builder().source(source).destinationTable(MAPPING_DESTINATION_TABLE) // .mapping(Fields.builder() // .mapField("id", ToDecimalMapping.builder().build()) // .mapField("name", ToVarcharMapping.builder().varcharColumnSize(200).build()) // @@ -188,7 +182,12 @@ private Optional getInDatabaseS3Address() { .map(InetSocketAddress::toString); } - private ParameterValue param(final String name, final String value) { - return new ParameterValue().name(name).value(value); + @Override + @Test + public void upgradeFromPreviousVersion() { + // This test can be removed once version 2.8.3 was released + setup.client().assertRequestFails(super::upgradeFromPreviousVersion, containsString( + "invalid parameters: Failed to validate parameter 'Name of the new virtual schema' (virtualSchemaName): This is a required parameter."), + equalTo(400)); } } diff --git a/src/test/java/com/exasol/adapter/document/files/extension/NewExtensionIT.java b/src/test/java/com/exasol/adapter/document/files/extension/NewExtensionIT.java deleted file mode 100644 index 4c6fc6bb..00000000 --- a/src/test/java/com/exasol/adapter/document/files/extension/NewExtensionIT.java +++ /dev/null @@ -1,193 +0,0 @@ -package com.exasol.adapter.document.files.extension; - -import static com.exasol.matcher.ResultSetStructureMatcher.table; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.*; - -import java.io.FileNotFoundException; -import java.net.InetSocketAddress; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.*; -import java.util.concurrent.TimeoutException; - -import org.junit.jupiter.api.*; - -import com.exasol.adapter.RequestDispatcher; -import com.exasol.adapter.document.GenericUdfCallHandler; -import com.exasol.adapter.document.UdfEntryPoint; -import com.exasol.adapter.document.edml.*; -import com.exasol.adapter.document.edml.serializer.EdmlSerializer; -import com.exasol.adapter.document.files.IntegrationTestSetup; -import com.exasol.adapter.document.files.s3testsetup.AwsS3TestSetup; -import com.exasol.bucketfs.BucketAccessException; -import com.exasol.dbbuilder.dialects.exasol.AdapterScript.Language; -import com.exasol.dbbuilder.dialects.exasol.ExasolSchema; -import com.exasol.dbbuilder.dialects.exasol.udf.UdfScript; -import com.exasol.dbbuilder.dialects.exasol.udf.UdfScript.InputType; -import com.exasol.exasoltestsetup.ExasolTestSetup; -import com.exasol.exasoltestsetup.ExasolTestSetupFactory; -import com.exasol.extensionmanager.client.model.ParameterValue; -import com.exasol.extensionmanager.itest.ExasolVersionCheck; -import com.exasol.extensionmanager.itest.ExtensionManagerSetup; -import com.exasol.extensionmanager.itest.base.AbstractExtensionIT; -import com.exasol.extensionmanager.itest.base.ExtensionITConfig; -import com.exasol.extensionmanager.itest.builder.ExtensionBuilder; -import com.exasol.mavenprojectversiongetter.MavenProjectVersionGetter; - -import software.amazon.awssdk.core.sync.RequestBody; - -class NewExtensionIT extends AbstractExtensionIT { - private static final Path EXTENSION_SOURCE_DIR = Paths.get("extension").toAbsolutePath(); - private static final String PROJECT_VERSION = MavenProjectVersionGetter.getCurrentProjectVersion(); - private static final String EXTENSION_ID = "s3-vs-extension.js"; - private static final String MAPPING_DESTINATION_TABLE = "DESTINATION_TABLE"; - - private static ExasolTestSetup exasolTestSetup; - private static ExtensionManagerSetup setup; - private static AwsS3TestSetup s3TestSetup; - private static String s3BucketName; - private String s3ImportPrefix; - - @BeforeEach - void createS3ImportPrefix() { - s3ImportPrefix = "vs-works-test-" + System.currentTimeMillis() + "/"; - } - - @Override - protected ExtensionITConfig createConfig() { - return ExtensionITConfig.builder().projectName("s3-document-files-virtual-schema") // - .extensionId(EXTENSION_ID) // - .currentVersion(PROJECT_VERSION) // - .expectedParameterCount(13) // - .extensionName("S3 Virtual Schema") // - .extensionDescription("Virtual Schema for document files on AWS S3") // - .previousVersion("2.8.2") // - .previousVersionJarFile("document-files-virtual-schema-dist-7.3.6-s3-2.8.2.jar").build(); - } - - @BeforeAll - static void setup() throws FileNotFoundException, BucketAccessException, TimeoutException { - if (System.getProperty("com.exasol.dockerdb.image") == null) { - System.setProperty("com.exasol.dockerdb.image", "8.23.0"); - } - exasolTestSetup = new ExasolTestSetupFactory(IntegrationTestSetup.CLOUD_SETUP_CONFIG).getTestSetup(); - ExasolVersionCheck.assumeExasolVersion8(exasolTestSetup); - setup = ExtensionManagerSetup.create(exasolTestSetup, ExtensionBuilder.createDefaultNpmBuilder( - EXTENSION_SOURCE_DIR, EXTENSION_SOURCE_DIR.resolve("dist").resolve(EXTENSION_ID))); - s3TestSetup = new AwsS3TestSetup(); - s3BucketName = "extension-test.s3.virtual-schema-test-bucket-" + System.currentTimeMillis(); - s3TestSetup.createBucket(s3BucketName); - exasolTestSetup.getDefaultBucket().uploadFile(IntegrationTestSetup.ADAPTER_JAR_LOCAL_PATH, - IntegrationTestSetup.ADAPTER_JAR); - } - - @Override - protected ExtensionManagerSetup getSetup() { - return setup; - } - - @Override - protected void createScripts() { - final String adapterJarBucketFsPath = "/buckets/bfsdefault/default/" - + IntegrationTestSetup.ADAPTER_JAR_LOCAL_PATH.getFileName().toString(); - final ExasolSchema schema = setup.createExtensionSchema(); - schema.createAdapterScriptBuilder("S3_FILES_ADAPTER") - .bucketFsContent("com.exasol.adapter.RequestDispatcher", adapterJarBucketFsPath).language(Language.JAVA) - .build(); - schema.createUdfBuilder("IMPORT_FROM_S3_DOCUMENT_FILES").language(UdfScript.Language.JAVA) - .inputType(InputType.SET) - .parameter(GenericUdfCallHandler.PARAMETER_DOCUMENT_FETCHER, "VARCHAR(2000000)") - .parameter(GenericUdfCallHandler.PARAMETER_SCHEMA_MAPPING_REQUEST, "VARCHAR(2000000)") - .parameter(GenericUdfCallHandler.PARAMETER_CONNECTION_NAME, "VARCHAR(500)").emits() - .bucketFsContent(UdfEntryPoint.class.getName(), adapterJarBucketFsPath).build(); - } - - @Override - protected void assertScriptsExist() { - final String jarDirective = "%jar /buckets/bfsdefault/default/" + IntegrationTestSetup.ADAPTER_JAR + ";"; - final String comment = "Created by Extension Manager for S3 Virtual Schema " + PROJECT_VERSION; - setup.exasolMetadata() - .assertScript(table() - .row("IMPORT_FROM_S3_DOCUMENT_FILES", "UDF", "SET", "EMITS", - allOf(containsString("%scriptclass " + UdfEntryPoint.class.getName() + ";"), // - containsString(jarDirective)), - comment) // - .row("S3_FILES_ADAPTER", "ADAPTER", null, null, - allOf(containsString("%scriptclass " + RequestDispatcher.class.getName() + ";"), // - containsString(jarDirective)), - comment) // - .matches()); - } - - @Override - protected void prepareInstance() { - upload(s3ImportPrefix + "test-data-1.json", "{\"id\": 1, \"name\": \"abc\" }"); - upload(s3ImportPrefix + "test-data-2.json", "{\"id\": 2, \"name\": \"xyz\" }"); - - } - - private void upload(final String key, final String content) { - s3TestSetup.upload(s3BucketName, key, RequestBody.fromString(content)); - } - - @Override - protected void verifyVirtualTableContainsData(final String virtualSchemaName) { - final String virtualTable = "\"" + virtualSchemaName + "\".\"" + MAPPING_DESTINATION_TABLE + "\""; - try (final ResultSet result = exasolTestSetup.createConnection().createStatement() - .executeQuery("SELECT ID, NAME FROM " + virtualTable + " ORDER BY ID ASC")) { - assertThat(result, table().row(1L, "abc").row(2L, "xyz").matches()); - } catch (final SQLException exception) { - throw new AssertionError("Assertion query failed", exception); - } - } - - @Override - protected Collection createValidParameterValues() { - final List parameters = new ArrayList<>(); - parameters.addAll(List.of( // - param("awsRegion", s3TestSetup.getRegion()), // - param("s3Bucket", s3BucketName), // - param("awsAccessKeyId", s3TestSetup.getUsername()), // - param("awsSecretAccessKey", s3TestSetup.getPassword()))); - parameters.add(param("MAPPING", new EdmlSerializer().serialize(getMappingDefinition()))); - - getInDatabaseS3Address().map(address -> param("awsEndpointOverride", address)) // - .ifPresent(parameters::add); - if (s3TestSetup.getMfaToken().isPresent()) { - parameters.add(param("awsSessionToken", s3TestSetup.getMfaToken().get())); - } - return parameters; - } - - private EdmlDefinition getMappingDefinition() { - return getMappingDefinition(s3ImportPrefix + "test-data-*.json"); - } - - private EdmlDefinition getMappingDefinition(final String source) { - return EdmlDefinition.builder().source(source).destinationTable(MAPPING_DESTINATION_TABLE) // - .mapping(Fields.builder() // - .mapField("id", ToDecimalMapping.builder().build()) // - .mapField("name", ToVarcharMapping.builder().varcharColumnSize(200).build()) // - .mapField("fieldWith'Quote", ToVarcharMapping.builder().varcharColumnSize(200).build()) // - .build()) - .build(); - } - - private Optional getInDatabaseS3Address() { - return s3TestSetup.getEntrypoint() - .map(endpoint -> exasolTestSetup.makeTcpServiceAccessibleFromDatabase(endpoint)) - .map(InetSocketAddress::toString); - } - - @Override - @Test - public void upgradeFromPreviousVersion() { - // This test can be removed once version 2.8.3 was released - setup.client().assertRequestFails(super::upgradeFromPreviousVersion, containsString( - "invalid parameters: Failed to validate parameter 'Name of the new virtual schema' (virtualSchemaName): This is a required parameter."), - equalTo(400)); - } -} diff --git a/src/test/java/com/exasol/adapter/document/files/extension/OldExtensionIT.java b/src/test/java/com/exasol/adapter/document/files/extension/OldExtensionIT.java new file mode 100644 index 00000000..0c8687a7 --- /dev/null +++ b/src/test/java/com/exasol/adapter/document/files/extension/OldExtensionIT.java @@ -0,0 +1,194 @@ +package com.exasol.adapter.document.files.extension; + +import static com.exasol.matcher.ResultSetStructureMatcher.table; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.containsInAnyOrder; +import static org.hamcrest.Matchers.equalTo; + +import java.io.FileNotFoundException; +import java.net.InetSocketAddress; +import java.net.URISyntaxException; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.*; +import java.util.concurrent.TimeoutException; + +import org.junit.jupiter.api.*; + +import com.exasol.adapter.document.edml.*; +import com.exasol.adapter.document.edml.serializer.EdmlSerializer; +import com.exasol.adapter.document.files.IntegrationTestSetup; +import com.exasol.adapter.document.files.s3testsetup.AwsS3TestSetup; +import com.exasol.adapter.document.files.s3testsetup.S3TestSetup; +import com.exasol.bucketfs.BucketAccessException; +import com.exasol.exasoltestsetup.ExasolTestSetup; +import com.exasol.exasoltestsetup.ExasolTestSetupFactory; +import com.exasol.extensionmanager.client.model.InstallationsResponseInstallation; +import com.exasol.extensionmanager.client.model.ParameterValue; +import com.exasol.extensionmanager.itest.*; +import com.exasol.extensionmanager.itest.builder.ExtensionBuilder; +import com.exasol.mavenprojectversiongetter.MavenProjectVersionGetter; + +import software.amazon.awssdk.core.sync.RequestBody; + +/** + * This test can be deleted once {@link ExtensionIT#upgradeFromPreviousVersion()} is deleted. + */ +class OldExtensionIT { + private static final String PREVIOUS_VERSION = "2.8.2"; + private static final String PREVIOUS_VERSION_JAR_FILE = "document-files-virtual-schema-dist-7.3.6-s3-" + + PREVIOUS_VERSION + ".jar"; + private static final Path EXTENSION_SOURCE_DIR = Paths.get("extension").toAbsolutePath(); + private static final String EXTENSION_ID = "s3-vs-extension.js"; + private static final String PROJECT_VERSION = MavenProjectVersionGetter.getCurrentProjectVersion(); + private static ExasolTestSetup exasolTestSetup; + private static ExtensionManagerSetup setup; + private static S3TestSetup s3TestSetup; + private static String s3BucketName; + + @BeforeAll + static void setup() throws FileNotFoundException, BucketAccessException, TimeoutException { + if (System.getProperty("com.exasol.dockerdb.image") == null) { + System.setProperty("com.exasol.dockerdb.image", "8.23.0"); + } + exasolTestSetup = new ExasolTestSetupFactory(IntegrationTestSetup.CLOUD_SETUP_CONFIG).getTestSetup(); + ExasolVersionCheck.assumeExasolVersion8(exasolTestSetup); + setup = ExtensionManagerSetup.create(exasolTestSetup, ExtensionBuilder.createDefaultNpmBuilder( + EXTENSION_SOURCE_DIR, EXTENSION_SOURCE_DIR.resolve("dist").resolve(EXTENSION_ID))); + s3TestSetup = new AwsS3TestSetup(); + s3BucketName = "extension-test.s3.virtual-schema-test-bucket-" + System.currentTimeMillis(); + s3TestSetup.createBucket(s3BucketName); + exasolTestSetup.getDefaultBucket().uploadFile(IntegrationTestSetup.ADAPTER_JAR_LOCAL_PATH, + IntegrationTestSetup.ADAPTER_JAR); + } + + @AfterAll + static void teardown() throws Exception { + if (s3TestSetup != null) { + s3TestSetup.emptyS3Bucket(s3BucketName); + s3TestSetup.deleteBucket(s3BucketName); + } + if (setup != null) { + setup.close(); + } + // do not delete ADAPTER_JAR as it is required by other integration tests, too + // and upload immediately after delete fails. + exasolTestSetup.close(); + } + + @AfterEach + void cleanup() { + setup.cleanup(); + } + + @Test + void upgradeFromPreviousVersion() throws InterruptedException, BucketAccessException, TimeoutException, + FileNotFoundException, URISyntaxException { + final PreviousExtensionVersion previousVersion = createPreviousVersion(); + previousVersion.prepare(); + previousVersion.install(); + final String virtualTable = createVirtualSchema(previousVersion.getExtensionId(), PREVIOUS_VERSION); + verifyVirtualTableContainsData(virtualTable); + assertInstalledVersion(PREVIOUS_VERSION, previousVersion); + previousVersion.upgrade(); + assertInstalledVersion(PROJECT_VERSION, previousVersion); + verifyVirtualTableContainsData(virtualTable); + } + + private PreviousExtensionVersion createPreviousVersion() { + return setup.previousVersionManager().newVersion().currentVersion(PROJECT_VERSION) // + .previousVersion(PREVIOUS_VERSION) // + .adapterFileName(PREVIOUS_VERSION_JAR_FILE) // + .extensionFileName(EXTENSION_ID) // + .project("s3-document-files-virtual-schema") // + .build(); + } + + private void assertInstalledVersion(final String expectedVersion, final PreviousExtensionVersion previousVersion) { + // The extension is installed twice (previous and current version), so each one returns one installation. + assertThat(setup.client().getInstallations(), + containsInAnyOrder( + new InstallationsResponseInstallation().name("S3 Virtual Schema").version(expectedVersion) + .id(EXTENSION_ID), // + new InstallationsResponseInstallation().name("EXA_EXTENSIONS.S3_FILES_ADAPTER") + .version(expectedVersion).id(previousVersion.getExtensionId()))); + } + + private String createVirtualSchema(final String extensionId, final String extensionVersion) { + final String prefix = "vs-works-test-" + System.currentTimeMillis() + "/"; + upload(prefix + "test-data-1.json", "{\"id\": 1, \"name\": \"abc\" }"); + upload(prefix + "test-data-2.json", "{\"id\": 2, \"name\": \"xyz\" }"); + final String virtualSchemaName = "MY_VS"; + final EdmlDefinition mappingDefinition = getMappingDefinition(prefix + "test-data-*.json"); + createInstance(extensionId, extensionVersion, virtualSchemaName, mappingDefinition); + return virtualSchemaName + "." + mappingDefinition.getDestinationTable(); + } + + private void verifyVirtualTableContainsData(final String virtualTable) { + try (final ResultSet result = exasolTestSetup.createConnection().createStatement() + .executeQuery("SELECT ID, NAME FROM " + virtualTable + " ORDER BY ID ASC")) { + assertThat(result, table().row(1L, "abc").row(2L, "xyz").matches()); + } catch (final SQLException exception) { + throw new AssertionError("Assertion query failed", exception); + } + } + + private void upload(final String key, final String content) { + s3TestSetup.upload(s3BucketName, key, RequestBody.fromString(content)); + } + + private void createInstance(final String extensionId, final String extensionVersion, final String virtualSchemaName, + final EdmlDefinition mapping) { + setup.addVirtualSchemaToCleanupQueue(virtualSchemaName); + setup.addConnectionToCleanupQueue(virtualSchemaName.toUpperCase() + "_CONNECTION"); + final String instanceName = setup.client().createInstance(extensionId, extensionVersion, + createValidParameters(virtualSchemaName, mapping, extensionVersion)); + assertThat(instanceName, equalTo(virtualSchemaName)); + } + + private List createValidParameters(final String virtualSchemaName, final EdmlDefinition mapping, + final String extensionVersion) { + final List parameters = new ArrayList<>(); + parameters.addAll(List.of( // + param("awsRegion", s3TestSetup.getRegion()), // + param("s3Bucket", s3BucketName), // + param("awsAccessKeyId", s3TestSetup.getUsername()), // + param("awsSecretAccessKey", s3TestSetup.getPassword()))); + if (extensionVersion.equals(PREVIOUS_VERSION)) { + parameters.add(param("virtualSchemaName", virtualSchemaName)); + parameters.add(param("mapping", new EdmlSerializer().serialize(mapping))); + } else { + parameters.add(param("base-vs.virtual-schema-name", virtualSchemaName)); + parameters.add(param("MAPPING", new EdmlSerializer().serialize(mapping))); + } + + getInDatabaseS3Address().map(address -> param("awsEndpointOverride", address)) // + .ifPresent(parameters::add); + if (s3TestSetup.getMfaToken().isPresent()) { + parameters.add(param("awsSessionToken", s3TestSetup.getMfaToken().get())); + } + return parameters; + } + + private EdmlDefinition getMappingDefinition(final String source) { + return EdmlDefinition.builder().source(source).destinationTable("TEST") // + .mapping(Fields.builder() // + .mapField("id", ToDecimalMapping.builder().build()) // + .mapField("name", ToVarcharMapping.builder().varcharColumnSize(200).build()) // + .mapField("fieldWith'Quote", ToVarcharMapping.builder().varcharColumnSize(200).build()) // + .build()) + .build(); + } + + private Optional getInDatabaseS3Address() { + return s3TestSetup.getEntrypoint() + .map(endpoint -> exasolTestSetup.makeTcpServiceAccessibleFromDatabase(endpoint)) + .map(InetSocketAddress::toString); + } + + private ParameterValue param(final String name, final String value) { + return new ParameterValue().name(name).value(value); + } +} From e12afad85c43fbb3c3e7158bb16c3763447f10bc Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Mon, 6 Nov 2023 15:02:24 +0100 Subject: [PATCH 22/30] Adapt to new interface --- .../exasol/adapter/document/files/extension/ExtensionIT.java | 2 +- .../adapter/document/files/extension/OldExtensionIT.java | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/test/java/com/exasol/adapter/document/files/extension/ExtensionIT.java b/src/test/java/com/exasol/adapter/document/files/extension/ExtensionIT.java index 32949440..3062fc07 100644 --- a/src/test/java/com/exasol/adapter/document/files/extension/ExtensionIT.java +++ b/src/test/java/com/exasol/adapter/document/files/extension/ExtensionIT.java @@ -134,7 +134,7 @@ private void upload(final String key, final String content) { } @Override - protected void verifyVirtualTableContainsData(final String virtualSchemaName) { + protected void assertVirtualSchemaContent(final String virtualSchemaName) { final String virtualTable = "\"" + virtualSchemaName + "\".\"" + MAPPING_DESTINATION_TABLE + "\""; try (final ResultSet result = exasolTestSetup.createConnection().createStatement() .executeQuery("SELECT ID, NAME FROM " + virtualTable + " ORDER BY ID ASC")) { diff --git a/src/test/java/com/exasol/adapter/document/files/extension/OldExtensionIT.java b/src/test/java/com/exasol/adapter/document/files/extension/OldExtensionIT.java index 0c8687a7..46c88d5f 100644 --- a/src/test/java/com/exasol/adapter/document/files/extension/OldExtensionIT.java +++ b/src/test/java/com/exasol/adapter/document/files/extension/OldExtensionIT.java @@ -34,7 +34,8 @@ import software.amazon.awssdk.core.sync.RequestBody; /** - * This test can be deleted once {@link ExtensionIT#upgradeFromPreviousVersion()} is deleted. + * This test class can be deleted once version 2.8.3 was released and {@link ExtensionIT#upgradeFromPreviousVersion()} + * is deleted. */ class OldExtensionIT { private static final String PREVIOUS_VERSION = "2.8.2"; From 08bf7c01f1093581e01d3a532111a24ec8e47975 Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Tue, 7 Nov 2023 09:11:18 +0100 Subject: [PATCH 23/30] Use renamed base class --- .../exasol/adapter/document/files/extension/ExtensionIT.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/com/exasol/adapter/document/files/extension/ExtensionIT.java b/src/test/java/com/exasol/adapter/document/files/extension/ExtensionIT.java index 3062fc07..efa4118c 100644 --- a/src/test/java/com/exasol/adapter/document/files/extension/ExtensionIT.java +++ b/src/test/java/com/exasol/adapter/document/files/extension/ExtensionIT.java @@ -32,14 +32,14 @@ import com.exasol.extensionmanager.client.model.ParameterValue; import com.exasol.extensionmanager.itest.ExasolVersionCheck; import com.exasol.extensionmanager.itest.ExtensionManagerSetup; -import com.exasol.extensionmanager.itest.base.AbstractExtensionIT; +import com.exasol.extensionmanager.itest.base.AbstractVirtualSchemaExtensionIT; import com.exasol.extensionmanager.itest.base.ExtensionITConfig; import com.exasol.extensionmanager.itest.builder.ExtensionBuilder; import com.exasol.mavenprojectversiongetter.MavenProjectVersionGetter; import software.amazon.awssdk.core.sync.RequestBody; -class ExtensionIT extends AbstractExtensionIT { +class ExtensionIT extends AbstractVirtualSchemaExtensionIT { private static final Path EXTENSION_SOURCE_DIR = Paths.get("extension").toAbsolutePath(); private static final String PROJECT_VERSION = MavenProjectVersionGetter.getCurrentProjectVersion(); private static final String EXTENSION_ID = "s3-vs-extension.js"; From a13bcbda10b59d40aeec485c500169071d40dd6c Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Tue, 7 Nov 2023 10:06:08 +0100 Subject: [PATCH 24/30] Update release date --- doc/changes/changes_2.8.3.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/changes/changes_2.8.3.md b/doc/changes/changes_2.8.3.md index 4128b17b..45f3e410 100644 --- a/doc/changes/changes_2.8.3.md +++ b/doc/changes/changes_2.8.3.md @@ -1,4 +1,4 @@ -# S3 Document Files Virtual Schema 2.8.3, released 2023-11-02 +# S3 Document Files Virtual Schema 2.8.3, released 2023-11-07 Code name: Refactoring of Extension From 85d5f4a111f1472d6819bc4efafb4a510c9dc60d Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Tue, 7 Nov 2023 10:42:39 +0100 Subject: [PATCH 25/30] Fix reference check --- .../adapter/document/files/extension/ExtensionIT.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/test/java/com/exasol/adapter/document/files/extension/ExtensionIT.java b/src/test/java/com/exasol/adapter/document/files/extension/ExtensionIT.java index efa4118c..9ad7f64a 100644 --- a/src/test/java/com/exasol/adapter/document/files/extension/ExtensionIT.java +++ b/src/test/java/com/exasol/adapter/document/files/extension/ExtensionIT.java @@ -58,14 +58,16 @@ void createS3ImportPrefix() { @Override protected ExtensionITConfig createConfig() { + final String previousVersion = "2.8.2"; return ExtensionITConfig.builder().projectName("s3-document-files-virtual-schema") // .extensionId(EXTENSION_ID) // .currentVersion(PROJECT_VERSION) // .expectedParameterCount(13) // .extensionName("S3 Virtual Schema") // .extensionDescription("Virtual Schema for document files on AWS S3") // - .previousVersion("2.8.2") // - .previousVersionJarFile("document-files-virtual-schema-dist-7.3.6-s3-2.8.2.jar").build(); + .previousVersion(previousVersion) // + .previousVersionJarFile("document-files-virtual-schema-dist-7.3.6-s3-" + previousVersion + ".jar") + .build(); } @BeforeAll From c2ad099ce6c66b25045a53cce2a43955b79a2aff Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Tue, 7 Nov 2023 10:43:17 +0100 Subject: [PATCH 26/30] Upgrade dependencies --- doc/changes/changes_2.8.3.md | 5 +++-- pom.xml | 6 +++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/doc/changes/changes_2.8.3.md b/doc/changes/changes_2.8.3.md index 45f3e410..e04cb7c7 100644 --- a/doc/changes/changes_2.8.3.md +++ b/doc/changes/changes_2.8.3.md @@ -20,11 +20,11 @@ This release moves common extension code to `extension-manager-interface` to sim #### Compile Dependency Updates -* Updated `software.amazon.awssdk:s3:2.21.6` to `2.21.15` +* Updated `software.amazon.awssdk:s3:2.21.6` to `2.21.16` #### Test Dependency Updates -* Updated `com.amazonaws:aws-java-sdk-s3:1.12.572` to `1.12.581` +* Updated `com.amazonaws:aws-java-sdk-s3:1.12.572` to `1.12.582` * Updated `com.exasol:extension-manager-integration-test-java:0.5.3` to `0.5.5` * Updated `com.exasol:hamcrest-resultset-matcher:1.6.1` to `1.6.2` * Updated `nl.jqno.equalsverifier:equalsverifier:3.15.2` to `3.15.3` @@ -35,6 +35,7 @@ This release moves common extension code to `extension-manager-interface` to sim #### Plugin Dependency Updates * Updated `com.exasol:project-keeper-maven-plugin:2.9.14` to `2.9.15` +* Updated `org.apache.maven.plugins:maven-clean-plugin:3.3.1` to `3.3.2` ### Extension diff --git a/pom.xml b/pom.xml index 738d634f..ea6dcbcc 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ software.amazon.awssdk bom - 2.21.15 + 2.21.16 pom import @@ -136,7 +136,7 @@ com.amazonaws aws-java-sdk-s3 - 1.12.581 + 1.12.582 test @@ -257,7 +257,7 @@ maven-clean-plugin - 3.3.1 + 3.3.2 From 4ece151499051b6fe9c8d9c10ee0e47d412aaed4 Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Tue, 7 Nov 2023 13:12:15 +0100 Subject: [PATCH 27/30] Update classes list --- src/main/resources/classes.lst | 142 ++++++++++++++++++++------------- 1 file changed, 88 insertions(+), 54 deletions(-) diff --git a/src/main/resources/classes.lst b/src/main/resources/classes.lst index 1ac5ba73..9940dd21 100644 --- a/src/main/resources/classes.lst +++ b/src/main/resources/classes.lst @@ -52,6 +52,7 @@ java/util/RegularEnumSet io/netty/handler/codec/http/DefaultHttpContent software/amazon/awssdk/auth/signer/S3SignerExecutionAttribute jdk/internal/util/Preconditions$1 +software/amazon/awssdk/http/auth/aws/internal/signer/V4RequestSigningResult sun/security/provider/NativePRNG$NonBlocking io/netty/util/internal/shaded/org/jctools/queues/atomic/MpscUnboundedAtomicArrayQueue software/amazon/awssdk/regions/servicemetadata/RamServiceMetadata @@ -61,8 +62,8 @@ java/lang/NullPointerException com/ctc/wstx/util/SymbolTable software/amazon/awssdk/core/util/SdkAutoConstructMap java/time/LocalTime -sun/security/provider/NativePRNG$Variant software/amazon/awssdk/regions/servicemetadata/ServicediscoveryServiceMetadata +sun/security/provider/NativePRNG$Variant software/amazon/awssdk/endpoints/Endpoint$Builder io/netty/handler/codec/CodecOutputList java/util/Collections$SynchronizedCollection @@ -172,6 +173,7 @@ software/amazon/awssdk/thirdparty/jackson/core/json/async/NonBlockingByteBufferJ org/antlr/v4/runtime/misc/Interval sun/text/normalizer/NormalizerBase$Mode software/amazon/awssdk/thirdparty/jackson/core/sym/CharsToNameCanonicalizer$Bucket +software/amazon/awssdk/services/s3/auth/scheme/internal/DefaultS3AuthSchemeParams$Builder com/exasol/adapter/metadata/TableMetadata java/net/SocketOption sun/net/sdp/SdpProvider @@ -187,6 +189,7 @@ sun/security/ssl/SSLCipher$T12CC20P1305ReadCipherGenerator sun/security/ssl/PskKeyExchangeModesExtension$PskKeyExchangeModesStringizer com/exasol/adapter/sql/SqlFunctionAggregateGroupConcat com/exasol/adapter/capabilities/Capabilities +software/amazon/awssdk/http/auth/aws/internal/signer/DefaultAwsV4HttpSigner java/util/Objects java/io/ObjectInputStream$GetFieldImpl software/amazon/awssdk/core/interceptor/SdkExecutionAttribute @@ -209,7 +212,6 @@ sun/security/provider/NativePRNG$Blocking software/amazon/awssdk/regions/servicemetadata/MeteringMarketplaceServiceMetadata jdk/net/ExtendedSocketOptions$1 software/amazon/awssdk/services/s3/model/DeleteBucketTaggingRequest -software/amazon/awssdk/core/CredentialType java/io/ObjectInputStream$HandleTable$HandleList java/util/HashMap$ValueSpliterator software/amazon/awssdk/services/s3/model/GetBucketLoggingRequest @@ -238,7 +240,6 @@ com/exasol/sql/dql/select/FromClause java/nio/DirectByteBuffer java/util/logging/LogManager$LogNode java/util/AbstractSequentialList -software/amazon/awssdk/awscore/internal/authcontext/AuthorizationStrategyFactory software/amazon/awssdk/core/retry/RetryMode$Resolver java/util/stream/IntPipeline$1 io/netty/util/internal/shaded/org/jctools/queues/MpscArrayQueueL1Pad @@ -264,7 +265,9 @@ java/util/concurrent/ConcurrentHashMap$EntryIterator scala/collection/LinearSeqOps sun/security/x509/PKIXExtensions java/io/FilePermission$1 +software/amazon/awssdk/http/auth/aws/internal/signer/util/SigningAlgorithm$MacThreadLocal sun/security/util/MemoryCache$SoftCacheEntry +software/amazon/awssdk/services/s3/auth/scheme/S3AuthSchemeParams$Builder software/amazon/awssdk/regions/servicemetadata/WellarchitectedServiceMetadata software/amazon/awssdk/thirdparty/jackson/core/json/WriterBasedJsonGenerator software/amazon/awssdk/thirdparty/jackson/core/JsonParseException @@ -299,8 +302,8 @@ sun/security/ssl/SupportedGroupsExtension$EESupportedGroupsProducer software/amazon/awssdk/regions/servicemetadata/ApiDetectiveServiceMetadata sun/text/normalizer/UCharacterProperty$IntProperty software/amazon/awssdk/protocols/core/ValueToStringConverter -software/amazon/awssdk/auth/signer/Aws4UnsignedPayloadSigner software/amazon/awssdk/core/internal/http/pipeline/stages/AsyncBeforeTransmissionExecutionInterceptorsStage +software/amazon/awssdk/http/auth/aws/scheme/AwsV4aAuthScheme sun/security/ssl/ServerNameExtension$CHServerNamesStringizer org/apache/http/impl/cookie/RFC2965Spec java/security/SecureClassLoader$DebugHolder @@ -339,7 +342,6 @@ sun/security/ssl/NewSessionTicket sun/security/ssl/SSLKeyDerivationGenerator io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe java/lang/invoke/BoundMethodHandle$Species_LLLLLLL -software/amazon/awssdk/auth/signer/internal/BaseAws4Signer sun/security/ssl/NamedGroup$XDHScheme org/antlr/v4/runtime/atn/SemanticContext$Predicate sun/invoke/util/Wrapper @@ -357,15 +359,14 @@ io/netty/util/internal/PlatformDependent$Mpsc software/amazon/awssdk/thirdparty/jackson/core/io/JsonStringEncoder sun/security/x509/X509CertImpl scala/collection/LinearSeq +software/amazon/awssdk/http/auth/spi/signer/BaseSignRequest$Builder jakarta/json/stream/JsonParser software/amazon/awssdk/regions/servicemetadata/Appstream2ServiceMetadata -software/amazon/awssdk/auth/signer/AwsS3V4Signer java/lang/StringBuilder java/lang/StackStreamFactory$StackFrameTraverser com/exasol/sql/expression/literal/Literal sun/security/ssl/SSLSessionImpl java/nio/channels/SelectionKey -software/amazon/awssdk/auth/signer/internal/Aws4SignerUtils jdk/internal/org/objectweb/asm/FieldWriter software/amazon/awssdk/regions/servicemetadata/CodepipelineServiceMetadata sun/security/rsa/RSAUtil$KeyType @@ -492,14 +493,14 @@ java/security/GeneralSecurityException jdk/internal/reflect/ConstructorAccessor io/netty/util/concurrent/MultithreadEventExecutorGroup sun/reflect/generics/reflectiveObjects/TypeVariableImpl -sun/security/jca/ProviderList$1 software/amazon/awssdk/regions/servicemetadata/AirflowServiceMetadata +sun/security/jca/ProviderList$1 sun/util/resources/Bundles$BundleReference java/util/zip/ZipConstants sun/reflect/annotation/ExceptionProxy sun/security/x509/AuthorityKeyIdentifierExtension -sun/security/jca/ProviderList$3 software/amazon/awssdk/core/retry/conditions/AndRetryCondition +sun/security/jca/ProviderList$3 jakarta/json/JsonString sun/security/jca/ProviderList$2 io/netty/handler/ssl/JdkSslServerContext @@ -627,13 +628,12 @@ java/net/NetworkInterface$2 java/util/zip/ZipFile$InflaterCleanupAction software/amazon/awssdk/regions/servicemetadata/SecuritylakeServiceMetadata software/amazon/awssdk/core/internal/http/pipeline/stages/AsyncRetryableStage$RetryingExecutor -software/amazon/awssdk/auth/signer/internal/Aws4SignerRequestParams java/util/Spliterator$OfDouble sun/security/util/ECUtil java/util/Hashtable$Entry sun/security/action/GetBooleanAction -java/util/concurrent/locks/ReentrantReadWriteLock$NonfairSync java/util/concurrent/CompletionException +java/util/concurrent/locks/ReentrantReadWriteLock$NonfairSync org/antlr/v4/runtime/Parser java/security/interfaces/XECPublicKey sun/security/ssl/SSLContextImpl$CustomizedTLSContext @@ -732,7 +732,6 @@ org/antlr/v4/runtime/atn/PredictionContextCache java/lang/Cloneable java/util/concurrent/atomic/AtomicIntegerFieldUpdater$AtomicIntegerFieldUpdaterImpl software/amazon/awssdk/services/s3/endpoints/internal/Eval -software/amazon/awssdk/core/io/SdkInputStream java/lang/Module org/glassfish/json/JsonWriterImpl$NoFlushOutputStream org/logicng/solvers/maxsat/algorithms/MaxSATConfig$Verbosity @@ -779,7 +778,6 @@ org/antlr/v4/runtime/IntStream java/util/logging/LogManager$SystemLoggerContext com/exasol/ExaIterator java/util/function/Function -software/amazon/awssdk/core/io/SdkDigestInputStream software/amazon/awssdk/services/s3/model/GetBucketVersioningRequest io/netty/util/internal/shaded/org/jctools/queues/BaseMpscLinkedArrayQueueProducerFields sun/security/ec/ECDSASignature$SHA1 @@ -832,7 +830,6 @@ sun/security/ssl/ClientHello$ClientHelloProducer javax/crypto/Cipher io/netty/util/concurrent/ThreadPerTaskExecutor com/ctc/wstx/sr/ValidatingStreamReader -java/security/DigestInputStream java/security/Permissions$1 software/amazon/awssdk/services/s3/model/UploadPartCopyRequest com/ctc/wstx/api/ReaderConfig @@ -869,7 +866,6 @@ org/antlr/v4/runtime/atn/PredictionMode java/util/ListIterator org/apache/http/io/HttpMessageParserFactory java/util/function/BiPredicate -software/amazon/awssdk/awscore/internal/authcontext/AuthorizationStrategy com/exasol/adapter/document/files/FilesSelectionExtractor jdk/net/ExtendedSocketOptions$ExtSocketOption io/netty/buffer/EmptyByteBuf @@ -893,7 +889,6 @@ org/antlr/v4/runtime/TokenSource io/netty/util/internal/PlatformDependent$ThreadLocalRandomProvider org/antlr/v4/runtime/Vocabulary scala/Some -software/amazon/awssdk/auth/signer/params/AwsS3V4SignerParams$Builder java/nio/charset/CodingErrorAction java/security/MessageDigestSpi software/amazon/awssdk/protocols/xml/internal/unmarshall/XmlProtocolUnmarshaller @@ -913,7 +908,6 @@ software/amazon/awssdk/regions/servicemetadata/IngestTimestreamServiceMetadata java/util/TimSort software/amazon/awssdk/regions/servicemetadata/OsisServiceMetadata org/codehaus/stax2/ri/evt/BaseEventImpl -software/amazon/awssdk/core/internal/io/AwsChunkedEncodingInputStream software/amazon/awssdk/utils/DateUtils software/amazon/awssdk/regions/servicemetadata/CognitoIdentityServiceMetadata sun/security/util/NamedCurve @@ -1089,6 +1083,7 @@ sun/security/ssl/ECDHKeyExchange org/codehaus/stax2/validation/XMLValidator sun/security/ssl/CertificateRequest$T12CertificateRequestProducer java/net/NetPermission +software/amazon/awssdk/http/auth/spi/scheme/AuthSchemeOption$SignerPropertyConsumer sun/security/ssl/PredefinedDHParameterSpecs$1 io/netty/handler/codec/DefaultHeaders$ValueValidator jdk/internal/math/FloatingDecimal$ASCIIToBinaryConverter @@ -1323,7 +1318,6 @@ sun/security/provider/DSA javax/net/ssl/TrustManagerFactory software/amazon/awssdk/core/internal/http/pipeline/stages/ApiCallTimeoutTrackingStage sun/security/ssl/ServerHelloDone$ServerHelloDoneMessage -software/amazon/awssdk/core/signer/Presigner software/amazon/awssdk/regions/servicemetadata/SupportappServiceMetadata sun/net/idn/StringPrep software/amazon/awssdk/regions/servicemetadata/ApiSagemakerServiceMetadata @@ -1381,9 +1375,7 @@ com/sun/crypto/provider/TlsPrfGenerator$V12 java/util/ArrayList java/util/LinkedList$Node com/exasol/adapter/document/documentnode/DocumentNodeVisitor -software/amazon/awssdk/auth/signer/internal/chunkedencoding/AwsSignedChunkedEncodingInputStream sun/security/util/AnchorCertificates$1 -software/amazon/awssdk/awscore/internal/authcontext/AwsCredentialsAuthorizationStrategy$Builder io/netty/util/Recycler$2 io/netty/util/Recycler$1 org/logicng/formulas/FormulaTransformation @@ -1526,6 +1518,7 @@ sun/security/ssl/KeyShareExtension$CHKeyShareProducer software/amazon/awssdk/regions/servicemetadata/RolesanywhereServiceMetadata java/util/logging/LogRecord software/amazon/awssdk/core/interceptor/Context$ModifyResponse +software/amazon/awssdk/http/auth/aws/internal/signer/util/DigestAlgorithm$DigestThreadLocal sun/security/rsa/PSSParameters org/logicng/pseudobooleans/PBConfig software/amazon/awssdk/utils/SdkAutoCloseable @@ -1547,6 +1540,7 @@ java/net/JarURLConnection software/amazon/awssdk/regions/servicemetadata/LogsServiceMetadata org/apache/http/conn/ConnectionPoolTimeoutException io/netty/handler/codec/http/HttpStatusClass$1 +software/amazon/awssdk/identity/spi/internal/DefaultAwsCredentialsIdentity$Builder java/util/JumboEnumSet org/apache/http/HttpClientConnection org/apache/http/params/CoreProtocolPNames @@ -1560,7 +1554,6 @@ io/netty/buffer/ByteBufConvertible sun/security/smartcardio/SunPCSC$1 java/io/IOException java/lang/invoke/BoundMethodHandle$Specializer$Factory -software/amazon/awssdk/auth/signer/internal/SignerKey software/amazon/awssdk/core/retry/conditions/OrRetryCondition sun/security/util/KeyStoreDelegator java/util/regex/Pattern$BmpCharProperty @@ -1605,7 +1598,6 @@ java/io/ObjectStreamConstants com/ctc/wstx/util/SymbolTable$Bucket com/exasol/sql/rendering/StringRendererConfig$Builder sun/security/x509/CertificateAlgorithmId -software/amazon/awssdk/auth/signer/internal/BoundedLinkedHashMap java/text/spi/DateFormatSymbolsProvider software/amazon/awssdk/regions/servicemetadata/AppIntegrationsServiceMetadata io/netty/util/internal/logging/InternalLogLevel @@ -1620,6 +1612,7 @@ jdk/internal/misc/JavaLangInvokeAccess org/apache/http/params/HttpProtocolParams org/logicng/formulas/FormulaFunction io/netty/handler/ssl/SslHandshakeTimeoutException +software/amazon/awssdk/http/auth/aws/internal/signer/V4Properties io/netty/util/AttributeKey jdk/internal/loader/Resource com/exasol/sql/expression/predicate/PredicateVisitor @@ -1695,6 +1688,7 @@ software/amazon/awssdk/http/HttpExecuteRequest$BuilderImpl com/sun/crypto/provider/GCTR software/amazon/awssdk/regions/servicemetadata/SyntheticsServiceMetadata java/net/InetSocketAddress +software/amazon/awssdk/core/internal/http/pipeline/stages/QueryParametersToBodyStage io/netty/buffer/PoolSubpage com/ctc/wstx/io/CharsetNames com/exasol/adapter/sql/ScalarFunction @@ -1715,6 +1709,7 @@ com/exasol/adapter/request/AdapterRequestType org/apache/http/conn/ssl/DefaultHostnameVerifier$HostNameType software/amazon/awssdk/regions/servicemetadata/NimbleServiceMetadata com/exasol/adapter/sql/SqlJoin +software/amazon/awssdk/http/auth/spi/scheme/AuthSchemeOption$IdentityPropertyConsumer java/lang/reflect/Proxy$ProxyBuilder$1 software/amazon/awssdk/core/ApiName$BuilderImpl javax/net/ssl/SSLEngineResult$HandshakeStatus @@ -1738,9 +1733,11 @@ java/io/InvalidClassException org/apache/http/auth/AuthSchemeFactory software/amazon/awssdk/regions/servicemetadata/SmsServiceMetadata java/lang/WeakPairMap$Pair$Lookup +software/amazon/awssdk/http/auth/aws/internal/scheme/DefaultAwsV4aAuthScheme java/util/stream/Collectors$CollectorImpl io/netty/channel/PendingBytesTracker$ChannelOutboundBufferPendingBytesTracker sun/security/rsa/RSAPublicKeyImpl +software/amazon/awssdk/http/auth/aws/internal/signer/V4RequestSigner org/codehaus/stax2/ri/typed/ValueDecoderFactory$LongDecoder jdk/internal/misc/TerminatingThreadLocal$1 sun/security/ssl/KeyShareExtension$HRRKeyShareReproducer @@ -1761,6 +1758,7 @@ sun/security/ssl/KeyShareExtension$HRRKeyShareStringizer sun/security/ssl/ECDHClientKeyExchange$ECDHEClientKeyExchangeConsumer io/netty/util/internal/logging/InternalLogger io/netty/bootstrap/AbstractBootstrap +software/amazon/awssdk/services/s3/auth/scheme/S3AuthSchemeProvider sun/util/resources/Bundles$1 sun/security/ssl/Finished$T10VerifyDataGenerator io/netty/buffer/PoolArena$HeapArena @@ -1775,6 +1773,7 @@ org/glassfish/json/JsonGeneratorImpl$Context org/logicng/formulas/Implication sun/util/resources/ParallelListResourceBundle$KeySet java/util/concurrent/SynchronousQueue +software/amazon/awssdk/http/auth/spi/signer/SignedRequest java/util/Properties org/apache/http/conn/util/PublicSuffixMatcherLoader java/lang/reflect/ProxyGenerator$ProxyMethod @@ -1795,6 +1794,7 @@ com/exasol/adapter/document/documentnode/json/JsonNodeFactory$1 java/net/InetAddress$InetAddressHolder jdk/internal/reflect/ConstructorAccessorImpl software/amazon/awssdk/core/client/config/ClientOverrideConfiguration +software/amazon/awssdk/services/s3/auth/scheme/internal/S3AuthSchemeInterceptor org/glassfish/json/JsonObjectBuilderImpl$JsonObjectImpl org/glassfish/json/JsonTokenizer$JsonToken javax/net/ssl/ExtendedSSLSession @@ -1859,7 +1859,6 @@ java/util/stream/Streams$AbstractStreamBuilderImpl io/netty/handler/codec/http/CombinedHttpHeaders java/util/stream/MatchOps$BooleanTerminalSink sun/security/ssl/SSLSocketFactoryImpl -software/amazon/awssdk/auth/signer/internal/SigningAlgorithm sun/security/ssl/SupportedVersionsExtension$HRRSupportedVersionsConsumer com/exasol/adapter/document/mapping/PropertyToDecimalColumnMapping com/exasol/adapter/request/parser/SchemaMetadataInfoParser$1 @@ -2027,6 +2026,7 @@ software/amazon/awssdk/auth/credentials/AwsCredentialsProvider software/amazon/awssdk/thirdparty/jackson/core/json/JsonReadFeature com/exasol/sql/ColumnDefinitionVisitor com/exasol/adapter/document/files/stringfilter/StringFilterFactory +software/amazon/awssdk/http/auth/aws/internal/signer/util/SignerUtils org/apache/http/client/utils/URIUtils$UriFlag java/io/OutputStreamWriter com/exasol/adapter/document/edml/TruncateableMappingErrorBehaviour @@ -2042,6 +2042,7 @@ software/amazon/awssdk/regions/servicemetadata/DatasyncServiceMetadata com/ctc/wstx/sr/Element java/util/concurrent/ConcurrentHashMap$TreeBin java/util/concurrent/ThreadFactory +software/amazon/awssdk/awscore/internal/AwsProtocolMetadata java/lang/CharacterData00 sun/security/ssl/JsseJce$EcAvailability org/antlr/v4/runtime/misc/IntSet @@ -2079,6 +2080,7 @@ sun/security/ssl/SupportedGroupsExtension$CHSupportedGroupsProducer software/amazon/awssdk/services/s3/endpoints/internal/Value$Str org/apache/http/conn/routing/HttpRoutePlanner software/amazon/awssdk/protocols/query/internal/unmarshall/AwsXmlErrorUnmarshaller$Builder +software/amazon/awssdk/http/auth/aws/signer/AwsV4FamilyHttpSigner$AuthLocation io/netty/resolver/InetSocketAddressResolver$1 org/apache/http/client/HttpRequestRetryHandler sun/security/ssl/PskKeyExchangeModesExtension$PskKeyExchangeModesOnLoadAbsence @@ -2142,7 +2144,6 @@ jdk/internal/misc/JavaLangModuleAccess io/netty/channel/ChannelOutboundBuffer software/amazon/awssdk/regions/servicemetadata/IoteventsdataServiceMetadata sun/security/ssl/ServerHello$T13HelloRetryRequestReproducer -software/amazon/awssdk/auth/signer/Aws4Signer software/amazon/awssdk/services/s3/internal/settingproviders/SystemsSettingsUseArnRegionProvider software/amazon/awssdk/services/s3/endpoints/internal/RuleEvaluator com/exasol/adapter/document/documentpath/PathSegment @@ -2167,6 +2168,7 @@ software/amazon/awssdk/regions/servicemetadata/DiscoveryServiceMetadata sun/security/x509/AVA com/exasol/adapter/sql/SqlLiteralNull software/amazon/awssdk/http/SdkHttpExecutionAttributes +software/amazon/awssdk/http/auth/spi/internal/signer/DefaultBaseSignedRequest$BuilderImpl java/security/cert/CertPathChecker java/nio/file/attribute/FileTime org/slf4j/Logger @@ -2233,8 +2235,11 @@ java/io/StreamTokenizer com/exasol/adapter/document/UdfCallBuilder$1 io/netty/handler/codec/http/HttpClientCodec$Encoder org/apache/http/conn/UnsupportedSchemeException +software/amazon/awssdk/http/auth/internal/scheme/DefaultNoAuthAuthScheme$1 org/logicng/transformations/cnf/CNFConfig$Algorithm +software/amazon/awssdk/http/auth/internal/scheme/DefaultNoAuthAuthScheme$2 software/amazon/awssdk/core/runtime/transform/Marshaller +software/amazon/awssdk/http/auth/internal/scheme/DefaultNoAuthAuthScheme$3 io/netty/channel/SimpleChannelInboundHandler org/apache/http/pool/ConnPool software/amazon/awssdk/services/s3/model/GetBucketIntelligentTieringConfigurationRequest @@ -2300,10 +2305,12 @@ sun/security/ssl/KeyShareExtension$HRRKeyShareProducer software/amazon/awssdk/core/metrics/CoreMetric java/lang/Iterable sun/reflect/generics/tree/BaseType +software/amazon/awssdk/http/auth/aws/internal/signer/util/BoundedLinkedHashMap io/netty/util/internal/shaded/org/jctools/queues/atomic/BaseMpscLinkedAtomicArrayQueuePad2 io/netty/util/internal/shaded/org/jctools/queues/atomic/BaseMpscLinkedAtomicArrayQueuePad1 org/logicng/io/parsers/LogicNGPseudoBooleanParser$ComparisonContext software/amazon/awssdk/core/internal/http/pipeline/stages/ApiCallMetricCollectionStage +software/amazon/awssdk/http/auth/aws/internal/signer/PrecomputedSha256Checksummer org/codehaus/stax2/ri/evt/StartDocumentEventImpl org/apache/http/client/methods/HttpUriRequest software/amazon/awssdk/thirdparty/jackson/core/base/GeneratorBase @@ -2315,6 +2322,7 @@ java/lang/invoke/StringConcatFactory$Stringifiers$StringifierMost com/ctc/wstx/util/BaseNsContext sun/security/ssl/Finished$VerifyDataGenerator java/lang/ProcessEnvironment$Value +software/amazon/awssdk/utils/ToString sun/security/pkcs12/PKCS12KeyStore$DualFormatPKCS12 sun/security/ssl/PreSharedKeyExtension$CHPreSharedKeyConsumer software/amazon/awssdk/protocols/query/unmarshall/XmlElement$Builder @@ -2352,6 +2360,7 @@ java/lang/invoke/MethodHandleImpl$Intrinsic com/exasol/adapter/document/mapping/ColumnValueExtractorFactory$Visitor software/amazon/awssdk/services/s3/endpoints/internal/Parameters$Builder sun/security/x509/AuthorityInfoAccessExtension +software/amazon/awssdk/services/s3/auth/scheme/S3AuthSchemeParams sun/net/idn/StringPrep$StringPrepTrieImpl io/netty/handler/codec/DefaultHeaders$ValueIterator java/util/concurrent/locks/ReentrantLock @@ -2446,6 +2455,7 @@ software/amazon/awssdk/core/internal/retry/SdkDefaultRetrySetting$1 software/amazon/awssdk/http/nio/netty/internal/utils/ChannelResolver org/apache/http/impl/io/EmptyInputStream sun/security/util/HostnameChecker +software/amazon/awssdk/http/auth/aws/internal/signer/V4CanonicalRequest org/logicng/solvers/maxsat/algorithms/MaxSATConfig software/amazon/awssdk/services/s3/endpoints/internal/Parameter$Builder software/amazon/awssdk/services/s3/model/PutBucketAnalyticsConfigurationRequest @@ -2462,7 +2472,6 @@ jdk/internal/reflect/ReflectionFactory java/lang/Package java/util/Locale$Category software/amazon/awssdk/utils/builder/SdkBuilder -software/amazon/awssdk/auth/signer/params/AwsS3V4SignerParams scala/util/Properties software/amazon/awssdk/regions/servicemetadata/Cloud9ServiceMetadata software/amazon/awssdk/services/s3/S3ServiceClientConfiguration$Builder @@ -2476,6 +2485,7 @@ java/util/concurrent/Executors$FinalizableDelegatedExecutorService software/amazon/awssdk/regions/servicemetadata/Wafv2ServiceMetadata sun/text/resources/FormatData_en jdk/internal/logger/SurrogateLogger +software/amazon/awssdk/identity/spi/internal/DefaultAwsCredentialsIdentity sun/reflect/generics/tree/ReturnType software/amazon/awssdk/thirdparty/jackson/core/StreamReadConstraints java/util/stream/IntStream @@ -2503,6 +2513,7 @@ org/apache/http/params/HttpParamsNames io/netty/channel/ChannelPipeline sun/security/ssl/DummyX509TrustManager software/amazon/awssdk/services/s3/model/NoSuchUploadException$Builder +software/amazon/awssdk/http/auth/spi/signer/SignedRequest$Builder sun/security/ssl/TransportContext io/netty/handler/codec/http/HttpObjectDecoder$State sun/security/provider/NativePRNG @@ -2542,6 +2553,7 @@ software/amazon/awssdk/internal/http/LowCopyListMap$ForBuilder org/slf4j/helpers/BasicMDCAdapter java/nio/file/attribute/FileAttributeView java/text/spi/BreakIteratorProvider +software/amazon/awssdk/services/s3/auth/scheme/internal/ModeledS3AuthSchemeProvider software/amazon/awssdk/core/async/AsyncResponseTransformerUtils com/exasol/adapter/document/querypredicate/normalizer/QueryPredicateToLogicngConverter$VariablesMappingBuilder io/netty/util/concurrent/FailedFuture @@ -2581,7 +2593,6 @@ sun/security/ssl/CipherType jakarta/json/JsonArray software/amazon/awssdk/regions/servicemetadata/CloudhsmServiceMetadata sun/security/ssl/X509Authentication$X509Credentials -software/amazon/awssdk/auth/signer/params/Aws4SignerParams$Builder software/amazon/awssdk/protocols/core/ProtocolMarshaller java/util/jar/Manifest io/netty/buffer/UnpooledByteBufAllocator$InstrumentedUnpooledUnsafeHeapByteBuf @@ -2601,6 +2612,7 @@ sun/security/util/SecurityProperties org/apache/log4j/helpers/LogLog java/util/logging/SocketHandler com/exasol/adapter/sql/SqlFunctionScalarJsonValue +software/amazon/awssdk/http/auth/spi/signer/BaseSignRequest io/netty/util/concurrent/SingleThreadEventExecutor sun/security/ssl/PskKeyExchangeModesExtension$PskKeyExchangeModesProducer java/io/ObjectInputStream$GetField @@ -2620,7 +2632,6 @@ sun/security/ec/ECOperations java/io/ClassCache org/apache/http/impl/client/HttpClients java/nio/charset/CoderResult -software/amazon/awssdk/auth/signer/internal/AbstractAwsS3V4Signer software/amazon/awssdk/services/s3/model/MetadataCopier java/time/format/DateTimeTextProvider$1 software/amazon/awssdk/regions/servicemetadata/FrauddetectorServiceMetadata @@ -2763,7 +2774,6 @@ io/netty/util/internal/shaded/org/jctools/queues/atomic/MpscAtomicArrayQueueProd java/security/cert/PKIXCertPathChecker sun/security/ssl/CertStatusExtension$SHCertStatusReqV2Consumer io/netty/buffer/UnpooledByteBufAllocator$InstrumentedUnpooledUnsafeDirectByteBuf -software/amazon/awssdk/auth/signer/internal/AbstractAws4Signer$CanonicalRequest java/io/BufferedReader sun/security/util/ByteArrayLexOrder sun/net/ext/ExtendedSocketOptions @@ -2793,6 +2803,7 @@ org/logicng/io/parsers/LogicNGPseudoBooleanParser org/antlr/v4/runtime/atn/ATNDeserializer$UnicodeDeserializer io/netty/handler/ssl/OpenSslServerContext org/antlr/v4/runtime/ANTLRErrorListener +software/amazon/awssdk/http/auth/spi/internal/signer/DefaultSignedRequest io/netty/channel/PendingBytesTracker$NoopPendingBytesTracker io/netty/handler/ssl/ReferenceCountedOpenSslEngine sun/security/ec/point/AffinePoint @@ -2816,6 +2827,7 @@ software/amazon/awssdk/regions/regionmetadata/UsGovEast1 java/lang/StackWalker$ExtendedOption com/exasol/swig/ConnectionInformationWrapper software/amazon/awssdk/services/s3/internal/handlers/EnableChunkedEncodingInterceptor +software/amazon/awssdk/awscore/internal/AwsProtocolMetadata$Builder sun/security/ssl/PreSharedKeyExtension$SHPreSharedKeyProducer com/exasol/adapter/document/documentfetcher/files/segmentation/SegmentMatcherFactory java/util/stream/MatchOps @@ -2833,14 +2845,13 @@ software/amazon/awssdk/services/s3/DefaultS3AsyncClientBuilder org/antlr/v4/runtime/atn/Transition software/amazon/awssdk/awscore/eventstream/EventStreamResponseHandler java/util/EnumSet -java/security/Provider$ServiceKey software/amazon/awssdk/regions/servicemetadata/ResourceGroupsServiceMetadata +java/security/Provider$ServiceKey software/amazon/awssdk/http/nio/netty/internal/NettyRequestExecutor$StreamedRequest software/amazon/awssdk/regions/servicemetadata/TextractServiceMetadata software/amazon/awssdk/regions/servicemetadata/OmicsServiceMetadata java/security/NoSuchAlgorithmException software/amazon/awssdk/core/interceptor/ExecutionAttributes -software/amazon/awssdk/auth/signer/params/Aws4SignerParams org/antlr/v4/runtime/misc/ParseCancellationException com/exasol/adapter/document/querypredicate/normalizer/LogicngToQueryPredicateConverter com/exasol/adapter/document/documentnode/DocumentNode @@ -2863,11 +2874,12 @@ software/amazon/awssdk/regions/servicemetadata/ApiPricingServiceMetadata software/amazon/awssdk/regions/servicemetadata/SnowballServiceMetadata com/exasol/adapter/document/mapping/TableMapping sun/security/ssl/RandomCookie -scala/Option$ software/amazon/awssdk/http/auth/spi/signer/SignerProperty +scala/Option$ software/amazon/awssdk/services/s3/model/GetObjectAttributesRequest software/amazon/awssdk/services/s3/model/S3Object$Builder scala/util/Left +software/amazon/awssdk/http/auth/spi/internal/signer/DefaultBaseSignRequest$BuilderImpl java/time/temporal/TemporalQueries$4 java/time/temporal/TemporalQueries$5 java/time/temporal/TemporalQueries$6 @@ -2875,6 +2887,7 @@ java/time/temporal/TemporalQueries$7 com/ctc/wstx/sr/InputProblemReporter java/time/temporal/TemporalQueries$1 java/time/temporal/TemporalQueries$2 +software/amazon/awssdk/http/auth/spi/internal/signer/DefaultSignRequest java/time/temporal/TemporalQueries$3 sun/security/ssl/ClientHello$T12ClientHelloConsumer java/io/Bits @@ -2883,8 +2896,8 @@ java/lang/invoke/MethodHandleImpl$AsVarargsCollector java/security/spec/ECPoint software/amazon/awssdk/services/s3/endpoints/internal/Literal$Obj software/amazon/awssdk/protocols/xml/internal/unmarshall/XmlUnmarshaller -java/lang/ThreadLocal$SuppliedThreadLocal software/amazon/awssdk/thirdparty/jackson/core/io/UTF8Writer +java/lang/ThreadLocal$SuppliedThreadLocal software/amazon/awssdk/services/s3/model/BucketAlreadyOwnedByYouException com/exasol/adapter/response/PushDownResponse$Builder org/antlr/v4/runtime/FailedPredicateException @@ -2924,8 +2937,8 @@ com/exasol/adapter/document/files/BinDistributor$Bin sun/nio/cs/UTF_8 com/exasol/adapter/document/files/RequestRateRetryIterator software/amazon/awssdk/profiles/ProfileFileSupplier -software/amazon/awssdk/core/sync/RequestBody org/codehaus/stax2/ri/typed/ValueDecoderFactory$FloatArrayDecoder +software/amazon/awssdk/core/sync/RequestBody software/amazon/awssdk/services/s3/model/ListObjectsV2Response$Builder software/amazon/awssdk/http/apache/internal/conn/ClientConnectionRequestFactory io/netty/channel/socket/nio/NioChannelOption @@ -2937,7 +2950,6 @@ software/amazon/awssdk/utils/ReflectionMethodInvoker java/util/BitSet com/exasol/adapter/document/files/FileTypeSpecificDocumentFetcher software/amazon/awssdk/services/s3/internal/handlers/SyncChecksumValidationInterceptor -software/amazon/awssdk/auth/signer/internal/ContentChecksum com/exasol/adapter/sql/SqlSelectList java/nio/channels/spi/AbstractSelector$1 software/amazon/awssdk/regions/servicemetadata/NetworkmanagerServiceMetadata @@ -3157,7 +3169,6 @@ com/exasol/sql/expression/literal/StringLiteral java/time/Month software/amazon/awssdk/core/internal/http/pipeline/stages/AsyncApiCallMetricCollectionStage software/amazon/awssdk/core/internal/http/AmazonSyncHttpClient -software/amazon/awssdk/auth/signer/internal/FifoCache software/amazon/awssdk/core/client/handler/SyncClientHandler software/amazon/awssdk/core/ApiName com/exasol/ExaMetadata @@ -3193,6 +3204,7 @@ software/amazon/awssdk/http/nio/netty/NettyNioAsyncHttpClient org/slf4j/LoggerFactory org/glassfish/json/JsonObjectBuilderImpl software/amazon/awssdk/http/nio/netty/internal/utils/NettyUtils +software/amazon/awssdk/http/auth/aws/internal/signer/Checksummer sun/security/ssl/MaxFragExtension$EEMaxFragmentLengthProducer java/lang/NoSuchMethodException org/reactivestreams/Subscriber @@ -3212,6 +3224,7 @@ software/amazon/awssdk/thirdparty/jackson/core/util/BufferRecyclers javax/crypto/ShortBufferException java/lang/StrictMath software/amazon/awssdk/core/internal/http/loader/SdkServiceLoader +software/amazon/awssdk/checksums/DefaultChecksumAlgorithm$ChecksumAlgorithmsCache java/nio/file/FileSystems sun/text/normalizer/Trie2 com/ctc/wstx/evt/BaseStartElement @@ -3236,6 +3249,7 @@ com/sun/crypto/provider/TlsPrfGenerator java/util/stream/Sink org/logicng/explanations/mus/MUSConfig$Algorithm software/amazon/awssdk/services/s3/model/ListBucketAnalyticsConfigurationsRequest +software/amazon/awssdk/http/auth/aws/internal/signer/util/FifoCache software/amazon/awssdk/core/interceptor/ClasspathInterceptorChainFactory sun/security/ssl/HandshakeHash$T12HandshakeHash sun/security/util/DisabledAlgorithmConstraints$1 @@ -3306,11 +3320,13 @@ io/netty/util/internal/PlatformDependent org/apache/http/HttpResponse org/antlr/v4/runtime/tree/SyntaxTree software/amazon/awssdk/regions/servicemetadata/LicenseManagerUserSubscriptionsServiceMetadata +software/amazon/awssdk/http/auth/aws/internal/signer/CredentialScope sun/security/ssl/KeyShareExtension$SHKeyShareProducer software/amazon/awssdk/services/s3/endpoints/internal/Not io/netty/util/AttributeMap software/amazon/awssdk/services/s3/internal/settingproviders/UseArnRegionProvider org/apache/http/client/methods/HttpEntityEnclosingRequestBase +software/amazon/awssdk/identity/spi/IdentityProperty jdk/internal/module/ModuleBootstrap$2 software/amazon/awssdk/core/async/listener/SubscriberListener java/security/spec/RSAPrivateKeySpec @@ -3327,6 +3343,7 @@ java/lang/invoke/StringConcatFactory$Strategy software/amazon/awssdk/regions/servicemetadata/DataIotServiceMetadata java/util/UUID java/util/Collections$SynchronizedSet +software/amazon/awssdk/http/auth/aws/internal/signer/util/CredentialUtils sun/security/ssl/ContentType sun/security/ssl/Finished$T13FinishedConsumer io/netty/util/internal/SystemPropertyUtil @@ -3414,8 +3431,8 @@ java/net/URL$DefaultFactory software/amazon/awssdk/http/nio/netty/internal/nrs/HandlerPublisher$1 java/security/ProtectionDomain$JavaSecurityAccessImpl org/logicng/formulas/NAryOperator -jdk/internal/math/FloatingDecimal$1 software/amazon/awssdk/regions/regionmetadata/UsIsoEast1 +jdk/internal/math/FloatingDecimal$1 software/amazon/awssdk/awscore/AwsRequest$BuilderImpl io/netty/channel/ChannelFactory sun/security/provider/certpath/PKIXCertPathValidator @@ -3438,11 +3455,13 @@ java/util/ImmutableCollections$Set12$1 software/amazon/awssdk/awscore/client/handler/AwsSyncClientHandler org/apache/http/impl/HttpConnectionMetricsImpl sun/security/ec/XDHPublicKeyImpl +software/amazon/awssdk/checksums/DefaultChecksumAlgorithm org/apache/http/TokenIterator software/amazon/awssdk/thirdparty/jackson/core/io/DataOutputAsStream org/antlr/v4/runtime/atn/RuleStopState java/security/interfaces/ECKey sun/nio/fs/UnixFileAttributes +software/amazon/awssdk/core/interceptor/ExecutionAttribute$MappedValueStorage sun/security/ssl/BaseSSLSocketImpl software/amazon/awssdk/services/s3/endpoints/internal/Identifier sun/security/x509/CertificateX509Key @@ -3517,6 +3536,7 @@ sun/nio/fs/UnixFileStoreAttributes io/netty/util/HashingStrategy sun/security/ssl/CertSignAlgsExtension$CertSignatureSchemesStringizer org/apache/commons/logging/impl/WeakHashtable$WeakKey +software/amazon/awssdk/http/auth/aws/internal/signer/util/DigestAlgorithm java/security/BasicPermissionCollection software/amazon/awssdk/regions/servicemetadata/MghServiceMetadata software/amazon/awssdk/regions/servicemetadata/RekognitionServiceMetadata @@ -3787,6 +3807,7 @@ software/amazon/awssdk/identity/spi/internal/DefaultResolveIdentityRequest$Build sun/security/ssl/DHKeyExchange io/netty/channel/AdaptiveRecvByteBufAllocator$HandleImpl io/netty/util/concurrent/CompleteFuture +software/amazon/awssdk/awscore/internal/AwsServiceProtocol com/sun/crypto/provider/GaloisCounterMode org/codehaus/stax2/ri/evt/CharactersEventImpl io/netty/buffer/SizeClasses @@ -3808,11 +3829,13 @@ software/amazon/awssdk/profiles/ProfileFileLocation com/exasol/adapter/document/documentpath/DocumentPathIteratorFactory org/apache/http/impl/auth/SPNegoSchemeFactory sun/security/ssl/SSLConfiguration$CustomizedServerSignatureSchemes +software/amazon/awssdk/http/auth/spi/signer/BaseSignedRequest$Builder sun/security/ssl/SSLEngineImpl software/amazon/awssdk/regions/servicemetadata/NetworkFirewallServiceMetadata java/util/AbstractMap org/apache/http/impl/auth/HttpAuthenticator java/security/SignatureException +software/amazon/awssdk/http/auth/scheme/NoAuthAuthScheme com/exasol/datatype/type/Decimal jdk/internal/misc/JavaLangRefAccess java/util/stream/Stream @@ -3916,6 +3939,7 @@ org/apache/http/conn/ssl/SSLConnectionSocketFactory io/netty/handler/codec/http/HttpMethod io/netty/buffer/PoolSubpageMetric java/util/ImmutableCollections$Set12 +software/amazon/awssdk/services/s3/auth/scheme/internal/DefaultS3AuthSchemeProvider scala/Option software/amazon/awssdk/regions/servicemetadata/LakeformationServiceMetadata java/lang/invoke/MethodTypeForm @@ -3978,6 +4002,7 @@ org/apache/http/impl/client/HttpClientBuilder$2 com/ctc/wstx/io/WstxInputSource sun/nio/ch/SocketChannelImpl sun/security/ssl/CertStatusExtension$CertStatusRespStringizer +software/amazon/awssdk/http/auth/aws/internal/signer/DefaultAwsV4HttpSigner$1 org/codehaus/stax2/validation/XMLValidationSchema org/apache/http/client/methods/HttpRequestBase java/io/DataOutputStream @@ -4009,6 +4034,7 @@ sun/security/ec/ECKeyPairGenerator java/nio/channels/ClosedChannelException com/exasol/adapter/sql/SqlLiteralBool io/netty/handler/codec/http/HttpResponseStatus +software/amazon/awssdk/http/auth/aws/scheme/AwsV4AuthScheme software/amazon/awssdk/core/interceptor/Context$AfterMarshalling software/amazon/awssdk/thirdparty/jackson/core/json/ReaderBasedJsonParser sun/security/x509/AccessDescription @@ -4078,11 +4104,12 @@ jdk/internal/reflect/SerializationConstructorAccessorImpl jdk/internal/org/objectweb/asm/AnnotationVisitor java/util/concurrent/CancellationException software/amazon/awssdk/core/RequestOverrideConfiguration$Builder -software/amazon/awssdk/utils/internal/Base16Codec io/netty/channel/socket/nio/NioSocketChannel +software/amazon/awssdk/utils/internal/Base16Codec java/lang/RuntimeException software/amazon/awssdk/core/retry/conditions/RetryOnStatusCodeCondition software/amazon/awssdk/identity/spi/ResolveIdentityRequest$Builder +software/amazon/awssdk/http/auth/aws/internal/signer/util/SigningAlgorithm com/exasol/adapter/document/queryplanning/selectionextractor/SelectionMatcher sun/security/ssl/PskKeyExchangeModesExtension$PskKeyExchangeModesSpec java/nio/charset/spi/CharsetProvider @@ -4141,6 +4168,7 @@ io/netty/channel/CompleteChannelFuture sun/util/logging/internal/LoggingProviderImpl$LogManagerAccess sun/security/ssl/ClientHello$ClientHelloConsumer java/nio/file/OpenOption +software/amazon/awssdk/http/auth/spi/scheme/AuthScheme software/amazon/awssdk/http/nio/netty/NettySdkAsyncHttpService org/apache/http/conn/socket/ConnectionSocketFactory sun/security/provider/certpath/ldap/JdkLDAP$ProviderService @@ -4179,6 +4207,7 @@ org/apache/log4j/spi/RendererSupport com/exasol/datatype/type/Varchar software/amazon/awssdk/core/interceptor/Context$AfterUnmarshalling java/util/regex/Pattern$CharPropertyGreedy +software/amazon/awssdk/http/auth/aws/internal/signer/V4PayloadSigner sun/text/normalizer/Norm2AllModes$Norm2AllModesSingleton software/amazon/awssdk/regions/servicemetadata/IottwinmakerServiceMetadata jdk/internal/module/ServicesCatalog @@ -4228,9 +4257,7 @@ software/amazon/awssdk/core/client/config/ClientOverrideConfiguration$Builder software/amazon/awssdk/http/apache/internal/conn/ClientConnectionManagerFactory$DelegatingHttpClientConnectionManager java/util/regex/Pattern$Node software/amazon/awssdk/metrics/MetricPublisher -software/amazon/awssdk/core/async/AsyncRequestBody java/lang/Exception -software/amazon/awssdk/auth/signer/internal/chunkedencoding/AwsChunkSigner java/time/format/DateTimeFormatterBuilder$CharLiteralPrinterParser sun/security/util/math/intpoly/P521OrderField software/amazon/awssdk/thirdparty/jackson/core/json/JsonReadContext @@ -4265,6 +4292,7 @@ software/amazon/awssdk/services/s3/internal/handlers/DecodeUrlEncodedResponseInt org/antlr/v4/runtime/tree/RuleNode io/netty/channel/StacklessClosedChannelException java/util/Formatter +software/amazon/awssdk/http/auth/spi/signer/SignRequest$Builder io/netty/handler/codec/http/HttpHeaderValues java/util/concurrent/ConcurrentSkipListMap$Iter jdk/internal/reflect/MethodAccessorGenerator @@ -4324,7 +4352,6 @@ org/apache/http/protocol/HttpCoreContext java/lang/InstantiationError sun/security/ssl/KeyShareExtension$SHKeyShareConsumer sun/security/ssl/Authenticator$TLS10Authenticator -software/amazon/awssdk/auth/signer/internal/AbstractAwsSigner java/nio/file/DirectoryStream sun/text/normalizer/NormalizerBase$NFKCMode sun/security/ssl/SSLConfiguration$1 @@ -4388,6 +4415,7 @@ org/apache/http/conn/routing/RouteInfo$TunnelType sun/security/ssl/CertificateMessage$T12CertificateConsumer java/security/BasicPermission org/antlr/v4/runtime/atn/RangeTransition +software/amazon/awssdk/http/auth/aws/internal/signer/V4CanonicalRequest$Options com/exasol/adapter/document/documentfetcher/files/RemoteFile software/amazon/awssdk/awscore/endpoint/FipsEnabledProvider java/util/TreeMap$ValueIterator @@ -4412,6 +4440,7 @@ software/amazon/awssdk/services/s3/S3AsyncClientBuilder java/util/ServiceLoader org/apache/http/impl/io/IdentityOutputStream org/apache/http/client/methods/HttpGet +software/amazon/awssdk/identity/spi/AwsCredentialsIdentity$Builder jdk/internal/reflect/ClassDefiner$1 org/apache/http/conn/SchemePortResolver sun/security/x509/SubjectAlternativeNameExtension @@ -4472,7 +4501,6 @@ org/logicng/formulas/Constant io/netty/channel/DefaultChannelPipeline$PendingHandlerCallback io/netty/handler/ssl/JdkApplicationProtocolNegotiator sun/nio/fs/LinuxFileSystem -software/amazon/awssdk/core/internal/io/AwsChunkedInputStream io/netty/channel/nio/AbstractNioChannel$NioUnsafe sun/net/www/MessageHeader io/netty/channel/ChannelHandlerMask @@ -4518,6 +4546,7 @@ io/netty/handler/ssl/util/KeyManagerFactoryWrapper java/util/ImmutableCollections java/time/LocalTime$1 org/apache/http/impl/cookie/NetscapeDraftSpecProvider +software/amazon/awssdk/http/auth/aws/internal/signer/DefaultV4PayloadSigner java/io/DataInputStream sun/security/ssl/SSLContextImpl$CustomizedSSLProtocols scala/collection/IterableOnceOps @@ -4634,6 +4663,7 @@ software/amazon/awssdk/http/nio/netty/internal/SharedSdkEventLoopGroup$Reference sun/security/x509/GeneralNames sun/nio/fs/UnixFileAttributeViews$Basic org/antlr/v4/runtime/tree/ErrorNode +software/amazon/awssdk/http/auth/aws/internal/signer/DefaultV4RequestSigner java/util/JumboEnumSet$EnumSetIterator java/util/spi/TimeZoneNameProvider org/slf4j/jul/JDK14LoggerFactory @@ -4686,13 +4716,13 @@ org/apache/http/conn/routing/HttpRouteDirector java/util/concurrent/CompletableFuture$AltResult software/amazon/awssdk/utils/ConditionalDecorator sun/security/ssl/ECPointFormatsExtension$ECPointFormatsStringizer -software/amazon/awssdk/core/CredentialType$CredentialTypeCache software/amazon/awssdk/core/interceptor/ExecutionAttribute$DerivationValueStorage software/amazon/awssdk/http/nio/netty/internal/ResponseHandler$OnCancelSubscription org/apache/log4j/CategoryKey java/time/format/DateTimeParseContext sun/nio/ch/OptionKey software/amazon/awssdk/core/internal/http/pipeline/stages/ExecutionFailureExceptionReportingStage +software/amazon/awssdk/http/auth/spi/internal/signer/DefaultSignRequest$BuilderImpl java/io/Flushable sun/invoke/util/VerifyAccess software/amazon/awssdk/regions/servicemetadata/ElasticfilesystemServiceMetadata @@ -4745,7 +4775,6 @@ io/netty/handler/timeout/WriteTimeoutException sun/util/locale/provider/BaseLocaleDataMetaInfo io/netty/channel/ChannelOutboundHandlerAdapter org/apache/http/cookie/Cookie -software/amazon/awssdk/auth/signer/params/AwsS3V4SignerParams$BuilderImpl jdk/internal/ref/CleanerImpl scala/collection/immutable/StrictOptimizedSeqOps java/util/stream/SortedOps$OfRef @@ -4899,6 +4928,7 @@ java/util/concurrent/atomic/Striped64$1 sun/security/ssl/CertStatusExtension$CTCertStatusResponseConsumer com/exasol/sql/ColumnsDefinition sun/security/ssl/ServerNameExtension$SHServerNamesSpec +software/amazon/awssdk/http/auth/aws/internal/scheme/DefaultAwsV4AuthScheme java/util/regex/Pattern$Ques java/io/BufferedInputStream java/util/Arrays$ArrayItr @@ -4930,9 +4960,9 @@ io/netty/util/concurrent/ProgressiveFuture software/amazon/awssdk/protocols/xml/internal/marshall/XmlProtocolMarshaller$Builder io/netty/channel/Channel$Unsafe sun/security/pkcs/PKCS8Key -sun/security/provider/SHA2$SHA256 org/apache/http/client/methods/HttpPut java/util/Date +sun/security/provider/SHA2$SHA256 io/netty/channel/ChannelHandler java/lang/module/ModuleDescriptor jdk/internal/loader/URLClassPath$JarLoader$1 @@ -5003,7 +5033,6 @@ sun/security/ssl/ChangeCipherSpec$T13ChangeCipherSpecConsumer java/security/CodeSource java/nio/channels/FileChannel io/netty/channel/DefaultChannelPipeline$TailContext -software/amazon/awssdk/auth/signer/params/Aws4SignerParams$BuilderImpl io/netty/channel/MessageSizeEstimator$Handle com/exasol/adapter/document/mapping/ColumnValueExtractorException java/time/temporal/TemporalAdjuster @@ -5142,6 +5171,7 @@ org/apache/http/client/methods/HttpPost io/netty/util/internal/shaded/org/jctools/queues/QueueProgressIndicators software/amazon/awssdk/http/TlsTrustManagersProvider software/amazon/awssdk/core/document/Document +software/amazon/awssdk/checksums/spi/ChecksumAlgorithm com/exasol/adapter/document/documentfetcher/files/segmentation/FileSegmentDescription sun/security/ssl/SSLCipher$T10BlockReadCipherGenerator software/amazon/awssdk/regions/servicemetadata/GlueServiceMetadata @@ -5211,6 +5241,7 @@ sun/security/ssl/CertStatusExtension$CHCertStatusReqV2Consumer com/exasol/adapter/document/documentfetcher/files/randomaccessinputstream/RandomAccessInputStreamCache sun/security/ssl/Authenticator software/amazon/awssdk/services/s3/internal/handlers/GetObjectInterceptor +software/amazon/awssdk/http/auth/aws/internal/signer/V4Properties$Builder org/antlr/v4/runtime/atn/NotSetTransition software/amazon/awssdk/regions/regionmetadata/MeSouth1 sun/security/ssl/SSLPossessionGenerator @@ -5251,6 +5282,7 @@ java/util/stream/StreamSupport javax/crypto/NullCipher io/netty/handler/codec/http/DefaultHttpHeaders sun/text/normalizer/Norm2AllModes$NFKCSingleton +software/amazon/awssdk/http/auth/aws/internal/signer/util/SignerKey com/ctc/wstx/util/StringUtil software/amazon/awssdk/regions/servicemetadata/StreamsDynamodbServiceMetadata sun/security/ssl/XDHKeyExchange$1 @@ -5288,7 +5320,9 @@ com/exasol/adapter/sql/SqlPredicateEqual software/amazon/awssdk/regions/servicemetadata/EcsServiceMetadata org/apache/http/impl/auth/BasicSchemeFactory java/nio/charset/IllegalCharsetNameException +software/amazon/awssdk/core/SdkProtocolMetadata io/netty/handler/ssl/SslUtils +software/amazon/awssdk/http/auth/spi/internal/signer/DefaultBaseSignedRequest sun/security/ssl/CookieExtension$CHCookieConsumer software/amazon/awssdk/services/s3/model/S3Exception$Builder org/logicng/cardinalityconstraints/CCAtMostK @@ -5313,7 +5347,6 @@ sun/security/ssl/ExtendedMasterSecretExtension$ExtendedMasterSecretSpec org/glassfish/json/BufferPoolImpl sun/security/ssl/CertificateMessage$T12CertificateMessage sun/invoke/util/Wrapper$Format -software/amazon/awssdk/auth/credentials/AwsSessionCredentials software/amazon/awssdk/regions/servicemetadata/ClouddirectoryServiceMetadata com/exasol/adapter/document/files/S3ObjectDescription java/lang/reflect/Member @@ -5331,6 +5364,7 @@ sun/security/ssl/SSLEngineInputRecord sun/util/locale/provider/LocaleServiceProviderPool java/nio/file/spi/FileSystemProvider java/lang/WeakPairMap$Pair$Weak$1 +software/amazon/awssdk/http/auth/spi/signer/SignRequest sun/security/ssl/CertificateRequest$T13CertificateRequestConsumer com/exasol/adapter/document/UdfCountCalculator software/amazon/awssdk/http/SdkHttpService @@ -5339,6 +5373,7 @@ com/exasol/adapter/document/documentfetcher/files/JsonDocumentFetcher software/amazon/awssdk/regions/servicemetadata/RuntimeV2LexServiceMetadata sun/security/ssl/CertStatusExtension$SHCertStatusReqV2Producer software/amazon/awssdk/http/nio/netty/internal/RequestContext +software/amazon/awssdk/core/interceptor/ExecutionAttribute$MappedAttributeBuilder java/lang/invoke/Invokers$Holder java/security/Security$1 software/amazon/awssdk/http/apache/ApacheHttpClient$Builder @@ -5461,7 +5496,6 @@ java/security/spec/X509EncodedKeySpec io/netty/channel/nio/SelectedSelectionKeySetSelector software/amazon/awssdk/http/apache/ApacheHttpClient$DefaultBuilder sun/security/ssl/Plaintext -software/amazon/awssdk/core/signer/AsyncRequestBodySigner java/io/StringWriter java/util/Collections$SingletonSet java/lang/invoke/ClassSpecializer$1 @@ -5507,6 +5541,7 @@ software/amazon/awssdk/http/nio/netty/internal/SharedSdkEventLoopGroup sun/net/www/protocol/jar/JarURLConnection$JarURLInputStream com/exasol/adapter/sql/Predicate java/nio/channels/spi/AbstractInterruptibleChannel +software/amazon/awssdk/http/auth/scheme/NoAuthAuthScheme$AnonymousIdentity com/exasol/adapter/capabilities/Capabilities$Builder java/util/concurrent/atomic/AtomicReferenceArray java/lang/AutoCloseable @@ -5522,7 +5557,6 @@ com/exasol/adapter/document/files/stringfilter/wildcardexpression/renderer/regex org/logicng/formulas/Literal java/lang/reflect/GenericDeclaration software/amazon/awssdk/services/s3/model/S3Request$BuilderImpl -software/amazon/awssdk/core/signer/AsyncSigner sun/text/normalizer/Norm2AllModes$DecomposeNormalizer2 io/netty/channel/ChannelOutboundBuffer$1 jdk/internal/loader/BuiltinClassLoader$5 @@ -5538,8 +5572,8 @@ io/netty/util/internal/PlatformDependent$4 java/time/temporal/IsoFields$Field$3 java/security/Provider$Service java/time/temporal/IsoFields$Field$2 -software/amazon/awssdk/utils/internal/CodecUtils scala/Function1 +software/amazon/awssdk/utils/internal/CodecUtils sun/text/normalizer/CharTrie java/time/temporal/IsoFields$Field$1 software/amazon/awssdk/auth/token/credentials/SdkTokenProvider @@ -5555,7 +5589,6 @@ software/amazon/awssdk/regions/servicemetadata/FinspaceApiServiceMetadata sun/security/ssl/ExtendedMasterSecretExtension$SHExtendedMasterSecretConsumer sun/nio/ch/NativeDispatcher sun/nio/cs/UTF_32BE -software/amazon/awssdk/auth/signer/internal/AbstractAws4Signer software/amazon/awssdk/thirdparty/jackson/core/JsonProcessingException org/logicng/solvers/sat/GlucoseConfig$Builder sun/security/util/math/intpoly/IntegerPolynomial @@ -5732,6 +5765,7 @@ io/netty/buffer/AbstractByteBufAllocator$1 software/amazon/awssdk/services/s3/endpoints/internal/GetAttr$Builder software/amazon/awssdk/regions/servicemetadata/EvidentlyServiceMetadata software/amazon/awssdk/services/s3/model/GetBucketAccelerateConfigurationRequest +software/amazon/awssdk/services/s3/auth/scheme/internal/DefaultS3AuthSchemeParams jdk/internal/loader/ClassLoaders$AppClassLoader java/security/Permission java/util/logging/LogManager$LoggerWeakRef @@ -5769,7 +5803,6 @@ java/util/logging/LogManager$1 io/netty/channel/DefaultMessageSizeEstimator java/lang/InheritableThreadLocal javax/net/ssl/KeyManager -software/amazon/awssdk/awscore/internal/authcontext/AwsCredentialsAuthorizationStrategy io/netty/util/internal/shaded/org/jctools/queues/atomic/MpscAtomicArrayQueueL2Pad java/io/FileOutputStream java/security/KeyFactory @@ -5824,8 +5857,8 @@ sun/security/ssl/SSLCipher$T12GcmWriteCipherGenerator io/netty/util/internal/shaded/org/jctools/queues/BaseLinkedQueuePad2 io/netty/handler/codec/HeadersUtils$StringEntry org/apache/http/impl/client/BasicCredentialsProvider -io/netty/util/internal/shaded/org/jctools/queues/BaseLinkedQueuePad0 sun/security/jgss/SunProvider$1 +io/netty/util/internal/shaded/org/jctools/queues/BaseLinkedQueuePad0 io/netty/util/internal/shaded/org/jctools/queues/BaseLinkedQueuePad1 io/netty/util/internal/PlatformDependent0$3 org/antlr/v4/runtime/CommonTokenFactory @@ -5860,6 +5893,7 @@ software/amazon/awssdk/core/client/handler/ClientExecutionParams software/amazon/awssdk/core/util/SdkAutoConstructList io/netty/channel/ConnectTimeoutException java/util/concurrent/ConcurrentHashMap$ValuesView +software/amazon/awssdk/http/auth/spi/internal/signer/DefaultBaseSignRequest com/exasol/adapter/capabilities/MainCapability com/exasol/ExaMetadataImpl$ColumnInfo java/util/Collections$3 @@ -5870,7 +5904,6 @@ java/lang/module/ModuleReference sun/security/ssl/ServerHelloDone io/netty/channel/SingleThreadEventLoop sun/security/ssl/KeyShareExtension$CHKeyShareStringizer -software/amazon/awssdk/auth/signer/internal/SigningAlgorithm$MacThreadLocal sun/security/x509/KeyIdentifier software/amazon/awssdk/services/s3/model/ListObjectsV2Response javax/crypto/KeyGenerator @@ -5913,7 +5946,6 @@ jakarta/json/JsonPatch java/io/ObjectInputStream$BlockDataInputStream org/antlr/v4/runtime/RecognitionException java/util/Random -software/amazon/awssdk/auth/signer/params/Aws4PresignerParams software/amazon/awssdk/awscore/exception/AwsServiceException software/amazon/awssdk/core/http/ExecutionContext org/logicng/solvers/maxsat/algorithms/MaxSATConfig$SolverType @@ -5929,6 +5961,7 @@ software/amazon/awssdk/regions/regionmetadata/ApSoutheast1 software/amazon/awssdk/awscore/AwsRequestOverrideConfiguration$BuilderImpl java/time/chrono/ChronoZonedDateTime software/amazon/awssdk/regions/servicemetadata/MonitoringServiceMetadata +software/amazon/awssdk/http/auth/spi/internal/signer/DefaultSignedRequest$BuilderImpl org/glassfish/json/JsonParserImpl software/amazon/awssdk/core/internal/SdkInternalTestAdvancedClientOption sun/nio/cs/StreamDecoder @@ -5953,6 +5986,7 @@ jdk/internal/ref/CleanerFactory sun/security/ssl/CertificateRequest$T10CertificateRequestConsumer software/amazon/awssdk/http/async/AsyncExecuteRequest$BuilderImpl java/lang/AssertionError +software/amazon/awssdk/http/auth/internal/scheme/DefaultNoAuthAuthScheme java/util/regex/Pattern$Branch java/security/SecureRandomSpi org/codehaus/stax2/ri/typed/ValueDecoderFactory$DecoderBase From 2d789b8100ff44655b07c468c8e33927ae4bc713 Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Tue, 7 Nov 2023 15:32:39 +0100 Subject: [PATCH 28/30] Deactivate tests broken with Exasol 8 --- .../files/S3DocumentFilesAdapterIT.java | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) diff --git a/src/test/java/com/exasol/adapter/document/files/S3DocumentFilesAdapterIT.java b/src/test/java/com/exasol/adapter/document/files/S3DocumentFilesAdapterIT.java index 333a33d2..562793ea 100644 --- a/src/test/java/com/exasol/adapter/document/files/S3DocumentFilesAdapterIT.java +++ b/src/test/java/com/exasol/adapter/document/files/S3DocumentFilesAdapterIT.java @@ -5,6 +5,7 @@ import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; import java.io.*; import java.nio.charset.StandardCharsets; @@ -17,8 +18,10 @@ import java.util.logging.Logger; import java.util.regex.Pattern; +import org.hamcrest.Matcher; import org.hamcrest.MatcherAssert; import org.junit.jupiter.api.*; +import org.junit.jupiter.api.function.Executable; import org.testcontainers.junit.jupiter.Testcontainers; import com.exasol.adapter.document.edml.*; @@ -228,4 +231,76 @@ private void createBucketIfNotExists(final String bucketName) { // ignore } } + + // The following tests fail for Exasol 8. They will be fixed in + // https://github.com/exasol/s3-document-files-virtual-schema/issues/140 + @Override + void testReadCsvWithTypesWithHeader() throws IOException, SQLException { + if (isExasol8()) { + assertSqlException(super::testReadCsvWithTypesWithHeader, containsString( + "Data type mismatch in column number 7 (1-indexed).Expected TIMESTAMP(3) WITH LOCAL TIME ZONE, but got TIMESTAMP(3).")); + } else { + super.testReadCsvWithTypesWithHeader(); + } + } + + @Override + void testLoadRandomCsvFile() throws Exception { + if (isExasol8()) { + assertSqlException(super::testLoadRandomCsvFile, containsString( + "Data type mismatch in column number 6 (1-indexed).Expected TIMESTAMP(3) WITH LOCAL TIME ZONE, but got TIMESTAMP(3).")); + } else { + super.testLoadRandomCsvFile(); + } + } + + @Override + void testReadCsvWithTypesWithoutHeader() throws IOException, SQLException { + if (isExasol8()) { + assertSqlException(super::testReadCsvWithTypesWithoutHeader, containsString( + "Data type mismatch in column number 7 (1-indexed).Expected TIMESTAMP(3) WITH LOCAL TIME ZONE, but got TIMESTAMP(3).")); + } else { + super.testReadCsvWithTypesWithoutHeader(); + } + } + + @Override + void testReadParquetFile() throws IOException, SQLException { + if (isExasol8()) { + assertSqlException(super::testReadParquetFile, containsString( + "Data type mismatch in column number 5 (1-indexed).Expected TIMESTAMP(3) WITH LOCAL TIME ZONE, but got TIMESTAMP(3).")); + } else { + super.testReadParquetFile(); + } + } + + @Override + void testReadParquetFileWithAutomaticInference() throws IOException, SQLException { + if (isExasol8()) { + assertSqlException(super::testReadParquetFileWithAutomaticInference, containsString( + "Data type mismatch in column number 5 (1-indexed).Expected TIMESTAMP(3) WITH LOCAL TIME ZONE, but got TIMESTAMP(3).")); + } else { + super.testReadParquetFileWithAutomaticInference(); + } + } + + private void assertSqlException(final Executable executable, final Matcher exceptionMatcher) { + final SQLException exception = assertThrows(SQLException.class, executable); + assertThat(exception.getMessage(), exceptionMatcher); + } + + private boolean isExasol8() { + return getExasolMajorVersion().equals("8"); + } + + private static String getExasolMajorVersion() { + try (Statement stmt = SETUP.getConnection().createStatement()) { + final ResultSet result = stmt + .executeQuery("SELECT PARAM_VALUE FROM SYS.EXA_METADATA WHERE PARAM_NAME='databaseMajorVersion'"); + assertTrue(result.next(), "no result"); + return result.getString(1); + } catch (final SQLException exception) { + throw new IllegalStateException("Failed to query Exasol version: " + exception.getMessage(), exception); + } + } } From 4af69107d760356a7c640f9c77ca440e8a034da7 Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Tue, 7 Nov 2023 15:40:44 +0100 Subject: [PATCH 29/30] Add test annotations --- .../adapter/document/files/S3DocumentFilesAdapterIT.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/test/java/com/exasol/adapter/document/files/S3DocumentFilesAdapterIT.java b/src/test/java/com/exasol/adapter/document/files/S3DocumentFilesAdapterIT.java index 562793ea..772c47c5 100644 --- a/src/test/java/com/exasol/adapter/document/files/S3DocumentFilesAdapterIT.java +++ b/src/test/java/com/exasol/adapter/document/files/S3DocumentFilesAdapterIT.java @@ -234,6 +234,7 @@ private void createBucketIfNotExists(final String bucketName) { // The following tests fail for Exasol 8. They will be fixed in // https://github.com/exasol/s3-document-files-virtual-schema/issues/140 + @Test @Override void testReadCsvWithTypesWithHeader() throws IOException, SQLException { if (isExasol8()) { @@ -244,6 +245,7 @@ void testReadCsvWithTypesWithHeader() throws IOException, SQLException { } } + @Test @Override void testLoadRandomCsvFile() throws Exception { if (isExasol8()) { @@ -254,6 +256,7 @@ void testLoadRandomCsvFile() throws Exception { } } + @Test @Override void testReadCsvWithTypesWithoutHeader() throws IOException, SQLException { if (isExasol8()) { @@ -264,6 +267,7 @@ void testReadCsvWithTypesWithoutHeader() throws IOException, SQLException { } } + @Test @Override void testReadParquetFile() throws IOException, SQLException { if (isExasol8()) { @@ -274,6 +278,7 @@ void testReadParquetFile() throws IOException, SQLException { } } + @Test @Override void testReadParquetFileWithAutomaticInference() throws IOException, SQLException { if (isExasol8()) { From a241cad9febbcf3e450f1838a462a616c6bc6067 Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Wed, 8 Nov 2023 06:31:05 +0100 Subject: [PATCH 30/30] Update release date --- doc/changes/changes_2.8.3.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/changes/changes_2.8.3.md b/doc/changes/changes_2.8.3.md index e04cb7c7..f19bd6ec 100644 --- a/doc/changes/changes_2.8.3.md +++ b/doc/changes/changes_2.8.3.md @@ -1,4 +1,4 @@ -# S3 Document Files Virtual Schema 2.8.3, released 2023-11-07 +# S3 Document Files Virtual Schema 2.8.3, released 2023-11-08 Code name: Refactoring of Extension