From bf198dd51ebd10a36943ef435533e7953f3e32bb Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Mon, 6 Nov 2023 15:14:50 +0100 Subject: [PATCH 01/15] Upgrade dependencies --- .github/workflows/dependencies_check.yml | 23 +- dependencies.md | 169 ++-- doc/changes/changelog.md | 1 + doc/changes/changes_2.7.7.md | 49 ++ doc/user_guide/user_guide.md | 20 +- extension/package-lock.json | 975 ++++++++++++----------- extension/package.json | 18 +- extension/src/extension.ts | 17 +- pk_generated_parent.pom | 2 +- pom.xml | 24 +- 10 files changed, 700 insertions(+), 598 deletions(-) create mode 100644 doc/changes/changes_2.7.7.md 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 56bbf098..02cec093 100644 --- a/dependencies.md +++ b/dependencies.md @@ -50,45 +50,45 @@ | [scalatestplus-mockito][42] | [Apache-2.0][28] | | [mockito-core][43] | [MIT][44] | | [Hamcrest][45] | [BSD License 3][46] | -| [testcontainers-scala-scalatest][47] | [The MIT License (MIT)][48] | -| [Testcontainers :: Localstack][49] | [MIT][50] | -| [Test containers for Exasol on Docker][51] | [MIT License][52] | -| [Test Database Builder for Java][53] | [MIT License][54] | -| [Matcher for SQL Result Sets][55] | [MIT License][56] | -| [EqualsVerifier \| release normal jar][57] | [Apache License, Version 2.0][3] | -| [JUnit Jupiter Engine][58] | [Eclipse Public License v2.0][59] | -| [Maven Project Version Getter][60] | [MIT License][61] | -| [Extension integration tests library][62] | [MIT License][63] | +| [testcontainers-scala-scalatest][47] | [The MIT License (MIT)][44] | +| [Testcontainers :: Localstack][48] | [MIT][49] | +| [Test containers for Exasol on Docker][50] | [MIT License][51] | +| [Test Database Builder for Java][52] | [MIT License][53] | +| [Matcher for SQL Result Sets][54] | [MIT License][55] | +| [EqualsVerifier \| release normal jar][56] | [Apache License, Version 2.0][3] | +| [JUnit Jupiter Engine][57] | [Eclipse Public License v2.0][58] | +| [Maven Project Version Getter][59] | [MIT License][60] | +| [Extension integration tests library][61] | [MIT License][62] | ### Plugin Dependencies | Dependency | License | | ------------------------------------------------------- | --------------------------------------------- | -| [SonarQube Scanner for Maven][64] | [GNU LGPL 3][65] | -| [Apache Maven Compiler Plugin][66] | [Apache-2.0][3] | -| [Apache Maven Enforcer Plugin][67] | [Apache-2.0][3] | -| [Maven Flatten Plugin][68] | [Apache Software Licenese][3] | -| [org.sonatype.ossindex.maven:ossindex-maven-plugin][69] | [ASL2][5] | -| [scala-maven-plugin][70] | [Public domain (Unlicense)][71] | -| [ScalaTest Maven Plugin][72] | [the Apache License, ASL Version 2.0][28] | -| [Apache Maven Javadoc Plugin][73] | [Apache-2.0][3] | -| [Maven Surefire Plugin][74] | [Apache-2.0][3] | -| [Versions Maven Plugin][75] | [Apache License, Version 2.0][3] | -| [duplicate-finder-maven-plugin Maven Mojo][76] | [Apache License 2.0][30] | -| [Apache Maven Assembly Plugin][77] | [Apache-2.0][3] | -| [Apache Maven JAR Plugin][78] | [Apache License, Version 2.0][3] | -| [Artifact reference checker and unifier][79] | [MIT License][80] | -| [Maven Failsafe Plugin][81] | [Apache-2.0][3] | -| [JaCoCo :: Maven Plugin][82] | [Eclipse Public License 2.0][83] | -| [error-code-crawler-maven-plugin][84] | [MIT License][85] | -| [Reproducible Build Maven Plugin][86] | [Apache 2.0][5] | -| [Project keeper maven plugin][87] | [The MIT License][88] | -| [OpenFastTrace Maven Plugin][89] | [GNU General Public License v3.0][90] | -| [Scalastyle Maven Plugin][91] | [Apache 2.0][30] | -| [spotless-maven-plugin][92] | [The Apache Software License, Version 2.0][3] | -| [scalafix-maven-plugin][93] | [BSD-3-Clause][21] | -| [Exec Maven Plugin][94] | [Apache License 2][3] | -| [Apache Maven Clean Plugin][95] | [Apache-2.0][3] | +| [SonarQube Scanner for Maven][63] | [GNU LGPL 3][64] | +| [Apache Maven Compiler Plugin][65] | [Apache-2.0][3] | +| [Apache Maven Enforcer Plugin][66] | [Apache-2.0][3] | +| [Maven Flatten Plugin][67] | [Apache Software Licenese][3] | +| [org.sonatype.ossindex.maven:ossindex-maven-plugin][68] | [ASL2][5] | +| [scala-maven-plugin][69] | [Public domain (Unlicense)][70] | +| [ScalaTest Maven Plugin][71] | [the Apache License, ASL Version 2.0][28] | +| [Apache Maven Javadoc Plugin][72] | [Apache-2.0][3] | +| [Maven Surefire Plugin][73] | [Apache-2.0][3] | +| [Versions Maven Plugin][74] | [Apache License, Version 2.0][3] | +| [duplicate-finder-maven-plugin Maven Mojo][75] | [Apache License 2.0][30] | +| [Apache Maven Assembly Plugin][76] | [Apache-2.0][3] | +| [Apache Maven JAR Plugin][77] | [Apache License, Version 2.0][3] | +| [Artifact reference checker and unifier][78] | [MIT License][79] | +| [Maven Failsafe Plugin][80] | [Apache-2.0][3] | +| [JaCoCo :: Maven Plugin][81] | [Eclipse Public License 2.0][82] | +| [error-code-crawler-maven-plugin][83] | [MIT License][84] | +| [Reproducible Build Maven Plugin][85] | [Apache 2.0][5] | +| [Project keeper maven plugin][86] | [The MIT License][87] | +| [OpenFastTrace Maven Plugin][88] | [GNU General Public License v3.0][89] | +| [Scalastyle Maven Plugin][90] | [Apache 2.0][30] | +| [spotless-maven-plugin][91] | [The Apache Software License, Version 2.0][3] | +| [scalafix-maven-plugin][92] | [BSD-3-Clause][21] | +| [Exec Maven Plugin][93] | [Apache License 2][3] | +| [Apache Maven Clean Plugin][94] | [Apache-2.0][3] | ## Extension @@ -96,7 +96,7 @@ | Dependency | License | | ----------------------------------------- | ------- | -| [@exasol/extension-manager-interface][96] | MIT | +| [@exasol/extension-manager-interface][95] | MIT | [0]: https://www.scala-lang.org/ [1]: https://www.apache.org/licenses/LICENSE-2.0 @@ -142,56 +142,55 @@ [41]: http://www.scalatest.org [42]: https://github.com/scalatest/scalatestplus-mockito [43]: https://github.com/mockito/mockito -[44]: https://github.com/mockito/mockito/blob/main/LICENSE +[44]: https://opensource.org/licenses/MIT [45]: http://hamcrest.org/JavaHamcrest/ [46]: http://opensource.org/licenses/BSD-3-Clause [47]: https://github.com/testcontainers/testcontainers-scala -[48]: https://opensource.org/licenses/MIT -[49]: https://java.testcontainers.org -[50]: http://opensource.org/licenses/MIT -[51]: https://github.com/exasol/exasol-testcontainers/ -[52]: https://github.com/exasol/exasol-testcontainers/blob/main/LICENSE -[53]: https://github.com/exasol/test-db-builder-java/ -[54]: https://github.com/exasol/test-db-builder-java/blob/main/LICENSE -[55]: https://github.com/exasol/hamcrest-resultset-matcher/ -[56]: https://github.com/exasol/hamcrest-resultset-matcher/blob/main/LICENSE -[57]: https://www.jqno.nl/equalsverifier -[58]: https://junit.org/junit5/ -[59]: https://www.eclipse.org/legal/epl-v20.html -[60]: https://github.com/exasol/maven-project-version-getter/ -[61]: https://github.com/exasol/maven-project-version-getter/blob/main/LICENSE -[62]: https://github.com/exasol/extension-manager/ -[63]: https://github.com/exasol/extension-manager/blob/main/LICENSE -[64]: http://sonarsource.github.io/sonar-scanner-maven/ -[65]: http://www.gnu.org/licenses/lgpl.txt -[66]: https://maven.apache.org/plugins/maven-compiler-plugin/ -[67]: https://maven.apache.org/enforcer/maven-enforcer-plugin/ -[68]: https://www.mojohaus.org/flatten-maven-plugin/ -[69]: https://sonatype.github.io/ossindex-maven/maven-plugin/ -[70]: http://github.com/davidB/scala-maven-plugin -[71]: http://unlicense.org/ -[72]: https://www.scalatest.org/user_guide/using_the_scalatest_maven_plugin -[73]: https://maven.apache.org/plugins/maven-javadoc-plugin/ -[74]: https://maven.apache.org/surefire/maven-surefire-plugin/ -[75]: https://www.mojohaus.org/versions/versions-maven-plugin/ -[76]: https://basepom.github.io/duplicate-finder-maven-plugin -[77]: https://maven.apache.org/plugins/maven-assembly-plugin/ -[78]: https://maven.apache.org/plugins/maven-jar-plugin/ -[79]: https://github.com/exasol/artifact-reference-checker-maven-plugin/ -[80]: https://github.com/exasol/artifact-reference-checker-maven-plugin/blob/main/LICENSE -[81]: https://maven.apache.org/surefire/maven-failsafe-plugin/ -[82]: https://www.jacoco.org/jacoco/trunk/doc/maven.html -[83]: https://www.eclipse.org/legal/epl-2.0/ -[84]: https://github.com/exasol/error-code-crawler-maven-plugin/ -[85]: https://github.com/exasol/error-code-crawler-maven-plugin/blob/main/LICENSE -[86]: http://zlika.github.io/reproducible-build-maven-plugin -[87]: https://github.com/exasol/project-keeper/ -[88]: https://github.com/exasol/project-keeper/blob/main/LICENSE -[89]: https://github.com/itsallcode/openfasttrace-maven-plugin -[90]: https://www.gnu.org/licenses/gpl-3.0.html -[91]: http://www.scalastyle.org -[92]: https://github.com/diffplug/spotless -[93]: https://github.com/evis/scalafix-maven-plugin -[94]: https://www.mojohaus.org/exec-maven-plugin -[95]: https://maven.apache.org/plugins/maven-clean-plugin/ -[96]: https://registry.npmjs.org/@exasol/extension-manager-interface/-/extension-manager-interface-0.3.1.tgz +[48]: https://java.testcontainers.org +[49]: http://opensource.org/licenses/MIT +[50]: https://github.com/exasol/exasol-testcontainers/ +[51]: https://github.com/exasol/exasol-testcontainers/blob/main/LICENSE +[52]: https://github.com/exasol/test-db-builder-java/ +[53]: https://github.com/exasol/test-db-builder-java/blob/main/LICENSE +[54]: https://github.com/exasol/hamcrest-resultset-matcher/ +[55]: https://github.com/exasol/hamcrest-resultset-matcher/blob/main/LICENSE +[56]: https://www.jqno.nl/equalsverifier +[57]: https://junit.org/junit5/ +[58]: https://www.eclipse.org/legal/epl-v20.html +[59]: https://github.com/exasol/maven-project-version-getter/ +[60]: https://github.com/exasol/maven-project-version-getter/blob/main/LICENSE +[61]: https://github.com/exasol/extension-manager/ +[62]: https://github.com/exasol/extension-manager/blob/main/LICENSE +[63]: http://sonarsource.github.io/sonar-scanner-maven/ +[64]: http://www.gnu.org/licenses/lgpl.txt +[65]: https://maven.apache.org/plugins/maven-compiler-plugin/ +[66]: https://maven.apache.org/enforcer/maven-enforcer-plugin/ +[67]: https://www.mojohaus.org/flatten-maven-plugin/ +[68]: https://sonatype.github.io/ossindex-maven/maven-plugin/ +[69]: http://github.com/davidB/scala-maven-plugin +[70]: http://unlicense.org/ +[71]: https://www.scalatest.org/user_guide/using_the_scalatest_maven_plugin +[72]: https://maven.apache.org/plugins/maven-javadoc-plugin/ +[73]: https://maven.apache.org/surefire/maven-surefire-plugin/ +[74]: https://www.mojohaus.org/versions/versions-maven-plugin/ +[75]: https://basepom.github.io/duplicate-finder-maven-plugin +[76]: https://maven.apache.org/plugins/maven-assembly-plugin/ +[77]: https://maven.apache.org/plugins/maven-jar-plugin/ +[78]: https://github.com/exasol/artifact-reference-checker-maven-plugin/ +[79]: https://github.com/exasol/artifact-reference-checker-maven-plugin/blob/main/LICENSE +[80]: https://maven.apache.org/surefire/maven-failsafe-plugin/ +[81]: https://www.jacoco.org/jacoco/trunk/doc/maven.html +[82]: https://www.eclipse.org/legal/epl-2.0/ +[83]: https://github.com/exasol/error-code-crawler-maven-plugin/ +[84]: https://github.com/exasol/error-code-crawler-maven-plugin/blob/main/LICENSE +[85]: http://zlika.github.io/reproducible-build-maven-plugin +[86]: https://github.com/exasol/project-keeper/ +[87]: https://github.com/exasol/project-keeper/blob/main/LICENSE +[88]: https://github.com/itsallcode/openfasttrace-maven-plugin +[89]: https://www.gnu.org/licenses/gpl-3.0.html +[90]: http://www.scalastyle.org +[91]: https://github.com/diffplug/spotless +[92]: https://github.com/evis/scalafix-maven-plugin +[93]: https://www.mojohaus.org/exec-maven-plugin +[94]: https://maven.apache.org/plugins/maven-clean-plugin/ +[95]: https://registry.npmjs.org/@exasol/extension-manager-interface/-/extension-manager-interface-0.4.0.tgz diff --git a/doc/changes/changelog.md b/doc/changes/changelog.md index c0a81c74..847523c8 100644 --- a/doc/changes/changelog.md +++ b/doc/changes/changelog.md @@ -1,5 +1,6 @@ # Changes +* [2.7.7](changes_2.7.7.md) * [2.7.6](changes_2.7.6.md) * [2.7.5](changes_2.7.5.md) * [2.7.4](changes_2.7.4.md) diff --git a/doc/changes/changes_2.7.7.md b/doc/changes/changes_2.7.7.md new file mode 100644 index 00000000..cd578841 --- /dev/null +++ b/doc/changes/changes_2.7.7.md @@ -0,0 +1,49 @@ +# Cloud Storage Extension 2.7.7, released 2023-??-?? + +Code name: + +## Summary + +## Features + +* ISSUE_NUMBER: description + +## Dependency Updates + +### Cloud Storage Extension + +#### Compile Dependency Updates + +* Updated `com.google.protobuf:protobuf-java:3.24.4` to `3.25.0` +* Updated `io.dropwizard.metrics:metrics-core:4.2.21` to `4.2.22` +* Updated `org.jetbrains.kotlin:kotlin-stdlib:1.9.10` to `1.9.20` + +#### Test Dependency Updates + +* Updated `com.exasol:extension-manager-integration-test-java:0.5.4` 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.mockito:mockito-core:5.6.0` to `5.7.0` + +#### 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 + +#### Compile Dependency Updates + +* Updated `@exasol/extension-manager-interface:0.3.1` to `0.4.0` + +#### Development Dependency Updates + +* Updated `eslint:^8.47.0` to `^8.53.0` +* Updated `@jest/globals:^29.6.3` to `^29.7.0` +* Updated `@types/node:^20.5.4` to `^20.8.10` +* Updated `@typescript-eslint/parser:^6.4.1` to `^6.9.1` +* Updated `typescript:^5.1.6` to `^5.2.2` +* Updated `@typescript-eslint/eslint-plugin:^6.4.1` to `^6.9.1` +* Updated `jest:29.6.3` to `29.7.0` +* Updated `esbuild:^0.19.2` to `^0.19.5` diff --git a/doc/user_guide/user_guide.md b/doc/user_guide/user_guide.md index d77cf823..0fe73d22 100644 --- a/doc/user_guide/user_guide.md +++ b/doc/user_guide/user_guide.md @@ -150,7 +150,7 @@ downloaded jar file is the same as the checksum provided in the releases. To check the SHA256 result of the local jar, run the command: ```sh -sha256sum exasol-cloud-storage-extension-2.7.6.jar +sha256sum exasol-cloud-storage-extension-2.7.7.jar ``` ### Building From Source @@ -180,7 +180,7 @@ mvn clean package -DskipTests=true ``` The assembled jar file should be located at -`target/exasol-cloud-storage-extension-2.7.6.jar`. +`target/exasol-cloud-storage-extension-2.7.7.jar`. ### Create an Exasol Bucket @@ -202,7 +202,7 @@ for the HTTP protocol. Upload the jar file using curl command: ```sh -curl -X PUT -T exasol-cloud-storage-extension-2.7.6.jar \ +curl -X PUT -T exasol-cloud-storage-extension-2.7.7.jar \ http://w:@exasol.datanode.domain.com:2580// ``` @@ -234,7 +234,7 @@ OPEN SCHEMA CLOUD_STORAGE_EXTENSION; CREATE OR REPLACE JAVA SET SCRIPT IMPORT_PATH(...) EMITS (...) AS %scriptclass com.exasol.cloudetl.scriptclasses.FilesImportQueryGenerator; - %jar /buckets/bfsdefault//exasol-cloud-storage-extension-2.7.6.jar; + %jar /buckets/bfsdefault//exasol-cloud-storage-extension-2.7.7.jar; / CREATE OR REPLACE JAVA SCALAR SCRIPT IMPORT_METADATA(...) EMITS ( @@ -244,12 +244,12 @@ CREATE OR REPLACE JAVA SCALAR SCRIPT IMPORT_METADATA(...) EMITS ( end_index DECIMAL(36, 0) ) AS %scriptclass com.exasol.cloudetl.scriptclasses.FilesMetadataReader; - %jar /buckets/bfsdefault//exasol-cloud-storage-extension-2.7.6.jar; + %jar /buckets/bfsdefault//exasol-cloud-storage-extension-2.7.7.jar; / CREATE OR REPLACE JAVA SET SCRIPT IMPORT_FILES(...) EMITS (...) AS %scriptclass com.exasol.cloudetl.scriptclasses.FilesDataImporter; - %jar /buckets/bfsdefault//exasol-cloud-storage-extension-2.7.6.jar; + %jar /buckets/bfsdefault//exasol-cloud-storage-extension-2.7.7.jar; / ``` @@ -268,12 +268,12 @@ OPEN SCHEMA CLOUD_STORAGE_EXTENSION; CREATE OR REPLACE JAVA SET SCRIPT EXPORT_PATH(...) EMITS (...) AS %scriptclass com.exasol.cloudetl.scriptclasses.TableExportQueryGenerator; - %jar /buckets/bfsdefault//exasol-cloud-storage-extension-2.7.6.jar; + %jar /buckets/bfsdefault//exasol-cloud-storage-extension-2.7.7.jar; / CREATE OR REPLACE JAVA SET SCRIPT EXPORT_TABLE(...) EMITS (ROWS_AFFECTED INT) AS %scriptclass com.exasol.cloudetl.scriptclasses.TableDataExporter; - %jar /buckets/bfsdefault//exasol-cloud-storage-extension-2.7.6.jar; + %jar /buckets/bfsdefault//exasol-cloud-storage-extension-2.7.7.jar; / ``` @@ -407,13 +407,13 @@ CREATE OR REPLACE JAVA SCALAR SCRIPT IMPORT_METADATA(...) EMITS ( ) AS %jvmoption -DHTTPS_PROXY=http://username:password@10.10.1.10:1180 %scriptclass com.exasol.cloudetl.scriptclasses.FilesMetadataReader; - %jar /buckets/bfsdefault//exasol-cloud-storage-extension-2.7.6.jar; + %jar /buckets/bfsdefault//exasol-cloud-storage-extension-2.7.7.jar; / CREATE OR REPLACE JAVA SET SCRIPT IMPORT_FILES(...) EMITS (...) AS %jvmoption -DHTTPS_PROXY=http://username:password@10.10.1.10:1180 %scriptclass com.exasol.cloudetl.scriptclasses.FilesDataImporter; - %jar /buckets/bfsdefault//exasol-cloud-storage-extension-2.7.6.jar; + %jar /buckets/bfsdefault//exasol-cloud-storage-extension-2.7.7.jar; / ``` diff --git a/extension/package-lock.json b/extension/package-lock.json index 1f531ba6..1c0b0392 100644 --- a/extension/package-lock.json +++ b/extension/package-lock.json @@ -9,19 +9,19 @@ "version": "0.0.0", "license": "MIT", "dependencies": { - "@exasol/extension-manager-interface": "0.3.1" + "@exasol/extension-manager-interface": "0.4.0" }, "devDependencies": { - "@jest/globals": "^29.6.3", - "@types/node": "^20.5.4", - "@typescript-eslint/eslint-plugin": "^6.4.1", - "@typescript-eslint/parser": "^6.4.1", - "esbuild": "^0.19.2", - "eslint": "^8.47.0", - "jest": "29.6.3", + "@jest/globals": "^29.7.0", + "@types/node": "^20.8.10", + "@typescript-eslint/eslint-plugin": "^6.9.1", + "@typescript-eslint/parser": "^6.9.1", + "esbuild": "^0.19.5", + "eslint": "^8.53.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": { @@ -724,9 +724,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.2.tgz", - "integrity": "sha512-tM8yLeYVe7pRyAu9VMi/Q7aunpLwD139EY1S99xbQkT4/q2qa6eA4ige/WJQYdJ8GBL1K33pPFhPfPdJ/WzT8Q==", + "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" ], @@ -740,9 +740,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.2.tgz", - "integrity": "sha512-lsB65vAbe90I/Qe10OjkmrdxSX4UJDjosDgb8sZUKcg3oefEuW2OT2Vozz8ef7wrJbMcmhvCC+hciF8jY/uAkw==", + "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" ], @@ -756,9 +756,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.2.tgz", - "integrity": "sha512-qK/TpmHt2M/Hg82WXHRc/W/2SGo/l1thtDHZWqFq7oi24AjZ4O/CpPSu6ZuYKFkEgmZlFoa7CooAyYmuvnaG8w==", + "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" ], @@ -772,9 +772,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.2.tgz", - "integrity": "sha512-Ora8JokrvrzEPEpZO18ZYXkH4asCdc1DLdcVy8TGf5eWtPO1Ie4WroEJzwI52ZGtpODy3+m0a2yEX9l+KUn0tA==", + "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" ], @@ -788,9 +788,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.2.tgz", - "integrity": "sha512-tP+B5UuIbbFMj2hQaUr6EALlHOIOmlLM2FK7jeFBobPy2ERdohI4Ka6ZFjZ1ZYsrHE/hZimGuU90jusRE0pwDw==", + "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" ], @@ -804,9 +804,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.2.tgz", - "integrity": "sha512-YbPY2kc0acfzL1VPVK6EnAlig4f+l8xmq36OZkU0jzBVHcOTyQDhnKQaLzZudNJQyymd9OqQezeaBgkTGdTGeQ==", + "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" ], @@ -820,9 +820,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.2.tgz", - "integrity": "sha512-nSO5uZT2clM6hosjWHAsS15hLrwCvIWx+b2e3lZ3MwbYSaXwvfO528OF+dLjas1g3bZonciivI8qKR/Hm7IWGw==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.5.tgz", + "integrity": "sha512-1CCwDHnSSoA0HNwdfoNY0jLfJpd7ygaLAp5EHFos3VWJCRX9DMwWODf96s9TSse39Br7oOTLryRVmBoFwXbuuQ==", "cpu": [ "x64" ], @@ -836,9 +836,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.2.tgz", - "integrity": "sha512-Odalh8hICg7SOD7XCj0YLpYCEc+6mkoq63UnExDCiRA2wXEmGlK5JVrW50vZR9Qz4qkvqnHcpH+OFEggO3PgTg==", + "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" ], @@ -852,9 +852,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.2.tgz", - "integrity": "sha512-ig2P7GeG//zWlU0AggA3pV1h5gdix0MA3wgB+NsnBXViwiGgY77fuN9Wr5uoCrs2YzaYfogXgsWZbm+HGr09xg==", + "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" ], @@ -868,9 +868,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.2.tgz", - "integrity": "sha512-mLfp0ziRPOLSTek0Gd9T5B8AtzKAkoZE70fneiiyPlSnUKKI4lp+mGEnQXcQEHLJAcIYDPSyBvsUbKUG2ri/XQ==", + "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" ], @@ -884,9 +884,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.2.tgz", - "integrity": "sha512-hn28+JNDTxxCpnYjdDYVMNTR3SKavyLlCHHkufHV91fkewpIyQchS1d8wSbmXhs1fiYDpNww8KTFlJ1dHsxeSw==", + "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" ], @@ -900,9 +900,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.2.tgz", - "integrity": "sha512-KbXaC0Sejt7vD2fEgPoIKb6nxkfYW9OmFUK9XQE4//PvGIxNIfPk1NmlHmMg6f25x57rpmEFrn1OotASYIAaTg==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.5.tgz", + "integrity": "sha512-kcjndCSMitUuPJobWCnwQ9lLjiLZUR3QLQmlgaBfMX23UEa7ZOrtufnRds+6WZtIS9HdTXqND4yH8NLoVVIkcg==", "cpu": [ "mips64el" ], @@ -916,9 +916,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.2.tgz", - "integrity": "sha512-dJ0kE8KTqbiHtA3Fc/zn7lCd7pqVr4JcT0JqOnbj4LLzYnp+7h8Qi4yjfq42ZlHfhOCM42rBh0EwHYLL6LEzcw==", + "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" ], @@ -932,9 +932,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.2.tgz", - "integrity": "sha512-7Z/jKNFufZ/bbu4INqqCN6DDlrmOTmdw6D0gH+6Y7auok2r02Ur661qPuXidPOJ+FSgbEeQnnAGgsVynfLuOEw==", + "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" ], @@ -948,9 +948,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.2.tgz", - "integrity": "sha512-U+RinR6aXXABFCcAY4gSlv4CL1oOVvSSCdseQmGO66H+XyuQGZIUdhG56SZaDJQcLmrSfRmx5XZOWyCJPRqS7g==", + "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" ], @@ -964,9 +964,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.2.tgz", - "integrity": "sha512-oxzHTEv6VPm3XXNaHPyUTTte+3wGv7qVQtqaZCrgstI16gCuhNOtBXLEBkBREP57YTd68P0VgDgG73jSD8bwXQ==", + "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" ], @@ -980,9 +980,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.2.tgz", - "integrity": "sha512-WNa5zZk1XpTTwMDompZmvQLHszDDDN7lYjEHCUmAGB83Bgs20EMs7ICD+oKeT6xt4phV4NDdSi/8OfjPbSbZfQ==", + "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" ], @@ -996,9 +996,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.2.tgz", - "integrity": "sha512-S6kI1aT3S++Dedb7vxIuUOb3oAxqxk2Rh5rOXOTYnzN8JzW1VzBd+IqPiSpgitu45042SYD3HCoEyhLKQcDFDw==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.5.tgz", + "integrity": "sha512-sPOfhtzFufQfTBgRnE1DIJjzsXukKSvZxloZbkJDG383q0awVAq600pc1nfqBcl0ice/WN9p4qLc39WhBShRTA==", "cpu": [ "x64" ], @@ -1012,9 +1012,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.2.tgz", - "integrity": "sha512-VXSSMsmb+Z8LbsQGcBMiM+fYObDNRm8p7tkUDMPG/g4fhFX5DEFmjxIEa3N8Zr96SjsJ1woAhF0DUnS3MF3ARw==", + "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" ], @@ -1028,9 +1028,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.2.tgz", - "integrity": "sha512-5NayUlSAyb5PQYFAU9x3bHdsqB88RC3aM9lKDAz4X1mo/EchMIT1Q+pSeBXNgkfNmRecLXA0O8xP+x8V+g/LKg==", + "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" ], @@ -1044,9 +1044,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.2.tgz", - "integrity": "sha512-47gL/ek1v36iN0wL9L4Q2MFdujR0poLZMJwhO2/N3gA89jgHp4MR8DKCmwYtGNksbfJb9JoTtbkoe6sDhg2QTA==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.5.tgz", + "integrity": "sha512-4liggWIA4oDgUxqpZwrDhmEfAH4d0iljanDOK7AnVU89T6CzHon/ony8C5LeOdfgx60x5cnQJFZwEydVlYx4iw==", "cpu": [ "ia32" ], @@ -1060,9 +1060,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.2.tgz", - "integrity": "sha512-tcuhV7ncXBqbt/Ybf0IyrMcwVOAPDckMK9rXNHtF17UTK18OKLpg08glminN06pt2WCoALhXdLfSPbVvK/6fxw==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.5.tgz", + "integrity": "sha512-czTrygUsB/jlM8qEW5MD8bgYU2Xg14lo6kBDXW6HdxKjh8M5PzETGiSHaz9MtbXBYDloHNUAUW2tMiKW4KM9Mw==", "cpu": [ "x64" ], @@ -1100,9 +1100,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", @@ -1123,26 +1123,26 @@ } }, "node_modules/@eslint/js": { - "version": "8.47.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.47.0.tgz", - "integrity": "sha512-P6omY1zv5MItm93kLM8s2vr1HICJH8v0dvddDhysbIuZ+vcjOHg5Zbkf1mTkcmi2JA9oBG2anOkRnW8WJTS8Og==", + "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.10", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", - "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", + "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": "^1.2.1", + "@humanwhocodes/object-schema": "^2.0.1", "debug": "^4.1.1", "minimatch": "^3.0.5" }, @@ -1164,9 +1164,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.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": { @@ -1278,16 +1278,16 @@ } }, "node_modules/@jest/console": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.6.3.tgz", - "integrity": "sha512-ukZbHAdDH4ktZIOKvWs1juAXhiVAdvCyM8zv4S/7Ii3vJSDvMW5k+wOVGMQmHLHUFw3Ko63ZQNy7NI6PSlsD5w==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", "dev": true, "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^29.6.3", - "jest-util": "^29.6.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", "slash": "^3.0.0" }, "engines": { @@ -1295,15 +1295,15 @@ } }, "node_modules/@jest/core": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.6.3.tgz", - "integrity": "sha512-skV1XrfNxfagmjRUrk2FyN5/2YwIzdWVVBa/orUfbLvQUANXxERq2pTvY0I+FinWHjDKB2HRmpveUiph4X0TJw==", + "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.3", - "@jest/reporters": "^29.6.3", - "@jest/test-result": "^29.6.3", - "@jest/transform": "^29.6.3", + "@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", @@ -1311,21 +1311,21 @@ "ci-info": "^3.2.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.6.3", - "jest-config": "^29.6.3", - "jest-haste-map": "^29.6.3", - "jest-message-util": "^29.6.3", + "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.6.3", - "jest-resolve-dependencies": "^29.6.3", - "jest-runner": "^29.6.3", - "jest-runtime": "^29.6.3", - "jest-snapshot": "^29.6.3", - "jest-util": "^29.6.3", - "jest-validate": "^29.6.3", - "jest-watcher": "^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.3", + "pretty-format": "^29.7.0", "slash": "^3.0.0", "strip-ansi": "^6.0.0" }, @@ -1342,37 +1342,37 @@ } }, "node_modules/@jest/environment": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.6.3.tgz", - "integrity": "sha512-u/u3cCztYCfgBiGHsamqP5x+XvucftOGPbf5RJQxfpeC1y4AL8pCjKvPDA3oCmdhZYPgk5AE0VOD/flweR69WA==", + "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.3", + "@jest/fake-timers": "^29.7.0", "@jest/types": "^29.6.3", "@types/node": "*", - "jest-mock": "^29.6.3" + "jest-mock": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/expect": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.6.3.tgz", - "integrity": "sha512-Ic08XbI2jlg6rECy+CGwk/8NDa6VE7UmIG6++9OTPAMnQmNGY28hu69Nf629CWv6T7YMODLbONxDFKdmQeI9FA==", + "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.3", - "jest-snapshot": "^29.6.3" + "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.3", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.6.3.tgz", - "integrity": "sha512-nvOEW4YoqRKD9HBJ9OJ6przvIvP9qilp5nAn1462P5ZlL/MM9SgPEZFyjTGPfs7QkocdUsJa6KjHhyRn4ueItA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", "dev": true, "dependencies": { "jest-get-type": "^29.6.3" @@ -1382,47 +1382,47 @@ } }, "node_modules/@jest/fake-timers": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.6.3.tgz", - "integrity": "sha512-pa1wmqvbj6eX0nMvOM2VDAWvJOI5A/Mk3l8O7n7EsAh71sMZblaKO9iT4GjIj0LwwK3CP/Jp1ypEV0x3m89RvA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", "dev": true, "dependencies": { "@jest/types": "^29.6.3", "@sinonjs/fake-timers": "^10.0.2", "@types/node": "*", - "jest-message-util": "^29.6.3", - "jest-mock": "^29.6.3", - "jest-util": "^29.6.3" + "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.3", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.6.3.tgz", - "integrity": "sha512-RB+uI+CZMHntzlnOPlll5x/jgRff3LEPl/td/jzMXiIgR0iIhKq9qm1HLU+EC52NuoVy/1swit/sDGjVn4bc6A==", + "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.3", - "@jest/expect": "^29.6.3", + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", "@jest/types": "^29.6.3", - "jest-mock": "^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.3", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.6.3.tgz", - "integrity": "sha512-kGz59zMi0GkVjD2CJeYWG9k6cvj7eBqt9aDAqo2rcCLRTYlvQ62Gu/n+tOmJMBHGjzeijjuCENjzTyYBgrtLUw==", + "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.3", - "@jest/test-result": "^29.6.3", - "@jest/transform": "^29.6.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", "@jest/types": "^29.6.3", "@jridgewell/trace-mapping": "^0.3.18", "@types/node": "*", @@ -1436,9 +1436,9 @@ "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.6.3", - "jest-util": "^29.6.3", - "jest-worker": "^29.6.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", "slash": "^3.0.0", "string-length": "^4.0.1", "strip-ansi": "^6.0.0", @@ -1483,12 +1483,12 @@ } }, "node_modules/@jest/test-result": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.6.3.tgz", - "integrity": "sha512-k7ZZaNvOSMBHPZYiy0kuiaFoyansR5QnTwDux1EjK3kD5iWpRVyJIJ0RAIV39SThafchuW59vra7F8mdy5Hfgw==", + "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.3", + "@jest/console": "^29.7.0", "@jest/types": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" @@ -1498,14 +1498,14 @@ } }, "node_modules/@jest/test-sequencer": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.6.3.tgz", - "integrity": "sha512-/SmijaAU2TY9ComFGIYa6Z+fmKqQMnqs2Nmwb0P/Z/tROdZ7M0iruES1EaaU9PBf8o9uED5xzaJ3YPFEIcDgAg==", + "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.3", + "@jest/test-result": "^29.7.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.3", + "jest-haste-map": "^29.7.0", "slash": "^3.0.0" }, "engines": { @@ -1513,9 +1513,9 @@ } }, "node_modules/@jest/transform": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.6.3.tgz", - "integrity": "sha512-dPIc3DsvMZ/S8ut4L2ViCj265mKO0owB0wfzBv2oGzL9pQ+iRvJewHqLBmsGb7XFb5UotWIEtvY5A/lnylaIoQ==", + "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", @@ -1526,9 +1526,9 @@ "convert-source-map": "^2.0.0", "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.3", + "jest-haste-map": "^29.7.0", "jest-regex-util": "^29.6.3", - "jest-util": "^29.6.3", + "jest-util": "^29.7.0", "micromatch": "^4.0.4", "pirates": "^4.0.4", "slash": "^3.0.0", @@ -1728,9 +1728,9 @@ } }, "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": "*" @@ -1761,27 +1761,30 @@ } }, "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": { - "version": "20.5.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.4.tgz", - "integrity": "sha512-Y9vbIAoM31djQZrPYjpTLo0XlaSwOIsrlfE3LpulZeRblttsLQRFRlBAppW0LOxyT3ALj2M5vU1ucQQayQH3jA==", - "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.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": { - "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": { @@ -1800,16 +1803,16 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.4.1.tgz", - "integrity": "sha512-3F5PtBzUW0dYlq77Lcqo13fv+58KDwUib3BddilE8ajPJT+faGgxmI9Sw+I8ZS22BYwoir9ZhNXcLi+S+I2bkw==", + "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.4.1", - "@typescript-eslint/type-utils": "6.4.1", - "@typescript-eslint/utils": "6.4.1", - "@typescript-eslint/visitor-keys": "6.4.1", + "@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", @@ -1835,15 +1838,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.4.1.tgz", - "integrity": "sha512-610G6KHymg9V7EqOaNBMtD1GgpAmGROsmfHJPXNLCU9bfIuLrkdOygltK784F6Crboyd5tBFayPB7Sf0McrQwg==", + "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.4.1", - "@typescript-eslint/types": "6.4.1", - "@typescript-eslint/typescript-estree": "6.4.1", - "@typescript-eslint/visitor-keys": "6.4.1", + "@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": { @@ -1863,13 +1866,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.4.1.tgz", - "integrity": "sha512-p/OavqOQfm4/Hdrr7kvacOSFjwQ2rrDVJRPxt/o0TOWdFnjJptnjnZ+sYDR7fi4OimvIuKp+2LCkc+rt9fIW+A==", + "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.4.1", - "@typescript-eslint/visitor-keys": "6.4.1" + "@typescript-eslint/types": "6.9.1", + "@typescript-eslint/visitor-keys": "6.9.1" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -1880,13 +1883,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.4.1.tgz", - "integrity": "sha512-7ON8M8NXh73SGZ5XvIqWHjgX2f+vvaOarNliGhjrJnv1vdjG0LVIz+ToYfPirOoBi56jxAKLfsLm40+RvxVVXA==", + "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.4.1", - "@typescript-eslint/utils": "6.4.1", + "@typescript-eslint/typescript-estree": "6.9.1", + "@typescript-eslint/utils": "6.9.1", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, @@ -1907,9 +1910,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.1.tgz", - "integrity": "sha512-zAAopbNuYu++ijY1GV2ylCsQsi3B8QvfPHVqhGdDcbx/NK5lkqMnCGU53amAjccSpk+LfeONxwzUhDzArSfZJg==", + "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" @@ -1920,13 +1923,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.1.tgz", - "integrity": "sha512-xF6Y7SatVE/OyV93h1xGgfOkHr2iXuo8ip0gbfzaKeGGuKiAnzS+HtVhSPx8Www243bwlW8IF7X0/B62SzFftg==", + "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.4.1", - "@typescript-eslint/visitor-keys": "6.4.1", + "@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", @@ -1947,17 +1950,17 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.4.1.tgz", - "integrity": "sha512-F/6r2RieNeorU0zhqZNv89s9bDZSovv3bZQpUNOmmQK1L80/cV4KEu95YUJWi75u5PhboFoKUJBnZ4FQcoqhDw==", + "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.4.1", - "@typescript-eslint/types": "6.4.1", - "@typescript-eslint/typescript-estree": "6.4.1", + "@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": { @@ -1972,12 +1975,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.4.1.tgz", - "integrity": "sha512-y/TyRJsbZPkJIZQXrHfdnxVnxyKegnpEvnRGNam7s3TRR2ykGefEWOhaef00/UUN3IZxizS7BTO3svd3lCOJRQ==", + "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.4.1", + "@typescript-eslint/types": "6.9.1", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -1988,6 +1991,12 @@ "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", @@ -2120,12 +2129,12 @@ } }, "node_modules/babel-jest": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.6.3.tgz", - "integrity": "sha512-1Ne93zZZEy5XmTa4Q+W5+zxBrDpExX8E3iy+xJJ+24ewlfo/T3qHfQJCzi/MMVFmBQDNxtRR/Gfd2dwb/0yrQw==", + "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.3", + "@jest/transform": "^29.7.0", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.1.1", "babel-preset-jest": "^29.6.3", @@ -2466,6 +2475,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", @@ -2617,9 +2647,9 @@ } }, "node_modules/esbuild": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.2.tgz", - "integrity": "sha512-G6hPax8UbFakEj3hWO0Vs52LQ8k3lnBhxZWomUJDxfz3rZTLqF5k/FCzuNdLx2RbpBiQQF9H9onlDDH1lZsnjg==", + "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": { @@ -2629,28 +2659,28 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/android-arm": "0.19.2", - "@esbuild/android-arm64": "0.19.2", - "@esbuild/android-x64": "0.19.2", - "@esbuild/darwin-arm64": "0.19.2", - "@esbuild/darwin-x64": "0.19.2", - "@esbuild/freebsd-arm64": "0.19.2", - "@esbuild/freebsd-x64": "0.19.2", - "@esbuild/linux-arm": "0.19.2", - "@esbuild/linux-arm64": "0.19.2", - "@esbuild/linux-ia32": "0.19.2", - "@esbuild/linux-loong64": "0.19.2", - "@esbuild/linux-mips64el": "0.19.2", - "@esbuild/linux-ppc64": "0.19.2", - "@esbuild/linux-riscv64": "0.19.2", - "@esbuild/linux-s390x": "0.19.2", - "@esbuild/linux-x64": "0.19.2", - "@esbuild/netbsd-x64": "0.19.2", - "@esbuild/openbsd-x64": "0.19.2", - "@esbuild/sunos-x64": "0.19.2", - "@esbuild/win32-arm64": "0.19.2", - "@esbuild/win32-ia32": "0.19.2", - "@esbuild/win32-x64": "0.19.2" + "@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": { @@ -2675,18 +2705,19 @@ } }, "node_modules/eslint": { - "version": "8.47.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz", - "integrity": "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==", + "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.47.0", - "@humanwhocodes/config-array": "^0.11.10", + "@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", + "@ungap/structured-clone": "^1.2.0", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -2861,16 +2892,16 @@ } }, "node_modules/expect": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.6.3.tgz", - "integrity": "sha512-x1vY4LlEMWUYVZQrFi4ZANXFwqYbJ/JNQspLVvzhW2BNY28aNcXMQH6imBbt+RBf5sVRTodYHXtSP/TLEU0Dxw==", + "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.3", + "@jest/expect-utils": "^29.7.0", "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.6.3", - "jest-message-util": "^29.6.3", - "jest-util": "^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" @@ -2883,9 +2914,9 @@ "dev": true }, "node_modules/fast-glob": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -3020,10 +3051,13 @@ } }, "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 + "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", @@ -3097,9 +3131,9 @@ } }, "node_modules/globals": { - "version": "13.21.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", - "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", + "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" @@ -3143,18 +3177,6 @@ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "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==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "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", @@ -3164,6 +3186,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", @@ -3255,12 +3289,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" @@ -3351,9 +3385,9 @@ } }, "node_modules/istanbul-lib-instrument": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.0.tgz", - "integrity": "sha512-x58orMzEVfzPUKqlbLd1hXCnySCxKdDKa6Rjg97CwuLLRI4g3FHTdnExu1OqffVFay6zeMW+T6/DowFLndWnIw==", + "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", @@ -3408,15 +3442,15 @@ } }, "node_modules/jest": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.6.3.tgz", - "integrity": "sha512-alueLuoPCDNHFcFGmgETR4KpQ+0ff3qVaiJwxQM4B5sC0CvXcgg4PEi7xrDkxuItDmdz/FVc7SSit4KEu8GRvw==", + "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.3", + "@jest/core": "^29.7.0", "@jest/types": "^29.6.3", "import-local": "^3.0.2", - "jest-cli": "^29.6.3" + "jest-cli": "^29.7.0" }, "bin": { "jest": "bin/jest.js" @@ -3434,13 +3468,13 @@ } }, "node_modules/jest-changed-files": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.6.3.tgz", - "integrity": "sha512-G5wDnElqLa4/c66ma5PG9eRjE342lIbF6SUnTJi26C3J28Fv2TVY2rOyKB9YGbSA5ogwevgmxc4j4aVjrEK6Yg==", + "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.6.3", + "jest-util": "^29.7.0", "p-limit": "^3.1.0" }, "engines": { @@ -3448,28 +3482,28 @@ } }, "node_modules/jest-circus": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.6.3.tgz", - "integrity": "sha512-p0R5YqZEMnOpHqHLWRSjm2z/0p6RNsrNE/GRRT3eli8QGOAozj6Ys/3Tv+Ej+IfltJoSPwcQ6/hOCRkNlxLLCw==", + "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.3", - "@jest/expect": "^29.6.3", - "@jest/test-result": "^29.6.3", + "@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.3", - "jest-matcher-utils": "^29.6.3", - "jest-message-util": "^29.6.3", - "jest-runtime": "^29.6.3", - "jest-snapshot": "^29.6.3", - "jest-util": "^29.6.3", + "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.3", + "pretty-format": "^29.7.0", "pure-rand": "^6.0.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" @@ -3479,22 +3513,21 @@ } }, "node_modules/jest-cli": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.6.3.tgz", - "integrity": "sha512-KuPdXUPXQIf0t6DvmG8MV4QyhcjR1a6ruKl3YL7aGn/AQ8JkROwFkWzEpDIpt11Qy188dHbRm8WjwMsV/4nmnQ==", + "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.3", - "@jest/test-result": "^29.6.3", + "@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.3", - "jest-util": "^29.6.3", - "jest-validate": "^29.6.3", - "prompts": "^2.0.1", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", "yargs": "^17.3.1" }, "bin": { @@ -3513,31 +3546,31 @@ } }, "node_modules/jest-config": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.6.3.tgz", - "integrity": "sha512-nb9bOq2aEqogbyL4F9mLkAeQGAgNt7Uz6U59YtQDIxFPiL7Ejgq0YIrp78oyEHD6H4CIV/k7mFrK7eFDzUJ69w==", + "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.3", + "@jest/test-sequencer": "^29.7.0", "@jest/types": "^29.6.3", - "babel-jest": "^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.3", - "jest-environment-node": "^29.6.3", + "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.6.3", - "jest-runner": "^29.6.3", - "jest-util": "^29.6.3", - "jest-validate": "^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.3", + "pretty-format": "^29.7.0", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" }, @@ -3558,24 +3591,24 @@ } }, "node_modules/jest-diff": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.6.3.tgz", - "integrity": "sha512-3sw+AdWnwH9sSNohMRKA7JiYUJSRr/WS6+sEFfBuhxU5V5GlEVKfvUn8JuMHE0wqKowemR1C2aHy8VtXbaV8dQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "dev": true, "dependencies": { "chalk": "^4.0.0", "diff-sequences": "^29.6.3", "jest-get-type": "^29.6.3", - "pretty-format": "^29.6.3" + "pretty-format": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-docblock": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.6.3.tgz", - "integrity": "sha512-2+H+GOTQBEm2+qFSQ7Ma+BvyV+waiIFxmZF5LdpBsAEjWX8QYjSCa4FrkIYtbfXUJJJnFCYrOtt6TZ+IAiTjBQ==", + "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" @@ -3585,33 +3618,33 @@ } }, "node_modules/jest-each": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.6.3.tgz", - "integrity": "sha512-KoXfJ42k8cqbkfshW7sSHcdfnv5agDdHCPA87ZBdmHP+zJstTJc0ttQaJ/x7zK6noAL76hOuTIJ6ZkQRS5dcyg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", "dev": true, "dependencies": { "@jest/types": "^29.6.3", "chalk": "^4.0.0", "jest-get-type": "^29.6.3", - "jest-util": "^29.6.3", - "pretty-format": "^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.3", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.6.3.tgz", - "integrity": "sha512-PKl7upfPJXMYbWpD+60o4HP86KvFO2c9dZ+Zr6wUzsG5xcPx/65o3ArNgHW5M0RFvLYdW4/aieR4JSooD0a2ew==", + "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.3", - "@jest/fake-timers": "^29.6.3", + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", "@jest/types": "^29.6.3", "@types/node": "*", - "jest-mock": "^29.6.3", - "jest-util": "^29.6.3" + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -3627,9 +3660,9 @@ } }, "node_modules/jest-haste-map": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.6.3.tgz", - "integrity": "sha512-GecR5YavfjkhOytEFHAeI6aWWG3f/cOKNB1YJvj/B76xAmeVjy4zJUYobGF030cRmKaO1FBw3V8CZZ6KVh9ZSw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", "dev": true, "dependencies": { "@jest/types": "^29.6.3", @@ -3639,8 +3672,8 @@ "fb-watchman": "^2.0.0", "graceful-fs": "^4.2.9", "jest-regex-util": "^29.6.3", - "jest-util": "^29.6.3", - "jest-worker": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", "micromatch": "^4.0.4", "walker": "^1.0.8" }, @@ -3652,37 +3685,37 @@ } }, "node_modules/jest-leak-detector": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.6.3.tgz", - "integrity": "sha512-0kfbESIHXYdhAdpLsW7xdwmYhLf1BRu4AA118/OxFm0Ho1b2RcTmO4oF6aAMaxpxdxnJ3zve2rgwzNBD4Zbm7Q==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", "dev": true, "dependencies": { "jest-get-type": "^29.6.3", - "pretty-format": "^29.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.3", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.6.3.tgz", - "integrity": "sha512-6ZrMYINZdwduSt5Xu18/n49O1IgXdjsfG7NEZaQws9k69eTKWKcVbJBw/MZsjOZe2sSyJFmuzh8042XWwl54Zg==", + "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.3", + "jest-diff": "^29.7.0", "jest-get-type": "^29.6.3", - "pretty-format": "^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.3", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.6.3.tgz", - "integrity": "sha512-FtzaEEHzjDpQp51HX4UMkPZjy46ati4T5pEMyM6Ik48ztu4T9LQplZ6OsimHx7EuM9dfEh5HJa6D3trEftu3dA==", + "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", @@ -3691,7 +3724,7 @@ "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^29.6.3", + "pretty-format": "^29.7.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, @@ -3700,14 +3733,14 @@ } }, "node_modules/jest-mock": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.3.tgz", - "integrity": "sha512-Z7Gs/mOyTSR4yPsaZ72a/MtuK6RnC3JYqWONe48oLaoEcYwEDxqvbXz85G4SJrm2Z5Ar9zp6MiHF4AlFlRM4Pg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "dev": true, "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", - "jest-util": "^29.6.3" + "jest-util": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -3740,17 +3773,17 @@ } }, "node_modules/jest-resolve": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.6.3.tgz", - "integrity": "sha512-WMXwxhvzDeA/J+9jz1i8ZKGmbw/n+s988EiUvRI4egM+eTn31Hb5v10Re3slG3/qxntkBt2/6GkQVDGu6Bwyhw==", + "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.3", + "jest-haste-map": "^29.7.0", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.6.3", - "jest-validate": "^29.6.3", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", "resolve": "^1.20.0", "resolve.exports": "^2.0.0", "slash": "^3.0.0" @@ -3760,43 +3793,43 @@ } }, "node_modules/jest-resolve-dependencies": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.3.tgz", - "integrity": "sha512-iah5nhSPTwtUV7yzpTc9xGg8gP3Ch2VNsuFMsKoCkNCrQSbFtx5KRPemmPJ32AUhTSDqJXB6djPN6zAaUGV53g==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", "dev": true, "dependencies": { "jest-regex-util": "^29.6.3", - "jest-snapshot": "^29.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.3", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.6.3.tgz", - "integrity": "sha512-E4zsMhQnjhirFPhDTJgoLMWUrVCDij/KGzWlbslDHGuO8Hl2pVUfOiygMzVZtZq+BzmlqwEr7LYmW+WFLlmX8w==", + "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.3", - "@jest/environment": "^29.6.3", - "@jest/test-result": "^29.6.3", - "@jest/transform": "^29.6.3", + "@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.6.3", - "jest-environment-node": "^29.6.3", - "jest-haste-map": "^29.6.3", - "jest-leak-detector": "^29.6.3", - "jest-message-util": "^29.6.3", - "jest-resolve": "^29.6.3", - "jest-runtime": "^29.6.3", - "jest-util": "^29.6.3", - "jest-watcher": "^29.6.3", - "jest-worker": "^29.6.3", + "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" }, @@ -3805,17 +3838,17 @@ } }, "node_modules/jest-runtime": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.6.3.tgz", - "integrity": "sha512-VM0Z3a9xaqizGpEKwCOIhImkrINYzxgwk8oQAvrmAiXX8LNrJrRjyva30RkuRY0ETAotHLlUcd2moviCA1hgsQ==", + "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.6.3", - "@jest/fake-timers": "^29.6.3", - "@jest/globals": "^29.6.3", + "@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.6.3", - "@jest/transform": "^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", @@ -3823,13 +3856,13 @@ "collect-v8-coverage": "^1.0.0", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.3", - "jest-message-util": "^29.6.3", - "jest-mock": "^29.6.3", + "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.6.3", - "jest-snapshot": "^29.6.3", - "jest-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" }, @@ -3838,9 +3871,9 @@ } }, "node_modules/jest-snapshot": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.6.3.tgz", - "integrity": "sha512-66Iu7H1ojiveQMGFnKecHIZPPPBjZwfQEnF6wxqpxGf57sV3YSUtAb5/sTKM5TPa3OndyxZp1wxHFbmgVhc53w==", + "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", @@ -3848,20 +3881,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.3", - "@jest/transform": "^29.6.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", "@jest/types": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^29.6.3", + "expect": "^29.7.0", "graceful-fs": "^4.2.9", - "jest-diff": "^29.6.3", + "jest-diff": "^29.7.0", "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.6.3", - "jest-message-util": "^29.6.3", - "jest-util": "^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.3", + "pretty-format": "^29.7.0", "semver": "^7.5.3" }, "engines": { @@ -3869,9 +3902,9 @@ } }, "node_modules/jest-util": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.6.3.tgz", - "integrity": "sha512-QUjna/xSy4B32fzcKTSz1w7YYzgiHrjjJjevdRf61HYk998R5vVMMNmrHESYZVDS5DSWs+1srPLPKxXPkeSDOA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dev": true, "dependencies": { "@jest/types": "^29.6.3", @@ -3886,9 +3919,9 @@ } }, "node_modules/jest-validate": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.6.3.tgz", - "integrity": "sha512-e7KWZcAIX+2W1o3cHfnqpGajdCs1jSM3DkXjGeLSNmCazv1EeI1ggTeK5wdZhF+7N+g44JI2Od3veojoaumlfg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", "dev": true, "dependencies": { "@jest/types": "^29.6.3", @@ -3896,7 +3929,7 @@ "chalk": "^4.0.0", "jest-get-type": "^29.6.3", "leven": "^3.1.0", - "pretty-format": "^29.6.3" + "pretty-format": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -3915,18 +3948,18 @@ } }, "node_modules/jest-watcher": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.6.3.tgz", - "integrity": "sha512-NgpFjZ2U2MKusjidbi4Oiu7tfs+nrgdIxIEVROvH1cFmOei9Uj25lwkMsakqLnH/s0nEcvxO1ck77FiRlcnpZg==", + "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.3", + "@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.3", + "jest-util": "^29.7.0", "string-length": "^4.0.1" }, "engines": { @@ -3934,13 +3967,13 @@ } }, "node_modules/jest-worker": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.3.tgz", - "integrity": "sha512-wacANXecZ/GbQakpf2CClrqrlwsYYDSXFd4fIGdL+dXpM2GWoJ+6bhQ7vR3TKi3+gkSfBkjy1/khH/WrYS4Q6g==", + "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.3", + "jest-util": "^29.7.0", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, @@ -4473,9 +4506,9 @@ } }, "node_modules/pretty-format": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.3.tgz", - "integrity": "sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "dependencies": { "@jest/schemas": "^29.6.3", @@ -4512,18 +4545,18 @@ } }, "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" } }, "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": [ { @@ -4572,9 +4605,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", @@ -5068,9 +5101,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", @@ -5080,6 +5113,12 @@ "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.11", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", @@ -5126,25 +5165,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 52a28fba..9a074a4c 100644 --- a/extension/package.json +++ b/extension/package.json @@ -14,18 +14,18 @@ "test-watch": "jest --watch" }, "dependencies": { - "@exasol/extension-manager-interface": "0.3.1" + "@exasol/extension-manager-interface": "0.4.0" }, "devDependencies": { - "@jest/globals": "^29.6.3", - "@types/node": "^20.5.4", - "@typescript-eslint/eslint-plugin": "^6.4.1", - "@typescript-eslint/parser": "^6.4.1", - "esbuild": "^0.19.2", - "eslint": "^8.47.0", - "jest": "29.6.3", + "@jest/globals": "^29.7.0", + "@types/node": "^20.8.10", + "@typescript-eslint/eslint-plugin": "^6.9.1", + "@typescript-eslint/parser": "^6.9.1", + "esbuild": "^0.19.5", + "eslint": "^8.53.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 diff --git a/extension/src/extension.ts b/extension/src/extension.ts index 0b7d4345..27cf758f 100644 --- a/extension/src/extension.ts +++ b/extension/src/extension.ts @@ -7,31 +7,36 @@ const SCRIPTS: ScriptDefinition[] = [ { name: "IMPORT_PATH", type: "SET", - args: "...", + parameters: "...", + emitParameters: "...", scriptClass: "com.exasol.cloudetl.scriptclasses.FilesImportQueryGenerator" }, { name: "IMPORT_METADATA", type: "SCALAR", - args: `filename VARCHAR(2000), partition_index VARCHAR(100), start_index DECIMAL(36, 0), end_index DECIMAL(36, 0)`, + parameters: "...", + emitParameters: `filename VARCHAR(2000), partition_index VARCHAR(100), start_index DECIMAL(36, 0), end_index DECIMAL(36, 0)`, scriptClass: "com.exasol.cloudetl.scriptclasses.FilesMetadataReader" }, { name: "IMPORT_FILES", type: "SET", - args: "...", + parameters: "...", + emitParameters: "...", scriptClass: "com.exasol.cloudetl.scriptclasses.FilesDataImporter" }, { name: "EXPORT_PATH", type: "SET", - args: "...", + parameters: "...", + emitParameters: "...", scriptClass: "com.exasol.cloudetl.scriptclasses.TableExportQueryGenerator" }, { name: "EXPORT_TABLE", type: "SET", - args: "ROWS_AFFECTED INT", + parameters: "...", + emitParameters: "ROWS_AFFECTED INT", scriptClass: "com.exasol.cloudetl.scriptclasses.TableDataExporter" } ] @@ -49,4 +54,4 @@ export function createExtension(): ExasolExtension { return convertBaseExtension(baseExtension) } -registerExtension(createExtension()) \ No newline at end of file +registerExtension(createExtension()) diff --git a/pk_generated_parent.pom b/pk_generated_parent.pom index dedaf5f7..0e7880f9 100644 --- a/pk_generated_parent.pom +++ b/pk_generated_parent.pom @@ -3,7 +3,7 @@ 4.0.0 com.exasol cloud-storage-extension-generated-parent - 2.7.6 + 2.7.7 pom UTF-8 diff --git a/pom.xml b/pom.xml index bfbc7c1b..2c76f9ad 100644 --- a/pom.xml +++ b/pom.xml @@ -3,14 +3,14 @@ 4.0.0 com.exasol cloud-storage-extension - 2.7.6 + 2.7.7 Cloud Storage Extension Exasol Cloud Storage Import And Export Extension https://github.com/exasol/cloud-storage-extension/ cloud-storage-extension-generated-parent com.exasol - 2.7.6 + 2.7.7 pk_generated_parent.pom @@ -284,7 +284,7 @@ org.jetbrains.kotlin kotlin-stdlib - 1.9.10 + 1.9.20 @@ -375,12 +375,12 @@ io.dropwizard.metrics metrics-core - 4.2.21 + 4.2.22 com.google.protobuf protobuf-java - 3.24.4 + 3.25.0 com.google.cloud.bigdataoss @@ -541,7 +541,7 @@ org.mockito mockito-core - 5.6.0 + 5.7.0 test @@ -577,19 +577,19 @@ com.exasol hamcrest-resultset-matcher - 1.6.1 + 1.6.2 test nl.jqno.equalsverifier equalsverifier - 3.15.2 + 3.15.3 test org.junit.jupiter junit-jupiter-engine - 5.10.0 + 5.10.1 test @@ -601,7 +601,7 @@ com.exasol extension-manager-integration-test-java - 0.5.4 + 0.5.5 test @@ -796,7 +796,7 @@ com.exasol project-keeper-maven-plugin - 2.9.14 + 2.9.15 @@ -951,7 +951,7 @@ maven-clean-plugin - 3.3.1 + 3.3.2 From 2f1535a956ef3a71bdf2390dfb4cd654bb1de37a Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Mon, 6 Nov 2023 15:28:48 +0100 Subject: [PATCH 02/15] Adapt extension unit tests --- extension/src/extension.test.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/extension/src/extension.test.ts b/extension/src/extension.test.ts index 289ef1be..86e70ac5 100644 --- a/extension/src/extension.test.ts +++ b/extension/src/extension.test.ts @@ -120,7 +120,7 @@ describe("Cloud Storage Extension", () => { }) it("fails for wrong version", () => { expect(() => { createExtension().install(createMockContext(), "wrongVersion") }) - .toThrow(`Installing version 'wrongVersion' not supported, try '${EXTENSION_DESCRIPTION.version}'.`) + .toThrow(`Version 'wrongVersion' not supported, can only use '${EXTENSION_DESCRIPTION.version}'.`) }) }) @@ -152,7 +152,7 @@ describe("Cloud Storage Extension", () => { }) it("fails for wrong version", () => { expect(() => { createExtension().uninstall(createMockContext(), "wrongVersion") }) - .toThrow(`Uninstalling version 'wrongVersion' not supported, try '${EXTENSION_DESCRIPTION.version}'.`) + .toThrow(`Version 'wrongVersion' not supported, can only use '${EXTENSION_DESCRIPTION.version}'.`) }) }) @@ -192,4 +192,3 @@ describe("Cloud Storage Extension", () => { }) }) }) - From 4b960af8e0fb23f1b1531025343361d2803b9c5e Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Mon, 6 Nov 2023 15:41:28 +0100 Subject: [PATCH 03/15] Fix vulnerability in npm dependency --- extension/package-lock.json | 90 ++++++++++++++++++------------------- 1 file changed, 45 insertions(+), 45 deletions(-) diff --git a/extension/package-lock.json b/extension/package-lock.json index 1c0b0392..acfca6be 100644 --- a/extension/package-lock.json +++ b/extension/package-lock.json @@ -47,12 +47,12 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.10.tgz", - "integrity": "sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA==", + "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.22.10", + "@babel/highlight": "^7.22.13", "chalk": "^2.4.2" }, "engines": { @@ -185,12 +185,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.10.tgz", - "integrity": "sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==", + "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.22.10", + "@babel/types": "^7.23.0", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -225,22 +225,22 @@ } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "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.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dev": true, "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" @@ -332,9 +332,9 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", + "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" @@ -364,12 +364,12 @@ } }, "node_modules/@babel/highlight": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.10.tgz", - "integrity": "sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ==", + "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.22.5", + "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, @@ -449,9 +449,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.10.tgz", - "integrity": "sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ==", + "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" @@ -638,33 +638,33 @@ } }, "node_modules/@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "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.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" + "@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.22.10", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.10.tgz", - "integrity": "sha512-Q/urqV4pRByiNNpb/f5OSv28ZlGJiFiiTh+GAHktbIrkPhPbl90+uW6SmpoLyZqutrg9AEaEf3Q/ZBRHBXgxig==", + "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.10", - "@babel/generator": "^7.22.10", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", + "@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.22.10", - "@babel/types": "^7.22.10", + "@babel/parser": "^7.23.0", + "@babel/types": "^7.23.0", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -682,13 +682,13 @@ } }, "node_modules/@babel/types": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.10.tgz", - "integrity": "sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg==", + "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.22.5", - "@babel/helper-validator-identifier": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" }, "engines": { From ecf492d0168354d5bd6b1a41e2545a11cdfbcf74 Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Mon, 6 Nov 2023 15:42:02 +0100 Subject: [PATCH 04/15] Enable integration tests after EM upgrade --- .../java/com/exasol/cloudetl/extension/ExtensionIT.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/test/java/com/exasol/cloudetl/extension/ExtensionIT.java b/src/test/java/com/exasol/cloudetl/extension/ExtensionIT.java index 9f0e0073..80565d1e 100644 --- a/src/test/java/com/exasol/cloudetl/extension/ExtensionIT.java +++ b/src/test/java/com/exasol/cloudetl/extension/ExtensionIT.java @@ -34,7 +34,7 @@ class ExtensionIT { private static final Logger LOGGER = Logger.getLogger(ExtensionIT.class.getName()); - private static final String PREVIOUS_VERSION = "2.7.2"; + private static final String PREVIOUS_VERSION = "2.7.6"; private static final String PREVIOUS_VERSION_JAR_FILE = "exasol-cloud-storage-extension-" + PREVIOUS_VERSION + ".jar"; private static final String EXTENSION_ID = "cloud-storage-extension.js"; @@ -52,6 +52,9 @@ class ExtensionIT { @BeforeAll static void setup() throws FileNotFoundException, BucketAccessException, TimeoutException, SQLException { + if (System.getProperty("com.exasol.dockerdb.image") == null) { + System.setProperty("com.exasol.dockerdb.image", "8.23.0"); + } exasolTestSetup = new ExasolTestSetupFactory(Paths.get("no-cloud-setup")).getTestSetup(); ExasolVersionCheck.assumeExasolVersion8(exasolTestSetup); setup = ExtensionManagerSetup.create(exasolTestSetup, ExtensionBuilder.createDefaultNpmBuilder( @@ -150,13 +153,11 @@ void exportImportWorksAfterInstallation() throws SQLException { } @Test - @Disabled("Blocked by https://github.com/exasol/extension-manager/issues/155") void uninstallExtensionWithoutInstallation() throws SQLException { assertDoesNotThrow(() -> client.uninstall()); } @Test - @Disabled("Blocked by https://github.com/exasol/extension-manager/issues/155") void uninstallExtensionRemovesScripts() throws SQLException { client.install(); client.uninstall(); @@ -164,7 +165,6 @@ void uninstallExtensionRemovesScripts() throws SQLException { } @Test - @Disabled("Blocked by https://github.com/exasol/extension-manager/issues/155") void uninstallWrongVersionFails() { client.assertRequestFails(() -> client.uninstall("wrongVersion"), equalTo("Uninstalling version 'wrongVersion' not supported, try '" + PROJECT_VERSION + "'."), From f14c0ad820f966c899e26b27d46a9f26389d9de6 Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Mon, 6 Nov 2023 15:42:39 +0100 Subject: [PATCH 05/15] Upgrade jersey-common to fix failing extension tests --- dependencies.md | 153 ++++++++++++++++++----------------- doc/changes/changes_2.7.7.md | 1 + pom.xml | 7 ++ 3 files changed, 87 insertions(+), 74 deletions(-) diff --git a/dependencies.md b/dependencies.md index 02cec093..22d55ea6 100644 --- a/dependencies.md +++ b/dependencies.md @@ -44,51 +44,52 @@ ### Test Dependencies -| Dependency | License | -| ------------------------------------------ | ----------------------------------------- | -| [scalatest][41] | [the Apache License, ASL Version 2.0][28] | -| [scalatestplus-mockito][42] | [Apache-2.0][28] | -| [mockito-core][43] | [MIT][44] | -| [Hamcrest][45] | [BSD License 3][46] | -| [testcontainers-scala-scalatest][47] | [The MIT License (MIT)][44] | -| [Testcontainers :: Localstack][48] | [MIT][49] | -| [Test containers for Exasol on Docker][50] | [MIT License][51] | -| [Test Database Builder for Java][52] | [MIT License][53] | -| [Matcher for SQL Result Sets][54] | [MIT License][55] | -| [EqualsVerifier \| release normal jar][56] | [Apache License, Version 2.0][3] | -| [JUnit Jupiter Engine][57] | [Eclipse Public License v2.0][58] | -| [Maven Project Version Getter][59] | [MIT License][60] | -| [Extension integration tests library][61] | [MIT License][62] | +| Dependency | License | +| ------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------- | +| [scalatest][41] | [the Apache License, ASL Version 2.0][28] | +| [scalatestplus-mockito][42] | [Apache-2.0][28] | +| [mockito-core][43] | [MIT][44] | +| [Hamcrest][45] | [BSD License 3][46] | +| [testcontainers-scala-scalatest][47] | [The MIT License (MIT)][44] | +| [Testcontainers :: Localstack][48] | [MIT][49] | +| [Test containers for Exasol on Docker][50] | [MIT License][51] | +| [Test Database Builder for Java][52] | [MIT License][53] | +| [Matcher for SQL Result Sets][54] | [MIT License][55] | +| [EqualsVerifier \| release normal jar][56] | [Apache License, Version 2.0][3] | +| [JUnit Jupiter Engine][57] | [Eclipse Public License v2.0][58] | +| [Maven Project Version Getter][59] | [MIT License][60] | +| [Extension integration tests library][61] | [MIT License][62] | +| [jersey-core-common][63] | [EPL 2.0][64]; [The GNU General Public License (GPL), Version 2, With Classpath Exception][65]; [Apache License, 2.0][30]; [Public Domain][66] | ### Plugin Dependencies | Dependency | License | | ------------------------------------------------------- | --------------------------------------------- | -| [SonarQube Scanner for Maven][63] | [GNU LGPL 3][64] | -| [Apache Maven Compiler Plugin][65] | [Apache-2.0][3] | -| [Apache Maven Enforcer Plugin][66] | [Apache-2.0][3] | -| [Maven Flatten Plugin][67] | [Apache Software Licenese][3] | -| [org.sonatype.ossindex.maven:ossindex-maven-plugin][68] | [ASL2][5] | -| [scala-maven-plugin][69] | [Public domain (Unlicense)][70] | -| [ScalaTest Maven Plugin][71] | [the Apache License, ASL Version 2.0][28] | -| [Apache Maven Javadoc Plugin][72] | [Apache-2.0][3] | -| [Maven Surefire Plugin][73] | [Apache-2.0][3] | -| [Versions Maven Plugin][74] | [Apache License, Version 2.0][3] | -| [duplicate-finder-maven-plugin Maven Mojo][75] | [Apache License 2.0][30] | -| [Apache Maven Assembly Plugin][76] | [Apache-2.0][3] | -| [Apache Maven JAR Plugin][77] | [Apache License, Version 2.0][3] | -| [Artifact reference checker and unifier][78] | [MIT License][79] | -| [Maven Failsafe Plugin][80] | [Apache-2.0][3] | -| [JaCoCo :: Maven Plugin][81] | [Eclipse Public License 2.0][82] | -| [error-code-crawler-maven-plugin][83] | [MIT License][84] | -| [Reproducible Build Maven Plugin][85] | [Apache 2.0][5] | -| [Project keeper maven plugin][86] | [The MIT License][87] | -| [OpenFastTrace Maven Plugin][88] | [GNU General Public License v3.0][89] | -| [Scalastyle Maven Plugin][90] | [Apache 2.0][30] | -| [spotless-maven-plugin][91] | [The Apache Software License, Version 2.0][3] | -| [scalafix-maven-plugin][92] | [BSD-3-Clause][21] | -| [Exec Maven Plugin][93] | [Apache License 2][3] | -| [Apache Maven Clean Plugin][94] | [Apache-2.0][3] | +| [SonarQube Scanner for Maven][67] | [GNU LGPL 3][68] | +| [Apache Maven Compiler Plugin][69] | [Apache-2.0][3] | +| [Apache Maven Enforcer Plugin][70] | [Apache-2.0][3] | +| [Maven Flatten Plugin][71] | [Apache Software Licenese][3] | +| [org.sonatype.ossindex.maven:ossindex-maven-plugin][72] | [ASL2][5] | +| [scala-maven-plugin][73] | [Public domain (Unlicense)][74] | +| [ScalaTest Maven Plugin][75] | [the Apache License, ASL Version 2.0][28] | +| [Apache Maven Javadoc Plugin][76] | [Apache-2.0][3] | +| [Maven Surefire Plugin][77] | [Apache-2.0][3] | +| [Versions Maven Plugin][78] | [Apache License, Version 2.0][3] | +| [duplicate-finder-maven-plugin Maven Mojo][79] | [Apache License 2.0][30] | +| [Apache Maven Assembly Plugin][80] | [Apache-2.0][3] | +| [Apache Maven JAR Plugin][81] | [Apache License, Version 2.0][3] | +| [Artifact reference checker and unifier][82] | [MIT License][83] | +| [Maven Failsafe Plugin][84] | [Apache-2.0][3] | +| [JaCoCo :: Maven Plugin][85] | [Eclipse Public License 2.0][86] | +| [error-code-crawler-maven-plugin][87] | [MIT License][88] | +| [Reproducible Build Maven Plugin][89] | [Apache 2.0][5] | +| [Project keeper maven plugin][90] | [The MIT License][91] | +| [OpenFastTrace Maven Plugin][92] | [GNU General Public License v3.0][93] | +| [Scalastyle Maven Plugin][94] | [Apache 2.0][30] | +| [spotless-maven-plugin][95] | [The Apache Software License, Version 2.0][3] | +| [scalafix-maven-plugin][96] | [BSD-3-Clause][21] | +| [Exec Maven Plugin][97] | [Apache License 2][3] | +| [Apache Maven Clean Plugin][98] | [Apache-2.0][3] | ## Extension @@ -96,7 +97,7 @@ | Dependency | License | | ----------------------------------------- | ------- | -| [@exasol/extension-manager-interface][95] | MIT | +| [@exasol/extension-manager-interface][99] | MIT | [0]: https://www.scala-lang.org/ [1]: https://www.apache.org/licenses/LICENSE-2.0 @@ -161,36 +162,40 @@ [60]: https://github.com/exasol/maven-project-version-getter/blob/main/LICENSE [61]: https://github.com/exasol/extension-manager/ [62]: https://github.com/exasol/extension-manager/blob/main/LICENSE -[63]: http://sonarsource.github.io/sonar-scanner-maven/ -[64]: http://www.gnu.org/licenses/lgpl.txt -[65]: https://maven.apache.org/plugins/maven-compiler-plugin/ -[66]: https://maven.apache.org/enforcer/maven-enforcer-plugin/ -[67]: https://www.mojohaus.org/flatten-maven-plugin/ -[68]: https://sonatype.github.io/ossindex-maven/maven-plugin/ -[69]: http://github.com/davidB/scala-maven-plugin -[70]: http://unlicense.org/ -[71]: https://www.scalatest.org/user_guide/using_the_scalatest_maven_plugin -[72]: https://maven.apache.org/plugins/maven-javadoc-plugin/ -[73]: https://maven.apache.org/surefire/maven-surefire-plugin/ -[74]: https://www.mojohaus.org/versions/versions-maven-plugin/ -[75]: https://basepom.github.io/duplicate-finder-maven-plugin -[76]: https://maven.apache.org/plugins/maven-assembly-plugin/ -[77]: https://maven.apache.org/plugins/maven-jar-plugin/ -[78]: https://github.com/exasol/artifact-reference-checker-maven-plugin/ -[79]: https://github.com/exasol/artifact-reference-checker-maven-plugin/blob/main/LICENSE -[80]: https://maven.apache.org/surefire/maven-failsafe-plugin/ -[81]: https://www.jacoco.org/jacoco/trunk/doc/maven.html -[82]: https://www.eclipse.org/legal/epl-2.0/ -[83]: https://github.com/exasol/error-code-crawler-maven-plugin/ -[84]: https://github.com/exasol/error-code-crawler-maven-plugin/blob/main/LICENSE -[85]: http://zlika.github.io/reproducible-build-maven-plugin -[86]: https://github.com/exasol/project-keeper/ -[87]: https://github.com/exasol/project-keeper/blob/main/LICENSE -[88]: https://github.com/itsallcode/openfasttrace-maven-plugin -[89]: https://www.gnu.org/licenses/gpl-3.0.html -[90]: http://www.scalastyle.org -[91]: https://github.com/diffplug/spotless -[92]: https://github.com/evis/scalafix-maven-plugin -[93]: https://www.mojohaus.org/exec-maven-plugin -[94]: https://maven.apache.org/plugins/maven-clean-plugin/ -[95]: https://registry.npmjs.org/@exasol/extension-manager-interface/-/extension-manager-interface-0.4.0.tgz +[63]: https://projects.eclipse.org/projects/ee4j.jersey/jersey-common +[64]: http://www.eclipse.org/legal/epl-2.0 +[65]: https://www.gnu.org/software/classpath/license.html +[66]: https://creativecommons.org/publicdomain/zero/1.0/ +[67]: http://sonarsource.github.io/sonar-scanner-maven/ +[68]: http://www.gnu.org/licenses/lgpl.txt +[69]: https://maven.apache.org/plugins/maven-compiler-plugin/ +[70]: https://maven.apache.org/enforcer/maven-enforcer-plugin/ +[71]: https://www.mojohaus.org/flatten-maven-plugin/ +[72]: https://sonatype.github.io/ossindex-maven/maven-plugin/ +[73]: http://github.com/davidB/scala-maven-plugin +[74]: http://unlicense.org/ +[75]: https://www.scalatest.org/user_guide/using_the_scalatest_maven_plugin +[76]: https://maven.apache.org/plugins/maven-javadoc-plugin/ +[77]: https://maven.apache.org/surefire/maven-surefire-plugin/ +[78]: https://www.mojohaus.org/versions/versions-maven-plugin/ +[79]: https://basepom.github.io/duplicate-finder-maven-plugin +[80]: https://maven.apache.org/plugins/maven-assembly-plugin/ +[81]: https://maven.apache.org/plugins/maven-jar-plugin/ +[82]: https://github.com/exasol/artifact-reference-checker-maven-plugin/ +[83]: https://github.com/exasol/artifact-reference-checker-maven-plugin/blob/main/LICENSE +[84]: https://maven.apache.org/surefire/maven-failsafe-plugin/ +[85]: https://www.jacoco.org/jacoco/trunk/doc/maven.html +[86]: https://www.eclipse.org/legal/epl-2.0/ +[87]: https://github.com/exasol/error-code-crawler-maven-plugin/ +[88]: https://github.com/exasol/error-code-crawler-maven-plugin/blob/main/LICENSE +[89]: http://zlika.github.io/reproducible-build-maven-plugin +[90]: https://github.com/exasol/project-keeper/ +[91]: https://github.com/exasol/project-keeper/blob/main/LICENSE +[92]: https://github.com/itsallcode/openfasttrace-maven-plugin +[93]: https://www.gnu.org/licenses/gpl-3.0.html +[94]: http://www.scalastyle.org +[95]: https://github.com/diffplug/spotless +[96]: https://github.com/evis/scalafix-maven-plugin +[97]: https://www.mojohaus.org/exec-maven-plugin +[98]: https://maven.apache.org/plugins/maven-clean-plugin/ +[99]: https://registry.npmjs.org/@exasol/extension-manager-interface/-/extension-manager-interface-0.4.0.tgz diff --git a/doc/changes/changes_2.7.7.md b/doc/changes/changes_2.7.7.md index cd578841..04048c3a 100644 --- a/doc/changes/changes_2.7.7.md +++ b/doc/changes/changes_2.7.7.md @@ -23,6 +23,7 @@ Code name: * Updated `com.exasol:extension-manager-integration-test-java:0.5.4` 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` +* Added `org.glassfish.jersey.core:jersey-common:2.41` * Updated `org.junit.jupiter:junit-jupiter-engine:5.10.0` to `5.10.1` * Updated `org.mockito:mockito-core:5.6.0` to `5.7.0` diff --git a/pom.xml b/pom.xml index 2c76f9ad..effb35bf 100644 --- a/pom.xml +++ b/pom.xml @@ -604,6 +604,13 @@ 0.5.5 test + + + org.glassfish.jersey.core + jersey-common + 2.41 + test + From 356d113d9111bc619d29aab096b2048cd993c500 Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Mon, 6 Nov 2023 15:45:43 +0100 Subject: [PATCH 06/15] Adapt tests to new error message --- .../java/com/exasol/cloudetl/extension/ExtensionIT.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/test/java/com/exasol/cloudetl/extension/ExtensionIT.java b/src/test/java/com/exasol/cloudetl/extension/ExtensionIT.java index 80565d1e..0ae4ceeb 100644 --- a/src/test/java/com/exasol/cloudetl/extension/ExtensionIT.java +++ b/src/test/java/com/exasol/cloudetl/extension/ExtensionIT.java @@ -128,8 +128,7 @@ void getInstallationsReturnsResult() { @Test void installingWrongVersionFails() { client.assertRequestFails(() -> client.install("wrongVersion"), - equalTo("Installing version 'wrongVersion' not supported, try '" + PROJECT_VERSION + "'."), - equalTo(400)); + equalTo("Version 'wrongVersion' not supported, can only use '" + PROJECT_VERSION + "'."), equalTo(404)); setup.exasolMetadata().assertNoScripts(); } @@ -167,8 +166,7 @@ void uninstallExtensionRemovesScripts() throws SQLException { @Test void uninstallWrongVersionFails() { client.assertRequestFails(() -> client.uninstall("wrongVersion"), - equalTo("Uninstalling version 'wrongVersion' not supported, try '" + PROJECT_VERSION + "'."), - equalTo(404)); + equalTo("Version 'wrongVersion' not supported, can only use '" + PROJECT_VERSION + "'."), equalTo(404)); } @Test From a80915b698c592a46719f1be8d5240967373aff3 Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Mon, 6 Nov 2023 16:26:03 +0100 Subject: [PATCH 07/15] Use base class for integration tests --- .../cloudetl/extension/ExtensionIT.java | 190 +++--------------- 1 file changed, 30 insertions(+), 160 deletions(-) diff --git a/src/test/java/com/exasol/cloudetl/extension/ExtensionIT.java b/src/test/java/com/exasol/cloudetl/extension/ExtensionIT.java index 0ae4ceeb..0dafb36e 100644 --- a/src/test/java/com/exasol/cloudetl/extension/ExtensionIT.java +++ b/src/test/java/com/exasol/cloudetl/extension/ExtensionIT.java @@ -1,51 +1,45 @@ package com.exasol.cloudetl.extension; import static com.exasol.matcher.ResultSetStructureMatcher.table; -import static java.util.Collections.emptyList; 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.allOf; +import static org.hamcrest.Matchers.containsString; import java.io.FileNotFoundException; -import java.net.URISyntaxException; import java.nio.file.*; import java.sql.Connection; import java.sql.SQLException; -import java.util.List; import java.util.concurrent.TimeoutException; import java.util.logging.Logger; -import org.junit.jupiter.api.*; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; import com.exasol.bucketfs.BucketAccessException; import com.exasol.dbbuilder.dialects.Table; import com.exasol.dbbuilder.dialects.exasol.*; import com.exasol.exasoltestsetup.ExasolTestSetup; import com.exasol.exasoltestsetup.ExasolTestSetupFactory; -import com.exasol.extensionmanager.client.model.ExtensionsResponseExtension; -import com.exasol.extensionmanager.client.model.InstallationsResponseInstallation; -import com.exasol.extensionmanager.itest.*; +import com.exasol.extensionmanager.itest.ExasolVersionCheck; +import com.exasol.extensionmanager.itest.ExtensionManagerSetup; +import com.exasol.extensionmanager.itest.base.AbstractScriptExtensionIT; +import com.exasol.extensionmanager.itest.base.ExtensionITConfig; import com.exasol.extensionmanager.itest.builder.ExtensionBuilder; import com.exasol.matcher.TypeMatchMode; import com.exasol.mavenprojectversiongetter.MavenProjectVersionGetter; import junit.framework.AssertionFailedError; -class ExtensionIT { +class ExtensionIT extends AbstractScriptExtensionIT { private static final Logger LOGGER = Logger.getLogger(ExtensionIT.class.getName()); - private static final String PREVIOUS_VERSION = "2.7.6"; - private static final String PREVIOUS_VERSION_JAR_FILE = "exasol-cloud-storage-extension-" + PREVIOUS_VERSION - + ".jar"; private static final String EXTENSION_ID = "cloud-storage-extension.js"; + private static final String PREVIOUS_VERSION = "2.7.6"; private static final Path EXTENSION_SOURCE_DIR = Paths.get("extension").toAbsolutePath(); private static final String PROJECT_VERSION = MavenProjectVersionGetter.getCurrentProjectVersion(); private static final String S3_CONNECTION = "S3_CONNECTION"; private static final Path ADAPTER_JAR = getAdapterJar(); - private static ExasolTestSetup exasolTestSetup; private static ExtensionManagerSetup setup; - private static ExtensionManagerClient client; private static S3Setup s3setup; private static Connection connection; private static ExasolObjectFactory exasolObjectFactory; @@ -60,7 +54,7 @@ static void setup() throws FileNotFoundException, BucketAccessException, Timeout setup = ExtensionManagerSetup.create(exasolTestSetup, ExtensionBuilder.createDefaultNpmBuilder( EXTENSION_SOURCE_DIR, EXTENSION_SOURCE_DIR.resolve("dist").resolve(EXTENSION_ID))); exasolTestSetup.getDefaultBucket().uploadFile(ADAPTER_JAR, ADAPTER_JAR.getFileName().toString()); - client = setup.client(); + s3setup = S3Setup.create(); connection = exasolTestSetup.createConnection(); exasolObjectFactory = new ExasolObjectFactory(connection, ExasolObjectConfiguration.builder().build()); @@ -94,153 +88,26 @@ static void teardown() throws Exception { } } - @AfterEach - void cleanup() throws SQLException { - setup.cleanup(); - } - - @Test - void listExtensions() { - final List extensions = client.getExtensions(); - assertAll(() -> assertThat(extensions, hasSize(1)), // - () -> assertThat(extensions.get(0).getName(), equalTo("Cloud Storage Extension")), - () -> 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("Access data formatted with Avro, Orc and Parquet on public cloud storage systems"))); + @Override + protected ExtensionManagerSetup getSetup() { + return setup; } - @Test - void getInstallationsReturnsEmptyList() { - assertThat(client.getInstallations(), hasSize(0)); - } - - @Test - void getInstallationsReturnsResult() { - client.install(); - assertThat(client.getInstallations(), contains(new InstallationsResponseInstallation() // - .id(EXTENSION_ID) // - .name("Cloud Storage Extension") // - .version(PROJECT_VERSION))); - } - - @Test - void installingWrongVersionFails() { - client.assertRequestFails(() -> client.install("wrongVersion"), - equalTo("Version 'wrongVersion' not supported, can only use '" + PROJECT_VERSION + "'."), equalTo(404)); - setup.exasolMetadata().assertNoScripts(); - } - - @Test - void installCreatesScripts() { - setup.client().install(); - assertScriptsInstalled(); - } - - @Test - void installingTwiceCreatesScripts() { - setup.client().install(); - setup.client().install(); - assertScriptsInstalled(); - } - - @Test - void exportImportWorksAfterInstallation() throws SQLException { - setup.client().install(); - verifyExportImportWorks(); - } - - @Test - void uninstallExtensionWithoutInstallation() throws SQLException { - assertDoesNotThrow(() -> client.uninstall()); - } - - @Test - void uninstallExtensionRemovesScripts() throws SQLException { - client.install(); - client.uninstall(); - setup.exasolMetadata().assertNoScripts(); - } - - @Test - void uninstallWrongVersionFails() { - client.assertRequestFails(() -> client.uninstall("wrongVersion"), - equalTo("Version 'wrongVersion' not supported, can only use '" + PROJECT_VERSION + "'."), equalTo(404)); - } - - @Test - void listingInstancesNotSupported() { - client.assertRequestFails(() -> client.listInstances(), equalTo("Finding instances not supported"), - equalTo(404)); - } - - @Test - void creatingInstancesNotSupported() { - client.assertRequestFails(() -> client.createInstance(emptyList()), equalTo("Creating instances not supported"), - equalTo(404)); - } - - @Test - void deletingInstancesNotSupported() { - client.assertRequestFails(() -> client.deleteInstance("inst"), equalTo("Deleting instances not supported"), - equalTo(404)); - } - - @Test - void getExtensionDetailsInstancesNotSupported() { - client.assertRequestFails(() -> client.getExtensionDetails(PROJECT_VERSION), - equalTo("Creating instances not supported"), equalTo(404)); - } - - @Test - void upgradeFailsWhenNotInstalled() { - setup.client().assertRequestFails(() -> setup.client().upgrade(), - "Not all required scripts are installed: Validation failed: Script 'IMPORT_PATH' is missing, Script 'IMPORT_METADATA' is missing, Script 'IMPORT_FILES' is missing, Script 'EXPORT_PATH' is missing, Script 'EXPORT_TABLE' 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, SQLException { - final PreviousExtensionVersion previousVersion = createPreviousVersion(); - previousVersion.prepare(); - previousVersion.install(); - verifyExportImportWorks(); - assertInstalledVersion("Cloud Storage Extension", PREVIOUS_VERSION, previousVersion); - previousVersion.upgrade(); - assertInstalledVersion("Cloud Storage Extension", PROJECT_VERSION, previousVersion); - verifyExportImportWorks(); - } - - private void assertInstalledVersion(final String expectedName, 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) - .id(EXTENSION_ID), // - new InstallationsResponseInstallation().name(expectedName).version(expectedVersion) - .id(previousVersion.getExtensionId()))); - } - - private PreviousExtensionVersion createPreviousVersion() { - return setup.previousVersionManager().newVersion().currentVersion(PROJECT_VERSION) // - .previousVersion(PREVIOUS_VERSION) // - .adapterFileName(PREVIOUS_VERSION_JAR_FILE) // - .extensionFileName(EXTENSION_ID) // - .project("cloud-storage-extension") // + @Override + protected ExtensionITConfig createConfig() { + return ExtensionITConfig.builder() // + .projectName("cloud-storage-extension").extensionId(EXTENSION_ID).currentVersion(PROJECT_VERSION) + .extensionName("Cloud Storage Extension") + .extensionDescription( + "Access data formatted with Avro, Orc and Parquet on public cloud storage systems") + .previousVersion(PREVIOUS_VERSION) + .previousVersionJarFile("exasol-cloud-storage-extension-" + PREVIOUS_VERSION + ".jar") // + .expectedParameterCount(-1) // .build(); } - private void verifyExportImportWorks() throws SQLException { + @Override + protected void assertScriptsWork() { final ExasolSchema schema = exasolObjectFactory.createSchema("TESTING_SCHEMA_" + System.currentTimeMillis()); final String bucket = s3setup.createBucket(); final String s3Path = "data"; @@ -255,6 +122,8 @@ private void verifyExportImportWorks() throws SQLException { assertThat(statement.executeQuery(), table().row(1, "a").row(2, "b").row(3, "c").matches(TypeMatchMode.NO_JAVA_TYPE_CHECK)); } + } catch (final SQLException exception) { + throw new IllegalStateException("Failed to run scripts: " + exception.getMessage(), exception); } finally { schema.drop(); s3setup.deleteBucket(bucket); @@ -293,7 +162,8 @@ private void executeStatement(final String sql) { } } - private void assertScriptsInstalled() { + @Override + protected void assertScriptsExist() { setup.exasolMetadata().assertScript(table() // .row(setScript("EXPORT_PATH", "com.exasol.cloudetl.scriptclasses.TableExportQueryGenerator")) // .row(setScript("EXPORT_TABLE", "com.exasol.cloudetl.scriptclasses.TableDataExporter")) // From 3d5a7762b8bb7b7c28d1bfb701489947f0a8859c Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Tue, 7 Nov 2023 10:01:27 +0100 Subject: [PATCH 08/15] Add changelog entry --- doc/changes/changes_2.7.7.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/changes/changes_2.7.7.md b/doc/changes/changes_2.7.7.md index 04048c3a..6958c6fb 100644 --- a/doc/changes/changes_2.7.7.md +++ b/doc/changes/changes_2.7.7.md @@ -4,9 +4,9 @@ Code name: ## Summary -## Features +## Refactoring -* ISSUE_NUMBER: description +* #284: Used shared extension integration tests ## Dependency Updates From 608442b3af8641f53d25b49291eef306974c60f1 Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Tue, 7 Nov 2023 10:05:46 +0100 Subject: [PATCH 09/15] Add release date --- doc/changes/changes_2.7.7.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/doc/changes/changes_2.7.7.md b/doc/changes/changes_2.7.7.md index 6958c6fb..026ccdfe 100644 --- a/doc/changes/changes_2.7.7.md +++ b/doc/changes/changes_2.7.7.md @@ -1,9 +1,11 @@ -# Cloud Storage Extension 2.7.7, released 2023-??-?? +# Cloud Storage Extension 2.7.7, released 2023-11-07 -Code name: +Code name: Refactoring of Extension ## Summary +This release refactors the extension to use shared integration tests to simplify the source code. + ## Refactoring * #284: Used shared extension integration tests From a74752d24075c57ae1ea2cb45047b78c36f83d88 Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Wed, 8 Nov 2023 08:30:29 +0100 Subject: [PATCH 10/15] Upgrade Exasol DB version --- .github/workflows/ci-build.yml | 4 ++-- src/test/java/com/exasol/cloudetl/extension/ExtensionIT.java | 2 +- .../scala/com/exasol/cloudetl/it/BaseIntegrationTest.scala | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml index f1b32d1b..e32c5b19 100644 --- a/.github/workflows/ci-build.yml +++ b/.github/workflows/ci-build.yml @@ -16,9 +16,9 @@ jobs: strategy: fail-fast: false matrix: - exasol_db_version: ["7.1.23", "8.23.0"] + exasol_db_version: ["7.1.24", "8.23.1"] env: - DEFAULT_EXASOL_DB_VERSION: "8.23.0" + DEFAULT_EXASOL_DB_VERSION: "8.23.1" steps: - name: Free Disk Space run: | diff --git a/src/test/java/com/exasol/cloudetl/extension/ExtensionIT.java b/src/test/java/com/exasol/cloudetl/extension/ExtensionIT.java index 0dafb36e..e816dc7d 100644 --- a/src/test/java/com/exasol/cloudetl/extension/ExtensionIT.java +++ b/src/test/java/com/exasol/cloudetl/extension/ExtensionIT.java @@ -47,7 +47,7 @@ class ExtensionIT extends AbstractScriptExtensionIT { @BeforeAll static void setup() throws FileNotFoundException, BucketAccessException, TimeoutException, SQLException { if (System.getProperty("com.exasol.dockerdb.image") == null) { - System.setProperty("com.exasol.dockerdb.image", "8.23.0"); + System.setProperty("com.exasol.dockerdb.image", "8.23.1"); } exasolTestSetup = new ExasolTestSetupFactory(Paths.get("no-cloud-setup")).getTestSetup(); ExasolVersionCheck.assumeExasolVersion8(exasolTestSetup); diff --git a/src/test/scala/com/exasol/cloudetl/it/BaseIntegrationTest.scala b/src/test/scala/com/exasol/cloudetl/it/BaseIntegrationTest.scala index 28a79eeb..b476a2ea 100644 --- a/src/test/scala/com/exasol/cloudetl/it/BaseIntegrationTest.scala +++ b/src/test/scala/com/exasol/cloudetl/it/BaseIntegrationTest.scala @@ -16,7 +16,7 @@ import org.scalatest.funsuite.AnyFunSuite trait BaseIntegrationTest extends AnyFunSuite with BeforeAndAfterAll with LazyLogging { private[this] val JAR_NAME_PATTERN = "exasol-cloud-storage-extension-" - val DEFAULT_EXASOL_DOCKER_IMAGE = "7.1.23" + val DEFAULT_EXASOL_DOCKER_IMAGE = "7.1.24" val network = DockerNamedNetwork("it-tests", true) val exasolContainer = { val c: ExasolContainer[_] = new ExasolContainer(getExasolDockerImageVersion()) From 533f1fd73fb77965e47bdbb07a1fdac3a7373dfa Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Wed, 8 Nov 2023 08:31:55 +0100 Subject: [PATCH 11/15] Upgrade plugin --- doc/changes/changes_2.7.7.md | 1 + pom.xml | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/changes/changes_2.7.7.md b/doc/changes/changes_2.7.7.md index 026ccdfe..dec3339a 100644 --- a/doc/changes/changes_2.7.7.md +++ b/doc/changes/changes_2.7.7.md @@ -33,6 +33,7 @@ This release refactors the extension to use shared integration tests to simplify * 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` +* Updated `org.apache.maven.plugins:maven-javadoc-plugin:3.6.0` to `3.6.2` ### Extension diff --git a/pom.xml b/pom.xml index effb35bf..d8f4d63a 100644 --- a/pom.xml +++ b/pom.xml @@ -721,7 +721,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 3.6.0 + 3.6.2 UTF-8 From 1685141664cd62942fcb956096f9a4b54fb538b9 Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Wed, 8 Nov 2023 08:34:24 +0100 Subject: [PATCH 12/15] Remove unnecessary exclusion --- pom.xml | 3 --- 1 file changed, 3 deletions(-) diff --git a/pom.xml b/pom.xml index d8f4d63a..61206001 100644 --- a/pom.xml +++ b/pom.xml @@ -772,9 +772,6 @@ CVE-2023-4586 - - CVE-2023-46120 From f6b3de398f9da3653f20d4736fbfac64bbd27562 Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Wed, 8 Nov 2023 10:08:57 +0100 Subject: [PATCH 13/15] Upgrade testcontainer version --- doc/changes/changes_2.7.7.md | 3 ++- pom.xml | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/doc/changes/changes_2.7.7.md b/doc/changes/changes_2.7.7.md index dec3339a..b2a91e7b 100644 --- a/doc/changes/changes_2.7.7.md +++ b/doc/changes/changes_2.7.7.md @@ -1,4 +1,4 @@ -# Cloud Storage Extension 2.7.7, released 2023-11-07 +# Cloud Storage Extension 2.7.7, released 2023-11-08 Code name: Refactoring of Extension @@ -22,6 +22,7 @@ This release refactors the extension to use shared integration tests to simplify #### Test Dependency Updates +* Updated `com.exasol:exasol-testcontainers:6.6.2` to `6.6.3` * Updated `com.exasol:extension-manager-integration-test-java:0.5.4` 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` diff --git a/pom.xml b/pom.xml index 61206001..008e25fa 100644 --- a/pom.xml +++ b/pom.xml @@ -565,7 +565,7 @@ com.exasol exasol-testcontainers - 6.6.2 + 6.6.3 test From 3e69b1e409f158a907aa07100b5ce07f471f6cd0 Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Wed, 8 Nov 2023 10:58:52 +0100 Subject: [PATCH 14/15] Apply suggestions from code review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Sebastian Bär --- doc/changes/changes_2.7.7.md | 2 +- src/test/java/com/exasol/cloudetl/extension/ExtensionIT.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/changes/changes_2.7.7.md b/doc/changes/changes_2.7.7.md index b2a91e7b..afe811ac 100644 --- a/doc/changes/changes_2.7.7.md +++ b/doc/changes/changes_2.7.7.md @@ -1,6 +1,6 @@ # Cloud Storage Extension 2.7.7, released 2023-11-08 -Code name: Refactoring of Extension +Code name: Using shared integration tests ## Summary diff --git a/src/test/java/com/exasol/cloudetl/extension/ExtensionIT.java b/src/test/java/com/exasol/cloudetl/extension/ExtensionIT.java index e816dc7d..887587fc 100644 --- a/src/test/java/com/exasol/cloudetl/extension/ExtensionIT.java +++ b/src/test/java/com/exasol/cloudetl/extension/ExtensionIT.java @@ -123,7 +123,7 @@ protected void assertScriptsWork() { table().row(1, "a").row(2, "b").row(3, "c").matches(TypeMatchMode.NO_JAVA_TYPE_CHECK)); } } catch (final SQLException exception) { - throw new IllegalStateException("Failed to run scripts: " + exception.getMessage(), exception); + throw new AssertionError("Failed to assert scripts execution: " + exception.getMessage(), exception); } finally { schema.drop(); s3setup.deleteBucket(bucket); From 0ddcc55f6c9ef9d1e28223f2593f06be1d91fe0b Mon Sep 17 00:00:00 2001 From: Maxim Lapan Date: Wed, 8 Nov 2023 13:31:58 +0100 Subject: [PATCH 15/15] Implement aws anonymous mode --- .../com/exasol/cloudetl/bucket/S3Bucket.scala | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/main/scala/com/exasol/cloudetl/bucket/S3Bucket.scala b/src/main/scala/com/exasol/cloudetl/bucket/S3Bucket.scala index 6ea11cc5..85ea2ca4 100644 --- a/src/main/scala/com/exasol/cloudetl/bucket/S3Bucket.scala +++ b/src/main/scala/com/exasol/cloudetl/bucket/S3Bucket.scala @@ -52,6 +52,9 @@ final case class S3Bucket(path: String, params: StorageProperties) extends Bucke ) } + private[this] def isAnonymousAWSParams(properties: StorageProperties): Boolean = + properties.getString(S3_ACCESS_KEY).isEmpty && properties.getString(S3_SECRET_KEY).isEmpty + /** * @inheritdoc * @@ -83,15 +86,22 @@ final case class S3Bucket(path: String, params: StorageProperties) extends Bucke properties } - conf.set("fs.s3a.access.key", mergedProperties.getString(S3_ACCESS_KEY)) - conf.set("fs.s3a.secret.key", mergedProperties.getString(S3_SECRET_KEY)) - - if (mergedProperties.containsKey(S3_SESSION_TOKEN)) { + if (isAnonymousAWSParams(mergedProperties)) { conf.set( "fs.s3a.aws.credentials.provider", - classOf[org.apache.hadoop.fs.s3a.TemporaryAWSCredentialsProvider].getName() + classOf[org.apache.hadoop.fs.s3a.AnonymousAWSCredentialsProvider].getName() ) - conf.set("fs.s3a.session.token", mergedProperties.getString(S3_SESSION_TOKEN)) + } else { + conf.set("fs.s3a.access.key", mergedProperties.getString(S3_ACCESS_KEY)) + conf.set("fs.s3a.secret.key", mergedProperties.getString(S3_SECRET_KEY)) + + if (mergedProperties.containsKey(S3_SESSION_TOKEN)) { + conf.set( + "fs.s3a.aws.credentials.provider", + classOf[org.apache.hadoop.fs.s3a.TemporaryAWSCredentialsProvider].getName() + ) + conf.set("fs.s3a.session.token", mergedProperties.getString(S3_SESSION_TOKEN)) + } } properties.getProxyHost().foreach { proxyHost =>