diff --git a/.github/workflows/browserlist-update.yml b/.github/workflows/browserlist-update.yml index 0d21b2d9..0f0a0ccb 100644 --- a/.github/workflows/browserlist-update.yml +++ b/.github/workflows/browserlist-update.yml @@ -14,7 +14,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout repository - uses: actions/checkout@v7 + uses: actions/checkout@v6 with: fetch-depth: 0 - name: Configure git diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 8d9f19fc..6e0c3450 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -43,12 +43,12 @@ jobs: version_next: ${{ steps.versions.outputs.version_next }} should_release: ${{ steps.versions.outputs.should_release }} steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@v6 with: fetch-depth: 0 - name: Set up Homebrew id: set-up-homebrew - uses: Homebrew/actions/setup-homebrew@main + uses: Homebrew/actions/setup-homebrew@master - name: Install svu run: brew install --cask caarlos0/tap/svu - name: Compute next version for release @@ -72,7 +72,7 @@ jobs: sudo rm -rf /usr/share/dotnet sudo rm -rf "$AGENT_TOOLSDIRECTORY" - - uses: actions/checkout@v7 + - uses: actions/checkout@v6 with: fetch-depth: 0 @@ -117,7 +117,7 @@ jobs: password: ${{ secrets.GITHUB_TOKEN }} - name: Setup Gradle - uses: gradle/actions/setup-gradle@v6 + uses: gradle/actions/setup-gradle@v5 - name: Build run: ./gradlew :komga:prepareThymeLeaf :komga:bootJar :komga-tray:jar diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 440d9a0e..681818ab 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -19,7 +19,7 @@ jobs: fail-fast: false name: Test server - ${{ matrix.os }} steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@v6 - name: Setup Java 21 uses: actions/setup-java@v5 with: @@ -28,7 +28,7 @@ jobs: distribution: 'temurin' - name: Setup Gradle - uses: gradle/actions/setup-gradle@v6 + uses: gradle/actions/setup-gradle@v5 - name: Build run: ./gradlew build :komga-tray:jar @@ -78,7 +78,7 @@ jobs: runs-on: ubuntu-latest name: Test webui builds steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@v6 - uses: actions/setup-node@v6 with: node-version-file: '.nvmrc' diff --git a/CHANGELOG.md b/CHANGELOG.md index e67c53ed..11276310 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,94 +1,3 @@ -# [1.25.0](https://github.com/gotson/komga/compare/1.24.4...1.25.0) (2026-06-30) -## 🚀 Features -**komga** -- add support for solid rar4 archives ([5682a37](https://github.com/gotson/komga/commits/5682a37)) - -## 🐛 Fixes -**kobo** -- enfore content restriction ([bd8b773](https://github.com/gotson/komga/commits/bd8b773)) - -**openapi** -- flatten hierchical schemas ([275cb92](https://github.com/gotson/komga/commits/275cb92)) - -## 🛠 Build -**openapi** -- increase timeout for openapi generation ([4efb161](https://github.com/gotson/komga/commits/4efb161)) - -**webui** -- update Browserslist db ([9a3bbdd](https://github.com/gotson/komga/commits/9a3bbdd)) -- update Browserslist db ([ba6cb76](https://github.com/gotson/komga/commits/ba6cb76)) - -## ⚙️ Dependencies -**ci** -- bump actions/checkout from 6 to 7 ([5da5226](https://github.com/gotson/komga/commits/5da5226)) - -**komga** -- bump junrar to 7.6.0 ([ba628f9](https://github.com/gotson/komga/commits/ba628f9)) - -**webui** -- bump launch-editor from 2.6.0 to 2.14.1 in /komga-webui ([910512c](https://github.com/gotson/komga/commits/910512c)) -- bump axios from 1.15.2 to 1.16.0 in /komga-webui ([86362b1](https://github.com/gotson/komga/commits/86362b1)) -- bump qs from 6.14.2 to 6.15.2 in /komga-webui ([f9f402e](https://github.com/gotson/komga/commits/f9f402e)) -- bump js-cookie from 3.0.5 to 3.0.7 in /komga-webui ([3e9a0ea](https://github.com/gotson/komga/commits/3e9a0ea)) -- bump fast-uri from 3.1.0 to 3.1.2 in /komga-webui ([be5f88c](https://github.com/gotson/komga/commits/be5f88c)) -- bump @babel/plugin-transform-modules-systemjs ([0bd8edb](https://github.com/gotson/komga/commits/0bd8edb)) -- bump axios from 1.15.0 to 1.15.2 in /komga-webui ([737cc56](https://github.com/gotson/komga/commits/737cc56)) - -**unscoped** -- upgrade Spring Boot to 3.5.14 ([3d7615e](https://github.com/gotson/komga/commits/3d7615e)) - -# [1.24.4](https://github.com/gotson/komga/compare/1.24.3...1.24.4) (2026-04-24) -## 🐛 Fixes -**api** -- omit UserDto.ageRestriction instead of returning null ([e3a8cc6](https://github.com/gotson/komga/commits/e3a8cc6)) - -**epub** -- some TOC may not be parsed correctly ([5fc0b7e](https://github.com/gotson/komga/commits/5fc0b7e)) - -**kobo** -- proxy raw request body to kobo store ([4a7d9a6](https://github.com/gotson/komga/commits/4a7d9a6)), closes [#2289](https://github.com/gotson/komga/issues/2289) - -**koreader** -- also accept application/json on Accept header ([ddfe65d](https://github.com/gotson/komga/commits/ddfe65d)) - -**opds2** -- incorrect latest series navigation links ([717ef82](https://github.com/gotson/komga/commits/717ef82)), closes [#2285](https://github.com/gotson/komga/issues/2285) -- auth logo issue when using base url ([7c00661](https://github.com/gotson/komga/commits/7c00661)), closes [#2285](https://github.com/gotson/komga/issues/2285) - -## 🛠 Build -**docker** -- update base image to Ubuntu 26.04 for amd64 and arm64 ([5d14057](https://github.com/gotson/komga/commits/5d14057)) - -**webui** -- update Browserslist db ([7e0d680](https://github.com/gotson/komga/commits/7e0d680)) - -**unscoped** -- update homebrew action ([6c2621b](https://github.com/gotson/komga/commits/6c2621b)) - -## ⚙️ Dependencies -**ci** -- bump gradle/actions from 5 to 6 ([3ca9806](https://github.com/gotson/komga/commits/3ca9806)) - -**webui** -- bump @xmldom/xmldom from 0.8.12 to 0.8.13 in /komga-webui ([bb60a79](https://github.com/gotson/komga/commits/bb60a79)) -- bump axios from 1.13.5 to 1.15.0 in /komga-webui ([85edd8b](https://github.com/gotson/komga/commits/85edd8b)) -- bump follow-redirects in /komga-webui ([63de6aa](https://github.com/gotson/komga/commits/63de6aa)) -- bump lodash from 4.17.23 to 4.18.1 in /komga-webui ([b77554f](https://github.com/gotson/komga/commits/b77554f)) -- bump @xmldom/xmldom from 0.8.10 to 0.8.12 in /komga-webui ([5620e3f](https://github.com/gotson/komga/commits/5620e3f)) -- bump brace-expansion from 1.1.12 to 1.1.13 in /komga-webui ([263d3dd](https://github.com/gotson/komga/commits/263d3dd)) - -**unscoped** -- bump gradle-git-properties plugin from 2.5.2 to 2.5.7 ([dd9c3fa](https://github.com/gotson/komga/commits/dd9c3fa)) - -# [1.24.3](https://github.com/gotson/komga/compare/1.24.2...1.24.3) (2026-03-27) -## 🐛 Fixes -**webui** -- epub reader would not load ([b8ea79e](https://github.com/gotson/komga/commits/b8ea79e)) - -## ⚙️ Dependencies -**webui** -- bump node-forge from 1.3.2 to 1.4.0 in /komga-webui ([40dadcb](https://github.com/gotson/komga/commits/40dadcb)) - # [1.24.2](https://github.com/gotson/komga/compare/1.24.1...1.24.2) (2026-03-26) ## 🐛 Fixes **docker** diff --git a/gradle.properties b/gradle.properties index ddadf38f..72a12a51 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,2 +1,2 @@ -version=1.25.0 +version=1.24.2 org.gradle.jvmargs=-Xmx2G diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 0cf30d32..6bd5699c 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,9 +2,9 @@ sqliteJdbc = "3.50.2.0" nightmonkeys = "1.0.0" twelvemonkeys = "3.12.0" -springboot = "3.5.14" +springboot = "3.5.4" lucene = "9.9.1" # v10 requires JDK 21 -jooq = "3.19.32" # should be aligned with the version provided by Spring Boot +jooq = "3.19.24" # should be aligned with the version provided by Spring Boot [plugins] -gradleGitProperties = {id = "com.gorylenko.gradle-git-properties", version = "2.5.7"} +gradleGitProperties = {id = "com.gorylenko.gradle-git-properties", version = "2.5.2"} diff --git a/komga-webui/package-lock.json b/komga-webui/package-lock.json index 7504b6f1..134dea34 100644 --- a/komga-webui/package-lock.json +++ b/komga-webui/package-lock.json @@ -10,16 +10,16 @@ "dependencies": { "@d-i-t-a/reader": "github:gotson/R2D2BC#fork", "@w0s/isbn-verify": "^3.1.2", - "axios": "^1.16.0", + "axios": "^1.13.5", "chart.js": "^2.9.4", "core-js": "^3.8.3", "date-fns": "^2.30.0", "filesize": "^10.0.12", "js-file-downloader": "^1.1.25", "language-tags": "^1.0.9", - "lodash": "^4.18.1", + "lodash": "^4.17.23", "marked": "^15.0.4", - "qs": "^6.15.2", + "qs": "^6.14.2", "screenfull": "^5.2.0", "vue": "^2.6.14", "vue-chartkick": "^0.6.1", @@ -112,13 +112,14 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", - "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.28.5", + "@babel/helper-validator-identifier": "^7.25.9", "js-tokens": "^4.0.0", - "picocolors": "^1.1.1" + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" @@ -162,15 +163,14 @@ } }, "node_modules/@babel/generator": { - "version": "7.29.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", - "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", "dependencies": { - "@babel/parser": "^7.29.0", - "@babel/types": "^7.29.0", - "@jridgewell/gen-mapping": "^0.3.12", - "@jridgewell/trace-mapping": "^0.3.28", - "jsesc": "^3.0.2" + "@babel/types": "^7.23.0", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" }, "engines": { "node": ">=6.9.0" @@ -289,10 +289,13 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-globals": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", - "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dependencies": { + "@babel/types": "^7.22.5" + }, "engines": { "node": ">=6.9.0" } @@ -309,25 +312,26 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", - "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", "dependencies": { - "@babel/traverse": "^7.28.6", - "@babel/types": "^7.28.6" + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", - "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "version": "7.22.17", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.17.tgz", + "integrity": "sha512-XouDDhQESrLHTpnBtCKExJdyY4gJCdrvH2Pyv8r8kovX2U8G0dRUOT45T9XlbLtuu9CLXP15eusnkprhoPV5iQ==", "dependencies": { - "@babel/helper-module-imports": "^7.28.6", - "@babel/helper-validator-identifier": "^7.28.5", - "@babel/traverse": "^7.28.6" + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.15" }, "engines": { "node": ">=6.9.0" @@ -348,9 +352,9 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", - "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", "engines": { "node": ">=6.9.0" } @@ -392,7 +396,6 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, "dependencies": { "@babel/types": "^7.22.5" }, @@ -423,17 +426,19 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -488,11 +493,12 @@ } }, "node_modules/@babel/parser": { - "version": "7.29.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.3.tgz", - "integrity": "sha512-b3ctpQwp+PROvU/cttc4OYl4MzfJUWy6FZg+PMXfzmt/+39iHVF0sDfqay8TQM3JA2EUOyKcFZt75jWriQijsA==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz", + "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==", + "license": "MIT", "dependencies": { - "@babel/types": "^7.29.0" + "@babel/types": "^7.27.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -1246,15 +1252,15 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.29.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.4.tgz", - "integrity": "sha512-N7QmZ0xRZfjHOfZeQLJjwgX2zS9pdGHSVl/cjSGlo4dXMqvurfxXDMKY4RqEKzPozV78VMcd0lxyG13mlbKc4w==", + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.11.tgz", + "integrity": "sha512-rIqHmHoMEOhI3VkVf5jQ15l539KrwhzqcBO6wdCNWPWc/JWt9ILNYNUssbRpeq0qWns8svuw8LnMNCvWBIJ8wA==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.28.6", - "@babel/helper-plugin-utils": "^7.28.6", - "@babel/helper-validator-identifier": "^7.28.5", - "@babel/traverse": "^7.29.0" + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.9", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1791,42 +1797,47 @@ } }, "node_modules/@babel/template": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", - "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz", + "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==", + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.28.6", - "@babel/parser": "^7.28.6", - "@babel/types": "^7.28.6" + "@babel/code-frame": "^7.26.2", + "@babel/parser": "^7.27.0", + "@babel/types": "^7.27.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", - "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", + "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", "dependencies": { - "@babel/code-frame": "^7.29.0", - "@babel/generator": "^7.29.0", - "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.29.0", - "@babel/template": "^7.28.6", - "@babel/types": "^7.29.0", - "debug": "^4.3.1" + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.0", + "@babel/types": "^7.23.0", + "debug": "^4.1.0", + "globals": "^11.1.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/types": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", - "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz", + "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==", + "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -2719,12 +2730,16 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" } }, "node_modules/@jridgewell/resolve-uri": { @@ -2735,6 +2750,14 @@ "node": ">=6.0.0" } }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@jridgewell/source-map": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", @@ -2746,14 +2769,14 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==" + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -4637,9 +4660,9 @@ } }, "node_modules/@xmldom/xmldom": { - "version": "0.8.13", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.13.tgz", - "integrity": "sha512-KRYzxepc14G/CEpEGc3Yn+JKaAeT63smlDr+vjB8jRfgTBBI9wRj/nkQEO+ucV8p8I9bfKLWp37uHgFrbntPvw==", + "version": "0.8.10", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz", + "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==", "engines": { "node": ">=10.0.0" } @@ -5193,13 +5216,13 @@ "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==" }, "node_modules/axios": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.16.0.tgz", - "integrity": "sha512-6hp5CwvTPlN2A31g5dxnwAX0orzM7pmCRDLnZSX772mv8WDqICwFjowHuPs04Mc8deIld1+ejhtaMn5vp6b+1w==", + "version": "1.13.5", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.5.tgz", + "integrity": "sha512-cz4ur7Vb0xS4/KUN0tPWe44eqxrIu31me+fbang3ijiNscE129POzipJJA6zniq2C/Z6sJCjMimjS8Lc/GAs8Q==", "dependencies": { - "follow-redirects": "^1.16.0", + "follow-redirects": "^1.15.11", "form-data": "^4.0.5", - "proxy-from-env": "^2.1.0" + "proxy-from-env": "^1.1.0" } }, "node_modules/babel-jest": { @@ -5465,9 +5488,9 @@ ] }, "node_modules/baseline-browser-mapping": { - "version": "2.10.40", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.40.tgz", - "integrity": "sha512-BSSLZ9/Cjjv7Gtj5B68ZzXcXUg8iOf3fme+FCuh8rC/Go+Kmh8cox7M3A8dolou16s64QjLPOSdngh7GxXvkSw==", + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.0.tgz", + "integrity": "sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==", "license": "Apache-2.0", "bin": { "baseline-browser-mapping": "dist/cli.cjs" @@ -5609,9 +5632,9 @@ "integrity": "sha512-rJKn5ooC9u8q13IMCrW0RSp31pxBCHE3y9V/tp3TdWSLf8Em3p6Di4NBpfzbJge9YjjFEsD0RtFEjtvHL5VyEA==" }, "node_modules/brace-expansion": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", - "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -5877,9 +5900,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001800", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001800.tgz", - "integrity": "sha512-MMHtuAz9Ys840zAY5F4k6fV5GaivZ9sPk+nz0mY+GYVzRBnYkN0mpqkSR92oWRQ19yQWo4HvBV/FnC16AJX8MA==", + "version": "1.0.30001775", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001775.tgz", + "integrity": "sha512-s3Qv7Lht9zbVKE9XoTyRG6wVDCKdtOFIjBGg3+Yhn6JaytuNKPIjBMTMIY1AnOH3seL5mvF+x33oGAyK3hVt3A==", "funding": [ { "type": "opencollective", @@ -7488,9 +7511,9 @@ } }, "node_modules/editorconfig/node_modules/brace-expansion": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz", - "integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "dependencies": { "balanced-match": "^1.0.0" @@ -8904,9 +8927,9 @@ "dev": true }, "node_modules/fast-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.2.tgz", - "integrity": "sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", "dev": true, "funding": [ { @@ -9054,9 +9077,9 @@ } }, "node_modules/filehound/node_modules/brace-expansion": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz", - "integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dependencies": { "balanced-match": "^1.0.0" } @@ -9190,9 +9213,9 @@ "dev": true }, "node_modules/follow-redirects": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", - "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", "funding": [ { "type": "individual", @@ -9681,7 +9704,6 @@ "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, "engines": { "node": ">=4" } @@ -13115,9 +13137,9 @@ } }, "node_modules/js-beautify/node_modules/brace-expansion": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", - "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.3.tgz", + "integrity": "sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==", "dev": true, "dependencies": { "balanced-match": "^4.0.2" @@ -13172,12 +13194,12 @@ } }, "node_modules/js-cookie": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.7.tgz", - "integrity": "sha512-z/wZZgDrkNV1eA0ULjM/F9/50Ya8fbzgKneSpoPsXSGd0KnpdtHfOZWK+GcwLk+EZbS4F9RBhU+K2RgzuDaItw==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz", + "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==", "dev": true, "engines": { - "node": ">=20" + "node": ">=14" } }, "node_modules/js-file-downloader": { @@ -13292,14 +13314,14 @@ "dev": true }, "node_modules/jsesc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "bin": { "jsesc": "bin/jsesc" }, "engines": { - "node": ">=6" + "node": ">=4" } }, "node_modules/json-buffer": { @@ -13433,13 +13455,13 @@ } }, "node_modules/launch-editor": { - "version": "2.14.1", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.14.1.tgz", - "integrity": "sha512-QWBrQsMpH7gPr965dsKD/3cKWiNoTjpATQf++Xq63N6sKRGMwlVXz41O1IZTMfZQgBctD/K5Zt06+/I6pP6+HA==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.0.tgz", + "integrity": "sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==", "dev": true, "dependencies": { - "picocolors": "^1.1.1", - "shell-quote": "^1.8.4" + "picocolors": "^1.0.0", + "shell-quote": "^1.7.3" } }, "node_modules/launch-editor-middleware": { @@ -13540,9 +13562,9 @@ } }, "node_modules/lodash": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", - "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==" + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", + "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==" }, "node_modules/lodash.clonedeep": { "version": "4.5.0", @@ -14335,9 +14357,9 @@ } }, "node_modules/node-forge": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.4.0.tgz", - "integrity": "sha512-LarFH0+6VfriEhqMMcLX2F7SwSXeWwnEAJEsYm5QKWchiVYVvJyV9v7UDvUv+w5HO23ZpQTXDv/GxdDdMyOuoQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.2.tgz", + "integrity": "sha512-6xKiQ+cph9KImrRh0VsjH2d8/GXA4FIMlgU4B757iI1ApvcyA9VlouP0yZJha01V+huImO+kKMU7ih+2+E14fw==", "dev": true, "engines": { "node": ">= 6.13.0" @@ -15885,12 +15907,9 @@ } }, "node_modules/proxy-from-env": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", - "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", - "engines": { - "node": ">=10" - } + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, "node_modules/pseudomap": { "version": "1.0.2", @@ -15922,9 +15941,9 @@ } }, "node_modules/qs": { - "version": "6.15.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.2.tgz", - "integrity": "sha512-Rzq0KEyX/w/tEybncDgdkZrJgVUsUMk3xjh3t5bv3S1HTAtg+uOYt72+ZfwiQwKdysThkTBdL/rTi6HDmX9Ddw==", + "version": "6.14.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz", + "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==", "dependencies": { "side-channel": "^1.1.0" }, @@ -17168,13 +17187,10 @@ } }, "node_modules/shell-quote": { - "version": "1.8.4", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.4.tgz", - "integrity": "sha512-VsC6n6vz1ihYYyZZwX7YZSF5l5x36ca17OC+a69h94YqB7X6XLwf+5MOgynYir2SLFUbl8gIYvBo8K8RoNQ6bQ==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", "dev": true, - "engines": { - "node": ">= 0.4" - }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -20374,13 +20390,13 @@ } }, "@babel/code-frame": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", - "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", "requires": { - "@babel/helper-validator-identifier": "^7.28.5", + "@babel/helper-validator-identifier": "^7.25.9", "js-tokens": "^4.0.0", - "picocolors": "^1.1.1" + "picocolors": "^1.0.0" } }, "@babel/compat-data": { @@ -20411,15 +20427,14 @@ } }, "@babel/generator": { - "version": "7.29.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", - "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", "requires": { - "@babel/parser": "^7.29.0", - "@babel/types": "^7.29.0", - "@jridgewell/gen-mapping": "^0.3.12", - "@jridgewell/trace-mapping": "^0.3.28", - "jsesc": "^3.0.2" + "@babel/types": "^7.23.0", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" } }, "@babel/helper-annotate-as-pure": { @@ -20505,10 +20520,13 @@ "@babel/types": "^7.23.0" } }, - "@babel/helper-globals": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", - "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==" + "@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "requires": { + "@babel/types": "^7.22.5" + } }, "@babel/helper-member-expression-to-functions": { "version": "7.22.15", @@ -20519,22 +20537,23 @@ } }, "@babel/helper-module-imports": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", - "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", "requires": { - "@babel/traverse": "^7.28.6", - "@babel/types": "^7.28.6" + "@babel/types": "^7.22.15" } }, "@babel/helper-module-transforms": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", - "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "version": "7.22.17", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.17.tgz", + "integrity": "sha512-XouDDhQESrLHTpnBtCKExJdyY4gJCdrvH2Pyv8r8kovX2U8G0dRUOT45T9XlbLtuu9CLXP15eusnkprhoPV5iQ==", "requires": { - "@babel/helper-module-imports": "^7.28.6", - "@babel/helper-validator-identifier": "^7.28.5", - "@babel/traverse": "^7.28.6" + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.15" } }, "@babel/helper-optimise-call-expression": { @@ -20546,9 +20565,9 @@ } }, "@babel/helper-plugin-utils": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", - "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==" + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==" }, "@babel/helper-remap-async-to-generator": { "version": "7.22.17", @@ -20575,7 +20594,6 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, "requires": { "@babel/types": "^7.22.5" } @@ -20597,14 +20615,14 @@ } }, "@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==" + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==" }, "@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==" + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==" }, "@babel/helper-validator-option": { "version": "7.22.15", @@ -20643,11 +20661,11 @@ } }, "@babel/parser": { - "version": "7.29.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.3.tgz", - "integrity": "sha512-b3ctpQwp+PROvU/cttc4OYl4MzfJUWy6FZg+PMXfzmt/+39iHVF0sDfqay8TQM3JA2EUOyKcFZt75jWriQijsA==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz", + "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==", "requires": { - "@babel/types": "^7.29.0" + "@babel/types": "^7.27.0" } }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { @@ -21134,15 +21152,15 @@ } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.29.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.4.tgz", - "integrity": "sha512-N7QmZ0xRZfjHOfZeQLJjwgX2zS9pdGHSVl/cjSGlo4dXMqvurfxXDMKY4RqEKzPozV78VMcd0lxyG13mlbKc4w==", + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.11.tgz", + "integrity": "sha512-rIqHmHoMEOhI3VkVf5jQ15l539KrwhzqcBO6wdCNWPWc/JWt9ILNYNUssbRpeq0qWns8svuw8LnMNCvWBIJ8wA==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.28.6", - "@babel/helper-plugin-utils": "^7.28.6", - "@babel/helper-validator-identifier": "^7.28.5", - "@babel/traverse": "^7.29.0" + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.9", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5" } }, "@babel/plugin-transform-modules-umd": { @@ -21510,36 +21528,39 @@ } }, "@babel/template": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", - "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz", + "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==", "requires": { - "@babel/code-frame": "^7.28.6", - "@babel/parser": "^7.28.6", - "@babel/types": "^7.28.6" + "@babel/code-frame": "^7.26.2", + "@babel/parser": "^7.27.0", + "@babel/types": "^7.27.0" } }, "@babel/traverse": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", - "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", + "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", "requires": { - "@babel/code-frame": "^7.29.0", - "@babel/generator": "^7.29.0", - "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.29.0", - "@babel/template": "^7.28.6", - "@babel/types": "^7.29.0", - "debug": "^4.3.1" + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.0", + "@babel/types": "^7.23.0", + "debug": "^4.1.0", + "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", - "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz", + "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==", "requires": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" } }, "@bcoe/v8-coverage": { @@ -22204,12 +22225,13 @@ } }, "@jridgewell/gen-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", "requires": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" } }, "@jridgewell/resolve-uri": { @@ -22217,6 +22239,11 @@ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==" }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" + }, "@jridgewell/source-map": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", @@ -22228,14 +22255,14 @@ } }, "@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==" + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, "@jridgewell/trace-mapping": { - "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "requires": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -23737,9 +23764,9 @@ } }, "@xmldom/xmldom": { - "version": "0.8.13", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.13.tgz", - "integrity": "sha512-KRYzxepc14G/CEpEGc3Yn+JKaAeT63smlDr+vjB8jRfgTBBI9wRj/nkQEO+ucV8p8I9bfKLWp37uHgFrbntPvw==" + "version": "0.8.10", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz", + "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==" }, "@xtuc/ieee754": { "version": "1.2.0", @@ -24121,13 +24148,13 @@ "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==" }, "axios": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.16.0.tgz", - "integrity": "sha512-6hp5CwvTPlN2A31g5dxnwAX0orzM7pmCRDLnZSX772mv8WDqICwFjowHuPs04Mc8deIld1+ejhtaMn5vp6b+1w==", + "version": "1.13.5", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.5.tgz", + "integrity": "sha512-cz4ur7Vb0xS4/KUN0tPWe44eqxrIu31me+fbang3ijiNscE129POzipJJA6zniq2C/Z6sJCjMimjS8Lc/GAs8Q==", "requires": { - "follow-redirects": "^1.16.0", + "follow-redirects": "^1.15.11", "form-data": "^4.0.5", - "proxy-from-env": "^2.1.0" + "proxy-from-env": "^1.1.0" } }, "babel-jest": { @@ -24322,9 +24349,9 @@ "dev": true }, "baseline-browser-mapping": { - "version": "2.10.40", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.40.tgz", - "integrity": "sha512-BSSLZ9/Cjjv7Gtj5B68ZzXcXUg8iOf3fme+FCuh8rC/Go+Kmh8cox7M3A8dolou16s64QjLPOSdngh7GxXvkSw==" + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.0.tgz", + "integrity": "sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==" }, "batch": { "version": "0.6.1", @@ -24445,9 +24472,9 @@ "integrity": "sha512-rJKn5ooC9u8q13IMCrW0RSp31pxBCHE3y9V/tp3TdWSLf8Em3p6Di4NBpfzbJge9YjjFEsD0RtFEjtvHL5VyEA==" }, "brace-expansion": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", - "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -24627,9 +24654,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001800", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001800.tgz", - "integrity": "sha512-MMHtuAz9Ys840zAY5F4k6fV5GaivZ9sPk+nz0mY+GYVzRBnYkN0mpqkSR92oWRQ19yQWo4HvBV/FnC16AJX8MA==" + "version": "1.0.30001775", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001775.tgz", + "integrity": "sha512-s3Qv7Lht9zbVKE9XoTyRG6wVDCKdtOFIjBGg3+Yhn6JaytuNKPIjBMTMIY1AnOH3seL5mvF+x33oGAyK3hVt3A==" }, "case-sensitive-paths-webpack-plugin": { "version": "2.4.0", @@ -25841,9 +25868,9 @@ }, "dependencies": { "brace-expansion": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz", - "integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "requires": { "balanced-match": "^1.0.0" @@ -26912,9 +26939,9 @@ "dev": true }, "fast-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.2.tgz", - "integrity": "sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", "dev": true }, "fastq": { @@ -27025,9 +27052,9 @@ }, "dependencies": { "brace-expansion": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz", - "integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "requires": { "balanced-match": "^1.0.0" } @@ -27138,9 +27165,9 @@ "dev": true }, "follow-redirects": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", - "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==" + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==" }, "for-each": { "version": "0.3.3", @@ -27471,8 +27498,7 @@ "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" }, "globalthis": { "version": "1.0.3", @@ -29953,9 +29979,9 @@ "dev": true }, "brace-expansion": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", - "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.3.tgz", + "integrity": "sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==", "dev": true, "requires": { "balanced-match": "^4.0.2" @@ -29993,9 +30019,9 @@ } }, "js-cookie": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.7.tgz", - "integrity": "sha512-z/wZZgDrkNV1eA0ULjM/F9/50Ya8fbzgKneSpoPsXSGd0KnpdtHfOZWK+GcwLk+EZbS4F9RBhU+K2RgzuDaItw==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz", + "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==", "dev": true }, "js-file-downloader": { @@ -30089,9 +30115,9 @@ } }, "jsesc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==" + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" }, "json-buffer": { "version": "3.0.1", @@ -30201,13 +30227,13 @@ } }, "launch-editor": { - "version": "2.14.1", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.14.1.tgz", - "integrity": "sha512-QWBrQsMpH7gPr965dsKD/3cKWiNoTjpATQf++Xq63N6sKRGMwlVXz41O1IZTMfZQgBctD/K5Zt06+/I6pP6+HA==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.0.tgz", + "integrity": "sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==", "dev": true, "requires": { - "picocolors": "^1.1.1", - "shell-quote": "^1.8.4" + "picocolors": "^1.0.0", + "shell-quote": "^1.7.3" } }, "launch-editor-middleware": { @@ -30285,9 +30311,9 @@ } }, "lodash": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", - "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==" + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", + "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==" }, "lodash.clonedeep": { "version": "4.5.0", @@ -30904,9 +30930,9 @@ } }, "node-forge": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.4.0.tgz", - "integrity": "sha512-LarFH0+6VfriEhqMMcLX2F7SwSXeWwnEAJEsYm5QKWchiVYVvJyV9v7UDvUv+w5HO23ZpQTXDv/GxdDdMyOuoQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.2.tgz", + "integrity": "sha512-6xKiQ+cph9KImrRh0VsjH2d8/GXA4FIMlgU4B757iI1ApvcyA9VlouP0yZJha01V+huImO+kKMU7ih+2+E14fw==", "dev": true }, "node-int64": { @@ -31987,9 +32013,9 @@ } }, "proxy-from-env": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", - "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, "pseudomap": { "version": "1.0.2", @@ -32018,9 +32044,9 @@ "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==" }, "qs": { - "version": "6.15.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.2.tgz", - "integrity": "sha512-Rzq0KEyX/w/tEybncDgdkZrJgVUsUMk3xjh3t5bv3S1HTAtg+uOYt72+ZfwiQwKdysThkTBdL/rTi6HDmX9Ddw==", + "version": "6.14.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz", + "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==", "requires": { "side-channel": "^1.1.0" } @@ -32934,9 +32960,9 @@ "dev": true }, "shell-quote": { - "version": "1.8.4", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.4.tgz", - "integrity": "sha512-VsC6n6vz1ihYYyZZwX7YZSF5l5x36ca17OC+a69h94YqB7X6XLwf+5MOgynYir2SLFUbl8gIYvBo8K8RoNQ6bQ==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", "dev": true }, "shelljs": { diff --git a/komga-webui/package.json b/komga-webui/package.json index f963b3ee..870ccaef 100644 --- a/komga-webui/package.json +++ b/komga-webui/package.json @@ -11,16 +11,16 @@ "dependencies": { "@d-i-t-a/reader": "github:gotson/R2D2BC#fork", "@w0s/isbn-verify": "^3.1.2", - "axios": "^1.16.0", + "axios": "^1.13.5", "chart.js": "^2.9.4", "core-js": "^3.8.3", "date-fns": "^2.30.0", "filesize": "^10.0.12", "js-file-downloader": "^1.1.25", "language-tags": "^1.0.9", - "lodash": "^4.18.1", + "lodash": "^4.17.23", "marked": "^15.0.4", - "qs": "^6.15.2", + "qs": "^6.14.2", "screenfull": "^5.2.0", "vue": "^2.6.14", "vue-chartkick": "^0.6.1", diff --git a/komga-webui/src/views/EpubReader.vue b/komga-webui/src/views/EpubReader.vue index c866b9cc..334f3351 100644 --- a/komga-webui/src/views/EpubReader.vue +++ b/komga-webui/src/views/EpubReader.vue @@ -751,7 +751,7 @@ export default Vue.extend({ const fontFamiliesInjectables = this.fontFamiliesAdditional.map(x => ({ type: 'style', - url: new URL(`${urls.origin}api/v1/fonts/resource/${x}/css`).toString(), + url: new URL(`${urls.origin}api/v1/fonts/resource/${x}/css`, import.meta.url).toString(), fontFamily: x, })) diff --git a/komga/build.gradle.kts b/komga/build.gradle.kts index 497c9efe..c5e15cdf 100644 --- a/komga/build.gradle.kts +++ b/komga/build.gradle.kts @@ -78,7 +78,7 @@ dependencies { implementation("org.apache.tika:tika-core:2.9.1") implementation("org.apache.commons:commons-compress:1.27.1") - implementation("com.github.junrar:junrar:7.6.0") + implementation("com.github.junrar:junrar:7.5.5") implementation("com.github.gotson.nightcompress:nightcompress:1.1.1") implementation("org.apache.pdfbox:pdfbox:3.0.5") implementation("net.grey-panther:natural-comparator:1.1") @@ -394,7 +394,6 @@ openApi { args.add("--spring.profiles.active=claim,generate-openapi") args.add("--server.port=8080") } - waitTimeInSeconds.set(60) } tasks.jacocoTestReport { diff --git a/komga/docker/Dockerfile.tpl b/komga/docker/Dockerfile.tpl index 8a785e97..6d1f5fc2 100644 --- a/komga/docker/Dockerfile.tpl +++ b/komga/docker/Dockerfile.tpl @@ -5,11 +5,12 @@ COPY assembly/${JAR} application.jar RUN java -Djarmode=tools -jar application.jar extract --layers --destination extracted # amd64 builder -FROM ubuntu:26.04 AS build-amd64 +FROM ubuntu:24.10 AS build-amd64 ENV JAVA_HOME=/opt/java/openjdk COPY --from=eclipse-temurin:23-jre $JAVA_HOME $JAVA_HOME ENV PATH="${JAVA_HOME}/bin:${PATH}" -RUN apt -y update && \ +RUN sed -i -re 's/([a-z]{2}\.)?archive.ubuntu.com|security.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/sources.list.d/ubuntu.sources && \ + apt -y update && \ apt -y install ca-certificates locales libjxl-dev libheif-dev libwebp-dev libarchive-dev wget curl && \ echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen && \ locale-gen en_US.UTF-8 && \ @@ -19,11 +20,12 @@ RUN apt -y update && \ ENV LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/usr/lib/x86_64-linux-gnu" # arm64 builder -FROM ubuntu:26.04 AS build-arm64 +FROM ubuntu:24.10 AS build-arm64 ENV JAVA_HOME=/opt/java/openjdk COPY --from=eclipse-temurin:23-jre $JAVA_HOME $JAVA_HOME ENV PATH="${JAVA_HOME}/bin:${PATH}" -RUN apt -y update && \ +RUN sed -i -re 's/([a-z]{2}\.)?ports.ubuntu.com\/ubuntu-ports/old-releases.ubuntu.com\/ubuntu/g' /etc/apt/sources.list.d/ubuntu.sources && \ + apt -y update && \ apt -y install ca-certificates locales libjxl-dev libheif-dev libwebp-dev libarchive-dev wget curl && \ echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen && \ locale-gen en_US.UTF-8 && \ diff --git a/komga/docs/openapi.json b/komga/docs/openapi.json index 01e5454a..dfd17abf 100644 --- a/komga/docs/openapi.json +++ b/komga/docs/openapi.json @@ -7,7 +7,7 @@ "url": "https://github.com/gotson/komga/blob/master/LICENSE" }, "title": "Komga API", - "version": "1.25.0" + "version": "1.24.2" }, "externalDocs": { "description": "Komga documentation", @@ -8770,6 +8770,62 @@ }, "components": { "schemas": { + "After": { + "allOf": [ + { + "$ref": "#/components/schemas/Date" + }, + { + "type": "object", + "properties": { + "dateTime": { + "type": "string", + "format": "date-time" + } + } + } + ], + "required": [ + "dateTime" + ] + }, + "AgeRating": { + "allOf": [ + { + "$ref": "#/components/schemas/Series" + }, + { + "type": "object", + "properties": { + "ageRating": { + "oneOf": [ + { + "$ref": "#/components/schemas/GreaterThan" + }, + { + "$ref": "#/components/schemas/Is" + }, + { + "$ref": "#/components/schemas/IsNot" + }, + { + "$ref": "#/components/schemas/IsNotNullT" + }, + { + "$ref": "#/components/schemas/IsNullT" + }, + { + "$ref": "#/components/schemas/LessThan" + } + ] + } + } + } + ], + "required": [ + "ageRating" + ] + }, "AgeRestrictionDto": { "type": "object", "properties": { @@ -8811,6 +8867,155 @@ "restriction" ] }, + "AllOfBook": { + "allOf": [ + { + "$ref": "#/components/schemas/Book" + }, + { + "type": "object", + "properties": { + "allOf": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/AllOfBook" + }, + { + "$ref": "#/components/schemas/AnyOfBook" + }, + { + "$ref": "#/components/schemas/Author" + }, + { + "$ref": "#/components/schemas/Deleted" + }, + { + "$ref": "#/components/schemas/LibraryId" + }, + { + "$ref": "#/components/schemas/MediaProfile" + }, + { + "$ref": "#/components/schemas/MediaStatus" + }, + { + "$ref": "#/components/schemas/NumberSort" + }, + { + "$ref": "#/components/schemas/OneShot" + }, + { + "$ref": "#/components/schemas/Poster" + }, + { + "$ref": "#/components/schemas/ReadListId" + }, + { + "$ref": "#/components/schemas/ReadStatus" + }, + { + "$ref": "#/components/schemas/ReleaseDate" + }, + { + "$ref": "#/components/schemas/SeriesId" + }, + { + "$ref": "#/components/schemas/Tag" + }, + { + "$ref": "#/components/schemas/Title" + } + ] + } + } + } + } + ], + "required": [ + "allOf" + ] + }, + "AllOfSeries": { + "allOf": [ + { + "$ref": "#/components/schemas/Series" + }, + { + "type": "object", + "properties": { + "allOf": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/AgeRating" + }, + { + "$ref": "#/components/schemas/AllOfSeries" + }, + { + "$ref": "#/components/schemas/AnyOfSeries" + }, + { + "$ref": "#/components/schemas/Author" + }, + { + "$ref": "#/components/schemas/CollectionId" + }, + { + "$ref": "#/components/schemas/Complete" + }, + { + "$ref": "#/components/schemas/Deleted" + }, + { + "$ref": "#/components/schemas/Genre" + }, + { + "$ref": "#/components/schemas/Language" + }, + { + "$ref": "#/components/schemas/LibraryId" + }, + { + "$ref": "#/components/schemas/OneShot" + }, + { + "$ref": "#/components/schemas/Publisher" + }, + { + "$ref": "#/components/schemas/ReadStatus" + }, + { + "$ref": "#/components/schemas/ReleaseDate" + }, + { + "$ref": "#/components/schemas/SeriesStatus" + }, + { + "$ref": "#/components/schemas/SharingLabel" + }, + { + "$ref": "#/components/schemas/Tag" + }, + { + "$ref": "#/components/schemas/Title" + }, + { + "$ref": "#/components/schemas/TitleSort" + } + ] + } + } + } + } + ], + "required": [ + "allOf" + ] + }, "AlternateTitleDto": { "type": "object", "properties": { @@ -8843,6 +9048,155 @@ "title" ] }, + "AnyOfBook": { + "allOf": [ + { + "$ref": "#/components/schemas/Book" + }, + { + "type": "object", + "properties": { + "anyOf": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/AllOfBook" + }, + { + "$ref": "#/components/schemas/AnyOfBook" + }, + { + "$ref": "#/components/schemas/Author" + }, + { + "$ref": "#/components/schemas/Deleted" + }, + { + "$ref": "#/components/schemas/LibraryId" + }, + { + "$ref": "#/components/schemas/MediaProfile" + }, + { + "$ref": "#/components/schemas/MediaStatus" + }, + { + "$ref": "#/components/schemas/NumberSort" + }, + { + "$ref": "#/components/schemas/OneShot" + }, + { + "$ref": "#/components/schemas/Poster" + }, + { + "$ref": "#/components/schemas/ReadListId" + }, + { + "$ref": "#/components/schemas/ReadStatus" + }, + { + "$ref": "#/components/schemas/ReleaseDate" + }, + { + "$ref": "#/components/schemas/SeriesId" + }, + { + "$ref": "#/components/schemas/Tag" + }, + { + "$ref": "#/components/schemas/Title" + } + ] + } + } + } + } + ], + "required": [ + "anyOf" + ] + }, + "AnyOfSeries": { + "allOf": [ + { + "$ref": "#/components/schemas/Series" + }, + { + "type": "object", + "properties": { + "anyOf": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/AgeRating" + }, + { + "$ref": "#/components/schemas/AllOfSeries" + }, + { + "$ref": "#/components/schemas/AnyOfSeries" + }, + { + "$ref": "#/components/schemas/Author" + }, + { + "$ref": "#/components/schemas/CollectionId" + }, + { + "$ref": "#/components/schemas/Complete" + }, + { + "$ref": "#/components/schemas/Deleted" + }, + { + "$ref": "#/components/schemas/Genre" + }, + { + "$ref": "#/components/schemas/Language" + }, + { + "$ref": "#/components/schemas/LibraryId" + }, + { + "$ref": "#/components/schemas/OneShot" + }, + { + "$ref": "#/components/schemas/Publisher" + }, + { + "$ref": "#/components/schemas/ReadStatus" + }, + { + "$ref": "#/components/schemas/ReleaseDate" + }, + { + "$ref": "#/components/schemas/SeriesStatus" + }, + { + "$ref": "#/components/schemas/SharingLabel" + }, + { + "$ref": "#/components/schemas/Tag" + }, + { + "$ref": "#/components/schemas/Title" + }, + { + "$ref": "#/components/schemas/TitleSort" + } + ] + } + } + } + } + ], + "required": [ + "anyOf" + ] + }, "ApiKeyDto": { "type": "object", "properties": { @@ -8928,6 +9282,34 @@ "success" ] }, + "Author": { + "allOf": [ + { + "$ref": "#/components/schemas/Series" + }, + { + "type": "object", + "properties": { + "author": { + "oneOf": [ + { + "$ref": "#/components/schemas/Is" + }, + { + "$ref": "#/components/schemas/IsNot" + } + ] + } + } + }, + { + "$ref": "#/components/schemas/Book" + } + ], + "required": [ + "author" + ] + }, "AuthorDto": { "type": "object", "properties": { @@ -8960,6 +9342,44 @@ "role" ] }, + "Before": { + "allOf": [ + { + "$ref": "#/components/schemas/Date" + }, + { + "type": "object", + "properties": { + "dateTime": { + "type": "string", + "format": "date-time" + } + } + } + ], + "required": [ + "dateTime" + ] + }, + "BeginsWith": { + "allOf": [ + { + "$ref": "#/components/schemas/StringOp" + }, + { + "type": "object", + "properties": { + "value": { + "type": "string" + } + } + } + ], + "required": [ + "value" + ] + }, + "Book": {}, "BookDto": { "type": "object", "properties": { @@ -9307,13 +9727,75 @@ "type": "object", "properties": { "condition": { - "$ref": "#/components/schemas/SearchConditionBook" + "oneOf": [ + { + "$ref": "#/components/schemas/AllOfBook" + }, + { + "$ref": "#/components/schemas/AnyOfBook" + }, + { + "$ref": "#/components/schemas/Author" + }, + { + "$ref": "#/components/schemas/Deleted" + }, + { + "$ref": "#/components/schemas/LibraryId" + }, + { + "$ref": "#/components/schemas/MediaProfile" + }, + { + "$ref": "#/components/schemas/MediaStatus" + }, + { + "$ref": "#/components/schemas/NumberSort" + }, + { + "$ref": "#/components/schemas/OneShot" + }, + { + "$ref": "#/components/schemas/Poster" + }, + { + "$ref": "#/components/schemas/ReadListId" + }, + { + "$ref": "#/components/schemas/ReadStatus" + }, + { + "$ref": "#/components/schemas/ReleaseDate" + }, + { + "$ref": "#/components/schemas/SeriesId" + }, + { + "$ref": "#/components/schemas/Tag" + }, + { + "$ref": "#/components/schemas/Title" + } + ] }, "fullTextSearch": { "type": "string" } } }, + "Boolean": { + "discriminator": { + "propertyName": "operator" + }, + "properties": { + "operator": { + "type": "string" + } + }, + "required": [ + "operator" + ] + }, "ClaimStatus": { "type": "object", "properties": { @@ -9431,6 +9913,31 @@ "seriesIds" ] }, + "CollectionId": { + "allOf": [ + { + "$ref": "#/components/schemas/Series" + }, + { + "type": "object", + "properties": { + "collectionId": { + "oneOf": [ + { + "$ref": "#/components/schemas/Is" + }, + { + "$ref": "#/components/schemas/IsNot" + } + ] + } + } + } + ], + "required": [ + "collectionId" + ] + }, "CollectionUpdateDto": { "type": "object", "properties": { @@ -9448,6 +9955,90 @@ } } }, + "Complete": { + "allOf": [ + { + "$ref": "#/components/schemas/Series" + }, + { + "type": "object", + "properties": { + "complete": { + "oneOf": [ + { + "$ref": "#/components/schemas/IsFalse" + }, + { + "$ref": "#/components/schemas/IsTrue" + } + ] + } + } + } + ], + "required": [ + "complete" + ] + }, + "Contains": { + "allOf": [ + { + "$ref": "#/components/schemas/StringOp" + }, + { + "type": "object", + "properties": { + "value": { + "type": "string" + } + } + } + ], + "required": [ + "value" + ] + }, + "Date": { + "discriminator": { + "propertyName": "operator" + }, + "properties": { + "operator": { + "type": "string" + } + }, + "required": [ + "operator" + ] + }, + "Deleted": { + "allOf": [ + { + "$ref": "#/components/schemas/Series" + }, + { + "type": "object", + "properties": { + "deleted": { + "oneOf": [ + { + "$ref": "#/components/schemas/IsFalse" + }, + { + "$ref": "#/components/schemas/IsTrue" + } + ] + } + } + }, + { + "$ref": "#/components/schemas/Book" + } + ], + "required": [ + "deleted" + ] + }, "DirectoryListingDto": { "type": "object", "properties": { @@ -9487,6 +10078,219 @@ "showFiles" ] }, + "DoesNotBeginWith": { + "allOf": [ + { + "$ref": "#/components/schemas/StringOp" + }, + { + "type": "object", + "properties": { + "value": { + "type": "string" + } + } + } + ], + "required": [ + "value" + ] + }, + "DoesNotContain": { + "allOf": [ + { + "$ref": "#/components/schemas/StringOp" + }, + { + "type": "object", + "properties": { + "value": { + "type": "string" + } + } + } + ], + "required": [ + "value" + ] + }, + "DoesNotEndWith": { + "allOf": [ + { + "$ref": "#/components/schemas/StringOp" + }, + { + "type": "object", + "properties": { + "value": { + "type": "string" + } + } + } + ], + "required": [ + "value" + ] + }, + "EndsWith": { + "allOf": [ + { + "$ref": "#/components/schemas/StringOp" + }, + { + "type": "object", + "properties": { + "value": { + "type": "string" + } + } + } + ], + "required": [ + "value" + ] + }, + "EqualityAuthorMatch": { + "discriminator": { + "propertyName": "operator" + }, + "properties": { + "operator": { + "type": "string" + } + }, + "required": [ + "operator" + ] + }, + "EqualityMediaProfile": { + "discriminator": { + "propertyName": "operator" + }, + "properties": { + "operator": { + "type": "string" + } + }, + "required": [ + "operator" + ] + }, + "EqualityNullableString": { + "discriminator": { + "propertyName": "operator" + }, + "properties": { + "operator": { + "type": "string" + } + }, + "required": [ + "operator" + ] + }, + "EqualityPosterMatch": { + "discriminator": { + "propertyName": "operator" + }, + "properties": { + "operator": { + "type": "string" + } + }, + "required": [ + "operator" + ] + }, + "EqualityReadStatus": { + "discriminator": { + "propertyName": "operator" + }, + "properties": { + "operator": { + "type": "string" + } + }, + "required": [ + "operator" + ] + }, + "EqualityStatus": { + "discriminator": { + "propertyName": "operator" + }, + "properties": { + "operator": { + "type": "string" + } + }, + "required": [ + "operator" + ] + }, + "EqualityString": { + "discriminator": { + "propertyName": "operator" + }, + "properties": { + "operator": { + "type": "string" + } + }, + "required": [ + "operator" + ] + }, + "Genre": { + "allOf": [ + { + "$ref": "#/components/schemas/Series" + }, + { + "type": "object", + "properties": { + "genre": { + "oneOf": [ + { + "$ref": "#/components/schemas/Is" + }, + { + "$ref": "#/components/schemas/IsNot" + }, + { + "$ref": "#/components/schemas/IsNotNullT" + }, + { + "$ref": "#/components/schemas/IsNullT" + } + ] + } + } + } + ], + "required": [ + "genre" + ] + }, + "GreaterThan": { + "allOf": [ + { + "$ref": "#/components/schemas/NumericNullableInteger" + }, + { + "type": "object", + "properties": { + "value": {} + } + }, + { + "$ref": "#/components/schemas/NumericFloat" + } + ], + "required": [ + "value" + ] + }, "GroupCountDto": { "type": "object", "properties": { @@ -9536,6 +10340,176 @@ "type" ] }, + "Is": { + "allOf": [ + { + "$ref": "#/components/schemas/NumericNullableInteger" + }, + { + "type": "object", + "properties": { + "value": {} + } + }, + { + "$ref": "#/components/schemas/EqualityAuthorMatch" + }, + { + "$ref": "#/components/schemas/EqualityString" + }, + { + "$ref": "#/components/schemas/EqualityNullableString" + }, + { + "$ref": "#/components/schemas/EqualityReadStatus" + }, + { + "$ref": "#/components/schemas/EqualityStatus" + }, + { + "$ref": "#/components/schemas/StringOp" + }, + { + "$ref": "#/components/schemas/EqualityMediaProfile" + }, + { + "$ref": "#/components/schemas/NumericFloat" + }, + { + "$ref": "#/components/schemas/EqualityPosterMatch" + } + ], + "required": [ + "value" + ] + }, + "IsFalse": { + "allOf": [ + { + "$ref": "#/components/schemas/Boolean" + } + ] + }, + "IsInTheLast": { + "allOf": [ + { + "$ref": "#/components/schemas/Date" + }, + { + "type": "object", + "properties": { + "duration": { + "type": "string" + } + } + } + ], + "required": [ + "duration" + ] + }, + "IsNot": { + "allOf": [ + { + "$ref": "#/components/schemas/NumericNullableInteger" + }, + { + "type": "object", + "properties": { + "value": {} + } + }, + { + "$ref": "#/components/schemas/EqualityAuthorMatch" + }, + { + "$ref": "#/components/schemas/EqualityString" + }, + { + "$ref": "#/components/schemas/EqualityNullableString" + }, + { + "$ref": "#/components/schemas/EqualityReadStatus" + }, + { + "$ref": "#/components/schemas/EqualityStatus" + }, + { + "$ref": "#/components/schemas/StringOp" + }, + { + "$ref": "#/components/schemas/EqualityMediaProfile" + }, + { + "$ref": "#/components/schemas/NumericFloat" + }, + { + "$ref": "#/components/schemas/EqualityPosterMatch" + } + ], + "required": [ + "value" + ] + }, + "IsNotInTheLast": { + "allOf": [ + { + "$ref": "#/components/schemas/Date" + }, + { + "type": "object", + "properties": { + "duration": { + "type": "string" + } + } + } + ], + "required": [ + "duration" + ] + }, + "IsNotNull": { + "allOf": [ + { + "$ref": "#/components/schemas/Date" + } + ] + }, + "IsNotNullT": { + "allOf": [ + { + "$ref": "#/components/schemas/NumericNullableInteger" + }, + { + "$ref": "#/components/schemas/EqualityNullableString" + } + ] + }, + "IsNull": { + "allOf": [ + { + "$ref": "#/components/schemas/Date" + } + ] + }, + "IsNullT": { + "allOf": [ + { + "$ref": "#/components/schemas/NumericNullableInteger" + }, + { + "$ref": "#/components/schemas/EqualityNullableString" + } + ] + }, + "IsTrue": { + "allOf": [ + { + "$ref": "#/components/schemas/Boolean" + } + ] + }, "ItemDto": { "type": "object", "properties": { @@ -9616,6 +10590,50 @@ "read" ] }, + "Language": { + "allOf": [ + { + "$ref": "#/components/schemas/Series" + }, + { + "type": "object", + "properties": { + "language": { + "oneOf": [ + { + "$ref": "#/components/schemas/Is" + }, + { + "$ref": "#/components/schemas/IsNot" + } + ] + } + } + } + ], + "required": [ + "language" + ] + }, + "LessThan": { + "allOf": [ + { + "$ref": "#/components/schemas/NumericNullableInteger" + }, + { + "type": "object", + "properties": { + "value": {} + } + }, + { + "$ref": "#/components/schemas/NumericFloat" + } + ], + "required": [ + "value" + ] + }, "LibraryCreationDto": { "type": "object", "properties": { @@ -9898,6 +10916,34 @@ "unavailable" ] }, + "LibraryId": { + "allOf": [ + { + "$ref": "#/components/schemas/Series" + }, + { + "type": "object", + "properties": { + "libraryId": { + "oneOf": [ + { + "$ref": "#/components/schemas/Is" + }, + { + "$ref": "#/components/schemas/IsNot" + } + ] + } + } + }, + { + "$ref": "#/components/schemas/Book" + } + ], + "required": [ + "libraryId" + ] + }, "LibraryUpdateDto": { "type": "object", "description": "Fields to update. You can omit fields you don\u0027t want to update.", @@ -10068,6 +11114,56 @@ "status" ] }, + "MediaProfile": { + "allOf": [ + { + "$ref": "#/components/schemas/Book" + }, + { + "type": "object", + "properties": { + "mediaProfile": { + "oneOf": [ + { + "$ref": "#/components/schemas/Is" + }, + { + "$ref": "#/components/schemas/IsNot" + } + ] + } + } + } + ], + "required": [ + "mediaProfile" + ] + }, + "MediaStatus": { + "allOf": [ + { + "$ref": "#/components/schemas/Book" + }, + { + "type": "object", + "properties": { + "mediaStatus": { + "oneOf": [ + { + "$ref": "#/components/schemas/Is" + }, + { + "$ref": "#/components/schemas/IsNot" + } + ] + } + } + } + ], + "required": [ + "mediaStatus" + ] + }, "MediaType": { "type": "object", "properties": { @@ -10104,6 +11200,63 @@ } } }, + "NumberSort": { + "allOf": [ + { + "$ref": "#/components/schemas/Book" + }, + { + "type": "object", + "properties": { + "numberSort": { + "oneOf": [ + { + "$ref": "#/components/schemas/GreaterThan" + }, + { + "$ref": "#/components/schemas/Is" + }, + { + "$ref": "#/components/schemas/IsNot" + }, + { + "$ref": "#/components/schemas/LessThan" + } + ] + } + } + } + ], + "required": [ + "numberSort" + ] + }, + "NumericFloat": { + "discriminator": { + "propertyName": "operator" + }, + "properties": { + "operator": { + "type": "string" + } + }, + "required": [ + "operator" + ] + }, + "NumericNullableInteger": { + "discriminator": { + "propertyName": "operator" + }, + "properties": { + "operator": { + "type": "string" + } + }, + "required": [ + "operator" + ] + }, "OAuth2ClientDto": { "type": "object", "properties": { @@ -10119,6 +11272,34 @@ "registrationId" ] }, + "OneShot": { + "allOf": [ + { + "$ref": "#/components/schemas/Series" + }, + { + "type": "object", + "properties": { + "oneShot": { + "oneOf": [ + { + "$ref": "#/components/schemas/IsFalse" + }, + { + "$ref": "#/components/schemas/IsTrue" + } + ] + } + } + }, + { + "$ref": "#/components/schemas/Book" + } + ], + "required": [ + "oneShot" + ] + }, "PageAuthenticationActivityDto": { "type": "object", "properties": { @@ -10794,6 +11975,56 @@ "type" ] }, + "Poster": { + "allOf": [ + { + "$ref": "#/components/schemas/Book" + }, + { + "type": "object", + "properties": { + "poster": { + "oneOf": [ + { + "$ref": "#/components/schemas/Is" + }, + { + "$ref": "#/components/schemas/IsNot" + } + ] + } + } + } + ], + "required": [ + "poster" + ] + }, + "Publisher": { + "allOf": [ + { + "$ref": "#/components/schemas/Series" + }, + { + "type": "object", + "properties": { + "publisher": { + "oneOf": [ + { + "$ref": "#/components/schemas/Is" + }, + { + "$ref": "#/components/schemas/IsNot" + } + ] + } + } + } + ], + "required": [ + "publisher" + ] + }, "R2Device": { "type": "object", "properties": { @@ -10947,6 +12178,31 @@ "summary" ] }, + "ReadListId": { + "allOf": [ + { + "$ref": "#/components/schemas/Book" + }, + { + "type": "object", + "properties": { + "readListId": { + "oneOf": [ + { + "$ref": "#/components/schemas/Is" + }, + { + "$ref": "#/components/schemas/IsNot" + } + ] + } + } + } + ], + "required": [ + "readListId" + ] + }, "ReadListMatchDto": { "type": "object", "properties": { @@ -11149,6 +12405,74 @@ } } }, + "ReadStatus": { + "allOf": [ + { + "$ref": "#/components/schemas/Series" + }, + { + "type": "object", + "properties": { + "readStatus": { + "oneOf": [ + { + "$ref": "#/components/schemas/Is" + }, + { + "$ref": "#/components/schemas/IsNot" + } + ] + } + } + }, + { + "$ref": "#/components/schemas/Book" + } + ], + "required": [ + "readStatus" + ] + }, + "ReleaseDate": { + "allOf": [ + { + "$ref": "#/components/schemas/Series" + }, + { + "type": "object", + "properties": { + "releaseDate": { + "oneOf": [ + { + "$ref": "#/components/schemas/After" + }, + { + "$ref": "#/components/schemas/Before" + }, + { + "$ref": "#/components/schemas/IsInTheLast" + }, + { + "$ref": "#/components/schemas/IsNotInTheLast" + }, + { + "$ref": "#/components/schemas/IsNotNull" + }, + { + "$ref": "#/components/schemas/IsNull" + } + ] + } + } + }, + { + "$ref": "#/components/schemas/Book" + } + ], + "required": [ + "releaseDate" + ] + }, "ReleaseDto": { "type": "object", "properties": { @@ -11192,955 +12516,7 @@ "path" ] }, - "SearchConditionAgeRating": { - "properties": { - "ageRating": { - "$ref": "#/components/schemas/SearchOperatorNumericNullableInteger" - } - }, - "required": [ - "ageRating" - ] - }, - "SearchConditionAllOfBook": { - "properties": { - "allOf": { - "type": "array", - "items": { - "$ref": "#/components/schemas/SearchConditionBook" - } - } - }, - "required": [ - "allOf" - ] - }, - "SearchConditionAllOfSeries": { - "properties": { - "allOf": { - "type": "array", - "items": { - "$ref": "#/components/schemas/SearchConditionSeries" - } - } - }, - "required": [ - "allOf" - ] - }, - "SearchConditionAnyOfBook": { - "properties": { - "anyOf": { - "type": "array", - "items": { - "$ref": "#/components/schemas/SearchConditionBook" - } - } - }, - "required": [ - "anyOf" - ] - }, - "SearchConditionAnyOfSeries": { - "properties": { - "anyOf": { - "type": "array", - "items": { - "$ref": "#/components/schemas/SearchConditionSeries" - } - } - }, - "required": [ - "anyOf" - ] - }, - "SearchConditionAuthor": { - "properties": { - "author": { - "$ref": "#/components/schemas/SearchOperatorEqualityAuthorMatch" - } - }, - "required": [ - "author" - ] - }, - "SearchConditionBook": { - "oneOf": [ - { - "$ref": "#/components/schemas/SearchConditionAnyOfBook" - }, - { - "$ref": "#/components/schemas/SearchConditionAllOfBook" - }, - { - "$ref": "#/components/schemas/SearchConditionLibraryId" - }, - { - "$ref": "#/components/schemas/SearchConditionReadListId" - }, - { - "$ref": "#/components/schemas/SearchConditionSeriesId" - }, - { - "$ref": "#/components/schemas/SearchConditionDeleted" - }, - { - "$ref": "#/components/schemas/SearchConditionOneShot" - }, - { - "$ref": "#/components/schemas/SearchConditionTitle" - }, - { - "$ref": "#/components/schemas/SearchConditionReleaseDate" - }, - { - "$ref": "#/components/schemas/SearchConditionTag" - }, - { - "$ref": "#/components/schemas/SearchConditionNumberSort" - }, - { - "$ref": "#/components/schemas/SearchConditionReadStatus" - }, - { - "$ref": "#/components/schemas/SearchConditionMediaStatus" - }, - { - "$ref": "#/components/schemas/SearchConditionMediaProfile" - }, - { - "$ref": "#/components/schemas/SearchConditionAuthor" - }, - { - "$ref": "#/components/schemas/SearchConditionPoster" - } - ] - }, - "SearchConditionCollectionId": { - "properties": { - "collectionId": { - "$ref": "#/components/schemas/SearchOperatorEqualityString" - } - }, - "required": [ - "collectionId" - ] - }, - "SearchConditionComplete": { - "properties": { - "complete": { - "$ref": "#/components/schemas/SearchOperatorBoolean" - } - }, - "required": [ - "complete" - ] - }, - "SearchConditionDeleted": { - "properties": { - "deleted": { - "$ref": "#/components/schemas/SearchOperatorBoolean" - } - }, - "required": [ - "deleted" - ] - }, - "SearchConditionGenre": { - "properties": { - "genre": { - "$ref": "#/components/schemas/SearchOperatorEqualityNullableString" - } - }, - "required": [ - "genre" - ] - }, - "SearchConditionLanguage": { - "properties": { - "language": { - "$ref": "#/components/schemas/SearchOperatorEqualityString" - } - }, - "required": [ - "language" - ] - }, - "SearchConditionLibraryId": { - "properties": { - "libraryId": { - "$ref": "#/components/schemas/SearchOperatorEqualityString" - } - }, - "required": [ - "libraryId" - ] - }, - "SearchConditionMediaProfile": { - "properties": { - "mediaProfile": { - "$ref": "#/components/schemas/SearchOperatorEqualityMediaProfile" - } - }, - "required": [ - "mediaProfile" - ] - }, - "SearchConditionMediaStatus": { - "properties": { - "mediaStatus": { - "$ref": "#/components/schemas/SearchOperatorEqualityStatus" - } - }, - "required": [ - "mediaStatus" - ] - }, - "SearchConditionNumberSort": { - "properties": { - "numberSort": { - "$ref": "#/components/schemas/SearchOperatorNumericTFloat" - } - }, - "required": [ - "numberSort" - ] - }, - "SearchConditionOneShot": { - "properties": { - "oneShot": { - "$ref": "#/components/schemas/SearchOperatorBoolean" - } - }, - "required": [ - "oneShot" - ] - }, - "SearchConditionPoster": { - "properties": { - "poster": { - "$ref": "#/components/schemas/SearchOperatorEqualityPosterMatch" - } - }, - "required": [ - "poster" - ] - }, - "SearchConditionPublisher": { - "properties": { - "publisher": { - "$ref": "#/components/schemas/SearchOperatorEqualityString" - } - }, - "required": [ - "publisher" - ] - }, - "SearchConditionReadListId": { - "properties": { - "readListId": { - "$ref": "#/components/schemas/SearchOperatorEqualityString" - } - }, - "required": [ - "readListId" - ] - }, - "SearchConditionReadStatus": { - "properties": { - "readStatus": { - "$ref": "#/components/schemas/SearchOperatorEqualityReadStatus" - } - }, - "required": [ - "readStatus" - ] - }, - "SearchConditionReleaseDate": { - "properties": { - "releaseDate": { - "$ref": "#/components/schemas/SearchOperatorDate" - } - }, - "required": [ - "releaseDate" - ] - }, - "SearchConditionSeries": { - "oneOf": [ - { - "$ref": "#/components/schemas/SearchConditionAnyOfSeries" - }, - { - "$ref": "#/components/schemas/SearchConditionAllOfSeries" - }, - { - "$ref": "#/components/schemas/SearchConditionLibraryId" - }, - { - "$ref": "#/components/schemas/SearchConditionCollectionId" - }, - { - "$ref": "#/components/schemas/SearchConditionDeleted" - }, - { - "$ref": "#/components/schemas/SearchConditionComplete" - }, - { - "$ref": "#/components/schemas/SearchConditionOneShot" - }, - { - "$ref": "#/components/schemas/SearchConditionTitle" - }, - { - "$ref": "#/components/schemas/SearchConditionTitleSort" - }, - { - "$ref": "#/components/schemas/SearchConditionReleaseDate" - }, - { - "$ref": "#/components/schemas/SearchConditionTag" - }, - { - "$ref": "#/components/schemas/SearchConditionSharingLabel" - }, - { - "$ref": "#/components/schemas/SearchConditionPublisher" - }, - { - "$ref": "#/components/schemas/SearchConditionLanguage" - }, - { - "$ref": "#/components/schemas/SearchConditionGenre" - }, - { - "$ref": "#/components/schemas/SearchConditionAgeRating" - }, - { - "$ref": "#/components/schemas/SearchConditionReadStatus" - }, - { - "$ref": "#/components/schemas/SearchConditionSeriesStatus" - }, - { - "$ref": "#/components/schemas/SearchConditionAuthor" - } - ] - }, - "SearchConditionSeriesId": { - "properties": { - "seriesId": { - "$ref": "#/components/schemas/SearchOperatorEqualityString" - } - }, - "required": [ - "seriesId" - ] - }, - "SearchConditionSeriesStatus": { - "properties": { - "seriesStatus": { - "$ref": "#/components/schemas/SearchOperatorEqualityStatus" - } - }, - "required": [ - "seriesStatus" - ] - }, - "SearchConditionSharingLabel": { - "properties": { - "sharingLabel": { - "$ref": "#/components/schemas/SearchOperatorEqualityNullableString" - } - }, - "required": [ - "sharingLabel" - ] - }, - "SearchConditionTag": { - "properties": { - "tag": { - "$ref": "#/components/schemas/SearchOperatorEqualityNullableString" - } - }, - "required": [ - "tag" - ] - }, - "SearchConditionTitle": { - "properties": { - "title": { - "$ref": "#/components/schemas/SearchOperatorString" - } - }, - "required": [ - "title" - ] - }, - "SearchConditionTitleSort": { - "properties": { - "titleSort": { - "$ref": "#/components/schemas/SearchOperatorString" - } - }, - "required": [ - "titleSort" - ] - }, - "SearchOperatorAfter": { - "properties": { - "dateTime": { - "type": "string", - "format": "date-time" - } - }, - "required": [ - "dateTime" - ] - }, - "SearchOperatorBefore": { - "properties": { - "dateTime": { - "type": "string", - "format": "date-time" - } - }, - "required": [ - "dateTime" - ] - }, - "SearchOperatorBeginsWith": { - "properties": { - "value": { - "type": "string" - } - }, - "required": [ - "value" - ] - }, - "SearchOperatorBoolean": { - "discriminator": { - "mapping": { - "isFalse": "#/components/schemas/SearchOperatorIsFalse", - "isTrue": "#/components/schemas/SearchOperatorIsTrue" - }, - "propertyName": "operator" - }, - "oneOf": [ - { - "$ref": "#/components/schemas/SearchOperatorIsTrue" - }, - { - "$ref": "#/components/schemas/SearchOperatorIsFalse" - } - ], - "properties": { - "operator": { - "type": "string" - } - }, - "required": [ - "operator" - ] - }, - "SearchOperatorContains": { - "properties": { - "value": { - "type": "string" - } - }, - "required": [ - "value" - ] - }, - "SearchOperatorDate": { - "discriminator": { - "mapping": { - "after": "#/components/schemas/SearchOperatorAfter", - "before": "#/components/schemas/SearchOperatorBefore", - "isInTheLast": "#/components/schemas/SearchOperatorIsInTheLast", - "isNotInTheLast": "#/components/schemas/SearchOperatorIsNotInTheLast", - "isNotNull": "#/components/schemas/SearchOperatorIsNotNull", - "isNull": "#/components/schemas/SearchOperatorIsNull" - }, - "propertyName": "operator" - }, - "oneOf": [ - { - "$ref": "#/components/schemas/SearchOperatorBefore" - }, - { - "$ref": "#/components/schemas/SearchOperatorAfter" - }, - { - "$ref": "#/components/schemas/SearchOperatorIsInTheLast" - }, - { - "$ref": "#/components/schemas/SearchOperatorIsNotInTheLast" - }, - { - "$ref": "#/components/schemas/SearchOperatorIsNull" - }, - { - "$ref": "#/components/schemas/SearchOperatorIsNotNull" - } - ], - "properties": { - "operator": { - "type": "string" - } - }, - "required": [ - "operator" - ] - }, - "SearchOperatorDoesNotBeginWith": { - "properties": { - "value": { - "type": "string" - } - }, - "required": [ - "value" - ] - }, - "SearchOperatorDoesNotContain": { - "properties": { - "value": { - "type": "string" - } - }, - "required": [ - "value" - ] - }, - "SearchOperatorDoesNotEndWith": { - "properties": { - "value": { - "type": "string" - } - }, - "required": [ - "value" - ] - }, - "SearchOperatorEndsWith": { - "properties": { - "value": { - "type": "string" - } - }, - "required": [ - "value" - ] - }, - "SearchOperatorEqualityAuthorMatch": { - "discriminator": { - "mapping": { - "is": "#/components/schemas/SearchOperatorIs", - "isNot": "#/components/schemas/SearchOperatorIsNot" - }, - "propertyName": "operator" - }, - "oneOf": [ - { - "$ref": "#/components/schemas/SearchOperatorIs" - }, - { - "$ref": "#/components/schemas/SearchOperatorIsNot" - } - ], - "properties": { - "operator": { - "type": "string" - } - }, - "required": [ - "operator" - ] - }, - "SearchOperatorEqualityMediaProfile": { - "discriminator": { - "mapping": { - "is": "#/components/schemas/SearchOperatorIs", - "isNot": "#/components/schemas/SearchOperatorIsNot" - }, - "propertyName": "operator" - }, - "oneOf": [ - { - "$ref": "#/components/schemas/SearchOperatorIs" - }, - { - "$ref": "#/components/schemas/SearchOperatorIsNot" - } - ], - "properties": { - "operator": { - "type": "string" - } - }, - "required": [ - "operator" - ] - }, - "SearchOperatorEqualityNullableString": { - "discriminator": { - "mapping": { - "is": "#/components/schemas/SearchOperatorIs", - "isNot": "#/components/schemas/SearchOperatorIsNot", - "isNotNull": "#/components/schemas/SearchOperatorIsNotNullT", - "isNull": "#/components/schemas/SearchOperatorIsNullT" - }, - "propertyName": "operator" - }, - "oneOf": [ - { - "$ref": "#/components/schemas/SearchOperatorIs" - }, - { - "$ref": "#/components/schemas/SearchOperatorIsNot" - }, - { - "$ref": "#/components/schemas/SearchOperatorIsNullT" - }, - { - "$ref": "#/components/schemas/SearchOperatorIsNotNullT" - } - ], - "properties": { - "operator": { - "type": "string" - } - }, - "required": [ - "operator" - ] - }, - "SearchOperatorEqualityPosterMatch": { - "discriminator": { - "mapping": { - "is": "#/components/schemas/SearchOperatorIs", - "isNot": "#/components/schemas/SearchOperatorIsNot" - }, - "propertyName": "operator" - }, - "oneOf": [ - { - "$ref": "#/components/schemas/SearchOperatorIs" - }, - { - "$ref": "#/components/schemas/SearchOperatorIsNot" - } - ], - "properties": { - "operator": { - "type": "string" - } - }, - "required": [ - "operator" - ] - }, - "SearchOperatorEqualityReadStatus": { - "discriminator": { - "mapping": { - "is": "#/components/schemas/SearchOperatorIs", - "isNot": "#/components/schemas/SearchOperatorIsNot" - }, - "propertyName": "operator" - }, - "oneOf": [ - { - "$ref": "#/components/schemas/SearchOperatorIs" - }, - { - "$ref": "#/components/schemas/SearchOperatorIsNot" - } - ], - "properties": { - "operator": { - "type": "string" - } - }, - "required": [ - "operator" - ] - }, - "SearchOperatorEqualityStatus": { - "discriminator": { - "mapping": { - "is": "#/components/schemas/SearchOperatorIs", - "isNot": "#/components/schemas/SearchOperatorIsNot" - }, - "propertyName": "operator" - }, - "oneOf": [ - { - "$ref": "#/components/schemas/SearchOperatorIs" - }, - { - "$ref": "#/components/schemas/SearchOperatorIsNot" - } - ], - "properties": { - "operator": { - "type": "string" - } - }, - "required": [ - "operator" - ] - }, - "SearchOperatorEqualityString": { - "discriminator": { - "mapping": { - "is": "#/components/schemas/SearchOperatorIs", - "isNot": "#/components/schemas/SearchOperatorIsNot" - }, - "propertyName": "operator" - }, - "oneOf": [ - { - "$ref": "#/components/schemas/SearchOperatorIs" - }, - { - "$ref": "#/components/schemas/SearchOperatorIsNot" - } - ], - "properties": { - "operator": { - "type": "string" - } - }, - "required": [ - "operator" - ] - }, - "SearchOperatorGreaterThan": { - "properties": { - "value": {} - }, - "required": [ - "value" - ] - }, - "SearchOperatorIs": { - "properties": { - "value": {} - }, - "required": [ - "value" - ] - }, - "SearchOperatorIsFalse": { - "allOf": [ - { - "$ref": "#/components/schemas/SearchOperatorBoolean" - } - ] - }, - "SearchOperatorIsInTheLast": { - "properties": { - "duration": { - "type": "string" - } - }, - "required": [ - "duration" - ] - }, - "SearchOperatorIsNot": { - "properties": { - "value": {} - }, - "required": [ - "value" - ] - }, - "SearchOperatorIsNotInTheLast": { - "properties": { - "duration": { - "type": "string" - } - }, - "required": [ - "duration" - ] - }, - "SearchOperatorIsNotNull": { - "allOf": [ - { - "$ref": "#/components/schemas/SearchOperatorDate" - } - ] - }, - "SearchOperatorIsNotNullT": { - "allOf": [ - { - "$ref": "#/components/schemas/SearchOperatorNumericNullableInteger" - }, - { - "$ref": "#/components/schemas/SearchOperatorEqualityNullableString" - } - ] - }, - "SearchOperatorIsNull": { - "allOf": [ - { - "$ref": "#/components/schemas/SearchOperatorDate" - } - ] - }, - "SearchOperatorIsNullT": { - "allOf": [ - { - "$ref": "#/components/schemas/SearchOperatorNumericNullableInteger" - }, - { - "$ref": "#/components/schemas/SearchOperatorEqualityNullableString" - } - ] - }, - "SearchOperatorIsTrue": { - "allOf": [ - { - "$ref": "#/components/schemas/SearchOperatorBoolean" - } - ] - }, - "SearchOperatorLessThan": { - "properties": { - "value": {} - }, - "required": [ - "value" - ] - }, - "SearchOperatorNumericNullableInteger": { - "discriminator": { - "mapping": { - "greaterThan": "#/components/schemas/SearchOperatorGreaterThan", - "is": "#/components/schemas/SearchOperatorIs", - "isNot": "#/components/schemas/SearchOperatorIsNot", - "isNotNull": "#/components/schemas/SearchOperatorIsNotNullT", - "isNull": "#/components/schemas/SearchOperatorIsNullT", - "lessThan": "#/components/schemas/SearchOperatorLessThan" - }, - "propertyName": "operator" - }, - "oneOf": [ - { - "$ref": "#/components/schemas/SearchOperatorGreaterThan" - }, - { - "$ref": "#/components/schemas/SearchOperatorLessThan" - }, - { - "$ref": "#/components/schemas/SearchOperatorIsNullT" - }, - { - "$ref": "#/components/schemas/SearchOperatorIsNotNullT" - }, - { - "$ref": "#/components/schemas/SearchOperatorIs" - }, - { - "$ref": "#/components/schemas/SearchOperatorIsNot" - } - ], - "properties": { - "operator": { - "type": "string" - } - }, - "required": [ - "operator" - ] - }, - "SearchOperatorNumericTFloat": { - "discriminator": { - "mapping": { - "greaterThan": "#/components/schemas/SearchOperatorGreaterThan", - "is": "#/components/schemas/SearchOperatorIs", - "isNot": "#/components/schemas/SearchOperatorIsNot", - "lessThan": "#/components/schemas/SearchOperatorLessThan" - }, - "propertyName": "operator" - }, - "oneOf": [ - { - "$ref": "#/components/schemas/SearchOperatorGreaterThan" - }, - { - "$ref": "#/components/schemas/SearchOperatorLessThan" - }, - { - "$ref": "#/components/schemas/SearchOperatorIs" - }, - { - "$ref": "#/components/schemas/SearchOperatorIsNot" - } - ], - "properties": { - "operator": { - "type": "string" - } - }, - "required": [ - "operator" - ] - }, - "SearchOperatorString": { - "discriminator": { - "mapping": { - "beginsWith": "#/components/schemas/SearchOperatorBeginsWith", - "contains": "#/components/schemas/SearchOperatorContains", - "doesNotBeginWith": "#/components/schemas/SearchOperatorDoesNotBeginWith", - "doesNotContain": "#/components/schemas/SearchOperatorDoesNotContain", - "doesNotEndWith": "#/components/schemas/SearchOperatorDoesNotEndWith", - "endsWith": "#/components/schemas/SearchOperatorEndsWith", - "is": "#/components/schemas/SearchOperatorIs", - "isNot": "#/components/schemas/SearchOperatorIsNot" - }, - "propertyName": "operator" - }, - "oneOf": [ - { - "$ref": "#/components/schemas/SearchOperatorBeginsWith" - }, - { - "$ref": "#/components/schemas/SearchOperatorDoesNotBeginWith" - }, - { - "$ref": "#/components/schemas/SearchOperatorContains" - }, - { - "$ref": "#/components/schemas/SearchOperatorDoesNotContain" - }, - { - "$ref": "#/components/schemas/SearchOperatorEndsWith" - }, - { - "$ref": "#/components/schemas/SearchOperatorDoesNotEndWith" - }, - { - "$ref": "#/components/schemas/SearchOperatorIs" - }, - { - "$ref": "#/components/schemas/SearchOperatorIsNot" - } - ], - "properties": { - "operator": { - "type": "string" - } - }, - "required": [ - "operator" - ] - }, + "Series": {}, "SeriesDto": { "type": "object", "properties": { @@ -12215,6 +12591,31 @@ "url" ] }, + "SeriesId": { + "allOf": [ + { + "$ref": "#/components/schemas/Book" + }, + { + "type": "object", + "properties": { + "seriesId": { + "oneOf": [ + { + "$ref": "#/components/schemas/Is" + }, + { + "$ref": "#/components/schemas/IsNot" + } + ] + } + } + } + ], + "required": [ + "seriesId" + ] + }, "SeriesMetadataDto": { "type": "object", "properties": { @@ -12488,13 +12889,96 @@ "type": "object", "properties": { "condition": { - "$ref": "#/components/schemas/SearchConditionSeries" + "oneOf": [ + { + "$ref": "#/components/schemas/AgeRating" + }, + { + "$ref": "#/components/schemas/AllOfSeries" + }, + { + "$ref": "#/components/schemas/AnyOfSeries" + }, + { + "$ref": "#/components/schemas/Author" + }, + { + "$ref": "#/components/schemas/CollectionId" + }, + { + "$ref": "#/components/schemas/Complete" + }, + { + "$ref": "#/components/schemas/Deleted" + }, + { + "$ref": "#/components/schemas/Genre" + }, + { + "$ref": "#/components/schemas/Language" + }, + { + "$ref": "#/components/schemas/LibraryId" + }, + { + "$ref": "#/components/schemas/OneShot" + }, + { + "$ref": "#/components/schemas/Publisher" + }, + { + "$ref": "#/components/schemas/ReadStatus" + }, + { + "$ref": "#/components/schemas/ReleaseDate" + }, + { + "$ref": "#/components/schemas/SeriesStatus" + }, + { + "$ref": "#/components/schemas/SharingLabel" + }, + { + "$ref": "#/components/schemas/Tag" + }, + { + "$ref": "#/components/schemas/Title" + }, + { + "$ref": "#/components/schemas/TitleSort" + } + ] }, "fullTextSearch": { "type": "string" } } }, + "SeriesStatus": { + "allOf": [ + { + "$ref": "#/components/schemas/Series" + }, + { + "type": "object", + "properties": { + "seriesStatus": { + "oneOf": [ + { + "$ref": "#/components/schemas/Is" + }, + { + "$ref": "#/components/schemas/IsNot" + } + ] + } + } + } + ], + "required": [ + "seriesStatus" + ] + }, "SettingMultiSourceInteger": { "type": "object", "properties": { @@ -12664,6 +13148,37 @@ "libraryIds" ] }, + "SharingLabel": { + "allOf": [ + { + "$ref": "#/components/schemas/Series" + }, + { + "type": "object", + "properties": { + "sharingLabel": { + "oneOf": [ + { + "$ref": "#/components/schemas/Is" + }, + { + "$ref": "#/components/schemas/IsNot" + }, + { + "$ref": "#/components/schemas/IsNotNullT" + }, + { + "$ref": "#/components/schemas/IsNullT" + } + ] + } + } + } + ], + "required": [ + "sharingLabel" + ] + }, "SortObject": { "type": "object", "properties": { @@ -12679,6 +13194,19 @@ } }, "StreamingResponseBody": {}, + "StringOp": { + "discriminator": { + "propertyName": "operator" + }, + "properties": { + "operator": { + "type": "string" + } + }, + "required": [ + "operator" + ] + }, "TachiyomiReadProgressDto": { "type": "object", "properties": { @@ -12772,6 +13300,40 @@ "maxNumberSort" ] }, + "Tag": { + "allOf": [ + { + "$ref": "#/components/schemas/Series" + }, + { + "type": "object", + "properties": { + "tag": { + "oneOf": [ + { + "$ref": "#/components/schemas/Is" + }, + { + "$ref": "#/components/schemas/IsNot" + }, + { + "$ref": "#/components/schemas/IsNotNullT" + }, + { + "$ref": "#/components/schemas/IsNullT" + } + ] + } + } + }, + { + "$ref": "#/components/schemas/Book" + } + ], + "required": [ + "tag" + ] + }, "Text": { "type": "object", "properties": { @@ -12954,6 +13516,95 @@ "width" ] }, + "Title": { + "allOf": [ + { + "$ref": "#/components/schemas/Series" + }, + { + "type": "object", + "properties": { + "title": { + "oneOf": [ + { + "$ref": "#/components/schemas/BeginsWith" + }, + { + "$ref": "#/components/schemas/Contains" + }, + { + "$ref": "#/components/schemas/DoesNotBeginWith" + }, + { + "$ref": "#/components/schemas/DoesNotContain" + }, + { + "$ref": "#/components/schemas/DoesNotEndWith" + }, + { + "$ref": "#/components/schemas/EndsWith" + }, + { + "$ref": "#/components/schemas/Is" + }, + { + "$ref": "#/components/schemas/IsNot" + } + ] + } + } + }, + { + "$ref": "#/components/schemas/Book" + } + ], + "required": [ + "title" + ] + }, + "TitleSort": { + "allOf": [ + { + "$ref": "#/components/schemas/Series" + }, + { + "type": "object", + "properties": { + "titleSort": { + "oneOf": [ + { + "$ref": "#/components/schemas/BeginsWith" + }, + { + "$ref": "#/components/schemas/Contains" + }, + { + "$ref": "#/components/schemas/DoesNotBeginWith" + }, + { + "$ref": "#/components/schemas/DoesNotContain" + }, + { + "$ref": "#/components/schemas/DoesNotEndWith" + }, + { + "$ref": "#/components/schemas/EndsWith" + }, + { + "$ref": "#/components/schemas/Is" + }, + { + "$ref": "#/components/schemas/IsNot" + } + ] + } + } + } + ], + "required": [ + "titleSort" + ] + }, "TransientBookDto": { "type": "object", "properties": { diff --git a/komga/src/main/kotlin/org/gotson/komga/domain/model/SearchCondition.kt b/komga/src/main/kotlin/org/gotson/komga/domain/model/SearchCondition.kt index 972d0d73..fcccf3ad 100644 --- a/komga/src/main/kotlin/org/gotson/komga/domain/model/SearchCondition.kt +++ b/komga/src/main/kotlin/org/gotson/komga/domain/model/SearchCondition.kt @@ -3,24 +3,14 @@ package org.gotson.komga.domain.model import com.fasterxml.jackson.annotation.JsonInclude import com.fasterxml.jackson.annotation.JsonProperty import com.fasterxml.jackson.annotation.JsonTypeInfo -import io.swagger.v3.oas.annotations.media.Schema class SearchCondition { - @Schema( - name = "SearchConditionBook", - oneOf = [AnyOfBook::class, AllOfBook::class, LibraryId::class, ReadListId::class, SeriesId::class, Deleted::class, OneShot::class, Title::class, ReleaseDate::class, Tag::class, NumberSort::class, ReadStatus::class, MediaStatus::class, MediaProfile::class, Author::class, Poster::class], - ) @JsonTypeInfo(use = JsonTypeInfo.Id.DEDUCTION) sealed interface Book - @Schema( - name = "SearchConditionSeries", - oneOf = [AnyOfSeries::class, AllOfSeries::class, LibraryId::class, CollectionId::class, Deleted::class, Complete::class, OneShot::class, Title::class, TitleSort::class, ReleaseDate::class, Tag::class, SharingLabel::class, Publisher::class, Language::class, Genre::class, AgeRating::class, ReadStatus::class, SeriesStatus::class, Author::class], - ) @JsonTypeInfo(use = JsonTypeInfo.Id.DEDUCTION) sealed interface Series - @Schema(name = "SearchConditionAnyOfBook") data class AnyOfBook( @JsonProperty("anyOf") val conditions: List, @@ -28,7 +18,6 @@ class SearchCondition { constructor(vararg args: Book) : this(args.toList()) } - @Schema(name = "SearchConditionAllOfBook") data class AllOfBook( @JsonProperty("allOf") val conditions: List, @@ -36,7 +25,6 @@ class SearchCondition { constructor(vararg args: Book) : this(args.toList()) } - @Schema(name = "SearchConditionAnyOfSeries") data class AnyOfSeries( @JsonProperty("anyOf") val conditions: List, @@ -44,7 +32,6 @@ class SearchCondition { constructor(vararg args: Series) : this(args.toList()) } - @Schema(name = "SearchConditionAllOfSeries") data class AllOfSeries( @JsonProperty("allOf") val conditions: List, @@ -52,140 +39,118 @@ class SearchCondition { constructor(vararg args: Series) : this(args.toList()) } - @Schema(name = "SearchConditionLibraryId") data class LibraryId( @JsonProperty("libraryId") val operator: SearchOperator.Equality, ) : Book, Series - @Schema(name = "SearchConditionCollectionId") data class CollectionId( @JsonProperty("collectionId") val operator: SearchOperator.Equality, ) : Series - @Schema(name = "SearchConditionReadListId") data class ReadListId( @JsonProperty("readListId") val operator: SearchOperator.Equality, ) : Book - @Schema(name = "SearchConditionSeriesId") data class SeriesId( @JsonProperty("seriesId") val operator: SearchOperator.Equality, ) : Book - @Schema(name = "SearchConditionDeleted") data class Deleted( @JsonProperty("deleted") val operator: SearchOperator.Boolean, ) : Book, Series - @Schema(name = "SearchConditionComplete") data class Complete( @JsonProperty("complete") val operator: SearchOperator.Boolean, ) : Series - @Schema(name = "SearchConditionOneShot") data class OneShot( @JsonProperty("oneShot") val operator: SearchOperator.Boolean, ) : Book, Series - @Schema(name = "SearchConditionTitle") data class Title( @JsonProperty("title") val operator: SearchOperator.StringOp, ) : Book, Series - @Schema(name = "SearchConditionTitleSort") data class TitleSort( @JsonProperty("titleSort") val operator: SearchOperator.StringOp, ) : Series - @Schema(name = "SearchConditionReleaseDate") data class ReleaseDate( @JsonProperty("releaseDate") val operator: SearchOperator.Date, ) : Book, Series - @Schema(name = "SearchConditionNumberSort") data class NumberSort( @JsonProperty("numberSort") val operator: SearchOperator.Numeric, ) : Book - @Schema(name = "SearchConditionTag") data class Tag( @JsonProperty("tag") val operator: SearchOperator.EqualityNullable, ) : Book, Series - @Schema(name = "SearchConditionSharingLabel") data class SharingLabel( @JsonProperty("sharingLabel") val operator: SearchOperator.EqualityNullable, ) : Series - @Schema(name = "SearchConditionPublisher") data class Publisher( @JsonProperty("publisher") val operator: SearchOperator.Equality, ) : Series - @Schema(name = "SearchConditionLanguage") data class Language( @JsonProperty("language") val operator: SearchOperator.Equality, ) : Series - @Schema(name = "SearchConditionGenre") data class Genre( @JsonProperty("genre") val operator: SearchOperator.EqualityNullable, ) : Series - @Schema(name = "SearchConditionAgeRating") data class AgeRating( @JsonProperty("ageRating") val operator: SearchOperator.NumericNullable, ) : Series - @Schema(name = "SearchConditionReadStatus") data class ReadStatus( @JsonProperty("readStatus") val operator: SearchOperator.Equality, ) : Book, Series - @Schema(name = "SearchConditionMediaStatus") data class MediaStatus( @JsonProperty("mediaStatus") val operator: SearchOperator.Equality, ) : Book - @Schema(name = "SearchConditionSeriesStatus") data class SeriesStatus( @JsonProperty("seriesStatus") val operator: SearchOperator.Equality, ) : Series - @Schema(name = "SearchConditionMediaProfile") data class MediaProfile( @JsonProperty("mediaProfile") val operator: SearchOperator.Equality, ) : Book - @Schema(name = "SearchConditionAuthor") data class Author( @JsonProperty("author") val operator: SearchOperator.Equality, @@ -198,7 +163,6 @@ class SearchCondition { val role: String? = null, ) - @Schema(name = "SearchConditionPoster") data class Poster( @JsonProperty("poster") val operator: SearchOperator.Equality, diff --git a/komga/src/main/kotlin/org/gotson/komga/domain/model/SearchOperator.kt b/komga/src/main/kotlin/org/gotson/komga/domain/model/SearchOperator.kt index 1bf000a0..8de54226 100644 --- a/komga/src/main/kotlin/org/gotson/komga/domain/model/SearchOperator.kt +++ b/komga/src/main/kotlin/org/gotson/komga/domain/model/SearchOperator.kt @@ -2,21 +2,10 @@ package org.gotson.komga.domain.model import com.fasterxml.jackson.annotation.JsonTypeInfo import com.fasterxml.jackson.annotation.JsonTypeName -import io.swagger.v3.oas.annotations.media.DiscriminatorMapping -import io.swagger.v3.oas.annotations.media.Schema import java.time.Duration import java.time.ZonedDateTime class SearchOperator { - @Schema( - name = "SearchOperatorEquality", - discriminatorProperty = "operator", - oneOf = [ Is::class, IsNot::class], - discriminatorMapping = [ - DiscriminatorMapping("is", Is::class), - DiscriminatorMapping("isNot", IsNot::class), - ], - ) @JsonTypeInfo( use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, @@ -24,17 +13,6 @@ class SearchOperator { ) sealed interface Equality - @Schema( - name = "SearchOperatorEqualityNullable", - discriminatorProperty = "operator", - oneOf = [ Is::class, IsNot::class, IsNullT::class, IsNotNullT::class], - discriminatorMapping = [ - DiscriminatorMapping("is", Is::class), - DiscriminatorMapping("isNot", IsNot::class), - DiscriminatorMapping("isNull", IsNullT::class), - DiscriminatorMapping("isNotNull", IsNotNullT::class), - ], - ) @JsonTypeInfo( use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, @@ -42,21 +20,6 @@ class SearchOperator { ) sealed interface EqualityNullable - @Schema( - name = "SearchOperatorString", - discriminatorProperty = "operator", - oneOf = [BeginsWith::class, DoesNotBeginWith::class, Contains::class, DoesNotContain::class, EndsWith::class, DoesNotEndWith::class, Is::class, IsNot::class], - discriminatorMapping = [ - DiscriminatorMapping("beginsWith", BeginsWith::class), - DiscriminatorMapping("doesNotBeginWith", DoesNotBeginWith::class), - DiscriminatorMapping("contains", Contains::class), - DiscriminatorMapping("doesNotContain", DoesNotContain::class), - DiscriminatorMapping("endsWith", EndsWith::class), - DiscriminatorMapping("doesNotEndWith", DoesNotEndWith::class), - DiscriminatorMapping("is", Is::class), - DiscriminatorMapping("isNot", IsNot::class), - ], - ) @JsonTypeInfo( use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, @@ -64,17 +27,6 @@ class SearchOperator { ) sealed interface StringOp - @Schema( - name = "SearchOperatorNumericT", - discriminatorProperty = "operator", - oneOf = [GreaterThan::class, LessThan::class, Is::class, IsNot::class], - discriminatorMapping = [ - DiscriminatorMapping("greaterThan", GreaterThan::class), - DiscriminatorMapping("lessThan", LessThan::class), - DiscriminatorMapping("is", Is::class), - DiscriminatorMapping("isNot", IsNot::class), - ], - ) @JsonTypeInfo( use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, @@ -82,19 +34,6 @@ class SearchOperator { ) sealed interface Numeric - @Schema( - name = "SearchOperatorNumericNullable", - discriminatorProperty = "operator", - oneOf = [GreaterThan::class, LessThan::class, IsNullT::class, IsNotNullT::class, Is::class, IsNot::class], - discriminatorMapping = [ - DiscriminatorMapping("greaterThan", GreaterThan::class), - DiscriminatorMapping("lessThan", LessThan::class), - DiscriminatorMapping("isNull", IsNullT::class), - DiscriminatorMapping("isNotNull", IsNotNullT::class), - DiscriminatorMapping("is", Is::class), - DiscriminatorMapping("isNot", IsNot::class), - ], - ) @JsonTypeInfo( use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, @@ -102,19 +41,6 @@ class SearchOperator { ) sealed interface NumericNullable - @Schema( - name = "SearchOperatorDate", - discriminatorProperty = "operator", - oneOf = [Before::class, After::class, IsInTheLast::class, IsNotInTheLast::class, IsNull::class, IsNotNull::class], - discriminatorMapping = [ - DiscriminatorMapping("before", Before::class), - DiscriminatorMapping("after", After::class), - DiscriminatorMapping("isInTheLast", IsInTheLast::class), - DiscriminatorMapping("isNotInTheLast", IsNotInTheLast::class), - DiscriminatorMapping("isNull", IsNull::class), - DiscriminatorMapping("isNotNull", IsNotNull::class), - ], - ) @JsonTypeInfo( use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, @@ -122,15 +48,6 @@ class SearchOperator { ) sealed interface Date - @Schema( - name = "SearchOperatorBoolean", - discriminatorProperty = "operator", - oneOf = [IsTrue::class, IsFalse::class], - discriminatorMapping = [ - DiscriminatorMapping("isTrue", IsTrue::class), - DiscriminatorMapping("isFalse", IsFalse::class), - ], - ) @JsonTypeInfo( use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, @@ -138,7 +55,6 @@ class SearchOperator { ) sealed interface Boolean - @Schema(name = "SearchOperatorIs") @JsonTypeName("is") data class Is( val value: T, @@ -148,7 +64,6 @@ class SearchOperator { Numeric, NumericNullable - @Schema(name = "SearchOperatorIsNot") @JsonTypeName("isNot") data class IsNot( val value: T, @@ -158,97 +73,80 @@ class SearchOperator { Numeric, NumericNullable - @Schema(name = "SearchOperatorContains") @JsonTypeName("contains") data class Contains( val value: String, ) : StringOp - @Schema(name = "SearchOperatorDoesNotContain") @JsonTypeName("doesNotContain") data class DoesNotContain( val value: String, ) : StringOp - @Schema(name = "SearchOperatorBeginsWith") @JsonTypeName("beginsWith") data class BeginsWith( val value: String, ) : StringOp - @Schema(name = "SearchOperatorDoesNotBeginWith") @JsonTypeName("doesNotBeginWith") data class DoesNotBeginWith( val value: String, ) : StringOp - @Schema(name = "SearchOperatorEndsWith") @JsonTypeName("endsWith") data class EndsWith( val value: String, ) : StringOp - @Schema(name = "SearchOperatorDoesNotEndWith") @JsonTypeName("doesNotEndWith") data class DoesNotEndWith( val value: String, ) : StringOp - @Schema(name = "SearchOperatorGreaterThan") @JsonTypeName("greaterThan") data class GreaterThan( val value: T, ) : Numeric, NumericNullable - @Schema(name = "SearchOperatorLessThan") @JsonTypeName("lessThan") data class LessThan( val value: T, ) : Numeric, NumericNullable - @Schema(name = "SearchOperatorBefore") @JsonTypeName("before") data class Before( val dateTime: ZonedDateTime, ) : Date - @Schema(name = "SearchOperatorAfter") @JsonTypeName("after") data class After( val dateTime: ZonedDateTime, ) : Date - @Schema(name = "SearchOperatorIsInTheLast") @JsonTypeName("isInTheLast") data class IsInTheLast( val duration: Duration, ) : Date - @Schema(name = "SearchOperatorIsNotInTheLast") @JsonTypeName("isNotInTheLast") data class IsNotInTheLast( val duration: Duration, ) : Date - @Schema(name = "SearchOperatorIsTrue") @JsonTypeName("isTrue") data object IsTrue : Boolean - @Schema(name = "SearchOperatorIsFalse") @JsonTypeName("isFalse") data object IsFalse : Boolean - @Schema(name = "SearchOperatorIsNull") @JsonTypeName("isNull") data object IsNull : Date - @Schema(name = "SearchOperatorIsNotNull") @JsonTypeName("isNotNull") data object IsNotNull : Date - @Schema(name = "SearchOperatorIsNullT") @JsonTypeName("isNull") class IsNullT : NumericNullable, @@ -262,7 +160,6 @@ class SearchOperator { override fun hashCode(): Int = javaClass.hashCode() } - @Schema(name = "SearchOperatorIsNotNullT") @JsonTypeName("isNotNull") class IsNotNullT : NumericNullable, diff --git a/komga/src/main/kotlin/org/gotson/komga/domain/persistence/ThumbnailBookRepository.kt b/komga/src/main/kotlin/org/gotson/komga/domain/persistence/ThumbnailBookRepository.kt index 5e3129fd..71cb0275 100644 --- a/komga/src/main/kotlin/org/gotson/komga/domain/persistence/ThumbnailBookRepository.kt +++ b/komga/src/main/kotlin/org/gotson/komga/domain/persistence/ThumbnailBookRepository.kt @@ -21,10 +21,6 @@ interface ThumbnailBookRepository { fun existsById(thumbnailId: String): Boolean - fun getLibraryIdOrNull(thumbnailId: String): String? - - fun getSeriesIdOrNull(thumbnailId: String): String? - fun insert(thumbnail: ThumbnailBook) fun update(thumbnail: ThumbnailBook) diff --git a/komga/src/main/kotlin/org/gotson/komga/infrastructure/jooq/main/ThumbnailBookDao.kt b/komga/src/main/kotlin/org/gotson/komga/infrastructure/jooq/main/ThumbnailBookDao.kt index e5fba456..f3c0a90b 100644 --- a/komga/src/main/kotlin/org/gotson/komga/infrastructure/jooq/main/ThumbnailBookDao.kt +++ b/komga/src/main/kotlin/org/gotson/komga/infrastructure/jooq/main/ThumbnailBookDao.kt @@ -22,7 +22,6 @@ class ThumbnailBookDao( ) : SplitDslDaoBase(dslRW, dslRO), ThumbnailBookRepository { private val tb = Tables.THUMBNAIL_BOOK - private val b = Tables.BOOK override fun findAllByBookId(bookId: String): Collection = dslRO @@ -73,24 +72,6 @@ class ThumbnailBookDao( override fun existsById(thumbnailId: String): Boolean = dslRO.fetchExists(tb, tb.ID.eq(thumbnailId)) - override fun getLibraryIdOrNull(thumbnailId: String): String? = - dslRO - .select(b.LIBRARY_ID) - .from(tb) - .leftJoin(b) - .on(tb.BOOK_ID.eq(b.ID)) - .where(tb.ID.eq(thumbnailId)) - .fetchOne(b.LIBRARY_ID) - - override fun getSeriesIdOrNull(thumbnailId: String): String? = - dslRO - .select(b.SERIES_ID) - .from(tb) - .leftJoin(b) - .on(tb.BOOK_ID.eq(b.ID)) - .where(tb.ID.eq(thumbnailId)) - .fetchOne(b.SERIES_ID) - override fun insert(thumbnail: ThumbnailBook) { dslRW .insertInto(tb) diff --git a/komga/src/main/kotlin/org/gotson/komga/infrastructure/kobo/KoboProxy.kt b/komga/src/main/kotlin/org/gotson/komga/infrastructure/kobo/KoboProxy.kt index dd93877e..2df061ec 100644 --- a/komga/src/main/kotlin/org/gotson/komga/infrastructure/kobo/KoboProxy.kt +++ b/komga/src/main/kotlin/org/gotson/komga/infrastructure/kobo/KoboProxy.kt @@ -74,7 +74,7 @@ class KoboProxy( * raw Kobo sync token returned, and added to the response headers. */ fun proxyCurrentRequest( - body: ByteArray? = null, + body: Any? = null, includeSyncToken: Boolean = false, ): ResponseEntity { if (!komgaSettingsProvider.koboProxy) throw IllegalStateException("kobo proxying is disabled") diff --git a/komga/src/main/kotlin/org/gotson/komga/infrastructure/mediacontainer/divina/RarExtractor.kt b/komga/src/main/kotlin/org/gotson/komga/infrastructure/mediacontainer/divina/RarExtractor.kt index a9aa32e0..cf5f1249 100644 --- a/komga/src/main/kotlin/org/gotson/komga/infrastructure/mediacontainer/divina/RarExtractor.kt +++ b/komga/src/main/kotlin/org/gotson/komga/infrastructure/mediacontainer/divina/RarExtractor.kt @@ -28,6 +28,7 @@ class RarExtractor( ): List = Archive(path.toFile()).use { rar -> if (rar.isPasswordProtected) throw MediaUnsupportedException("Encrypted RAR archives are not supported", "ERR_1002") + if (rar.mainHeader.isSolid) throw MediaUnsupportedException("Solid RAR archives are not supported", "ERR_1003") if (rar.mainHeader.isMultiVolume) throw MediaUnsupportedException("Multi-Volume RAR archives are not supported", "ERR_1004") rar.fileHeaders .filter { !it.isDirectory } diff --git a/komga/src/main/kotlin/org/gotson/komga/infrastructure/mediacontainer/epub/Nav.kt b/komga/src/main/kotlin/org/gotson/komga/infrastructure/mediacontainer/epub/Nav.kt index 55942639..e4e0e6f9 100644 --- a/komga/src/main/kotlin/org/gotson/komga/infrastructure/mediacontainer/epub/Nav.kt +++ b/komga/src/main/kotlin/org/gotson/komga/infrastructure/mediacontainer/epub/Nav.kt @@ -4,7 +4,6 @@ import org.gotson.komga.domain.model.EpubTocEntry import org.gotson.komga.infrastructure.util.getEntryBytes import org.jsoup.Jsoup import org.jsoup.nodes.Element -import org.jsoup.parser.Parser import java.net.URLDecoder import java.nio.file.Path import kotlin.io.path.Path @@ -21,7 +20,7 @@ fun processNav( document: ResourceContent, navElement: Epub3Nav, ): List { - val doc = Jsoup.parse(document.content, "", Parser.xmlParser()) + val doc = Jsoup.parse(document.content) val nav = doc .select("nav") diff --git a/komga/src/main/kotlin/org/gotson/komga/infrastructure/openapi/InheritanceFlattenerConfiguration.kt b/komga/src/main/kotlin/org/gotson/komga/infrastructure/openapi/InheritanceFlattenerConfiguration.kt deleted file mode 100644 index 7afc4d77..00000000 --- a/komga/src/main/kotlin/org/gotson/komga/infrastructure/openapi/InheritanceFlattenerConfiguration.kt +++ /dev/null @@ -1,44 +0,0 @@ -package org.gotson.komga.infrastructure.openapi - -import org.springdoc.core.customizers.OpenApiCustomizer -import org.springframework.context.annotation.Bean -import org.springframework.context.annotation.Configuration -import org.springframework.core.Ordered -import org.springframework.core.annotation.Order - -/** - * The generated schema for sealed classes is somehow wrong. - * This customizer will correct the issues. - */ -@Configuration -@Order(Ordered.LOWEST_PRECEDENCE) -class InheritanceFlattenerConfiguration { - private val schemaPrefix = listOf("SearchOperator", "SearchCondition") - - @Bean - fun flattenInheritedSchemasCustomizer(): OpenApiCustomizer = - OpenApiCustomizer { openApi -> - openApi.components - ?.schemas - ?.values - ?.filter { schema -> schemaPrefix.any { prefix -> schema.name.startsWith(prefix, false) } } - ?.forEach { schema -> - // Swagger models inheritance as an allOf list with exactly two items: - // 1. The $ref to the parent interface - // 2. An inline schema containing the child's actual properties - if (schema.allOf != null) { - val refSchema = schema.allOf.filter { it.`$ref` != null } - val inlineSchema = schema.allOf.find { it.properties != null } - - // If both are found, we know this is an inherited schema wrapper - if (refSchema.isNotEmpty() && inlineSchema != null) { - // Move the properties up to the root schema - schema.properties = inlineSchema.properties - - // Delete the allOf array entirely - schema.allOf = null - } - } - } - } -} diff --git a/komga/src/main/kotlin/org/gotson/komga/interfaces/api/ContentRestrictionChecker.kt b/komga/src/main/kotlin/org/gotson/komga/interfaces/api/ContentRestrictionChecker.kt index fc7d4350..4b54c5e7 100644 --- a/komga/src/main/kotlin/org/gotson/komga/interfaces/api/ContentRestrictionChecker.kt +++ b/komga/src/main/kotlin/org/gotson/komga/interfaces/api/ContentRestrictionChecker.kt @@ -4,7 +4,6 @@ import org.gotson.komga.domain.model.Book import org.gotson.komga.domain.model.KomgaUser import org.gotson.komga.domain.persistence.BookRepository import org.gotson.komga.domain.persistence.SeriesMetadataRepository -import org.gotson.komga.domain.persistence.ThumbnailBookRepository import org.gotson.komga.interfaces.api.rest.dto.BookDto import org.gotson.komga.interfaces.api.rest.dto.SeriesDto import org.springframework.http.HttpStatus @@ -15,7 +14,6 @@ import org.springframework.web.server.ResponseStatusException class ContentRestrictionChecker( private val seriesMetadataRepository: SeriesMetadataRepository, private val bookRepository: BookRepository, - private val thumbnailBookRepository: ThumbnailBookRepository, ) { /** * Convenience function to check for content restriction. @@ -86,26 +84,4 @@ class ContentRestrictionChecker( if (!komgaUser.canAccessLibrary(series.libraryId)) throw ResponseStatusException(HttpStatus.FORBIDDEN) if (!komgaUser.isContentAllowed(series.metadata.ageRating, series.metadata.sharingLabels)) throw ResponseStatusException(HttpStatus.FORBIDDEN) } - - /** - * Convenience function to check for content restriction. - * - * @throws[ResponseStatusException] if the user cannot access the content - */ - fun checkContentRestrictionBookThumbnail( - komgaUser: KomgaUser, - thumbnailId: String, - ) { - if (!komgaUser.canAccessAllLibraries()) { - thumbnailBookRepository.getLibraryIdOrNull(thumbnailId)?.let { - if (!komgaUser.canAccessLibrary(it)) throw ResponseStatusException(HttpStatus.FORBIDDEN) - } ?: throw ResponseStatusException(HttpStatus.NOT_FOUND) - } - if (komgaUser.restrictions.isRestricted) - thumbnailBookRepository.getSeriesIdOrNull(thumbnailId)?.let { seriesId -> - seriesMetadataRepository.findById(seriesId).let { - if (!komgaUser.isContentAllowed(it.ageRating, it.sharingLabels)) throw ResponseStatusException(HttpStatus.FORBIDDEN) - } - } ?: throw ResponseStatusException(HttpStatus.NOT_FOUND) - } } diff --git a/komga/src/main/kotlin/org/gotson/komga/interfaces/api/OpdsGenerator.kt b/komga/src/main/kotlin/org/gotson/komga/interfaces/api/OpdsGenerator.kt index c5a8523c..fae1f9dc 100644 --- a/komga/src/main/kotlin/org/gotson/komga/interfaces/api/OpdsGenerator.kt +++ b/komga/src/main/kotlin/org/gotson/komga/interfaces/api/OpdsGenerator.kt @@ -92,7 +92,7 @@ class OpdsGenerator( links = listOf( WPLinkDto(rel = "help", href = "https://komga.org"), - WPLinkDto(rel = "logo", href = ServletUriComponentsBuilder.fromCurrentContextPath().pathSegment("android-chrome-512x512.png").toUriString()), + WPLinkDto(rel = "logo", href = ServletUriComponentsBuilder.fromCurrentContextPath().path("android-chrome-512x512.png").toUriString()), ), authentication = listOf( diff --git a/komga/src/main/kotlin/org/gotson/komga/interfaces/api/kobo/KoboController.kt b/komga/src/main/kotlin/org/gotson/komga/interfaces/api/kobo/KoboController.kt index b54abfe3..53eb11a6 100644 --- a/komga/src/main/kotlin/org/gotson/komga/interfaces/api/kobo/KoboController.kt +++ b/komga/src/main/kotlin/org/gotson/komga/interfaces/api/kobo/KoboController.kt @@ -3,7 +3,6 @@ package org.gotson.komga.interfaces.api.kobo import com.fasterxml.jackson.databind.JsonNode import com.fasterxml.jackson.databind.ObjectMapper import com.fasterxml.jackson.databind.node.ObjectNode -import com.fasterxml.jackson.module.kotlin.readValue import com.fasterxml.jackson.module.kotlin.treeToValue import com.github.benmanes.caffeine.cache.Caffeine import io.github.oshai.kotlinlogging.KotlinLogging @@ -175,7 +174,6 @@ class KoboController( private val imageConverter: ImageConverter, private val mediaRepository: MediaRepository, private val contentRestrictionChecker: ContentRestrictionChecker, - private val objectMapper: ObjectMapper, ) { private val cachedKepub = Caffeine @@ -232,16 +230,14 @@ class KoboController( */ @PostMapping("v1/auth/device") fun authDevice( - @RequestBody rawBody: ByteArray, + @RequestBody body: JsonNode, ): Any { try { - return koboProxy.proxyCurrentRequest(rawBody) + return koboProxy.proxyCurrentRequest(body) } catch (_: Exception) { logger.warn { "Failed to get response from Kobo /v1/auth/device, fallback to noproxy" } } - val body = objectMapper.readTree(rawBody) - /** * Komga does not use the /v1/auth/device API call for authentication/authorization. * Return dummy data to keep the device happy. @@ -516,17 +512,13 @@ class KoboController( */ @GetMapping("/v1/library/{bookId}/metadata") fun getBookMetadata( - @AuthenticationPrincipal principal: KomgaPrincipal, @PathVariable authToken: String, @PathVariable bookId: String, ): ResponseEntity<*> = - if (!bookRepository.existsById(bookId) && koboProxy.isEnabled()) { + if (!bookRepository.existsById(bookId) && koboProxy.isEnabled()) koboProxy.proxyCurrentRequest() - } else { - contentRestrictionChecker.checkContentRestriction(principal.user, bookId) - + else ResponseEntity.ok(koboDtoRepository.findBookMetadataByIds(listOf(bookId)).map { it.withDownloadUrls(getDownloadUrlBuilder(authToken)) }) - } /** * @return an array of [ReadingStateDto] @@ -543,8 +535,6 @@ class KoboController( else throw ResponseStatusException(HttpStatus.NOT_FOUND) - contentRestrictionChecker.checkContentRestriction(principal.user, book) - val response = readProgressRepository.findByBookIdAndUserIdOrNull(bookId, principal.user.id)?.toDto() ?: getEmptyReadProgressForBook(book) return ResponseEntity.ok(listOf(response)) } @@ -556,20 +546,16 @@ class KoboController( fun updateState( @AuthenticationPrincipal principal: KomgaPrincipal, @PathVariable bookId: String, - @RequestBody rawBody: ByteArray, + @RequestBody body: ReadingStateStateUpdateDto, @RequestHeader(name = X_KOBO_DEVICEID, required = false) koboDeviceId: String = "unknown", ): ResponseEntity<*> { - val body = objectMapper.readValue(rawBody) - val book = bookRepository.findByIdOrNull(bookId) ?: if (koboProxy.isEnabled()) - return koboProxy.proxyCurrentRequest(rawBody) + return koboProxy.proxyCurrentRequest(body) else throw ResponseStatusException(HttpStatus.NOT_FOUND) - contentRestrictionChecker.checkContentRestriction(principal.user, book) - val koboUpdate = body.readingStates.firstOrNull() ?: throw ResponseStatusException(HttpStatus.BAD_REQUEST) if (koboUpdate.currentBookmark.location == null || koboUpdate.currentBookmark.contentSourceProgressPercent == null) throw ResponseStatusException(HttpStatus.BAD_REQUEST) @@ -733,8 +719,6 @@ class KoboController( .location(UriComponentsBuilder.fromUriString(koboProxy.imageHostUrl).buildAndExpand(thumbnailId, width, height).toUri()) .build() } else { - contentRestrictionChecker.checkContentRestrictionBookThumbnail(principal.user, thumbnailId) - val poster = bookLifecycle.getThumbnailBytesByThumbnailId(thumbnailId) ?: throw ResponseStatusException(HttpStatus.NOT_FOUND) val posterBytes = if (poster.mediaType != ImageType.JPEG.mediaType) @@ -749,7 +733,7 @@ class KoboController( method = [RequestMethod.GET, RequestMethod.PUT, RequestMethod.POST, RequestMethod.DELETE, RequestMethod.PATCH], ) fun catchAll( - @RequestBody body: ByteArray?, + @RequestBody body: Any?, ): ResponseEntity = if (koboProxy.isEnabled()) koboProxy.proxyCurrentRequest(body) diff --git a/komga/src/main/kotlin/org/gotson/komga/interfaces/api/kosync/KoreaderSyncController.kt b/komga/src/main/kotlin/org/gotson/komga/interfaces/api/kosync/KoreaderSyncController.kt index fcec13fd..8057cd0e 100644 --- a/komga/src/main/kotlin/org/gotson/komga/interfaces/api/kosync/KoreaderSyncController.kt +++ b/komga/src/main/kotlin/org/gotson/komga/interfaces/api/kosync/KoreaderSyncController.kt @@ -14,7 +14,6 @@ import org.gotson.komga.infrastructure.security.KomgaPrincipal import org.gotson.komga.interfaces.api.kosync.dto.DocumentProgressDto import org.gotson.komga.interfaces.api.kosync.dto.UserAuthenticationDto import org.springframework.http.HttpStatus -import org.springframework.http.MediaType import org.springframework.http.ResponseEntity import org.springframework.security.core.annotation.AuthenticationPrincipal import org.springframework.web.bind.annotation.GetMapping @@ -30,7 +29,7 @@ import java.time.ZonedDateTime private val logger = KotlinLogging.logger {} @RestController -@RequestMapping("/koreader", produces = [MediaType.APPLICATION_JSON_VALUE, "application/vnd.koreader.v1+json"]) +@RequestMapping("/koreader", produces = ["application/vnd.koreader.v1+json"]) class KoreaderSyncController( private val bookRepository: BookRepository, private val mediaRepository: MediaRepository, diff --git a/komga/src/main/kotlin/org/gotson/komga/interfaces/api/opds/v2/Opds2Controller.kt b/komga/src/main/kotlin/org/gotson/komga/interfaces/api/opds/v2/Opds2Controller.kt index 79af9899..f2c6140a 100644 --- a/komga/src/main/kotlin/org/gotson/komga/interfaces/api/opds/v2/Opds2Controller.kt +++ b/komga/src/main/kotlin/org/gotson/komga/interfaces/api/opds/v2/Opds2Controller.kt @@ -435,7 +435,7 @@ class Opds2Controller( PageRequest.of(page.pageNumber, page.pageSize, Sort.by(Sort.Order.desc("lastModified"))), ).map { it.toWPLinkDto() } - val uriBuilder = uriBuilder("libraries${if (library != null) "/${library.id}" else ""}/series/latest") + val uriBuilder = uriBuilder("libraries${if (library != null) "/${library.id}" else ""}/books/latest") return FeedDto( metadata = diff --git a/komga/src/main/kotlin/org/gotson/komga/interfaces/api/rest/UserController.kt b/komga/src/main/kotlin/org/gotson/komga/interfaces/api/rest/UserController.kt index 1b5be42d..06336243 100644 --- a/komga/src/main/kotlin/org/gotson/komga/interfaces/api/rest/UserController.kt +++ b/komga/src/main/kotlin/org/gotson/komga/interfaces/api/rest/UserController.kt @@ -112,12 +112,10 @@ class UserController( restrictions = ContentRestrictions( ageRestriction = - ageRestriction.let { - if (it == null || it.restriction == AllowExcludeDto.NONE) - null - else - AgeRestriction(it.age, it.restriction.toDomain()) - }, + if (ageRestriction == null || ageRestriction.restriction == AllowExcludeDto.NONE) + null + else + AgeRestriction(ageRestriction.age, ageRestriction.restriction.toDomain()), labelsAllow = labelsAllow ?: emptySet(), labelsExclude = labelsExclude ?: emptySet(), ), diff --git a/komga/src/main/kotlin/org/gotson/komga/interfaces/api/rest/dto/UserDto.kt b/komga/src/main/kotlin/org/gotson/komga/interfaces/api/rest/dto/UserDto.kt index 026f9776..ee425a30 100644 --- a/komga/src/main/kotlin/org/gotson/komga/interfaces/api/rest/dto/UserDto.kt +++ b/komga/src/main/kotlin/org/gotson/komga/interfaces/api/rest/dto/UserDto.kt @@ -1,12 +1,10 @@ package org.gotson.komga.interfaces.api.rest.dto -import com.fasterxml.jackson.annotation.JsonInclude import org.gotson.komga.domain.model.AgeRestriction import org.gotson.komga.domain.model.AllowExclude import org.gotson.komga.domain.model.KomgaUser import org.gotson.komga.infrastructure.security.KomgaPrincipal -@JsonInclude(JsonInclude.Include.NON_NULL) data class UserDto( val id: String, val email: String, diff --git a/komga/src/test/kotlin/org/gotson/komga/domain/service/BookAnalyzerTest.kt b/komga/src/test/kotlin/org/gotson/komga/domain/service/BookAnalyzerTest.kt index 73dcf128..24981f94 100644 --- a/komga/src/test/kotlin/org/gotson/komga/domain/service/BookAnalyzerTest.kt +++ b/komga/src/test/kotlin/org/gotson/komga/domain/service/BookAnalyzerTest.kt @@ -59,21 +59,14 @@ class BookAnalyzerTest( assertThat(media.pages).hasSize(3) } - @Test - fun `given rar4 solid archive when analyzing then media status is READY`() { - val file = ClassPathResource("archives/rar4-solid.rar") - val book = Book("book", file.url, LocalDateTime.now()) - - val media = bookAnalyzer.analyze(book, false) - - assertThat(media.mediaType).isEqualTo("application/x-rar-compressed; version=4") - assertThat(media.status).isEqualTo(Media.Status.READY) - assertThat(media.pages).hasSize(3) - } - - @Test - fun `given rar4 encrypted archive when analyzing then media status is UNSUPPORTED`() { - val file = ClassPathResource("archives/rar4-encrypted.rar") + @ParameterizedTest + @ValueSource( + strings = [ + "rar4-solid.rar", "rar4-encrypted.rar", + ], + ) + fun `given rar4 solid or encrypted archive when analyzing then media status is UNSUPPORTED`(fileName: String) { + val file = ClassPathResource("archives/$fileName") val book = Book("book", file.url, LocalDateTime.now()) val media = bookAnalyzer.analyze(book, false) diff --git a/komga/src/test/kotlin/org/gotson/komga/infrastructure/mediacontainer/epub/OpfTest.kt b/komga/src/test/kotlin/org/gotson/komga/infrastructure/mediacontainer/epub/OpfTest.kt index 91afc1cd..11c0a775 100644 --- a/komga/src/test/kotlin/org/gotson/komga/infrastructure/mediacontainer/epub/OpfTest.kt +++ b/komga/src/test/kotlin/org/gotson/komga/infrastructure/mediacontainer/epub/OpfTest.kt @@ -3,7 +3,6 @@ package org.gotson.komga.infrastructure.mediacontainer.epub import org.assertj.core.api.Assertions.assertThat import org.gotson.komga.domain.model.EpubTocEntry import org.jsoup.Jsoup -import org.jsoup.parser.Parser import org.junit.jupiter.params.ParameterizedTest import org.junit.jupiter.params.provider.ValueSource import org.springframework.core.io.ClassPathResource @@ -16,7 +15,7 @@ class OpfTest { // given val opfResource = ClassPathResource("epub/clash.opf") val opfString = opfResource.inputStream.readAllBytes().decodeToString() - val opfDoc = Jsoup.parse(opfString, "", Parser.xmlParser()) + val opfDoc = Jsoup.parse(opfString) // when val opfLandmarks = processOpfGuide(opfDoc, if (prefix.isBlank()) null else Path.of(prefix)) diff --git a/komga/src/test/kotlin/org/gotson/komga/interfaces/api/kosync/KoreaderSyncControllerTest.kt b/komga/src/test/kotlin/org/gotson/komga/interfaces/api/kosync/KoreaderSyncControllerTest.kt index 16011c5b..a1e8521f 100644 --- a/komga/src/test/kotlin/org/gotson/komga/interfaces/api/kosync/KoreaderSyncControllerTest.kt +++ b/komga/src/test/kotlin/org/gotson/komga/interfaces/api/kosync/KoreaderSyncControllerTest.kt @@ -7,13 +7,9 @@ import org.gotson.komga.domain.service.KomgaUserLifecycle import org.junit.jupiter.api.AfterAll import org.junit.jupiter.api.BeforeAll import org.junit.jupiter.api.Test -import org.junit.jupiter.params.ParameterizedTest -import org.junit.jupiter.params.provider.ValueSource import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc import org.springframework.boot.test.context.SpringBootTest -import org.springframework.http.HttpHeaders -import org.springframework.http.MediaType import org.springframework.test.web.servlet.MockMvc import org.springframework.test.web.servlet.get import org.springframework.test.web.servlet.post @@ -72,17 +68,4 @@ class KoreaderSyncControllerTest( jsonPath("authorized") { value("OK") } } } - - @ParameterizedTest - @ValueSource(strings = [MediaType.APPLICATION_JSON_VALUE, "application/vnd.koreader.v1+json"]) - fun `given accept header when calling API user then returns OK`(acceptHeader: String) { - mockMvc - .get("/koreader/users/auth") { - header("x-auth-user", apiKey) - header(HttpHeaders.ACCEPT, acceptHeader) - }.andExpect { - status { isOk() } - jsonPath("authorized") { value("OK") } - } - } } diff --git a/komga/src/test/kotlin/org/gotson/komga/interfaces/api/rest/UserControllerTest.kt b/komga/src/test/kotlin/org/gotson/komga/interfaces/api/rest/UserControllerTest.kt index 55d74e1b..3e39faf0 100644 --- a/komga/src/test/kotlin/org/gotson/komga/interfaces/api/rest/UserControllerTest.kt +++ b/komga/src/test/kotlin/org/gotson/komga/interfaces/api/rest/UserControllerTest.kt @@ -113,7 +113,7 @@ class UserControllerTest( jsonPath("$.sharedLibrariesId") { doesNotExist() } jsonPath("$.labelsAllow") { isEmpty() } jsonPath("$.labelsExclude") { isEmpty() } - jsonPath("$.ageRestriction") { doesNotExist() } + jsonPath("$.ageRestriction") { isEmpty() } } } }